mcpField
K
kastell

kastell

ローカル
github.com/kastelldevセキュリティ6016 週間前に更新

kastell について

Kastell は、サーバーのセキュリティ監査、修正、ハードニング、監視を行うコマンドラインツールで、4 社のクラウドプロバイダーへのサーバー構築にも対応しています。複数のサーバーを運用する管理者向けで、AI エージェントが直接サーバーを管理できる MCP サーバーを内蔵しています。

主な機能

  1. 01449 項目のセキュリティ監査
  2. 02安全な自動修正と 24 ステップの本番環境ハードニング
  3. 03バックアップ、リストア、スナップショット管理
  4. 044 社のクラウドプロバイダーでのサーバー構築
  5. 05SAFE_MODE がデフォルトで有効な内蔵 MCP サーバー

活用シーン

  1. 01既存サーバーのセキュリティ監査と安全な修正の適用
  2. 02本番公開前のサーバーハードニング
  3. 03AI エージェント経由での複数サーバーの状態確認

MCP 対応

Kastell は Claude や Cursor などのクライアントがサーバー管理に使える 17 のツールを提供する MCP サーバーを内蔵しています。SAFE_MODE がデフォルトで有効で、破壊的な操作はすべてブロックされます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"kastelldev-kastell": {
"command": "npx",
"args": [
"-y",
"kastell"
],
"env": {
"HETZNER_TOKEN": "<HETZNER_TOKEN>",
"DIGITALOCEAN_TOKEN": "<DIGITALOCEAN_TOKEN>",
"VULTR_TOKEN": "<VULTR_TOKEN>",
"LINODE_TOKEN": "<LINODE_TOKEN>"
}
}
}
}
起動コマンドnpx -y kastell
設定が必要な環境変数
HETZNER_TOKENシークレットHetzner Cloud API token (optional — only for Hetzner servers)
DIGITALOCEAN_TOKENシークレットDigitalOcean API token (optional — only for DigitalOcean servers)
VULTR_TOKENシークレットVultr API token (optional — only for Vultr servers)
LINODE_TOKENシークレットLinode API token (optional — only for Linode servers)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmkastell1.14.0

ツール

13

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
modeenumいいえ「sizes」アクションのサーバーモードフィルター。Coolify には最低 2 GB の RAM が必要です。デフォルト:coolifycoolify | bare
actionenumはい実行するアクション:'list' はすべてのサーバーを一覧表示し、'status' はサーバー/クラウドの状態を確認し、'health' は Coolify への到達性(またはベアメタルサーバーへの SSH 到達性)を確認し、'sizes' はプロバイダーとリージョンで利用可能なサーバータイプと価格を一覧表示しますlist | status | health | sizes
regionstringいいえリージョン/ロケーション ID('sizes' アクションでは必須。例:Hetzner は 'nbg1'、DigitalOcean は 'fra1')
serverstringいいえサーバー名または IP。単一サーバーの status/health では必須です。省略するとすべてのサーバーが対象になります。
providerenumいいえクラウドプロバイダー('sizes' アクションでは必須)hetzner | digitalocean | vultr | linode

詳細

Kastell

Kastell

インフラを堅牢に。

日本語 | Türkçe

Tests Coverage npm Downloads License GitHub stars Socket Badge Snyk Website DeepWiki Zero Telemetry

Kastellを選ぶ理由

サーバーセキュリティは分断されています。Lynisはスキャンしますが、修正はしません。OpenSCAPは高機能ですが、複雑です。カスタムスクリプトは、うまくいかなくなるまでは機能します。そして、保守する人はいません。ツールごとに出力形式も、更新サイクルも、習得に必要な時間も異なります。

Kastellは異なるアプローチを採用しています。 監査、修正、強化、監視を行う1つのCLIです。サーバーをスキャンし、安全な修正を適用し、本番環境の基準に合わせて堅牢化したうえで、同じツールで継続的に監視できます。

初日からAIネイティブです。 KastellにはMCP サーバーが組み込まれているため、Claude、Cursor、その他のMCP対応AI エージェントからサーバーを直接管理できます。プロンプトから本番環境の堅牢化まで、わずか数秒です。

