ここ最近、AIエージェントをかなり集中的に触っていた。

Codex の $100 プランを契約し、20日ほどがっつり使ってみた。 結論から言うと、来月からは $20 プランへ戻す予定である。

理由は単純で、$100 プランの容量を使いこなすほど、自分の指示が追いつかなかったからだ。

Codex が物足りなかったわけではない。 むしろ十分すぎた。

5日のコンテキスト上限を使いこなすほどの指示を、自分が出せなかった。 つまり、自分の処理能力が先に限界へ来た。

CLI型AIエージェントのすごさは「フィードバックループ」にある

Codex に限らず、この手の CLI 型AIエージェントを導入してすごいと思ったのは、ローカルプロジェクトを理解してくれることだった。

これまで Web ブラウザ版の ChatGPT を使ってコード修正を相談する場合、修正したいファイルを毎回アップロードしたり、コードを貼り付けたりする必要があった。 しかし CLI 型AIエージェントでは、ローカルのプロジェクトをそのまま見てもらえる。

そのため、プロジェクト全体をまるで把握しているかのように、かなり的を射たコーディングをしてくれる。

ただ、改めて考えると、すごさはそれだけではない。

もっと大きいのは、AIエージェント自身がテストコードを実行できることだと思う。

AIがコードを改修する。 そのコードに対してテストを実行する。 テストが失敗したら、エラー内容を読んで、もう一度コードを直す。 そしてまたテストを実行する。

これは、単なるコード生成ではない。 入力に対して出力を返すだけではなく、その出力結果を観測し、フィードバックして、次の修正に反映する流れである。

制御工学っぽく言えば、開ループではなく、閉ループになった感じがある。

ai_agent_feedback_loop.svg

これまでのAIチャットは、どちらかといえば「コードを提案して終わり」だった。 しかし CLI 型AIエージェントでは、生成したコードを自分で実行し、結果を見て、自分で修正する。

このフィードバックループが入ったことで、AIによるコーディングはかなり実用的になった。 人間に例えれば当たり前の話だが、たったこれだけで、精度はぐんと上がった感がある。 (このことは、今後 AI をうまく使いこなすための大きなヒントになるかもしれない)

もちろん、すべてが完璧になるわけではない。 テストが通っても、仕様として正しいとは限らない。 こちらの気持ちや意図まで理解するには程遠い場面も多々あり、最後は人間による判断が必要になる。

それでも、テスト結果という強いフィードバック信号をAI自身が扱えるようになったことは、かなり大きな変化だと思う。

Claude も契約してみた

一方で、Claude の $20 プランも契約してみた。

CLI AI エージェントは Claude が先駆者だと思うが、Codex を先に体験してしまったので、Claude を使うことに今更感があり少し足踏みしていた。 しかし、実際に使ってみると Codex との違いを比較できて、かなり面白かった。

ただし、契約時にはクレジットカード決済で少し苦労した。 なかなか決済が通らず、最終的には VISA の楽天カードについてサポートへ連絡し、ストップされていた件を説明して解除してもらうことで、ようやく決済できた。

そこまでして契約した Claude だったが、使ってみるとかなり好印象だった。

特に iOS アプリ開発では、Codex よりもコンパクトで、修正が的を射ている感じがした。 開発していて、若干気持ち良い。

Claude は「必要最小限の修正」がうまい

今回、iOS アプリのベースは Codex に作ってもらっていた。

その後、Claude に機能追加を依頼してみたところ、本当に必要最小限の修正で対応してくれた。 これがかなり好印象だった。

AIエージェントを使っていて心配なのは、こちらが「この機能を追加して」と言ったときに、余計なところまで触ってしまわないかという点である。

人間のプログラマー感覚で見ると、既存コードに対して必要以上に手を入れられるのは怖い。

その点、Claude は既存の構成を尊重しながら、最小限の差分で機能追加してくれる感じがあった。

Codex は土台作りや大きめの実装に強い。 Claude は既存コードへの繊細な追加や修正が気持ち良い。

今のところ、自分の中ではそんな印象である。

ただしAIエージェントは勝手に突っ走る

ただ、AIエージェント全般に感じる面倒くささとして、勝手に突っ走ることがある。

それは Codex も Claude でも同じ。

