ターミナル・マルチプレクサ (tmux/screen) vs Docker 比較ガイド¶
📁 docs/dev-environment/artifact/20260429_224351_tmux_vs_docker_comparison.md
本ドキュメントでは、AIエージェント(Antigravity/Claude)などの長時間を要するタスクをバックグラウンドで実行・管理する際の、tmux/screen と Docker の違いについてまとめます。
1. 概要比較¶
| 項目 | tmux / screen | Docker |
|---|---|---|
| 分類 | ターミナル・マルチプレクサ | コンテナ仮想化プラットフォーム |
| 主な目的 | セッションの維持・複数ウィンドウ管理 | 実行環境の標準化・分離・ポータビリティ |
| 動作環境 | ホストOS上で直接動作 | ホストOS上の隔離された「コンテナ」内で動作 |
| 永続性 | ターミナルを閉じてもプロセスが存続 | コンテナを停止しない限りプロセスが存続 |
| 学習コスト | 低(数個のショートカットのみ) | 中〜高(Dockerfile/Composeの知識が必要) |
2. 重要な4つの違い¶
① 実行環境 (Environment)¶
- tmux/screen: あなたの現在の開発環境(Mac)でそのまま動きます。インストール済みのライブラリやパスがそのまま使えます。
- Docker: OS(Linuxなど)から再構築されたクリーンな環境で動きます。依存関係がすべてパッケージ化されているため、他のPCでも全く同じように動きます。
② 認証と権限 (Auth & Permissions)¶
- tmux/screen: ホストOSの認証情報を引き継ぎます。
gitのSSH鍵やgh(GitHub CLI) のログイン状態がそのまま有効です。 - Docker: コンテナは独立しているため、そのままではホストの鍵やトークンにアクセスできません。環境変数やマウント設定で明示的に渡す必要があります。
③ インタラクティブ性 (UI/UX)¶
- tmux/screen: 実行中の画面を「そのまま」保存します。
claudeのような豪華なUIを持つツールを表示したままデタッチ(非表示)し、後で全く同じ画面に戻って状況を確認できます。また、再アタッチ時にスクロールバック(過去の出力履歴)がすべて保持されているため、エージェントが過去に何をしたかという「コンテキスト」を失わずに作業を継続できます。 - Docker: 基本的にバックグラウンド実行が得意です。実行中の画面をリアルタイムで見るには
docker logs -fやdocker attachを使いますが、TUIツールの表示が崩れることがあります。
④ リソース消費¶
- tmux/screen: 非常に軽量です。ターミナルのテキスト情報を保持するだけなので、CPUやメモリをほとんど消費しません。
- Docker: コンテナエンジンを起動するため、tmuxに比べるとリソース(特にメモリ)を消費します。
3. 使い分けの基準¶
tmux / screen が向いているケース¶
- ローカル開発の自動化:
agent_issue_executor.pyのように、ローカルのソースコードを書き換え、ローカルの認証情報でプッシュする場合。 - 一時的な長時間タスク: 数時間で終わるスクリプトを動かしっぱなしにして、時々進捗を覗きたい場合。
- TUIツールの使用:
claudeやhtopのようなインタラクティブな画面を維持したい場合。
Docker が向いているケース¶
- 定常的なサービス: 24時間365日稼働させるサーバーやWebアプリ(n8n, データベースなど)。
- 環境を汚したくない場合: 特定の古いPythonバージョンが必要なプロジェクトなど、ホストOSに依存関係を入れたくない場合。
- 配布・共有: 誰のPCでも、サーバー上でも同じように動かしたいプログラム。
4. コンテキスト管理のベストプラクティス(重要)¶
tmux でエージェントを運用する際、最も注意すべきは 「コンテキスト(記憶)の肥大化」 です。
デメリットとしての側面¶
- コスト増: やり取りが長引くと、1回のリクエストで送信するトークン量が増え、利用料金が高くなります。
- 精度の低下: 全く関係のない過去のログがコンテキストに残っていると、エージェントの判断が鈍ることがあります。
推奨される運用¶
- イシューごとにリセット: 全く別のタスクに移る際は、言葉で指示するのではなく、一度エージェントを終了(Exit)してプロセスを再起動してください。
- 自動化の活用: 今回作成した
agent_issue_executor.pyのように、タスクごとにプロセスを立ち上げる設計にすることで、常にクリーンなコンテキストで作業させることが可能です。
5. エージェント開発における推奨構成¶
現在の MyLab 環境でのエージェント活用においては、以下の構成を推奨します。
- 対話型・開発タスク (Claude/Antigravity):
tmuxを推奨。- 理由: あなたの Git 権限でコードを修正し、進捗をリアルタイムに確認・介入できるため。
- 非同期監視タスク (Background Worker):
Dockerを検討。- 理由: Issueのラベルを10分おきに見るだけのような、UIを必要としない「常駐プログラム」にはDockerの安定性が適しているため。
付録:tmux クイックリファレンス¶
| 操作 | コマンド / ショートカット |
|---|---|
| tmuxの起動 | tmux |
| セッションから離脱 (Detach) | Ctrl + b を押してから d |
| セッションに戻る (Attach) | tmux a |
| セッションを終了 | exit または Ctrl + d |
| ウィンドウ分割(縦) | Ctrl + b を押してから % |
| ウィンドウ分割(横) | Ctrl + b を押してから " |