シリーズ:スマホからClaude Codeを操る最強環境構築(番外編)
前編・後編を通じて、「Tailscale + Termius + tmux」でスマホからClaude Codeを操作する環境を構築した。
しかし、実際に運用を始めるとすぐに一つの面倒に気づく。毎回tmuxのセッションを手動で作り、プロジェクトごとにウィンドウを開き、一つずつ claude と打ち込むという作業だ。プロジェクトが2つ3つならまだしも、5つを超えてくるとこの手順だけで数分かかる。
本記事では、この起動作業をシェルスクリプト1本に凝縮し、コマンド一発で全プロジェクトにClaude Codeが立ち上がる環境を作る方法を紹介する。
手動起動の何が辛いのか
tmuxで複数プロジェクトを立ち上げる手動手順を書き出してみよう。
tmux new-session -s work -n project-a -c ~/projects/project-a
# → claude と入力して Enter
# → Ctrl+b → c で新しいウィンドウ
cd ~/projects/project-b
# → claude と入力して Enter
# → Ctrl+b → c で新しいウィンドウ
cd ~/projects/project-c
# → claude と入力して Enter
# ...以下、プロジェクトの数だけ繰り返し
プロジェクトが増えるたびにこの手順が伸びていく。何より、毎朝PCの前で(あるいは外出先のスマホから)この儀式を繰り返すのは、まったくもって非生産的だ。
一括起動スクリプトの全体像
以下が、筆者が実際に使っている起動スクリプトだ。
#!/bin/bash
SESSION="work"
# 既にセッションがあればアタッチして終了
tmux has-session -t $SESSION 2>/dev/null && exec tmux attach -t $SESSION
# プロジェクト一覧(追加・削除はここだけ編集)
PROJECTS=(
"project-a"
"project-b"
"project-c"
)
BASE="$HOME/projects"
# 最初のプロジェクトでセッション作成
tmux new-session -d -s $SESSION -n "${PROJECTS[0]}" -c "$BASE/${PROJECTS[0]}"
tmux send-keys -t $SESSION "claude" Enter
# 2つ目以降はウィンドウを追加
for project in "${PROJECTS[@]:1}"; do
tmux new-window -t $SESSION -n "$project" -c "$BASE/$project"
tmux send-keys -t $SESSION "claude" Enter
done
tmux attach -t $SESSION
やっていることはシンプルだ。順を追って解説する。
スクリプトの解説
二重起動の防止
tmux has-session -t $SESSION 2>/dev/null && exec tmux attach -t $SESSION
スクリプトの冒頭で、同名のセッションが既に存在するかをチェックしている。もし存在すれば、新しくセッションを作るのではなく、既存のセッションにアタッチして終了する。
これにより、うっかり2回スクリプトを実行しても、セッションが重複して混乱することがない。スマホから接続する際にも、このスクリプトを叩けば「あればアタッチ、なければ新規作成」という一貫した挙動になる。
プロジェクト一覧の定義
PROJECTS=(
"project-a"
"project-b"
"project-c"
)
BASE="$HOME/projects"
起動したいプロジェクトの一覧を配列で定義している。プロジェクトを追加したいときはここに1行足すだけ、不要になったら消すだけだ。スクリプトの他の部分を一切触る必要がない。
BASE には全プロジェクトの親ディレクトリを指定する。~/projects/project-a、~/projects/project-bのように、共通のディレクトリ配下にプロジェクトが並んでいる前提だ。
セッションとウィンドウの作成
# 最初のプロジェクトでセッション作成
tmux new-session -d -s $SESSION -n "${PROJECTS[0]}" -c "$BASE/${PROJECTS[0]}"
tmux send-keys -t $SESSION "claude" Enter
# 2つ目以降はウィンドウを追加
for project in "${PROJECTS[@]:1}"; do
tmux new-window -t $SESSION -n "$project" -c "$BASE/$project"
tmux send-keys -t $SESSION "claude" Enter
done
ここがスクリプトの核心部分だ。
最初のプロジェクトは tmux new-session でセッションごと作成する。-d はバックグラウンドで作成するオプション、-n はウィンドウ名、-c は作業ディレクトリの指定だ。
2つ目以降は for ループで tmux new-window を回し、ウィンドウを1つずつ追加していく。各ウィンドウの中で tmux send-keys を使って claude コマンドを自動入力している。
アタッチ
tmux attach -t $SESSION
最後に、作成したセッションにアタッチして、ターミナルの操作権をtmuxに渡す。ここで初めて画面にtmuxのUIが表示される。
セットアップ手順
1. スクリプトを作成する
vi ~/projects/start-work.sh
上記のスクリプト全文を貼り付けて保存する。PROJECTS 配列の中身は自分のプロジェクト名に書き換えてほしい。
2. 実行権限を付与する
chmod +x ~/projects/start-work.sh
3. 起動する
~/projects/start-work.sh
これだけで、定義した全プロジェクトのウィンドウが作られ、それぞれでClaude Codeが起動した状態のtmuxセッションが立ち上がる。
起動後の操作
スクリプト実行後の画面では、tmuxのステータスバー(画面上部または下部)に全プロジェクトがタブとして並んでいる。
[work] 0:project-a 1:project-b 2:project-c*
* が付いているのが現在表示中のタブだ。
| 操作 | キー |
|---|---|
| 次のタブへ | Ctrl+b → n |
| 前のタブへ | Ctrl+b → p |
| 番号で直接ジャンプ | Ctrl+b → 0 / 1 / 2… |
ここで重要な注意点がある。tmuxの Ctrl+b は**「同時に押して離す → 次のキーを単独で押す」**という2段階操作だ。Ctrl+b+n の3キー同時押しではないので気をつけてほしい。
スマホからの接続
スマホのTermiusからSSH接続した後の操作は2パターンだ。
セッションがまだない場合(PCで未起動):
~/projects/start-work.sh
セッションが既にある場合(PCで起動済み):
tmux attach -t work
どちらの場合でも、実はスクリプトを実行するだけでいい。セッションが存在すればアタッチ、なければ新規作成という分岐が冒頭で処理されているからだ。
つまり、PCでもスマホでも**「とりあえず start-work.sh を叩く」**だけで正しい状態になる。
応用:プロジェクトの自動検出
プロジェクトが頻繁に増減する場合、配列を手動で管理するのが面倒に感じるかもしれない。その場合は、ディレクトリを自動検出する方式にも変更できる。
# 手動リストの代わりに
PROJECTS=($(ls -d $BASE/*/ | xargs -n1 basename))
ただし、この方式には注意点がある。~/projects 配下のすべてのディレクトリに対してClaude Codeが起動するため、一時的なフォルダや不要なプロジェクトにも無差別にセッションが作られてしまう。Claude Codeのサブスクリプションは同時セッション数に余裕があるとはいえ、意図しないプロジェクトでAIが動き出すのは避けたい。
筆者としては、起動対象を明示的にリストで管理する最初の方式を推奨する。数行のメンテナンスで済むし、「今日はこの3プロジェクトだけ回す」といった柔軟な調整もしやすい。
まとめ
本記事で作成した起動スクリプトの効果を整理しよう。
| Before(手動) | After(スクリプト) |
|---|---|
| プロジェクトごとにウィンドウ作成 | 1コマンドで全ウィンドウ作成 |
毎回 cd → claude を繰り返す | 自動で各ディレクトリに移動+起動 |
| 二重起動でセッション混乱のリスク | 既存セッションがあればアタッチ |
| PCとスマホで起動手順が異なる | どちらも start-work.sh を叩くだけ |
たった20行ほどのスクリプトだが、毎日の起動儀式がなくなるだけで、開発のリズムが格段によくなる。前編・後編で構築した「Tailscale + Termius + tmux」環境と組み合わせれば、自宅でもスマホでも、コマンド一発で即座にAI開発体制に入れる。
ぜひ自分のプロジェクト構成に合わせてカスタマイズして使ってみてほしい。
シリーズ一覧
- [前編] 外出先のスマホからClaude Codeを操る!Slack連携より「SSH+ターミナル」を選ぶべき理由
- [後編] スマホが最強のAI開発機に!Tailscale + tmuxで作るClaude Codeのモバイル多重起動
- [番外編] 1コマンドで全プロジェクトにClaude Codeを起動!tmux一括起動スクリプトの作り方 ← 本記事