たとえば、自分は GitFlow のルールで開発を進めている。 そのため、AIエージェントにもそのルールを伝えている。

すると、GitFlow を守ろうとしてくれるのは良いのだが、ちょっとした質問まで「実装タスク」として扱ってしまうことがある。

少し聞いただけなのに、ブランチを切る。 Markdown ファイルを作る。 コミットする。 場合によっては develop にマージしようとする。

こちらとしては、ただ相談したかっただけなのに、エージェント側は全力で作業モードに入ってしまう。

AGENTS 定義を守ってくれること自体はありがたい。 しかし、質問、相談、軽い確認、実装依頼の温度感をもう少し読み分けてくれる柔軟性も欲しくなるのだ。

ここらへんが今のAIエージェントの煩わしさとして、かなり強く感じているところだ。

GitHub を personal から organization へ移した

GitHub も personal から organization へ一部移行した。

これは無料プランでもできる。

なぜ organization に移したかというと、権限管理を一括でできるからである。

前回の GitHub IssueからCodexを動かすagent runnerを作った話 に書いた通り、VPSサーバーで agent-runner なるものを動かす上で、AI用に GitHub の専用アカウントを割り当てている。 その場合に、権限付与が多少楽になると思ったからだ。

たとえば agent-runner 用のアカウントを使う場合に、personal のリポジトリにひとつずつ招待するのは大変だ。 organization に追加しておけば、まとめて権限を管理できる。

とはいえ、まだ大きなメリットを実感している段階ではないので大した話ではない。

GitHub Actions もAIエージェントで作れるようになった

GitHub Actions も活用し始めた。

main ブランチへの push をトリガーにして、VPS 側のバッチを起動するワークフローを作成した。

以前は、GitHub Actions のワークフローを書くのは億劫な作業だった。 調べながら YAML を書いて、エラーを見て直して、また試す。 それだけで気が重くなる。

しかし今は、Codex のようなAIエージェントに任せると、プロジェクトの構成を理解したうえで、かなりスムーズに作ってくれる。

たとえば Hugo で管理しているプロジェクトでは、これまで make deploy のようなコマンドでデプロイしていた。 それを、main への push をきっかけとして自動実行するようにした。

一回あたりで見れば、ワンステップ、ツーステップが減るだけかもしれない。 しかし、こういう小さな自動化が何百と積み重なると、開発体験はかなり変わってくる。

特に自分のように、毎日のように Fork などから main に push する運用をしているなら、そのタイミングで勝手に動いてくれるのはありがたい。

ただし、GitHub Actions には無料枠の実行時間がある。 無料プランで使う身としては、月に使える分数はやはり気になる。

便利だが、無限に使えるわけではない。 その現実感もある。

AIエージェント時代に再開するアプリ開発

ここ最近 AI エージェントを使った iOS アプリ開発も進めている。

今日作ったのは「レシとり」というスキャナアプリだ。

これはレシートを撮影して、レシート部分だけを切り抜いて保存するシンプルなアプリでよくありそうなやつ。

もともと、以前に OpenCV を使ってレシートトリミングアプリを作ろうとしたこと があった。 しかし、そのときは完成まで持っていけずに頓挫していた。

今回、AIエージェントの力を借りれば、アプリとしてリリースできるところまで持っていけるのではないかと思った。 軽い気持ちで再挑戦したところ、意外と形になった。

既存のスキャナアプリではなく、自分用に作りたかった

高性能なスキャナアプリはすでにたくさんある。

もちろん自分も以前は使っていたのだ。

しかし、既存のアプリはどうしても有料サービス向けの設計になっていることが多い。 広告が表示されたり、課金誘導があったりする。

それを我慢して使うこともできる。 または少額なら課金して使う選択肢もあるのだろう。

しかし私はそれが嫌だった。 なぜかと考えてみると、自分の感覚としては、シェルスクリプトを作るような感覚で、必要なものを自作できるなら自作したい。

つまり、プログラマーならシェルスクリプトにいちいち課金はしないだろう。そんな感覚に近いのかもしれない。

だから、AIエージェント時代に、もし自分用の小さなアプリをサクッと作れるなら、シェルスクリプト感覚で作りたいと思った。

もちろんアプリであれば広告も、機能も、画面も、自分の使いやすいようにコントロールできる。

