Compare commits
129 Commits
experiment
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
707dd92ea6 | ||
|
|
0b349148d3 | ||
|
|
a959cf3973 | ||
|
|
064d81d468 | ||
|
|
f228489903 | ||
|
|
1c5ed1eb2c | ||
|
|
8bc43ed8c8 | ||
|
|
3e64cbee9a | ||
|
|
7d454cf9d4 | ||
|
|
699e3039b9 | ||
|
|
5af3164f21 | ||
|
|
cd585b8206 | ||
|
|
927c73567a | ||
|
|
09170c6636 | ||
|
|
8705f69725 | ||
|
|
9562e04ffe | ||
|
|
2ffb47b60c | ||
|
|
1208a78831 | ||
|
|
493ef92bd6 | ||
|
|
a51ffe4a82 | ||
|
|
0ea25f1e97 | ||
|
|
16bd0fe192 | ||
|
|
d75a495b19 | ||
|
|
a346a1477c | ||
|
|
c93ca94a61 | ||
|
|
4480c161d1 | ||
|
|
deb9b40949 | ||
|
|
fced009607 | ||
|
|
0890c1b9ff | ||
|
|
4b3816940b | ||
|
|
9ea23d6eba | ||
|
|
31ea303b88 | ||
|
|
7716cb516c | ||
|
|
70976c0554 | ||
|
|
5616c7ed96 | ||
|
|
13580a57d4 | ||
|
|
c9481fb0c2 | ||
|
|
5cda45740c | ||
|
|
84d1305796 | ||
|
|
336e3510fa | ||
|
|
25780e1664 | ||
|
|
e6fab84393 | ||
|
|
390acdeab7 | ||
|
|
ff7a5624e6 | ||
|
|
9b79f224d3 | ||
|
|
2f76e3776f | ||
|
|
026da47d82 | ||
|
|
29be052bf6 | ||
|
|
2fb7d97d33 | ||
|
|
76ebf8055b | ||
|
|
7b572cd657 | ||
|
|
61fa0f8484 | ||
|
|
935aaf2610 | ||
|
|
8ec53d6e06 | ||
|
|
e8b1a21a3b | ||
|
|
e6b89842a3 | ||
|
|
1fc5220405 | ||
|
|
5489406578 | ||
|
|
2b217e98c7 | ||
|
|
2c2e61a2fa | ||
|
|
c222b303df | ||
|
|
8f8c095ecd | ||
|
|
e31e84ff34 | ||
|
|
2c2b355a3e | ||
|
|
5461087ca0 | ||
|
|
57c7285b6e | ||
|
|
5c134c95cc | ||
|
|
8781653fe8 | ||
|
|
67ccc37c17 | ||
|
|
92caab03f5 | ||
|
|
dd3a57b3ae | ||
|
|
8df32b9c1d | ||
|
|
4b901d5015 | ||
|
|
fc5c62685a | ||
|
|
fbc98b2ff7 | ||
|
|
3502043176 | ||
|
|
2d0ad8d59e | ||
|
|
b5172df7a9 | ||
|
|
740d414d2d | ||
|
|
8db3e6c218 | ||
|
|
fb35b01d2e | ||
|
|
5fa6b1f73e | ||
|
|
c16f7401ea | ||
|
|
f260c5d2dd | ||
|
|
80e9f1a869 | ||
|
|
26096ba244 | ||
|
|
435a910ef9 | ||
|
|
68b9236d65 | ||
|
|
0148c12e08 | ||
|
|
34dc62aee6 | ||
|
|
54ae681f00 | ||
|
|
db40351fec | ||
|
|
2dd8e62f85 | ||
|
|
0937fbb619 | ||
|
|
32edab3289 | ||
|
|
fa96e68770 | ||
|
|
1681be4437 | ||
|
|
7f96c44e88 | ||
|
|
7d485c466c | ||
|
|
7869cbee6d | ||
|
|
c2ad681891 | ||
|
|
163f9ead18 | ||
|
|
611fc9953f | ||
|
|
fd95e99874 | ||
|
|
f5d0f993db | ||
|
|
b7e763d265 | ||
|
|
0afa6f402b | ||
|
|
eacce53775 | ||
|
|
47b1eb325e | ||
|
|
a145e2c24f | ||
|
|
862742cd3e | ||
|
|
d5f2d367dd | ||
|
|
b1f72f18b5 | ||
|
|
d4d86fb7eb | ||
|
|
056a059a68 | ||
|
|
12676d59cf | ||
|
|
bca2b300d3 | ||
|
|
406808ee58 | ||
|
|
a8aadb7f08 | ||
|
|
b810405573 | ||
|
|
6f62418426 | ||
|
|
88621dd1c8 | ||
|
|
12d9c1f49d | ||
|
|
30c2b8a2f9 | ||
|
|
8bc7069c4e | ||
|
|
737cd25539 | ||
|
|
2c50e5af67 | ||
|
|
ea677b4da5 | ||
|
|
4525443e39 |
160
WINDOWS_PORT.md
160
WINDOWS_PORT.md
@@ -1,160 +0,0 @@
|
||||
# JR四国アプリ Windows版 (React Native for Windows) 引き継ぎ資料
|
||||
|
||||
## プロジェクト概要
|
||||
|
||||
JR四国の列車走行位置・運行情報アプリ。Expo Managed Workflow (React Native) で構築。
|
||||
Android/iOS向けに運用中。このタスクは **Windows PC版の追加** を目的とする。
|
||||
|
||||
- **リポジトリ**: `/home/ubuntu/jrshikoku` (Ubuntu開発サーバー) → Windows環境に clone/コピーして作業
|
||||
- **ブランチ**: `experiment/pc-version`(mainブランチ: `master`)
|
||||
- **React Native**: 0.83.2 / **Expo**: ^55.0.8
|
||||
|
||||
---
|
||||
|
||||
## これまでの経緯
|
||||
|
||||
### 試みたこと: Electron + Expo webビルド
|
||||
|
||||
`npx expo export -p web` でWebビルドし、ElectronでラップしてCORSをメインプロセスで回避する方法を試みた。
|
||||
|
||||
**結果**: 動作はしたが根本的な問題が多く断念。
|
||||
|
||||
| 問題 | 原因 |
|
||||
|------|------|
|
||||
| `injectJavaScript` が動かない | Electron `<webview>` はクロスオリジンにJS注入できない |
|
||||
| 列車描画が壊れる | `window.ReactNativeWebView` が未定義でスクリプトがクラッシュ |
|
||||
| 操作感が悪い | WebViewがiframe/Electron webviewタグになり、ネイティブのスクロール感が失われる |
|
||||
| `usage.htm`(利用規約)が毎回出る | `injectJavascript` が動かないため `goBack()` 処理が機能しない |
|
||||
|
||||
**結論**: `react-native-webview` をネイティブとして動かせないWeb系アプローチには限界がある。
|
||||
|
||||
---
|
||||
|
||||
## 推奨アプローチ: React Native for Windows (RNW)
|
||||
|
||||
### なぜRNWが良いか
|
||||
|
||||
- `react-native-webview` が **WebView2 (Chromium)** として動く → `injectJavaScript` がモバイルと同じ挙動
|
||||
- ネイティブアプリなので CORS 制限がない
|
||||
- スクロール・タッチ感がネイティブ
|
||||
- このアプリの主要機能(走行位置WebView、API通信)がそのまま動く可能性が高い
|
||||
|
||||
### バージョン対応
|
||||
|
||||
RN 0.83.2 に対応する RNW は **0.83.x**。
|
||||
|
||||
```
|
||||
yarn add react-native-windows@0.83.x
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## セットアップ手順 (Windows)
|
||||
|
||||
### 1. 前提環境のインストール
|
||||
|
||||
[Microsoft公式ドキュメント](https://microsoft.github.io/react-native-windows/docs/rnw-dependencies) に従う。
|
||||
|
||||
必要なもの:
|
||||
- **Visual Studio 2022** (Community可)
|
||||
- ワークロード: 「C++ によるデスクトップ開発」「ユニバーサル Windows プラットフォーム開発」
|
||||
- 個別コンポーネント: 「Windows 11 SDK (10.0.22621.0 以上)」「C++ CMake ツール」
|
||||
- **Node.js** LTS
|
||||
- **Git**
|
||||
|
||||
```powershell
|
||||
# winget で一括インストール (任意)
|
||||
winget install Microsoft.VisualStudio.2022.Community
|
||||
winget install OpenJS.NodeJS.LTS
|
||||
winget install Git.Git
|
||||
```
|
||||
|
||||
### 2. リポジトリをWindowsにクローン
|
||||
|
||||
```powershell
|
||||
git clone <リポジトリURL>
|
||||
cd jrshikoku
|
||||
git checkout experiment/pc-version
|
||||
yarn install
|
||||
```
|
||||
|
||||
### 3. RNW の初期化
|
||||
|
||||
```powershell
|
||||
yarn add react-native-windows@0.83.x
|
||||
npx react-native-windows-init --overwrite
|
||||
```
|
||||
|
||||
→ `windows/` ディレクトリが生成される。
|
||||
|
||||
### 4. ビルド & 実行
|
||||
|
||||
```powershell
|
||||
npx react-native run-windows
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 予想される問題と対処
|
||||
|
||||
### Expoモジュールの非対応
|
||||
|
||||
Expo Managed Workflow のモジュールはネイティブコードを自動生成するが、RNW は公式サポート外。
|
||||
以下のモジュールはWindowsで動かない可能性が高い(クラッシュしたらスタブに差し替える):
|
||||
|
||||
| モジュール | 状況 | 対処 |
|
||||
|-----------|------|------|
|
||||
| `expo-notifications` | Windowsプッシュ通知は別実装が必要 | Platform.OS === 'windows' でスキップ |
|
||||
| `expo-felica-reader` | ハードウェア依存、Windows非対応 | スタブに差し替え |
|
||||
| `expo-live-activity` | iOS専用 | すでにPlatform.OS === 'web' ガード済み |
|
||||
| `expo-linear-gradient` | RNW向けは要確認 | react-native-linear-gradient に差し替えも |
|
||||
| `react-native-maps` | Windows未対応 | metro.config.js でスタブを当てる |
|
||||
|
||||
### Platform.OS の値
|
||||
|
||||
RNW では `Platform.OS === 'windows'`(`'web'` でも `'ios'` でもない)。
|
||||
既存の `Platform.OS === 'android'` ガードがある箇所は意図通り動く(Windowsはスキップされる)。
|
||||
|
||||
### `react-native-webview` のCORS
|
||||
|
||||
ネイティブアプリなので基本的にCORSはない。ただし JR四国の `X-Frame-Options` は
|
||||
iframeではなく WebView2 で直接開くため無関係。
|
||||
|
||||
---
|
||||
|
||||
## アプリ構成の重要ポイント
|
||||
|
||||
### 走行位置タブ (`components/Apps/WebView.tsx`)
|
||||
|
||||
最重要コンポーネント。`react-native-webview` の WebView に `train.jr-shikoku.co.jp/sp.html` を読み込み、大量の JavaScript (`injectJavascript`) を注入して列車データを描画している。
|
||||
|
||||
- `injectJavascript`: `lib/webViewInjectjavascript.ts` で生成。ユーザー設定・ダークモード等を考慮した巨大スクリプト
|
||||
- `injectJavascriptBeforeContentLoaded`: モックAPI使用時のみ、XHRインターセプター
|
||||
- `window.ReactNativeWebView.postMessage` でアプリ側に列車クリック等のイベントを送る
|
||||
|
||||
### 状態管理
|
||||
|
||||
Context API (stateBox/) で全状態を管理。Redux等は使用していない。
|
||||
|
||||
### API
|
||||
|
||||
バックエンド: `jr-shikoku-backend-api-v1.haruk.in`(外部サーバー)
|
||||
列車走行位置: JR四国公式 `train.jr-shikoku.co.jp`(WebView内で直接アクセス)
|
||||
|
||||
---
|
||||
|
||||
## Claudeへの指示テンプレート
|
||||
|
||||
```
|
||||
このプロジェクトはExpo React NativeのJR四国アプリ(RN 0.83.2)。
|
||||
experiment/pc-versionブランチで作業中。
|
||||
React Native for Windows (RNW 0.83.x) を使ってWindows PC版を作りたい。
|
||||
|
||||
まず package.json と windows/ ディレクトリの存在を確認し、
|
||||
RNW の初期化が完了しているか確認してから作業を開始してほしい。
|
||||
|
||||
主要な懸念点:
|
||||
1. expo-notifications など Expo 系モジュールが Windows ビルドを壊す可能性
|
||||
2. react-native-maps は Windows 非対応(metro.config.js でスタブを当てる予定)
|
||||
3. Platform.OS === 'windows' の分岐が必要になる箇所を確認すること
|
||||
```
|
||||
Reference in New Issue
Block a user