コンテンツにスキップ

ターミナル・マルチプレクサ (tmux/screen) vs Docker 比較ガイド

📁 docs/dev-environment/artifact/20260429_224351_tmux_vs_docker_comparison.md

本ドキュメントでは、AIエージェント(Antigravity/Claude)などの長時間を要するタスクをバックグラウンドで実行・管理する際の、tmux/screenDocker の違いについてまとめます。

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 -fdocker attach を使いますが、TUIツールの表示が崩れることがあります。

④ リソース消費

  • tmux/screen: 非常に軽量です。ターミナルのテキスト情報を保持するだけなので、CPUやメモリをほとんど消費しません。
  • Docker: コンテナエンジンを起動するため、tmuxに比べるとリソース(特にメモリ)を消費します。

3. 使い分けの基準

tmux / screen が向いているケース

  • ローカル開発の自動化: agent_issue_executor.py のように、ローカルのソースコードを書き換え、ローカルの認証情報でプッシュする場合。
  • 一時的な長時間タスク: 数時間で終わるスクリプトを動かしっぱなしにして、時々進捗を覗きたい場合。
  • TUIツールの使用: claudehtop のようなインタラクティブな画面を維持したい場合。

Docker が向いているケース

  • 定常的なサービス: 24時間365日稼働させるサーバーやWebアプリ(n8n, データベースなど)。
  • 環境を汚したくない場合: 特定の古いPythonバージョンが必要なプロジェクトなど、ホストOSに依存関係を入れたくない場合。
  • 配布・共有: 誰のPCでも、サーバー上でも同じように動かしたいプログラム。

4. コンテキスト管理のベストプラクティス(重要)

tmux でエージェントを運用する際、最も注意すべきは 「コンテキスト(記憶)の肥大化」 です。

デメリットとしての側面

  • コスト増: やり取りが長引くと、1回のリクエストで送信するトークン量が増え、利用料金が高くなります。
  • 精度の低下: 全く関係のない過去のログがコンテキストに残っていると、エージェントの判断が鈍ることがあります。

推奨される運用

  • イシューごとにリセット: 全く別のタスクに移る際は、言葉で指示するのではなく、一度エージェントを終了(Exit)してプロセスを再起動してください。
  • 自動化の活用: 今回作成した agent_issue_executor.py のように、タスクごとにプロセスを立ち上げる設計にすることで、常にクリーンなコンテキストで作業させることが可能です。

5. エージェント開発における推奨構成

現在の MyLab 環境でのエージェント活用においては、以下の構成を推奨します。

  1. 対話型・開発タスク (Claude/Antigravity):
    • tmux を推奨
    • 理由: あなたの Git 権限でコードを修正し、進捗をリアルタイムに確認・介入できるため。
  2. 非同期監視タスク (Background Worker):
    • Docker を検討
    • 理由: Issueのラベルを10分おきに見るだけのような、UIを必要としない「常駐プログラム」にはDockerの安定性が適しているため。

付録:tmux クイックリファレンス

操作 コマンド / ショートカット
tmuxの起動 tmux
セッションから離脱 (Detach) Ctrl + b を押してから d
セッションに戻る (Attach) tmux a
セッションを終了 exit または Ctrl + d
ウィンドウ分割(縦) Ctrl + b を押してから %
ウィンドウ分割(横) Ctrl + b を押してから "