経緯
今回個人開発をする上で、新しく「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のビルドが自動的に行われ、効率的な開発が可能になります。