jpskill.com
🛠️ 開発・MCP コミュニティ

kamal

Kubernetesを使わずに、Dockerを使ってWebアプリケーションをVPSなどのサーバーへ、ダウンタイムなしで簡単にデプロイできるKamalを活用するSkill。

📜 元の英語説明(参考)

Deploy web applications to any server with Kamal — zero-downtime Docker deployments without Kubernetes. Use when someone asks to "deploy to a VPS", "deploy without Kubernetes", "Kamal deploy", "simple Docker deployment", "deploy Rails/Node/Python to a server", "zero-downtime deployment to bare metal", or "replace Heroku with a VPS". Covers Docker-based deployment, zero downtime with Traefik, multi-server, secrets, and accessory services.

🇯🇵 日本人クリエイター向け解説

一言でいうと

Kubernetesを使わずに、Dockerを使ってWebアプリケーションをVPSなどのサーバーへ、ダウンタイムなしで簡単にデプロイできるKamalを活用するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o kamal.zip https://jpskill.com/download/15037.zip && unzip -o kamal.zip && rm kamal.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15037.zip -OutFile "$d\kamal.zip"; Expand-Archive "$d\kamal.zip" -DestinationPath $d -Force; ri "$d\kamal.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して kamal.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → kamal フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Kamal

概要

Kamal(旧 MRSK)は、コンテナ化されたウェブアプリケーションを、VPS、ベアメタル、クラウドVMなど、あらゆるサーバーに、ダウンタイムなしで、Kubernetesの複雑さなしにデプロイします。37signals(Basecamp/HEY)によって作成され、Docker + Traefikを使用して、ローリングデプロイメント、SSL、およびロードバランシングを管理します。YAMLで一度設定し、1つのコマンドでデプロイします。

どのような時に使うか

  • VPS/ベアメタルサーバー(Hetzner、DigitalOcean、Linode)へのデプロイ
  • Kubernetesなしでダウンタイムなしのデプロイメントを実現したい
  • Heroku/Railwayからセルフホストへの移行
  • 最小限の設定でSSL、ローリングデプロイ、およびヘルスチェックが必要
  • マルチサーバーデプロイメント(異なるマシン上のウェブ + ワーカー + cron)

手順

セットアップ

gem install kamal
# または Ruby なしの場合:
docker run -it ghcr.io/basecamp/kamal:latest

# プロジェクト内で初期化
kamal init

設定

# config/deploy.yml — メインのデプロイメント設定
service: my-app
image: myuser/my-app

servers:
  web:
    hosts:
      - 167.235.1.100
      - 167.235.1.101
    labels:
      traefik.http.routers.my-app.rule: Host(`myapp.com`)
      traefik.http.routers.my-app-secure.entrypoints: websecure
      traefik.http.routers.my-app-secure.rule: Host(`myapp.com`)
      traefik.http.routers.my-app-secure.tls.certresolver: letsencrypt
  worker:
    hosts:
      - 167.235.1.102
    cmd: node worker.js

# Docker イメージレジストリ
registry:
  server: ghcr.io
  username: myuser
  password:
    - KAMAL_REGISTRY_PASSWORD

# 環境変数
env:
  clear:
    NODE_ENV: production
    PORT: 3000
  secret:
    - DATABASE_URL
    - REDIS_URL
    - SECRET_KEY

# ロードバランシング + SSL 用の Traefik
traefik:
  options:
    publish:
      - "443:443"
    volume:
      - "/letsencrypt:/letsencrypt"
  args:
    entryPoints.web.address: ":80"
    entryPoints.websecure.address: ":443"
    certificatesResolvers.letsencrypt.acme.email: admin@myapp.com
    certificatesResolvers.letsencrypt.acme.storage: /letsencrypt/acme.json
    certificatesResolvers.letsencrypt.acme.httpChallenge.entryPoint: web

