Skip to content

Kiro CLI と二人三脚で iPhone アプリを作成し App Store に公開した話

iOS アプリ開発の経験ゼロの状態から、Kiro CLI と対話しながら iPhone アプリを構築し、App Store に公開するまでの記録です。
要件定義から App Store 審査通過まで、実質的な作業時間は半日程度でした(審査の待ち時間の方が長かった)。

作ったもの

AWS Security Quiz」という、AWS セキュリティをテーマにした4択クイズアプリです。

  • ターミナル風の UI(黒背景+緑文字)
  • 8 カテゴリ 48 問(日本語・英語対応 ※現在申請中の v1.2.0 より)
  • カテゴリ別の弱点分析
  • Google AdMob バナー広告

App Store で「AWS Security Quiz」で検索すると出てきます。

あるいは以下のリンクからもダウンロード可能です。

Download_on_the_App_Store_Badge_JP_RGB_blk_100317

モチベーション

先日開催した JAWS-UG 神戸 CTF 大会 でも使用した CTFd を使った CTF ゲーム環境を構築していたた際に、「もっとカジュアルにセキュリティ知識を学べるものがあると良いのでは」と思ったのがきっかけです。

CTF のようなシナリオベースの実践問題とは別に、基礎知識を 4 択で手軽に確認できるクイズアプリがあれば、初学者〜中級者の学習に役立つのではないかと考えたのがモチベーションです。

開発の流れ

要件定義(Kiro CLI との対話)

Kiro CLI に「AWS を題材にしたクイズアプリを作りたい。まずは要件定義からしていきたい。」と伝えると、ターゲットユーザー、プラットフォーム、出題形式、デザインのトーンなど、的確な質問をしてくれました。

こちらから伝えたのは以下のポイントだけです。

  • ターゲット: 初学者〜中級者
  • 出題スタイル: 知識問題の4択
  • プラットフォーム: iPhone
  • デザイン: CTF っぽいハッカー風(ターミナル風の黒背景+緑文字)
  • クイズデータはアプリバンドル
  • 30 問程度

これだけの情報で、Kiro CLI は要件定義書と技術設計書を生成してくれました。
技術スタックとして React Native(Expo)を提案してくれたのも、なんか今風かな?と思いそのまま採用しました。

実装(5フェーズ)

Kiro CLI は実装を5フェーズに分割して進めてくれました。

  1. Phase 1: プロジェクト初期化、Expo Router、テーマ設定
  2. Phase 2: クイズ機能(出題・回答・正誤判定・解説・結果)
  3. Phase 3: 30 問のクイズデータ作成
  4. Phase 4: 進捗管理・弱点分析(AsyncStorage)
  5. Phase 5: UI 磨き込み(FiraCode フォント、タイプライターアニメーション)

各フェーズで TypeScript のコンパイルチェックと Expo のバンドル確認を行いながら進めてくれるので、「ビルドが通らない」という状態に長時間ハマることはありませんでした。

AdMob の組み込み

「画面下部に Google AdMob のバナー広告を挿入したい」と伝えたところ、react-native-google-mobile-ads のインストールから app.json の設定、開発時はテスト広告・本番は実 ID で切り替える仕組みまで一発で作ってくれました。

ただし、AdMob App ID にプレースホルダーを入れた状態でシミュレーターを起動するとクラッシュする問題が発生。Kiro CLI がクラッシュログを読んで GADApplicationVerifyPublisherInitializedCorrectly が原因であることを特定し、実際の App ID を設定することで解決しました。

シミュレーターでの動作確認

環境面で一つ引っかかったのが xcode-select の設定です。
私の環境では Command Line Tools を指していたためシミュレーターが使えず、Kiro CLI に指摘されて sudo xcode-select -s /Applications/Xcode.app/Contents/Developer を実行。
これでシミュレーター起動ができるようになりました。

App Store 審査

EAS Build でクラウドビルドし、eas submit で App Store Connect に提出。初回は AdMob 関連で 2 回リジェクトされました。

  1. ATT(App Tracking Transparency)未実装 — AdMob を使う場合はトラッキング許可ダイアログが必須
  2. ATT ダイアログが表示されない — アプリ起動直後に呼ぶとダイアログが表示されないことがある(1秒の遅延を入れて解決)

