◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-06-01上級

ユーザーレビューやクラッシュログをClaude APIに渡す前に — 個人情報を可逆マスキングする前処理の設計メモ

App StoreのレビューやCrashlyticsのログをClaude APIで分析するとき、本文に紛れ込む個人情報をどう扱うかは避けて通れません。出力から実データへ辿り直せる可逆マスキングの設計と、本番で踏んだ落とし穴を実装コード付きでまとめました。

Claude API128個人情報保護データ前処理プライバシー運用23

✦ プレミアム記事

毎週、複数のアプリに届くレビューとクラッシュレポートをまとめて読み、優先度を付ける作業をしています。個人開発でいくつものアプリを長く運用してきて、届くレビューの量が増えるにつれ、手作業で全部に目を通すのが現実的でなくなりました。そこで App Store Connect と Google Play、それに Firebase Crashlytics から本文を引き出し、Claude API に渡して「不具合報告か、要望か、ただの感想か」を仕分けし、深刻そうなものだけを自分の手元に残す仕組みを組みました。

回し始めて最初に気づいたのは、レビュー本文に思った以上に個人情報が混ざっているという事実でした。「返金してほしいので ○○@gmail.com に連絡ください」と書く方がいます。クラッシュのカスタムキーに、デバッグ目的で入れていたユーザーの識別子がそのまま乗っていることもありました。これらを無加工で外部 API に送り続けるのは、たとえ正規の事業者であっても、私の感覚では気持ちのいいものではありません。預かったものを丁寧に扱うという姿勢は、ユーザーが残してくれた言葉に対しても同じだと考えています。

この記事は、その前処理パイプラインをどう設計したかの記録です。単に伏せるだけでなく、Claude の出力から元のレビューへ正確に辿り直せる「可逆マスキング」をどう作るか。そして本番で実際に踏んだ落とし穴を、実装コードと合わせてまとめます。

どの情報を「個人情報」として扱うか — 検出対象の線引き

最初に決めるべきは、何をマスクするかの範囲です。広げすぎると本文が穴だらけになってモデルの判断精度が落ち、狭めると肝心の情報が漏れます。私は「外部 API に送りたくないか」「単体で個人を特定しうるか」の二軸で優先度を付けました。

高優先で必ず伏せるのは、メールアドレス、電話番号、本文中に書かれた氏名、そして自分のアプリが内部で振っているユーザー識別子やデバイス識別子です。これらは正規表現か内部 ID の形式で機械的に拾えます。中優先は、住所の断片や、まれに貼られるカード番号らしき数字列です。低優先、というより基本的に伏せないのが、アプリ名・OS バージョン・端末名といった、分析にむしろ必要なメタ情報です。

ここで大事なのは、伏せる対象を「ブロックリスト」ではなく、可能な範囲で「アローリスト」で考えることでした。特に Crashlytics のカスタムキーのような構造化データは、送ってよいキーをこちらで列挙し、それ以外は丸ごと落とす方針にしています。自由記述のレビュー本文は列挙ができないので検出器に頼りますが、構造化された部分はアローリストの方が事故が起きにくいです。

なぜ単純な [REDACTED] 置換では足りないのか

最初に書いたのは、検出したものを片端から [REDACTED] に置き換える素朴なコードでした。送信前のデータは確かに綺麗になります。ところが、いざ Claude の仕分け結果を受け取って「では、このメールアドレスを書いた人に個別対応しよう」と思った瞬間に手が止まりました。出力には [REDACTED] としか残っておらず、どのレビューの誰だったのかを辿る手段がありません。

import re
 
EMAIL = re.compile(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}")
 
def naive_redact(text: str) -> str:
    # 検出したものを一律 [REDACTED] へ。送信は安全だが復元不能
    text = EMAIL.sub("[REDACTED]", text)
    return text
 
masked = naive_redact("返金希望です user@example.com まで連絡を")
# => "返金希望です [REDACTED] まで連絡を"
# この出力をモデルが返してきても、誰のことか二度と分からない

もう一つの問題は、同じ値が複数箇所に出てきたときに区別が消えることです。一通のレビューに同じメールアドレスが二度出てきても、別々のレビューに別人のアドレスが出てきても、すべてが同じ [REDACTED] に潰れます。モデルに「同じ人物が二度言及されている」と読ませたい場面で、その手がかりを自分の前処理で消してしまっていました。

つまり必要なのは、伏せると同時に、後から安全に戻せる「鍵」を残す仕組みでした。

✦

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

この記事の続きを読む

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

この記事で得られること
✦[REDACTED] 置換が壊す「出力から元レビューへ辿り直す」導線を、可逆トークンで取り戻す設計
✦モデルが翻訳・正規化してもトークンが壊れない区切り文字の選び方(Before/After のコード付き)
✦誤検知を0.5%未満に抑えつつ、ログ出力からの情報漏れを防ぐ本番運用の勘所
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ API & SDK2026-10-16
Make から Claude API に 40 行流すと 14 行目で止まる — 429 を待ち時間の計算で避ける
表計算の行を1件ずつ Claude API に渡すノーコード自動化が、途中で 429 になる理由と直し方です。模擬バケットで7通りの間隔を比べ、Sleep の秒数を 60÷上限−応答時間 で決める式と、失敗行を落とさない設定を示します。
⬡ API & SDK2026-10-13
Haiku 5.5 は単価が下がるのに、4.5 換算で約 7.7 万トークンを超えると請求が跳ねます
Haiku 4.5 から 5.5 へ移すと、価格表だけ見れば約 1/10 です。ただし同じ文章が約 30% 多いトークンになり、入力が 10 万を超えた時点で単価が 5 倍になります。境目を 4.5 換算で計算し、実際に動かした出力と、移行時に直す 400 の項目を並べました。
⬡ API & SDK2026-10-08
Sonnet 4.5 の退役前に、コードに残った「400 になる引数」を一本のスクリプトで拾いました
claude-sonnet-4-5 は 11 月 30 日に退役します。モデル ID を書き換えるだけでは、budget_tokens・prefill・tool_choice などで 400 が返ります。公式の移行ガイドの該当箇所を正規表現にしたスキャナと、実行結果、直し方の順番をまとめました。