Precena Tech Book
コーポレートサイト採用サイト
  • はじめに
  • ソフトウェア開発
    • 開発環境構築
      • Homebrew
        • Homebrew用語の意味
      • ngrok
        • ngrokの導入
        • ngrokのアップグレード(v2 to v3)
      • Slack
        • Slackの/remind コマンドの形式
        • 対面での相談を気軽にするためのSlack設定
      • AWS CLI
      • Ruby
      • Scala
      • Prettier
      • zsh
        • zsh-completion
      • Mac
        • M1 Macでの開発環境構築(rosetta 無し)
    • バックエンド
      • OpenAPI
        • OpenAPI 定義ファイル分割のすゝめ
      • Ruby on Rails
        • ActiveRecordのfind_or_initialize_byメソッドにブロックを渡したときの挙動
        • Railsのアプリケーションサーバーのプロセス数とスレッド数の設定方法
        • Railsを6.1系から7.0系へアップグレードした時に調査したこと
        • schema.rbで差分が発生する事例とその復旧について
        • tmux + overmind を利用して、複数システムを1コマンドで起動できるよう設定する
        • Rails Migrationチートシート
        • GithubのプライベートリポジトリをGemfileで参照する方法
        • ActiveSupportのto_jsonメソッドの注意点
        • 危険なJSON出力を禁止するRuboCopカスタムルールの作成方法
      • Scala
        • Validated を直列に処理したい
      • DB
        • PostgreSQLにおける、削除行に対するロック獲得時の挙動
    • フロントエンド
      • React
        • Storybookを利用したビジュアルリグレッションテスト
  • インフラ開発
    • AWS
      • IAM
        • スイッチロールの設定手順
        • AWS CLIでのスイッチロールの設定手順
        • AWS Vaultを使ったスイッチロール設定手順
        • Github ActionsでIAMロールを利用してAWSリソースを操作する
      • ECS
      • SES
        • AWS SESメールボックスシミュレーターにて、カスタムヘッダや添付ファイル付きのテストEメールを送信する
      • CloudWatch
        • Amazon SNS + Slack Workflowを使って、CloudWatch Alarmの通知をSlackチャンネルへ投稿する
      • Lambda
        • lambrollでAWS Lambda関数をデプロイしたときのTips
    • Heroku
      • HerokuのStackの設定
      • Heroku Postgresの運用でよく使うコマンド集
  • セキュリティ
    • Web
      • Same Origin PolicyとCORS
      • 脆弱性診断 2社同時依頼実施記録
  • Mail
    • SPF、DKIM、DMARCを使用した迷惑メール対策
  • データ分析
    • データ分析プロセス
  • SaaS
    • Zendesk
      • 問い合わせフォームの項目をサービスごとに出し分け、各サービス担当者に自動で振り分けてメールで通知する
  • イベント
    • RubyKaigi
      • RubyKaigi 2023 に現地参加しました
    • EMConf
      • EMConfJP2025_参加レポート
  • やってみた
    • IoT
      • Raspberry Pi + PaSoRi + Python で、勤怠打刻マシンを作ってみた
  • Precena Tech Book 管理
    • コンテンツ執筆時のルール
  • 関連リンク
    • プレセナエンジニア公式Twitter
GitBook提供
このページ内
  • はじめに
  • 前提となる環境について
  • システム全体の構成について
  • ディレクトリ構成について
  • 用語について
  • tmuxとは
  • overmindとは
  • チュートリアル
  • tmux + overmind でシステム全体を起動できるようにする
  • 1つのプロセスをtmuxの別ペインで表示する
  • RubyMineにて、overmindで起動したプロセスのデバッグを行う
  • まとめ

役に立ちましたか?

PDFとしてエクスポート
  1. ソフトウェア開発
  2. バックエンド
  3. Ruby on Rails

tmux + overmind を利用して、複数システムを1コマンドで起動できるよう設定する

はじめに

当社のRailsシステム間連携では、各システムで公開しているWeb APIを使っています。

今までは各システムを bin/rails s で起動し、開発を行ってきました。

ただ、 連携するシステムが増えたり、各システムで使うジョブワーカーが増えたりした結果、現在では各システムを起動する手間が増えてきました。

そこで、今後も効率的に開発できるよう、以下の設定を行いました。

  • tmux + overmind にて、連携する各システムやワーカーを1つのコマンドで起動できるようにした

  • RubyMine にて、 overmind で起動したプロセスにアタッチし、デバッグできるようにした

この記事では、複数システムを1コマンドで起動できるようにするために、 tmux + overmind + RubyMine にてどのような設定をしたか、チュートリアル形式で共有します。

前提となる環境について

システム全体の構成について

このチュートリアルでは、以下のシステム構成とします。

  • mac上で、2つのRailsシステム(frontend_appとbackend_app)を開発している

    • frontend_app について

      • 外部からのHTTPリクエストを受け付ける

      • Delayed::Job でジョブを管理している

        • bin/rails jobs:work にて Delayed::Job Worker を起動する

  • 各Railsシステムは、ローカルマシン上での bin/rails s 実行により起動する

  • 各Railsシステムは、データベースを適切に設定している

ディレクトリ構成について

次の図のように、overmind ディレクトリの中に frontend_app と backend_app という2つのRailsシステムのリポジトリがあるものとします。

overmind/
├── backend_app/
│   ├── app/
│   ├── bin/
│   ...
└── frontend_app/
    ├── app/
    ├── bin/
    ...

