Claude Code Plugins

Community-maintained marketplace

Feedback

FleetFlow(KDLベースのコンテナオーケストレーションツール)を効果的に使用するためのガイド

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

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 バージョン表示

詳細: reference/cli-commands.md

設定ファイル構造

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
}

詳細: reference/kdl-syntax.md

重要な仕様

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 など)

タグ解決の優先順位:

  1. --tag CLIオプション
  2. KDL設定の image フィールドのタグ
  3. デフォルト: 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 ステージ名を指定

デプロイフロー:

  1. 既存コンテナを強制停止・削除
  2. 最新イメージをpull(--no-pullでスキップ可能)
  3. コンテナを依存関係順に作成・起動
  4. 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/                     # 利用ガイド

詳細: reference/architecture.md

スキルの起動タイミング

このスキルは以下の場合に参照してください:

  • プロジェクトにFleetFlowを導入する際
  • fleet.kdl 設定ファイルを作成・編集する際
  • コンテナ環境の構築・管理を行う際
  • ローカル開発環境のセットアップ時
  • クラウドインフラを宣言的に管理する際

リファレンス

外部リンク


FleetFlow - シンプルに、統一的に、環境を構築する。