SlackやTeamsなどのチャットツールは便利ですが、無料プランには機能制限があり、人数が増えるほどコストが膨らむため、長期的な運用において問題となることがあります。そのような問題を解決すべく、無料のオープンソースでセルフホストを用意すれば簡単にグループチャットが構築できる「Campfire」が公開されています。

basecamp/once-campfire: Super simple group chat, without a subscription

https://github.com/basecamp/once-campfire

ONCE - Campfire

https://once.com/campfire



◆Campfireの特徴

・ブラウザアプリのためマルチプラットフォームで利用可能

・シンプルなUI



・複数のチャットルームの作成、および参加者の限定が可能



・個人間のダイレクトメッセージ送信機能

・ファイルの共有



・通知機能

未読の投稿がある部屋やDMが届いた際は、部屋の名前やユーザー名が強調表示されます。



・Dockerのみで動作

1つのDockerイメージの中に、全てのホスト機能が含まれており、コマンド1つで起動が可能。

・TLS証明書取得

自動的にLet's EncryptのTLS証明書の取得・設定を行い、HTTPS通信ができます。オプションによりHTTP通信での利用も可能。

◆ホストサーバーの構築手順

今回はGoogle CloudのVMインスタンス上のUbuntuでDockerとRubyが利用できる環境に構築します。プロジェクトをクローンし、作成されたディレクトリに移動。


git clone https://github.com/basecamp/once-campfire.git
cd once-campfire


イメージを作成するため、以下のコマンドを実行。


docker build -t campfire .


.envファイルを作成し、環境変数を設定。


# openssl rand -hex 64で生成した値をSECRET_KEY_BASEに設定してください。
SECRET_KEY_BASE=【xxxxxxxxxxxxxxx】

# VAPID_PUBLIC_KEYとVAPID_PRIVATE_KEY用のキーを生成。
# bundle install
# ruby script/admin/create-vapid-key
# で生成された値をVAPID_PUBLIC_KEYとVAPID_PRIVATE_KEYに設定してください。
VAPID_PUBLIC_KEY=【9gVIi2...】
VAPID_PRIVATE_KEY=【ICaFE...】

# チャット用のドメインを割り当ててください
TLS_DOMAIN=【チャット用のドメイン】


コンテナを起動。


docker run \
--env-file .env \
--publish 80:80 --publish 443:443 \
--restart unless-stopped \
--volume campfire:/rails/storage \
campfire


◆チャットの管理者登録とユーザーの招待

ブラウザで設定したチャット用のドメインにアクセスすると、管理者アカウントの作成画面が表示されるので、「Name」に任意の名前、「Email address」にメールアドレス、「Password」にパスワードを入力し「右矢印」ボタンをクリック。



チャット画面が現れ、招待用のリンクが表示されるので、リンクをコピーしてチャットに参加させたい人へ送信します。



受け取った人が招待用のリンクにアクセスすると登録画面が表示されるので「Name」に任意の名前、「Email address」にメールアドレス、「Password」にパスワードを入力して「右矢印」ボタンをクリックしアカウントを作成。



自動的にチャットルームへのログインが行われチャットに参加できました。



なお、公式サイトの利用者からのコメントによると、Campfireは2025年9月まで有償プロダクトとして提供されていたため「Ruby on Rails」のコードを学ぶ目的で購入したエンジニアもいたとのこと。教材としても利用できるスクリプトを無料で公開するのは、ユーザーにとっても開発者にとってもメリットがあります。