始まりは「動かないコード」を3回作り直したこと
2026年に入ったばかりの頃、Rork Max で Expo Router を使った画面遷移を実装していたときのことです。AI が生成したコードがどうしても期待通りに動かず、1時間以上も同じ部分を直していました。あとで気づいたのですが、生成されていたのは Expo Router v2 時代の API で、私のプロジェクトはすでに v3 系を使っていたのです。
このとき改めて感じたのは、Rork の AI は学習データの中で「平均的に正しい書き方」を選ぶため、自分が使っているライブラリのバージョンを明示しないと、しばしば1〜2世代前の書き方を出してくることがあるということでした。
特に Expo SDK や React Native は半年に1度の頻度で破壊的変更が入るため、放っておくと「動かないコードを直す時間」のほうが、新機能を実装する時間より長くなってしまいます。
宮大工だった祖父たちが「道具の手入れは仕事の半分」と言っていたのを、ふと思い出しました。AI に生成させる前のプロンプトを整える時間が、開発全体のスピードを決めてしまう。そんな実感が少しずつ強くなっています。
なぜ AI は古い API を出してしまうのか
学習データに新旧の書き方が混在しているからです。
たとえば Expo Router の場合、Stack Overflow や個人ブログの古い記事には v2 時代の記法(href プロパティでオブジェクトを直接渡すなど)が大量に残っています。Rork Max のような汎用 AI は、これらを区別する手段がプロンプト内のヒント以外にほとんどありません。
加えて、コード生成 AI は「文法的に正しい」「型エラーが出ない」「過去のコードベースで動いた実績がある」という基準で生成しがちです。「最新のベストプラクティス」「v3 ではこの書き方は非推奨」といった情報は、必ずしも反映されるわけではありません。
私の体感では、明示しないとおおよそ次のような選択をしてくることが多いです。
- React Navigation v6 と Expo Router v3 の混在 → React Navigation のコードが優勢
- React Native 0.74 と 0.76(New Architecture)→ 0.74 風の書き方
- Reanimated v2 と v3 → v2 風の
useSharedValue使い方 - Stripe SDK v0.x と v1.x → 古い API 形式の
confirmPayment引数
どれも一見すると動きそうに見えるところが厄介で、ビルドが通ってしまうケースもあります。
私が使っている「バージョン明示プロンプト」の基本構造
これを防ぐために、私は新しい画面や機能を Rork に頼むとき、必ずプロンプトの冒頭にプロジェクトの環境情報を貼り付けるようにしています。
【プロジェクトの環境】
- Expo SDK 54
- Expo Router v3
- React Native 0.76 (New Architecture 有効)
- TypeScript 5.4 (strict: true)
- Reanimated 3.10
- TanStack Query v5
- Supabase JS Client v2.45
【コーディング方針】
- ルーティングは Expo Router の Stack/Tabs を使用(React Navigation の直接利用は禁止)
- 非同期処理は async/await を使用(.then チェーンは避ける)
- スタイリングは StyleSheet.create を基本とし、NativeWind は使わない
【依頼内容】
ユーザーがプロフィール画像をタップしたら、画像をフルスクリーンで表示する画面を追加してください。
画像のピンチイン/ピンチアウトは Reanimated v3 の useSharedValue と withSpring で実装してください。このように環境セクションと方針セクションを分けて先に書くことで、AI は「この人はこのバージョンで書いてほしいんだな」と理解してくれる確率が大きく上がります。
特に効くのが「禁止事項」を明示することです。「React Navigation の直接利用は禁止」のように書くと、Expo Router を回避して React Navigation のコードが出てくる頻度がはっきり下がります。
バージョン情報を「常に持っておく」ためのテンプレート化
毎回手で書くのは面倒なので、私は prompts/_environment.md というファイルをプロジェクト直下に置くようにしています。
中身はおおよそこのような形です。
# Project Environment (for AI prompts)
## Stack
- Expo SDK: 54.x
- React Native: 0.76.x (New Architecture: enabled)
- TypeScript: 5.4 (strict, noUncheckedIndexedAccess)
## Routing
- Expo Router v3 (Stack / Tabs)
- DO NOT use React Navigation directly
## State / Data
- TanStack Query v5
- Zustand v4 (NOT Recoil, NOT Redux)
- Supabase JS Client v2.45
## Styling
- StyleSheet.create
- DO NOT use NativeWind, styled-components, or Tamagui
## Animation
- Reanimated v3 (useSharedValue, useAnimatedStyle, withSpring)
- DO NOT use Animated.Value (legacy API)
## Forms
- react-hook-form v7 + zod v3
## Last verified: 2026-05-08新しい画面を依頼するときは、このファイルの内容をそのままプロンプトの冒頭にコピペします。Rork Max には会話のコンテキストが残るので、最初の依頼でこれを渡しておけば、その後しばらくは正しいバージョンの書き方を維持してくれます。
ただし長い会話の途中で AI が古い書き方に戻り始めたら、もう一度このテンプレートを貼り直すと回復します。これは経験上のコツで、明確な根拠まで突き止められてはいませんが、実際に効果を感じる場面が多いです。
ライブラリのバージョンが変わったらこのファイルを更新します。地味な作業ですが、続けていくと「AI に古いコードを書き直させる時間」が、ほぼゼロに近づいていきます。
バージョン以外に明示しておきたい3つのこと
環境情報以外にも、AI を望ましい方向に誘導するために、私が必ず伝えていることがあります。
ひとつ目は、コード規約の「やらないこと」です。「any 型を使わない」「useEffect の依存配列を空配列で逃げない」「Math.random() を id に使わない」のように、自分が嫌う書き方を先に潰しておきます。
ふたつ目は、エラーハンドリングの方針です。「ネットワークエラーは TanStack Query の onError で処理し、画面側では Toast で表示する」のように、プロジェクト全体の方針を毎回伝えます。これを書かないと AI は try/catch で握り潰したコードや、alert() を使った雑なエラー表示を出しがちです。
みっつ目は、UI の文体やトーンです。これは実装そのものではないですが、「ボタンラベルは敬体(〜してください)」「エラーメッセージは原因と対処法を併記」のように決めておくと、生成された画面の文言を全部書き直す手間が減ります。
ここまでをまとめると、AI に渡すプロンプトは「環境情報+禁止事項+方針」の3点セットだと考えるとブレません。
Expo の最新バージョン追従と AI コード生成の関係についてまとめた記事 と、Rork でのプロンプト設計全体の考え方をまとめた記事 も合わせて参考にしてみてください。
それでも古いコードが混ざってしまったときの対処
ここまで対策しても、長い対話の中で AI がふと古い書き方を混ぜてくることはあります。私が使っている確認手順は次の通りです。
まずは TypeScript の型エラーが出ていないかを確認します。次に expo install --check のように、Expo CLI が提供しているバージョン整合性チェックを走らせます。これで「依存関係的にはおかしくないか」が分かります。
それから実機(TestFlight 経由)で一度通します。Rork Companion のプレビューだけでは気づけない実機固有の不具合(特にディープリンクや決済まわり)は、ここで初めて表面化することが多いです。
問題が見つかったら、AI に「このコードのこの部分は v2 の API になっています。v3 では xxx を使うようにリファクタしてください」と、具体的に指摘します。「直して」だけだと別のところを変えられがちなので、必ずバージョン名と新しい API 名をセットで伝えるのがコツです。
次にやってほしいこと
もしまだプロジェクト直下に「環境を記述したファイル」を置いていなければ、5分だけ時間をとって prompts/_environment.md を作ってみてください。Expo SDK のバージョン、使っているライブラリ名と主要バージョン、そして「絶対にやらないこと」を3つ書くだけで構いません。
それを次回 Rork に何かを頼むときに、そのまま貼り付けるだけです。生成されるコードの精度が、一段階変わるのを感じていただけるはずです。私も最初は半信半疑でしたが、いまでは毎日の作業に欠かせない習慣になりました。
最後までお読みいただきありがとうございました。同じように AI 生成コードのバージョン整合性で困っている方の参考になれば嬉しいです。