料理ブログ等のプロジェクトでClaude Codeを使い始めて、特定の名前パターンに合うファイルを一発で探したい人向け
料理ブログ等のプロジェクトで「いまレシピ記事は何本ある?」「2025年に書いた分だけ見たい」「画像ファイルの一覧が欲しい」みたいに、特定の名前パターンに合うファイルを一気に集めたい時にClaudeに頼んで呼ばせる。Bashでfindを叩くより速くて安全なので、Claude Codeに探索を頼むなら基本こちらを選ぶ。
噛み砕くと
図書館の本棚で、司書さんに「タイトルに『煮込み』が入ってる本を全部出して」と頼む感じです。
司書さんは本棚を1つずつ歩いて、条件に合う本だけ抜き出して並べてくれる。私は出てきた本を眺めて、必要なやつを開けばいい。
これがファイルの世界で起きていると思えばだいたい合ってます。
違うのは、Glob は「中身」までは見ないこと。あくまで「ファイルの名前と置き場所」だけで判定する。中身に「煮込み」というキーワードが入ってる本を探したいなら、それは別のツール(Grep)の仕事です。
Glob を呼ぶと画面に何が出るのか
料理ブログ cooking-blog のフォルダ構成がこうだったとします。
cooking-blog/
├── content/
│ └── recipes/
│ ├── nikujaga.md
│ ├── curry.md
│ └── 2025/
│ ├── miso-soup.md
│ └── oden.md
├── static/
│ └── images/
│ ├── nikujaga.jpg
│ └── curry.png
└── config.toml
ここで Claude に「全部のレシピ記事のパスをリストアップして」と頼むと、Claude は内部で Glob を呼びます。私の画面には Glob の呼び出しと、返ってきたパスの一覧が出ます。
● Glob(pattern: "content/recipes/**/*.md")
⎿ Found 4 files
/home/me/cooking-blog/content/recipes/nikujaga.md
/home/me/cooking-blog/content/recipes/curry.md
/home/me/cooking-blog/content/recipes/2025/miso-soup.md
/home/me/cooking-blog/content/recipes/2025/oden.md
4ファイルを更新が新しい順で並べてくれます。ここから Claude は、必要なファイルを Read で開いたり、Edit で直したりする次の動きに進む。
料理ブログで「全レシピ記事一覧を取る」再現手順
頭の中で再現できるように、4ステップで追います。
ステップ1: 料理ブログのフォルダ構成を把握する
料理ブログを Hugo で作っていたとして、レシピ記事は content/recipes/ 配下、画像は static/images/ 配下に置く構成が一般的です。
2025年に書いた分だけ content/recipes/2025/ のようにサブフォルダで分けてる人も多い。
まずはこの「どこに何が置いてあるか」を私が把握しないと、Glob のパターンが組めない。
ステップ2: パターンを設計する
「全レシピ記事を取る」なら content/recipes/**/*.md。
意味を分解するとこう。
content/recipes/- このフォルダの下を見る**- 何階層下まで掘ってもいい*.md- ファイル名は何でもいいけど拡張子が.mdのもの
ステップ3: Claude に Glob を頼む
Claude にこう頼みます。
レシピ記事のmdファイルを全部リストアップして。content/recipes 配下にある。
Claude は content/recipes/**/*.md に当たる Glob を内部で呼んで、ファイル一覧を返します。
ステップ4: 結果から目的ファイルを絞り込む
4本出てきたとして、私はそこから「2025年の記事だけ Read で開いて」と次の指示を出せます。
Glob の出力はソート済みなので、私が目視で順番を追える状態。ここから Read / Edit / Grep に流していく。
Bash の find と Glob の使い分け
「同じこと find でできるのでは?」と思った人、その通りです。find content/recipes -name "*.md" で似た結果は取れる。
ただ、Claude Code に頼むなら Glob を選ぶのが基本です。理由は3つ。
- 速度: Glob は Claude Code 内部で最適化されていて、大規模なリポジトリでも素直に速い。
findは OS のコマンドを呼ぶので、ファイル数が多いと待たされる場面がある - 安全性:
findは Bash 経由で動くため、書き方を間違えるとファイル削除みたいな破壊的なコマンドに化ける可能性がある。Glob は読み取り専用で、結果を返すだけ - Claude との相性: Glob の出力は Claude が次の操作(Read/Edit/Grep)に流しやすい形に整えてある。
findの出力は人間向けで、Claude が解釈し直す手間がかかる
逆に find を使うのが妥当な場面もあります。「更新日時が3日以内のファイル」「サイズが100KB以上のファイル」みたいな、ファイル名以外の条件で絞りたい時。Glob はファイル名・パスの形でしか絞れない。
Glob パターン記法 早見表
料理ブログで使う場面と一緒に、よく出る記号をまとめます。
| 記号 | 意味 | 料理ブログでの例 |
|---|---|---|
* |
任意の文字列。ただし「/」は跨がない(同じフォルダ内だけ) | recipes/*.md = recipes 直下の md だけ。サブフォルダは見ない |
** |
任意の階層下まで全部 | recipes/**/*.md = recipes 配下の全階層の md |
? |
任意の1文字 | recipe-?.md = recipe-1.md、recipe-a.md など |
{a,b} |
a または b(複数指定) | **/*.{jpg,png,webp} = 画像ファイル全種 |
[abc] |
a、b、c のいずれか1文字 | recipe-[12].md = recipe-1.md または recipe-2.md |
料理ブログでの実用例3つ。
- レシピ記事の md 全部:
content/recipes/**/*.md - 画像ファイル全部(jpg・png・webp):
static/images/**/*.{jpg,png,webp} - 2025年に書いた分だけ:
content/recipes/2025/**/*.md
料理ブログでの使いどころ3シナリオ
シナリオ1: レシピ記事の本数を数えたい
「いま何本のレシピを書いた?」と Claude に聞くと、内部で content/recipes/**/*.md を Glob で取って、返ってきた件数を答えてくれます。
料理ブログ運営の月次振り返りで「今月は8本書いた」を確定させたい時に効く。私が手で数える作業が消えます。
シナリオ2: 古い画像をまとめて差し替えたい
「static/images/ 配下の jpg を全部 webp に置き換えたい」みたいな大改修の前段で、まず Glob で対象ファイル一覧を取る。
「30本ある」が確定してから、Claude に「この30本をどう処理するか」を相談する流れになります。いきなり処理を頼むと、想定より多くて時間とトークンを溶かす事故が起きる。
シナリオ3: 過去記事の中から特定ジャンルだけ抜き出したい
「煮込み料理だけまとめページを作りたい」みたいな時、まず content/recipes/**/nikomi-*.md でファイル名にジャンル接頭辞が付いた記事を拾う。
frontmatter のタグで分類してる場合は Glob だけでは無理で、Grep と併用する流れになります。Glob で .md を絞って、その中身を Grep で「tag: 煮込み」検索する2段構え。
初心者が踏みやすい落とし穴
*と**の違いを混同する。recipes/*.mdはサブフォルダを見ないので、recipes/2025/oden.mdは拾えない。階層をまたぎたいなら必ず**- Glob は中身を見ない。「煮込み」というキーワードが入った記事を探したいのに Glob を使ってしまう失敗が多い。それは Grep の仕事
- 絶対パスで書こうとする。Glob のパターンは原則カレントディレクトリからの相対パス。
/home/me/cooking-blog/...から書き始めると意図通りに動かない場合がある - 大文字小文字を取り違える。
*.MDと*.mdはマッチング上で別物として扱われる場面がある(OS による)。料理ブログのファイル名は小文字で統一しておくのが安全 - node_modules や .git 配下まで拾ってしまう。
**/*.mdをプロジェクトのてっぺんから走らせると、依存パッケージの中の README まで全部出てくる。基本はcontent/recipes/**のように対象フォルダを絞る - 結果が大量に返ってきてトークンを溶かす。1000件超えるリポジトリで雑に
**/*を投げると、出力で会話の容量を圧迫する。最初は対象フォルダを狭めて様子を見るのが安全
関連するコマンド・ツールへの動線
- Grep(グレップ) - ファイルの中身を文字列・正規表現で検索するツール。Glob で絞った後に中身を見たい時はこれ
- Read(リード) - Glob で見つけたファイルを実際に開いて中身を読む時の次の一手
- Edit(エディット) - Glob で見つけたファイルを書き換える時に使う
- Write(ライト) - 新しいファイルを作る時に使う。Glob と組み合わせて「既存記事を見ながら新規記事を作る」流れになる
- Bash(バッシュ) - Glob では絞れない条件(更新日時・サイズなど)が必要な時に
findを呼ぶ - /init(イニット) - 料理ブログを Claude Code 管理に乗せる初日に叩く準備コマンド
- /memory(メモリ) - プロジェクトの覚え書き
CLAUDE.mdを編集する - CLAUDE.md(クロードエムディー) - プロジェクト全体の決まりを Claude に教えておくファイル
- Agents(エージェンツ) - 専門タスクを別人格に切り出す仕組み
- /clear(クリア) - 会話履歴を完全リセット
- /compact(コンパクト) - 会話履歴を要約圧縮
- Skills(スキルズ) - 再利用可能な作業手順を登録する仕組み
- Hooks(フックス) - ツール実行前後に自動処理を挟む仕組み
- MCP(エムシーピー) - 外部サービスを Claude Code に繋ぐ拡張プロトコル
参考リンク
書き方
Globツールは私が直接タイプするコマンドではなく、Claudeが内部で呼び出す。私はClaudeに自然言語で「content/recipes配下のmdファイルを全部出して」と頼めばよい。Claude側でパターン(例: content/recipes/**/*.md)を組み立ててGlobを実行する。
やってみるとこうなる
入力
ユーザーから: レシピ記事のmdファイルを全部リストアップして。content/recipes配下にある。
Claude内部の呼び出し: Glob(pattern: "content/recipes/**/*.md")
出力例
● Glob(pattern: "content/recipes/**/*.md")
⎿ Found 4 files
/home/me/cooking-blog/content/recipes/nikujaga.md
/home/me/cooking-blog/content/recipes/curry.md
/home/me/cooking-blog/content/recipes/2025/miso-soup.md
/home/me/cooking-blog/content/recipes/2025/oden.md
このページに出てきた言葉
- glob
- ファイル名のパターンをワイルドカード記号(<code>*</code>や<code>?</code>など)で指定して、当てはまるファイルを一括で拾い出す書き方。Unix系で何十年も使われている古典的な記法
- ワイルドカード
- 「ここには何が入ってもいい」を表す記号。<code>*</code>は任意の文字列、<code>?</code>は任意の1文字
- find
- Unix系OSに標準で入っている、ファイルを条件で探すコマンド。Globと似た働きをするが、ファイル名以外(更新日時・サイズなど)でも絞れる代わりに書き方が複雑
- 絶対パス
- ファイルの場所を「/home/me/cooking-blog/...」のようにパソコンのてっぺんから書き下した住所表記
- 相対パス
- いま居るフォルダから見た相対的な住所表記。先頭にスラッシュが無い書き方
- カレントディレクトリ
- いま作業しているフォルダ。Claude Codeを起動した時の場所が起点になる
- Hugo
- 静的サイトジェネレーター(HTMLを書き出してそのまま公開するタイプのブログ作成用ツール)の1つ。料理ブログ・技術ブログでよく使われる
- frontmatter
- mdファイルの先頭に書く、タイトル・日付・タグなどの属性情報。<code>---</code>で挟まれたYAMLやTOMLのブロック
- kebab-case
- 単語を小文字+ハイフンで繋ぐ命名スタイル。<code>miso-soup.md</code>のように書く