Windows 前提のリポジトリを Mac で動かし、herdr でセッションを並べ始めるまで

開発mdx-playground

Windows 前提のリポジトリを Mac で動かし、herdr でセッションを並べ始めるまで

Windows でしか動かしたことのないリポジトリを別の OS へ持っていくと、たいてい何かで転ぶ。 パスの区切りか、改行コードか、ネイティブモジュールのビルドか。 MacBook Pro に mdx-playground をクローンし終えた時点で身構えていたのは、そういう種類の面倒だった。

実際には、転ばなかった。

クローン直後に確かめたこと

まず前提を調べさせた。 Node と pnpm が入っているか、リポジトリ側が要求するバージョンと合っているか、Windows に依存した箇所がないか。 Node v26.5.1 と pnpm 10.10.0 が Homebrew 経由で入っていて、どちらも package.json の指定どおりだった。

あとは 2 コマンドで終わった。

pnpm install
pnpm dev

インストールは通り、dev サーバーが上がり、ブラウザでトップとブログ一覧の描画まで確認できた。 Mac 固有の追加設定はほとんど要らなかった。

準備がよかったというより、このリポジトリが Windows 固有の何かに寄りかかっていなかったということだろう。

学習ゲートを Mac に持ち込むか

動いてしまうと、次に気になるのは逆側だった。 Windows で効かせているものを、こちらでも効かせるのかどうか。

筆頭が学習ゲートだった。 コミットのたびに /learn を走らせ、クイズに答えるまでコミットを通さない pre-commit フックである。 Windows では全リポジトリに効かせている。

Mac では有効にしなくていい、と思っていた。 ただ、この Mac でもコミットはする。 ゲートを入れないままコミットできるのか、それとも毎回 LEARN_SKIP を付けて回避する運用になるのか。 そこだけ先に確かめたかった。

確認させたら、この Mac ではゲートがそもそも発動しないという答えだった。 スキップの指定すら要らない。

.env はどのリポジトリのものだったか

もうひとつ引っかかっていたのが .env だった。 何に使う予定のものだったか、自分で決めたはずなのに思い出せない。 1Password から書き出して .gitignore で守る運用にしておいてほしい、とだけ添えて調べさせた。

調べさせると、このリポジトリのものではなかった。 参照先は隣に置いてある turso-replicas のほうだった。 そちらは既にクローン済みで、1Password の正本と完全に一致した状態で配置されていた。

やることは何も残っていなかった。

ターミナルだけで足りるか

ここまでの作業は全部ターミナルで済んだ。 済んだのだが、ときどきコードをまとめて眺めたくなる。 VS Code を開くのか、tmux のようなものを挟むのか、以前どこかで検討した記憶がある。

しかもその検討には、Windows では使えないが Mac なら使えるという条件付きのものが混ざっていたはずだった。 mdx-playground の過去記事を掘り返してもらった。

候補のツール名で記事を横断検索させ、ヒットした記事を一件ずつ当たらせた。 残ったのが tmux と herdr で、両方インストールした。 tmux 3.7b、herdr 0.7.5 の安定版。 どちらも起動までは確認できた。

herdr は複数の Claude Code セッションを並べて管理するためのもので、今回の狙いはほぼこちらだった。

統合フックを自分で入れる

herdr には Claude Code との統合コマンドがある。 これだけは権限ブロックに引っかかって実行できなかったので、自分でターミナルに打った。

herdr integration install claude

フックが ~/.claude/hooks/ に入り、settings.json が整えられたという 2 行が返ってきた。

自分の設定ファイルに何かが書き込まれたので、Windows へ入れたときと同じ観点で検証させた。 追加されたのは SessionStart フック 1 件だけか。 herdr のペインの外でセッションを開いたときに悪さをしないか。 どちらも問題なしだった。

ついでに、Windows から同期されてきた設定の名残が 2 件見つかった。

どこで起動するのが正しいのか

入れたはいいが、今度は起動する場所が分からない。 コマンドを打ったディレクトリがそのまま「対象ディレクトリ」になるのだろうか。 だとすると、複数セッションを束ねる道具なのだから、リポジトリの中ではなく親ディレクトリで起動したほうがいいのではないか。

仕様を確認させたら、起動場所は対象を決めないという答えだった。 対象は中で作るワークスペースやタブごとに決まる。 どこで起動しても構わないし、迷うなら親ディレクトリで起動しておけば潰しが利く。

立ち上げてから手が止まった

そして起動した。 左にサイドバー、真ん中に大きなペインが 1 枚。 それだけだった。

何をどう使えばいいのか、まるで分からなかった。 この中で Claude を立ち上げるのか、それとも herdr 側に別の入口があるのか。

聞いたら、前者だった。 真ん中のペインはただのシェルなので、リポジトリに cd して claude と打つ。 必要なのはそれだけで、herdr の仕事はその先にある。 並んだ Claude のうちどれが入力待ちかを左のサイドバーで見張る。

複数セッションの立て方

期待していたのは、そこではなかった。 セッションを立ち上げる段階に何か仕掛けがあると思っていた。

答えはもっと素朴だった。 ペインを増やして、それぞれで claude と打つ。 ペイン 1 枚が Claude 1 セッションに対応する。 立ち上げ専用の機能があるわけではない。

拍子抜けはしたものの、サイドバーの説明とは噛み合う。 セッションを増やす仕組みを持つのではなく、増やしたセッションのうちどれが待っているかを表示する。 それが herdr の受け持ちということになる。

道具は入り、使い方も分かった。 残っているのは、何枚まで並べると自分が追えなくなるのかという問題だ。 これは仕様を読んでも出てこない。 実際に並べて回してみるまで決まらない。