0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIに「注文」だけでアプリを出した — 任せられる状態と、引けない一線を作っている

0
Posted at

レースの映像に、心拍やペースを重ねたい。その思いつきから、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 万円ぶんだが、実際は月額のサブスクの中で、追加の請求は出ていない。


「注文だけ」で済むように、下回りを組んである

表に出るのは「体験の注文」だけ。その下に、①渡し方を型にする/②別の AI に検めさせる(自作のハーネス)/③止まる所を先に決める、の作り込みがある

ここまでは、誰がやっても同じに見えるかもしれない。表に出る操作は「不満を言う」だけだ。

それでも一人で、出荷まで崩れずに進められるのは、注文の出し方と、出てきたものの受け取り方を、あらかじめ仕組みにしてあるからだ。

大きく、三つ組んである。

1. 渡し方を型にする。 「なんか変」のままでは AI は動けない。だから渡す前に、頭の中の「トリムがうまく効かない」を、「トリムの入力欄に数字を入れても反応しない。スライダーとも連動しない」——どの操作で・何が起きて・どうあってほしいか——まで、こちらで分解しておく。雑な不満を、AI が一手で直せる注文にしてから渡す。この翻訳は、AI ではなく自分の仕事だ。上に並べた 6 つは、その型を通した後の言葉だ。

2. 出てきたものを、別の AI に検めさせる。 ここが一番効いている。変更を入れるたびに、自作のハーネスが裏で何体ものレビュー役を立てる。観点はわざとばらしてある——「前に動いていた所が壊れていないか」「直し方は本当に正しいか」「余計な副作用は出ていないか」「危ない箇所はないか」。それぞれが現物のコードに当たって確かめ、重要なものだけが「これは見て」と手元に上がってくる。

たとえば、文字が画面からはみ出すバグを直したとき。レビュー役の一体は、こう書いてきた——「文字数で一番長い行を測る古いやり方は間違い。WWWWiiiiii のように、文字数が同じでも描画幅は違う。全行の実描画幅を測って最大を取るのが正しい」。これを書いたのは 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 が実装を丸ごと引き受けた。残ったのは、コードではなく、任せられる状態を作ることと、最後にどこで止まって何を名乗るかを決めることだった。作っていたのは、アプリというより、その作り方のほうだったのかもしれない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?