大きなソースファイルをいきなり全文で開くと、読む範囲を自分で選べません。先に公開シンボルと行範囲だけを出す CLI として zat を置くと、当たりのある区間だけを Read できます。公式 README は LLM コーディングエージェント向けに、シグネチャが欲しいときは zat を cat や Read より先に使う、と書いています。非対応ファイルは終了コード 1 で落ちるので、未知の拡張子を成功扱いにしません。
📑目次
この記事では、zat が公開する情報と隠す情報、Homebrew・Nix・mise・cargo の導入方法の違い、対応言語、エージェントに渡す前の判定基準を技術的な判断材料として整理します。トークン削減は公式の想定用途ですが、削減量に関する公式ベンチマークは公開されていません。実際の効果はリポジトリの規模や呼び出し方によって変わります。
zatは何を一覧し、何を隠すか
zat はコードの公開部分の全体像を提供するツールです。実装本体の詳細な読解を目的としたツールではありません。
公式の定義
公式 README では zat を「exported symbols and line numbers at a glance」と定義しています。名前は日本語の「ざっと」に由来します。
出力対象は公開・エクスポートされたシンボルのシグネチャと、開始行から終了行までの範囲です。
- 出るもの: 公開/エクスポートされたシンボルのシグネチャ、開始〜終了の行範囲
- 出るもの(型の中身): 構造体のフィールド、列挙のバリアント、インターフェースのメンバー
- 省略されるもの:
pub/export修飾子 - 出ないもの: 非公開シンボル
- v0.5.0 以降の追加: JavaScript / TypeScript / Python / Java / C / C++ / C# / Ruby / Rust / Go の import / include 行
出力例
典型例は zat src/lib.rs です。公式例は struct OutlineEntry { // L8-L12 のように、型名の横に開始〜終了行を付けます。v0.5.2 以降の複数行ノードは L26-L42 形式です。単一行番号だけを見て範囲を推測する必要はありません。
見えないもの
見えない部分を補おうとすると失敗します。private 関数の実装、テスト専用の内部ヘルパー、コメントの意図は zat だけでは分かりません。公開 API の全体像を先に把握し、必要な行範囲だけを開くのが公式の想定用途です。全文検索や実装レビューの代替にはなりません。
導入経路を選ぶ(Homebrew / Nix / mise / cargo)
最短経路は用途によって異なります。
- macOS で公式 tap に合わせるなら Homebrew
- 既存の Nix 環境なら、ピンの新しさで nixpkgs と numtide を分ける
- ソース最新を自分で追うなら mise か cargo
調査日時点の版
調査日 2026-08-18 時点の公式最新タグは v0.5.4(2026-05-06)です。
- numtide/llm-agents.nix の
packages/zat/package.nix: 0.5.4 - nixpkgs unstable: 0.5.3
0.5.4 の手順(mise 記載など)が要るなら、nixpkgs の 0.5.3 に固定しない方が安全です。
導入コマンド
導入コマンドは次のとおりです。
- Homebrew:
brew install bglgwyng/tap/zat - nixpkgs:
nix profile install nixpkgs#zat、またはnix run nixpkgs#zat -- <FILE>/nix-shell -p zat - numtide flake:
nix run github:numtide/llm-agents.nix#zat -- src/main.rs - mise:
mise use -g github:bglgwyng/zat - cargo:
cargo install --git https://github.com/bglgwyng/zat - バイナリ: GitHub Releases(macOS aarch64 / x86_64、Linux x86_64)
# 公式 README のファイル指定
zat src/lib.rs
# Nix で一時実行(ファイルを渡す)
nix run github:numtide/llm-agents.nix#zat -- src/main.rs
導入時の制限
制限についても最初に確認します。
- zat に
--versionフラグはない - numtide の installCheck が
zat src/main.rsを使うのはそのため - Home Manager は
programs.zat.enableで入れられ、Claude Code 向けルール登録オプションもある - ライセンスはツール本体が GPL-3.0-only、numtide / Qumulo 側の Nix 梱包コードは MIT
- PDF ビューアの zathura とは別物
ターミナル全体を速くしたい場合は、検索・絞り込み側の fzf・ripgrep・gh の組み合わせ と役割が違います。zat は公開シンボルの地図、fzf / ripgrep は全文と履歴の探索です。両方を同じ「高速 CLI」として混ぜない方が判断が楽です。
対応言語と、zatを使ってはいけないとき
README の表に無い拡張子へ流すと終了コード 1 になります。ディレクトリは渡しません。
公式表の対象
公式対応表の対象は次のとおりです。
- JavaScript / JSX / CJS / MJS
- TypeScript / TSX / MTS / CTS
- Rust、Python、Go、Java
- C / C++、C#、Swift、Kotlin、Haskell、Ruby
エージェント向けメモでは Markdown 見出しも列挙します。
パーサと失敗時の動き
すべてのパーサは tree-sitter を使用しています。公式の tree-sitter は構文エラーがあっても構文木を返す設計ですが、zat は非対応言語を成功扱いにしません。
- v0.5.3 で、未対応/未知タイプは exit 1 になることが再確認されている
cat -nへのフォールバックは v0.5.0 で廃止されている
ファイルのみの制限
v0.5.0 以降はファイルのみです。ディレクトリ指定は削除済みです。nixpkgs の説明文には今も “files and directories” が残っています。これは梱包メタデータであり、現行 CLI の動作ではありません。公開シンボルだけなので、private 実装のレビュー、生成コードの差分確認、設定ファイルの中身確認には向きません。
ブラウザ操作やページ取得が目的なら、zat ではなく別 CLI を選びます。エージェント横でページを見るなら terminal-browser の導入判断、HTML を取得・抽出するなら ax の採用条件 が近いです。zat はソースの公開面だけを先に見る道具です。
使ってはいけない条件をまとめると、次の3つです。
- 拡張子が表に無い
- 欲しいのが private 実装である
- ディレクトリごと一覧したい(現行 CLI は非対応)
このどれかに当たるなら、zat を呼ばずに Read か検索へ進みます。テクノロジー面では、表に無い拡張子を成功扱いにしない方が事故が少ないです。
エージェントに渡す前の判断チェック
「シグネチャが必要か、実装が必要か」で zat と Read を使い分けます。全文を最初に渡さないのが公式の推奨です。
公式が勧めるルール
公式は CLAUDE.md / AGENTS.md に、次の趣旨を置くよう勧めています。
- シグネチャが欲しいときは zat を
cat/ Read より優先する - 行番号が出たら
Read(offset, limit)でその範囲だけ開く
トークンを減らすのが目的なら、この順序を守った方が再現性が高くなります。削減量そのものについては公式ベンチマークが無いため、効果を数字で保証することはできません。
その場の判定
その場で使える判定基準は次の4つの質問です。
- 対象ファイルの拡張子は表にあるか。無いなら zat を呼ばない。
- 欲しいのは公開面の地図か、private 実装か。後者なら zat だけでは足りない。
- 行範囲が出たら、その範囲だけ Read する。当たりが無ければ読まない。
- パッケージピンは足りるか。0.5.4 の機能や手順が要るなら nixpkgs 0.5.3 に固定しない。
- 拡張子が README 表にある
- 欲しいのは公開シンボルであり、private 実装ではない
- 1ファイルだけ渡す(ディレクトリではない)
- 行範囲を見てから Read するルールを AGENTS.md に1段落書いた
- 使っているピンが 0.5.3 か 0.5.4 かをメモした
フォークとカタログ
Qumulo の llm-agents フォークも zat を Memory & Code Intelligence に載せています。調査日時点では上流より 36 commit 遅れです。既存フォークを使い続ける場合を除き、版を追うなら numtide か公式 tap / cargo の方が近いです。
第三者カタログの Hermes Atlas も、zat を GPL-3.0-only のソースビルドとして同じ位置に置いています。カタログは存在確認には使えますが、言語表の正本ではありません。
導入経路の比較(テクノロジー選定)
導入ツールの選択は「動くかどうか」だけでなく、調査時点のバージョンとディレクトリ説明の鮮度も考慮して決めます。
| 経路 | 調査日時点の版 | 向く人 | 注意 |
|---|---|---|---|
| GitHub README / Releases | v0.5.4 | 公式手順どおりに入れる | --version 無し |
| Homebrew tap | README記載 | macOSで最短 | tap名は bglgwyng/tap/zat |
| nixpkgs unstable | 0.5.3 | 既存 Nix 環境 | 説明文に directory が残る。実CLIは v0.5.0以降ファイルのみ |
| numtide/llm-agents.nix | 0.5.4 | エージェント用フレークを既に使う | nix run ...#zat -- <FILE>。installCheck あり |
| Qumulo/llm-agents | 上流のフォーク | 既存フォーク利用者 | 2026-08-18時点で上流より36 commit遅れ |
| mise / cargo –git | ソース最新 | 版を自分で追う | ビルド時間がかかる |
比較表の出典
出典は次のとおりです(2026年8月時点)。
同じ「Nix で入る」でも、0.5.3 と 0.5.4 は別物として扱います。説明文の directory を信じてディレクトリを渡すと、現行 CLI では失敗します。
関連記事:
よくある質問
Q. zat と cat / Read の違いは何ですか。
- 公開シンボルと行範囲だけを出す
- 実装本文は出さない
- 公式は、シグネチャが欲しいときに zat を先に使うよう書いている
- 実装を見る段階になったら、その行範囲だけ Read する
Q. どの言語で使えますか。
- README 表: JavaScript / TypeScript、Rust、Python、Go、Java、C / C++、C#、Swift、Kotlin、Haskell、Ruby
- メモ上は Markdown もある
- 表に無い拡張子は exit 1
- 成功したように見せて
cat -nへ落とす動作は、現行版ではない
Q. Nix で入れるなら nixpkgs と numtide のどちらがよいですか。
- 調査日時点では numtide が 0.5.4、nixpkgs が 0.5.3
- 新しいタグに寄せるなら numtide、または公式 tap / cargo
- 既存の nixpkgs ピンを動かしたくない場合だけ 0.5.3 を使い、機能差を承知する
Q. ディレクトリを渡せますか。
- v0.5.0 で削除されている
- ファイル単位で呼ぶ
- nixpkgs の説明文に directory が残っていても、現行 CLI の仕様ではない
Q. ライセンスは何ですか。
- ツール本体は GPL-3.0-only
- numtide / Qumulo の Nix 梱包コードは MIT
- 配布物を組み込むときは、本体と梱包コードを分けて確認する
まとめと次の一手
zat は公開面の地図を出す CLI です。全文リーダーの代替ではありません。テクノロジー選定としては、公開シンボルが先に要るか、実装が要るか、対応言語か、ピンが 0.5.3 か 0.5.4 か、の4点で足ります。
次にやるべき作業は、次の順序が最も短くなります。
- 常用言語が README 表にあるか確認する。
- 導入経路を1つ選び、1ファイルで
zat <FILE>を試す。 - 行範囲から Read するルールを
AGENTS.mdに1段落足す。 - Nix を使うなら 0.5.3 / 0.5.4 のピン差をメモする。
公式の正本は bglgwyng/zat の README です。導入後に言語を足したくなったら、表の更新を待つか、非対応ファイルを zat に流さない運用を先に決めます。
著者
krona23
IT業界20年以上の実務経験を持ち、日本国内有数のPVを誇る大規模Webサービスで事業部長・CTOを複数社で歴任。Windows/iOS/Android/Webと技術の変遷を経験し、現在はAIネイティブへの変革に注力。DevGENTでは、AIコードエディタ・自動化ツール・LLMの実践的な使い方を日英西3言語で発信中。











コメントを残す