docker-composeは決まった形式でプロセスの起動方法を書けるので便利ですが、
手元のPCに開発環境を作る場合など、
プロセスの起動管理をしたいだけの時は、docker前提だとtoo-muchで扱いにくい事も多いです。

調べてみるとdocker前提で無くdocker-composeライクに起動管理するツールがありました。

Process Compose | GitHub
https://github.com/F1bonacc1/process-compose

本エントリでは、このツールの使い方をRailsの開発環境構築を例に紹介します。
DBMSにMySQL、SideKiqとRedisの起動も設定します。

試した環境は以下の通りです。

  • ubuntu 20.04 (WSL)
  • ruby 3.1.2p20
  • Rails 7.0.4.3

Process Composeのインストール

Process Composeのインストールは、
GitHubのリリースから該当するOSのバイナリをダウンロード・展開・適当なディレクトリに配置でOKです。

Releases | Process Compose | GitHub
https://github.com/F1bonacc1/process-compose/releases

例えば、以下のような手順になります。
Version/OS/インストール先は適切なものに置き換えてください。

wget https://github.com/F1bonacc1/process-compose/releases/download/v0.43.1/process-compose_0.43.1_Linux_x86_64.tar.gz
tar zxf process-compose_0.43.1_Linux_x86_64.tar.gz
cp process-compose $HOME/bin

以下のコマンドでヘルプが表示できていれば、インストール完了です。

process-compose --help

MySQLのセットアップ

MySQLは以下からダウンロードしたものを利用します。

MySQL Community Downloads
https://dev.mysql.com/downloads/mysql/

ここでは、次の条件で取得したファイルを使用します。

  • Operating System: Linux - Generic
  • OS Version: Linux - Generic (glibc 2.12)(x86, 64-bit)

例えば、以下のような手順になります。
Version/OS/インストール先は適切なものに置き換えてください。

cd $HOME/opt
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
tar Jxf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz

以下のコマンドでバージョンが表示できていれば、完了です。

$HOME/opt/mysql-8.0.33-linux-glibc2.12-x86_64/bin/mysql --version

Redisのセットアップ

Redisは以下の手順でセットアップします。

Install Redis from Source | redis.io
https://redis.io/docs/getting-started/installation/install-redis-from-source/

上記サイトの内容と同じですが、以下のようなコマンドです。

cd $HOME/opt
wget https://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make

以下のコマンドでバージョンが表示できていれば、完了です。

$HOME/opt/redis-stable/src/redis-server --version

Railsアプリの作成

それでは、Railsアプリを作っていきます。

アプリの作成

railsコマンドがインストールされているRuby環境で、以下のコマンドを実行します。
DBMSはmysqlとして作成します。

rails new process-compose-study --database=mysql --skip-bundle
cd process-compose-study
bundle install --path vendor/bundle

DBの作成と設定追加

db/mysql配下に、本アプリ用のDBファイルを作成します。

mkdir db/mysql
echo "db/mysql" >> .gitignore
$HOME/opt/mysql-8.0.33-linux-glibc2.12-x86_64/bin/mysqld --initialize-insecure --datadir=$(pwd)/db/mysql

config/database.ymlにsocketの設定を追加します。

development:
  <<: *default
  database: process_compose_study_development
  socket: /tmp/mysql.sock

Sidekiqの設定追加

以下のように、sidekiqのGemを追加します。

echo "gem 'sidekiq', '<8'"  >> Gemfile
bundle install --path vendor/bundle

config/initializers/sidekiq.rbを追加してSidekiqの設定を記載します。

Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://127.0.0.1:6379' }
end
  
Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://127.0.0.1:6379' }
end

Process Composeの導入

それでは、Process Composeを導入します。

作成したRailsアプリで起動が必要なプロセスは以下の4つです。

  • mysqld
  • redis-server
  • rails webサーバ
  • sidekiqプロセス

ファイルの準備

process-compose.yamlを追加して、以下の内容を記載します。

記載ルールは、Process ComposeのREADMEに書いてありますが、
docker-composeを使ったことがある人は、なんとなく分かると思います。

version: "0.5"

processes:
  rails:
    command: bundle exec rails s
  sidekiq:
    command: bundle exec sidekiq
    depends_on:
      redis:
        condition: process_healthy
  mysqld:
    command: $MYSQL_HOME/bin/mysqld --datadir=$(pwd)/mysql-data
    shutdown:
      command: $MYSQL_HOME/bin/mysqladmin -u root shutdown
    readiness_probe:
      exec:
        command: $MYSQL_HOME/bin/mysqladmin -u root ping
  redis:
    command: $REDIS_HOME/redis-server
    readiness_probe:
      exec:
        command: $REDIS_HOME/redis-cli ping

.envファイルを追加して、MySQLとRedisのインストール先を記載しておきます。

MYSQL_HOME=※略※/opt/mysql-8.0.33-linux-glibc2.12-x86_64
REDIS_HOME=※略※/opt/redis-stable/src

実行

次のように起動します。

process-compose

オプション無しで起動すると、次のような画面が表示されます。
プロセスを選んで、画面下側のキー(F7,F9,Ctrl-R等)を押すことで起動制御できます。

process-compose-1

「-t=false」オプションをつけて起動すると、
docker-compose upと同じように標準出力にログが表示され、Ctrl-Cで終了させるようにも出来ます。

process-compose -t=false

試してないですが、 コマンドライン、REST APIによるプロセス操作も可能なようです。

Railsアプリへのアクセス

Railsアプリ用のデータベースもを作成して居なかったので、
mysqldが起動している状態で以下のコマンドを入力し、DBを作成します。

$HOME/opt/mysql-8.0.33-linux-glibc2.12-x86_64/bin/mysql -u root 
> create database process_compose_study_development;

http://localhost:3000/からRailsアプリにアクセスします。

さいごに

docker-composeを使う場合に比べると、
コンテナによる不必要な複雑さから解放されるメリットは大きいのかなと思います。

このエントリでは、ミドルウェア類を開発PCにセットアップする流れで説明しましたが、
セットアップの手間を嫌うのであれば、ProcessComposeからdocker runしてコンテナ利用でも良いと思います。

以上。