Files

10 KiB
Raw Permalink Blame History

開発エージェント向け指示

適用順序

このリポジトリでは、次の優先順位で判断してください。

  1. ユーザーの明示的な依頼と安全上の制約
  2. 実際の package.json、yarn.lock、app.json、既存コードの現在の構成
  3. この AGENTS.md にあるJR四国アプリ固有のガードレール
  4. .agents/skills/animate-expo/ にある外部Skillの一般的な設計指針

Skillの例や推奨と実際のプロジェクト構成が衝突する場合は、アプリの構成とこのファイルを優先してください。互換性が不明な場合は、依存関係やnavigationを変更せず、まず現在のバージョンで利用可能なAPIを確認してください。

animate-expo Skill

  • Expo / React Nativeのanimation、gesture、sheet、screen transition、press feedback、hapticsを実装またはレビューするときは、まず .agents/skills/animate-expo/SKILL.md を読み、該当する場合は RECIPES.md も読みます。
  • これは開発エージェント向けのinstruction-only Skillです。アプリのruntime依存関係ではありません。Skill内のインストール例を理由に、依存関係、native設定、Babel設定、navigationを自動変更しないでください。
  • 導入元は emilkowalski/skills の animate-expo、確認時点の固定コミットは d23d7f88a2e21c9e4b1418c7abe420f5c1052ba7(2026-08-29)です。今回導入するSkillは animate-expo の2ファイルだけです。
  • animate、ask-sonner、pick-ui-library など他のSkillは、このリポジトリへ導入済みとは扱いません。

現在の構成(current valuesは正本から確認)

  • 現行の主要世代は Expo SDK 57、React Native 0.86系、React 19系です。patch/minorをこのファイルへ固定せず、正確な値は package.json と yarn.lock から確認してください。
  • Reanimated、Worklets、Gesture Handlerなどのnative依存も、宣言値は package.json、解決値は yarn.lock を正本とします。
  • Expo Routerは未導入です。現行はReact Navigation 7(NavigationContainer、bottom tabs、stack)を直接構成しています。
  • Expo SDK 57 / React Native 0.86ではNew Architectureが既定です。現在の app.json に newArchEnabled の明示設定はありません。
  • ルートの App.tsx には既に GestureHandlerRootView があります。
  • babel.config.js には既存の babel-preset-expo と react-native-reanimated/plugin の設定があります。既存設定をSkillの説明だけで置き換えないでください。
  • expo-haptics は依存していますが、ソースコードでのruntime使用は確認できていません。依存の正確なversionは正本から確認してください。

animate-expo導入時のHistorical note

animate-expo Skill導入時に参照したSDK・依存関係の基準は過去の検証記録です。現在のversionを示すものではなく、現在値は必ず package.json / yarn.lock を確認してください。

Source of truth

  • Expo、React、React Native、Reanimated、Worklets、その他の依存関係は、宣言値を package.json、解決値を yarn.lock で確認する。AGENTS.mdへpatch/minor versionを転記して正本にしない。
  • app version、iOS build number、Android versionCode、runtimeVersion、permission、entitlement、target、config pluginは app.json を確認する。
  • EAS profile、distribution、channel、environmentは eas.json を確認する。
  • 実際に配布されたbinary、runtime、channel、Update、audienceは、確認日付きのEAS CLI / EAS Dashboard観測を正本とする。リポジトリ設定からlive状態を推測しない。

