まくろぐ
更新: / 作成:

超高速なテキスト検索コマンド rg (ripgrep) にはずっとお世話になっていますが、ちょっと凝った検索をしようとしたときに、オプションを忘れてしまうことが多いので、チートシートの形でまとめておきます。

Ripgrep チートシート

  • rg TODO
    • カレントディレクトリ以下ですべての「TODO」を検索します。
  • rg "^def add"
    • 行頭が def add で始まる行を検索します(デフォルトで正規表現とみなされます)。
  • rg -F "* + *"
    • 検索文字列を正規表現として解釈せず、そのままの文字列として検索します。上記の例では、* + * という文字列を検索します。
  • rg -i TODO
    • 大文字・小文字を区別せずに「TODO」を検索します。
  • rg -w TODO
    • 単語単位で「TODO」を検索します。例えば TODOSMYTODO はマッチしません(安心してください、TODO: にはマッチします)。
  • rg -C2 TODO
    • マッチした行の前後 2 行も一緒に表示します(-A2 -B2 と指定するのと同様)。
  • rg -c TODO
    • 各ファイルごとにマッチした行数のみを表示します。
  • rg TODO src/main
    • src/main ディレクトリ以下(あるいは同名のファイル)で「TODO」を検索します。 ディレクトリであることを明示したい場合は、末尾にスラッシュを付けます(src/main/)。
  • rg -t py TODO
    • Python ファイル(拡張子 .py)のみを検索対象にします。
    • ここで指定するタイプは拡張子ではなくファイルタイプです。指定できるファイルタイプの一覧は rg --type-list で確認できます。
    • 逆に、特定のファイルタイプを除外したい場合は -T py のように大文字の -T を使います。
    • 例えば、ファイルタイプとして minified: *.min.css, *.min.html, *.min.js が定義されているので、-T minified と指定すると min 系のファイルを除外できます。
  • rg -g "*.{js,ts}" TODO
    • glob パターンで指定したファイルのみを検索対象にします。引数がシェルによって展開されないように、必ずクォートで囲みます。
    • 大文字小文字を区別せずにマッチさせたい場合は、-g の代わりに --iglob を使います。
    • glob パターンの例:
      • -g "*.{js.ts}" … 拡張子が .js または .ts のファイル
      • --iglob "*test* … ファイル名に testTest を含むファイル
      • -g "**/game/**/*.py" … 任意の階層の game ディレクトリ以下の .py ファイル
      • -g "**/game/*.py" … 任意の階層の game ディレクトリ直下の .py ファイル
      • -g "/.*" … この階層のドットファイル
  • rg --hidden TODO
    • 隠しファイル・隠しディレクトリも検索対象に含めます。
    • ただし、ドットファイルだけを検索したい場合は、-g ".*" のように glob パターンを使う方がよいです。
  • rg --no-ignore TODO
    • .gitignore.ignore$HOME/.rgignore などで無視されているファイル・ディレクトリも検索対象に含めます。

どのファイルが検索対象になっているかを調べる

--files オプションを使うと、実際にどのファイルが検索対象になっているかを確認できます。 試行錯誤しながら検索条件を調整したいときに便利です。

  • rg --files
  • rg --files -t js
  • rg --files -t js src/
  • rg --files --hidden
  • rg --files -g "/.*"

具体的な使用例

src ディレクトリ以下で TODO を検索
$ rg -i -w TODO src/

関連記事

更新: / 作成:

Claude Code を使っていく中で、効率的な活用方法がいろいろと見えてきたので、そのノウハウをまとめてみました。 Claude Code と効率的に共同作業するためのコツです。

Claude Code を使い始めた頃は、「指示を出す → 作業が終わるまで見守る → 新しい指示を出す」というパターンで使っていました。 しかし、この方法だと自分がツールを操作しているだけで、結局ずっと画面に張り付いていなければなりません。 Claude Code をもっと有効活用するには、人に仕事を依頼する感覚 で使うのがコツだと気づきました。 以下のような機能を知っていると、単なる壁打ちから脱却した本格的な共同作業 ができるようになります。

  • 作業中に割り込んで方向性を修正する(ESC 割り込み)
  • 最初に詳細なプランを立ててもらう(Shift + TAB で Plan mode へ)
  • 作業が終わったら通知してもらう(hooks)
  • Claude Code と並行してリポジトリ内で別の作業をする(git worktree など)

