バイブコーディング6ヶ月、不便なことから一つずつ

less than 1 minute read

「不便なことを見つけたら自動化する、それがパターンになりました。」

6ヶ月の振り返りでこう書きました。大げさな計画なしに、不便なことから一つずつ作りました。この記事では、そうして作ったツールについて話します。

Claude Codeを6ヶ月使って最も大きく変わったのは、「作るべきかどうか」と悩んでいたものを、今は悩まずにすぐ作るようになったことです。

やりたかったこと

8年前、EC2接続とBastionサーバーのアクセス権限管理をシェルスクリプトで自動化しようとしました。何日も苦労しました。その時決心しました。

「もう二度とシェルではやらない。」

NodeやPythonの方がずっと簡単ですから。もちろん実際には作りませんでした。きっかけがなかったからです。

しかし今回、LLMを使いながら再びシェルスクリプトを書くようになりました。AIに任せればいいからです。何日もかかっていたものが数分で終わります。

(当時のシェルスクリプト - 最終更新が2021年10月ですね)


コミットメッセージの自動化

始まり:シェルスクリプト

Claude Codeで作業していると、作業が終わるたびにコミットさせるのがワークフローを中断する感じでした。かといって直接コミットメッセージを書くのは面倒でした。

そこで別のターミナルでコミットだけを行うスクリプトを作りました。

./scripts/generate-commit-msg.sh

claude -pオプションでdiffを送り、JSONでメッセージを受け取り、ユーザー確認後にコミットする方式です。

うまくいきました。問題はその次でした。

問題:デプロイが面倒

業務プロジェクトのワークツリーが3〜4個、個人サイドプロジェクトが4〜5個。合わせて約10個のプロジェクトでこのスクリプトを使っていました。

バグを修正すると10個のプロジェクトに再コピーする必要がありました。ワークツリープロジェクトは両方で修正するとコンフリクトが発生しました。

デプロイの問題以外に機能的な限界もありました。diffが50KBを超えると切れていました。大規模な変更をするとメッセージがおかしくなりました。そこでv2を作りました。ファイルリストをツリー形式で圧縮して情報損失なく処理する方式です。

しかしv2を作ったらまた10個のプロジェクトにコピーする必要がありました。

解決:Node.js CLI

結局npmパッケージにしました。npxで実行すればプロジェクトごとにコピーする必要がないからです。

npx genai-commit claude-code

もう一つ。Claude Codeのトークンがもったいなかったです。会社でCursorライセンスをサポートしてもらっているのにあまり使っていませんでした。そこでCursor CLIもサポートするようにしました。

npx genai-commit cursor-cli

Jira連携も追加しました。チケットURLを入力するとそのチケットの以前のコミットと現在の変更を一つのコミットにまとめます。元々はdiffサイズによってコミットを複数に分けていましたが、同じチケットの作業なら一つにまとめる方がすっきりします。

一つの原則は守りました。メッセージ出力後、ユーザーがyを入力してからコミットされます。そして絶対にpushしません。

(genai-commit GitHub)


リンティング自動化

SonarLint導入を検討しながら作ったツールです。

最初はすべてのルールを一度に処理しようとしました。しかし問題が発生しました。最初の修正を適用すると行番号が変わります。すると2番目の修正が別の場所に適用されます。

そこで1ルールずつ処理する方式に変えました。修正適用 → ESLint再実行 → 次のルール選択。毎回新しい行番号で分析します。

npx genai-sonar-lint analyze src/

役割を分けました:

  • 人間:どのルールを、どう処理するか決定(修正/無効化/無視)
  • スクリプト:ESLint実行、結果収集、修正適用
  • LLM:修正コード生成

修正だけではありません。ルール無効化やeslint-disableコメント追加もサポートします。すべてのイシューをAIで修正する必要はありませんから。無視するのが正解の場合もあります。

(genai-sonar-lint GitHub)


セッション管理:Trelloスキル

私はClaude Codeターミナルを複数開いて作業します。業務プロジェクトがいくつか、個人プロジェクトがいくつか。同時に進めていると、どのセッションで何をしたか混乱します。

そこでTrelloと連携するClaude Codeスキル(カスタムスラッシュコマンド)を作りました。

/trello 作成    → 新しいカード作成(会話分析後の自動要約)
/trello 記録    → 作業内容をコメントで追加
/trello 完了    → ステータス変更

セッションを始めたらカードを作り、作業中に記録し、終わったら完了処理します。後で「前回何をしたっけ?」という時にカードを見ればいいです。


チケット管理:Jiraスキル

会社でJiraを使っています。チケット作成と管理にかなり時間がかかります。非効率だと感じることもあります。

しかし会社で定量評価指標として使っており、業務プロセスを体系化しようとする試みでもあります。無条件に反発心だけ持つのはダメだと思いました。

そこで与えられた環境内で自動化することにしました。

/jira              → 現在のブランチチケット照会
/jira リスト       → 自分の担当チケット
/jira ステータス 進行中   → ステータス変更
/jira コメント "内容" → コメント追加

自然言語でも大丈夫です。「私の担当チケット見せて」、「これを完了に変えて」のように。

ここで考えるべき点があります。ステータス変更、コメント追加、リスト照会などはスクリプトでできます。AIがなくても可能な領域です。

AIで追加で自動化できるのは何でしょうか?生成テキストです。チケット内容作成、コメント要約、コミットメッセージ生成などです。

この区分が明確になると、どこにAIを使い、どこにスクリプトを使うか決めやすくなりました。


何が変わったか

以前はスクリプトで可能なことだけ自動化していました。ステータス変更、ファイル処理、API呼び出しなどです。

今は生成テキストも自動化対象です。コミットメッセージ、チケット内容、コード修正。以前なら「これは人がやるべき」と流していたものです。

そしてこのようなツール自体をAIで素早く作れるのが大きいです。アイデアから実装までの距離が短くなりました。


まとめ

6ヶ月の振り返りで「不便なら自動化する」と言いましたが、実際に作ったものです。コミットメッセージ自動生成(genai-commit)、リンティング自動化(genai-sonar-lint)、マルチセッション管理(Trelloスキル)、チケット管理自動化(Jiraスキル)。

次の記事では、画面企画のためのDSL、Wireweaveの話をする予定です。