◉RORK LABEN
●EXPO — EAS Observe がネイティブクラッシュも記録(10/07)。SDK 57 は 57.0.21 以降で確認できます●SDK 58 — SDK 58 Beta は 9/15 公開。stable の日付はまだ未確認です●RN 0.88 — React Native 0.88.x の正式リリース予定は 10/12、残り3日●Q&A — expo-widgets が本番ビルドだけ真っ黒になる、という問いが出ています●RORK — 09-29 に GPT-6.1 Sol を追加。Pro・Max プランで利用できます●NEW — クライアントのアプリを作る前に決める、公開アカウントの持ち主●EXPO — EAS Observe がネイティブクラッシュも記録(10/07)。SDK 57 は 57.0.21 以降で確認できます●SDK 58 — SDK 58 Beta は 9/15 公開。stable の日付はまだ未確認です●RN 0.88 — React Native 0.88.x の正式リリース予定は 10/12、残り3日●Q&A — expo-widgets が本番ビルドだけ真っ黒になる、という問いが出ています●RORK — 09-29 に GPT-6.1 Sol を追加。Pro・Max プランで利用できます●NEW — クライアントのアプリを作る前に決める、公開アカウントの持ち主
記事一覧/開発ツール
⬡ 開発ツール/2026-06-21上級

Rorkアプリの写真が、アップロードした先でだけ横向きになる——EXIF Orientation の正規化と位置情報メタデータの削除

端末では正しく見える写真が、サーバーや他端末でだけ90度回転する原因はEXIF Orientationです。expo-image-manipulatorで回転を焼き込み、位置情報メタデータを削除してからアップロードする実装を解説します。

Rork577Expo213画像アップロード3EXIFプライバシー12

✦ プレミアム記事

ユーザーが投稿した写真が、自分の端末では正しい向きで表示されているのに、アップロードした先——サーバーに保存した画像や、別のユーザーの画面でだけ90度横を向く。個人開発で画像を多く扱うアプリを運用していると、何度か出会う厄介な不具合です。私自身、利用者から「アップロードした写真が、友だちの画面では横向きになっている」という報告を受けて、半日ほど原因を追ったことがあります。結論から言えば、写っているピクセルは一度も回転していません。回転の情報は EXIF の Orientation タグ という別の場所に書かれていて、それを読む側と読まない側で見え方が割れていたのです。

この食い違いは、Rork で生成したアプリでも同じ構造で起こります。React Native の <Image> は Orientation タグを尊重して表示してくれますが、アップロード先のサーバーや画像処理ライブラリ、他社サービスのプレビューはタグを無視することが珍しくありません。今日は、撮影・選択した写真を アップロードする前にピクセルへ回転を焼き込み、ついでに位置情報を含む EXIF を削除する までを、動くコードで組み立てます。

端末のプレビューでは正しいのに、転送先でだけ回転する

まず症状を正確に切り分けます。次の3つを観察すると、EXIF Orientation 起因かどうかがほぼ判定できます。

  1. アプリ内の <Image> では正しい向きで表示される
  2. その同じファイルをサーバーに上げ、ブラウザや別ライブラリで開くと横向きになる
  3. 縦持ちで撮った写真ほど症状が出やすく、横持ちの写真では起きない

この3点が揃ったら、ほぼ Orientation タグの解釈差です。iPhone のカメラは、本体を縦に持って撮っても センサーから来た横向きのピクセルをそのまま保存 し、「表示するときは右に90度回してね」という指示を Orientation タグに書き込みます。タグを読む <Image> は正しく見せ、読まないサーバーは横向きの素のピクセルをそのまま見せる。これが割れの正体です。

原因は EXIF Orientation — ピクセルは回っていない

Orientation タグは 1〜8 の整数で、回転と反転の組み合わせを表します。実務で出会うのはほぼ次の4つです。

値意味典型的な発生源
1回転なし(正位置)横持ち撮影・正規化済み画像
3180度回転上下逆さに持って撮影
6時計回り90度で正位置になる縦持ち撮影(最頻出)
8反時計回り90度で正位置になる縦持ち・逆向き

値 6 が圧倒的に多く、私が報告を受けたケースもすべて 6 でした。重要なのは、値が 1 以外のときは「ピクセルと表示指示がずれている」状態 だということです。アップロード先がタグを無視する以上、こちらでピクセルを物理的に回してタグを 1 に揃えてしまうのが、最も移植性の高い解決策になります。

✦

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

この記事の続きを読む

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

この記事で得られること
✦端末では正しいのにサーバー側や友人の端末でだけ写真が90度回転する謎を、EXIF Orientation の値(1〜8)から原因切り分けできるようになります
✦expo-image-picker と expo-image-manipulator で、回転をピクセルに焼き込み EXIF を除去してからアップロードする実装を、今日そのまま手に入れられます
✦写真に埋め込まれた GPS 位置情報を残したままアップロードして起きる個人情報の漏えいを、転送前に止められるようになります
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-10-07
日本語の見出しだけ太字にならない — Android で fontWeight が効かないときの切り分けと直し方
Rork で作ったアプリで、iPhone では太字なのに Android では日本語の見出しが細いままになる症状の切り分け記事です。原因の見分け方、fontFamily を重みごとに分ける直し方、確認用コードを載せています。
⬡ 開発ツール2026-09-21
exit code 0 で止まるビルド — ログを黙らせていた設定と、空ファイルを通した存在チェック
eas build --local が exit code 0 but produced no further output で止まる件と、0 バイトのスタブが埋め込まれず dyld で落ちる件。どちらも原因は出力を減らす設定でした。自分のスクリプトを棚卸しする手順まで書き残します。
⬡ 開発ツール2026-09-07
.easignore を置くと .gitignore は読まれなくなります — EAS Build に上がるファイルを手元で数える
EAS Build がアップロードする範囲は .gitignore で決まり、.easignore を置いた時点で入れ替わります。同梱ファイルを送信前に数える手順と、親ディレクトリを除外すると感嘆符では戻せないという実測結果をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます