| name | fleetflow |
| description | FleetFlow(KDLベースのコンテナオーケストレーションツール)を効果的に使用するためのガイド |
| version | 0.4.2 |
FleetFlow スキル
FleetFlowをプロジェクトで効果的に活用するための包括的なガイドです。
エイリアス
fleetflow/flow/ff
概要
FleetFlowは、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自動管理用) |
CLIコマンド一覧
すべてのコマンドは -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フィールドは必須
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> |
両方をマージ(後の定義が優先) |
Dockerビルド機能
規約ベースの自動検出と明示的指定の両方に対応:
// 規約ベース: ./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標準の
~/.docker/config.jsonから認証情報を取得 - credential helper(osxkeychain, desktop など)も自動対応
- 環境変数
DOCKER_CONFIGでパスをカスタマイズ可能
対応レジストリ:
- Docker Hub (docker.io)
- GitHub Container Registry (ghcr.io)
- Amazon ECR (.dkr.ecr..amazonaws.com)
- Google Container Registry (gcr.io)
- プライベートレジストリ (localhost:5000 など)
タグ解決の優先順位:
--tagCLIオプション- KDL設定の
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 |
明示的に停止されない限り再起動(推奨) |
依存サービス待機(Exponential Backoff)
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秒(上限)で待機。
デフォルト設定での動作:
- 最大約23回のリトライで約7分間の待機が可能
wait_forのみ指定でデフォルト値が適用される
// デフォルト設定を使用
service "api" {
depends_on "db"
wait_for // 全てデフォルト値で待機
}
DNS自動管理(Cloudflare)
cloud up/cloud down時にDNSレコードを自動管理:
- サーバー作成時:
{service}-{stage}.{domain}のAレコードを自動追加 - サーバー削除時: DNSレコードを自動削除
dns_aliasesでCNAMEエイリアスも自動作成
必要な環境変数:
CLOUDFLARE_API_TOKEN: Cloudflare APIトークンCLOUDFLARE_ZONE_ID: ドメインのZone ID
CI/CDデプロイ(deployコマンド)
CI/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 |
ステージ名を指定 |
デプロイフロー:
- 既存コンテナを強制停止・削除
- 最新イメージをpull(--no-pullでスキップ可能)
- コンテナを依存関係順に作成・起動
- wait_forによる依存サービス待機
セルフアップデート
# 手動でアップデート
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
├── spec/ # 仕様書
├── design/ # 設計書
└── guides/ # 利用ガイド
スキルの起動タイミング
このスキルは以下の場合に参照してください:
- プロジェクトにFleetFlowを導入する際
fleet.kdl設定ファイルを作成・編集する際- コンテナ環境の構築・管理を行う際
- ローカル開発環境のセットアップ時
- クラウドインフラを宣言的に管理する際
リファレンス
外部リンク
FleetFlow - シンプルに、統一的に、環境を構築する。