はじめに:AIは銀の弾丸ではなかった
「調整さんのCSVをICSカレンダー形式に変換するツール? PowerShellで書けばすぐでしょ。Gemini CLI(AI)もいるし、1時間もあれば終わるな」
…数時間後、僕は頭を抱えていました。
Aを直せばBが壊れる。
Bを直せばCが壊れる。
そしてCを直せば、なぜかAがまた壊れる。
単純なはずのツール開発は、AIとの不毛なやり取りが延々と続く「モグラ叩き」の無限地獄と化していました。
この記事は、AIとのペアプロに夢破れた僕が、どうやって開発の主導権を取り戻し、AIを最高の「相棒」へと変えたかの全記録です。
同じように「AIに指示してもエラーばかりで、どうしようもない!」と困っているあなたの助けになれば幸いです。
そして、僕が開発したツールと格闘の記録は、すべて以下のGitHubリポジトリで公開しています。
なぜPowerShell?あえて「王道」を外した賢い選択
「え、そういうのって普通Pythonでやるんじゃないの?」
はい、おっしゃる通り、この種のタスクではPythonが王道です。しかし、僕はあえてPowerShellを選びました。それには、特にWindowsユーザーにとって見逃せない、明確な理由があります。
- 圧倒的な手軽さ: Windowsユーザーなら、Windows Storeから最新のPowerShellをインストールするだけ。Pythonのように「PATHを通す」といった環境構築の面倒や、それに伴う「環境が汚れる」感覚もありません。
- 標準機能がそもそも強力: PowerShellは、CSVやJSONのハンドリング、複雑な文字列操作といった機能を標準で備えています。わざわざ外部ライブラリを探してインストールする手間が省けます。
- そして、地球に優しい(実行コストが低い): 一度スクリプトを作ってしまえば、定型作業は手元で一瞬で終わります。毎回AIに処理をお願いする必要がないので、APIの消費もありません。お財布にも、そしてAPIサーバーを動かす電力にも優しいのです。
手軽に始められ、強力で、エコ。Windows環境での「ちょっとしたツール開発」において、PowerShellは非常に合理的な選択肢なのです。
なぜAIとのペアプロは失敗するのか?AIエージェントの「困った特性」
ではなぜ、こんなに便利なPowerShellとAIの組み合わせで、僕は地獄を見たのでしょうか? それは、AIエージェントが持つ、人間とは異なる「困った特性」を理解していなかったからです。
特性1:驚異的に「厳密」
AIは、人間が「これくらい良いだろう」と考える曖昧さを許容しません。僕がハマったreplace
ツールの失敗は、まさにこれでした。ソースコード内の空白1つ、改行コードの違いですら、AIにとっては「完全に別物」。指示が正確無比でないと、平気で処理に失敗します。
特性2:驚異的に「忘れっぽい」
AIには長期的な記憶がありません。数ターン前の会話や、修正したはずのファイル内容をケロっと忘れてしまいます。こちらが「さっき直した前提で話している」つもりでも、AIは古い情報に基づいてコードを生成し、デグレード(先祖返り)を引き起こします。
特性3:驚異的に「素直」
AIは、曖昧な指示を渡されると、それを善意で(?)拡大解釈し、とんでもないコードを生成することがあります。「よしなにやっといて」は、破滅の呪文です。
これらの特性を理解せず、人間相手と同じ感覚で指示を出すと、開発は確実にカオスになります。
AI開発の主導権を握るための「AI調教」3大原則
AIに振り回されるのではなく、人間が明確なルールで導く。AIを「魔法使い」から優秀な「アシスタント」に変えるために、僕は3つの原則を立てました。
原則1:ルールブックを与えよ(ドキュメントによる指示)
曖昧な記憶や口頭(プロンプト)の指示に頼るのをやめ、プロジェクトのルールをドキュメントに明文化しました。
development_guidelines.md
のようなファイルを作成し、「param()ブロックは必ず先頭に書く」「この正規表現を使う」といったルールをすべて書き出します。そしてAIに指示を出す際は、「このルールブックに従って作業しろ」とドキュメントを渡すのです。これはAIの暴走を防ぐ、強力なガードレールになります。
原則2:最小単位で命令し、即座に検証せよ(単体テストの徹底)
「このCSVを読んでICSを生成して」のような大きな命令は禁物です。タスクを人間が分解し、検証可能な最小単位で命令します。
「まず、この日付文字列から年・月・日を抜き出す正規表現だけ作って」
↓
(AIが生成した正規表現を、test.ps1
のような単体テスト用ファイルで即座に検証)
↓
「OK、次は時刻を抜き出す部分を書いて」
このサイクルを徹底することで、AIの間違いを早期に発見し、手戻りを最小限に抑えられます。
原則3:常に「今の状態」を正確に伝えよ(状態の同期)
AIの「忘れっぽさ」を補うのは、人間の重要な役目です。何かを指示する前には、必ず最新のコンテキスト(文脈)を与えます。
read_file
で現在のファイル内容を読み込ませ、「今、ファイルはこうなっている。この部分を修正してほしい」「過去にこのエラーで失敗したから、同じ轍は踏まないで」と、常に最新情報をインプットすることで、AIの勘違いを防ぎます。
【最重要】セッションが死んでも心は折れない!Gemini CLIの「タイムマシン」機能
これだけやっても、事故は起こります。突然のAPIエラー、PCのフリーズ、操作ミス…。AIとの対話セッションは、あまりに儚く、簡単に失われます。
しかし、Gemini CLIには、この絶望からあなたを救う強力な「タイムマシン」機能が備わっています。
1. chat save [タグ名]
でセーブポイントを作る
対話の区切りが良いところで、すかさずセーブポイントを作りましょう。
/chat save wip
wip
(Work In Progress: 作業中)や stable
(安定版)のようなタグ名がオススメです。
2. 【超重要Tips】タグは「上書き」で使うべし!
現在のGemini CLIでは、一度付けたタグを削除できません。なので、同じタグ名で繰り返し保存し、上書きしていくのがベストプラクティスです。
- 作業中 →
/chat save wip
- キリのいいところまで進んだ →
/chat save wip
- テストが通る安定版ができた! →
/chat save stable
こうすることで、常に「作業中の最新」と「安定版」の状態にいつでも戻れるようになります。
3. list
で確認し、resume
で復活!
セッションが飛んでしまっても、慌てる必要はありません。
まず、/chat list
で保存したタグの一覧(遭難した時の地図)を確認します。
/chat list
そして、戻りたいセッションのタグ名を指定し、「復活の呪文」を唱えます。
/chat resume wip
これだけで、中断した対話が完全に元通り。思考がリセットされる絶望感から解放され、スムーズに開発を再開できます。このコマンドを知っているか否かで、AI開発のストレスは天と地ほど変わります。
エピローグ:AIは「魔法の杖」ではなく「最高の相棒」だった
AIは、私たちの仕事を肩代わりしてくれる魔法の杖ではありません。クセもあれば、弱点もある、少し手のかかるパートナーです。
しかし、その特性を正しく理解し、人間が明確な意思を持って主導権を握り、正しいプロセスで「協業」することで、AIは人間の能力を何倍にも高めてくれる最高の相棒になります。
面倒に見えるドキュメント化やテストこそが、結局はAIとの関係を良好に保ち、開発を高速に進める一番の近道でした。
僕がAIと格闘し、そして仲良くなっていった全記録は、以下のGitHubリポジトリに詰まっています。この記事で紹介した開発プロセスの、生きた実例としてぜひご覧ください。