◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Expo SDK 58 が 10/15 に正式リリースされました(Beta は 09/15 から)。上げる前に依存の対応状況を確認しましょう●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Expo SDK 58 が 10/15 に正式リリースされました(Beta は 09/15 から)。上げる前に依存の対応状況を確認しましょう●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-09-04上級

EAS の secret は「アプリに入れない」設定ではありません — 接頭辞と可視性を別々に決める

EXPO_PUBLIC_ の接頭辞は成果物に入るかを決め、EAS の可視性は誰が読めるかを決めます。二つを重ねたときに OTA 更新でだけ値が消える筋道と、出荷前に自分の手で確かめる手順をまとめました。

Expo221EAS9環境変数10React Native240Rork591

✦ プレミアム記事

リリース前の点検で、書き出したばかりの JavaScript バンドルを grep にかけていました。探していたのは、自分の手で EXPO_PUBLIC_ を付けた解析用のキーです。

出てきました。想定どおりではあるのですが、少し落ち着かない結果でもありました。その値は EAS 側で可視性を絞ってあり、私はしばらくのあいだ、そこを絞れば成果物の中身のほうも絞れるのだと受け取っていたからです。

実際には、二つはまったく別のことを決めています。接頭辞は成果物に入るかどうかを決め、可視性は誰がその値を読めるかを決めます。接頭辞は成果物、可視性は経路。 ここに辿り着いてから、鍵の置き場所で迷う時間がほとんどなくなりました。

接頭辞と可視性は、別々のことを決めています

Expo の環境変数で最初に噛み合わなくなるのは、この二つを一本の「安全レベル」だと考えてしまうところです。並べて書くと、重なっていないことがはっきりします。

軸決めていること効き方
EXPO_PUBLIC_ の接頭辞その値がクライアントのコードに埋め込まれるかどうかバンドル時に process.env.EXPO_PUBLIC_* が値そのものへ置き換わります
EAS の可視性(plaintext / sensitive / secret)その値を誰がどこで読めるかダッシュボード・EAS CLI・ジョブのログでの見え方が変わります

つまり、可視性を secret にしても、名前が EXPO_PUBLIC_ で始まっていて、その値をクライアントのコードから参照しているのであれば、成果物には入ります。Expo のドキュメントも、Environment variables in EAS で secret について「アプリ自体に埋め込む値に追加の安全性を与えるものではない」と書いています。

私はこの一文を、最初に読んだときには通り過ぎていました。読み落としたというよりも、secret という語の手触りに引っ張られていたのだと思います。

secret が実際に止めているのは、EAS の外側だけです

secret 指定が効くのは、値が EAS のサーバーの外へ出ていく経路のほうです。止まるものと止まらないものを、はっきり分けておきます。

止まるもの。ダッシュボードでの表示、EAS CLI からの読み出し、ジョブのログへの出力、そして eas env:pull でローカルの .env に降りてくること。ここは確かに閉じます。

止まらないもの。ビルドジョブの中で環境変数として渡り、そこでバンドラーがクライアントのコードへ埋め込む経路です。ビルドは EAS のサーバーの内側で走りますので、secret でも値は届きます。届いた値は、そのまま成果物の一部になります。

「誰にも読ませたくない」と「アプリに入れたくない」は、言葉が似ているだけで別の要求です。前者は可視性、後者は接頭辞と設計の側で満たすことになります。

✦

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

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦接頭辞と可視性という別々の軸を切り分けて、自分のアプリのどの鍵をどこへ置くかを迷わず決められるようになる
✦ストアのビルドでは動くのに OTA 更新を当てた版でだけ設定が空になる、後から原因を追いにくい事故を公開前に止められるようになる
✦書き出したバンドルを検索して実際に何が入ったかを確かめる手順と、EAS の一覧から矛盾を拾うスクリプトを、出荷前の点検にそのまま置けるようになる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

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

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

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

関連記事

⬡ 開発ツール2026-10-15
EXPO_PUBLIC_ の値が、開発では読めて本番だけ undefined になる書き方を、変換結果で見分けます
API の URL が開発中は読めるのに、ビルドした途端に undefined になる。原因は process.env の書き方でした。babel-preset-expo の変換結果を開発・本番で並べ、置き換わる書き方と残ってしまう書き方を表にしました。
⬡ 開発ツール2026-10-13
リリース前に、書き出した Expo バンドルの中から自分の鍵を探してみる
ソースに鍵がなくても、出来上がったアプリの中に鍵が残ることがあります。Expo SDK 57 で実際に expo export を実行し、バンドルの中身を grep と 60 行ほどの Node スクリプトで調べて、見つかる鍵と見つからない鍵の違いを確かめました。
⬡ 開発ツール2026-09-06
eas env:list に --json がないと分かってから、環境変数の棚卸しを組み直しました
eas env:list に --json フラグは用意されていません。--format short の出力を安全に JSON へ変換し、三つの環境の抜けを一行で見つけるまでの手順を書き残します。