サーバーを保護するために、4つの別々のツールを用意する必要はありません。

クイックスタート

# Interactive mode -- no commands to memorize
npx kastell

引数なしでkastellを実行すると、グラデーション付きのASCIIバナーとクイックスタートの例を表示するインタラクティブな検索メニューが起動します。絵文字で分類されたグループからアクションを選び、入力して結果をすぐに絞り込み、手順に沿ってオプションを設定できます。コマンド名やフラグを覚える必要はありません。

 ██╗  ██╗  ██████╗  ███████╗████████╗███████╗██╗     ██╗
 ██║ ██╔╝  ██╔══██╗ ██╔════╝╚══██╔══╝██╔════╝██║     ██║
 █████╔╝   ███████║ ███████╗   ██║   █████╗  ██║     ██║
 ██╔═██╗   ██╔══██║ ╚════██║   ██║   ██╔══╝  ██║     ██║
 ██║  ██╗  ██║  ██║ ███████║   ██║   ███████╗███████╗███████╗
 ╚═╝  ╚═╝  ╚═╝  ╚═╝ ╚══════╝   ╚═╝   ╚══════╝╚══════╝╚══════╝

  KASTELL  v2.3.1  ·  Your infrastructure, fortified.

  $ kastell init --template production  → deploy a new server
  $ kastell status --all                → check all servers
  $ kastell secure setup                → harden SSH + fail2ban
  $ kastell maintain --all              → full maintenance cycle

? What would you like to do?
   Server Management
❯    Deploy a new server
     Add an existing server
     List all servers
     ...
   Security
     Harden SSH & fail2ban
     Manage firewall (UFW)
     ...

各アクションにはサブオプション(サーバーモード、テンプレート、ログソース、ポート番号など)と、いつでもメインメニューに戻れる**<- 戻る**オプションがあります。

コマンドをすでに把握している場合は、引き続き直接実行できます。

kastell init                    # Deploy a new server
kastell status my-server        # Check server status
kastell backup --all            # Backup all servers

Kastellは、サーバーのプロビジョニング、SSHキーの設定、ファイアウォールの構成、プラットフォームのインストールを自動的に処理します。

Kastellの特長

問題解決策
アップデートでサーバーを壊してしまいましたか?maintainによるアップデート前のスナップショット保護
サーバーの状態がわかりませんか?組み込みの監視、ヘルスチェック、doctorによる診断
セキュリティ対策が後回しになっていませんか?ファイアウォール、SSHの強化、SSL、セキュリティ監査を標準搭載
バックアップは? いつかやるつもりですか……マニフェスト追跡機能付きの、ワンコマンドでのバックアップと復元
複数のサーバーを管理していますか?バックアップ、保守、ステータス、ヘルスチェックで--allフラグを使用
既存のサーバーが管理対象になっていませんか?kastell addであらゆるサーバーを管理対象に追加
コマンドを覚えたくありませんか?kastellを実行するだけで、インタラクティブメニューが案内します

Kastell と代替ツールの比較

機能KastellLynisOpenSCAP
インストールnpm i -g kastellパッケージマネージャーパッケージマネージャー
言語TypeScriptShellC/Python
セキュリティチェック449300+プロファイルにより異なる
自動修正安全な段階提案のみ提案のみ
MCP(AI エージェント)17 ツール----
コンプライアンスCIS、PCI-DSS、HIPAACIS、HIPAACIS、STIG、PCI-DSS
クラウドプロビジョニング4 プロバイダー----
ハードニング(ロック)24 ステップ----
リモート監視Guard デーモン----
Telegram ボット内蔵----
プラットフォーム対応Linux(SSH)Linux/macOS/BSDLinux
ライセンスApache 2.0GPL-3.0LGPL-2.1

何ができますか?