ただし、大前提としては自分のためである。 自分が使いたいから作る。
自分が使いもしないものを開発し続けるモチベーションは、意外と続かないもの。 (いや、お金になれば続くのかもしれないが)

Apple の Vision / ML API がかなり優秀だった

アプリを作っていると新しい発見もあった。先ほどのレシート検出方法だが、OpenCV ではなく Apple の Vision / ML 系 API を使うといとも簡単に高精度で検出できることを知った。

すでにレシートを「書類」として認識する機能が提供されており、これを使うことでレシート部分の検出精度がかなり上がった。

以前 OpenCV で頓挫していた部分が、Apple の標準機能によって一気に現実的になった。

まぁ、ベンダーロックインってやつでもあるわけだが、それを言ったらAIもそうか。 この先もしばらく iPhone のお世話になりそうなので、個人的には問題ないかなと思っているが。

とにかくAIエージェントのおかげで違う世界が見られたという話。

「レシとり」アプリでやりたかったこと

宣伝するには恥ずかしいほど大したアプリではないのだが、今回作った「レシとり」アプリにも触れておきたい。

現段階の「レシとり」は、とてもシンプルである。

レシートを撮影する。 レシートの四隅を検出する。 レシート部分だけを切り抜く。 画像として保存する。

自分としてやりたかったのは、画像容量の削減だった。

レシートを普通に写真で撮ると、周囲の余白がかなり入る。 机や床や背景まで含まれてしまう。

その分、画像容量も無駄に大きくなる。 見た目もあまり良くない。

標準のカメラアプリでレシートをまとめて撮影しておけば一旦は事足りるのだが。

まぁ、せっかくだったらレシート部分だけをピッタリきれいに切り抜ければ、ファイルサイズも小さくなるし、見た目も整理される。

まずはその単純な発想から始めた。

バージョン1としては、それで十分だった。

しかし、ちょっと調べるとまた新たな機能を発見してしまい、試したくなるのがこのAI駆動開発「沼」。

Apple の OCR API もかなり優秀らしいので、実験としては面白そうだ。 今後は OCR を使って、合計金額や店舗名などをどこまで抽出できるかも試してみたい。

このように、アイデアをサクッと実現できてしまうのがAIエージェント時代の良いところでもあり、怖いところでもある。

個人開発のハードルはかなり下がった

アプリ開発でもAIエージェントを使ってみた感想としては、個人開発のハードルはかなり下がったと感じた。

以前から ChatGPT などの対話ベースでもずいぶんコーディングは楽になってはいたのだが。

CLI の AIを導入して特に大きいメリットを感じたのは、リリースまわりの面倒な作業である。

これまでなら fastlane の導入やデプロイ自動化を自分で調べて実装するのは、とても面倒だった。 そのため、アプリのリリース作業は手作業でやっていた。

しかし今回は、AIエージェントのおかげで fastlane の導入からデプロイまで進められた。

これはかなり大きい。

開発そのものよりも、周辺の雑用が楽になる効果が大きいのかもしれない。

サポートページを作る。 プライバシーポリシーを書く。 デプロイ設定を整える。 GitHub Actions を用意する。 fastlane を設定する。

こういう定型的で面倒な作業は、人間よりAIエージェントに任せた方が楽だ。

一方で、メインの開発やコーディング指示については、まだ完璧ではない。 意図と違う実装をすることもある。 手戻りもある。 そこにはまだストレスがある。

つまり、AIエージェントは個人開発を完全に楽しいものに変えたわけではない。 しかし、面倒な雑用をかなり肩代わりしてくれるようになった。

この差は大きい。

AIエージェントに没頭しても、楽しいわけではない

ここ最近、AIエージェントとのやり取りにかなり時間を使っている。

ただし、それが楽しいかと言われると、少し違う。

正直、楽しいというより面倒くさい。

スマホ普及当初に、アプリ開発にもかなりハマっていた時期がある。 そこから数年もたてば、アプリ開発自体もだいぶ飽きるものだ。

しかもプログラマーとして仕事をしている立場である。 なおさらパソコン作業も飽きるを通り越した存在だ。 だから開発そのものが楽しくて仕方ない、という感覚はあまりない。

AIエージェントによって一瞬で具現化できるのは確かにすごい。 楽ではある。

しかし、楽しいかというと、まだそこまではいっていない。

