4
4

[rails7] bin/devの役割とその仕組み

Last updated at Posted at 2024-07-28

経緯

今回個人開発をする上で、新しく「rails new」 を行い「bin/dev」でローカルサーバーを立てようとした際に、下記のようなエラーが出たため、このエラーを解決するためにbin/devについて調べたのでこれをまとめます。

❯ bin/dev
zsh: no such file or directory: bin/dev

エラーの原因

railsのbinファイルにdevというファイルがない

そもそもbin/devとは?

bin/devコマンドは、Rails7においてrails sコマンドの代わりになるコマンドです。これまでrails sを実行していたタイミングで利用します。

なぜrails sではダメなのか?

理由はrails6までデフォルトでwebpackerというgemがありましたが、rails7から廃止になりました。これにより今まで自動的にできていたコードのサイズを小さくし(ミニファイ)、古いブラウザでも動くよう変換し(トランスパイル)、複数ファイルをまとめて一つにし(バンドル)、圧縮するプロセスができなくなってしまいます。

そのため、bin/devを使うことで、これらのプロセス(ミニファイ、トランスパイル、バンドル、圧縮)を適切に管理し、複数のプロセスを同時に実行することができます。これにより、開発環境で必要な全てのタスクが一括して実行され、効率的な開発が可能になります。

bin/devの仕組み

ではbin/devの中身はどうなっているでしょうか?

まずbin/devコマンドとはターミナルで実行すると、binフォルダにあるdevファイルの処理を実行することで始まります。

if ! gem list foreman -i --silent; then
  echo "Installing foreman..."
  gem install foreman
fi

exec foreman start -f Procfile.dev "$@"

このスクリプトは、Foremanがインストールされていない場合にインストールし、Procfile.devファイルを使ってForemanを起動し、定義されたプロセスを実行します。

つまり、bin/devを使用するには、Procfile.devというファイルを作成する必要があります。

touch Procfile.dev

これにより、bin/devを行うと適切に「Procfile.dev」というファイルを読み込み、その中に定義されたプロセスをForemanが実行します。

Procfile.devで設定する内容

ここで「web: bin/rails server」を設定されていることで、bin/devをするとサーバーが立ち上がるという仕組みです。

またjsやcssのビルドもここで設定できます。
これをすることでbin/devを行なった際にjsやcssをビルドすることができます。

# サーバー起動
web: bin/rails server -p 3000
js: yarn build --watch
css: yarn build:css --watch

# 各行の形式は、<プロセス名>: <コマンド>です。

まとめ

新しく「rails new」を実行し「bin/dev」でローカルサーバーを立てようとした際に、bin/devファイルが存在しないエラーが発生しました。このエラーはRails 7での変更によるもので、webpackerが廃止されたためです。bin/devは複数のプロセスを管理するためにForemanを利用し、Procfile.devに定義されたプロセスを実行します。Procfile.devを適切に設定することで、サーバー起動やJavaScript、CSSのビルドが自動的に行われ、効率的な開発が可能になります。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4