# 付属品 (データベース、Redis など)
accessories:
  db:
    image: postgres:16
    host: 167.235.1.100
    port: 5432
    env:
      secret:
        - POSTGRES_PASSWORD
    directories:
      - data:/var/lib/postgresql/data
  redis:
    image: redis:7
    host: 167.235.1.100
    port: 6379

# ヘルスチェック
healthcheck:
  path: /health
  port: 3000
  max_attempts: 10
  interval: 3

デプロイ

# 最初のデプロイメント (Docker、Traefik、付属品をセットアップ)
kamal setup

# 後続のデプロイメント (ダウンタイムなしのローリング)
kamal deploy

# 特定のバージョン/タグでデプロイ
kamal deploy --version=abc123

# 前のバージョンにロールバック
kamal rollback

# ステータスを確認
kamal details

# ログを表示
kamal app logs
kamal app logs -f  # 追跡

# 1回限りのコマンドを実行
kamal app exec "node scripts/migrate.js"
kamal app exec -i "node"  # インタラクティブシェル

シークレット管理

# .kamal/secrets — 環境ファイル (git にコミットしない)
KAMAL_REGISTRY_PASSWORD=ghp_xxx
DATABASE_URL=postgresql://user:pass@db:5432/myapp
REDIS_URL=redis://redis:6379
SECRET_KEY=super-secret-key

# 1Password、AWS SSM などからのシークレット
kamal secrets extract --adapter=1password --account=myteam --from=MyApp/Production

例 1: Next.js アプリを Hetzner にデプロイする

ユーザープロンプト: "SSL とダウンタイムなしで、Next.js アプリを Hetzner VPS にデプロイします。"

エージェントは、Dockerfile を作成し、Let's Encrypt 経由で SSL 用に Traefik を使用して Kamal を設定し、ヘルスチェックを設定し、kamal setup でデプロイします。

例 2: ワーカーを使用したマルチサーバーデプロイメント

ユーザープロンプト: "ウェブアプリとバックグラウンドジョブワーカーがあります。ウェブを 2 台のサーバーに、ワーカーを 1 台にデプロイします。"

エージェントは、Kamal を個別のサーバーロール(ウェブ × 2、ワーカー × 1)、共有環境、およびウェブサーバーのローリングデプロイメントで設定します。

ガイドライン

  • 最初のデプロイメントには kamal setup — Docker をインストールし、Traefik を起動し、付属品をデプロイします
  • 更新には kamal deploy — ダウンタイムなしのローリングデプロイメント
  • ヘルスチェックは重要 — Kamal は /health が 200 を返すまでトラフィックを切り替えません
  • データベース用の付属品 — アプリケーションと一緒に管理される Postgres、Redis
  • .kamal/secrets のシークレット — deploy.yml または git には決して含めないでください
  • Traefik が SSL を処理 — 自動 Let's Encrypt 証明書
  • ロールバックは即時kamal rollback は前のコンテナに切り替えます
  • 任意の Docker イメージで動作 — Ruby/Rails だけでなく
  • マルチサーバーが組み込み — ホストを追加すると、Kamal がすべてにデプロイします
  • Kubernetes は不要 — ほとんどのアプリでは、Kamal + VPS の方がシンプルで安価です
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Kamal

Overview

Kamal (formerly MRSK) deploys containerized web apps to any server — VPS, bare metal, cloud VM — with zero downtime and no Kubernetes complexity. Created by 37signals (Basecamp/HEY), it uses Docker + Traefik to manage rolling deployments, SSL, and load balancing. Configure once in YAML, deploy with one command.

When to Use

  • Deploying to VPS/bare metal servers (Hetzner, DigitalOcean, Linode)
  • Want zero-downtime deployments without Kubernetes
  • Migrating off Heroku/Railway to self-hosted
  • Need SSL, rolling deploys, and health checks with minimal config
  • Multi-server deployment (web + worker + cron on different machines)

Instructions

Setup

gem install kamal
# Or without Ruby:
docker run -it ghcr.io/basecamp/kamal:latest

# Initialize in your project
kamal init

Configuration

