🔖

[最近の失敗]ローカル環境でRailsサーバーを起動する方法

2025/01/27に公開

開発環境バラバラ問題

諸事情により、EC2だけでなく自分のPCでローカルで開発環境を作成し、両方の環境で開発を進めている。
そのため、PumaサーバーがWindows環境で動作せず、下記エラーが出てしまった。
UNIXServerを利用している箇所がWindowsではサポートされていないことが原因らしい。

uninitialized constant Puma::Binder::UNIXServer (NameError)

先週はchatGPTに聞いて、config/puma.rbを編集したが、本番も開発も動かなくなってしまうという大事故が起きてしまったため、config/puma.rbの修正はしたくない。


解決方法

ローカル環境のみで設定を調整して、Railsサーバーを起動する方法を探す。
rails sコマンド にオプションを付けることで、Pumaのデフォルト設定を上書きして起動させる。
デフォルトでPumaが利用しようとするunix://ソケットを無視してTCPソケットを使用するよう指示できる。

rails s -b 127.0.0.1 -p 3000
  • -b はバインドアドレスを指定します(例: 127.0.0.1)。
  • -p はポート番号を指定します(例: 3000)。

URLは下記になる。

http://127.0.0.1:3000
  • 127.0.0.1はローカルホスト。
    ローカルホストは自分が使っているPCを指している。これに対応するIPアドレスが「127.0.0.1」で、どのコンピュータでも同じなので、個人情報に該当しない。
    ローカルホストにアクセスすると、そのリクエストは外部ネットワークには送信されず、自分のPC内で処理される。
  • ポート番号3000は、開発環境で一般的に使われる番号。

ポート番号について

ポート番号とは、ネットワーク通信において、特定のアプリケーションやサービスを識別するための番号。
IPアドレスが「会社の住所」だとすると、ポート番号は「各部署の郵便受け番号」に相当する。(基本情報でやったなあ)

ポート番号の範囲

ポート番号は、0から65535までの範囲で割り振られる。

  1. 0~1023:ウェルノウンポート

    • 主要なサービスやプロトコルに予約される。
    • 例:
      • 80番:HTTP(ウェブサイト用)
      • 443番:HTTPS(セキュアなウェブ通信)
      • 22番:SSH(リモート接続用)
  2. 1024~49151:登録ポート

    • 特定のアプリケーションやサービスが利用するために登録されるポート。
    • 開発者やアプリケーションが自由に使用可能。
    • 今回はこの中の「3000」を使用。
  3. 49152~65535:動的ポート

    • クライアント側が一時的に利用するポート。

ポート番号3000の用途

ポート番号3000は、一般的に開発用サーバーで利用されることが多いポート。

開発環境でよく使われる例

  • Ruby on Rails:デフォルトの開発用サーバー(Puma)のポート。
  • Node.js:デフォルトで3000を使うことが多い。
  • ReactやVue.js:開発サーバーとして3000を使用する設定がデフォルトの場合がある。

ポート番号が重要な理由

ポート番号が重要な理由は、1つのIPアドレスで複数のサービスを動かせることです。

例:サーバー上で複数サービスを動かす

  • IPアドレス:127.0.0.1
    • ポート80:ウェブサイト(HTTP)。
    • ポート443:ウェブサイト(HTTPS)。
    • ポート3000:開発中のウェブアプリケーション。
    • ポート22:SSH接続。

このように、ポート番号を使い分けることで、同じIPアドレス上で複数のサービスを同時に提供できる。


それ以外の解決方法(今回は未対応)

環境変数を利用して、Pumaの挙動を変える方法もあるらしい。

RAILS_ENV=development BIND=tcp://127.0.0.1:3000 rails s

以下はPowerShell

$env:BIND="tcp://127.0.0.1:3000"; rails s

あと、EC2サーバの環境を模倣したDockerコンテナを作成して開発する方法もあるようだけど、これはハードルが高そうなので、また今度挑戦してみる。

Discussion