こんにちは。株式会社Lize 木村です。

さて、先日ちょっと頂いた質問のついでに、Railsのwebpackを触っていたのですが、本当に辟易するようなトラブルが出てしまいます。

事の発端は、webpackでの JQuery Bootstrap の導入だったのですが、過去何度も確認していたのに、なぜかワーニングが出てしまい・・・

Ruby 3.0.1
Rails 6.0.x

の環境で、

webpackのサーバーから

560 │ $custom-switch-indicator-border-radius:         $custom-control-indicator-size / 2 !default;
    │                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ╵
    node_modules/bootstrap/scss/_variables.scss 560:49  @import
    node_modules/bootstrap/scss/bootstrap.scss 9:9      @import
    app/javascript/stylesheets/application.scss 1:9     root stylesheet
(以下略)

こちらのワーニングが出ていました。

依存関係のトラブルは解決が大変

これは実際エンジニアとして生計を立てている人でも嫌なトラブルです。

今回の場合は、どうやら依存ライブラリの関係で、sassのバージョンを落とす必要がありそうな事態に・・・。
依存ライブラリとして、自動でsassの 1.33系が入るっぽいのですが、こちらでBootstrap側に引っかかるコードがあるようです。

ですので、現在の 1.32系の最新版で

"sass": "1.32.13"

を入れて対応

手順としては、package.json の

  "devDependencies": {
    "webpack-dev-server": "^3"
  },

この部分に

  "devDependencies": {
    "sass": "1.32.13",
    "webpack-dev-server": "^3"
  },

を付け足す事(プロパティはDependenciesでも可)と、その指定を強制する

  "resolutions": {
    "sass": "1.32.13"
  }

の記述が必要になるようでした。

webpackerの扱いは難易度が高い

webpacker周りのトラブルは、実際にやってみないとわからない所が多く、例えばPaiza.cloud等の予めバージョンが決められた環境だと、(2022/02/12現在)Rubyが2.7に対してRails6系を扱うので、相性的にwebpackerの対応が結構ややこしかったりします。

また、これらの解決にはJavascriptを学んでいる事が前提だったりするのですが、ベタ書きのJSではなく、npmyarn などパッケージ管理ツールを扱ってコードが書けている前提となりますので、これもまた初学者には厳しいのです。

リソースは限定して学びたい

初学者の皆さんは、ネットの情報に振り回されず、まずは1つの言語・1つのフレームワークをモノにすると良いと思います。

なぜかというと、1つある程度の水準まで学ぶと、2つ目以降の言語学習は恐ろしくすんなりいくからです。

以前から「Rubyオワコン」とか言っているエンジニアかどうかも分からないような発信者や、就活などで未経験OKと謳っていて「他に出来ないの?」という棘のある言い方をする方も一定数いらっしゃると思いますが、まずは、「他は知らんがRubyだけはしっかり出来る人」を目指すべきですし、そうなれば後はとても楽。
そこから世界を広げるのは皆さん自身です。

まぁ、そもそもそういう言い方をする企業が初学者をまともに教育できるとは思えないので、もこちらから願い下げと考えておくと良いと思います。

すごく楽になったRails7

Rails7が、最近リリースされましたが、Rails4辺りの簡潔さが復活したように思います。
開発者のDHH氏曰く「ビジョンを完全に満たすもの」というだけあって、簡潔さと多機能さがいいバランスで扱えます。特にNode.jsに依存しなくなったという部分は上記のようなトラブルを減らしてくれるはずです。

また、このタイミングでBootstrap5系も JQueryから脱却したり、Tailwindcss も Node.js を不要なCDNを発表したりと、開発が容易になる要素がどんどん揃ってきました。
ですので、これからの新しいプロジェクトにはRails7が積極的に使われるのではないでしょうか。

個人的にはRails内部でSPAは論外として、RailsをApiとして使ってフロントを分離するよりも、 viewcomponent 等のgemを使って、Tailwind辺りを使えるとかなり設計が楽になるのではないかと踏んでいます。

(viewcomponent: https://github.com/github/view_component)

基本的には
扱いやすい == 初学者にもやさしい
という事ですので、 皆さんの学習も捗るはずですよ。