AI駆動で学びながら、iOSアプリとGo製BFFを初めて開発した話

TECH BLOG Advent Calendar 2025 Day12 の記事です。

OPTiM Bizの開発をしております、24卒の山田です。
今回は個人開発として、知識ほぼゼロの状態からiOSアプリ開発とGo製BFF開発に挑戦した経験について、AI駆動開発というアプローチを中心に、以下の流れでお話しします。

1. はじめに

開発前の私のスキルレベル

iOSアプリ開発について
経験はほぼゼロの状態でした。過去にObjective-Cを少し触った程度と、ハッカソンでSwiftUIを体験したことがある程度です。普段はWeb開発をメインにしており、ネイティブアプリ開発の世界は完全に未知の領域でした。XcodeやiOS SDKの基本的な使い方すら怪しいレベルからのスタートです。

インフラについて
こちらも同様に、Terraformが何者なのかすら分からない状態でした。Infrastructure as Codeという概念は知識として知っていても、実際に手を動かした経験はほとんどありませんでした。development、staging、productionという環境の概念についても、理論は分かっても実践経験は皆無でした。

そんな私の強い味方
このような状況で頼りになったのが、ClaudeとCodexといったAIツールでした。分からないことがあれば即座に質問し、コードを書いてもらい、説明を求めました。AIを使い倒しながら学習と開発を同時進行で進めていく形になりました。

作ったもの

今回開発したのは、お散歩SNSアプリです。

なぜ「お散歩SNS」を作ろうと思ったのか
私は散歩が大好きです。休日に時間があると、一人で数時間延々と歩き続けます。 もちろん運動や移動手段としての側面もありますが、それ以上に散歩ならではの「発見」が楽しくてよくやります。知らない街角、季節の移ろい、偶然出会った景色など、歩いているからこそ見つけられるものがたくさんあります。 最初はこうした発見をInstagramのストーリーズに投稿して友人に共有していました。しかし、投稿しているうちに「もっとスコープを絞って、散歩に特化したSNSがあれば需要がありそうだな」と思うようになりました。散歩好きの人たちがお互いの散歩体験をもっと気軽に、そして詳細に共有できる場があったら面白いのではないかと考えました。

機能設計

  • 散歩ルートの記録、表示: GPSを使った軌跡の可視化
  • 距離と歩数の計測: 散歩の成果を数値で確認
  • 散歩中に撮影した写真の投稿機能: 発見の瞬間を共有

この3つがあれば、散歩好きの人たちの「共有したい」「見てみたい」という需要を最低限満たせるのではないかと考えて、開発をスタートしました。

開発アプローチ

開発アプローチとしては、MVP(Minimum Viable Product)の考え方を採用しました。 まずは「とりあえず動くもの」を目指して、iOSだけで完結するようSwiftだけでアプリを開発してリリースしました。 その後、アプリの規模拡大とAndroid対応を見越して、バックエンドのロジック切り出しとインフラのクラウド化を行いました。最初からマルチプラットフォーム対応や複雑なインフラ構成を考えるのではなく、段階的に発展させていく形で進めています。

2. AI駆動開発で進めたということ

今回の開発では、AIを単なるコード生成ツールとして使うのではなく「開発パートナーとして活用」しました。 具体的な進め方としては、以下のサイクルを回していきます(よくある仕様駆動開発です)

  1. 設計書を作成する
  2. その設計書通りに実装してもらう
  3. 出力されたコードをレビューする
  4. 分からないところがあれば質問する

相手は人間ではなくAIなので、質問回数は無制限です。 具体的な実装方法が分からなければ抽象的に聞き、理解を深めるために図や表を使って表現してもらうことも可能です。 このような柔軟なコミュニケーションが、AI駆動開発の大きなメリットだと感じました。

3. iOSアプリ開発

VSCodeではなくXcodeを選択

最初はVSCodeでiOSアプリ開発をしようと試みましたが、SwiftUIのプレビューやシミュレーター統合など、重要な機能が使えませんでした。結局Xcodeに移行しましたが、ターミナル統合やGit操作の違いに戸惑いました。

アーキテクチャ選択での大きな迷い

iOSアーキテクチャについてネットやAIを使って調べましたが、選択肢の多さに圧倒されました

  • UIKit時代のMVC
  • SwiftUIで推奨されるMVVM
  • クリーンアーキテクチャ
  • シンプルなMVアーキテクチャ
  • 等々

結局、社内の有識者に相談することで決着をつけました。 「個人アプリでまず小さく始めるなら、MVアーキテクチャで十分。将来的に複雑になったらその時にMVVMに移行すれば良い」というアドバイスで段階的な開発を前提とした現実的な選択ができました。 初学者にとって、経験豊富なエンジニアからの実践的なアドバイスは非常に価値があると実感しました。

Core Locationでの学習体験

散歩アプリの核となるGPS機能で、Web開発とは全く異なる非同期処理の概念に直面しました。「関数を呼んだら即座に値が返ってくる」という感覚でコードを書くと、全く動かない。delegate パターンやパーミッション管理など、iOS特有の概念をAIに段階的に質問していくことで理解を深めました。