デプロイ
kastell                               # Interactive menu (recommended)
kastell init                          # Interactive setup (direct)
kastell init --provider hetzner       # Non-interactive
kastell init --config kastell.yml     # From YAML config
kastell init --template production    # Use a template
kastell init --mode bare              # Generic VPS (no platform)
kastell init --mode dokploy           # Dokploy (Docker Swarm PaaS)
管理
kastell list                  # List all servers
kastell status my-server      # Check server status
kastell status --all          # Check all servers
kastell ssh my-server         # SSH into server
kastell restart my-server     # Restart server
kastell destroy my-server     # Destroy cloud server entirely
kastell add                   # Add existing server
kastell remove my-server      # Remove from local config
kastell config set key value  # Manage default configuration
kastell config validate       # Validate servers.yaml structure and types
kastell export                # Export server list to JSON
kastell import servers.json   # Import servers from JSON
更新と保守
kastell update my-server              # Update platform (Coolify or Dokploy, auto-detected)
kastell update my-server --dry-run    # Preview update without executing
kastell maintain my-server            # Full maintenance (snapshot + update + health + reboot)
kastell maintain my-server --dry-run  # Preview maintenance steps
kastell maintain --all                # Maintain all servers
バックアップと復元
kastell backup my-server      # Backup DB + config
kastell backup --all          # Backup all servers
kastell restore my-server     # Restore from backup
スナップショット
kastell snapshot create my-server   # Create VPS snapshot (with cost estimate)
kastell snapshot list my-server     # List snapshots
kastell snapshot list --all         # List all snapshots across servers
kastell snapshot delete my-server   # Delete a snapshot
セキュリティ
kastell firewall status my-server   # Check firewall
kastell firewall setup my-server    # Configure UFW
kastell secure audit my-server      # Security audit
kastell secure setup my-server      # SSH hardening + fail2ban
kastell domain add my-server --domain example.com  # Set domain + SSL
セキュリティ監査
kastell audit my-server                  # Full security audit (31 categories, 449 checks)
kastell audit my-server --json           # JSON output for automation
kastell audit my-server --threshold 70   # Exit code 1 if score below threshold
kastell audit my-server --fix            # Interactive fix mode (prompts per severity)
kastell audit my-server --fix --dry-run  # Preview fixes without executing
kastell audit my-server --watch          # Re-audit every 5 min, show only changes
kastell audit my-server --watch 60       # Custom interval (60 seconds)
kastell audit --host [email protected]       # Audit unregistered server
kastell audit my-server --badge          # SVG badge output
kastell audit my-server --report html    # Full HTML report
kastell audit my-server --score-only     # Just the score (CI-friendly)
kastell audit my-server --summary        # Compact dashboard view
kastell audit my-server --explain        # Explain failed checks with remediation guidance
kastell audit my-server --compliance cis # Filter by compliance framework (cis-level1, cis-level2, pci-dss, hipaa)
セキュリティ強化
kastell lock my-server                        # 24-step production hardening (SSH + UFW + sysctl + auditd + AIDE + Docker)
kastell lock my-server --dry-run              # Preview hardening steps without applying
監視とデバッグ
kastell monitor my-server             # CPU, RAM, disk usage
kastell logs my-server                 # View platform logs (Coolify or Dokploy)
kastell logs my-server -f              # Follow logs
kastell health                         # Health check all servers
kastell doctor                         # Check local environment

対応プロバイダー

プロバイダーステータスリージョン最低価格
Hetzner Cloud安定版EU、US約€4/月
DigitalOcean安定版グローバル約$18/月
Vultr安定版グローバル約$12/月
Linode (Akamai)ベータ版グローバル約$12/月

価格は、2 GB 以上の RAM を搭載した最安プランを示しています(Coolify と Dokploy に必要)。Bare モードには最低要件がなく、プロバイダーによってプランは約$2.50/月から利用できます。セットアップ中に別のサイズを選択できます。Linode のサポートはベータ版です。コミュニティによるテストを歓迎します。

対応プラットフォーム

プラットフォームモードフラグ最低 RAM最低 CPU説明
Coolify--mode coolify(デフォルト)2 GB2 vCPUDocker ベースの PaaS(ポート 8000)
Dokploy--mode dokploy2 GB2 vCPUDocker Swarm ベースの PaaS(ポート 3000)
Bare--mode bare——汎用 VPS、プラットフォームによるオーバーヘッドなし