作業中に割り込む (ESC)

/p/qj9wydo/img-matta.png

ESC キーによる「待った」 機能はとても重要です。 Claude Code に複雑な作業を任せていると、途中で「あ、やっぱりこうしてほしい」と思うことがよくあります。 例えば、ビルド構成を最適化してもらっているときに、Claude が想定外のファイルまで解析しようとしていることに気づいたとします。 そんなときは ESC キーを押して作業に割り込み、「そのファイルは対象外です」と教えてあげましょう。

/p/qj9wydo/img-interrupt-1.png
図: ESC で割り込み指示

すると、新しい方針に従って作業を続けてくれます。 Claude が考えている最中だけでなく、Claude から追加の情報を求められたとき(ユーザーからの入力待ちのとき)にも割り込みできます。 間違った方向に進んでいることに気づいたら、すぐに ESC キーで割り込めば、トークンも時間も無駄になりません。

先に詳細なプランを立ててもらう (Plan mode)

仕事で部下や協力会社の人に複雑な作業をお願いするときは、いきなり作業を始めてもらうのではなく、まず「作業プラン」を立ててもらって確認しますよね。 Claude Code でも同じように、最初に詳細なプランを立ててもらい、それを確認してから作業してもらうと手戻りが少なくなります。 Claude Code はデフォルトだといきなり作業を始めてしまうので、Shift + TAB キーを2回押してPlan mode に切り替えます。

/p/qj9wydo/img-plan-mode-1.png
図: plan mode へ切り替え

入力エリアの下に plan mode on と表示されていることを確認してください。 この状態で、やってもらいたいことを指示すると、最初に詳細なプランを立ててくれます。

/p/qj9wydo/img-plan-mode-2.png
図: 詳細なプランを立ててもらう

提示されたプランでよければ、そのまま作業を開始してもらえばOKです。 少し修正したいところがあれば、先ほど説明した ESC キーで割り込んで修正指示を出します。 ここでは、難しいオプション機能は必要ないことを伝えてみましょう。

/p/qj9wydo/img-plan-mode-3.png
図: プランの修正指示

そうすると、次のような感じで修正されたプランを提示してくれます。

/p/qj9wydo/img-plan-mode-4.png
図: 修正された実装プラン

プランを立てずにいきなりコードを作成してもらう方法もありますが、複雑な作業の場合は、できあがったコードをレビューするより実装プランをレビューする方がずっと楽です。 全体のプランに納得できたら、安心して作業を任せられます。

作業が終わったら知らせてもらう (hooks)

Claude Code に時間のかかる作業を依頼した後は、その間に別の作業を進めたいですよね。 メールの返信や机上の書類整理など、他にもやるべきことは山積みだからです。 このような並行作業を行う場合、Claude Code 側の処理が完了したタイミングで通知を受け取れると非常に便利です。

幸い、Claude Code には hooks という仕組みがあり、Claude Code が入力待ちになったときや作業が完了したタイミングで、任意のコマンドを実行できます。 ここでは、以下のように通知してもらうよう設定します。

  • Claude Code が入力待ちになったときに「Waiting」と音声で知らせる (OS の通知も表示)
  • Claude Code の作業が完了したときに「Completed」と音声で知らせる (OS の通知も表示)

OS ごとにコマンドを書き分けるのは面倒なので、めもらばさんccnoti というツールを使わせてもらいました。 Node.js がインストールされている環境なら、npx コマンドだけで実行できます。 Claude Codeの設定ファイル(~/.claude/settings.json)で以下のように設定するだけで OK です。

~/.claude/settings.json
{
  // ...
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "npx ccnoti@0.2.0 -v -d -m Waiting"
          }
        ]
      }
    ],
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "npx ccnoti@0.2.0 -v -d -m Completed"
          }
        ]
      }
    ]
  }
}

これで、Claude Code の作業が完了したときに通知してもらえるようになります。 ちょうど同僚から「作業が終わったよ」と声をかけてもらうような感覚ですね。

Claude Code と並行してリポジトリ内で別の作業をする

開発対象のアプリケーションに実装すべき機能が多数ある場合、効率的な開発を進めるために並行して作業したくなります。 例えば、Claude Code に一つの機能を任せている間に、自分は別の機能を実装するといったアプローチです。 あるいは、複数の Claude Code インスタンスを同時に起動して、異なる作業を並行して進めたい場合もあるでしょう。 このように同じコードベースで異なる作業を並行して行う場合、作業内容が競合しないよう注意が必要です。

