Minion について
Minion は、AI エージェントがアプリやウェブサイトを操作するための軽量 Linux デスクトップを提供します。Docker、Podman、または Linux 上で独立したセッションを動かし、画面をテキストと安定したコントロール ID に変換します。
主な機能
- 01分離されたデスクトップセッションの作成
- 02画面のコントロールとテキストの可読化
- 03CLI、MCP、HTTP、SDK による操作
- 04操作の一括実行やデスクトップ内でのコード実行
- 05操作の記録と再生スクリプトの出力
- 06オフィス、開発、研究向けプロファイル
活用シーン
- 01エージェントによるブラウザーでの情報調査
- 02オフィスソフトの操作とファイル保存
- 03複数のデスクトップタスクの並列実行
- 04サインイン時のデスクトップ操作の引き継ぎ
MCP 対応
Minion はローカルまたはリモートの MCP を提供し、対応クライアントにデスクトップの作成、観察、操作機能を公開します。CLI、HTTP、SDK、Agent Skill からも利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
9掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| tag | string | いいえ | snapshot/restore 用のスナップショットタグ。 |
| name | string | いいえ | create/fork:新しいデスクトップの名前(任意)。 |
| size | string | いいえ | create の画面サイズ:1280x800(デフォルト)、1024x768(低コスト)。 |
| count | integer | いいえ | create:作成するデスクトップの数(並行作業用)。デフォルトは 1。 |
| login | string | いいえ | create:人間が保存したサインイン情報を使い、サインイン済みの状態で起動します。 |
| action | enum | はい | create | list | profiles | remove | freeze | thaw | fork | snapshot | restore | replay | macro | info | logins |
| desktop | string | いいえ | デスクトップ名(デフォルトは最後に作成または使用したもの)。 |
| profile | string | いいえ | create に使用するプロファイル(デフォルトは browser)。 |
詳細
すべての AI エージェントに専用のコンピューターを。
あらゆるエージェントが使える、軽量な Linux デスクトップ(オフィス、開発、調査、ブラウザー、データ、Windows アプリ)です。
Claude、ChatGPT、Gemini、Cursor、VS Code、LangChain、ご自身のコード、またはノート PC 上で動作するモデルに対応しています。
エージェントは画面をテキストとして読み取り、まとめて、またはコードで操作し、あらゆるプログラムやウェブサイトを利用できます。
English · 簡体字中国語 · 繁体字中国語 · 韓国語 · 日本語 · ヘブライ語
## はじめに必要なのは Docker(または OrbStack か Podman)だけです。次のいずれかを選んでください。
1. AI アプリでワンクリック:
Claude Code の場合:claude plugin marketplace add apophisss/minion && claude plugin install minion@minion。それ以外の MCP
クライアントの場合:uvx minion-desktop mcp または npx -y minion-desktop mcp。ボタン、uvx、npx は
uv を使って Minion を起動します(npx は代わりに pipx を使用できます)。Claude Desktop 拡張機能には、ほかに必要なものはありません。
2. Minion をインストールし、コンピューター上のすべての AI アプリ(Claude Desktop、Claude Code、 Cursor、VS Code、Windsurf/Devin、Gemini CLI、Codex、LM Studio、Cline、Kiro)に接続するワンライナー:
curl -fsSL https://raw.githubusercontent.com/apophisss/minion/main/install.sh | sh # macOS, Linux
irm https://raw.githubusercontent.com/apophisss/minion/main/install.ps1 | iex # Windows
最後に minion setup が実行され、Docker を確認してデスクトップを準備し、minion connect を実行します。どちらもいつでも再実行できます。
3. ブラウザーで ChatGPT、Claude.ai、Le Chat から: minion share を実行し、表示された URL をアプリのコネクター設定に貼り付けます(方法)。
あとは、次のように依頼するだけです。「オフィス用デスクトップを作成し、Writer で第 3 四半期の数値について 1 ページの概要を書いて、brief.docx として保存してください。」 すべてのインストール方法はdocs/install.mdにあります。
▶ 1 分間のデモを見る:エージェントが Wikipedia で旅行先を調べ、グラフ付きの予算を作成し、計画を PDF として作成します。ツール呼び出しは 12 回、テキストは 2,372 トークンです。同じ手順をスクリーンショット付きで行うと、約 36,855 トークンが必要になります。エージェントが行う呼び出しを実行する python scripts/demo_video.py を使って、実際の操作を録画しています。
Minion の特長
- 🖥️ あらゆるプログラム、あらゆるウェブサイトに対応。 すべてのデスクトップは、本物の Linux コンピューターです。ブラウザー、LibreOffice、IDE、ターミナル、ファイルダイアログ、インストーラーに加え、
windows(Wine)プロファイルを使えば Windows プログラムも利用できます。名前を指定するだけで、あらゆるアプリを開けます。 アプリは初回起動時にインストールされます(open gimp、open vscode、open dbeaver、任意の Debian パッケージ)。ウェブアプリはブラウザーで開きます(open gmail)。初回起動時には、そのアプリの使い方のヒントもいくつか表示されます。名前で開ける 130 種類以上のアプリ。 - 🧭 あらゆるアプリで使えるショートカット。
see --menusはキーボードショートカット付きですべてのメニューコマンドを一覧表示し、menu "File > Export as PDF"はメニューを開かずにコマンドを実行します。path ~/out.pdfはあらゆる開く/保存ダイアログに入力します。右クリックメニューはseeに表示され、button:Saveで特定の種類のコントロールを選択でき、画面の下に隠れたボタンはスクロールして表示されます。あらゆるドキュメントをテキストとして読み取れます(read report.docx、数式付きの xlsx、pptx、pdf)。1 回の呼び出しで変換もできます(convert report.docx pdf)。 - 🧠 エージェントは画面をテキストとして読み取ります。
seeはあらゆるウィンドウを、安定した@ids付きのコントロール一覧に変換します。ID はアクセシビリティツリーから取得し、必要に応じて OCR を代わりに使用します。例:@12 button "Save" (210,62)。ウェブページ、エディター(行番号付き)、ターミナル、選択肢付きのドロップダウン、スプレッドシート(行ごとに「row 2: A2 North · B2 120」の形式)もすべて正確なテキストとして出力されます。ピクセル情報が必要な場合は、スクリーンショットに@idsを描画できます。 - 🎯 確実な操作。 すべての操作で画面が落ち着くまで待機し(ウェブページの読み込み中や、アプリに「Loading…」と表示されている間も待機します)、結果を報告します。報告内容には、ウィンドウ、ページのアラートやプロンプト、保存またはダウンロードしたファイル、クリックを受け取ったポップアップが含まれます。テキストで指定した対象は、実際に画面上に表示されている必要があります。見つからない場合は別の対象をクリックせず、最も近い候補を示して失敗します。AI エージェントが実行する日常的な 93 のタスクでテスト済みです。
- 🪙 トークンの節約を重視した設計。 再読み込みの代わりに差分を取得できます(
see(changes=true):約 900 トークンではなく約 80 トークン)。コードモードでは 50 ステップの GUI ループを 1 回の呼び出しで実行でき、切り抜きや縮小表示のスクリーンショットで画像コストを削減できます。また、コンパクトモードではツール定義を約 3,300 トークンから 450 トークンに削減し、Agent Skill は使用されるまで約 100 トークンしか消費しません。 - 🪶 軽量設計。 デスクトップごとに小さなコンテナーを 1 つ使用します(Xvfb、2 プロセスのウィンドウマネージャーとタスクバー、小型エージェント)。VNC もデスクトップ環境も不要です。デスクトップは約 1.5 秒で準備でき、アイドル時の使用メモリは約 60 MB です。アイドル状態のデスクトップは自動的にフリーズして CPU 使用率 0%になり、約 0.2 秒で再開します。
- 🔌 あらゆるエージェントで動作。 MCP(ローカルまたはリモート)、OpenAI、Anthropic、Gemini、ローカルモデル向けの関数呼び出し、OpenAPI 対応の HTTP、シェルエージェント向けの CLI と Agent Skill、Python と TypeScript の SDK、さらにClaude、OpenAI、Gemini のコンピューター操作向けネイティブアダプターで、どこでも同じツールセットを利用できます。
- ⚡ 並列処理を前提とした設計。
create count=8でワーカーごとにデスクトップを起動でき、forkでリスクのある手順の前にデスクトップを複製でき、セッションによってエージェント同士を分離できます。 - 🙋 人間も操作に参加できます。 ブラウザー上のライブビューからワンクリックで操作を引き継げるほか、ファイルを双方向に転送(画面にドロップ)したり、クリップボードを共有したりできます。エージェントは「サインインしてください」のように操作を引き継いで、完了を待つことができます。一度手動でサインインすると、新しいデスクトップもサインイン済みの状態で起動します。
- 🎞️ 一度教えれば、何度でも再生。 すべての操作が記録されます。HTML タイムラインや GIF としてエクスポートできるほか、セッションをモデルを一切使わずに再生する Python スクリプトに変換できます。
- 📦 依存関係ゼロ。 ホスト側は Python 標準ライブラリのみで動作します。デスクトップは Docker または Podman(macOS、Windows、Linux)で実行するか、Linux 上でネイティブに実行できます。
シェルから手軽に試す
ターミナルを使えるエージェント(Claude Code、Codex CLI、Aider、Open Interpreter、Goose)は、CLIを直接使えます。minion skill --install を実行すると、その使い方をエージェントに教えられます。
minion up research
minion open en.wikipedia.org # waits until the page has loaded
minion fill "Search Wikipedia" "Ada Lovelace" && minion key Return
minion wait-for "Analytical Engine" # says where it saw the text
minion see --full # read the article as text
minion select @14 "Title" # pick a dropdown option
minion shot -o page.png --marks # a screenshot with @ids drawn on it
minion read ~/Downloads/paper.pdf # any document as text: pdf, docx, xlsx, pptx, epub...
minion open gimp # any app by name: installed the first time
minion menu "File > Export As > Export as PDF..." # any menu command
minion path ~/Documents/report.pdf # fill the open Save/Open dialog
minion cp :~/Documents/notes.md . # copy files out (and in)

