すでにメンバーの場合は

無料会員登録

GitHubアカウントで登録 Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

登録がまだの方はこちらから

Pikawakaにログイン

GitHubアカウントでログイン Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

Rails

【Rails】 rails server(rails s)の便利な使い方とは?

ぴっかちゃん
ぴっかちゃん

rails severコマンドを実行すると、開発用のPC上でWebブラウザを経由してRailsアプリケーションにアクセスすることができます。

次の動画のように、ターミナルでrails serverを実行します。

そして、ブラウザを立ち上げてhttp://localhost:3000にアクセスすると、Railsアプリケーションが動作します。

rails serverを実行する様子

このコマンドを実行するだけで、Railsアプリケーションを起動することができるので簡単ですね。rails serverコマンドには、他にも便利な使い方が沢山あるので1つ1つ整理しながら学んでいきましょう。

rails serverコマンドの使い方

この章では、rails serverコマンドは「何をすることができるのか、基本的な使い方、オプション」について解説します。

何をすることができるのか?

Railsには、標準でPumaというWebサーバが付随しています。

rails serverを実行すると、次の画像のようにPumaが起動し、ブラウザ経由でアプリケーションにアクセスすることが出来るようになります。

rails serverコマンドを実行すると起動されるもの

このサーバ自体は、開発用のPC上に作られたものです。外部に公開しているわけではないので、他のPCからブラウザ経由でアプリケーションにアクセスすることはできません。

また、Pumaはデフォルトで3000番ポートを使用するので、現在使用しているシステムを表すlocalhostを使ってhttp://localhost:3000でアプリケーションにアクセスできます。

localhost:3000にアクセスできる様子

上記の画像のように、コマンド実行前はWebブラウザでhttp://localhost:3000を開いてもアプリケーションにアクセスすることはできませんでしたが、コマンド実行後にはアクセスすることができています。

Webサーバを起動する

サーバを起動するには、ターミナルで起動させたいアプリケーションのディレクトリに移動して、次のコマンドを実行します。

ターミナル | ローカルのWebサーバを起動する
1
rails server

上記のserverは、別名(エイリアス)としてsが付けられているので、次のコマンドでも同じようにWebサーバを起動することができます。

ターミナル | エイリアスを使ってコマンドを実行する
1
rails s

コマンドを実行してからサーバの起動までは、次の動画のように少し時間がかかります。

Use Ctrl-C to stopまで表示されたら起動完了するので、Webブラウザを立ち上げてhttp://localhost:3000を開くと、アプリケーションにアクセスできます。

ローカルwebサーバ立ち上げ

次の章からrails serverではなく、rails sで統一させていただきます。

ログの出力を確認する

rails sを実行したターミナルでは、WebブラウザからWebサーバにリクエストを送信し、レスポンスが返るまでのログが出力されます。

次の動画は、http://localhost:3000にアクセスした時に出力されたログです。

リクエスト送信からレスポンスまでのログを確認

Webサーバを起動したターミナルには、Webブラウザが「http://localhost:3000の情報が欲しい!」と送信したリクエストやWebサーバのレスポンス、どのVeiwファイルがレンダリングされたかなどのログが出力されます。

ログを見やすくする

ターミナルに出力されるログは連続して出力されるので、確認したいリクエストがあるときは、ターミナルを改行してからリクエストを送信すると見やすくなります。

次の動画のようにターミナルで改行をします。

ターミナルを改行する

改行すると、次の画像のように前回のリクエストで出力されたログとカーソルとの間が開いている状態になります。

ターミナルで改行した部分