例えば、Git リポジトリに関する作業なら、git worktree コマンドが便利です。 通常、Git でチェックアウトできるブランチは1つだけですが、git worktree を使うと、別のブランチを別の作業ディレクトリにチェックアウトして並行作業できます。

次の例では、myproject プロジェクト内で feature1 ブランチを作成し、そのブランチ用の作業ディレクトリを ../myproject-feature1 として作成しています。

feature1 ブランチと作業ディレクトリを作成する
$ cd myproject
$ git worktree add ../myproject-feature1 -b feature1

これで、myprojectmyproject-feature1 の 2 つのディレクトリで、別々のブランチに対する作業を並行して行えるようになります。

その他

以下の内容は AI ツールの進化により将来変わる可能性がありますが、現時点で有効な方法として簡潔にまとめておきます。

LLM が苦手な定型作業は MCP 化しておく

例えば「ランダムな ID を生成して」みたいな依頼をすると、Claude Code は毎回シェルスクリプトや Python スクリプトを作ろうとします。 これはトークンの無駄遣いですし、余計なコード確認の手間も増えてしまいます。 同様の処理を頻繁に行う場合は、独自の MCP サーバーを作ってツールとして提供 してしまうのがおすすめです。 Python の fastmcp ライブラリを使えば、関数を定義するくらいの感覚で MCP サーバーを簡単に作れます。

main.py
#!/usr/bin/env python3
"""
MCP Maku Tools - A Model Context Protocol server with useful tools
"""

import random

from fastmcp import FastMCP


def create_server() -> FastMCP:
    """MCPサーバーを生成します"""
    server = FastMCP("mcp-maku-tools")

    @server.tool()
    def generate_random_id(length: int = 7) -> str:
        """指定された文字数のランダムID生成ツールです

        Args:
            length: 生成するIDの長さ(デフォルト: 7)

        Returns:
            生成されたランダムID
        """
        chars = "23456789abcdefghijkmnopqrstuvwxyz"
        return "".join(random.choice(chars) for _ in range(length))

    return server


if __name__ == "__main__":
    # MCPサーバーを起動
    mcp = create_server()
    mcp.run(transport="stdio")
~/.claude.json
{
  // ...
  "mcpServers": {
    "mcp-maku-tools": {
      "type": "stdio",
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/Users/maku/gitwork/maku77/mcp-maku-tools",
        "main.py"
      ],
      "env": {}
    }
  },
  // ...
}

自分用の MCP サーバーを 1 つ作ってしまえば、あとはそこに関数を追加していくだけで Claude Code から使えるツールが増えていきます。 MCP サーバー自体をたくさん作る必要はありません。

複数の解決方法を提案してもらう

Claude Code は一つの解決方法しか提示しないことが多く、それをそのまま受け入れてしまいがちです。 でも、他にもっと良い方法があるかもしれません。 ある問題を解決するためのコードを作成してもらうときに、以下のように 複数のアプローチを提示してもらうよう指示 してみてください。

複数の解決方法を提案してください。

テストにパスするまで修正を繰り返してとお願いする

Claude Code がコードを一発で完璧に書けることは稀です。 テストコードも一緒に作成してもらい、テストにパスするまで 修正を繰り返してもらうよう指示 します。

テストコードも一緒に作成し、テストにパスするまで修正を繰り返してください。

簡単なテストに関しては、多くの場合、成功するまで修正を繰り返してくれるようになりましたが、途中で諦めてしまうような作業があったら、明示的に繰り返し修正するようお願いするのが効果的です。

think harder で深く考えてもらう

Claude Code の隠しコマンド (正確には Sonnet モデルの機能) に think hardthink harder というものがあります。 プロンプト内にこれらの文字列を含めておくと、より深く考えてもらえるようになるので、ここぞというときに使ってみてください。 カスタムスラッシュコマンドでも使えます (例: /maku:analyze-project think harder)。

汎用的なカスタムスラッシュコマンドは GitHub で管理する

