git worktreeを使わずにClaude Codeで並列開発する方法(container-use)
Dagger製のMCPツール「container-use」を使って、ディレクトリ構造を汚さずにClaude Codeで並列開発を実現する方法
暇だったのと、昔GhostBSDをインストールしたものの使い方がわからずやめた記憶があり、今ならAIに聞けるのでいろいろ楽しいかと思い、再挑戦してみた。
bootable USBを作って起動するだけ。 ここからISOファイルをダウンロードしてbootable usbを作成する。 Linuxで作成したが書き込むデバイスを間違えると死ぬので注意。
lsblk # 書き込むデバイスを確認sudo dd if=GhostBSD-25.02-R14.3p2.iso of=/dev/sda bs=4M status=progress oflag=sync起動! 結構イケメンだな。 しかもデフォルトのshellがfishでなんか新しいな。 BSDって古いイメージだったから思ってたのと全然違った。

デスクトップからマウスでごにょごにょいじるのはめんどいので、sshで接続できるようにして普段遣いのPCからshellにアクセスできるようにする。
(この記事のスクショとかはわざわざデスクトップで取っている。かっこいいから)
sshdの設定自体はLinuxと同じだが、ポートが開いているかの確認は sockstat を使う。
sudo service sshd startsockstat -l # Linuxのss -tln的なやつsystemctl enable sshd的なやつは /etc/rc.confを編集することで実現できる。
sshd_enable="YES"以下で起動しているか確認
sudo service sshd statussudo service -e | grep sshd #enableか確認sshdを起動してもfirewallがすべてblockしているので解放が必要だった。
GhostBSDはfirewallに ipfw というのを使っている。
sudo ipfw add 150 allow tcp from any to me 22 # 一時的にアクセス可能に。再起動したら消える永続化するには /etc/rc.conf に以下を追加する。
起動時に rc.conf が展開されて ipfw の設定を自動で生成して適用するらしい。
firewall_myservices="22/tcp"firewall_allowservices="<IP>"これでSSHでアクセスできて作業がやりやすくなった。
ノートPCにインストールしたため、蓋を閉じるとsshdが止まることがあった。 以下でノートPCの蓋を閉じたときにsuspendしないようにした。
gsettings set org.mate.power-manager button-lid-battery "'nothing'"gsettings set org.mate.power-manager button-lid-ac "'nothing'"蓋を閉じたら画面をロックするようにdevdを設定。
cat <<EOF | tee /usr/local/sbin/lid-desktop.sh#!/bin/shsleep 1if [ "$(sysctl -n dev.acpi_lid.0.state)" = "0" ]; then logger -t lid-desktop "Lid closed, locking screen" su - kohei -c "DISPLAY=:0 mate-screensaver-command -l"fiEOF
chmod +x /usr/local/sbin/lid-desktop.sh
sudo tee /usr/local/etc/devd/lid-desktop.conf << 'EOF'notify 10 { match "system" "ACPI"; match "subsystem" "Lid"; match "notify" "0x00"; action "/usr/local/sbin/lid-desktop.sh";};EOFsudo service devd restartここまででかなり使いやすくなった。 MATEデスクトップのことはよく知らないので、もっといい設定方法があるかもしれないがとりあえず動くようになった。 デスクトップをいじったりするのは今後やっていこうと思う。
適当にlinuxで使えるコマンドを試していたところ、
df -h を実行したときにこの出力で驚いた。447GBのファイルシステムが大量にある。
こんな大量に447GBのディスクがあるのはありえないが、なんか容量が増えた感じがして嬉しい!

これはZFSというLinuxではライセンス的にマージされていないファイルシステムらしい。
(ZFSのCDDLとLinuxのGPLがライセンス的に矛盾するらしい)
Linuxでよく使われているext4と比較して以下のような特徴がある。
| 項目 | ext4 | ZFS |
|---|---|---|
| 種別 | ファイルシステムのみ | ファイルシステム+ボリュームマネージャ |
| 書き込み方式 | 上書き(ジャーナリング) | コピーオンライト |
| データ破損検出 | 不可 | チェックサムで検出・自動修復 |
| スナップショット | 非対応 | ネイティブ対応 |
| RAID | 別途mdadm等が必要 | 内蔵 |
| 圧縮 | 非対応 | 対応 |
| メモリ消費 | 少ない | 多い |
ファイルシステムをzfsとzpoolという2つのコマンドだけで操作できて、スナップショットやRAID機能があるなんてすごい!
とりあえずスナップショットを試してみた。
sudo zfs snapshot zroot/home@before-test # snapshot作成sudo zfs list -t snapshot # 確認sudo zfs rollback zroot/home@before-test # ロールバック!
すげぇ。まじで復元されとるやんけ。。。。
BSDのナイスな機能としてjailというのがあるらしい。
Dockerなどのコンテナ技術の元になったやつで、自分で tar を展開したりするのが面倒だが、kernelだけの機能で実現されているのでdockerdなどが不要。
まあ、podmanで対応できるのかもしれないけど。。。。
ちょっとやってみる。
### ベースシステム作成mkdir -p /jail/testjailfetch https://download.freebsd.org/releases/amd64/14.0-RELEASE/base.txztar -xf base.txz -C /jail/testjail
### DNS情報コピーcp /etc/resolv.conf /jail/testjail/etc/
### 設定作成cat <<EOF | tee /etc/jail.conftestjail { host.hostname = "testjail"; ip4.addr = "192.168.1.100"; path = "/jail/testjail"; mount.devfs; exec.start = "/bin/sh /etc/rc"; exec.stop = "/bin/sh /etc/rc.shutdown";}EOF
### 起動service jail onestart testjail
### jail内のshell起動jexec testjail /bin/sh
### 停止service jail onestop testjail
Dockerやな。。。 やってみたけどコンテナにアクセスが簡単にできるので隔離されている感は薄い。 あと、設定もややめんどい。 (bastilleというツールで簡単に作れるらしいのでまた試そうとおもう。)Dockerfileって便利だなと思った。
pkg install neovimでもnvim 0.11.6が入ったし、デフォルトのshellがfishだったりと新しいパッケージに対応している印象。Ubuntuとかよりも新しいかも。/etc/rc.conf 。
Linuxはカーネルとデバイスドライバだけが管理されてるのでユーザー空間はいろいろなパッケージの寄せ集めっぽいけど、ユーザー空間のパッケージも管理されているBSDだからこその使い心地なのかな。Dagger製のMCPツール「container-use」を使って、ディレクトリ構造を汚さずにClaude Codeで並列開発を実現する方法
rsyncがない環境やsudoが必要なファイル転送で使える、tar + sshパイプによるストリーミング転送の実践テクニック
Unix パイプラインを関数合成として捉え、map/filter/foldの基本部品でログ解析やデータ処理を行う方法