Kastell は PlatformAdapter アーキテクチャを採用しており、同じコマンド(update、maintain、logs、health)をすべてのプラットフォームで使用できます。プラットフォームはサーバーレコードに保存され、各コマンドの実行時に自動検出されます。

開発者エクスペリエンス

機能コマンド/フラグ説明
ドライラン--dry-run実行せずに破壊的なコマンドをプレビューします。対応コマンド:destroy、update、restart、remove、maintain、restore、firewall、domain、backup、snapshot、secure。
シェル補完kastell completions bash|zsh|fishコマンドやオプションをタブ補完するためのシェル補完スクリプトを生成します。
設定の検証kastell config validateZod の厳密なスキーマを使用して、servers.yaml の構造と型のエラーを確認します。
バージョン確認kastell --version現在のバージョンを表示し、npm で新しいバージョンが公開されている場合に通知します。

YAML 設定

単一の設定ファイルでデプロイできます:

# kastell.yml
provider: hetzner
region: nbg1
size: cax11
name: my-coolify
fullSetup: true
domain: coolify.example.com
kastell init --config kastell.yml

テンプレート

テンプレート最適な用途含まれるもの
starterテスト、個人プロジェクト1~2 vCPU、2~4 GB RAM
production本番アプリケーション2~4 vCPU、4~8 GB RAM、完全なハードニング
dev開発と CI/CDstarter と同じ、ハードニングなし
kastell init --template production --provider hetzner

セキュリティ

Kastell はセキュリティを最優先に構築されており、専用のセキュリティテストスイートを含む380のスイートで12,132件のテストを実施しています。

  • API トークンはディスクに保存されません。実行時に入力するか、環境変数で指定します
  • 必要に応じて SSH キーが自動生成されます(Ed25519)
  • すべての SSH 接続で StrictHostKeyChecking=accept-new と、IP アドレスの検証(オクテット範囲)および環境変数のフィルタリングを使用します
  • ユーザー入力を受け付けるすべての箇所でシェルインジェクションを防止します(spawn/spawnSync を使用し、execSync は使用しません)
  • プロバイダーのエラーメッセージをサニタイズし、トークンの漏えいを防ぎます
  • stderr のサニタイズにより、エラー出力に含まれる IP アドレス、ホームパス、トークン、シークレットを伏せます
  • 設定ファイル内のトークンを検出します(22種類以上のキー形式、大文字・小文字を区別しない検索、ネストに対応)
  • インポート/エクスポート処理では機密フィールドを除去し、厳格なファイル権限(0o600)を適用します
  • --full-setup を使うと、UFW ファイアウォールと SSH の強化が自動的に有効になります
  • MCP:SAFE_MODE(デフォルト:オン)により破壊的な操作をすべてブロックします。すべての入力を Zod スキーマで検証し、バックアップの復元時にはパストラバーサルを防止します
  • Claude Code フック:destroy-block は --force なしでの誤った kastell destroy を防ぎ、pre-commit 監査ガードはスコアの低下を警告します
  • テレメトリーゼロ — Kastell は使用データ、分析データ、テレメトリーを一切収集しません。サーバーのデータがマシンの外に送信されることはありません。

セキュリティの動作(v2.3.1)

