見出し画像

ツールを乗り換える前に、問いをもう一段だけ割る:40分の遠回りから残った3行のチェックリスト

木曜の夕方、自作のCSVインポータが落ちた。エラーは invalid date format、それだけ。取り込み対象は取引先から送られてくる売上明細で、フォーマットが月ごとに微妙に違う。

ここから40分、私は三つのツールを行ったり来たりした。エディタに組み込んだCursor、ブラウザのチャットタブ、それから手元のターミナルで動かしている小さめのモデル。順番に同じことを聞いて、順番に微妙な答えをもらって、そのたびに「このツールはこの手の話が弱いのかもしれない」と思って次に移った。

40分後に気づいたのは、三つとも同じ質問に答えていたということだった。私が三回とも、20秒で書いた同じ雑な質問を投げていたからだ。

送っていたプロンプトと、送るべきだったプロンプト

実際に投げていたのはこれに近い。

このCSVインポートが invalid date format で落ちます。
コードは以下です。原因を教えてください。
(120行貼り付け)

一見まともに見えるけれど、この質問には「どのレイヤーの話をしているか」が入っていない。パース段なのか、バリデーション段なのか、そもそも入力データが壊れているのか。決めていないから、モデルは全部の可能性を薄く並べてくる。薄く並んだ答えは、どれも間違っていないぶん、判断材料にならない。

三つ目のツールを開こうとした手を止めて、質問を一段だけ割った。

このインポータで、
(1) 何行目が落ちているか
(2) それは parse_row() で落ちているか validate_row() で落ちているか
を切り分けたい。切り分けるための最小のログ出力を書いてください。

返ってきたのは十数行のログ挿入コードで、走らせたら一発だった。落ちていたのは847行目、parse_row() の内側。年が2桁の 25/03/14 という行が混ざっていて、それを1925年として解釈したうえで、後段の「未来日付を許さない」チェックとは別の経路で例外になっていた。

ツールを替えていたら、たぶんあと20分は溶けていた。

残った3つ

その後、2週間ぶんの自分のやり取りを見返して、遠回りした場面に共通していたものだけを残した。数を絞ったのは、付箋1枚に収めたかったからで、それ以上の根拠はない。

1. 30秒以内で書いたプロンプトは送らない

30秒で書ける質問は、たいてい自分の頭の中でもまだ整理できていない質問だ。手が止まらないまま送れてしまうのがチャットUIの怖いところで、送信ボタンが「考える」の代わりになる。私は一度書いてから、送信前に読み返す時間を意識的に挟むようにした。読み返して直したくならなければ、それは十分に考えた質問だと思っている。

2. 送る前に、返ってきてほしい出力の形を決める

表なのか、diffなのか、3行の判断なのか、動くスクリプトなのか。これを決めずに送ると、返ってきたものが「使えるか使えないか」を判定するところから始まってしまう。上の例で私が本当に欲しかったのは原因の解説ではなく、切り分け用のログコードだった。それを先に言葉にした瞬間に、質問文のほうが勝手に具体的になった。

3. 別のツールに手を伸ばす前に、問いを一段だけ割る

これがいちばん効いた。ツールを替える動作は、質問を書き直す動作より圧倒的に楽で、しかも何か前に進んでいる感じがする。だから遠回りだと気づきにくい。乗り換えたくなったら、その前に「今の問いを二つに割るとしたらどこで割れるか」を一度だけ考える。割れないなら、そのときは本当にツールの問題かもしれない。

実際に使ってみて

付箋に3行書いて、モニタの横に貼った。効いているのは主に3番で、「別のツールで聞き直そう」と思った瞬間に視界に入るからだと思う。1番と2番は、貼っておかなくても数日で身についた。

ひとつ意外だったのは、問いを割るとツール間の差がほとんど気にならなくなったことだ。粒度の細かい質問には、どのツールもだいたい同じ精度で答える。差が出るのは、雑な質問に対して「それらしい答え」を作る作り方のほうで、私が比較していたのはずっとそっちだった。


プロンプトの粒度や、AIに何をどこまで任せるかの線引きについて、実際に手を動かして分かったことをここに書き足していきます。同じところで詰まっている人は、フォローしておいてもらえると届きます。

いいなと思ったら応援しよう!