「codexで遊んでみたい」と投げたら、2日でアプリが動いた
金曜の夜に「codexで遊んでみたい」と打っただけで、翌日には自作アプリの原型が動いていた。コードは一行も書いていない。GPTで要件を固めてからCodexに実装させた2日間の記録。
最初に打ったのは「遊んでみたい」だった
2026年6月19日、金曜の夜。私がGPTに投げた第一声はこれである。
明日明後日で時間がある時にcodexで遊んでみたい。
アプリを作りたい、とは一言も言っていない。
背景としては、Xを開けば「Codexでこんなの作れました」「AIはすごいんだ、使わないのはもったいない」が一度は目に入る状況だった。当時はまだ「AI驚き屋」という言葉もなくて、彼らのポストを単純にすごいんだ、稼げるんだと、ちょっと過度に期待して見ていたところはある。
私の知識としては、コードを書けるらしい、何やらチャットとは違うらしい、その程度だった。
そして翌日の6月20日、土曜。アプリの原型が動いていた。
以下はその2日間の記録である。
一発目に返ってきたのは、仕事の話だった
GPTから返ってきた最初の提案は、Power AutomateやOffice Scriptの補助ツールを作らせる案だった。私が普段の業務で触っているものを、ちゃんと踏まえてくれていた。
さすがである。さすがなのだが、そそられなかった。
業務の効率化の話は、家での遊びではやりたくない。
ここで私が打ったのはこうだった。
おー、それもいいね。 家だとoffice365の環境がないから、仕事とは関係なく、趣味で楽しめそうな案ないかな?
読み返して思うのだが、すでにAIに人格を感じている私は、謎に忖度して機嫌を損ねないように返信しているのが怖い。 「それもいいね」と一度受け止めてから振っている。相手はソフトウェアである。
次に出てきたのは、BBQの肉温度から到達時刻を予測するツール、ゲームのグラフィック設定を記録するツール、未来年表ジェネレーター、3Dプリントのメモ管理。
うーん。面白そうだけど、なんかしっくり来なかった。
LEGOを打ち明けたら、話が動いた
そこで、それまでGPTに話していなかったことを出してみた。
うん、面白そうだね、もっと違うこともやってみたいかな、私実はLEGOも好きで集めてるんだよね、
ここから急に噛み合った。LEGOコレクション管理、欠品パーツ管理、展示レイアウト計画、MOCアイデア管理、簡易説明書メーカー。案が一気に具体的になった。
渡す情報を変えただけで、出てくるものが変わった。 頼み方を工夫したわけではない。自分の側の情報を出しただけである。
そして、その中に混ざっていたのが「LEGO購入判断メモアプリ」だった。今のアプリの祖先はここにいる。
「ブリックリンクがあるからいらない」が、アプリの形を決めた
ただ、そのままでは作る気になれなかった。
LEGO購入判断メモアプリいいね、これはいつか作ってみたいかも👍覚えておいて。 でもLEGO関係にはブリックリンクっていう最強のサイトがあるからどれもすでに存在する機能が多いんだよね
コレクション管理も、パーツ管理も、相場も、BrickLinkが全部持っている。自分で作ると必ず「BrickLinkでよくない?」になる。
この一言に対する返しが、アプリの形を決めた。要約すると、BrickLinkと競合しない方向に振ればいい、という話だった。
BrickLinkは市場とパーツと価格のデータベースとして最強。だから自作アプリのほうは、自分の予算・置き場所・家族の許容度・今月の買いすぎ感を入れる、買うべきか悩む気持ちを整理する側に寄せる。
つまり、こうなった。
データを集めるアプリではなく、
買う言い訳と買わない理由を並べるアプリ。
ここが分岐点だったと思う。「勝てないから作らない」が、「勝たなくていい領域を探す」に変わった。
そのうえで、データベースを自前で作らないという割り切りも同時に決まった。作るのが大変そうだと言ったら、そもそも作らなくていい設計にしましょう、と返ってきた。今もアプリはlocalStorage保存で、サーバーもアカウントもデータベースもない。
名前が決まってからのアイデア出しは早かった
アプリ名の候補がいくつか出た中で、「コレクター購入審議会」に反応した。
コレクター購入審議会 いいね👍 面白そう。 でも同じ様なものが出てるんじゃない? 出てても勉強のためにやってみたいけど、せっかくなら少しは違うもの作りたいね
しっくり来てからのアイデア出しは早い。名前がつくと、その名前に似合う機能を思いつくようになる。
なお現在のアプリ名は「コレクター購入評議会」である。審議会から評議会に変えた。たしか、遥か彼方の銀河の物語に出てくる評議会を思いついたあたりで変えた気がするのだが、正確なところは覚えていない。 名前より中身を練っていたので、わりと適当だった。
出したアイデアは、だいたい自分の日頃の恨みから出ている
ここからは私の要望が次々出てくる。読み返すと、どれも自分の生活の中の実感から来ている。
評議会モードの案はこれだった。
評議会モードを何個か作って、「遥か彼方の銀河の物語の評議会」みたいに理不尽に責められるものとか、「新世紀の新世界秩序を生み出すための会議」みたいに達観した意味の分からない感じにしたり、肯定して甘やかしてくれるゲロ甘モードにしてみても良いかもね
(当時は実在する作品名を出して説明していたが、権利関係で揉めたくないので、引用のその部分だけぼかしている。言い回しは当時のまま。)
面白いのは、GPT側が毎回「固有名詞は避けて雰囲気だけにしましょう」と付け足してきたことである。私が作品名で説明するたびに、その都度ぼかされていた。今こうしてぼかしているのは、そのときの忠告どおりということになる。
当初の設計は、判定ロジックは共通のまま、言い方だけモードで変えるというものだった。実装されて今も入っている。ただし今のアプリはそこから進んでいて、いろいろな要素から判定するようになり、モードごとに判定そのものも変わる。 同じ商品でも、モードを変えると結論が変わる。
そして、今のアプリの中心にある機能は、この一言から出た。
コレクターズアイテムで転売ヤーに負けて買えなかった時に、実際には貯金できてもいないのに「~円浮いたから~円買えるわー」みないなバカな事言いがちだから、それもストックメーターにしてみたいね。 当月の予算に「あの時買えてないから実質~円貯金できてる」とかいう謎理論をそれっぽくヘソクリ感覚で正当化する感じで
心のヘソクリの原型である。
これは他の誰にも出せない。BrickLinkにも載っていないし、AIの提案リストにも入っていなかった。買えなかった悔しさを「実質0円」で処理する、あのしょうもない理屈を持っているのは自分だけである。
さらに、争奪戦の話でも同じことが起きた。
その時、争奪戦の戦場に立って先陣を切ってたのか、後方彼氏ズラしてたのか、買えたら良いやくらいで中程で適当に戦ってたのかも重要だよね
「後方彼氏面」という評価軸は、こうして生まれた。
アイデアの器はAIが出したが、中に入れたものは自分から出ている。
MVPって何? mdって何?
盛り上がってきたところで、こう打っている。
ごめん、MVPって何?
Minimum Viable Product、最小限の実用版。知らない単語だった。きっと「codexで遊ぼう」と言わなかったら、一生聞くことはなかったと思う。
同じことがもう一回ある。仕様書を spec.md として置く、という話になったとき。
「Codexに読み込ませやすい spec.md 版を作る」って、そもそもmdって何?
このアプリを作ろうと思い立つまで、mdが何なのかも知らなかった。 今このサイトの記事を全部Markdownで書いていることを思うと、我ながらどうかしている。
このあたりは、順調に進んだ部分ではあるのだが、他所の入門記事には載っていない粒度なので残しておく。実際にやったのは、これだけである。
Documentsの下にcodex-projectsフォルダを作る- その中に
collector-purchase-councilフォルダを作る(フォルダ名は英数字にする。 日本語だとツールによって文字化けやパス問題が出ることがある、とのこと) - その中に
docsフォルダを作る docsの中に、メモ帳でspec.mdを作って、GPTに書かせた仕様書を貼り付ける
つまずきポイント: Windowsは初期設定だと拡張子が隠れているので、テキストドキュメントの名前を
spec.mdに変えたつもりがspec.md.txtになっていることがある。エクスプローラーの表示 → 表示 → ファイル名拡張子にチェックを入れて確認する。右クリック→プロパティで種類が「テキスト ドキュメント」だったら、まだ.txtが残っている。
なお、置き場所として避けたほうがいい場所も教わった。C:\Program Files、C:\Windows、デスクトップ直下、OneDrive同期中の重いフォルダ、会社用フォルダ。OneDriveは同期やロックでややこしくなることがあるらしい。
Codexを使うにあたって、ChatGPTのプランはPlusにした。
サンドボックスの設定でつまずいて、一回戻ってきた
準備ができたので、Codexに向かった。
OK、じゃあcodexに行ってくるね
そして即座に戻ってきている。
ただいま。 まずはプロジェクトのところから、既存のフォルダーを使用?
そもそもCodexの基本の基も知らないので当然である。
そのあとも、
「続行するにはエージェント サンドボックスを設定してください ファイルを保護し、ネットワークアクセスを制限します」 こんなの出たけどこれはどうする?
と聞いている。スクショを貼っては「これで良い?」の繰り返しで、結局この設定に落ち着いた。
- アクセス範囲:選択した作業フォルダーのみ
- ネットワークアクセス:オフ
- フルアクセス:オフ
- 自動レビュー:オフ
今回のアプリは外部ライブラリなしのHTML/CSS/JavaScriptだけなので、ネットワークアクセスは要らない。フルアクセスはPC全体に触れてしまうので、最初から選ばないほうがいい、という話だった。
一発目から文字化けした
いよいよ、最初の指示を投げた。いきなり実装させず、まず計画を出させるという形にした。
このフォルダにある docs/spec.md を読んでください。
まだコードは書かずに、「コレクター購入評議会」のMVP第1弾を作るための実装計画を作ってください。
(中略)
返ってきたCodexの反応がこれである。
文字化けして表示されたので、仕様書の文字コードを確認して読み直します。
初めてのCodexへの指示が、いきなり文字化けした。回答自体は出てきたのだが、不安になる出来だった。
原因はCodexが自分で説明していた。PowerShellの既定の読み取りエンコーディングの問題で、UTF-8を指定して読み直したら正常に読めた、ファイル自体は直さなくていい、と。
このとき、私は初めて、AIの言ったことを一文字も自分の言葉を足さずにもう一方のAIへコピペした。 記念すべき瞬間である。以後この動きは日常になった。
勝手に実装しだして、怖かった
Codexが出してきた実装計画をGPTに貼って確認し、追加の注意点を足して投げ返した。
そうしたら、Codexがこう返してきた。
了解です。この計画で実装まで進めます。まず既存ファイルの有無を確認して、仕様に沿って4ファイルを作ります。
私がGPTに送ったメッセージには、こう書いてある。
勝手に実装し始めたね…
驚きと、少しの怖さがあった。
実際には暴走ではなく、「この実装計画で進めてください」と自分で入れたのだから当たり前なのだが、画面の向こうで勝手にファイルが作られていく感じは、それまでのチャットとは別物だった。
そこからしばらく待つ時間がある。私が打っているのはこれだけである。
すごい時間かかるんだね
すごいね、置いていかれてるわ
Codexは「横で一緒に作業する人」ではなく、急に裏でガーッと作業し始める。最初は本当に置いていかれる。
本を買っては積んでいた
待っている間に、こう打っていた。
私は今まで何回もアプリ作りたいなと思って、本を買っては積んでたから感動しています。
これが、この日いちばん自分の中で大きかったところだと思う。
今までも何度かアプリを作ってみたいと思って、Macを買ってみたり、本を買ってみたりしていた。そして結局、何ひとつ完成させていない。 文法とサンプルのあたりで疲れて、作りたかったものに辿り着く前に止まる。それを何度かやっている。
今回は順番が逆だった。作りたいものが先にあって、仕様を一緒に詰めて、コードは書かせた。自分の手ではないけれど、一歩動き出したのが嬉しかった。
動いた。そして即座に不満が出た
そして、できた。
index.html style.css app.js README.md の4ファイル。ダブルクリックして開くと、商品が登録できて、審議ボタンを押すと判決コメントが出て、「見送った」を押すと心のヘソクリが増えた。
すごいね、ほとんど完璧に動いてる
一発である。
そして、その同じメッセージの中で、私はもう次の要望を並べている。
- 5段階評価だと、意外と選択肢がないことが分かった
- 登録時価格は登録時のもので、現在価格は編集時に入れるほうが手間が省ける
- 廃盤リスクは、LEGOなら発売から2年なので、発売日から自動計算できると便利
- カテゴリでLEGOを選んだときだけ、その挙動にする
- 審議会モードを商品一覧の審議ボタンから切り替えられれば、一つの商品で何度も遊べる
- 審議に入ったら画面を切り替えて、8bitゲームみたいな画面で、モードごとの景色で審議されると面白い
「発売から2年」は、コレクターのあいだでよく言われている目安である。公式に決まった年数ではないし、自分で調べて裏を取ったわけでもない。 2年経つと廃盤リスクが高くなる、という肌感がだいたいその辺、という話。
動いた瞬間から、大変なほうが始まっている。 ここから先は「あれがやりたい、これがやりたい」の記録になるので、また別に書く。
この日の案は、どうなったか
この2日間で出た案が、今どうなっているかを並べてみた。この記事を書くために並べて、初めて気づいたことがある。
| 案 | 現状 |
|---|---|
| 評議会モード別のコメント | 実装済み。しかも当初案より進んで、モードごとに判定自体が変わるようになった |
| 心のヘソクリ | 実装済み |
| 転売価格で買ったときの闇落ちメーター | 実装済み |
| 評議会ランク(S:定価の守護者 〜 J:物欲に敗れし負け犬) | ランクという形ではなく、光と闇の度合いでコレクター属性を出す形になった |
| 発売前のスクランブル / 戦場モード | まだ入っていない |
| 戦場参加姿勢(後方彼氏面判定) | まだ入っていない |
| 購入後に相場が上がったときの「心の含み益」 | まだ入っていない |
この2日間で話していないことも、そのあと大量に足している。予算の未設定チェック、見送り履歴、購入後の振り返り、JSONバックアップ、iPhoneのホーム画面から起動できるようにする作業。むしろ実装の大半は、この表に載っていないものである。
そのうえで、一番盛り上がった戦場モードが、二ヶ月経ってまだ入っていない。 書きながら並べるまで、そのことに気づいていなかった。盛り上がったところほど実装が重い、というだけの話かもしれないが、事実として残しておく。
まとめ:とっかかりは、本当に簡単だった
振り返ると、こうなる。
- 6月19日(金)の夜、チャットでアイデア出し
- 6月20日(土)、Codexをインストールして、原型が動く
2日である。 そしてこの間、私はコードを一行も書いていない。書けない。
正直かなりびっくりしたし、これは「AI驚き屋」が現れてもおかしくないな、とは思えた。
ただ、うまくいった理由ははっきりしている。GPTで要件を固めてから、Codexに実装させたという順番である。
私:何を作りたいか決める人 Codex:手を動かしてコードを書く人 ChatGPT:計画や結果を通訳・レビューする人
途中でGPTがこう整理していて、実際そのとおりに動いた。(引用中の呼びかけ部分だけ「私」に置き換えた。それ以外は当時のまま。)この分け方は、今このサイトを作るときも、普段の業務でも意識している。
もし素人の私が、いきなりCodexにやりたいことを直接投げていたら、たぶんうまくいっていなかったと思う。(※これは当時の性能の話なので、今なら直接でもうまく汲み取ってくれるのかもしれない。自分では検証していない。)
そしてもう一つ。こうやってチャットの軌跡を残しておくと、コードの実装だけでなくその時の会話ごと振り返れるのが利点だと思う。この記事も、当時のログがあったから書けている。
何事も一回AIに聞いてみるといいよ、と自分も何も考えずに人に勧めてしまうし、人からも言われてしまう。言い古された話ではあるが、本当にもうそういう時代なのだと思う。
きっと私一人では、こんなアイデアも、実装もできなかったのだから。
このあと、細かい要望を足していく過程で、順調ではないことが何度も起きる。そっちは連載で書く。