このセクションでは、v2.3.1 で提供されるセキュリティ上の契約について説明します。今後の作業については別の場所に記載しています(今後の項目については CHANGELOG.md を参照してください)。

  • KASTELL_STRICT_HOST_KEY=true — 設定すると、Kastell は未知の SSH ホストキーを明確に拒否します。直接 SSH 接続(つまり、accept-new を経由する接続)では、オペレーターがリスクを把握できるように、Trust-On-First-Use(TOFU)に関する警告を一度だけ表示します。KASTELL_STRICT_HOST_KEY=true と併用すると、この警告は重大なエラーに昇格します。
  • 非 TTY 環境での破壊的なコマンド — 非対話型環境(CI、スクリプト、自動化)では、破壊的な操作に明示的な --force フラグ、またはコマンドで定義されたオプトインフラグが必要です。いずれも指定しない場合、コマンドはゼロ以外のステータスで終了し、明確なエラーを表示します。
  • スキップされたチェックの構造化表示 — スキップされたチェック(VPS では該当しない、プラットフォームの不一致、前提条件の不足など)は、監査出力で黙って除外されず、中立的で確認可能な結果として表示されます。オペレーターは、どのチェックが実行されなかったか、その理由を正確に確認できます。
  • Windows のシークレットファイル — Kastell が Windows 上に書き込むシークレットを含むファイルには、制限的な ACL(所有者のみのアクセス)が設定されます。Linux/macOS では POSIX 権限 0o600 が引き続き基準となり、Windows では同等の DACL が使用されます。
  • QuickWin の JSON 形式 — audit --json の QuickWin エントリーには、既存の description と commands に加え、安定した id(チェック ID)と severity フィールドが含まれるようになりました。これにより、人間向けの説明を解析せずに QuickWins をプログラムから利用できます。
  • FORBIDDEN のプレビューに理由を表示 — --dry-run(または MCP の server_fix ドライラン)で修正をプレビューすると、FORBIDDEN レベルの各修正に、その修正が FORBIDDEN に分類される理由が簡潔に表示されます(例:「再起動が必要」、「アクティブな SSH セッションに影響する」)。理由はチェックの forbiddenReason フィールドから取得されます。

インストール

# Run directly (recommended)
npx kastell <command>

# Or install globally
npm install -g kastell
kastell <command>

Node.js 20以降が必要です。

安全モード

KASTELL_SAFE_MODE 環境変数で破壊的な操作を制御します。

  • MCP のデフォルト: true — provision、destroy、restore がブロックされます
  • CLI のデフォルト: false — すべての操作が有効です
  • 上書き: KASTELL_SAFE_MODE=true kastell destroy <server> → 拒否されます

対象となるコマンド:init、destroy、backup-restore、snapshot-restore、snapshot-delete、restart、maintain。

トラブルシューティング

サーバーの作成に失敗しますか? kastell doctor --check-tokens を実行して、API トークンとローカル環境を確認してください。

サーバーが応答しませんか? kastell status my-server --autostart を使ってプラットフォームの状態を確認し、必要に応じて自動再起動してください。または、kastell health を実行すると、すべてのサーバーを一度に確認できます。

最初からやり直す必要がありますか? kastell destroy my-server を実行すると、クラウドサーバーが完全に削除されます。

コントリビューション

開発環境のセットアップ、テスト、コントリビューションのガイドラインについては、CONTRIBUTING.md を参照してください。

Kastell では、344 のスイートにわたる 11,206 件のテストを実施しています。PR を提出する前に npm test を実行してください。

MCP サーバー(AI 連携)

Kastell には、AI を活用したサーバー管理のための Model Context Protocol サーバーが組み込まれています。Claude Code、Cursor、Windsurf など、MCP 対応クライアントで利用できます。

{
  "mcpServers": {
    "kastell": {
      "command": "npx",
      "args": ["-y", "-p", "kastell", "kastell-mcp"],
      "env": {
        "HETZNER_TOKEN": "your-token",
        "DIGITALOCEAN_TOKEN": "your-token",
        "VULTR_TOKEN": "your-token",
        "LINODE_TOKEN": "your-token"
      }
    }
  }
}

利用可能なツール:

ツール操作説明
server_infolist, status, health, sizesサーバー情報の照会、クラウドプロバイダーとプラットフォームの状態確認
server_logslogs, monitorSSH 経由でプラットフォーム/Docker のログとシステムメトリクスを取得
server_manageadd, remove, destroyクラウドサーバーの登録、登録解除、削除
server_maintainupdate, restart, maintainプラットフォームの更新、サーバーの再起動、完全なメンテナンスの実行
server_securesecure, firewall, domainSSH の強化、ファイアウォールルール、ドメイン/SSL の管理(10 個のサブコマンド)
server_backupbackup, snapshotデータベースのバックアップ/復元、VPS スナップショットの作成/管理
server_provisioncreateクラウドプロバイダー上に新しいサーバーをプロビジョニング
server_auditaudit449 項目のセキュリティ監査とコンプライアンスフレームワークによる絞り込み。修復のガイダンスには --explain を使用
server_evidencecollectチェックサム付きのフォレンジック証拠パッケージを収集
server_guardstart, stop, status自律型セキュリティ監視デーモンを管理
server_doctordiagnose修復コマンドを提示する予防的なヘルス分析
server_lockharden24 段階の本番環境向け強化(SSH、UFW、sysctl、auditd、AIDE、Docker)
server_fleetoverviewフリート全体の健全性とセキュリティ態勢のダッシュボード
server_fixfix --safeバックアップ付きで安全な自動修正を適用(SAFE ティアのみ。デフォルトは dryRun)

