1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code用の設定管理CLIツール「ccswitch」を作ってみました

Last updated at Posted at 2025-08-09

前書き

このツールは仕事が終わった金曜日の夜にお風呂に入ってる間に思いついたノリを1日で形にしたものです。
1日でツール作れるClaude Codeすごい!

はじめに

Claude Codeを使った開発で、CLUADE.mdを作成してプロジェクトごとにルールを設定してそれを読ませている方が多いと思います。
しかし、コンテキストが増えてくるとClaude Codeはどんどんアホになっていくことに悩んでいました。
また、色々なルールを設定して試していってもそれがcontextを圧迫する一要因になったりしています。

そこで今回、Git branchを活用してClaude Codeの設定を簡単に切り替えられるCLIツール「ccswitch」をリリースしました。

解決する課題

Claude Codeの~/.claudeディレクトリには、AIの動作を制御する重要な設定ファイルが格納されています:(例: Super Claudeを使用している場合は下記などになるかと思います)

  • CLAUDE.md - プロジェクト固有のAI指示
  • WORKFLOW.md - ワークフロー定義
  • PERSONAS.md - AIペルソナ設定
  • その他のカスタム設定

これらのファイルは全プロジェクトで共有されるため、以下の問題が発生します:

  1. トークン使用量の増加 - 不要な設定が含まれ、コンテキストが肥大化(60-70%の無駄)
  2. 設定の競合 - プロジェクトごとに異なる指示が必要でも切り替えが困難(projects/CLAUDE.mdで多少は切り替えられる)
  3. 管理の煩雑さ - 手動でのファイル書き換えはエラーの元

解決策:Git-based Configuration Management

ccswitchは、~/.claudeディレクトリをGitリポジトリとして管理し、ブランチごとに異なる設定を保存・切り替える仕組みを提供します。

# インストール
npm install -g ccswitch
# または
bun add -g ccswitch

# 初期化
ccswitch init

# 新しい設定ブランチを作成
ccswitch create project/web-app

# 設定を切り替え
ccswitch switch project/web-app

# インタラクティブに選択
ccswitch switch

主な機能

1. 簡単な初期化とセットアップ

$ ccswitch init
✅ Git repository initialized in /Users/username/.claude
✅ Created .gitignore
✅ Initial commit created
✅ Initialization complete!

2. ブランチベースの設定管理

プロジェクトタイプに応じた命名規則をサポート:

  • slim/* - 最小構成(トークン節約重視)
  • project/* - プロジェクト固有の設定
  • client/* - クライアント別の設定
  • persona/* - 特定のAIペルソナ設定
# 最小構成を作成
$ ccswitch create slim/minimal
✅ Branch 'slim/minimal' created
📝 Opening in VS Code...

# プロジェクト用設定を作成
$ ccswitch create project/my-app
✅ Branch 'project/my-app' created

3. インタラクティブな切り替え

$ ccswitch switch
? Select a branch to switch to (Use arrow keys)
> master
  slim/minimal (60% token reduction)
  project/web-app
  project/mobile-app
  client/acme-corp

4. パフォーマンステスト

設定のトークン使用量を測定し、最適化の効果を確認:

$ ccswitch test
Testing configuration: slim/minimal

Token Usage
----------------------------------------
  Estimated tokens: 15,432
  Reduction: 68% from baseline
  
Performance Metrics
----------------------------------------
  Load time: 2ms
  Memory usage: 5.2 MB
  
✅ Configuration is optimized!

5. IDEとの連携

VSCode、Cursor、Zedなど主要なIDEをサポート:

# 現在の設定をIDEで編集
$ ccswitch edit

# 特定のブランチに切り替えて編集
$ ccswitch edit project/web-app

# 新しい設定用ブランチを作成
$ ccswitch create project/new-web-app

6. 自動検出機能(実験的)

プロジェクトタイプを自動検出し、適切な設定を提案:

これは対応するプロジェクトタイプがないと動かないです。

$ ccswitch auto
Analyzing project...
Detected: React + TypeScript project
Suggested branch: project/react-ts
? Switch to 'project/react-ts'? (Y/n)

効果

実際のプロジェクトでの測定結果:

設定タイプ トークン使用量 削減率
デフォルト(master) 51,327,563 -
slim/minimal 15,432 68%
project/specific 23,156 55%

60-70%のトークン削減により、より多くのコンテキストを実際のコードに割り当てることが可能になります。

トークン算出方法

ccswitch testコマンドは、以下の方法でトークン使用量を推定しています:

算出ロジック

  1. ファイルサイズの計測

    • ~/.claudeディレクトリ内の全ファイルをスキャン
    • 各ファイルのバイト数を取得
  2. トークン推定式

    // 基本的な推定式
    estimatedTokens = Math.round(totalBytes / 4);
    
    // より正確な推定(文字エンコーディングを考慮)
    const text = fileContent.toString('utf-8');
    const charCount = text.length;
    const wordCount = text.split(/\s+/).length;
    
    // OpenAI tiktoken相当の推定
    // 英語: 約0.75トークン/単語
    // 日本語: 約2-3トークン/文字
    estimatedTokens = wordCount * 0.75 + jpCharCount * 2.5;
    
  3. 対象ファイル

    • .mdファイル(CLAUDE.md、WORKFLOW.mdなど)
    • .txtファイル
    • その他のテキストベース設定ファイル
    • .gitignoreで除外されたファイルはスキップ

実装例

export async function measureTokens(directory: string) {
  const files = await glob('**/*.{md,txt,json,yml,yaml}', {
    cwd: directory,
    ignore: ['node_modules/**', '.git/**']
  });
  
  let totalSize = 0;
  for (const file of files) {
    const stats = await fs.stat(path.join(directory, file));
    totalSize += stats.size;
  }
  
  // 簡易的なトークン推定(1トークン ≈ 4バイト)
  const estimatedTokens = Math.round(totalSize / 4);
  
  return {
    fileCount: files.length,
    totalSize,
    estimatedTokens
  };
}

技術スタック

  • Runtime: Bun(高速なJavaScript/TypeScriptランタイム)
  • 言語: TypeScript
  • 主要ライブラリ:
    • Commander.js - CLIフレームワーク
    • simple-git - Git操作
    • Inquirer - インタラクティブプロンプト
    • Chalk - ターミナル出力の装飾

インストール要件

  • Node.js 18.0.0以上
  • Git(システムにインストール済み)
  • Bun(オプション、パフォーマンス向上)

リンク


AIのまとめ

ccswitchは、Claude Codeユーザーの生産性を向上させるシンプルながら強力なツールです。Gitの仕組みを活用することで、設定の履歴管理やチーム共有も容易になります。

ぜひ試してみてください!

Quick Start

# Install
npm install -g ccswitch

# Initialize
ccswitch init

# Create minimal configuration
ccswitch create slim/minimal

# Switch configuration
ccswitch switch slim/minimal

# Test performance
ccswitch test

人間のまとめ

今回初めてCLIツールを作ってみようと思って作成しました。
思ったより、npmへの公開等も大変ではなくてよかったです。
仕事でさまざまなCLAUDEの設定を作って壊してを繰り返してるので、ccswitch使用して試行錯誤していきたいと思います!

そして改めて作りたいと思ってからすぐに完成してしまうAIの進歩に驚きました!

この記事は90%くらいClaudeで書きました。(わざとAI臭さ残してます。)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?