🗂️

worktreeごとにworkspaceファイル作る運用

に公開

worktreeごとにworkspaceファイル作る運用

結論:リポジトリごとにworkspaceファイルを作ることにした

worktreeとworkspaceの相性問題で試行錯誤した結果、結局リポジトリごとに似たようなworkspaceファイルを作る運用に落ち着いた。

私のworkspace構成

基本的に以下の構成にしてる:

  • メインのリポジトリ(今作業してるやつ)
  • 参照したいリポジトリ
    • バックエンドのコード
    • モバイルアプリのコード
    • 兄弟プロダクトのコード
    • ドキュメントリポジトリ

こうすることで、メインで開発しながら他のコードをサッと参照できる。

なぜworkspaceを使うのか(Claude Codeでの活用)

Claude Codeを使うとき、関連するリポジトリをコンテキストとして参照させたい場面がよくある:

  • 関連性はあるけどリポジトリが分かれてる(BEとかモバイルとか)
  • 関係ないけど参照に使いたい / 蓄積したいナレッジ系のリポジトリ
  • 別文脈だけど似たような実装してるから参考にしたいやつ

workspaceでまとめておけば、Claude Codeが必要に応じて参照してくれるから便利。

作業の始め方

Git Worktree Manager拡張機能を使って、以下の流れで作業を開始してる:

  1. 「作業するリポジトリのworktree」を選択
  2. なかったらClaude Codeにお願いして作ってもらう

便利だけど、課題もある:

  • 「作業ブランチを思い出す」みたいな人間依存の部分がある
  • でもPRも立ってるから、まあ仕方ないかなって感じ

Claude Codeとの連携

個人的なナレッジ管理として、Claude Codeに以下の指示を出してる:

  • 本体のコードで作業しつつ
  • 汎用的なナレッジとして貯めたいものはナレッジリポジトリに書く

これで開発しながら知見を整理できて便利。

実際のworkspaceファイルの例

こんな感じで構成してる:

{
  "folders": [
    // ========== メインプロジェクト ==========
    {
      "name": "🏠 Root",
      "path": "."
    },
    {
      "name": "👷 Frontend A",
      "path": "frontend-a"
    },
    {
      "name": "💼 Frontend B",
      "path": "frontend-b"
    },
    // ========== 関連プロジェクト (参照用) ==========
    {
      "name": "📱 [参照] Mobile App",
      "path": "/Users/username/workspace/mobile-app"
    },
    {
      "name": "🚀 [参照] Backend API (Rails)",
      "path": "/Users/username/workspace/backend-api"
    },
    {
      "name": "🌐 [参照] Sister Product",
      "path": "/Users/username/workspace/sister-product"
    },
    // ========== ドキュメント / 設定 (参照用) ==========
    {
      "name": "📚 [参照] Knowledge Hub",
      "path": "/Users/username/company/knowledge-hub"
    },
    {
      "name": "🤖 [参照] Claude Code Setting",
      "path": "/Users/username/.claude/"
    },
    {
      "name": "📝 [TIL] memo",
      "path": "/Users/username/personal/memo"
    }
  ],
  "settings": {
    "files.exclude": {
      "**/node_modules": true,
      "**/.git": true,
      "**/dist": true
    },
    "search.exclude": {
      "**/node_modules": true,
      "**/dist": true,
      "**/build": true
    },
    "editor.formatOnSave": true,
    "typescript.tsdk": "node_modules/typescript/lib"
  }
}

ポイント:

  • 絵文字でフォルダの役割を分かりやすく
  • [参照]タグで参照用リポジトリを明示
  • 個人のナレッジリポジトリも含めておく

workspaceファイルはコミットする?しない?

この辺は色々意見があると思うけど、個人的にはコミットしてない。

理由:

  • ローカルのパスが含まれてる
  • 人によって参照したいリポジトリが違う
  • 個人的な利用方法を押し付けるものでもない

.gitignoreに追加してる:

*.code-workspace

チームで共有したい場合は、テンプレートとしてworkspace.example.jsonみたいなのを置いておくのもありかも。

まとめ

worktreeとworkspaceの組み合わせは一見相性悪そうだけど、リポジトリごとにworkspaceファイル作る運用にすれば意外と快適。参照用のリポジトリを含めておくのがポイント。

Discussion