破壊的な操作(destroy、restore、snapshot-delete、provision、restart、maintain、snapshot-create)の実行には、SAFE_MODE=false が必要です。

Claude Code プラグイン

Kastell は、Anthropic マーケットプレイス向けの Claude Code プラグインとして利用できます。このプラグインには、以下が含まれています。

  • 4 つのスキル:kastell-ops(アーキテクチャのリファレンス)、kastell-scaffold(コンポーネント生成)、kastell-careful(破壊的操作のガード)、kastell-research(コードベースの調査)
  • 2 つのエージェント:kastell-auditor(並列監査アナライザー)、kastell-fixer(worktree で分離された自動修正)
  • 5 つのフック:destroy-block、session-audit、session-log、pre-commit-audit-guard、stop-quality-check

Claude Code のプラグインマネージャーからインストールするか、claude --plugin-dir kastell-plugin を使って直接利用してください。

MCP プラットフォームのセットアップ
プラットフォーム設定場所ガイド
Claude Codeclaude mcp add または .mcp.jsonセットアップガイド
Claude Desktopclaude_desktop_config.jsonセットアップガイド
VS Code / Copilot.vscode/mcp.jsonセットアップガイド
Cursor.cursor/mcp.jsonセットアップガイド

その他のプラットフォーム(JetBrains、Windsurf、Gemini など)は v2.0 で対応予定です。

AI からの見つけやすさ

Kastell は AI クローラー向けに llms.txt を提供しており、MCP Registry に io.github.kastelldev/kastell として登録されています。

v2.3 の信頼性契約

これらの契約は、CLI と MCP サーバーに適用されます。

プロビジョニングの動作

server_provision は、プロバイダーがサーバーを作成し、Kastell がそのサーバーを永続的に登録すると戻ります。readiness.status が pending の場合があります。その場合は、server_info status または server_info health を実行してください。対話形式の kastell init コマンドは、既存の準備状況チェックが完了するまで引き続き待機します。

自動化の契約
  • サポートされていない CLI 操作と失敗した CLI 操作は、終了コード 1 を返します。
  • 結果が空でも有効な場合や、ユーザーがキャンセルした場合は 0 を返します。
  • --all で一部の操作が失敗した場合は 1 を返します。
  • audit --json と audit --ci は、標準出力を 1 つの JSON ペイロード専用にします。

CI/CD との統合

CI パイプラインで kastell audit を使用して、セキュリティのベースラインを適用します。

# .github/workflows/security-audit.yml
name: Security Audit
on:
  schedule:
    - cron: '0 6 * * 1'  # Weekly Monday 6 AM
  workflow_dispatch:
jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm install -g kastell
      - run: kastell audit --host root@${{ secrets.SERVER_IP }} --threshold 70 --json > audit-result.json
      - uses: actions/upload-artifact@v4
        with:
          name: audit-report
          path: audit-result.json

--threshold フラグを指定すると、スコアが目標を下回った場合にゼロ以外の終了コードが返され、CI ジョブが自動的に失敗します。

次のステップ

  • テストの品質向上:ミューテーションテスト、カバレッジの不足箇所、統合テスト(v1.14)
  • マーケットプレイスでの配布を備えたプラグインエコシステム(v2.0)
  • ダッシュボードとマネージドサービス(v3.0)

理念

インフラストラクチャは、退屈で、予測可能で、安全であるべきです。

Kastell は単なるスクリプトではありません。セルフホスト可能なインフラストラクチャのための DevOps セーフティレイヤーです。

ライセンス

Apache 2.0 -- LICENSE を参照してください

サポート


@omrfc が開発

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。