RORK LABEN
MAX — Rork Max は従来の Rork とは別系統です。React Native ではなくネイティブ Swift を生成し、クラウド上の Mac 群でコンパイルしますREACH — 対応は iPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessage。AR/LiDAR、Metal の3D、Dynamic Island、Live Activities、HealthKit、NFC、Core ML まで届きますCHOICE — ですので選び方は素直です。必要な OS 機能から逆算して、React Native で足りるなら通常の Rork、届かないなら Max という順に考えますFUNDING — 4月9日、Left Lane Capital 主導のシードラウンドで1,500万ドルを調達しました。あわせてアプリビルダーの Paperline を買収していますTRACTION — 2月の Max ローンチから3日で ARR 150万ドル。人材獲得を目的に、今後も買収を続ける方針が示されていますREALITY — ただ「ワンクリックで App Store 公開」は言葉のあやです。審査、証明書、スクリーンショット、年齢区分と、人手の要る工程はいまも残りますMAX — Rork Max は従来の Rork とは別系統です。React Native ではなくネイティブ Swift を生成し、クラウド上の Mac 群でコンパイルしますREACH — 対応は iPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessage。AR/LiDAR、Metal の3D、Dynamic Island、Live Activities、HealthKit、NFC、Core ML まで届きますCHOICE — ですので選び方は素直です。必要な OS 機能から逆算して、React Native で足りるなら通常の Rork、届かないなら Max という順に考えますFUNDING — 4月9日、Left Lane Capital 主導のシードラウンドで1,500万ドルを調達しました。あわせてアプリビルダーの Paperline を買収していますTRACTION — 2月の Max ローンチから3日で ARR 150万ドル。人材獲得を目的に、今後も買収を続ける方針が示されていますREALITY — ただ「ワンクリックで App Store 公開」は言葉のあやです。審査、証明書、スクリーンショット、年齢区分と、人手の要る工程はいまも残ります
記事一覧/開発ツール
開発ツール/2026-09-07中級

.easignore を置くと .gitignore は読まれなくなります — EAS Build に上がるファイルを手元で数える

EAS Build がアップロードする範囲は .gitignore で決まり、.easignore を置いた時点で入れ替わります。同梱ファイルを送信前に数える手順と、親ディレクトリを除外すると感嘆符では戻せないという実測結果をまとめました。

EAS Build18Expo202easignoregitignore2Rork555

壁紙アプリの一本を EAS で作り直していた夜のことです。ビルドは緑で終わり、成果物も無事に降りてきました。ところが実機で開いてみると、起動した直後に Firebase の初期化だけが静かに落ちておりました。

手元の開発ビルドでは、同じコードが何事もなく動きます。差分を三十分ほど遡って、ようやく思い当たりました。android/app/google-services.json.gitignore に入れていたのです。履歴に残したくないという気持ちが先に立って、ビルド機には渡さなければならないことを忘れておりました。

EAS Build は、手元のプロジェクトを固めてクラウドへ送ります。そのとき「何を送らないか」を決めているのが、既定では .gitignore です。git に載せないと決めたファイルは、そのままビルド機にも届きません。当たり前のことなのですが、二つの判断が同じ一枚に相乗りしていると気づいたのは、この夜が初めてでした。

.gitignore は履歴に何を残さないかの表で、.easignore はビルド機に何を渡すかの表です。 書式が同じなので同じ表に見えるのですが、答えている問いのほうが違います。

二つの表は、足し算ではなく置き換えです

先ほどの初期化失敗を直そうとして、私は .easignore を新しく作りました。docs/dist/ だけを書き、google-services.json はあえて書きませんでした。これで native の設定ファイルは届くようになる、という読みでおりました。

実際、通りました。Firebase は初期化されるようになりました。

代わりに、次のビルドでアップロードが妙に長くなりました。node_modules が丸ごと上がっていたのです。

.easignore.gitignore足されるものではありません。存在した時点で .gitignore の代わりに読まれます。ですから .gitignore に書いていた node_modules/.expo/ も、.easignore に書き写さないかぎり効きません。「除外を少し足すためのファイル」だと思って書くと、ここで足をすくわれます。

上げる前に、同梱されるものを手元で数えます

送ってから気づくと、ビルド1本ぶんの待ち時間が消えます。私は送る前に数えるようにしました。git 自身の照合器を借りると、数行で済みます。

#!/bin/sh
# 実際に適用されるルールを1枚だけ選び、同梱されるファイルを数えます
RULES=.gitignore
[ -f .easignore ] && RULES=.easignore
echo "適用されるルール: $RULES"
 
# -o は未追跡ファイル、--exclude-from は指定した1枚だけを無視ルールとして読みます
git ls-files -o --exclude-from="$RULES" | wc -l
git ls-files -o --exclude-from="$RULES" -z | xargs -0 -r du -cb | tail -1
 
echo "--- 入っていると困るもの / 欠けると困るもの ---"
git ls-files -o --exclude-from="$RULES" \
  | grep -E 'google-services|GoogleService-Info|(^|/)\.env|node_modules/|(^|/)\.expo/'

