目的
Rails7でbin/devコマンドでサーバーを起動させた際に、エラーが起きたのでその解決方法を共有しつつ備忘録として残します。
開発環境
- rails 7.0.4.3
- ruby 3.1.2
- Bootstrap 5.3.3
- Popper.js 2.11.8
解決方法
事の始まり
下記の記事を参考にRails7にBootstrap5を導入しました。
無事bootstrapの導入が終わって動作確認をしていた際に、application.bootstrap.scss
の変更がブラウザに反映されないことに気づきました。
これはおかしいと思って色々調べたり、試してみました。
Rails7ではbin/dev
を使う
投稿者は開発途中でrails6からrails7にアップデートしました。
アップデート後もrails s
コマンドで何も問題なくサーバーが起動されていたので、そのままrails s
コマンドを使ってました。
しかし、rails7ではbin/dev
コマンドが推奨されています。
その理由がUIを整えようとBootstrapを使い始めた際にわかりました。
bin/bevを使う事でJavaScript/CSSの変更反映や最適化を行ってくれるので、それを使っていなかった投稿者は当然
application.bootstrap.scss
の変更が反映されなかった
という事です。
application.bootstrap.scss
が反映されない根本的な原因はこれです。
bin/dev
コマンドを実行してエラーが出なければ変更がブラウザに反映されると思います。
bin/devについては下記の記事に詳しく書いてます
bin/dev
を使ってみる
ということでbin/devを使い始めたのですがエラーが発生しました。こういう新しいものを使ったり、環境構築にエラーはつきものですね。
foreman: command not found
まず出たエラーがこちら。これは簡単に直りました。
ターミナルでgem install foreman
でforemanをインストールすれば直ります。
gem install foreman
error Command "watch:css" not found
次に出たエラーがこれです。
ここでハマったのですが、ふとBootstrapを導入した際のことを思い出しました。
bootstrap導入時にrails css:install:bootstrap
を実行するとpackage.json
に下のコードが追加されます
"scripts":{
"build:css": "yarn build:css:compile && yarn build:css:prefix",
"build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds",
"build:css:compile": "sass ./app/assets/stylesheets/application.bootstrap.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules",
"build:css:prefix": "postcss ./app/assets/builds/application.css --use=autoprefixer --output=./app/assets/builds/application.css",
"watch:css": "nodemon --watch ./app/assets/stylesheets/ --ext scss --exec \"yarn build:css\""
}
投稿者は先ほど紹介したBootstrap5導入の記事のように下のように書き換えました。
これがダメだったみたいです。
"scripts":{
"build:css": "sass ./app/assets/stylesheets/application.bootstrap.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules",
}
これでbin/dev
コマンドを実行するとerror Command "watch:css" not found
のエラーが出ました。
そこで下のように修正。
"scripts":{
"build:css": "sass ./app/assets/stylesheets/application.bootstrap.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules",
"watch:css": "nodemon --watch ./app/assets/stylesheets/ --ext scss --exec \"yarn build:css\""
}
これで再度bin/dev
を実行すると無事サーバーを起動でき、application.bootstrap.scss
の変更も反映されるようになりました。
めでたし。めでたし。
間違いや補足説明があればコメントいただけると嬉しいです。