メニュー、ファイルダイアログ、アプリ名を指定して操作します。menu "File > Export As > Export Directly as PDF"、path ~/Documents/report.pdf、続いてopen gimpを実行すると、GIMPが16秒でインストールされます。フライトレコーダーで記録しました。
あらゆるエージェントに対応
| エージェント | 接続方法 |
|---|---|
| Claude Desktop/Code、Cursor、VS Code、Codex、Gemini CLI、opencode、OpenClaw、Windsurf/Devin、LM Studio、Kiro、Goose | ワンクリック、minion connect、またはuvx minion-desktop mcp(インストール) |
| エージェントフレームワーク:OpenAI Agents SDK、LangChain/LangGraph、LlamaIndex、CrewAI、smolagents、Pydantic AI、Google ADK、AutoGen | 同じMCP サーバー(動作確認済みのレシピ) |
| ChatGPT、Claude.ai、Le Chat(ウェブアプリ) | minion share:HTTPS経由のリモートMCP(ドキュメント) |
| 関数呼び出しに対応するあらゆるモデル(OpenAI、Anthropic、Gemini、Mistral、Ollama/vLLM経由のローカルモデル) | Toolkit().definitions("openai" | "anthropic" | "gemini") + Toolkit().run_calls()(ドキュメント) |
| HTTPを扱えるあらゆるもの(n8n、Dify、GPT Actions、あらゆる言語) | minion serve → /api/tools/*、/mcp、/openapi.json(ドキュメント) |
| シェルエージェント | minion CLI(ドキュメント)とそのAgent Skill(minion skill --install) |
| Python / TypeScriptコード | from minion import Desktop(ドキュメント) · clients/typescript |
| ネイティブのコンピューター操作モデル | Claudeツールセット(ドキュメント) · OpenAIおよびGeminiのコンピューター操作(ドキュメント) |
「anthropic」、「gemini」、「openai-responses」も同じ方法で使える、あらゆるOpenAI互換モデルを使った完全なエージェント:
from openai import OpenAI
from minion.tools import Toolkit
tk = Toolkit()
client = OpenAI() # or OpenAI(base_url="http://localhost:11434/v1", api_key="ollama") for a local model
messages = [{"role": "user", "content": "On a research desktop, find the population of Iceland on Wikipedia."}]
while True:
msg = (
client.chat.completions.create(model="YOUR-MODEL", messages=messages, tools=tk.definitions("openai"))
.choices[0]
.message
)
messages.append(msg)
if not msg.tool_calls:
break
messages += tk.run_calls(msg.tool_calls) # runs every call, returns the messages to send back
print(msg.content)
Pythonとコードモード
from minion import Desktop
with Desktop.create("office", keep=False) as desk: # removed when the block ends
desk.open("calc")
result = desk.script("""
for item, price in [("Coffee", 3.5), ("Bagel", 2.25), ("Juice", 4)]:
write(f"{item}\\t{price}\\n") # Tab moves right, Return goes down
write("Total\\t=SUM(B1:B3)\\n")
print(cells()["B4"]) # visible cells as {"A1": ...}
""")
print(result.stdout) # 9.75
desk.key("ctrl+s")
desk.fill("Name", "q3.xlsx")
desk.key("Return")
desk.wait_for("q3.xlsx")
desk.download("~/Documents/q3.xlsx", ".")
script はデスクトップ内でPythonを実行し、click · write · key · scroll · fill · see · elements · cells · wait_for · launch · runを使えます。ループは1回の呼び出しで実行され、返されるのはコードが出力した内容だけです。Desktop APIには、screenshot · see · act · open · run · upload · download · clipboard · windows · freeze · fork · snapshot · restore · recording · create_manyも用意されています。docs/python.mdをご覧ください。
ネイティブのコンピューター操作(Claude、OpenAI、Gemini)
Minionは各ベンダーのコンピューター操作モデルにすぐ使える環境を提供し、スクリーンショットのスケーリングと座標のマッピングも自動で処理します。
import anthropic
from minion import Desktop
from minion.integrations.anthropic import MinionComputer, allow_all
desk = Desktop.create("office")
with MinionComputer(desk, confirm=allow_all) as computer: # the desktop is the sandbox
runner = anthropic.Anthropic().beta.messages.tool_runner(
model="claude-opus-5-5",
max_tokens=16000,
tools=[computer],
messages=[{"role": "user", "content": "Make a 3-slide deck about otters in Impress."}],
)
for message in runner:
print(message)
Claudeのcomputer_toolset_20260801(全17アクション)と旧バージョンのcomputer_20251124については、docs/computer-use.mdをご覧ください。OpenAIとGeminiのコンピューター操作については、docs/computer-use-openai-gemini.mdをご覧ください。
プロファイル
| プロファイル | 内容 | ダウンロード | アイドル時の RAM |
|---|---|---|---|
🌐 browser | uBlock Origin(広告、トラッカー、Cookie バナー、ニュースレターのポップアップ)を導入した Firefox。ダウンロード先は ~/Downloads。ターミナルの see で読み取り可能 | 363 MB | ~55–100 MB |
📄 office | LibreOffice Writer、Calc、Impress + テキストエディター + ファイルマネージャー + Firefox + PDF ツール。デフォルトで Microsoft 形式で保存し、エージェントから送信された内容をそのまま入力します(オートコレクトなし) | 526 MB | ~85 MB |
🛠️ dev | git、Python、Node.js、ビルドツール、Geany IDE、実際のターミナル(see で読み取り可能)、Firefox + Chromium | 714 MB | ~55 MB |
🔎 research | Firefox + pdftotext、pandoc、メモエディター、requests と BeautifulSoup を備えた Python | 422 MB | ~55 MB |
📊 data | office + pandas、NumPy、SciPy、matplotlib、seaborn、openpyxl、SQLite | 674 MB | ~105 MB |
🪟 windows | 64 ビットおよび 32 ビット Windows 用 .exe/.msi プログラムを実行する Wine 10 と、ダウンロード用の Firefox。x86-64 ホスト (ドキュメント) | 717 MB | ~56 MB(プログラムを開くと ~270 MB) |
🧩 base | X サーバー、ウィンドウマネージャー、ターミナル、エージェント。構築の基盤となります | 199 MB | ~65 MB |
独自のプロファイルは、~/.config/minion/profiles/ に置く 5 行の TOML ファイルです。初回使用時に自動で構築されます:
# ~/.config/minion/profiles/designer.toml
extends = "browser"
description = "Firefox plus GIMP and Inkscape."
packages = ["gimp", "inkscape"]
apps = [{ name = "GIMP", command = "gimp" }, { name = "Inkscape", command = "inkscape" }]
または、実行時にソフトウェアを追加します:minion run "minion-install gimp https://example.com/tool.AppImage pip:yt-dlp"。
docs/profiles.md を参照してください。
エージェントによる画面の認識方法
see はエージェントの主な感覚です。LibreOffice のウィンドウでの例を示します:
Screen 1280x800 · 1 window
[1] "Untitled 1 — LibreOffice Writer" — libreoffice-writer (focused) at 0,0 1280x770
UI of "Untitled 1 — LibreOffice Writer" (click/fill with @id; (x,y) is the element center):
@1 menu "File" (22,38)
@2 menu "Edit" (62,38)
…
@12 document text "Untitled 1 - LibreOffice Document" [editable] (603,424)
@13 heading "Q3 Market Brief" (603,247)
@14 paragraph "Prepared by an AI agent on a Minion desktop. No human touched the keyboard." (603,282)
操作後、observe="changes"(または see(changes=true))を指定すると、差分のみが返されます:
✓ typed 30 chars
→ screen changed <1% (region 404,226 236x20)
Changes since your last look 1.0s ago (81 elements unchanged; their @ids still work):
+ @84 paragraph "Quarterly numbers look strong." [focused] (603,234)
~ @80 label "4 words, 30 characters" (281,730)
アクセシビリティ情報から取得できないテキスト(スライドショー、キャンバスアプリ、文字が写った画像、リモート画面、アクセシビリティツリーのないプログラム)は、欠けている部分だけを OCR で読み取ります。読み取りには画面自体の言語を使い、ウィンドウのタイトルやラベルに含まれる文字体系から言語を選びます。ヘブライ語、アラビア語、ロシア語、中国語、日本語、韓国語、ヒンディー語は組み込み済みで、その他の言語は初回使用時にインストールされます。大きな文字や、色付き背景上の明るい文字はそれぞれ専用の処理で読み取ります。また、変化していない画像を二度読み取ることはありません。ヘブライ語で撮影された 24 枚のスライドでは、see は単語の 94% を読み取ります。画像としてスライドを表示するウェブページでの例を示します:
@2 heading "Board meeting, October 15" (640,131)
@3 paragraph "The slides from the quarterly review:" (640,186)
Text in the picture at 0,117 800x480 (OCR: accessibility doesn't have it):
@4 "Q3 review" (146,254)
@5 "Revenue grew 12% to $4.1M" (218,348)
@6 "1,240 new customers, churn down to 2.1%" (291,404)
@7 "Next: launch in Japan and Brazil" (239,460)
@8 "| Goal: $5M in Q4" (163,555)
ピクセル単位の情報が重要な場合、screenshot --marks はすべてのコントロールに @id を付けます:

実測による効率性
PDF レポート、スプレッドシート、Wikipedia の検索、ウェブフォーム、文書の読み取りという実際の 5 つのタスクで、エージェントが Minion を使った場合の消費トークン数は 8,668、スクリーンショットを使った場合は 50,505 で、5.8 倍少なくなりました。 全表と測定方法は
docs/benchmarks.md に記載されています。python scripts/bench_tasks.py で再現できます。
| トークン数 | ||
|---|---|---|
| スクリーンショット 1280×800 | ~1,365 | 基準値 |
screenshot(detail="low") | ~341 | 半分のサイズ |
act(observe="crop")、変更された領域のみ | ~200 | |
LibreOffice ウィンドウの see | ~920 | 正確なテキストとクリック可能な ID |
文章を入力した後の see(changes=true) | ~80 | 安定した ID、差分のみ |
ターミナルの see | ~50–90 | |
ツール定義:9 個のツール/コンパクトな computer | ~3,300/~450 | リクエストごとに送信 |
スプレッドシートへの 5 行の入力:act ×5/script ×1 | 5 回の呼び出し/1 回の呼び出し | 各ステップでモデルとの往復なし |
| リソース | |
|---|---|
| 使用可能になるまで | 1.2–1.8 s(すべてのプロファイル) |
| アイドル時の RAM | デスクトップごとに 54–105 MB(Firefox/LibreOffice は起動時に独自のメモリを追加使用) |
| フリーズ中 | CPU 使用率 0.00%。次の呼び出しで ~0.2 s で復帰 |
| デスクトップ 3 台を並行実行 | 3.0 s |
これらは 2 vCPU の VM で測定しました。python scripts/bench.py で再現できます。
監視、操作の引き継ぎ、操作の返却
minion view(または view ツール)を使うと、ブラウザーで任意のデスクトップをライブ表示できます。Take control をクリックすると、自分のマウスとキーボードで操作できます。エージェントが view(message="Please sign in to your Google account") を呼び出すと、バナーが表示されます。サインインして Done を押すと、エージェントが処理を続けます。Files ではデスクトップからのダウンロードとデスクトップへのアップロード(または画面へのファイルのドロップ)ができ、Copy ではデスクトップのクリップボードの内容を自分の環境に取り込み、Keys ではブラウザーが受け付けるキー(Ctrl+W、Alt+Tab)を送信できます。
一度サインインすれば、サインイン済みのデスクトップを起動できます。minion login github https://github.com/login を実行すると、そのページを開いたデスクトップがライブ表示されます。サインインして Done を押すと、以降は minion up --login github(または desktop(action="create", login="github"))でサインイン済みのデスクトップを起動できます。サインイン情報はお使いのコンピューターの Docker 内に保存されます(詳細)。minion serve を実行すると、ライブサムネイル付きのダッシュボードが表示されます。

仕組み
flowchart LR
subgraph host["Your machine"]
A["Any agent<br/>(MCP, function calling, HTTP, CLI, SDK)"] --> T["minion tools<br/>(pure-stdlib Python)"]
T --> V["Live view and dashboard<br/>(minion serve)"]
end
subgraph desk["Desktop (one container each)"]
S["minion agent<br/>RPC over docker exec"] --> X["Xvfb + JWM"]
S --> AT["AT-SPI<br/>accessibility tree"]
S --> O["Tesseract OCR"]
S --> C["code mode<br/>(Python inside)"]
X --> Apps["Firefox · LibreOffice · Terminal · Wine · …"]
end
T -->|"docker exec (no open ports)"| S
それぞれの選択の理由についてはdocs/design.mdを、内部構造についてはdocs/architecture.mdをご覧ください。
セキュリティ
各デスクトップは、デフォルトではホストのマウントがない非特権コンテナーです。ネットワークアクセスを遮断するには --offline を使い、リソースを制限するには --memory と --cpus を使います。HTTP サーバーは 127.0.0.1 にバインドされ、ランダムなトークンを必要とし、クロスサイトリクエストと DNS リバインディングリクエストを拒否します。お使いのコンピューターとのファイル転送はすべて一つのフォルダー内で行われ、minion share の URL には新しいトークンが付与され、共有を停止すると使えなくなります。デスクトップユーザーにはコンテナー内でパスワードなしの sudo 権限があるため、エージェントはソフトウェアをインストールできます。画面上の内容はすべて信頼できない入力(プロンプトインジェクション)として扱い、人間が引き継がない限り、デスクトップに認証情報を保存しないでください。SECURITY.mdをお読みください。
ドキュメント
ウェブサイト · インストール · アプリの接続 · リモート MCP · 設計 · エージェントと MCP · 連携 · CLI · Python · HTTP API · Claude のコンピューター操作 · OpenAI と Gemini のコンピューター操作 · プロファイル · 名前でアプリを指定 · Windows アプリ · アーキテクチャ · FAQ
貢献
質問やアイデアはディスカッションで、バグはイシューで歓迎しています。Minion の開発に協力するには、初めての方におすすめのイシュー(翻訳、アプリ、エージェントアプリ、ベンチマークタスク)を選び、CONTRIBUTING.mdを読み、ロードマップで今後の予定をご確認ください。
ライセンス
MIT。デスクトップには、それぞれ独自のライセンスに基づくオープンソースソフトウェア(Debian、Firefox、LibreOffice、Wine など)が含まれています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
