AIと開発するとき、速さを選ぶと「説明できないコード」が残る

転職用のポートフォリオとして、個人でWebアプリ「Hubpin」を作っています。
制作の経緯は「Hubpin 開発記録」に時系列でまとめています。
設計と判断は自分で行い、実装も原則自分で書いています。AIには手順書・レビュー・調査を任せています。

制作中の自作アプリの開発記録から。
転職用のポートフォリオとして作っているので、面接で説明できるかが判断軸になっています。

目次

目安1.0時間の作業に、4.8時間かかった

ログイン画面を1つ作る工程です。手順書には 1.0h と書いてありました。実績は 4.8h。

コードを書いていた時間ではありません。**分からないところで止まって、質問して、
納得してから進んでいた時間**です。丸写しなら1時間で終わっていました。

代わりに増えたもの

同じ工程で、説明できる概念が11個増えました。

  • 'use server' は公開範囲の宣言だった(実行場所の指定だと思っていた)
  • 型エラーが指していたのは「今のバグ」より「将来のバグ」だった
  • matcher が決めているのは実行の範囲で、保護の範囲ではなかった

どれも詰まったから分かったことです。通過していたら存在しなかった。

裏づけがある

前の工程で、RLS のポリシーを7本書いても1行も読めない、という状態に4時間詰まりました。
原因は GRANT(テーブルに触れる権限)と RLS(どの行を見せるか)が二段構えだったこと。

この4時間があるから、面接で「RLS だけでは読めません」と話せます。
詰まらずに通過していたら、そのネタは存在しませんでした。

判断の言葉

当時のメモにこう書いていました。
分かったふりして飛ばしたら、理解しないまま完成しそうで、それだと面接でも説明できない。

速さを取るか、説明できることを取るか。ポートフォリオでは後者しか意味がないと思っています。
完成したアプリを見せる場ではなく、作った人の判断を見せる場なので。

ただし、これはコストでもある

工程1〜4(準備・設計)は見積25hに対して実績12.1h。48%で終わっていました。
初の実装工程である工程5は、見積6hに対して最終的に 10.8h。180%に逆転しています。

倍率は下がっている

同じ工程の中で、手順ごとの倍率を並べるとこうなりました。

手順 新しく踏むもの 倍率
3 Server Action・'use server'useActionState 4.8倍
4 proxy・matcher 2.2倍
5 なし(3と4の組み合わせ) 1.5倍
6・7 なし 0.3倍前後

手順4で新しく踏んだのは proxy と matcher だけで、
'use server'<form action>手順3で覚えたものを使い回せました。

回収の証拠もあります。ログアウトの実装で
useActionState は要らない(戻り値を画面に出さないから)」を自分で判断できました。
手順3の 4.8h が効いています。

落としどころ

AI に書かせれば速い、は本当。ただし残るのは動くコードだけ。
自分が売りたいのは動くコードではなく、判断の理由なので、遅いほうを選んでいます。

「AI を使うな」という話ではありません。使いながら、どこで止まるかを選んでいるという話です。
そして止まった時間は、倍率が下がる形で戻ってきています。

目次