プログラミング
AIで実際のアプリを構築してみた。1年かかった
I Tried Building a Real App with AI. It Took a Year (alexhyett.com)
要約
筆者は、習慣トラッカーアプリをAIの助けを借りて開発しようと試みたが、期待に反して1年もの歳月を要した。既存のアプリでは要件を満たせず、AI開発プロセスも当初の予想より複雑で、コードの品質問題や予期せぬバグに直面した経験を共有している。
全文翻訳
AIで実際のアプリを構築してみた。1年かかった。
17 Jul 2026
#ios #ai #programming
Alex Hyett
75.3k subscribers
PeerTubeで視聴 YouTubeで視聴
登録して新しい動画を見逃さないようにする
PeerTubeで登録 YouTubeで登録
妻と私は、習慣、趣味、特定の家事をいつ行ったかなどを記録するアプリを探していました。
正直なところ、App Storeにはおそらく何百もの異なる習慣トラッカーアプリがあります。ToDoリストアプリの次に簡単なアプリだとされているので、これほど多くの選択肢があるのも驚くことではありません。しかし、私たちは何十もの異なるアプリを試しましたが、どれも私たちの求めているものにはぴったり合いませんでした。
もちろん、今ではAIがあるので、このようなものは簡単に作成できるはずです。数回プロンプトを入力すれば、AIがあなたが眠っている間や、ビーチでカクテルを飲んでいる間にアプリを構築してくれるでしょう。
しかし、実際にはそうはなりませんでした。
要件と既存のアプリ
このアプリにはいくつかの要件がありました。
習慣を長いリストで表示し、複数のページをめくって探す必要がないこと。
データはクラウドや他人のサーバーに一切保存されないこと。
iOS 18のジェネモジ(gen-emojis)をアイコンの一部として使用できること。プリセットのアイコンが合わない場合に便利なオプションです。
毎日、毎週、または毎月目標を設定できること。
目標がなく、発生回数だけをカウントできること。妻は時々頭痛がするので、それもすべて記録しておきたいと考えていました。
メモを追加できる機能。
私は、ワークアウトごとにどのような運動をしたか、ギターの練習でどのくらいの速さで曲を弾けるようになったかなどを書き留められるようにしたかったのです。
習慣のリマインダーを設定できること。毎日、または週や月の特定の日ごとに設定できること。
このリストに特に画期的なものはありませんでしたので、開発を避けるために、さまざまなオプションを検討しました。
まず、Streaksアプリを試しました。これはiOSで完全に無料のアプリで、Apple Healthとの連携機能もあります。
これは私のニーズのほとんどを満たしていましたが、このリストの要件の一部を満たすことができませんでした。
アプリが長いリストではなく、ページごとに分かれていました。追跡したい項目が20個もあると、すべてのページをめくるのは非常に面倒です。このアプリはデザイン賞を受賞しているので、おそらく私の問題でしょう。
妻は、彼女が追跡したい項目のいくつかに適したアイコンを見つけることができませんでした。そのため、自分で作成できる機能が必要でした。
発生回数をカウントする機能がありませんでした。毎日どれだけやりたいかを設定する必要がありました。これは、頭痛を追跡している場合には理想的ではありません。なぜなら、理想的には頭痛はゼロであってほしいからです。
彼女はまた、ストリーク(連続記録)をオフにする方法が必要だと気づきました。ストリークは、追跡しているすべてのものに常に役立つわけではありません。
他にもいくつかのアプリを試しました。HabitKitという人気のアプリや、Gritというアプリもありました。HabitKitのGitHub風の貢献チャートは気に入りましたが、開発者ではない妻はあまり気にしていないようでした。Gritはおそらく私たちが探していたものに最も近いものでしたが、それでもいくつかの機能が不足していました。
正直なところ、HabitKitやGritのどちらかで私のニーズは満たされたかもしれませんが、一つのことがありました。それは価格です。
私はアプリケーションにお金を払うことを気にしません。私の携帯電話には購入したアプリがたくさんありますし、デスクトップソフトウェアにも支払ったものがあります。インディー開発者を応援するのは良いことですが、かつてはiPhoneアプリがコーヒー一杯の値段だった時代を覚えています。
Gritは、月額9.99ポンドまたは年額29.99ポンドです。生涯ライセンスを購入するオプションもありますが、驚くべきことに44.99ポンドもします。これは新しいコンソールゲームの価格に近いものです。
HabitKitも同様ですが、月額1.99ポンドまたは年額11.99ポンドで、生涯オプションは29.99ポンドと、それほど高くはありません。
私がケチなだけかもしれませんが、予算にさらに多くのサブスクリプションを追加したくありません。すでに十分あります。
そこで、AIの助けを借りて自分で開発することにしました。
プロジェクトを開始したのは昨年の3月です。Cursorは無料クレジットを提供しており、AIの能力を試すのに最適な機会でした。これまでのところ、簡単なチャットの質問以外では、ほとんどAIを使用していませんでした。Swiftで何も開発したことがなかったので、できる限りの助けが必要でした。
HabitTedという名前に決め、妻はかわいいクマのロゴもデザインしてくれました。
AI開発プロセス
iOSアプリを開発したことがない場合、シミュレーターでアプリケーションをテストしたりデバッグしたりするには、Xcodeを使用する以外にほとんど選択肢がありません。そのため、CursorとXcodeの間で何度も行き来して、すべてを設定しようとしました。
これはClaude Codeがリリースされる直前だったので、完全なエージェント型のハンズオフエンジニアリングではありませんでした。代わりに、開発を多くの小さなタスクに分解し、AIと手動で一つずつ進め、変更ごとにテストしました。
簡単な「Hello, World!」アプリケーションから始めました。次に、習慣リストを追加し、習慣を追加する機能、習慣を編集する機能などを追加しました。
正直に言うと、週末にかけて約6時間後には、動作するように見えるアプリができました。まだ私の望むすべてができるわけではありませんでしたが、カスタムアイコンで習慣を作成でき、それをクリックして完了でき、さまざまな目標オプションをサポートし、iCloud同期も備えていました。
6時間で何かを機能させることができたとはいえ、それが楽しい6時間だったとは言えません。
通常、プロジェクトを完了すると、達成したことに誇りを感じます。問題があっても、物事が予定より長引いても、何か新しいことを学んで終えることができます。
それらの失敗から何かを学び、開発中のフラストレーションは、最終的にはそれだけの価値があり、少なくとも同じ間違いを繰り返さないことを学びました。
しかし、6時間後、Swift開発について多くを学んだとは言えません。
エラーが発生するたびに、エラーメッセージをコピー&ペーストして、AIに修正を試みるように頼んでいました。AIが問題を解決するのに十分でないことに腹を立てていましたが、自分自身もそれができないことに腹を立てていました。
問題
Swiftでプログラミングしたことはありませんでしたが、他の多くの言語でプログラミングした経験があり、コードを見ると、良いコードではないことがわかりました。
各ビューはほぼ1000行の長さでした。Xcodeのコンパイラはその長さを処理できず、常に分割するように指示してきました。ボタンのような、同じように見えるもののスタイリングコードが、ビューごとに完全に異なっていました。全体的に少し散らかっていました。
そこで、AIにその混乱を修正させるのではなく、手動で、昔ながらの方法でリファクタリングすることにしました。すべてを100行以下の個別のビューに移動し、一貫性のないコードをすべて修正しました。
その後、アプリをさらにテストして、すべてが正しく機能することを確認し、さらに多くの問題を発見しました。
iCloud同期が実際には機能しないことがわかりました。iCloudに同期しているように見えましたが、アプリケーションをアンインストールして再インストールすると、すべてのデータが失われてしまいました。
また、習慣に多くの完了を追加すると、処理が非常に遅くなることがわかりました。詳細ページにある統計情報は、ページにアクセスするたびにすべての習慣をループして計算していることに気づきました。
代わりに統計情報を保存するための習慣にいくつかのプロパティを作成し、計算を習慣の完了時に行うように移動しました。その後、データモデルが過度に複雑で、命名規則が非常に奇妙であることに気づきました。これにより、スキーマを変更するたびに習慣が壊れるのを防ぐために、データ移行計画を立てることになりました。
すべてが修正された後、リマインダーやさまざまな目標オプションなど、不足していた機能を追加しました。
その後、iOS 26がリリースされました。
Appleが開発にAIを多用したのかはわかりませんが、iOS 26には多くのバグがありました。
ガラス効果はあまり好きではないので、「透明度の低減」アクセシビリティオプションをオンにしましたが、これが私のアプリでさまざまな問題を引き起こしました。
ダークモードを常に使用しています