4. Go製BFFの開発

インフラ基盤の技術選定

バックエンド開発にあたり、インフラ基盤としてGCPを以下の理由により選択しました。

  • 利用料金がAWSより安価: 個人開発のコスト削減を重視
  • 学習目的での選定: 業務でAWSを使用する可能性はあったが、GCPの可能性が薄そうだったので勉強用として選定

BFF選択の理由と責務分離の設計

BFFの切り分けを選択した理由

  • 将来のAndroid版でも同じAPIを活用できる
  • フロントエンドの要件変更に柔軟に対応できる

iOSとBFFで責務を以下のように分離しました

  • iOS側の責務
    • UI表示とユーザーインタラクション
    • GPSデータの取得と一次処理
    • 写真撮影と画像の圧縮
    • ローカルキャッシュの管理
  • BFF側の責務
    • ユーザー認証と認可
    • 散歩データの永続化と検索
    • ソーシャル機能
    • 画像ファイルの管理

AIを活用したGo学習プロセス

Goは初めて本格的に使う言語でしたが、AIを活用しながら以下の手順で進めました

  1. まず全体像を理解
    • 「Goで簡単なREST APIを作りたいのですが、全体的な構成を教えてください」
      • プロジェクト構造、依存関係管理、基本的なルーティングについて学習
  2. 具体的な実装を段階的に
    • 「ユーザー認証APIをGoで実装するにはどうすれば?」
    • 「データベース接続とマイグレーション管理の方法は?」
    • 「画像アップロード機能の実装方法は?」
    • 「iOSとBFFの責務の境界線は?」
  3. コードレビューと改善
    • 「この実装方法でセキュリティ上の問題はありませんか?」
    • 「よりGoらしい書き方はありますか?」

特に、GoのGoroutineによる並行処理や、interfaceを使った抽象化などは、AIの説明と具体例があったからこそ理解できました。

インフラ学習の大きな壁

BFF開発と同時に直面したのがインフラ構築の壁でした。「Terraformって何?」「development、staging、productionって何が違うの?」「GCPのサービスが多すぎてどれを選べばいいの?」という状態からのスタートでした。

AIを活用した段階的学習
まずは基本概念から理解していきました。Infrastructure as Codeとは何か、環境の違いと使い分け、個人アプリに適したGCPサービス構成などをAIに質問。その後、具体的な実装方法について、TerraformでGKEを構築する設定や環境ごとの設定管理方法を学習しました。

ローカル環境から始めて、development環境、staging環境、production環境へと小さく始めて段階的に拡張していきました。最初は単一インスタンスから始めて、必要に応じて高可用性を考慮した構成に移行。

理論だけでなく、環境ごとの設定ミスやデータベース接続エラーなど、実際のトラブルを経験することで理解が深まりました。こうした問題を一つずつAIに相談して解決して進めました。

5. AI時代のエンジニアとして身についた力と今後の展望

開発を通して身についた力

AIへの質問設計力
AIから有用な回答を得るためには、質問の仕方が非常に重要だと学びました。「地図に線を引きたいです」ではなく、「SwiftUIで、GPSで取得した座標データをMapViewに軌跡として表示したい。Core Dataから座標配列を取得する部分はできています」のように、具体的な状況、制約条件、期待する結果を明確に伝えることで、より有用な回答を得られるようになりました。

学習効率の劇的な向上
従来の学習では公式ドキュメントを最初から最後まで読む必要がありましたが、AI駆動開発では実践ファーストのアプローチで学習効率が劇的に向上しました。まず動くコードを生成してもらい、分からない部分を具体的に質問し、手を動かしながら理解を深める。この流れにより、iOS、Go、インフラという全く新しい3つの技術領域を短期間で習得できました。

AI時代のエンジニアの役割

今回の開発を通して最も強く感じたのは、AIによって技術学習のハードルが大幅に下がったことです。 従来であれば「iOSアプリ開発は難しそう」「インフラは専門家じゃないと無理」と思っていたような分野でも、AIをパートナーにすることで誰でも新しい技術を学べる時代になりました。 重要なのは、「分からない」を恥ずかしがらずに素直に認め、適切な質問を投げかけることだと思います。AIが強力になればなるほど、エンジニアにはより高次の判断力と人間らしい創造性が求められると感じています。

今後の展望

今回の開発で、AIをパートナーにした学習アプローチの有効性を実感できました。Swift、Go、インフラなど、今回触れた技術についても、さらに深く学べる領域が山ほどあります。 重要なのは、新しい技術に対して「分からないから避ける」のではなく、「分からないからこそAIに聞いてみよう」という姿勢を持ち続けることだと思います。

AI駆動開発という新しいアプローチを武器に、ユーザーの課題解決ありきのプロダクト作りと継続的な技術学習の両輪で、今後も挑戦を続けていきたいと思います。

最後まで読んでいただき、ありがとうございました!この記事が、AI駆動開発や新しい技術領域への挑戦を考えている方の参考になれば嬉しいです。

www.optim.co.jp