React Native with Expo：Androidアプリ開発の落とし穴と乗り越え方

## ExpoでAndroidアプリを動かすまでの果てしなき戦い：エラーの山を乗り越えて

React NativeとExpoを使って、念願のAndroidアプリ開発に着手！「npx expo run:android」とコマンドを叩けば、すぐにエミュレータが立ち上がってアプリが動くはず……。そう思っていた時期が私にもありました。しかし、目の前に立ちはだかったのは、予想をはるかに超えるエラーの壁でした。

「There was a problem loading the project.」から始まり、次々に現れる難題。まるで巨大なパズルを解くように、一つ一つエラーを潰していった記録です。

---

### 序章：プロジェクトが読み込めない！始まりの絶望

プロジェクトを立ち上げて最初に遭遇したのは、「**There was a problem loading the project.**」という、なんとも漠然としたエラーでした。具体的に何が悪いのかも分からず、まさに暗闇の中を手探りするような状態。

**解決への道筋：**
最初は途方に暮れましたが、このエラーはExpoプロジェクトの基本的な依存関係やNode.jsのバージョンに起因することが多いと判明。Node.jsのバージョン管理ツール（例えば `nvm` や `volta`）を使って、安定版のNode.js（今回の場合は推奨バージョン）を再インストールし、依存関係をクリアにするために `rm -rf node_modules` と `npm install` (または `yarn install`) を実行。さらに `expo start --clear` でExpoのキャッシュもクリアすることで、プロジェクトは無事に読み込まれるようになりました。この一歩が、長い戦いの始まりでした。

---

### 第一章：Androidビルドの壁、ADBの不在

プロジェクトは読み込めるようになったものの、いざ「`npx expo run:android`」を実行すると、今度はAndroid関連のエラーが噴出。特に印象的だったのは「**`adb` コマンドが見つからない**」というもの。Android開発の根幹を支えるADB（Android Debug Bridge）が動いていないのですから、アプリがエミュレータに届くはずもありません。

**解決への道筋：**
この問題は、Android SDKのパスがシステムに正しく認識されていないことが原因でした。

1.  **`ANDROID_HOME` 環境変数の設定:** Android SDKがインストールされているディレクトリ（例: `C:\Users\radga\AppData\Local\Android\Sdk`）を指すよう、`ANDROID_HOME` 環境変数を設定しました。
2.  **`Path` 環境変数への追加:** ADBの実行ファイルがある `platform-tools` ディレクトリ（例: `%ANDROID_HOME%\platform-tools`）を `Path` 環境変数に追加しました。
3.  **ターミナルの再起動:** 環境変数の変更をシステムに認識させるため、必ず新しいターミナルを開き直しました。

これでADBが使えるようになり、一安心…と思ったのも束の間でした。

---

### 第二章：ビルドツールの破損とNinjaの失踪

ADBが動くようになったと思いきや、次は「**`Build-tool 35.0.0 is corrupted. Remove and install again using the SDK Manager.`**」というエラーと、「**`Could not find Ninja on PATH or in SDK CMake bin folders.`**」というエラーが連続して発生。どうやらAndroidのビルドツール自体に問題があるようです。

**解決への道筋：**
これらの問題はAndroid Studioの**SDK Manager**が鍵を握っていました。

1.  **Build-Toolsの再インストール:**
    SDK Managerの「SDK Tools」タブから「Android SDK Build-Tools 35.0.0」を一度アンインストールし、再度インストールし直しました。これにより、破損していた `aapt.exe` などのツールが正常な状態で再配置されました。
2.  **CMakeとNinjaのインストール:**
    同様にSDK Managerの「SDK Tools」タブで、「**CMake**」にチェックを入れてインストールしました。`react-native-reanimated` のようなネイティブモジュールをビルドする際に必要なNinjaは、通常CMakeの中に含まれているため、これで解決。LLDBは必須ではないと知り、いったん保留しました。

---

### 第三章：パスの長さ制限という落とし穴

ビルドツールを整備し、ようやくネイティブビルドが走り出したかと思えば、「**`ninja: error: mkdir(src/main/cpp/worklets/CMakeFiles/worklets.dir/C_/General/General/1_programming/3_tw-mokumoku/1_app/lifeline-expo-app): No such file or directory`**」というエラーに直面。長々と続くパスの中に奇妙な `C_` という記述が見え、途方に暮れました。

**解決への道筋：**
これはWindows特有の**パスの長さ制限**や、特定のビルドツールが長いパスを正しく扱えない問題でした。

1.  **プロジェクトの移動:**
    思い切ってプロジェクトフォルダを、より短い、シンプルでスペースや日本語を含まないパス（例: `C:\it\0_app\lifeline`）に移動しました。
2.  **キャッシュのクリアと再インストール:**
    パス変更後、`android` ディレクトリで `gradlew clean` を実行し、`node_modules` を削除して `npm install` を再実行。そして `expo start --clear` でExpoキャッシュもクリアしました。

この「移動」という大胆な一手で、ついにビルドが最後まで走り切る光明が見えました。

---

### 第四章：最後の砦、インストールの障壁

ビルドは成功したものの、最終ステップのインストールでまさかのエラー。「**`INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package fyi.mk_mokumoku.app.lifeline signatures do not match previously installed version; ignoring!`**」と「**`INSTALL_FAILED_USER_RESTRICTED: Install canceled by user`**」という二段構えの攻撃を受けました。

**解決への道筋：**
これはビルドの問題ではなく、デバイス側の問題でした。

1.  **既存アプリのアンインストール:**
    `INSTALL_FAILED_UPDATE_INCOMPATIBLE` は、以前インストールされていた（異なる署名を持つ）同じパッケージ名のアプリが残っているために発生します。エミュレータのアプリ一覧から対象のアプリをアンインストールするか、`adb uninstall <パッケージ名>` コマンドで強制的に削除しました。
2.  **「提供元不明のアプリのインストール」の許可:**
    `INSTALL_FAILED_USER_RESTRICTED` は、Androidのセキュリティ機能によるものです。「設定」→「アプリと通知（またはセキュリティ）」→「特別なアプリアクセス」→「不明なアプリのインストール」と進み、ADBや関連するシステムプロセスからのインストールを許可する設定をオンにしました。

これらの設定変更後、再度 `npx expo run:android` を実行すると、ついに！アプリがエミュレータにインストールされ、無事に起動しました！

---

### 終わりに：エラーは成長の糧

「There was a problem loading the project.」から始まった長いエラーとの戦い。一つ一つのエラーメッセージを読み解き、適切な解決策を探し、試行錯誤を繰り返す日々でした。正直、心が折れそうになる瞬間も何度もありました。

しかし、この経験を通して、Android開発環境のセットアップ、Gradle、ADB、Nativeモジュールのビルドプロセス、Androidのセキュリティ設定に至るまで、深い理解を得ることができました。エラーは、単なる問題ではなく、知識を深めるための貴重な機会だったと今は感じています。

もし今、あなたが同じようなエラーの泥沼にハマっているなら、諦めないでください。一つずつ、着実に解決していけば、必ず道は開けます。この経験が、誰かのエラー解決の助けになれば幸いです。

#### この記事があなたのエンジニアキャリアの一助になれば幸いです。
#### もしこの記事が役に立ったと感じたら、ぜひ「♡」で教えてください！