RORK LABEN
NATIVE — Rork Max では AR / LiDAR スキャン、Metal を使った 3D、Dynamic Island、Siri Intents、HealthKit、NFC、App Clips、Core ML まで届きますIOS27 — iOS 27 Developer Beta 4 で Siri AI の対象が iPhone 15 Pro / 15 Pro Max・16 シリーズ・17 系へ広がり、応答が初期ベータより明確に速くなりましたDESIGN — iOS・iPadOS・macOS 27 向けの Apple 純正デザインキットが Figma と Sketch 向けに公開されました。新 OS の UI を組む段階で参照できますCANARY — Android 17(Cinnamon Bun)は従来の Developer Preview を廃し、継続更新される Canary ビルドへ移行しました。検証のタイミング設計が変わりますSPARK — Android 17 の Gemini Spark は、アプリを直接操作して配車の予約や注文といった複合的な作業を自動化しますSCALE — Rork は a16z から $2.8M を調達し、月間訪問は74万件規模まで伸びていますNATIVE — Rork Max では AR / LiDAR スキャン、Metal を使った 3D、Dynamic Island、Siri Intents、HealthKit、NFC、App Clips、Core ML まで届きますIOS27 — iOS 27 Developer Beta 4 で Siri AI の対象が iPhone 15 Pro / 15 Pro Max・16 シリーズ・17 系へ広がり、応答が初期ベータより明確に速くなりましたDESIGN — iOS・iPadOS・macOS 27 向けの Apple 純正デザインキットが Figma と Sketch 向けに公開されました。新 OS の UI を組む段階で参照できますCANARY — Android 17(Cinnamon Bun)は従来の Developer Preview を廃し、継続更新される Canary ビルドへ移行しました。検証のタイミング設計が変わりますSPARK — Android 17 の Gemini Spark は、アプリを直接操作して配車の予約や注文といった複合的な作業を自動化しますSCALE — Rork は a16z から $2.8M を調達し、月間訪問は74万件規模まで伸びています
記事一覧/開発ツール
開発ツール/2026-06-19上級

Rork アプリのログ設計 — 何を残し、個人情報をどう伏せるか

Rork が生成したアプリは console.log が散らばりがちで、いざ不具合を追うときに肝心の情報が読めません。構造化ログ・ログレベル・個人情報の自動マスキング・本番での送信制御までを、そのまま使えるコードで設計します。

Rork525アプリ開発77ログプライバシー10運用7

プレミアム記事

アプリの審査が通って数日後、特定の機種でだけ保存が失敗するという報告が届きました。手元では再現しません。こういうとき頼りになるのはログですが、Rork が書き出したコードを開くと、console.log があちこちに素のまま散らばっていて、肝心の状況がまるで読み取れませんでした。

個人開発で複数のアプリを App Store と Google Play に出していると、こうした「手元で再現しない不具合」は避けて通れません。そのたびに痛感するのは、ログは事故が起きてから足すのでは遅い、ということです。

同時に、ログには逆の危うさもあります。状況を細かく残そうとするほど、メールアドレスや認証トークンといった個人情報まで一緒に書き出してしまうのです。ここでは、追える量を確保しつつ、伏せるべきものは確実に伏せるログ設計を、手を動かしながら組み立てます。

散らばった console.log が役に立たない理由

console.log("保存しました") のような文字列ログは、その瞬間は分かりやすく見えます。けれども後から検索するときには、ほとんど手がかりになりません。

問題は3つあります。第一に、いつ・どの画面で・どのユーザー状態で起きたかが文字列に埋もれて構造化されていないこと。第二に、開発中の出力が本番にもそのまま残り、不要な情報まで垂れ流しになること。第三に、伏せるべき個人情報が無防備に混ざることです。

つまり必要なのは、ログを「読める形」に揃え、出す量を環境で切り替え、危険な値を自動で伏せる——この3つを1か所で担う仕組みです。

ログは構造化して初めて検索できる

まず、ログを文字列ではなくオブジェクトとして扱います。あとから機械的に絞り込めるよう、最初から JSON に寄せておく設計です。

// logger.ts — アプリ全体で唯一のロガー
type Level = "debug" | "info" | "warn" | "error";
 
type LogRecord = {
  ts: string;          // ISO8601 のタイムスタンプ
  level: Level;
  event: string;       // "save.failed" のような短い識別子
  screen?: string;
  meta?: Record<string, unknown>;
};
 
function emit(record: LogRecord) {
  // 開発中はそのまま、本番は後述の送信処理へ回す
  console.log(JSON.stringify(record));
}

ポイントは event"save.failed" のような短い識別子にそろえることです。自由文ではなく決まった名前にしておくと、後から「保存失敗だけ集める」といった絞り込みが一発でできます。

screenmeta に状況を添えれば、「どの画面で・どんな入力で起きたか」が構造として残ります。文字列に書き込むのではなく、フィールドに分けるのが要点です。

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

この記事の続きを読む

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

この記事で得られること
console.log の散在を1つのロガーに集約し、JSON 形式の構造化ログへ寄せる移行手順
メールアドレス・トークン・端末IDを送信前に自動で伏せる、正規表現ベースのマスキング実装
開発では全部出し、本番では warn 以上だけ送るログレベル制御と、サンプリングでコストを抑える設計
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-07-11
端末の時計は動かせる — 日替わり機能とトライアル判定を時刻操作から守る設計
端末の時計を進めるだけで日替わり特典を先取りできてしまう——壁紙アプリのログで見つけた実例を起点に、壁時計・単調時計・サーバー時刻の3層で時刻源を使い分け、時計の巻き戻しにも耐える日替わりロジックとトライアル判定の設計をまとめました。
開発ツール2026-06-29
写真の「選択した項目だけ許可」に正しく向き合う設計
iOS の写真ライブラリ限定アクセス(選択した項目だけ許可)に Rork(Expo)アプリで正しく対応します。フルアクセス・限定・拒否の3状態の判定、選んだ写真だけを扱う前提の画面設計、追加選択を促す導線までを実装コードとともに整理します。
開発ツール2026-06-23
アプリスイッチャーに個人的な画面が残る——背景へ回した瞬間のスナップショットを隠す設計
Rork が生成した React Native アプリをホームに戻すと、iOS はその瞬間の画面をアプリスイッチャー用に撮影してディスクに保存します。手記や個人的な入力画面はそこに残り、第三者の目に触れます。iOS の目隠しオーバーレイ(inactive で出す理由)、Android の FLAG_SECURE、機密画面だけに絞る方法、スクショ検知までを動くコードで示します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →