まくろぐ
更新: / 作成:

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 の設定ファイルを共有できます。

関連記事

更新: / 作成:

Claude Code では、よく使うプロンプトを独自のスラッシュコマンドとして定義しておくことができます。 ここでは、/m-en/m-ja というスラッシュコマンドを定義して、英語と日本語の翻訳機として使う方法を紹介します。

☝️ m- というプレフィックス 個人的なコマンドを定義するときは、いつも m- というプレフィックスを付けるようにしています。 こうすると、m- とタイプするだけで、自分で定義したコマンドを一覧表示できるので便利です。 みなさんは、このようなプレフィックスを付けずに、/en/ja という名前でスラッシュコマンドを定義しても大丈夫です。

スラッシュコマンドは、下記のようにホームディレクトリ以下に .md ファイルを作成することで定義できます。 この例では英語で記述していますが、日本語で記述しても大丈夫です。

~/.claude/commands/m-en.md(英語への翻訳)
---
description: Translate text to English
---

Please translate the following text to English with natural, appropriate English expressions:

```
$ARGUMENTS
```

### Output Rules

- If the input argument is one or two words, please display the following:
  - Three English translation results (English word or phrase) with english pronunciation (e.g. hello /həˈloʊ/)
  - Three usage examples in the text in order of frequency, with Japanese translations
- If the input argument is a phrase or sentence, please display the following:
  - If the input text contains unnatural Japanese, provide a corrected version with natural Japanese expressions
  - Three English translation results (English sentences)
  - Three usage examples in the text in order of frequency, with Japanese translations

Please display responses simply without Markdown formatting.
Please don't display unnecessary messages at the beginning and end.
~/.claude/commands/m-ja.md(日本語への翻訳)
---
description: Translate text to Japanese
---

Please translate the following text to Japanese with natural, appropriate Japanese expressions:

```
$ARGUMENTS
```

### Output Rules

- If the input argument is one or two words, please display the following:
  - English pronunciation (e.g. hello /həˈloʊ/)
  - The word in Japanese
  - Three example sentences in order of frequency, with Japanese translations
- If the input argument is a phrase or sentence, please display the following:
  - If the input text contains unnatural English, provide a corrected version with natural English expressions
  - Japanese translation of the phrase or sentence

Please display responses simply without Markdown formatting.
Please don't display unnecessary messages at the beginning and end.

それぞれ使用例などを表示するように指示しているため少々長くなっていますが、もっと簡単に「$ARGUMENTS を英語に翻訳してください」のような内容だけでも OK です。 自分の用途に会うように調整してください。

これらのスラッシュコマンドは、Claude Code の中から次のような感じで使用します。

> /m-en 延期する

⏺ 延期する

  1. postpone /poʊstˈpoʊn/
  2. delay /dɪˈleɪ/
  3. defer /dɪˈfɜr/

  Usage Examples:

  1. We need to postpone the meeting until next week.
  来週まで会議を延期する必要があります。
  2. The flight was delayed due to bad weather.
  悪天候のため、フライトが延期されました。
  3. I'll have to defer my vacation plans.
  休暇の計画を延期しなければなりません。

> /m-ja withdraw

⏺ withdraw /wɪðˈdrɔ/

  撤退する、引き出す、取り下げる

  1. I need to withdraw money from the ATM.
  ATMからお金を引き出す必要があります。
  2. The company decided to withdraw from the market.
  その会社は市場から撤退することを決めました。
  3. He had to withdraw his application due to personal reasons.
  個人的な理由で彼は申請を取り下げなければなりませんでした。

いちいち Claude Code を起動してからスラッシュコマンドを実行するのが面倒な場合は、claude コマンドを実行するときに -p (--print) オプションで直接スラッシュコマンドを渡せば、単発のコマンドとして実行できます。

辞書スラッシュコマンドの使用例
$ claude -p "/m-en 延期する"    # 英語への翻訳
$ claude -p "/m-ja withdrawk"   # 日本語への翻訳

さらに、上記コマンドのエイリアスなどを定義しておけば、もっと簡単に起動できるようになります。 例えば、macOS や Linux で zsh を使っている場合は、次のように m-en 関数と m-ja 関数を定義できます。

~/.zshrc
m-en() { claude -p "/m-en $*" }
m-ja() { claude -p "/m-ja $*" }

Windows の PowerShell を使っている場合は、notepad $profile などで設定ファイルを開いて、下記のような感じで Function を定義します。 ちなみに、$input | で標準入力を扱えるようにし、$($args) で全ての引数をスペースで結合して渡すようにしています。

PowerShell プロファイル
Function m-en { $input | claude -p "/m-en $($args)" }
Function m-ja { $input | claude -p "/m-ja $($args)" }

これで、ターミナルから直接 m-enm-ja と入力するだけで、翻訳できるようになります。

使用例
$ m-en 延期する   # 英語への翻訳
$ m-ja withdraw   # 日本語への翻訳

標準入力も扱えるので、下記のように他のコマンドの出力をパイプでつなげて翻訳することができます。

標準入力を翻訳する
$ echo "To be or not to be, that is the question." | m-ja
**English:** To be or not to be, that is the question.
**Japanese:** 生きるべきか死ぬべきか、それが問題だ。

This is a famous quote from Shakespeare's Hamlet. The Japanese translation
captures the philosophical meaning of contemplating existence versus non-existence.

便利っ ٩(๑❛ᴗ❛๑)۶

メニュー

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