いずれも Kiro CLI に審査却下メッセージを貼り付けるだけで、原因特定から修正まで対応してくれました。

v1.1.0: 英語対応

リリース後、英語でもプレイできると良いと感じたので Kiro CLI に伝えたところ、以下を提案・実装してくれました。

  • 提案:端末の言語設定で自動切替
  • 提案:アプリ内で手動切替も可能
  • こちらからの承認と指示で実装:30 問分の英語翻訳(AWS 公式表記準拠であることを最優先、次にネイティブなアメリカ英語話者にとって違和感のない英語であること)

英語版の問題データは、サブエージェント機能を使って並列に翻訳してくれたので高速でした。

ちなみに本業で英語起票したり、英語でくる AWS サポートケースへの応対の際に英語での応対を余儀なくされることが多くあります。
その時のために「AWS 公式表記準拠であることを最優先、次にネイティブなアメリカ英語話者にとって違和感のない英語」に翻訳するエージェントを作成して活用しているのですが、サブエージェント機能の利用シーンで、そのエージェントを呼び出したり自律的にやっている様子が伺えました。

v1.2.0: 新カテゴリ追加

さらに問題数を増やしたいという話をすると、追加候補のカテゴリを提示してくれたので、そこから 3 つ選んで追加しました。

  • S3 セキュリティ
  • Organizations・SCP
  • ログ・モニタリング

計 48 問になり、内容の充実度が上がりました(※現在申請中の v1.2.0 より)。

問題の品質管理

AI が作成した問題は、外部レビューで技術的正確性を確認しています。
実際に指摘をした箇所は以下のようなものでした。

  • GuardDuty のデータソース説明が古い(2022〜2024年に追加された保護機能の反映漏れ)
  • IAM Access Analyzer の Unused Access Analyzer 機能への言及不足
  • CloudTrail Lake の新規受付停止(2026年5月〜)の反映

このような「AWS 側の進化に伴う陳腐化」は避けられないため、アプリ内に免責事項を表示し、2026年6月 時点の情報である旨と AI を利用している旨を明記しています。

感想

よかった点

  • iOS 開発の知識ゼロでもアプリを公開できた
    • React Native / Expo という選択肢を提案してくれたおかげで、Swift を学ぶことなく iPhone アプリを作成することができた
  • 各フェーズで確実にビルド確認してくれる
    • 「動かない」状態が長く続かないため、トラブルシュートに煩わされることがほとんどなかった
  • 審査対応が速い
    • リジェクト理由を貼るだけで原因特定 → 修正してくれる
  • 英語翻訳の品質が高い(と思われる)
    • AWS 公式表記に準拠することを優先に、ネイティブなアメリカ英語話者にとって自然な英語、という指示の与え方で英訳ができている(と思われるとしたのは、英語の知識がないため、良し悪しの判断がつかないためです)。

注意点

  • AdMob のような外部 SDK は設定ミスでクラッシュする
    • プレースホルダーの ID は使えない、など
  • AI が生成した問題は必ず人間がレビューすべき
    • 技術的に陳腐化している箇所や微妙なニュアンスのズレがある
  • App Store 審査は実機の挙動が重要
    • シミュレーターで動いても実機(特に ATT ダイアログ)で動かない場合がある

まとめ

「アイディアはあるけど iOS 開発の知識がない」という状況でも、AI コーディングエージェントと対話しながら進めることで、実用的なアプリを App Store に公開するところまで到達できました。

重要なのは「何を作りたいか」を明確に伝えることと、出てきたものを実際に触って「ここが違う」「こうしたい」とフィードバックすることだと感じています。コードを書く能力よりも、プロダクトの方向性を判断する能力の方が重要な時代になってきているのかもしれません。
いわゆるドメイン知識が求められるようになってくるよ、ってことですね。

アプリについては、何か思いつくことがあればのんびりと開発していきます。

ではまた。

Comments