レースの映像に、心拍やペースを重ねたい。その思いつきから、macOS アプリを一本、Mac App Store まで出した。実装はまるごと AI に任せ、渡したのは使ってみての注文だけ。ソースコードは一行も書いていないし、読んでもいない。
「AI が賢くなったから、誰でも作れる」——半分は、その通りだ。けれど「注文だけで一人で出荷まで行ける」のは、注文だけで済むように、見えない下回りを組んであるからでもある。そして最後には、AI に引けない一線が残る。この記事は、その表と裏の話だ。
作ったもの
ActivityVideoStudio という macOS アプリ。Garmin の記録と GoPro の動画を時刻同期して、走っている映像に心拍・ペース・地図・標高を重ねて書き出す。レースを見返すのが、ぐっと楽しくなる。今は Mac App Store に並んでいる。
出したのは「体験の注文」だけ
では、何を渡したのか。AI(codex と Claude Code)に出したのは、使ってみての注文だけだった。実際に書いた依頼を、そのまま並べる。
- 「トリムの入力欄に数字を入れても反応しない。スライダーとも連動しない」
- 「動画をドロップしても、読み込みが終わったのか分からない」
- 「マウスホイールで動画の時間を送り・戻しできるようにしたい」
- 「書き出しの進捗に『完了後に終了』『スリープさせない』『残り時間』を出して」
- 「テキストが画面の幅からはみ出す」
- 「ダークモードの背景が不自然。VoiceOver にも対応して」
関数名もファイル名も、一度も出てこない。使う側の不満と要望の言葉だ。
丸投げで放っておいたわけではない。「書き出すと中身が空になる、エラーも出ない」と症状を細かく渡せば、原因(中間ファイルの保存先だった)を AI が見つけて直す。実装で詰まる所は、だいたいこの調子で抜けられた。
実際に手を動かしたのは、git の記録でのべ 25 時間ほど。すきま時間に 23 回つついた程度で、あいだは長く空くこともあった。書くでも読むでもなく、出てきたものを確かめて次の注文を返す。その繰り返しの 25 時間だった。AI とやり取りした分量は、両方あわせてのべ約 10 億トークン。もし従量課金で払えばざっと 40 万円ぶんだが、実際は月額のサブスクの中で、追加の請求は出ていない。
「注文だけ」で済むように、下回りを組んである
ここまでは、誰がやっても同じに見えるかもしれない。表に出る操作は「不満を言う」だけだ。
それでも一人で、出荷まで崩れずに進められるのは、注文の出し方と、出てきたものの受け取り方を、あらかじめ仕組みにしてあるからだ。
大きく、三つ組んである。
1. 渡し方を型にする。 「なんか変」のままでは AI は動けない。だから渡す前に、頭の中の「トリムがうまく効かない」を、「トリムの入力欄に数字を入れても反応しない。スライダーとも連動しない」——どの操作で・何が起きて・どうあってほしいか——まで、こちらで分解しておく。雑な不満を、AI が一手で直せる注文にしてから渡す。この翻訳は、AI ではなく自分の仕事だ。上に並べた 6 つは、その型を通した後の言葉だ。
2. 出てきたものを、別の AI に検めさせる。 ここが一番効いている。変更を入れるたびに、自作のハーネスが裏で何体ものレビュー役を立てる。観点はわざとばらしてある——「前に動いていた所が壊れていないか」「直し方は本当に正しいか」「余計な副作用は出ていないか」「危ない箇所はないか」。それぞれが現物のコードに当たって確かめ、重要なものだけが「これは見て」と手元に上がってくる。
たとえば、文字が画面からはみ出すバグを直したとき。レビュー役の一体は、こう書いてきた——「文字数で一番長い行を測る古いやり方は間違い。WWWW と iiiiii のように、文字数が同じでも描画幅は違う。全行の実描画幅を測って最大を取るのが正しい」。これを書いたのは AI のレビュー役で、こちらはコードを開いていない。持っているのは、コードを読む力ではなく、コードを読ませて検める仕組みのほうだ。
3. 止まる所を、先に決めておく。 全部を委ねはしない。任せていい所と、自分で判断する所の線を、あらかじめ引いておく。手を動かす時間が減ったぶん、価値はこの線引きのほうへ寄っていく。
25 時間で済むのも、サブスクの内側に収まるのも、この下回りがあるからだ。先に受け皿があるぶん、一回の入力は小さくて足りる。AI が速くなるほど、差がつくのはそこになる。
AI に引けなかった一線
どこまで AI に委ね、どこで自分が止まるか。その「自分が止まる」側にまるごとかかってきたのが、公開の手前だった。
Mac App Store の審査で 2 回はじかれた。1 回目は、審査者が動かせるサンプルが無い、という指摘。検証用の .FIT と短いクリップを用意して、手順を添えて再提出した。
問題は 2 回目だった。Guideline 5.2.1 — アプリ名や説明に「Garmin」「GoPro」を前面に出している、と。他社の名前を、自分のアプリの看板に借りてはいけない。
直し方は、看板の言葉を総称に置き換えること。実際に、こう書き換えた。
- 「カメラ: GoPro」→「カメラ: アクションカメラ」
- 「GPS: Garmin Fenix 8」→「GPS: GPS ウォッチ」
- 「Garmin .FIT ファイル(Fenix, Forerunner 等)」→「.FIT アクティビティファイル(GPS スマートウォッチで記録)」
総称化の言い換えそのものは、AI に頼めばいくらでも出てくる。引っかかったのは、その先だった。どの事実は残し、どれを外すか。 「対応フォーマットは .FIT」は本当のことだから、看板に残していい。「Garmin 対応」は、他人の名前で信用を借りているから、外す。
この線は、アプリが何のために・誰に向けてあるかを知っている本人にしか引けなかった。AI は言い換えを無限に出す。けれど「どれがまだ正直か」は、教えてくれない。先に決めておいた「人間が止まる所」が、ここで効いた。2 回目の再提出で、通った。
AI が実装を丸ごと引き受けた。残ったのは、コードではなく、任せられる状態を作ることと、最後にどこで止まって何を名乗るかを決めることだった。作っていたのは、アプリというより、その作り方のほうだったのかもしれない。
- ActivityVideoStudio(Mac App Store): https://apps.apple.com/app/activityvideostudio/id6764239734
- 書き出しサンプル(YouTube): https://youtu.be/UtKdCmAf-xk