用語について

tmuxとは

terminal multiplexer と呼ばれるソフトウェアのうちの1つです。

1つのターミナルの画面を、複数に分割して利用します。

overmindとは

Herokuで使う Procfile と同じ書式で定義することで、定義したプロセスを管理できます。

チュートリアル

tmux + overmind でシステム全体を起動できるようにする

tmux + overmind をセットアップする

% brew install tmux

% brew install overmind

tmuxの設定を行う

tmuxはデフォルト設定のままでも問題なく使えます。

ただ、慣れないうちはマウス操作はできたほうが便利なため、 tmux の設定を追加します。

~/.tmux.conf ファイルを追加し、以下を記載します。

set-option -g mouse on

Procfileを作成する

チュートリアルのルートディレクトリである overmind に、ファイル Procfile を作成します。

Procfile には、各Railsシステムやジョブワーカーを起動する時のコマンドを記載します。

なお、ワーキングディレクトリを考慮するため、 && を使ってコマンドをチェーンしています。

# frontendの設定
frontend_app: cd frontend_app && bin/rails s -b 0.0.0.0 -p 3030
frontend_worker: cd frontend_app && bin/rails jobs:work

# backendの設定
backend_app: cd backend_app && bin/rails s -b 0.0.0.0 -p 3031

tmuxにてovermindを起動する

macのターミナルから tmux を起動します。

% tmux

次に、 Procfile のあるディレクトリに移動し、overmind にて各プロセスを起動します。

% overmind s

tmux の画面では、 Procfile で定義した各プロセスの様子が表示されています。

動作確認

外部からのHTTPリクエストを受け付ける frontend_app に対し、 curl でアクセスします。

すると、 frontend_app からJSONレスポンスが返ってきます。

% curl http://localhost:3030/shops
{"shop":{"name":"スーパーマーケット","apples":[{"name":"シナノゴールド"},{"name":"シナノスイート"},{"name":"秋映"}]}}

tmuxを見ると、各システムやジョブワーカーが連携し、JSONレスポンスを返したことが分かります。

動作確認ができたため、いったん Ctrl + C にて overmind での実行を停止します。

1つのプロセスをtmuxの別ペインで表示する

現在はtmuxの1つのペインに、 Procfile で起動したすべてのプロセスのログが表示されています。

ただ、この状態のままでは各プロセスのログを追いづらいです。

そこで、別ペインで表示するよう設定します。

このチュートリアルでは、ウィンドウを上下ペインに分けます。

上ペインはここまで通り overmind のログを表示します。

一方、下ペインでは backend_app のログのみを表示するようにします。

別ペインで表示するための準備

以下の準備を行います。

  • tmuxで Ctrl + b + " を入力し、水平ペインを開く

  • 上ペインにて、以下の操作を行う

    • overmind s を実行し、各システム・ワーカーを起動する

  • 下ペインにて、以下の操作を行う

    • Procfile のあるディレクトリに移動する

    • overmind connect backend_app を実行し、overmindで実行している backend_app のプロセスに接続する

動作確認

再びcurlで frontend_app にアクセスしてみます。

すると、上ペインでは、各システム・ワーカーのログが出力されています。

一方、矢印部分の下ペインでは、 backend_app のログのみ表示されています。

RubyMineにて、overmindで起動したプロセスのデバッグを行う

今までの操作にて、各システム・ワーカーを overmind s だけで起動できるようになりました。

ただ、何か不具合があった時には、各システムをデバッグしたくなるかもしれません。

もしRubyMineを使っている場合は、 overmind で起動したプロセスにアタッチ・デバッグできます。

このチュートリアルでは、RubyMineを使って backend_app のプロセスにアタッチしてみます。

RubyMineでの設定

以下の順番で設定を行います。

  • RubyMineにて、プロセスにアタッチしたいシステムのリポジトリを開く

    • このチュートリアルでは backend_app リポジトリを開きます。

  • RubyMineのメニューにて、 Run > Attach to Process を選択する

  • 実行しているプロセスが表示されるため、 backend_app のプロセスを選択する

    • 下部のイメージ参照

  • RubyMineでブレークポイントを設定する

以上で、デバッグの準備が整いました。

動作確認

curlで frontend_app にアクセスしてみます。

すると、RubyMineで設定したブレークポイントで停止します。

実行時の各変数の内容も表示され、デバッグできていることが分かります。

まとめ

tmux + overmind を利用して、連携する一連のシステムやワーカーを起動できるようにしたことにより、より開発を効率的に行うことができるようになりました。

今後も開発を効率的に行う方法をTechBookにて共有していこうと思います。

前へschema.rbで差分が発生する事例とその復旧について次へRails Migrationチートシート

最終更新 2 年前

役に立ちましたか?

Procfile ベースのプロセスマネージャーです ()。

参考:

に従い、 tmux と overmind をインストールします。

参考:

参考:

参考:

本サイトの更新情報は、で発信しています。ご確認ください。

Githubリポジトリ
The Procfile | Heroku Dev Center
overmindのREADME
foreman - Procfile start processes in their own working directory - Stack Overflow
overmindの公式ドキュメント
Attach to process | RubyMine
Twitterの株式会社プレセナ・ストラテジック・パートナーズエンジニア公式
overmind s した時の様子
JSONレスポンス返した時の各システムの様子
下ペインには backend_app のログのみ表示される
プロセス選択の様子
overmindで起動したプロセスをデバッグできた