skill-creator の足りないところを他のスキルで補う
Anthropic 社が提供する skill-creator は、コーディングエージェントに対して skill を追加する際に必須とも言えるツールです。この skill はユーザーの入力テキストから精度の高い skill を生成することができます。さらに、skill の評価や改善、比較することも可能です。 しばらく使っていく中で、skill-creator で作成やレビューした skill の中で、処理が途中で停止してしまうものがあることに気づきました。 この記事では、その不具合の原因と対応方法として追加した skill について紹介します。 複数 step で長時間処理する skill で発生した問題 Claude Code 用に GitHub 上の Issue やローカルの仕様ファイルをベースに実装を行う task skill を作成し使用していました。 仕様を Issue または仕様書 Markdown で作っておいて実装するための skill です。 GitHub 上の Issue またはローカルのファイルパスを受け取る 実装方法を検討し計画する 実装を実施 codex でコードレビューを実施、必要に応じて修正を行う Pull Request を作成する この skill のうち、4 のコードレビューの部分でなぜか処理停止してしまう問題が発生していました。 処理が停止する原因 Claude Code とともに処理内容を確認したところ、4 のコードレビューの部分に問題があることがわかりました。 修正前 指摘事項を自動修正すべき項目と人間の判断が必要な 2 グループに分類 自動修正 人間の判断が必要な項目をユーザーに提示 修正後 指摘事項を自動修正すべき項目と人間の判断が必要な 2 グループに分類 指摘事項が0 件の場合は 2,3 を skip し次の処理へ進む 自動修正 人間の判断が必要な項目をユーザーに提示 指摘事項 0 件の場合に、次の処理に進んでも処理対象がない。これが原因で処理が停止していることがわかりました。 ...
Obsidianのファイル同期をobsidian-gitに切り替えた
Obsidian の同期方法を iCloud から obsidian-git に切り替えました。 iCloud を使ったファイル同期はお手軽でしたが、問題があり移行を決めました。 iCloud 同期の問題点 ファイル同期のタイミングをユーザーが操作できないため、端末を短時間で切り替えた場合に問題が発生することがありました。 症状としては、ファイルが壊れる、壊れたファイル起因で Obsidian が起動できない、といったものです。 本来であれば iPad や iPhone でもファイル編集を行いたかったのですが、これらの問題から iPad は限定的な使用に留め、iPhone ではアプリ自体を削除していました。 obsidian-git への切り替え 参考記事を元に obsidian-git を導入し、 iCloud 同期から切り替えました。 同期先は GitHub の private リポジトリを利用しています。 導入の難易度 iPhone/iPad で同期するには PAT (Personal Access Token) の設定が必要です。 この設定は普段から Git/GitHub を使っている人には特に難しくはありません。 運用する中でファイルの conflict が発生した場合に手動で解決する必要があります。 普段から Git を使っていない人にはハードルが高いかもしれません。 難しいと感じる人は Obsidian Sync を検討したほうが良さそうです。 同期タイミングの設定 obsidian-git の設定でそれぞれの端末に同期タイミングを指定します。 複数マシン間で異なる設定にするため .gitignore で .obsidian/plugins/obsidian-git/data.json を除外しています。 MacBook Pro: 60 分ごとに自動同期、必要に応じて手動で同期実行 iPad/iPhone: 自動同期なし、手動で同期実行 PC でメイン作業をし iPad/iPhone は補助的に使用する運用のための設定です。 ...
Obsidian を使い始めた
Obsidian を使い始めて 2 週間ほど経ったので記録を残しておきます。 使い始めたきっかけ もともと Markdown ノートアプリとして他のツールを使っていました。ある程度の期間使ってきたのですがユースケースに合わない場面が出てきたため今回 Obsidian に乗り換えました。 Obsidian を選んだ理由は次のとおりです。 Mac/iPad/iPhone で使えること Markdown ファイルベースでデータを管理できること コミュニティベースのプラグインが充実していること 導入前の懸念としては次のものがありました。 プラグインを活用するために設定が複雑になりすぎないか iPhone/iPad での動作に問題がないか 導入してみた結果として, 後者の動作に問題はありませんでした。 しかし前者の設定コストについてはある程度時間がかかりました。 Obsidian の設定 基本的には公式のヘルプを一通り確認しながら設定を進めました。 ここからはじめる - Obsidian 日本語ヘルプ - Obsidian Publish その後技術ブログを参考にプラグインを追加, 設定の面倒なところは ChatGPT や Gemini に相談して解決しました。 参考にした記事 Obsidianで使っているプラグイン紹介 テーマファイルを参考にして Minimal を導入: kepano/obsidian-minimal Sync your notes across devices iCloud ベースの同期設定を採用 Back up your Obsidian files obsidian-git で定期的なバックアップを設定 obsidian-git で実現する Obsidian のプラットフォームを跨いだデータ同期 - EagleLand obisidian-git の設定を参考に Personal Access Token を使った GitHub 連携を設定 導入時に苦労したこと iCloud ベースの同期を使った場合に, Mac/iPad を切り替えながら使った際に同期がうまくいかず一部設定情報が初期化されてしまう問題がありました。 解決策として obisidian-git を使ったバックアップ設定を行うことで問題を回避しています。普段使いでは Mac/iPad をほぼ同時に使うことはないので例外的に発生した問題でした。 ...
dotfile をリニューアルしました
私の作業環境を管理する各種設定ファイル(ドットファイル)の見直しを行いました。 https://github.com/yuya-matsushima/dotfiles 設定ファイルの対象は次のソフトウェアです。 zsh vim tmux git tig iTerm2 見直し箇所 zsh 環境変数の整理 PHP に関する設定項目を削除 vim プラグインの見直し PHP に関する設定項目を削除 ファイラに vim-molder を追加 .vimrc, .gvimrc ともに個別環境で設定を上書きできる .vimrc_local, .gvimrc_local の読み込み処理追加 .vimrc .gvimrc iTerm2 の設定に合わせて colorschme を変更: https://github.com/yuya-matsushima/dotfiles/blob/main/.vim/_config/300_colorscheme.vim tmux ステータスラインまわりの表示を調整しよりシンプルに git git-secrets の追加 iTerm2 Profile や配色設定を管理する様に追加: https://github.com/yuya-matsushima/dotfiles/tree/main/iterm2 動画撮影用に背景透過のプロファイルを追加 見直しの理由 PHP を書く機会がほぼなくなっているので見直したかった デスクトップの動画撮影時に必要な設定がすぐに反映できるようにしたかった 複数の端末で作業する機会が増えているので見直したかった 最後に ブログを書く機会がグッと減っているので少しずつ書くようにしたい。
GitHub のアカウント名を変更しました
GitHub のアカウント名を yterajima から yuya-matsushima に変更しました。 変更の理由 結婚を期に苗字が Terajima から Matsushima に変わりました。 それから早 5 年。 事業として利用する各種アカウントからは, terajima 名義のものはなくなり GitHub アカウントと Twitter アカウントのみ残りました。 最近ではアカウント名が本名と異なる点について説明が必要となり不便を感じていました。 そこで思い切って変更しました。 影響 公開している Go パッケージのインストール URL が変更されますが, yterajima アカウントが取得されない限りはリダイレクトされるらしいです。 姓は変わる可能性があるのでアカウント名を決める際にはご注意を。
vim の Netrw を NERDTree のような表示に設定
久しぶりに .vimrc をいじっていたら NERDTree のように vim の左側に表示させたい, という気持ちになったので設定してみました。 参考 Vim: you don’t need NERDtree or (maybe) netrw | George Ornbo netrw - Toggle explorer window - Vi and Vim Stack Exchange pi_netrw - Vim日本語ドキュメント 設定方法 次の内容を .vimrc に追記します。 "ツリー表示 "表示を変更したい場合は i で切替可能 let g:netrw_liststyle=3 "上部のバナーを非表示 " I で toggle 可能 let g:netrw_banner = 0 "window サイズ let g:netrw_winsize = 25 "Netrw で Enter 押下時の挙動設定 let g:netrw_browse_split = 4 let g:netrw_alto = 1 "Netrw を toggle する関数を設定 "元処理と異なり Vex を呼び出すことで左 window に表示 let g:NetrwIsOpen=0 function! ToggleNetrw() if g:NetrwIsOpen let i = bufnr("$") while (i >= 1) if (getbufvar(i, "&filetype") == "netrw") silent exe "bwipeout " . i endif let i-=1 endwhile let g:NetrwIsOpen=0 else let g:NetrwIsOpen=1 silent Vex endif endfunction "ショートカットの設定 "= を 2 回連続押下で toggle noremap <silent>== :call ToggleNetrw()<CR> 設定値の詳細や Netrw の操作方法は Vim の日本語ドキュメントで確認できます。P でファイルを開くことができます。 ...
オフィスにクッションフロア を貼る
先日シェアオフィスに入居する当社のスペース移動(お引っ越し) をしました。その際に床面がコンクリート剥き出しだったため素人ながらクッションフロア を敷き込んでみた話をまとめます。 本来なら業者さんに入ってもらう手段もあったのですが, 打ち合わせの時間が取れない状態だったので自分で頑張りました。 クッションフロアとは 賃貸アパートなどの床材として利用されるフローリングの大体素材です。柔らかい。部屋の模様替えでも利用されるらしく, ホームセンターでも入手が可能です。 材料自体が割安で傷がついても交換しやすい特徴があります。 入手から施工まで 1. 床面積を測る 施工対象の部屋の床面積をスケールで計測します。今回は部屋サイズが 3.6 * 3.8(?) 程度のサイズでした。 通常クッションフロア 1 枚の幅が 182 cm らしいので 2 枚ならべて敷き込めば良さそうです。 2. クッションフロア と道具の発注 以前もお世話になったことがある DIYショップRESTA さんで材料を探しました。 できるだけ予算を安く仕上げたかったため次の商品に決定しました。 抗菌・防カビ 東リ 住宅用クッションフロア (182cm巾 1.8mm厚)オーク CF9435~CF9437 | RESTA この商品を 4m * 2 本注文。さらに施工道具がないので クッションフロア貼りセット を注文。 クッションフロア を敷く為に必要な クッションフロア用両面テープ | RESTA を 45 m 分注文しました。両面テープの長さについては商品ページに詳しく説明してあったので助かりました。 3. 掃除 施工対象の床面を掃除しました。掃除機を 2 度かけ念の為拭き掃除。 4. 施工 クッションフロアの貼り方(張り方)両面テープ編|DIYショップRESTA を見て頑張る。 YouTube にも「クッションフロア 両面テープ」で施工例があるので事前に見て計画しておくと作業しやすいと思います。2 枚貼るだけでしたが 2h 近くかかりました。慣れればもっと早くできそうです。 ...
peco を使って Rails Application Template を選択する
前回の記事 で Rails の Application Template を使ってみました。 それでも Rails プロジェクトを立ち上げるには手数が多く面倒だったので peco を使ってテンプレートを選択し初期化しようと思います。 仕組み GitHub に Application Template を管理するリポジトリを用意 GitHub API を使って該当のリポジトリからテンプレート一覧を取得 peco を使ってテンプレートを選択 ローカルで rails new を実行 その他のファイルも管理できるようにテンプレートリ管理リポジトリを用意し専用ディレクトリを作りました。public なリポジトリであれば GitHub API でディレクトリ内のファイル一覧を取得できます。 https://github.com/fillin-inc/templates コード 以下のコードを .zshrc でロードし zsh 上で呼び出します。 # peco-rails-template.zsh function peco-rails-template() { # GitHub API からテンンプレート情報取得 local JSON=$(curl --silent https://api.github.com/repos/fillin-inc/templates/contents/rails | jq '.[]') # template 名から選択 local TEMPLATE=$(echo ${JSON} | jq '.name' | grep '.rb' | sed -e 's/"//g' | sed -e 's/\.rb$//' | peco) if [ -z ${TEMPLATE} ]; then echo "template が取得できませんでした" return 1 fi # name が該当する download_url 取得 local SELECTED=$(echo ${JSON} | jq ". | select (.name == \"${TEMPLATE}.rb\") | .download_url" | sed -e 's/"//g') if [ -z ${SELECTED} ]; then echo "選択された template に該当する download_url が取得できませんでした" return 1 fi # git 管理されていない場合, 空 commit if [ -d .git ]; then git init git commit --allow-empty -m "initial commit" fi # Gemfile が存在しない場合デフォルト適用 if [ ! -f "Gemfile" ]; then curl -O --silent https://raw.githubusercontent.com/fillin-inc/templates/master/rails/example/Gemfile fi # rails gem を install bundle i --without production # template 指定で new bundle exec rails new . --force -d mysql -m ${SELECTED} } 課題 この処理には Application Template を使う都合でいくつか不都合があります。 ...
Rails Application Template v5.2
Rails のアプリケーション環境をサクッと立ち上げるために Application Template を用意してみました。特徴としては, slim, rspec 初期化, rubocop の設定等々です。 https://gist.github.com/yuya-matsushima/827903535cd97894df74c385fcdc30b4 環境構築 docker-compose 環境の用意 Web サーバーなし, MySQL と Redis の image をベースに。 version: '3' services: app: image: fillininc/rails:2.6.3-18.04 volumes: - .:/opt/app - bundle:/usr/local/bundle ports: - 3000:3000 stdin_open: true depends_on: - db - redis db: image: mysql:8.0 command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci volumes: - database:/var/lib/mysql ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: app_development TZ: Asia/Tokyo redis: image: redis:5.0 ports: - 6379:6379 volumes: database: bundle: Gemfile を用意 source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } gem 'rails', '~> 5.2.3' Gem のインストール $ docker-compose run --rm app 起動した app 内の bash で下記コマンドを実行。 ...
Vim で Language Server Protocol を使う
Go 言語開発時に Vim の補完機能が上手く動作しないことが増えており非常にストレスフルな状態が続いていました。そこで最近話題の LSP (Laugnage Server Protocol) ベースの補完に移行することにしました。 設定方法 主に vim-lsp とオートコンプリート機能を提供する asyncomplete.vim を vimrc ファイルに追加し各言語に対する Language Server の設定を追加していきます。 "Plug でプラグインを管理する場合 Plug 'prabirshrestha/async.vim' Plug 'prabirshrestha/asyncomplete.vim' Plug 'prabirshrestha/asyncomplete-lsp.vim' Plug 'prabirshrestha/vim-lsp' Go 言語の場合は続けて次の設定を追加します。その他の言語については vim-lsp の wiki に対応方法が書いてあります。 if executable('go-langserver') augroup LspGo au! au User lsp_setup call lsp#register_server({ \ 'name': 'go-langserver', \ 'cmd': {server_info->['go-langserver', '-gocodecompletion']}, \ 'whitelist': ['go'], \ }) au FileType go setlocal omnifunc=lsp#complete augroup END endif この設定を動作させるためには go-langserver のインストールが必要です。 $ go get -u github.com/sourcegraph/go-langserver ハマったところ 最初は gopls を利用しようとしましたが, 私の環境では上手く動作しなかったため star 数が多い go-langserver を利用するようにしました。 ...