doxguard

USER JOURNEY / v0.1.0

公開前に、自分の情報
ローカルで止める。

doxguard は、氏名・顧客名・社内ホスト名などを「あなたのPCだけにある監視語リスト」と照合し、 Gitコミット直前に漏えいを止めるRust製ゲートです。

A
対象の単語はどこで設定する?

リポジトリ外の names.txt または CSV に書きます。doxguard.config.json には、実語ではなくそのファイルへの環境変数参照だけを書きます。

1. 監視語を書く

一行一語のテキスト、または既存台帳のCSV列を使う。

2. initでつなぐ

設定・高速なpre-commit・構造検査CIをまとめて用意。

3. あとは普通にcommit

PASSなら続行。検出時だけファイルと行を示して停止。

01

まず全体像:初回だけ6ステップ

オレンジがユーザーの操作、緑がdoxguardの自動処理です。

1. インストール npm / pnpm / bun 2. 監視語を作る リポジトリの外 3. doxguard init hookとCIを自動生成 ENV 4. パスを接続 環境変数を設定 5. 初回スキャン 意図どおりか確認 6. いつものcommit 毎回、自動で守る 初回セットアップ後は、ステップ6だけが日常になる
ユーザーが一度設定 doxguardが日常的に実行
02

監視語は「秘密の別ファイル」に置く

ここが最重要です。設定JSONに本名や社名を直接書きません。

公開リポジトリ / Git あなたのPCだけ / 非公開 doxguard.config.json 実データではなく、参照だけ ${DOXGUARD_WATCHLIST_DIR}/names.txt ソースコード / README / fixture スキャンされる対象 公開してよい内容だけ names.txt 氏名・会社名・顧客名など 一行に一語。Gitには入れない。 systems.csv 既存台帳の特定列も利用可能 display_name列などを指定 環境変数で接続 外部送信なし・read-only
names.txt一番簡単
# 1行に1つ。# はコメント
Northwind Harbor
Contoso Works
internal-host-fixture
systems.csv既存台帳を流用
id,display_name,kind
1,Northwind Harbor,customer
2,internal-host-fixture,host

答え:追加・削除したい監視語は names.txt または指定したCSV列で管理します。設定JSONは「どのファイルの、どの列を読むか」だけを担当します。

03

インストール:試すか、常用するか

日常利用ではグローバルインストール後に doxguard init を1回実行します。

まず試す

インストールを残さない

既存リポジトリを一度だけ確認したいとき。

npx
全trackedをscan
npx doxguard scan --all-tracked
doxguard init doxguard.config.json 環境変数参照のひな形 Git pre-commit .git内のネイティブ高速経路 GitHub Actions 構造パターンだけをCI検査 守られたリポジトリ 既存ファイルは上書きしない
04

接続:環境変数を1本通す

リポジトリには抽象的な参照だけ。実際の保存場所はPC側で決めます。

設定JSONは
地図であって
名簿ではない。

実語は外部ファイルに置き、JSONは読み込み元と検査方針だけを宣言します。

$env:DOXGUARD_WATCHLIST_DIR = "D:/private/watchlists"
!

これは現在のターミナル用です。常用するならOSのユーザー環境変数やシェル設定へ保存します。

設定JSON ${WATCHLIST_DIR} 構造検査 ON/OFF allow / 除外パス PCの環境変数 WATCHLIST_DIR 実際の非公開フォルダ ローカル読込 TXT / CSV 重複・短語を整理 外部送信なし Rust scanner Aho–Corasick 全語を一括照合 結果だけ表示 展開 読込 構築 監視語の中身は、このPC内の経路だけを通る

設定JSONには「読み方」を書く

TXTはファイル全体、CSVは対象列を指定できます。以下に実在の監視語は含まれていません。

{
  "watchlists": [
    {
      "type": "lines",
      "path": "${DOXGUARD_WATCHLIST_DIR}/names.txt",
      "label": "private names"
    },
    {
      "type": "csv",
      "path": "${DOXGUARD_WATCHLIST_DIR}/systems.csv",
      "column": "display_name",
      "label": "internal systems",
      "parenVariants": true
    }
  ],
  "structural": {
    "windowsPath": true,
    "posixHome": true,
    "privateIp": true,
    "email": true,
    "custom": []
  }
}
最大限に非公開

設定JSONもリポジトリ外

監視元の構成すら公開したくない場合は、未追跡ファイルを明示します。

$env:DOXGUARD_CONFIG = "D:/private/doxguard/config.json"
doxguard scan --all-tracked --dry-run
05

日常UX:いつも通りcommitするだけ

スキャン操作を思い出す必要はありません。pre-commitが自動で実行します。

コードを編集 git add git commit 普段どおり 監視語が 含まれる? NO / PASS コミット完了 追加操作なし YES / BLOCK 場所を表示して停止 直す → add → commitを再実行
$ git commit -m "docs: update guide" PASS doxguard scanned staged files files: 4 needles: 82 findings: 0 [main 4a15b2c] docs: update guide
PASS 何も考えず続行

検出0件なら、そのままコミットが完了します。

BLOCK 行番号を見て修正

対象ファイル・行・種類・修正提案が表示されます。

意図的な公開値なら allow

// doxguard: allow Public のように、その行だけ例外化できます。

06

ローカルとCIは、守る範囲が違う

秘密の監視語はCIへ送らず、CIは「形で分かる危険」だけを検査します。

PC ローカル pre-commit

あなた固有のデータまで照合する、本命の防御。

  • names.txt / CSV の監視語
  • Windows・POSIXの個人パス
  • プライベートIP・非公開メール
  • カスタム正規表現

CI GitHub Actions

秘密を受け取らず、公開コードだけで成立する防御。

  • 個人パスらしい文字列
  • プライベートIP
  • allow外のメール
  • 個人のwatchlistは送信しない
あなたのマシン watchlist 非公開 scan engine read-only Git push 公開ファイルだけ watchlistは通過しない GitHub / CI 構造パターンだけ path / IP / email

迷ったら、この4つだけ。

監視語は外に置く。init でつなぐ。最初に全体スキャンする。その後は普通にコミットする。

01グローバルインストール
02外部に names.txt
03init + 環境変数
04いつも通り commit

doxguard v0.1.0 user journey / synthetic examples only / 2026-07-16