料理ブログ等のプロジェクトでClaude Codeを使い始めて、ファイルの中身から特定の言葉を一気に探したい人向け
料理ブログのcontent/recipes/フォルダで「豚バラを使うレシピを全部見たい」場面や、「鍋料理タグが付いた記事を一覧で出したい」場面、画像のalt属性が空の記事をまとめて修正対象としてピックアップしたい場面で叩く。要するに「複数ファイルにまたがって同じ言葉や似た表記を探したい」時の標準ツール
噛み砕くと
本棚から「『鍋』って書いてあるページが入ってる本を全部出して」と司書さんに頼むイメージです。
本のタイトル(背表紙)を見て探すのがGlob、本のページを1冊ずつめくって特定の言葉が書いてあるかチェックするのがGrep。担当が違います。
料理ブログだと、ファイル名は tonbara-don.md nabe-yose.md みたいに付いていて、タイトルだけ見ても「豚バラを使ってるか」「鍋料理に分類されているか」までは判断できません。中身を1ファイルずつ開いて確認するのは面倒です。
Grepはそれを一発でやります。
Grepを呼ぶと画面に何が出るのか
料理ブログの content/recipes/ フォルダで「豚バラ」を含むレシピを探す例を見ます。
私が「content/recipes/ の中で豚バラを含むレシピを探して」とClaudeに頼むと、ClaudeはGrepツールを呼びます。返ってくる出力はだいたいこんな見た目です。
content/recipes/tonbara-don.md:3:title: "豚バラ丼"
content/recipes/tonbara-don.md:18:豚バラ肉を1cm幅に切る
content/recipes/yasai-itame.md:25:豚バラの代わりに鶏もも肉でも可
content/recipes/nabe-yose.md:42:豚バラ薄切り 200g
左から「ファイルの場所」「行番号」「マッチした行の中身」が並びます。
これだけで「3つのレシピで豚バラに言及されている、1つは代替案として書かれているだけ」と一目で見当が付きます。
1ファイルずつ開いてCtrl+Fで探すのに比べて、明らかに速い。
料理ブログで「豚バラを使うレシピ全件」を探す再現手順
ステップ1: 表記揺れを整理する
料理ブログを書いていると、同じ食材でも記事によって書き方がバラバラになりがちです。「豚バラ」「豚ばら」「豚バラ肉」「pork belly」のように、書いた時の気分で揺れます。
Grepにかける前に「どの書き方を拾いたいか」を決めます。私はこの段階で、Notepadや手元のメモに候補を書き出しておきます。
豚バラ
豚ばら
豚バラ肉
pork belly
ステップ2: パターンを設計する
複数の表記を1回の検索で拾うために、正規表現の |(縦棒)を使います。豚バラ|豚ばら|pork belly で「このどれかにマッチする行」を全部拾います。
「豚バラ」が「豚バラ肉」にも含まれるので、肉まで指定する必要はありません。前方一致で勝手に引っかかります。
ステップ3: ClaudeにGrepを頼む
Claudeのターミナルで、こう頼みます。
content/recipes/ の中で「豚バラ」「豚ばら」「pork belly」のいずれかを含む
レシピを全部リストアップして。ファイル名と該当行が分かる形で。
ClaudeはGrepツールを呼んで、こんな指定で動かします(裏側のイメージ)。
- pattern:
豚バラ|豚ばら|pork belly - path:
content/recipes/ - output_mode:
content(マッチした行を表示) - -n: 行番号を表示
結果が画面に並びます。
ステップ4: ReadでファイルをClaudeに開かせて全体を確認する
「お、tonbara-don.md と nabe-yose.md でメイン食材として使ってる、yasai-itame.md は代替案メモだけだ」とGrepの結果から分かったら、メインで使ってる2ファイルだけRead(リード)で開いて中身全体を確認します。
ここで初心者がやりがちな勘違いがあります。Grepの結果に出た行だけ見て「全体を理解した」気になることです。Grepが返すのは「マッチした1行」だけで、その前後の文脈は出ません。判断材料にする時は必ずReadで全体を開く。これは習慣にしておく価値があります。
素のgrep / find と Grep(専用ツール)の使い分け
「Bash経由でgrepを直接叩けばいいじゃん」と思う場面もあります。実際できます。ただ、Claude Code経由で使うならGrepツールの方が安全で速いです。
理由は3つ。
- 速度: ripgrepベースで動くため、1万ファイルあるリポジトリでも数秒で返る。素のgrepで再帰検索するより明らかに速い
- 安全性: gitignoreや隠しファイルを既定で除外するので、
node_modulesや.gitの中まで掘って結果が泥沼になりにくい - 結果の制御: output_mode の3種類で表示を切り替えられる。「ファイル名だけほしい」「件数だけほしい」が指定1つで済む
素のgrepをBashで叩くべき場面は、特殊な操作(パイプで他コマンドに繋ぐ、シェルスクリプトの中で使う)に限定されます。普通の検索はGrepツールに任せる方が事故が少ない。
出力モード3種類の使い分け
output_modeを切り替えると、料理ブログでよくある3種類の検索ニーズに綺麗に対応できます。
content モード(マッチした行を全部表示)
「豚バラがどう登場しているか、文脈を見ながら全件チェックしたい」場面で使います。
content/recipes/tonbara-don.md:18:豚バラ肉を1cm幅に切る
content/recipes/yasai-itame.md:25:豚バラの代わりに鶏もも肉でも可
既定値はこのモード。1件ずつどう書かれているか確認したい時の標準パターンです。
files_with_matches モード(ファイル名だけ表示)
「豚バラを使ってるレシピのファイル名だけ知りたい、中身は後で見る」場面で使います。
content/recipes/tonbara-don.md
content/recipes/yasai-itame.md
content/recipes/nabe-yose.md
結果が大量に出そうな検索で、まず一覧だけ把握したい時に便利。10ファイル100ファイルでも画面が暴れません。
count モード(件数だけ表示)
「豚バラ何回出てくる?」を一発で出します。
content/recipes/tonbara-don.md:5
content/recipes/yasai-itame.md:1
content/recipes/nabe-yose.md:3
「豚バラ推しすぎてないか棚卸ししたい」みたいな量的な確認に使う。料理ブログ運営だと、特定の食材に偏ってないかをこれで見る場面があります。
正規表現 早見表
料理ブログ運営でよく使うパターンだけ表にまとめます。これだけ覚えれば9割は足ります。
| 記号 | 意味 | 料理ブログでの例 |
|---|---|---|
. |
任意の1文字 | 豚. → 「豚」の後に1文字(豚バ、豚ば、豚肉) |
* |
直前が0回以上 | あ* → 「」「あ」「ああ」「あああ」全部マッチ |
+ |
直前が1回以上 | あ+ → 「あ」「ああ」マッチ、「」はしない |
? |
直前が0か1回 | 豚バラ肉? → 「豚バラ」「豚バラ肉」両方マッチ |
| |
OR(どれか) | 豚バラ|鶏もも|牛バラ → 主要肉3種を一括検索 |
^ |
行頭 | ^title: → frontmatterの title 行だけ |
$ |
行末 | 。$ → 「。」で終わる行 |
[abc] |
a/b/cどれか | [豚鶏牛] → 「豚」「鶏」「牛」のどれか1文字 |
\d |
数字1桁 | \d+分 → 「30分」「5分」など時間表記 |
料理ブログだと | と ^ が圧倒的に出番が多いです。表記揺れの一括拾いと、frontmatter特定行の抽出。この2つを押さえておけば日常の検索はほぼ回ります。
料理ブログでの使いどころ
シナリオ1: 食材の表記揺れを棚卸ししたい時
記事を50本100本書いた段階で、同じ食材を「豚バラ」「豚ばら」「豚バラ肉」とバラバラに書いてる事実が浮上します。Grepで 豚ばら|豚バラ|豚バラ肉 を一括検索して、files_with_matchesモードで一覧化。あとは Edit(エディット)で表記を統一していく流れです。
SEO的にも表記が揃ってる方が検索に強いので、年1回の棚卸しイベントとしてやる価値があります。
シナリオ2: 特定タグが付いた記事を抽出したい時
「鍋料理タグが付いた記事を全部、目次ページ用にリストアップしたい」場面。frontmatterに tags: [鍋料理, 冬料理] のように書いてあれば、^tags:.*鍋料理 でtags行に「鍋料理」を含むファイルだけ抽出できます。
files_with_matchesモードで投げると、対象ファイル名がスッと並ぶ。手作業で「全記事を1本ずつ開いてタグ確認」をやる必要がなくなります。
シナリオ3: 画像のalt属性が空の記事を一覧化したい時
Markdownで  と書くと alt属性が空になります。SEO・アクセシビリティ的に良くない。!\[\] でalt空の画像記法を一括検索すれば、修正対象の記事が一発で出ます。
これ、地味だけど後から手作業で探すと永遠に終わらないやつ。Grepなら2秒で終わる。
初心者が踏みやすい落とし穴
- 正規表現の特殊文字をそのまま検索しようとする。
!.*(はパターン記号として解釈されるので、文字そのものを探したい時はバックスラッシュでエスケープが必要。\!\.のように書く - 検索範囲を絞らずにプロジェクト全体に投げる。料理ブログ程度ならいいけど、巨大プロジェクトだとnode_modulesに引っかかって地獄。pathで
content/recipes/のように対象を絞る癖をつける - files_with_matchesで満足して中身を見ない。ファイル名だけ見て「OK直そう」と判断すると、文脈を取り違える。怪しい時は必ずReadで全体を開く
- 大文字小文字を区別したまま英語を探す。
Pork Bellyとpork bellyは別物として扱われる。英語混じりの検索は-i(大文字小文字無視)を付けるのが基本 - カレントディレクトリを把握せずにpath省略。pathを指定しないとカレントから検索が走る。Bashで
cdした直後だと、想定と違う場所を漁って結果が空になる事故が起きる - 表記揺れの全パターンを思い出せない。「豚バラ」を探すつもりが、記事には「豚ばら」とひらがなで書いてある事実を忘れて、空振り。最初に
|でOR検索する癖をつけておくと安全 - Bashの
grepと混同して同じ書き方をしようとする。Grepツールはパラメータ指定なので、-A 3 -B 2相当も別パラメータで渡す。「Bashのgrepコマンドの完全互換」ではない
関連するコマンド・ツールへの動線
- Glob(グロブ) - ファイル名のパターンで検索するペア。「Globで対象を絞ってからGrepで中身検索」の連携が王道の使い方
- Read(リード) - Grepで見つけた行を含むファイルを開いて、全体の文脈を確認する
- Edit(エディット) - Grepで見つけた箇所を直す。表記揺れの一括修正で組み合わせる
- Write(ライト) - 新規ファイルを書く時に使う。Grepで既存記事を調べてから新記事を書き起こす流れで併用
- Bash(バッシュ) - 素の
grepやripgrepを直接叩きたい時の比較対象。普通はGrepツールの方が安全 - /init(イニット) - プロジェクトをClaude Codeで管理し始める初日に叩く
- /memory(メモリー) - CLAUDE.mdを編集してプロジェクトの決め事を覚えさせる
- CLAUDE.md(クロードエムディー) - プロジェクト用の覚え書きファイル
- Agents(エージェンツ) - タスク特化のサブエージェントを定義する仕組み
- /clear(クリア) - 会話履歴をリセットする
- /compact(コンパクト) - 会話を要約して圧縮する
- Skills(スキルズ) - 再利用可能なプロンプトワークフロー
- Hooks(フックス) - ツール実行の前後に独自処理を挟む仕組み
- MCP(エムシーピー) - 外部ツールを繋ぐプロトコル
参考リンク
書き方
ターミナル上で直接打つコマンドではなく、Claudeに「○○を含むファイルを探して」と頼むと裏でClaudeが呼び出すツール。指定の柱は pattern(探したい言葉や正規表現)/path(探す範囲のフォルダ)/glob(ファイル名で対象を絞る)/output_mode(content・files_with_matches・countの3種から表示形式を選ぶ)の4つ
やってみるとこうなる
入力
content/recipes/ の中で「豚バラ」「豚ばら」「pork belly」のいずれかを含むレシピを全部リストアップして。ファイル名と該当行が分かる形で。
出力例
content/recipes/tonbara-don.md:18:豚バラ肉を1cm幅に切る
content/recipes/yasai-itame.md:25:豚バラの代わりに鶏もも肉でも可
content/recipes/nabe-yose.md:42:豚バラ薄切り 200g
このページに出てきた言葉
- ripgrep
- 高速な検索ツール。素の <code>grep</code> より大幅に速く、巨大なフォルダでも一瞬で返る。Grepツールはこのripgrepを内部で使っている
- 正規表現
- 文字列のパターンを記号で書く方法。<code>|</code> はOR、<code>.</code> は任意の1文字、<code>^</code> は行頭、<code>$</code> は行末を表す
- 表記揺れ
- 同じ意味の言葉が複数の書き方で混ざっている状態。料理ブログだと「豚バラ/豚ばら/豚バラ肉」のように、ひらがなとカタカナと漢字の組み合わせで揺れやすい
- output_mode
- Grepの結果の見せ方を切り替える指定。<code>content</code>はマッチ行を全部表示、<code>files_with_matches</code>はマッチしたファイル名だけ、<code>count</code>は件数だけ
- frontmatter
- 記事ファイルの先頭に書く、その記事のメタ情報(タイトル・タグ・公開日など)。<code>---</code>で囲まれた範囲に書き、Hugoや Jekyll などの静的サイト生成ツールで使う
- 行番号
- ファイルの中で何行目にマッチしたかを示す数字。Grepの出力で <code>:18:</code> のように表示される
- カレントディレクトリ
- 今ターミナルが「ここのフォルダで作業中です」と認識しているフォルダ。<code>pwd</code>コマンドで確認できる。Grepでpathを省略するとここから検索が走る
- 大文字小文字無視
- 検索時に「ABC」と「abc」を同じものとして扱う指定。<code>-i</code>を付けると有効になる
- kebab-case
- 単語をハイフンで繋ぐ命名スタイル。<code>tonbara-don</code> <code>yasai-itame</code>のように書く。料理ブログのファイル名でよく使われる