同じようなプロンプトを何度も書いていた

agentic codingを始めてしばらく経った頃、あることに気づいた。同じような指示をAIに毎回ゼロから書いている。

「Reactコンポーネントを作って」「スタイルはTailwindで」「Propsの型はこうで」「エラーハンドリングはこうやって」—— 毎回同じ前置きを書いているのに、その指示を再利用できる形にしていなかった。

AIに作業を任せているつもりが、AIへの指示出しがルーティンワークになっていた。

ルーティンワークの扱い方の比較

毎回ゼロからプロンプトテンプレートをコピペ抽象化してskill化
初回の手間大(抽象化が面倒)
2回目以降の手間同じやや減るほぼゼロ
品質のばらつき大きい小さい
再利用性なし低い(コピペは劣化する)高い
他の人と共有できるかできないしづらいしやすい
抽象化のコツは「具体的すぎず、抽象的すぎず」だ。たとえば「ESLintの設定をして」ではなく「このプロジェクトのlintルールに従ってコードを修正して」と書く。後者なら別のプロジェクトでも使える。

抽象化の手順

  1. 一度AIにやらせた作業の、指示と結果のセットを保存する
  2. その指示から「このプロジェクト固有の部分」を抽出し、変数化する
  3. 残った部分を汎用的な手順としてまとめる
  4. それをskillファイルとして保存し、次回からは「このskillを使って」で済ませる

なぜ抽象化を面倒がってはいけないのか

この習慣を始めてから、同じような作業にかかる時間が体感で半分以下になった。一回抽象化に30分かかっても、二回目以降が5分で終わるなら、三回使えばペイする。

抽象化にハマりすぎないこと。一度しかやらない作業まで抽象化しようとすると、それ自体が目的化する。あくまで「3回以上繰り返すとわかっていること」だけを対象にする。

エンジニアなら誰でもDRY原則を知っている。コードをコピペするな、関数に切り出せというあれだ。AIへの指示も同じだ。コピペせず、抽象化して再利用する。

実践して思うのは、抽象化の一番の効用は「自分が何をやっているのかを自覚できること」かもしれない。一度やった作業を言葉にして整理すると、その作業の本質が見える。その気づき自体に価値がある。

今日agentic codingで書いたプロンプトを一つ選んで、「このプロジェクト固有の部分」と「汎用的な部分」に分けてみてほしい。