2026 年の新春を祝う、スマートフォン特化型のデジタルおみくじアプリです。 Expo (React Native) をベースに、Docker を使用した統一開発環境と快適な DX(Developer Experience)を実現しています。
- 📱 シェイク機能: 加速度センサーを活用し、スマホを振る直感的な操作感を実現
- 🎨 リッチなアニメーション:
Moti(Powered by Reanimated) による滑らかで美しい演出 - 📳 触覚フィードバック:
expo-hapticsによる心地よい振動演出 - 📤 SNS シェア: おみくじ結果を画像付きで即座にシェア可能(
react-native-view-shot使用) - 🔊 サウンド: 効果音再生機能(※現在準備中・基盤実装済み)
- 🐞 デバッグモード: 実機がなくても検証可能なシミュレーション機能を搭載
| Category | Technology |
|---|---|
| Framework | Expo SDK 52 (Expo Router v4) |
| Language | TypeScript |
| Styling | NativeWind v4 (Tailwind CSS) |
| Animation | Moti / React Native Reanimated |
| Device API | Expo Sensors / Expo Haptics / Expo AV |
| Testing | Jest / React Native Testing Library |
チーム開発において最も推奨される方法です。環境差異を吸収し、ワンコマンドで起動・終了が可能です。
docker compose up --build(ポート 8081 で Metro Bundler が起動します)
方法 A: QR コード (推奨) ターミナルに表示される QR コードを「Expo Go」アプリ(iOS/Android)でスキャンしてください。 ※ PC とスマホは同一 Wi-Fi ネットワークに接続する必要があります。
方法 B: トンネル接続 Wi-Fi 環境の制約や WSL2 で接続できない場合は、以下のコマンドを別ターミナルで実行してください。
docker compose exec app npx expo start --tunnelNode.js 環境が整っている場合、ローカルで直接実行することも可能です。
- Node.js v20 以上 (必須)
- pnpm
-
依存関係のインストール
pnpm install
-
開発サーバーの起動
pnpm start # または pnpm expo start
品質担保のため、主要ロジックとコンポーネントはテストされています。
# ローカル実行
pnpm test
# Docker実行
docker compose exec app pnpm testExpo Application Services (EAS) を利用してアプリをビルドします。
# EAS CLIログイン
npx eas login
# Android 開発用ビルド
npx eas build --profile development --platform android
# iOS 本番用ビルド
npx eas build --profile production --platform ios/app: アプリのページルーティング (Expo Router)/components: 再利用可能な UI コンポーネント/constants: おみくじデータ定義などの定数/hooks: 抽選ロジックなどのカスタムフック/utils: サウンド管理などのユーティリティ/assets: 画像・静的リソース
- DEVELOPER.md: アーキテクチャと拡張方法
- design_guidelines.md: デザイン指針(配色・フォント・アニメーション)
- phase1_roadmap.md: フェーズ1 改善計画と進捗状況(完了・アーカイブ)
- Fork this repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
🎍 2026 年も素晴らしい一年になりますように! Happy New Year! 🎍