Fossil Mcp について
Fossil Mcpは、AIを使ったコーディング向けの静的解析ツールで、コマンドラインとMCPサーバーの両方で利用できます。呼び出しグラフを構築し、16言語のデッドコード、重複ロジック、足場コードを検出します。
主な機能
- 01到達不能コードと未使用エクスポートの検出
- 02完全・改名・構造的なクローンの検出
- 03TODO、プレースホルダー、一時ファイルの特定
- 04呼び出しグラフの構築と関数経路の追跡
- 0516言語のコード解析
- 06インクリメンタル更新とCIチェック
活用シーン
- 01AIによるリファクタリング後の未使用関数の整理
- 02ファイルをまたぐ重複実装の特定
- 03関数変更による影響範囲の確認
- 04CIでのコード品質しきい値の検査
MCP 対応
MCPサーバーとして、AIコーディングツールにスキャン、デッドコード・クローン検出、足場コード確認、呼び出しグラフの調査と追跡ツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Fossil MCP
バイブコーディング時代のコード品質ツールキット。
バイブコーディングが残していく乱れ — デッドコード、重複ロジック、足場(スキャフォールディング)の名残、接続されていない関数 — を 16 言語にわたって発見する静的解析。
問題
AI 支援コーディングは問題ありません — コードをレビューし、アーキテクチャを理解し、主導権を保ちます。バイブコーディングは違います。 欲しいものを説明すると AI が書き、あなたはすべての行を読むことなく出荷します。Claude Code、Cursor、GitHub Copilot、Windsurf といったツールは、このワークフローを高速で生産的にします。しかし何日も何週間も経つうちに、バイブコーディングされたプロジェクトには、従来のリンターでは捕捉できない特定の種類の問題が蓄積されます。
デッドコードは急速に積み上がります。 AI が関数をリファクタリングするとき、新しいバージョンを書きますが、古いものを削除するのをしばしば忘れます。diff を 1 行ずつ読んでいないので気づきません。複数のセッションを経て、未使用の関数、到達不能な分岐、孤立したユーティリティが積み上がります — コードベースは成長するのに、何も刈り込まれません。METR の研究では、開発者が AI の出力の確認とデバッグにかなりの時間を費やしていることが分かりました。デッドコードはこれを指数関数的に難しくします。
重複は静かに広がります。 AI の各セッションには限られたコンテキストウィンドウがあります。すでに別の場所に存在するユーティリティ関数を生成したり、同じ問題を 3 つ先のファイルでわずかに異なる実装で解決したりします。機能を依頼し、それが動作するので、次に進みます。従来の重複検出はコピー&ペーストに焦点を当てています — バイブコーディングの重複は構造的です。似たロジック、異なる名前、モジュール全体に散在しています。
// Phase 1、// TODO、// Step 2 — どこにでも。 AI エージェントはフェーズ単位で作業します。一時的なはずだった足場のマーカーを残します。// Phase 1: Setup、// TODO: implement error handling、pass や todo!() を使ったプレースホルダーの関数本体、process_data_v2 のようなフェーズ付きの命名などです。バイブコーディングでは、誰もこれらを片付けに戻りません。それらは恒久的なものになります。
何からも呼ばれない関数が存在します。 これがバイブコーディングの特徴です。AI はヘルパー関数を書き、それを使い、後のセッションで呼び出し側を別のアプローチを使うように書き換えます — しかしヘルパーは残ります。コールグラフがなければ、あなたも AI も、どの関数が実際にコードベースの残りの部分と接続されているかを判断できません。現在の AI コーディングツールは、関数が互いをどう呼び出すかを理解するのではなく、テキスト検索でコードをナビゲートします。
一時ファイルがリポジトリに蓄積します。 AI セッションは temp_、backup_、old_、phase_1_ というファイルやディレクトリを作成します。バイブコーディングでは、各セッションの後にファイルツリーを監査したりしません。これらの成果物はコミットをまたいで残り続けます。
解決策
Fossil MCP は、バイブコーディングされたプロジェクトのために専用に作られた静的解析ツールキットです。AI がコードの大部分を書くときに蓄積される成果物を検出します — そして開発者向けの CLI ツールとしても、AI エージェントに単なるテキスト検索ではなくコードグラフを与える MCP サーバーとしても動作します。
███████╗ ██████╗ ███████╗███████╗██╗██╗ () ()
██╔════╝██╔═══██╗██╔════╝██╔════╝██║██║ \ /
█████╗ ██║ ██║███████╗███████╗██║██║ | |
██╔══╝ ██║ ██║╚════██║╚════██║██║██║ | |
██║ ╚██████╔╝███████║███████║██║███████╗ / \
╚═╝ ╚═════╝ ╚══════╝╚══════╝╚═╝╚══════╝ () ()
Dig up dead code. Unearth clones. Expose scaffolding.
Fossil が検出するもの
| 分析 | 検出する内容 | バイブコーディングの問題 |
|---|---|---|
| デッドコード | 到達不可能な関数、未使用のエクスポート、孤立したメソッド | AI が呼び出し元を書き換えるが古いヘルパーの削除を忘れる — 誰も気づかない |
| コードクローン | タイプ 1 (完全一致)、タイプ 2 (名前変更)、タイプ 3 (構造的) の重複 | AI の各セッションが、コードベースの他の場所にすでに存在するユーティリティを再発明する |
| スキャフォールディング | Phase N / Step N コメント、TODO/FIXME マーカー、プレースホルダーの本体 | AI はフェーズ単位で作業し、決して整理されない一時的なマーカーを残す |
| 一時ファイル | temp_*、backup_*、old_*、phase_* のファイルやディレクトリ | ファイルツリーを誰も監査しないため残り続けるセッションの成果物 |
| コードグラフ | 任意の 2 つの関数間のパスの追跡、影響範囲の分析、コールグラフの走査 | AI ツールはテキスト検索でナビゲートする — Fossil は関数がどのようにつながっているか、1 つを変更すると何が壊れるかを追跡できるグラフを提供します |
Fossil が他と異なる点
- バイブコーディングのために専用設計。 汎用リンターではありません — AI がコードの大半を書き、人間がレビューする割合が減ったときに蓄積する乱雑さを特に対象としています。
- grep ではなくグラフ。 AI コーディングツールはテキストを検索してコードをナビゲートします。Fossil はコールグラフを構築し、エージェントが関数のつながりを追跡し、リファクタリング前に影響範囲を見つけ、行き止まりを発見できるようにします — すべてのファイルを読むことなく。
- MCP ネイティブ。 MCP サーバーとして動作するため、AI エージェントが開発中に自身の出力をセルフチェックできます。
- トークンを節約し、コストも節約。 エージェントが問題を見つけるために何度もファイルをスキャンする代わりに、Fossil はデッドコード、クローン、スキャフォールディングを 1 回のパスで特定します — LLM 推論の回数が減り、コストも下がります。
- Rust 製。 単一バイナリで、ランタイム依存関係はありません。数千のファイルを数秒でスキャンします。設計上メモリセーフです。
- クロスファイル分析。 インポート、バレル再エクスポート、クラス階層を解決し、モジュール境界を越えてデッドコードを見つけます。
- フレームワーク対応。 React、Next.js、Django、Spring、Axum などを自動検出します — ライフサイクルメソッドをデッドコードとして誤検出しません。
- 設定不要。 すぐに動作します。設定ファイルは任意です。
- 16 言語対応。 多言語コードベースに対応する 1 つのツールです。
インストール
クイックインストール (推奨)
macOS / Linux:
curl -fsSL fossil-mcp.com/install.sh | sh
Windows (PowerShell):
irm fossil-mcp.com/install.ps1 | iex
OS とアーキテクチャを自動検出し、最新のバイナリをダウンロードして PATH に追加します。
手動ダウンロード
お使いのプラットフォーム向けの最新バイナリを GitHub Releases からダウンロードしてください:
# macOS (Apple Silicon)
curl -L https://github.com/yfedoseev/fossil-mcp/releases/latest/download/fossil-mcp-macos-aarch64.tar.gz | tar xz
mv fossil-mcp /usr/local/bin/
# macOS (Intel)
curl -L https://github.com/yfedoseev/fossil-mcp/releases/latest/download/fossil-mcp-macos-x86_64.tar.gz | tar xz
mv fossil-mcp /usr/local/bin/
# Linux (x86_64)
curl -L https://github.com/yfedoseev/fossil-mcp/releases/latest/download/fossil-mcp-linux-x86_64-musl.tar.gz | tar xz
mv fossil-mcp ~/.local/bin/
| プラットフォーム | アーキテクチャ | アーカイブ |
|---|---|---|
| Linux | x86_64 (推奨) | fossil-mcp-linux-x86_64-musl |
| Linux | x86_64 (glibc) | fossil-mcp-linux-x86_64 |
| Linux | ARM64 | fossil-mcp-linux-aarch64 |
| macOS | Intel | fossil-mcp-macos-x86_64 |
| macOS | Apple Silicon | fossil-mcp-macos-aarch64 |
| Windows | x86_64 | fossil-mcp-windows-x86_64 |
cargo-binstall
cargo-binstall をお持ちであれば、ソースからコンパイルする代わりにビルド済みバイナリをダウンロードします:
cargo binstall fossil-mcp
crates.io から
cargo install fossil-mcp
crates.io からソースをダウンロードし、ローカルでコンパイルします。Rust ツールチェーンが必要です。
ソースから
git clone https://github.com/yfedoseev/fossil-mcp.git
cd fossil-mcp
cargo build --release
バイナリは ./target/release/fossil-mcp にあります。
更新
fossil-mcp update
MCP サーバーのセットアップ
Fossil はデフォルトで MCP サーバーとして動作します — 引数なしで fossil-mcp を実行するだけです。お使いの AI コーディングツールに接続してください:
Claude Code
claude mcp add fossil fossil-mcp
OpenAI Codex
Codex の MCP 設定に追加します:
{
"mcpServers": {
"fossil": {
"command": "fossil-mcp"
}
}
}
Cursor
~/.cursor/mcp.json に追加します:
{
"mcpServers": {
"fossil": {
"command": "fossil-mcp"
}
}
}
または、上記の Cursor インストールボタンをクリックします。
VS Code / VS Code Insiders
ワークスペースの .vscode/mcp.json に追加します:
{
"mcp": {
"servers": {
"fossil": {
"command": "fossil-mcp"
}
}
}
}
または、上記の VS Code インストールボタンをクリックします。
Windsurf
~/.codeium/windsurf/mcp_config.json に追加します:
{
"mcpServers": {
"fossil": {
"command": "fossil-mcp"
}
}
}
Claude Desktop
claude_desktop_config.json に追加します:
{
"mcpServers": {
"fossil": {
"command": "fossil-mcp"
}
}
}
MCP ツール
接続すると、AI エージェントは以下のツールを利用できるようになります:
| ツール | 説明 |
|---|---|
scan_all | プロジェクトに対してすべての分析(デッドコード + クローン + スキャフォールディング)を実行します |
analyze_dead_code | 設定可能な信頼度で到達不可能なコードを検出します |
detect_clones | 重複コード(タイプ 1/2/3 クローン)を検出します |
fossil_refresh | ファイル変更後の増分再分析(高速) |
fossil_inspect | 任意の関数についてコールグラフ、データフロー、制御フロー、またはブラスト半径を検査します |
fossil_trace | 2 つの関数間の呼び出しパスを検出します — コードがどのように接続されているかを理解できます |
fossil_explain_finding | 特定の検出結果について豊富なコンテキストを取得します |
fossil_detect_scaffolding | AI スキャフォールディング(段階的なコメント、TODO、プレースホルダー、一時ファイル)を検出します |
CLI の使用方法
モード
Fossil には 4 つの動作モードがあります:
| モード | 起動方法 | 動作内容 |
|---|---|---|
| インタラクティブ | fossil-mcp(引数なし) | フルスキャンを実行し、検出結果を調査するためのインタラクティブ REPL を開きます |
| CLI | fossil-mcp <command> | 特定の分析コマンドを実行します |
| MCP サーバー | fossil-mcp mcp または標準入力経由のパイプ | AI コーディングツール向けの JSON-RPC サーバー |
| CI/CD | fossil-mcp check | しきい値を超えた場合にビルドを失敗させます |
インタラクティブモード
引数なしで fossil-mcp を実行する(または fossil-mcp scan . を実行する)と、現在のディレクトリをスキャンしてデッドコード、クローン、スキャフォールディングを検出し、ダッシュボードを表示した後、インタラクティブ REPL に入ります:
FOSSIL Scanning .
────────────────────────────────────────────────
✓ 1200 nodes analyzed, 42 unreachable
✓ 380 files analyzed, 8 clone groups
✓ 3 scaffolding artifacts
══════════════════════════════════════════════════
RESULTS 53 findings across 28 files
══════════════════════════════════════════════════
▐ Dead Code 42 ██████████████░░
▐ Clones 8 ██░░░░░░░░░░░░░░ 120 duplicated lines
▐ Scaffolding 3 █░░░░░░░░░░░░░░░
fossil>
REPL コマンド
すべての探索コマンドは、オプションの件数と言語フィルターをサポートしています:command [N] [lang]
fossil> dead 10 # Top 10 dead code findings
fossil> dead 20 typescript # Top 20 dead code in TypeScript
fossil> clones 5 rust # Top 5 clone groups in Rust
fossil> scaffolding # All scaffolding findings
fossil> scaffolding 10 python # Top 10 scaffolding in Python
fossil> hotspots # Files with most findings
fossil> hotspots 10 go # Top 10 hotspot files in Go
fossil> file auth.ts # All findings in a specific file
fossil> langs # Language breakdown
fossil> export sarif # Export full SARIF report
fossil> summary # Re-show dashboard
fossil> q # Quit
コマンド
fossil-mcp scan [path]
インタラクティブダッシュボードを使用して、すべての分析(デッドコード + クローン + スキャフォールディング)を実行します。
fossil-mcp scan .
fossil-mcp scan /path/to/project --format sarif -o results.sarif
fossil-mcp scan /path/to/project --format json
fossil-mcp dead-code [path]
デッドコード検出のみを実行します。
fossil-mcp dead-code .
fossil-mcp dead-code . --min-confidence high
fossil-mcp dead-code . --min-lines 10
fossil-mcp dead-code . --language rust,python
fossil-mcp dead-code . --diff main # Only changed files
fossil-mcp dead-code . --stats # Show graph statistics
fossil-mcp dead-code . --cache-dir .fossil-cache # Persistent cache
fossil-mcp dead-code . --cache-stats # Cache hit rate
| フラグ | 説明 |
|---|---|
--min-confidence <LEVEL> | 信頼度でフィルター:low、medium、high、certain |
--min-lines <N> | 検出結果に必要な最小コード行数 |
--language <LANGS> | 言語でフィルター(カンマ区切り):rust,python,go |
--include-tests | テスト専用のコードを結果に含めます |
--diff <BRANCH> | ベースブランチと比較して変更されたファイルのみを分析します |
--stats | グラフの基数推定値(HyperLogLog)を表示します |
--cache-dir <PATH> | 増分分析用の永続キャッシュディレクトリ |
--cache-stats | キャッシュヒット率とメモリ使用量を表示します |
fossil-mcp clones [path]
クローン(重複コード)検出のみを行います。
fossil-mcp clones .
fossil-mcp clones . --min-lines 10
fossil-mcp clones . --similarity 0.9
fossil-mcp clones . --language typescript
fossil-mcp clones . --types type1,type2
| フラグ | 説明 |
|---|---|
--min-lines <N> | クローンと判定する最小行数(デフォルト: 6) |
--similarity <F> | Type 3 クローンの類似度しきい値 0.0~1.0(デフォルト: 0.8) |
--types <TYPES> | 検出するクローンタイプ: type1,type2,type3(デフォルト: すべて) |
--language <LANGS> | 言語でフィルタリング(カンマ区切り) |
fossil-mcp scaffolding [path]
AI が生成した足場(スキャフォールディング)の痕跡を検出します。
fossil-mcp scaffolding .
fossil-mcp scaffolding . --language rust
fossil-mcp scaffolding . --include-todos
fossil-mcp scaffolding . --format json
| フラグ | 説明 |
|---|---|
--language <LANGS> | 言語でフィルタリング(カンマ区切り) |
--include-todos | TODO/FIXME/HACK マーカーを含める(デフォルトでは除外) |
検出対象: プレースホルダーの本体(pass、todo!()、unimplemented!())、段階的なコメント(Phase 1、Step 2)、スキャフォールディングの識別子(scaffold_*、boilerplate_*)、デバッグ出力、一時ファイル(temp_*、backup_*、old_*)。
fossil-mcp check [path]
CI/CD モード — しきい値を超えるとビルドを失敗させます。詳細は CI/CD 統合 を参照してください。
fossil-mcp check
fossil-mcp check --max-dead-code 10 --max-clones 5
fossil-mcp check --diff origin/main
fossil-mcp check --diff origin/main --format sarif
fossil-mcp check --fail-on-scaffolding
| フラグ | 説明 |
|---|---|
--max-dead-code <N> | 許容されるデッドコード検出の最大数 |
--max-clones <N> | 許容されるクローン検出の最大数 |
--max-scaffolding <N> | 許容されるスキャフォールディング検出の最大数 |
--min-confidence <LEVEL> | 検出をカウントする最小信頼度 |
--diff <BRANCH> | ベースブランチと比較して変更されたファイルのみをチェック |
--fail-on-scaffolding | スキャフォールディングの痕跡が1つでも見つかった場合に失敗 |
fossil-mcp weekly
オープンソースプロジェクト全体の週間 AI スロップランキングを表示します。
fossil-mcp weekly
fossil-mcp weekly --detailed
fossil-mcp update
fossil-mcp を最新バージョンに更新します。
fossil-mcp update
fossil-mcp update --check # Check without installing
fossil-mcp mcp
MCP サーバーを明示的に起動します(通常はパイプされた stdin を介して自動検出されます)。
グローバルフラグ
これらのフラグはすべてのコマンドで使用できます:
| フラグ | 説明 |
|---|---|
--format <FMT> | 出力形式: text、json、sarif(デフォルト: text) |
-o, --output <FILE> | 出力を stdout ではなくファイルに書き込む |
-q, --quiet | エラー以外のすべての出力を抑制 |
-v, --verbose | デバッグログを有効化 |
-c, --config <FILE> | 設定ファイルへのパス |
対応言語
| 言語 | 拡張子 |
|---|---|
| Python | .py |
| JavaScript | .js, .jsx, .mjs |
| TypeScript | .ts, .tsx |
| Rust | .rs |
| Go | .go |
| Java | .java |
| C# | .cs |
| C/C++ | .c, .h, .cpp, .cc, .cxx, .hpp |
| Ruby | .rb |
| PHP | .php |
| Swift | .swift |
| Kotlin | .kt |
| Scala | .scala |
| Bash | .sh, .bash |
| R | .r, .R |
設定(任意)
Fossil はゼロ設定で動作します。すべての設定には適切なデフォルト値があります。動作をカスタマイズする必要がある場合は、プロジェクトルートに fossil.toml を作成してください:
[dead_code]
min_confidence = "high" # low, medium, high, certain
include_tests = false
exclude_patterns = ["generated/**", "vendor/**"]
[clones]
min_lines = 6
similarity_threshold = 0.8
[entry_points]
# Mark additional functions as entry points (won't be flagged as dead)
functions = ["custom_handler", "my_entry"]
# Additional entry point attributes/decorators
attributes = ["MyFramework::route"]
# Framework presets (auto-detected by default)
presets = ["axum", "react"]
auto_detect_presets = true
設定は次のファイル名から自動検出されます: fossil.toml、.fossil.toml、fossil.yml、fossil.yaml、fossil.json。
環境変数は設定ファイルの値を上書きします:
| 変数 | 効果 |
|---|---|
FOSSIL_MIN_CONFIDENCE | デッドコード検出の最小信頼度 |
FOSSIL_MIN_LINES | クローン検出の最小行数 |
FOSSIL_SIMILARITY | Type 3 クローンの類似度しきい値 |
FOSSIL_OUTPUT_FORMAT | 出力形式(text、json、sarif) |
フレームワークプリセット
プリセットはプロジェクトの依存関係から自動検出されます。これらは Fossil に対して、どの関数がフレームワークのエントリーポイント (ライフサイクルフック、ルートハンドラーなど) であるかを伝え、デッドコードとして検出されないようにします:
| プリセット | 検出条件 | 認識されるエントリーポイント |
|---|---|---|
react | 依存関係に react | componentDidMount、render、useEffect、... |
nextjs | 依存関係に next | getServerSideProps、getStaticProps、... |
express | 依存関係に express | router.* パターン |
django | 依存関係に django | get、post、URL パターンハンドラー |
flask | 依存関係に flask | app.route パターン |
spring | 依存関係に spring-boot | @Bean、@Controller、@Service、... |
axum | 依存関係に axum | #[tokio::main]、#[debug_handler] |
actix | 依存関係に actix-web | #[actix_web::main]、#[get]、#[post]、... |
angular | 依存関係に @angular/core | ngOnInit、ngOnDestroy、... |
CI/CD 統合
Fossil には CI/CD パイプライン向けの check コマンドが含まれています。コード品質のしきい値を超えた場合にビルドを失敗させ、チームがコード標準を徹底し、技術的負債の蓄積を防ぐのに役立ちます。
基本的な使い方
# Check against configured thresholds
fossil-mcp check
# Override thresholds via CLI
fossil-mcp check --max-dead-code 10 --max-clones 5
# Diff-aware mode (only analyze changed files in PR)
fossil-mcp check --diff origin/main
# Generate SARIF for GitHub code scanning
fossil-mcp check --diff origin/main --format sarif
# Quiet mode (no diagnostic output)
fossil-mcp check --quiet
設定
fossil.toml に [ci] セクションを追加します:
[ci]
max_dead_code = 10 # Maximum dead code findings (0 = fail on any)
max_clones = 5 # Maximum clone findings
max_scaffolding = 3 # Maximum scaffolding findings
min_confidence = "medium" # Minimum confidence (low|medium|high|certain)
fail_on_scaffolding = false # Fail if any scaffolding found
GitHub Actions 統合
.github/workflows/fossil-check.yml を作成します:
name: Fossil CI Check
on:
pull_request:
push:
branches: [main]
jobs:
fossil:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Fossil
run: curl -fsSL fossil-mcp.com/install.sh | sh
- name: Run Fossil check
run: |
fossil-mcp check \
--diff origin/${{ github.base_ref || 'main' }} \
--format sarif \
> fossil-results.sarif
- name: Upload to GitHub Security
if: always()
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: fossil-results.sarif
仕組み
scanと同じ分析エンジンを使用してプロジェクトを スキャン します- 変更されたファイルのみに オプションで絞り込み ます (
--diff branch経由) - 設定されたしきい値に対して 評価 します
- 検出結果をテキスト、JSON、または SARIF として レポート します
- しきい値を超えた場合はコード 1 で 終了 します (CI ビルドが失敗)
終了コード
| コード | 意味 |
|---|---|
| 0 | すべてのしきい値を通過 ✓ |
| 1 | しきい値を超過 (ビルドが失敗) |
| 2 | エラー (git が見つからない、無効な設定など) |
完全な例については、examples/fossil.toml と examples/fossil-check.yml を参照してください。
仕組み
- スキャン — プロジェクトのファイルを走査し、
.gitignoreを尊重し、ベンダー提供/生成されたコードをスキップします - パース — 各ソースファイルの tree-sitter AST を構築します (16 言語)
- 抽出 — AST から関数、呼び出し、インポート、属性、クラス階層を抽出します
- グラフ — インポート解決とバレル再エクスポートのサポートを備えたクロスファイルの
CodeGraphを構築します - 分析 — エントリーポイントを検出し (ヒューリスティクス + フレームワークプリセット経由)、到達可能性分析を実行し、デッドコードとクローンを特定します
- レポート — 検出結果をテキストダッシュボード、JSON、または SARIF として出力します
コントリビューション
コントリビューションを歓迎します!ガイドラインについては CONTRIBUTING.md を参照してください。
ライセンス
Apache License, Version 2.0 または MIT License のいずれかお好みの方の下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。