RubyのデプロイツールKamalがすごく便利

ここ数年はRailsアプリを書いてなかったので知らなかったけど、今のRailsはKamalという、とても便利なデプロイツールを備えていることを知った。

github: basecamp/kamal
公式サイト

Kamalはもともとは Ruby on Rails のために作られたデプロイツールらしいけど、今はDockerコンテナとしてデプロイする任意のプロジェクトで使えるらしい。

Kamalがやってくれること

  1. 任意のプロジェクトで kamal deploy を実行すると、
  2. Dockerイメージを生成
  3. 生成したDockerイメージをDockerHubなどのレジストリに登録
  4. デプロイ対象のUbuntuサーバー上で、Dockerイメージをダウンロードして起動
  5. Ubuntuサーバー上ですでに起動しているDockerコンテナがあったら無停止で新しいコンテナに入れ替え
    • 入れ替え前に正常性チェックをして(デフォルトで /up にアクセス)、正常と判断されると入れ替え実施
  6. SSL/TLS証明書の発行と更新

だいたいこんな感じだと思う。

Kamalがやってくれないこと

KubernetesやFargateがやるような、「停止したら自動再起動」みたいなことはやってくれません。
Kamalはあくまでデプロイツールであって、運用基盤ではないです。

Kamalがあってるプロジェクト

Kamalはいわゆるオーケストレーションをしてくれるツールではなく、あくまでDockerイメージの生成と、対象サーバーへのデプロイツールです。
なので、数百台規模でオーケストレーションするようなシステムのデプロイには多分合わないんじゃないかなーと思います。
しかし、社内向けサーバーや個人開発のWebアプリ、数台規模のシステムであれば十分に機能するし、むしろシンプルで向いていると思います。

ちなみに当サイトもKamalでデプロイしてるんですよ。

Kamalの使い方

最新の Ruby On Rails 8.1系であればKamalは標準で入っています。

事前準備

  1. デプロイ先のUbuntuサーバーにSSHログインできる状態にする。
  2. DockerHubなどのレジストリにログインし、レポジトリを作る(PrivateでOK)
  3. DNSに名前を登録する(サーバーのグローバルIPアドレスと名前のレコードを登録)
  4. config/deploy.yml に諸々設定

デプロイの事前準備

最初だけ以下を実行

$ ./bin/kamal setup

デプロイ

セットアップが終わったら

./bin/kamal deploy

で、対象サーバーへのデプロイが終わります。
Ubuntuサーバーへのデプロイに rootユーザーを使うか一般ユーザーを使うか、みたいな問題はあるけど、最初はあまり考えずにrootでいいんじゃないかと思います。
デプロイが終わったらDNSに登録した名前でアクセスしてみましょう。
SSL/TLS証明書の登録も正常に終わってれば https://~でアクセスできるはずです。

こういう手軽でしっかりしたデプロイツールが搭載されていると非常に助かりますね。
今後はプライベート、仕事のいずれでも Ruby On Rails のプロジェクトでは使っていこうと思います。

© 2025 Hiroe Tech Notes. All rights reserved.

コメント

まだコメントはありません。