メインコンテンツへスキップ
レッスン 3 / 4|24分で読めます

ダミーデータ

実在する情報を使わないダミーデータを設計し、秘密情報をコード、会話、画面から分離して安全に試作する方法を学びます。

試作品へ現実に近いデータを入れると、使い勝手を想像しやすくなります。そのため、手元にある情報をそのまま貼りたくなる場面があります。

けれども、AIとの会話、ソースコード、画面キャプチャ、テストログは、利用するサービス、プラン、組織契約、アカウント設定に応じて保存や共有の扱いが異なります。一度混ざった値を、すべての履歴や連携先から追い出すのは簡単ではありません。

試作の現実味は、実在する情報ではなく、よく設計したダミーデータで作れます。 さらに、APIキーやパスワードなどの秘密情報は、ダミーデータともコードとも別に管理します。

このレッスンの目的

このレッスンを終えると、次の三つを区別できます。

  1. 画面や機能を試すためのダミーデータ
  2. 実行環境ごとに変わる設定値
  3. 公開してはいけない秘密情報

また、架空のデータ一式を作り、AIへ渡してよい部分だけで登録、保存、ログイン画面の練習ができます。

安全な実習は、入力前の分類から始まります。 貼り付けたあとで消すのではなく、最初から持ち込みません。

所要時間の目安は、読了10分 + 実習14分です。

実習14分では、ダミーデータ、認可ケース、期待する拒否結果を設計します。直接URLやAPIを使った実行検証は、後続の認証・権限駅とサーバー・API駅で行います。

概念:データ、設定、秘密を三つに分ける

ダミーデータは、画面やデータベースの振る舞いを試すための架空情報です。名前、メール、題名、日時などの形は本番に似せても、実在する対象と結びつかない値にします。

環境変数は、開発、確認用、本番などの実行環境ごとに変わる設定を、ソースコードの外から渡す仕組みです。すべての環境変数が秘密とは限りませんが、公開可否を意識して扱います。

秘密情報は、漏れると不正利用につながる値です。APIキー、パスワード、署名用の値などが該当します。秘密情報はテスト入力ではなく、権限を持つ実行環境だけが読む設定です。

階層

試作で扱う情報を三層に分離する

画面で使う架空データ、環境ごとの設定、公開しない秘密情報を別の層として管理します。

  1. LEVEL 1ダミーデータ画面と機能を試す架空情報
  2. LEVEL 2環境ごとの設定コード外から渡す設定名
  3. LEVEL 3秘密情報権限のある実行環境だけが読む値

三つの層を分ける理由は、漏れたときの影響と使う場所が違うからです。ダミーデータは画面やテストへ積極的に入れ、正常系と境界条件を何度も再現するために使います。環境ごとの設定は、開発用と公開用で接続先や動作を切り替えるため、コードの外から名前付きで渡します。秘密情報は、その設定の一部であっても、値を表示、記録、共有する対象にはしません。AIへ構造を相談するときは、設定名と用途だけを示せば十分です。実行時には権限を持つ環境が値を読み、画面やログへ返さないことを確認します。この分離ができていれば、ダミーデータを自由に共有しながら、設定変更と秘密の管理を別の手順で扱えます。

試す中身と、動かす設定と、守る値を同じ場所へ置かないことが基本です。

ダミーデータの四条件

実在性がないこと。 実在する氏名、連絡先、識別子を一部だけ変えた値は使いません。

見てすぐダミーと分かること。 sample-reader-01@example.invalid のように、用途と架空性が読み取れる値にします。

境界を試せること。 空欄、長い文字、同じ値、権限の違いなど、正常系だけでなく失敗条件も準備します。

繰り返し作れること。 誰かの記憶に頼らず、同じ初期状態を再現できる一覧や生成手順を残します。

関係

安全なダミーデータの四条件

現実味の中心を実在情報ではなく、架空性、明示性、境界、再現性で支えます。

安全に試せる現実味

  1. NODE 1実在性がない元の対象を推測できない
  2. NODE 2ダミーと明白用途と架空性が読める
  3. NODE 3境界を試せる空欄、長文、権限差
  4. NODE 4再現できる同じ初期状態を作れる

認証、認可、データ取得を分ける

認証は「誰として操作しているか」を確認します。認可は、認証された人がそのデータや操作を許されているかを判定します。データベースからの取得は、その認可結果を受け、所有者条件を付けて必要な行だけを返します。

認証→認可判定→所有者条件付き取得の順序を、画面表示だけでなくAPI側でも保ちます。ログインできることと、他のアカウントのデータを見られないことは別の確認です。