この状態で、Webブラウザで確認したいリクエスト(http://localhost:3000/users)を送信します。

確認したいリクエストを送信する

リクエスト送信後にターミナルに戻ると、次の動画のように改行した後に送信したリクエストのログが出力されるので確認しやすくなっていますね。

新しく送信したリクエストを確認する

ログが出力されるファイル

このログはターミナルだけではなくlog配下のファイルにも出力されます。

log配下のファイルにログが出力される

rails sを実行すると、デフォルトでは開発環境でサーバが起動されるので、ログはlog/development.logに出力されます。

デフォルトでは開発環境でサーバ起動

個人の開発環境のログなどは、gitにあげる必要がないものなので、gitignoreに入れてない人はgitignoreに入れるようにしましょう。(gitignoreの書き方を参考にして下さい)

また、コマンドを実行したターミナルはログが出力され続けるため、コマンドを打つことができません。この場合は一度サーバを停止する必要がありますが、そのたびに「サーバ停止→サーバ起動」の手順を踏むのは煩わしいですよね。

そのため次の動画のように右クリックか⌘(command) + tで、コマンドを打てる状態の別タブを開いておくと便利です。

別タブを開く

サーバを停止する

サーバを停止するには、ターミナルで⌃(control) + cを実行して下さい。

⌃(control) + cを実行してサーバを停止した後は、次の動画のようにアプリケーションにアクセスできなくなります。

サーバを停止してアプリケーションにアクセスできない様子

また、サーバをきちんと停止せずに別タブのターミナルでrails sを実行した場合は、当然サーバは既に起動されているので立ち上がりません。

サーバ起動中にrails sコマンドを実行した場合

上記の画像では、タブ1のターミナルでサーバ起動中にタブ2のターミナルでrails sを実行した場合の結果です。

サーバを停止する前にターミナルを閉じた場合の対処法

サーバを停止する前にターミナルを閉じてしまうと、⌃(control) + cを実行してもサーバを停止することが出来なくなります。その場合は、ターミナルでサーバが動いているプロセスを終了させる必要があります。

  1. サーバが動くプロセスのIDを調べる
  2. プロセスのIDを指定して、プロセスを終了させるコマンドを実行する

プロセスのIDを調べる方法は色々ありますが、今回はlsof -i:ポート番号を使います。
ポート番号は、デフォルトで3000番が使用されるので次のように指定します。

ターミナル | 指定したポート番号でオープンしているファイルを表示する
1
2
# lsof -i:ポート番号
lsof -i:3000

ターミナルでこのコマンドを実行すると、次の画像のように表示されます。

lsofコマンドの実行結果

サーバが動いているプロセスのID(PID)は、COMMANDがGoogleの方ではなくrubyの3191です。(このPIDは固定の番号ではなく、その都度違う番号が割り当てられます。)

そして、サーバのプロセスを終了させるために次のコマンドを実行します。

ターミナル | サーバが動くプロセスを終了する
1
2
# kill -9 プロセスID
kill -9 3191

このコマンドを実行すると、次の動画のようにターミナルを閉じた後も動いていたサーバを停止することができます。

プロセスを終了させてサーバを停止する

オプションを使う

rails serverコマンドには、次のようにオプションを指定することが出来ます。

ターミナル | オプションを指定してサーバを起動する
1
2
rails server [オプション]
rails s [オプション] #同上

環境を指定する

環境を指定してサーバを起動するには、-environment [環境名]を付けます。

ターミナル | サーバの環境を指定して起動する
1
2
rails s -environment [環境名]
rails s -e [環境名] #同上

デフォルトでは開発環境としてサーバが起動しますが、本番環境やテスト環境としてサーバを起動したい場合は、次のコマンドを実行します。

ターミナル | 本番環境、テスト環境としてサーバを起動する
1
2
rails s -e production #本番環境として起動する
rails s -e test # テスト環境として起動する

次の画像は、rails s -e productionを実行した結果です。

production環境としてサーバを起動

Environment: developmentとなっているので、本番環境としてサーバを起動することが出来ていますね。

ポート番号を変更する

デフォルトで使用されるポート番号は、3000番です。
このポート番号を変更するには、次のように-port [ポート番号]を付けます。

ターミナル | ポート番号を指定して起動する
1
2
rails s -port [ポート番号]
rails s -p [ポート番号] #同上

3001番のポートに変更してサーバを起動するには、次のコマンドを実行します。

ターミナル | 3001番にポートを指定してサーバを起動する
1
rails s -p 3001

ポート番号を変更してサーバを起動するのは、同じ開発用のPC上で複数のプロジェクトを開発する時に便利です。次の動画では3000番と3001番のポートを使用して、2つのアプリケーションを起動しています。

同じ開発環境で複数のプロジェクトのサーバを立てる

もし、既に指定したポート番号が使用されている場合は、次の画像のようにA server is already runningと表示されてサーバの起動ができないので注意して下さい。

既に同じポート番号を指定した場合

ポートを開放する

ポートの開放は、サーバ起動の際に-b 0.0.0.0をつけて実行します。実行後は、同じLAN内にある他のコンピュータから開発用PCのIPアドレス:3000でアクセスができます。

ターミナル | ポートを開放する
1
rails s -b 0.0.0.0

通常rails sを実行しても、http://localhost:3000にアクセスできるのは開発用PCのみで、同じLAN内でも他のコンピュータ(PC・スマホ)からアクセスすることはできません。

通常時は同じLAN内であってもローカルサーバにアクセスできない

しかし、ポートを開放すれば開発用PCと同じLAN内にある他のコンピュータ(PC・スマホ)からも開発用PCのIPアドレス:3000でRailsアプリケーションにアクセスが出来ます。

ポート開放後に同じLAN内のコンピュータからアクセスすることができる

Windowsなど他のOSやモバイルの表示確認をインターネットで接続できるサーバにデプロイすることなく、開発環境で行えるので大変便利です。

デーモンとしてサーバを起動する

デーモンとしてサーバを起動するには、-daemonをつけてコマンドを実行します。

ターミナル | デーモンでサーバを起動する
1
2
rails s -daemon
rails s -d #同上

上記のコマンドを実行すると、次の動画のようにターミナルではログが出力されませんが、Webブラウザではアプリケーションにアクセスすることができています。

デーモンでサーバを起動させた場合

このようにデーモンでサーバを起動すると、画面の裏側(バックグラウンド)で動くようになります。コマンド実行後もターミナルがそのまま使えるので便利ですね。

デーモンで起動したサーバを終了するには、次のコマンドを実行します。

ターミナル | デーモンとして起動したサーバを終了する場合
1
2
# アプリケーションのディレクトリに移動して以下を実行する
kill `cat tmp/pids/server.pid`

次の動画のように、コマンドを実行するとアプリケーションにアクセスすることができなくなります。

デーモンとして起動したサーバを終了する

ログを確認する場合は、log配下にあるログが出力されるファイルをみてください。

オプションのまとめ

ここまで解説したオプションは、次の表の通りです。

オプション 説明
rails s -e [環境名] 環境を指定してサーバを起動する
rails s -p [ポート番号] ポート番号を変更する
rails s -b 0.0.0.0 ポート開放を行う
rails s -d デーモンでサーバを起動する

この記事のまとめ

  • rails severコマンドを実行すると、開発用のPC上でWebブラウザを経由してRailsアプリケーションにアクセスできる
  • 開発を進めながら動作を確認したいときに便利!
  • アプリケーションにアクセスできるのは、開発用のPCのみで外部からはできない