JR四国アプリ固有のanimation / compatibilityガードレール

  • animationは目的ではなくUX改善の手段です。頻度、目的、情報理解への効果を確認し、不要なら追加しないでください。
  • 100回/日以上使う操作(タブ切替、スクロール、設定toggle、頻繁なデータ更新)に目立つanimationを追加しないでください。列車走行位置、運行情報、駅・列車データの更新や表示をanimationで遅延させないでください。
  • Reduced Motion / accessibilityを考慮し、translation、scale、parallax、overshootを含むanimationにはシステム設定に応じた低減経路を用意してください。既存のfont scaling制御もanimation導入のついでに変更しないでください。
  • gesture / scrollのframeごとにReactのsetState、RN runtimeへのcallback、hapticsを実行しないでください。JS threadを不要にブロックせず、連続値はUI runtime側で処理します。
  • 高頻度更新UIでは再レンダリング、worklet、layout pass、メモリ、WebView負荷を確認し、animationを足す前後で体感と計測を比較してください。
  • 既存のReanimated、core Animated、LayoutAnimation、WebView内CSS animationは、それぞれの互換性・用途を確認せず一括移行しないでください。特に既存のcore Animatedや runOnJS / .value の書き換えは別タスクとして扱います。
  • 新規のgesture / scroll連動の連続animationでは、現在のReanimated / Gesture HandlerのAPIを確認してUI thread駆動を優先します。現在のGesture Handlerはv2系なので、Skillのv3専用APIへ移行しないでください。
  • 既存のキーボード回避実装(lib/useKeyboardAvoid.ts)は、iOS/Androidのタイミング対策を含む保護された挙動です。react-native-keyboard-controller の追加や置き換えは、明示的な別依頼と実機検証なしに行わないでください。
  • 既存のnavigation設定とクラッシュ回避策を壊さないでください。とくに App.tsx のnative screens設定、lib/stackOption.ts のAndroid stack animation無効化、WebViewのライフサイクル制御をanimation改善だけで変更しないでください。
  • Expo Routerへの移行、native tabs / formSheet / Link.Menu の導入、navigationの大規模変更は今回のSkill適用範囲外です。
  • Expo SDK、React Native、Reanimatedのmajor version、New Architecture、既存navigationを、UI改善やSkill適用だけを理由に変更しないでください。新しい依存関係を追加する場合は、明示的な依頼と現在のSDKに対する互換性確認が必要です。
  • 画面遷移は既存のReact Navigation構成とプラットフォーム別設定を基準にし、既存のAndroid animationEnabled: false をSkillのRouter例で上書きしないでください。
  • hapticsは必要なユーザー操作に限り、視覚的なfeedbackの代替ではなく補助として1操作1回までにしてください。現在 expo-haptics は依存済みですが、今回の導入で使用箇所を新設しないでください。

変更範囲

animate-expo Skill導入時の変更範囲は、上記Skillファイルとこの AGENTS.md だけでした。各タスクの変更範囲は、現在のユーザー依頼と対象ファイルを基準に決め、未依頼のアプリコード、Expo設定、dependencies、lockfile、native treeを変更しないでください。

Phase 0〜1.5で確定した恒久アーキテクチャルール

  • React Navigationを、明示的な依頼なしにExpo Routerへ移行しない。
  • Navigation workaroundを削除・変更する前に、git historyと回帰テストを確認する。
  • API responseをScreenから直接長期保持しない。通信・parser・domain adapterの境界を通し、Screenは必要な表示状態だけを購読する。
  • station numberをPhysical Stationのcanonical IDとして新規利用しない。Physical Station、Station Stop、Station Numberを分離する。
  • 列車番号だけを長期的なcanonical train identityとして新規利用しない。少なくともService Date、line、sourceを組み合わせる。
  • Native code、local module、target、config plugin、permission、entitlementの変更時は、OTA互換性を確認する。
  • Native変更を含む場合は、runtimeVersionと対象binary/buildの互換性を確認してからreleaseする。
  • 既存fallback APIを、代替経路と観測・回帰確認なしに削除しない。
  • pollingやsource切替のrequestは所有者を一つにし、in-flight重複、late response、unmount後のcommitを防ぐ。
  • 24時台・25時台などの鉄道時刻をJavaScript Dateだけで表現しない。Calendar Date、Service Date、Wall Clock Time、Service Minuteを分離する。
  • release/runtimeの現在値はapp.json、eas.json、package manifest/lockfile、EASの実測を確認する。現在のversionをskillの恒久ルールへ固定しない。
  • architecture/domainの契約変更は、docs/architecture/とpure fixture testを先に更新し、全データ移行を同じ変更へ混ぜない。

Network transport policy

  • 現在の通信baselineは標準の fetch です。Nitro Fetch用のdependency、runtime code、共通transport実装は現行treeにありません。
  • react-native-nitro-fetch / react-native-nitro-modules はSDK57で別branch・別binaryの検証を行いましたが、Nitro経路を有効にしたiOS/Android双方で起動時クラッシュを確認したため、7.2では採用しませんでした。
  • Nitro Fetchを明示的な新規検証依頼なしに再導入しないでください。過去の検証文書はactive roadmapではなく、historical experiment recordとして扱います。
  • これは永久禁止ではありません。library、Expo、React Native側の互換性が変わり、クラッシュ原因を隔離できる専用検証を行える場合に限り、標準fetchをbaselineとして別branch・別binaryで再評価します。

Git運用

  • ブランチをdevelopへ統合するときは、原則として明示的なマージコミットを作成する。git merge --no-ffを使用し、fast-forwardだけで統合しない。
  • マージ前に対象ブランチ、ベースコミット、作業ツリーの状態を確認し、既存の変更履歴をrebaseやsquashで書き換えない。