データフロー

認証、認可判定、所有者条件付き取得を分ける

架空アカウントの本人確認後に権限を判定し、許可された所有者のダミーメモだけを返す流れです。

  1. 入力元架空アカウントAまたはB
  2. 処理認証誰として操作するか
  3. 処理認可判定その操作を許可するか
  4. 保存先ダミーデータベース所有者付きの架空メモ
  5. 出力先本人用一覧対応する架空メモだけ

関係

  • 架空アカウント認証架空のログイン
  • 認証認可判定本人情報を渡す
  • 認可判定ダミーデータベース所有者条件付き取得
  • ダミーデータベース本人用一覧許可したメモだけ返す

一覧画面に他人のメモが出ないだけでは不十分です。アカウントAでBのメモの直接URLを開く場合や、BのメモIDを指定してAPIへ取得、更新、削除を要求する場合も、サーバー側の認可判定で他人のデータを拒否します。

実習:安全なダミーデータセットを作る

今回も架空の「まちの読書メモ」を使います。次の内容を dummy-data.md などの作業メモへ書く想定で進めます。実在する情報へ置き換えないでください。

架空アカウントA
表示名: サンプル読者A
メール: sample-reader-a@example.invalid
役割: member

架空アカウントB
表示名: サンプル読者B
メール: sample-reader-b@example.invalid
役割: member

架空メモ1
題名: 星空図鑑A
本文: ダミーの短いメモ
所有者: 架空アカウントA

架空メモ2
題名: 海辺の物語B
本文: 境界確認用の長いダミー文を繰り返す
所有者: 架空アカウントB

データセットは、画面に一件表示するためだけではなく、失敗の境界を安全に再現する計画を作るために用意します。架空アカウントAには正常な短いメモを割り当て、基本の保存と読み出しで期待する結果を書きます。Bには長い本文や同じ題名を割り当て、上限と重複の規則を確認するケースを定義します。AでBのメモIDを指定した場合と、BでAの直接URLを開いた場合は、拒否されることを期待結果にします。題名を空にした場合は、保存せず、入力値を保ったまま修正方法を示す条件を置きます。各ケースの初期値、操作、期待結果を同じ一覧へ残せば、後続駅で実装したあとも同じ条件で検証できます。現実の情報を一切使わなくても、保存、認証、認可、バリデーションの検証計画は具体化できます。

ダミーデータの質は、正常な見本より、再現できる確認条件で決まります。

次に、正常系と境界条件を分けます。

マトリクス

二つの架空アカウントで正常と境界を試す

アカウントAとBの双方で、正常登録と権限分離を同じ観点から確認します。

横軸:架空アカウント / 縦軸:確認ケース
確認ケース架空アカウントAB
正常メモ1を登録して表示メモ2を登録して表示
境界空欄を拒否して修正案内長文上限で値を保持
分離Bのメモを表示しないAのメモを表示しない
直接アクセスBの直接URL拒否を期待AのAPI取得拒否を期待
認可ケースと期待する拒否結果
正常系: Aがメモ1を登録し、自分の一覧で見られる
分離: Aの一覧にBのメモ2が出ない
直接URL: AがBのメモURLを指定しても拒否される
API: BがAのメモIDを指定しても取得、更新、削除を拒否される
空欄: 題名なしでは保存されず、修正方法が表示される
長文: 本文の上限を超えると、値を失わずにエラーを示す
重複: 同じ題名を許可するか、事前に決めた規則どおりになる

秘密情報の代わりに、設定名だけを書きます。

DATABASE_URL=設定先で管理する。値は教材、会話、コードへ書かない
AUTH_SECRET=設定先で管理する。値は画面やログへ表示しない

ローカルの設定ファイルを使う場合も、値を共有文書へ貼りません。.env.example には必要な名前と説明だけを書き、実値は入れません。

実習の成果は秘密の値を用意することではなく、値なしでも構造と確認手順を説明できることです。

正常な結果

次の7項目を自己採点します。

  • すべての入力が見てすぐ架空と分かる
  • RFC 2606の例示用ドメインなど、実在先へ届かない値を使った
  • 正常、空欄、長文、重複の条件を再現できる
  • 認証と認可判定を別の確認として記録した
  • 一覧と直接URLの認可ケース、操作、期待する拒否結果を定義した
  • APIによる他人データの取得、更新、削除を拒否する期待結果を定義した
  • 秘密の値がコード、AI会話、画面、ログに現れない

7項目すべてを同じダミーデータで再検証できれば正常です。

