コマンドラインでのコード検索と置換は開発者の日常的な作業ですが、grep の出力は読みにくく、sed の構文は理解しにくいものです。amber は Rust で書かれたコード検索・置換ツールで、grep の強力な機能を保ちながら、より使いやすいインタラクティブな体験と明確な出力形式を提供します。

プロジェクト概要

属性内容
GitHubdalance/amber
Stars932
言語Rust
特徴カラー出力、インタラクティブ確認、バッチ置換
最終更新1日前

解決する問題

従来のコード置換フローは通常以下のようになります:

# まず検索
grep -r "oldFunction" .

# 次に置換、sed の構文はいつも不安
grep -rl "oldFunction" . | xargs sed -i 's/oldFunction/newFunction/g'

このフローにはいくつかの問題があります:

  • 完全なコンテキストが見えず、誤った置換をしやすい
  • プレビュー機能がなく、エラーが発生すると復元が困難
  • クロスプラットフォームで sed -i の動作が一貫しない(BSD sed と GNU sed でパラメータが異なる)

コア機能

1. カラーコンテキスト出力

amber はマッチ結果を表示する際に完全なコードコンテキストを表示し、マッチ部分をカラーでハイライトします。置換を実行する前に、各行で何が起こるかを明確に確認できます。

$ ambr oldFunction newFunction

./src/main.rs
  15 | fn oldFunction() -> i32 {
  16 |     oldFunction() + 1
     |     ^^^^^^^^^^^ 'newFunction' に置換

2. インタラクティブ確認

デフォルトでは、amber は置換するかどうかを一つずつ確認します。一括誤操作を防ぎます。y で確認、n でスキップ、a ですべて置換できます。

3. 正規表現サポート

完全な正規表現マッチングとキャプチャグループ置換をサポートしています:

# console.log を logger.debug に変換
ambr "console\.log\((.*)\)" "logger.debug(\1)"

4. ファイルフィルタリング

ファイルタイプでフィルタリングし、無関係なファイルの検索を回避できます:

# .rs ファイルのみで検索
ambr "unwrap()" "expect(\"fatal error\")" --include "*.rs"

# テストファイルを除外
ambr "TODO" "FIXME" --exclude "*test*"

クイックスタート

インストール

# cargo 経由
cargo install amber

# または Homebrew 経由 (macOS/Linux)
brew install amber

基本用法

# 検索(grep に似ているが、より見やすい出力)
amber "pattern"

# 検索して置換(インタラクティブ確認)
ambr "old" "new"

# すべて強制置換(確認なし)
ambr "old" "new" --yes

# プレビューのみ、実際の置換はしない
dry-run "old" "new"

ツール比較

ツールStarsポジショニング学習曲線
grep組み込み汎用テキスト検索
ripgrep47k+高速コード検索
sed組み込みストリームエディタ
amber932検索・置換一体化

ripgrep と比較すると、amber は純粋な検索ではなく置換シーンに特化しています。sed と比較すると、amber の出力はより直感的で、インタラクションはより安全です。

ユースケース

  • コードリファクタリング: 安全に関数や変数をバッチリネーム
  • API 更新: 廃止された呼び出し方法を置換
  • コードクリーニング: コードスタイルを統一。例:すべての console.log を正規のログ呼び出しに置換
  • プロジェクト移行: ファイルパスや設定項目の大規模置換

注意事項

  • デフォルトで .git ディレクトリとバイナリファイルをスキップ
  • 大規模な置換を実行する前に --dry-run でプレビューすることを推奨
  • 正規表現構文は Rust regex と同じ(Perl 互換スタイル)

まとめ

amber は画期的なツールではありませんが、grep + sed の組み合わせで煩わしい小さな問題を解決します。プロジェクトでバッチ置換が必要なとき、提供されるコンテキストプレビューとインタラクティブ確認はエラー発生リスクを効果的に低減します。

932 stars のニッチプロジェクトとして、amber のコード品質とメンテナンスの活発さはかなり良く、試す価値があります。


属性内容
リポジトリhttps://github.com/dalance/amber
ライセンスMIT
言語Rust
メンテナー@dalance