プロジェクト内の Claude 関連ファイルは Git リポジトリなどでバージョン管理するのが基本ですが、ユーザーディレクトリ以下に配置した汎用的なカスタムスラッシュコマンド (~/.claude/commands/*.md) も GitHub リポジトリで管理 するようにしましょう。 PC 故障などで紛失するのを防げますし、複数の PC やユーザー間で共有したい場合にも便利です。 以下のページでは、Windows のジャンクション機能や、macOS/Linux のシンボリックリンクを使って、Git リポジトリや Dropbox と連携する方法を紹介しています。

(2025年8月)Claude Code の新しい仕組みとして、~/.claude/plugins/ ディレクトリを使って、GitHub リポジトリと自動連携する機能が検討されているようです。

関連記事

更新: / 作成:

何をするか?

プロジェクトに依存しない汎用的な Claude Code カスタムスラッシュコマンドは、~/.claude/commands ディレクトリ以下に *.md ファイルを作成することで定義できます。 よく使うプロンプトをカスタムコマンドとして登録しておくと、どのディレクトリからでも呼び出せるのでとても便利です。 ただし、これらの設定ファイルはユーザーのホームディレクトリ以下で管理されるため、複数の PC で同じ設定を使いたい場合は、通常は手動でコピーする必要があります。

ここでは、Windows のジャンクションや macOS/Linux のシンボリックリンク を使って、~/.claude 以下のディレクトリを GitHub や Dropbox で管理しているディレクトリにリンクさせる方法を説明します。 こうすることで、複数の PC で Claude Code の設定を簡単に共有できるようになります。 この方法は、特にチームメンバーと汎用的なカスタムコマンドを共有したい場合に便利です。

共有する Claude Code の設定ファイルを用意する

Claude Code の設定ファイルを claude-config という Git リポジトリで管理することにします(もっと手軽に Dropbox などで管理してもよいです)。 まず、テスト用に下記のような hello.md カスタムコマンドを用意します。

~/gitwork/claude-config/commands/hello.md
---
description: 簡単な挨拶コマンド
---

「てすと、てすと」とだけ出力してください。

このカスタムコマンドを複数の PC で共有できるようにします。

~/.claude 以下からリンクする

上記で作成した Claude Code 用の設定ファイル(カスタムコマンド)を、各 PC の ~/.claude/commands 以下からリンクします。 .md ファイルを 1 つずつリンクしていくのは大変なので、ディレクトリ単位でリンクしてしまうのがよいです。 ここでは、~/.claude/commands/maku というディレクトリを、~/gitwork/claude-config/commands ディレクトリにリンクすることにします。 maku という名前は適当に付けましたが、ここは任意の名前でよいです。 例えば、チーム名やプロジェクト名などにしておくと分かりやすいと思います。

Windows の場合

Windows の場合は mklink /J コマンドを使ってディレクトリジャンクションを作成します。 シンボリックリンクを作る機能もありますが、そちらは管理者権限が必要だったりするので、ここではジャンクションを使います。 mklink はコマンドプロンプト用のコマンドなので、PowerShell から実行する場合は、次のように cmd /c 経由で実行します。

Windows (PowerShell) でディレクトリのリンクを作成
cmd /c mklink /J "$HOME\.claude\commands\maku" "$HOME\gitwork\claude-config\commands"

ディレクトリジャンクションを消したいときは、単純にエクスプローラー上で見えているフォルダ (~/.claude/commands/maku) を削除するだけで OK です。

macOS/Linux の場合

macOS や Linux の場合は ln -s コマンドを使ってディレクトリのシンボリックリンクを作成します。

macOS/Linux でディレクトリのリンクを作成
ln -s ~/gitwork/claude-config/commands ~/.claude/commands/maku

これで、~/gitwork/claude-config/commands/hello.md というファイルが、~/.claude/commands/maku/hello.md として見えるようになります。

テスト

上記のリンク作業を終えると、~/.claude/commands/maku/hello.md というスラッシュコマンドを参照できる状態になっています。 今回は maku/hello.md というパスとして見えているので、Claude Code からは /maku:hello という形でコマンドを起動します。

Claude Code からのカスタムコマンド実行
> /maku:hello

● てすと、てすと

うまく動きました! ٩(๑❛ᴗ❛๑)۶ わーぃ

新しいカスタムコマンドを作成したいときは、Git リポジトリで管理している ~/gitwork/claude-config/commands ディレクトリ以下に .md ファイルを追加していけば OK です。 このようにすれば、GitHub や Dropbox で簡単に Claude Code の設定ファイルを共有できます。

関連記事

メニュー

まくろぐ
サイトマップまくへのメッセージ