よくある失敗

失敗1:実在する情報を少し変えて使う

一文字だけ変えた氏名や、実在する連絡先の一部を伏せた値は、元の対象を推測できることがあります。最初から無関係な架空値を作ります。

失敗2:秘密情報をコードへ直接書く

手元だけのつもりでも、Gitの履歴、コピーした差分、画面共有へ残ります。あとで削除しても、過去の履歴や外部サービスに残る可能性があります。

失敗3:環境変数なら全部安全だと思う

環境変数は受け渡し方法です。ログへ出す、クライアント側へ渡す、公開用の接頭辞を付けるなど、使い方によっては見えることがあります。

失敗4:一つの架空アカウントだけで認証を確認する

ログイン成功は確認できても、アカウント間の分離は確認できません。AとBを用意します。

復旧:混入を疑ったら広げない

秘密情報や実在情報を入力した可能性に気づいたら、まずコピー、共有、公開、追加実行を止めます。値そのものを新しいメモへ転記してはいけません。

次に、どの種類の情報が、どの場所へ入った可能性があるかを記録します。「秘密情報らしき値がAI会話へ入った可能性」のように、値を再掲せず範囲だけを残します。

秘密情報なら、利用中のサービスが定める手順で無効化と再発行を行います。権限がなければ管理者へ連絡します。単に画面から消すだけで終わらせません。

実在情報なら、組織の規程と責任者へ従います。自己判断で隠し続けず、拡散を止めて正しい連絡経路へ渡すことが復旧です。

その後、ダミーデータへ置き換え、履歴、ログ、共有物の影響範囲を確認します。

手順

混入を疑ったときの復旧順序

値を再掲せず、拡散停止から連絡、無効化、置換、影響確認へ進む順序です。

  1. NODE 1拡散を止めるコピー、共有、追加実行を停止
  2. NODE 2範囲を記録値ではなく種類と場所
  3. NODE 3正しく連絡管理者や定められた経路
  4. NODE 4無効化と置換承認手順で対応
  5. NODE 5影響を確認履歴、ログ、共有物

安全メモ

秘密情報の値を、教材、テスト、スクリーンショット、課題提出物へ書かないでください。例示には REPLACE_IN_SECURE_SETTINGS のような明らかな説明用文字列を使います。

.env という名前だけで安全になるわけではありません。バージョン管理の対象外であること、権限が適切であること、クライアントへ露出しないことを確認します。

実在情報を使う必要が生じた時点で、この実習の範囲を超えます。 組織のルール、利用サービスの規約、承認された環境を確認してから別の手順として扱います。

成果物

このレッスンの成果物は、次の二つです。

  1. 二つの架空アカウント、正常データ、境界データを含むダミーデータ一式
  2. 設定名、公開可否、保管場所、ログへの非表示を記した秘密情報の保管確認表
設定名: AUTH_SECRET
値を書く場所: 承認された実行環境の設定
コードへ書く: いいえ
AI会話へ貼る: いいえ
画面やログへ出す: いいえ
問題時: 追加利用を止め、管理者の手順で無効化と再発行

成果物には秘密の値を含めない。 この一文を確認表の先頭へ書いてください。

用語集

保存できたこと、本人だと分かったこと、操作を許してよいことは、それぞれ別の証拠で確認します。

参考・一次資料

AIサービスに入力した内容の保存、学習利用、保持、共有は、サービス、プラン、組織契約、アカウント設定によって異なります。「AIだから保存される」「設定を切れば即時に全履歴から消える」と一律に断定せず、利用中のサービスの公式data policyと現在の設定を確認します。

次の駅

企画上の次駅

架空企画では、データ線の「認証・権限駅」へ進む条件が見えました。ただし需要検証を終えていないため、実装着手はまだ保留です。

需要検証と要件定義を通過した後、認証と認可は「認証・権限駅」、直接URLとAPIの拒否は「サーバー・API駅」で実装して検証します。

教材上の次レッスン

次は「止まる基準」です。ダミーデータと秘密情報を分離しても、異常が出たときに変更を続ければ影響は広がります。

操作前に停止条件を決め、止めたあとに確認、連絡、復旧へ進むストップカードを作ります。

今日のまとめ

3行で振り返ります。

  • 試作には実在性がなく、見てすぐ架空と分かり、境界を試せるダミーデータを使う
  • 秘密情報はコード、会話、画面、ログから分離し、承認された実行環境だけで扱う
  • 混入を疑ったら共有と追加実行を止め、値を再掲せず影響範囲と連絡先を確認する