CLI ツールボックス:検索、閲覧、差分確認

このページの目次

範囲を絞り、内容を確認してから操作する。以下はプロジェクトルートから実行する例で、検索やプレビューはファイルを書き換えない。

名前と内容を分けて検索する

拡張子で TOML ファイルを列挙する。

fd -t f -e toml

検索対象となるパスを glob で選ぶ方法もある。

rg --files -g '*.toml'

その内容からリテラル文字列を検索する。

rg -n -F 'timeout' -g '*.toml'

-n は行番号、-F は通常文字列、-g はパス条件である。正規表現が必要な場合だけ -F を外す。

見つからないときは範囲を確認する

rg は通常、隠しパス、ignore 対象、バイナリ内容を除外する。fd にも似た除外があるが、引数は異なる。

目的rgfd
隠しパスを含める--hidden-H
ignore を無視する--no-ignore-I
拡張子指定-g '*.rs' / -t rust-e rs
前後の内容-C 3名前検索には該当しない

Git の内部を除外しながら範囲を広げる例:

rg --hidden --no-ignore -n -F 'timeout' -g '!.git/**'

生成物やローカル設定も増えるため、先にディレクトリや拡張子を絞る。rg の終了コード 1 は一致なし、2 はエラーである。ripgrep ガイド

文脈と置換プレビュー

rg -n -C 3 -F 'timeout' src

src は実在するディレクトリを指定する。前後の行から、同じ名前でも用途が違わないか判断する。

rg -n 'old_name' -r 'new_name' src

-r は出力上の置換であり、⁠ファイルへ保存しない⁠。実際の一括変更前にコメント、文字列、生成物、別の同名シンボルを区別する。コードの名前変更は言語機能を使い、Git diff で確認する。

ファイルとツリーを見る

bat --paging=never --style=plain --color=never Cargo.toml

ページャ、装飾、色を明示的に無効にするとパイプ出力が予測しやすい。既定動作は端末判定や個人設定に影響される。

eza --tree --level=2 --git-ignore

深さで出力量を制限する。Git ignore の適用は --git-ignore で指定し、ツリー表示だけで保証されるとは考えない。

ファイルごとの処理には fd の -x を使える。

fd -t f -e md -x wc -l -- {}

これは行数を読む操作である。書き換えコマンドへ交換する前に対象引数を表示して確認する。整形された ls 出力からファイル名を組み立てない。

Git の差分表示

delta 導入後に Git 設定へ追加する。

[core]
    pager = delta
[interactive]
    diffFilter = delta --color-only
[delta]
    navigate = true
    line-numbers = true
[merge]
    conflictStyle = zdiff3
[diff]
    colorMoved = default

delta は表示を変え、保存された差分は変えない。zdiff3 は共通祖先を衝突表示に含め、colorMoved は移動ブロックの手掛かりを与える。移動後の意味が同じかは別途確認する。

未ステージは git diff、ステージ済みは git diff --cached。表示がおかしければ git --no-pager diff で切り分ける。Git 手順書

ディレクトリ履歴とプロジェクト命令

zoxide を Zsh へ初期化すると、z project は履歴から移動先を選び、zi は対話選択する。同名プロジェクトがあるときは pwd でも確認する。zoxide

既存 Cargo プロジェクトの justfile 例:

check:
    cargo check

test:
    cargo test

just --list で一覧、just test で実行する。just 自体は時刻から再ビルドを判定せず、増分構築は Cargo が担当する。just マニュアル

小さな確認課題

練習リポジトリで通常、隠し、ignore 対象の三ファイルに同じ文字列を入れる。標準 rg、--hidden、--no-ignore を比較し、置換プレビュー後にファイルが変わっていないことを確かめる。各結果を説明できてから大きなリポジトリへ適用する。