# config/deploy.yml — Main deployment config
service: my-app
image: myuser/my-app

servers:
  web:
    hosts:
      - 167.235.1.100
      - 167.235.1.101
    labels:
      traefik.http.routers.my-app.rule: Host(`myapp.com`)
      traefik.http.routers.my-app-secure.entrypoints: websecure
      traefik.http.routers.my-app-secure.rule: Host(`myapp.com`)
      traefik.http.routers.my-app-secure.tls.certresolver: letsencrypt
  worker:
    hosts:
      - 167.235.1.102
    cmd: node worker.js

# Docker image registry
registry:
  server: ghcr.io
  username: myuser
  password:
    - KAMAL_REGISTRY_PASSWORD

# Environment variables
env:
  clear:
    NODE_ENV: production
    PORT: 3000
  secret:
    - DATABASE_URL
    - REDIS_URL
    - SECRET_KEY

# Traefik for load balancing + SSL
traefik:
  options:
    publish:
      - "443:443"
    volume:
      - "/letsencrypt:/letsencrypt"
  args:
    entryPoints.web.address: ":80"
    entryPoints.websecure.address: ":443"
    certificatesResolvers.letsencrypt.acme.email: admin@myapp.com
    certificatesResolvers.letsencrypt.acme.storage: /letsencrypt/acme.json
    certificatesResolvers.letsencrypt.acme.httpChallenge.entryPoint: web

# Accessories (databases, Redis, etc.)
accessories:
  db:
    image: postgres:16
    host: 167.235.1.100
    port: 5432
    env:
      secret:
        - POSTGRES_PASSWORD
    directories:
      - data:/var/lib/postgresql/data
  redis:
    image: redis:7
    host: 167.235.1.100
    port: 6379

# Health check
healthcheck:
  path: /health
  port: 3000
  max_attempts: 10
  interval: 3

Deploy

# First deployment (sets up Docker, Traefik, accessories)
kamal setup

# Subsequent deployments (zero-downtime rolling)
kamal deploy

# Deploy with specific version/tag
kamal deploy --version=abc123

# Rollback to previous version
kamal rollback

# Check status
kamal details

# View logs
kamal app logs
kamal app logs -f  # Follow

# Run one-off commands
kamal app exec "node scripts/migrate.js"
kamal app exec -i "node"  # Interactive shell

Secrets Management

# .kamal/secrets — Environment file (NOT committed to git)
KAMAL_REGISTRY_PASSWORD=ghp_xxx
DATABASE_URL=postgresql://user:pass@db:5432/myapp
REDIS_URL=redis://redis:6379
SECRET_KEY=super-secret-key

# Secrets from 1Password, AWS SSM, etc.
kamal secrets extract --adapter=1password --account=myteam --from=MyApp/Production

Examples

Example 1: Deploy a Next.js app to Hetzner

User prompt: "Deploy my Next.js app to a Hetzner VPS with SSL and zero downtime."

The agent will create a Dockerfile, configure Kamal with Traefik for SSL via Let's Encrypt, set up health checks, and deploy with kamal setup.

Example 2: Multi-server deployment with worker

User prompt: "I have a web app and a background job worker. Deploy web to 2 servers and worker to 1."

The agent will configure Kamal with separate server roles (web × 2, worker × 1), shared environment, and rolling deployment for the web servers.

Guidelines

  • kamal setup for first deploy — installs Docker, starts Traefik, deploys accessories
  • kamal deploy for updates — zero-downtime rolling deployment
  • Health check is critical — Kamal waits for /health to return 200 before switching traffic
  • Accessories for databases — Postgres, Redis managed alongside your app
  • Secrets in .kamal/secrets — never in deploy.yml or git
  • Traefik handles SSL — automatic Let's Encrypt certificates
  • Rollback is instantkamal rollback switches to previous container
  • Works with any Docker image — not just Ruby/Rails
  • Multi-server is built-in — add hosts, Kamal deploys to all
  • No Kubernetes needed — for most apps, Kamal + VPS is simpler and cheaper