要は --exclude-from です。この指定を付けるとワークツリーの .gitignore を巻き込まないので、「.easignore を置いたあとの世界」をそのまま手元で再現できます。

代表的なプロジェクトの形(src/assets/ に加えて、node_modules/.expo/dist/docs/.env・native の設定ファイル2つを置いた合計18ファイル)で、三つのルールを順に当てて数えました。無視ルールのファイル自身は数から外しています。

適用したルール同梱合計サイズ起きること
A .gitignore のみ12 ファイル5.20 MiBgoogle-services.json と GoogleService-Info.plist が届かない
B docs/ と dist/ だけ書いた .easignore16 ファイル6.82 MiBnative 設定は届くが node_modules・.expo・.env まで同梱
C 書き直した .easignore13 ファイル4.53 MiBnative 設定は届き、重いものと .env は除外

B は A より 1.62 MiB 増えています。この規模なら誤差のように見えますが、増えた中身が node_modules.env であることのほうが問題です。ビルド機はどのみち依存を入れ直しますので、送る意味がありません。むしろ、送っているという自覚がないまま毎回上げていたことのほうが、私には気がかりでした。.env に至っては、送る必要がないどころか送りたくないファイルです。値の渡し方は EAS の secret は「アプリに入れない」設定ではありません のほうに寄せてあります。

C が A より 0.67 MiB 小さいのは、docs/ を落としたぶんです。必要なものを足しながら全体は軽くなりました。

親を除外してから、感嘆符で戻すことはできません

C を書くとき、私は最初にこう書こうとしました。

android/
!android/app/google-services.json

prebuild で作り直される android/ を丸ごと落として、設定ファイルを一枚だけ呼び戻すつもりでした。素直な発想だと感じていたのですが、これは効きません。同じ照合器で確かめた結果が次のとおりです。

書き方google-services.json は
android/!android/app/google-services.json除外されたまま(届かない)
android/*!android/appandroid/app/*!android/app/google-services.json同梱される

親ディレクトリを丸ごと除外すると、その中のファイルは感嘆符で呼び戻せません。git がディレクトリの時点で中を見るのをやめてしまうためです。戻したいなら、途中の階層を一段ずつ開け直す必要があります。node_modules/ に対して !node_modules/react/index.js を書いても同じように無視されました。

——ここが、私がいちばん時間を溶かした箇所です。書いたつもりの例外が黙って効かないので、ルールの読み違いに気づくまでが長くなります。

私の .easignore の並べ方

いまは、目的の違う三つの塊に分けて書いております。順番そのものに意味はありませんが、あとで読み返すときに迷わなくなりました。

# 1. 送っても使われないもの(ビルド機が作り直します)
node_modules/
.expo/
ios/Pods/
android/.gradle/
dist/

# 2. 送りたくないもの(値は EAS の環境変数側へ)
.env
.env.*

# 3. 単に重いもの(設計資料・元データ)
docs/
design/

# 4. native の設定ファイルはここに書きません
#    .gitignore には入れたままにして、EAS へは通します

四つめは、書かないことを書き残しています。空欄のままだと、半年後の自分が「消し忘れでは」と考えて足してしまうためです。理由を一行だけ添えておくと、その迷いが消えます。

環境変数の側を同じように棚卸ししたときの記録は eas env:list に --json がないと分かってから にまとめました。android/ を丸ごと落として良いかどうかの判断は、Expo SDK 57 に上げる前に、prebuild で消えるネイティブ変更を洗い出す の手順が土台になります。

明日ビルドする前の、ひと手間

やっていただきたいことは一つだけです。上の数行のシェルスクリプトを scripts/ に置いて、eas build を叩く前に走らせてみてください。数字が想定と合っていれば、そのまま送って構いません。

私の場合、最初に走らせた日に node_modules が並んでいるのを見つけました。ビルド1本を待ってから気づくのと、送る前の三秒で気づくのとでは、その日の残りの時間がずいぶん違ってまいります。

最後までお読みくださり、ありがとうございました。

シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

開発ツール2026-08-20
ベータ SDK でビルドしたアプリは、TestFlight には配れても審査には出せません
ベータ版の Xcode でビルドしたアプリは TestFlight には配布できますが、App Store の審査には提出できません。手元のビルドがどの SDK で作られたかを確認する方法と、eas.json で提出用ビルドを守る設定をまとめました。
開発ツール2026-05-06
Rork アプリに Expo Dev Client を導入する手順 — ネイティブモジュールが Expo Go で動かなくなったときの最初の一手
Rork で生成したアプリに react-native-mmkv や RevenueCat などのネイティブモジュールを追加すると、Expo Go では起動しなくなります。Expo Dev Client(カスタム開発ビルド)の導入手順と、つまずきやすい3つのポイントを実例付きで解説します。
開発ツール2026-04-27
EXPO_PUBLIC_RORK_AUTH_URL を空欄のまま本番に出さないために — Rork 生成アプリの認証URL設定
Rorkで生成したアプリのコードに現れる EXPO_PUBLIC_RORK_AUTH_URL に何を入れるべきか、開発・EAS Build・本番でどう切り替えるかを実例付きで整理しました。空欄のまま審査に出す事故を防ぎます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます