ワンクリックで
fleetflow
FleetFlow(KDLベースのコンテナオーケストレーションツール)を効果的に使用するためのガイド
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
FleetFlow(KDLベースのコンテナオーケストレーションツール)を効果的に使用するためのガイド
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
仕様(Why)と設計(How)を記録し、Living Documentation原則でコードと常に同期させる
LLMが外部サービスと対話するための適切に設計されたツールを通じて、高品質なMCP (Model Context Protocol) サーバーを作成するためのガイド。Python (FastMCP)、Node/TypeScript (MCP SDK)、Rust (Tokio)で、外部APIやサービスを統合するMCPサーバーを構築する際に使用します。
Rust製非同期Docker APIクライアント「Bollard」の使い方と実装パターン
| name | fleetflow |
| description | FleetFlow(KDLベースのコンテナオーケストレーションツール)を効果的に使用するためのガイド |
| version | 0.4.2 |
FleetFlowをプロジェクトで効果的に活用するための包括的なガイドです。
fleetflow / flow / ffFleetFlowは、KDL(KDL Document Language)をベースにしたコンテナオーケストレーションツールです。
コンセプト: 環境構築は、対話になった。伝えれば、動く。
| 特徴 | 説明 |
|---|---|
| 超シンプル | Docker Composeと同等以下の記述量 |
| 可読性 | YAMLより読みやすいKDL構文 |
| ステージ管理 | local/dev/pre/live を統一管理 |
| OrbStack連携 | macOSローカル開発に最適化 |
| Dockerビルド | Dockerfileからのビルドをサポート |
| イメージプッシュ | ビルド後のレジストリプッシュを自動化 |
| クロスビルド | --platform でマルチアーキテクチャ対応 |
| サービスマージ | 複数ファイルでの設定オーバーライド |
| 再起動ポリシー | ホスト再起動時のコンテナ自動復旧 |
| 依存サービス待機 | Exponential Backoffで堅牢な起動順序制御 |
| クラウド対応 | さくらのクラウド、Cloudflareなど複数プロバイダー |
| DNS自動管理 | Cloudflare DNSとの自動連携 |
| CI/CDデプロイ | deployコマンドによる自動デプロイ |
| セルフアップデート | 最新バージョンへの自動更新 |
| MCP対応 | Model Context Protocol サーバー機能 |
| Playbook | リモートサーバーでのサービス起動 |
cargo install --git https://github.com/chronista-club/fleetflow
// fleet.kdl
project "myapp"
stage "local" {
service "db"
}
service "db" {
image "postgres:16" // image は必須
ports {
port 5432 5432
}
env {
POSTGRES_PASSWORD "postgres"
}
}
fleet up -s local # 起動
fleet ps # 状態確認
fleet logs # ログ表示
fleet down -s local # 停止・削除
| 変数 | 説明 |
|---|---|
FLEET_STAGE | ステージ名を指定(local, dev, pre, live) |
FLEETFLOW_CONFIG_PATH | 設定ファイルの直接パス指定 |
CLOUDFLARE_API_TOKEN | Cloudflare APIトークン(DNS自動管理用) |
CLOUDFLARE_ZONE_ID | Cloudflare Zone ID(DNS自動管理用) |
すべてのコマンドは -s/--stage オプションでステージを指定します。
環境変数 FLEET_STAGE でも指定可能です。
| コマンド | 説明 |
|---|---|
up -s <stage> | ステージを起動 |
down -s <stage> | ステージを停止・削除 |
deploy -s <stage> --yes | CI/CD向けデプロイ(デフォルトでpull) |
ps [-s <stage>] [--all] | コンテナ一覧 |
logs [-s <stage>] [-f] [-n service] | ログ表示 |
start -s <stage> [-n service] | 停止中のサービスを起動 |
stop -s <stage> [-n service] | サービスを停止(コンテナ保持) |
restart -s <stage> [-n service] | サービスを再起動 |
build -s <stage> [-n service] | イメージをビルド |
build -s <stage> --push [--tag <tag>] | ビルド&レジストリへプッシュ |
validate | 設定を検証 |
setup -s <stage> | ステージの環境をセットアップ(冪等) |
play <playbook> | Playbookを実行 |
cloud up -s <stage> | クラウド環境を構築 |
cloud down -s <stage> | クラウド環境を削除 |
mcp | MCPサーバーを起動 |
self-update | FleetFlow自体を最新版に更新 |
version | バージョン表示 |
project "name" // プロジェクト名(必須)
stage "local" { // ステージ定義
service "db"
service "web"
}
service "db" { // サービス定義
image "postgres:16" // 必須
restart "unless-stopped" // 再起動ポリシー
depends_on "other" // 依存サービス
wait_for { ... } // 依存サービス待機設定
ports { ... }
env { ... }
volumes { ... }
build { ... } // Dockerビルド設定
healthcheck { ... } // ヘルスチェック設定
}
// クラウドインフラ(オプション)
providers {
sakura-cloud { zone "tk1a" }
cloudflare { account-id env="CF_ACCOUNT_ID" }
}
server "app-server" { // クラウドサーバー定義
provider "sakura-cloud"
plan core=4 memory=4
}
imageフィールドは必須です。省略するとエラーになります:
// 正しい定義
service "db" {
image "postgres:16"
}
// エラー: imageが必須
service "db" {
version "16" // これだけではダメ
}
// Error: サービス 'db' に image が指定されていません
複数ファイルで同じサービスを定義すると、設定がマージされます:
// fleet.kdl(ベース設定)
service "api" {
image "myapp:latest"
ports { port 8080 3000 }
env { NODE_ENV "production" }
}
// flow.local.kdl(ローカルオーバーライド)
service "api" {
env { DATABASE_URL "localhost:5432" }
}
// 結果:
// - image: "myapp:latest" (保持)
// - ports: [8080:3000] (保持)
// - env: { NODE_ENV: "production", DATABASE_URL: "localhost:5432" } (マージ)
マージルール:
| フィールドタイプ | ルール |
|---|---|
Option<T> | 後の定義がSomeなら上書き、Noneなら保持 |
Vec<T> | 後の定義が空でなければ上書き、空なら保持 |
HashMap<K, V> | 両方をマージ(後の定義が優先) |
規約ベースの自動検出と明示的指定の両方に対応:
// 規約ベース: ./services/api/Dockerfile を自動検出
service "api" {
image "myapp/api:latest"
build_args {
NODE_VERSION "20"
}
}
// 明示的指定
service "worker" {
image "myapp/worker:latest"
dockerfile "./backend/worker/Dockerfile"
context "./backend"
target "production" // マルチステージビルド
}
ビルドしたイメージをレジストリにプッシュ:
# ビルドのみ
fleet build -s local -n api
# ビルド&プッシュ
fleet build -s local -n api --push
# タグを指定してビルド&プッシュ
fleet build -s local -n api --push --tag v1.0.0
# クロスビルド(linux/amd64向け)
fleet build -s local -n api --push --platform linux/amd64
認証方式:
~/.docker/config.json から認証情報を取得DOCKER_CONFIG でパスをカスタマイズ可能対応レジストリ:
タグ解決の優先順位:
--tag CLIオプションimage フィールドのタグlatest複数のクラウドプロバイダーをKDLで宣言的に管理:
providers {
sakura-cloud { zone "tk1a" }
cloudflare { account-id env="CF_ACCOUNT_ID" }
}
stage "dev" {
server "app-server" {
provider "sakura-cloud"
plan core=4 memory=4
disk size=100 os="ubuntu-24.04"
dns_aliases "app" "api" // DNSエイリアス
}
}
ホスト再起動後にコンテナを自動復旧させる:
service "db" {
image "postgres:16"
restart "unless-stopped" // ホスト再起動後も自動起動
}
対応する値:
| 値 | 説明 |
|---|---|
no | 再起動しない(デフォルト) |
always | 常に再起動 |
on-failure | 異常終了時のみ再起動 |
unless-stopped | 明示的に停止されない限り再起動(推奨) |
K8sのReadiness Probeコンセプトを取り入れた、依存サービスの準備完了待機機能:
service "api" {
image "myapp/api:latest"
depends_on "db" "redis"
wait_for {
max_retries 23 // 最大リトライ回数(デフォルト: 23)
initial_delay 1000 // 初回待機時間ms(デフォルト: 1000)
max_delay 30000 // 最大待機時間ms(デフォルト: 30000)
multiplier 2.0 // 待機時間の増加倍率(デフォルト: 2.0)
}
}
待機時間の計算(Exponential Backoff):
delay = initial_delay * multiplier^attempt
max_delayで上限を設定。デフォルト設定では1秒→2秒→4秒→8秒→...→30秒(上限)で待機。
デフォルト設定での動作:
wait_forのみ指定でデフォルト値が適用される// デフォルト設定を使用
service "api" {
depends_on "db"
wait_for // 全てデフォルト値で待機
}
cloud up/cloud down時にDNSレコードを自動管理:
{service}-{stage}.{domain} のAレコードを自動追加dns_aliasesでCNAMEエイリアスも自動作成必要な環境変数:
CLOUDFLARE_API_TOKEN: Cloudflare APIトークンCLOUDFLARE_ZONE_ID: ドメインのZone IDCI/CDパイプラインからの自動デプロイに最適化されたコマンド:
# 基本的な使い方(デフォルトでpull)
fleet deploy -s live --yes
# pullをスキップ
fleet deploy -s live --no-pull --yes
# GitHub Actionsから
ssh user@vps "cd /app && fleet deploy -s live --yes"
オプション:
| オプション | 説明 |
|---|---|
--no-pull | イメージのpullをスキップ(デフォルトはpull) |
--yes / -y | 確認なしで実行(CI向け) |
-s / --stage | ステージ名を指定 |
デプロイフロー:
# 手動でアップデート
fleet self-update
FleetFlowは以下の命名規則でコンテナを作成します:
{project}-{stage}-{service}
例: myapp-local-db
OrbStackでは {project}-{stage} でグループ化されます。
fleetflow/
├── crates/
│ ├── fleetflow/ # CLI
│ ├── fleetflow-core/ # KDLパーサー
│ ├── fleetflow-config/ # 設定管理
│ ├── fleetflow-container/ # コンテナ操作
│ ├── fleetflow-build/ # Dockerビルド
│ ├── fleetflow-mcp/ # MCPサーバー
│ ├── fleetflow-cloud/ # クラウド抽象化
│ ├── fleetflow-cloud-sakura/ # さくらクラウド
│ └── fleetflow-cloud-cloudflare/ # Cloudflare
├── docs/
│ ├── spec/ # 仕様書
│ ├── design/ # 設計書
│ └── guide/ # 利用ガイド
このスキルは以下の場合に参照してください:
fleet.kdl 設定ファイルを作成・編集する際FleetFlow - シンプルに、統一的に、環境を構築する。