利益:
- 人工知能にコードを生成させる前に、MVVM などのアーキテクチャを適用し、レイヤーごとに細かくリクエストすることで、保守が容易でテスト可能なコードを取得します。
- Kotlin の null セーフティやコルーチン、Swift のオプション ループやメモリ ループなどの言語固有のトラップを認識し、生成されたコードをそれらに対してチェックする機能。
- クロスプラットフォーム (Flutter、React Native) プロジェクトでプラットフォームごとに権限と構成を個別に検証する機能
モバイル開発の中心はコードであり、そこに AI による最も具体的なメリットが現れます。しかし、「AI にコードを書いてもらう」という文自体は戦略ではありません。優れたコード生成。適切な言語、適切なアーキテクチャ、適切な境界、適切な検証を組み合わせる必要があります。この単元では、iOS の言語である Swift、Android の言語である Kotlin、および 1 つのコード ベースで 2 つのプラットフォームで実行されるクロスプラットフォーム ツールで AI を効率的かつ安全に使用する方法を学びます。目標は、AI を「コード オートマトン」ではなく、アーキテクチャを決定するアクセラレータとして位置付けることです。
アーキテクチャが第一、コードが二番目
最もよくある間違いは、アーキテクチャ計画を持たずに AI にコードを直接要求することです。これは基礎を置かずに壁を建てるようなものです。モバイルで最も一般的なアーキテクチャは MVVM (Model-View-ViewModel — データ、ディスプレイ、ディスプレイのロジックを分離する設計パターン) です。これは、ビューが単なるビューであり、ロジックと状態が ViewModel 内に存在し、データがモデル層内にあることを意味します。最初から AI にこの分離を課さないと、すべてのロジックを画面コードに詰め込んだ、テスト不可能で保守が困難な構造が生成されます。
健全なコード生成フローを段階的に説明します。
- コンテキストを教えてください。使用されるプラットフォーム、言語、バージョン、アーキテクチャ、ライブラリ。
- レイヤーをリクエストします。最初にデータ モデル、次にネットワーク/データ層、次に ViewModel、最後が画面です。
- 小さな部分を求めてください。 1 つの画面または 1 つの機能。 500 行にも及ぶ巨大なファイルではありません。
- それぞれの部分を確認します。構築、テスト、統合。次のトラックに進みます。
- リファクタリング (コードの改善) をリクエストします。作業コードの後の「読みやすくテストしやすくする」ステップ。
ヒント: AI に「MVVM に従ってコードを分割する。どの部分が View であるべきか、どの部分が ViewModel であるべきか、どの部分が Model であるべきか、それらを別々に指定する」と指示します。この 1 つの文により、生成されたコードのアーキテクチャの品質が大幅に向上します。
Kotlin と Swift: 言語固有の考慮事項
Kotlin (Android) と Swift (iOS) は最新の安全な言語ですが、それぞれに異なる落とし穴があります。 Kotlin では、Null 安全性 (型システムを介して変数を「null」にできるかどうかをチェックする) が AI によって緩やかに型指定されることがあります。不要です!!演算子 (null の場合にクラッシュを強制する記号) は、アプリケーションをクラッシュさせる可能性があります。 Swift では、オプションの管理サイクルと保持サイクルが重要です。 AI はクロージャに [弱い自己] を追加することを忘れる可能性があり、これによりメモリ リークが発生します。
したがって、言語を選択するときは、「Kotlin では null 安全性を維持します。使用しないでください !!」のように、それに応じてプロンプトを調整してください。または「Swift のクロージャでの強参照ループを防止する」。
注意: AI によって生成された非同期コードには特別な注意が必要です。 Kotlin コルーチンで間違ったスコープを選択したり、Swift で async/await でメインスレッドをブロックしたりすると、アプリケーションがフリーズします。 AI はこうした間違いを頻繁に犯します。テストせずに信用しないでください。
クロスプラットフォーム開発: Flutter と React Native
単一のコードベースで iOS と Android の両方に対応したい人にとっては、Flutter (Google の Dart 言語ベースのツールキット) と React Native (Meta の JavaScript ベースのソリューション) が際立っています。 AI はこれらの環境でも強力ですが、プラットフォームの違い (権限、ストア ルール、デバイス固有の動作) を回避する場合があります。たとえば、Flutter では、カメラの権限は iOS と Android で異なるファイルで定義されます。 AIは1つしか書けません。クロスプラットフォーム コードでは、「両方のプラットフォームに必要な権限と構成を個別に付与する」ことが重要です。
選挙概要:
アプローチ
いつ
AIによる注目
ネイティブ (Kotlin/Swift)
最高のパフォーマンス、デバイス深く統合
各プラットフォームには個別のコードがあります。二度検証する
フラッター
1 つのチーム、高速で一貫した UI
プラットフォーム固有の権限/設定を手動で確認する
ネイティブに反応する
Web/JSチームが利用可能
ブリッジ (ネイティブ ブリッジ) セクションを慎重にテストします
ミニケース3個
ケース 1 — コルーチン トラップ。 Android チームは、AI から製品リストを取得する機能を取得しました。コードはメインスレッドでネットワークリクエストを作成していました。テスト デバイスでは問題は発生しませんでしたが、弱いネットワークではアプリケーションが 4 秒間フリーズし、ANR (アプリケーションが応答しません) という警告が表示されました。 AI が「IO ディスパッチャでネットワーク作業を行う」ように指示された場合に修正されました。教訓: 同時実行性は常に制御されます。
ケース 2 — メモリ リーク。 iOS 開発者は、AI が生成した画面を 20 回開いたり閉じたりすると、アプリのメモリが 40 MB から 180 MB に増加したことを発見しました。その理由は、クロージャに [weak self] が欠落しているため、ViewController をメモリからクリアできなかったためです。 Xcode のメモリ グラフでその罠が明らかになりました。教訓: ネイティブ開発ではメモリ プロファイルは必須です。
ケース 3 — プラットフォームの違い。 Flutter チームは AI からギャラリー アクセス コードを取得しました。Android では機能しましたが、iOS ではクラッシュしました。その理由は、フォト ライブラリのアクセス許可の説明 (NSPhotoLibraryUsageDescription) が Info.plist ファイルに追加されていなかったためです。 AIはAndroid側だけを書きました。 15分ほどで直りましたが、バレていなかったら店で断られていたでしょう。
弱いプロンプト / 強いプロンプト
弱いプロンプト: 「API から製品を取得する Kotlin コードを作成してください。」
強力なプロンプト: 「REST API から製品リストを取得する Android/Kotlin 用のコードを生成します。 - レトロフィット、サスペンド機能を備えたネットワーク レイヤー - Dispatchers.IO のネットワーク ジョブ、メイン スレッドのブロック - MVVM: リポジトリ -> ViewModel -> StateFlow による UI 状態 - エラー状態: ネットワークなし、4xx、5xx の個別のシールされたクラス状態 - null セキュリティの保護、!! 使用方法 !! レイヤーを個別のファイルとしてエクスポート、それぞれ 1 文で説明します。」
強力なプロンプトにより、生成されたコードが前のケースの罠に陥るのを防ぎます。
コピー可能なテンプレート
階層化された制作テンプレート: 「[プラットフォーム/言語] の [機能] を開発します。次の順序で作成します。1) データ モデル (データ クラス/構造体)2) ネットワークまたはデータ ソース層 3) リポジトリ 4) ビューモデル (状態管理)5) 画面 (UI) 各層を個別にエクスポートし、それらの間に統合メモを追加します。」
言語固有のセキュリティ テンプレート (Kotlin):「この Kotlin コードを確認してください:- !! とプラットフォーム タイプの明確な使用法- コルーチンのスコープとディスパッチャーの選択を確認してください- メイン スレッドをブロックする呼び出しはありますか?[コード]」
言語固有のセキュリティ テンプレート (Swift): 「この Swift コードを確認してください:- クロージャでの保持サイクルのリスク (弱い/所有されていない自己) - オプションの強制アンラップの使用 (!) - メイン スレッドから移動する必要がある重い作業 [コード]」
クロスプラットフォーム コントロール テンプレート: 「iOS と Android の両方で、この [Flutter/React Native] 機能に必要なすべての権限、構成、およびプラットフォーム固有のコードをリストします。個別の Info.plist エントリと AndroidManifest.xml エントリを提供します。」
よくある間違い
- アーキテクチャを押し付けることなくコードを要求します。その結果、画面上にすべてを詰め込んだテスト不可能な構造ができました。
- 同時実行コードをテストせずに信頼する。メイン スレッドのブロックと不正なスコープは、クラッシュの最も一般的な原因です。
- メモリ管理を見落とす。特に iOS クロージャでのリーク。プロフィール撮らないと目立ちません。
- プラットフォームの違いを回避します。クロスプラットフォーム ツールでは、権限と構成は 2 つのプラットフォームで別々に記述されます。
- ライブラリのバージョンを確認していません。 AI は廃止された Retrofit/Alamofire API を提案する可能性があります。公式文書で確認してください。
- 単一の巨大なファイルを作成します。維持および検証が不可能。レイヤーを要求します。
要約すれば
AI を使用したコード生成は、アーキテクチャを指定する場合に強力です。まず MVVM のような構造を強制し、次にレイヤーごとに小さな部分に分けてリクエストし、各部分をコンパイルしてテストします。 Kotlin の Null セーフティとコルーチン、Swift のオプション ループとメモリ ループには特別な注意が必要です。クロスプラットフォーム ツールでは、アクセス許可と構成はプラットフォームごとに個別に記述されます。強力なプロンプトにより、言語、バージョン、アーキテクチャ、および言語固有のセキュリティ ルールが事前に通知されます。これにより、運用環境で最も一般的なクラッシュ エラーやリーク エラーが防止されます。
アプリケーションタスク
リスト画面 (例: 「連絡先リスト」) の場合は、選択したプラットフォーム (Kotlin または Swift) の「積層造形テンプレート」を使用して AI からコードをリクエストします。生成されたコードをプロジェクトに追加し、コンパイルして、次の 2 つのチェックを行います: (1) ネットワーク/長いプロセスがメイン スレッドで実行されているか、(2) null/オプションの安全性は正しいか?言語固有のセキュリティ テンプレートで見つかった問題を AI に修正させます。
チェックリスト
- [ ] コードをリクエストする前にアーキテクチャ (MVVM など) を指定しました
- [ ] 一枚一枚、少しずつ重ねて欲しかった
- [ ] 同時実行コードがメインスレッドをブロックしないことをテストしました
- [ ] null/オプションの安全性とメモリ管理をチェックしました
- [ ] クロスプラットフォーム プロジェクトで 2 つのプラットフォームの権限/設定を個別に確認しました
- [ ] 公式ドキュメントからライブラリのバージョンと API 署名を確認しました