むしろ危ないと思うのは、パソコンに張り付く時間が増えることだ。

姿勢も悪くなる。 首も痛くなる。

この生活をあと何週間も続けたら、健康を害するだろうなという感覚がある。

AIが速すぎて、人間側の休み方がわからない

というのも、これまでのプログラミング作業には、ある程度の待ち時間があった。

調べる時間。 ビルドを待つ時間。 考える時間。 散歩する時間。 お茶を飲む時間。

しかし、AIエージェントは待たせてくれない。

タスクを依頼しても、お茶を飲む暇もなく返ってくる。 すぐに次の確認、次の修正、次の指示が必要になる。

これが意外と難しい。

AIが遅くて困るのではない。 むしろ速すぎて、人間側の思考が追いつかない。

今の自分の運用では、ターミナルに張り付いて、指示を出して、返答を待って、また指示を出す。 その繰り返しになっている。 (前回の agent-runner 導入で確かに楽になった部分はあるのだが、iOSアプリの場合は macOS でしか動かない Xcode が必要なため、VPSサーバーで動かすことができないのだ)

今までの作業とは、息抜きの仕方が違う。 そこにまだ慣れていない。

AIエージェント時代には、人間側の休み方も設計し直す必要があるのかもしれない。

AIエージェントは個人開発をブログ化する

この20日間を振り返って、AIエージェントが個人開発をどう変えるのかを考えると、自分の中ではブログに例えるとわかりやすい。

2000年代、WordPress のようなオープンソースCMSが広がったことで、誰でも自分のブログを持てるようになった。

インストールも比較的簡単で、誰もが自分のサイトで発信できるようになった。

それによって、ライターや出版社のような業界の人たちは、少し焦ったのではないかと思う。 誰でも発信できる時代になったからだ。

しかし、誰でも発信できるからといって、誰もが作家のような文章を書けるわけではない。 人を惹きつける文章を書けるわけでもない。

AIエージェントによるアプリ開発も、それに近い。

これからは、プログラミングを深く知らなくても、それっぽいアプリを作れる人は増えると思う。 個人でも、アプリをどんどん作れる時代になる。

そして、大量生産も進むだろう。 ブログ記事のように大量のアプリが作られる時代になる。

ただし、そこで人気を得て実際に使われるのは、一部の優秀なアプリだけだと思う。 そこはブログとあまり変わらないのかも。

ニッチな自作アプリはどんどん増えていい

一方で、自分のためだけに作るようなニッチなアプリは、これからどんどん増えていけばいいと思う。

誰かにとっては不要でも、自分にとっては必要なもの。 大きな市場はないけれど、ある人にはピッタリ刺さるもの。 シェルスクリプトのように、自分の作業を少しだけ楽にするもの。

そういう小さなアプリが、ブログ記事を書くような感覚で増えていく。

それはかなり面白い未来だと思う。

「レシとり」も、まさにそのひとつである。

高機能なスキャナアプリを作りたいわけではない。 自分にとって使いやすいレシート撮影アプリが欲しかった。

だから作った。

そのくらいの軽さでアプリを作れる時代が来つつある。

関連リンク

今回の話に近い記事や、開発まわりで読み返しやすいリンクをまとめておく。

まとめ

AIエージェントは、個人開発をかなり身近なものにしつつある。

Codex によって、ローカルプロジェクトを理解してもらいながら開発できるようになった。 Claude によって、必要最小限の修正を気持ちよく進められる場面もあった。 GitHub Organization や GitHub Actions を組み合わせることで、AIエージェントに任せる領域も整理しやすくなった。 fastlane やデプロイ、サポートページ、プライバシーポリシーのような面倒な雑用も、かなり任せられるようになった。

その結果、以前 OpenCV で頓挫していたレシート撮影アプリ「レシとり」を、リリースできる段階まで持っていけた。

これは間違いなく大きな変化である。

ただし、AIエージェントもまだ完璧とはいえない。

指示と違うこともする。 勝手に突っ走ることもある。 質問しただけなのに実装タスクとして処理してしまうこともある。 そして、速すぎるがゆえに、人間側の思考や休憩が追いつかないこともある。

AIエージェントは個人開発を楽にする。 しかし、人間が何もしなくてよい世界になったわけではない。