
はじめに
ずっと前に開発したWebサービスがある。lytnoteといって、目標設定機能のついた日報アプリだ。デプロイにrender.comを利用しているが、月に1,000円ほど月額料金がかかっている。サービスを永続的なものにしたいので、運営コストはなるべく安いものにしたい。
そういうわけでfly.ioへ移行することとした。しかし移行する前にひさしぶりにアプリをローカルで立ち上げようとするもエラーが発生する。どうやらupdateが必要なgemがあったり、依存性の問題があるようだ。
これを解消しよう。
AIと共に生きる
もうAIと共に生きることにしたのでGithub Copilotの年間プランに入会した。VScodeに彼を入れることで、現在のソースコードを読み取ってくれて、こちらからの質問にもうまく対応してくれる。ChatGPTだと自分がコードを貼り付けて質問する必要があるが、情報量が足りずに齟齬が起きる場合があった。
発生したエラー
ターミナルでrails s と実行するとエラーが発生した。
/Users/xxx/lytnote/node_modules/node-sass: Command failed. Exit code: 1 Command: node scripts/build.js Arguments: Directory: /Users/kondoukou/lytnote/node_modules/node-sass Output: Building: /Users/xxx/.nvm/versions/node/v18.1.0/bin/node /Users/kondoukou/lytnote/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library= gyp info it worked if it ends with ok
node-sassとNode.js に問題があるようだ。
node-sassとはなにか
Node-sass is a library that provides binding for Node.js to LibSass, the C version of the popular stylesheet preprocessor, Sass. It allows you to natively compile .scss files to css at incredible speed and automatically via a connect middleware.
node-sassとはWebpackerのバージョン4で使用されているライブラリである。SassをCSSに変換する際に使われている。しかし、ライブラリのベースとされているLibSassの開発が停止となり、node-sass自体も現在は非推奨である。そのため、Node.jsのバージョンを上げると不具合が起こる。
WebpackerとRails
Rails 6では、JavaScriptやCSS、画像などのフロントエンド関係の要素を管理しやすくするため、Webpackerという仕組みが導入されている。WebpackerはJavaScriptモジュールバンドラーであるWebpackのラッパーライブラリである。Railsの皮を着せたwebpackだ。
Rails7以降ではWebpackerは廃止されたため、エラーを回避するためにRails7にアップグレードするという選択肢もあった。しかし、これはこれで変更箇所が多すぎるので今回は見送った。
修正箇所
バージョンの不整合を避けるため、以下のように修正した。
Gemfile
- gem 'webpacker', '~> 4.0' + gem 'webpacker', '~> 5.4', '>= 5.4.4'
package.json
- "@rails/webpacker": "4.3.0", + "@rails/webpacker": "^5.4.4",
Gemfile とpackage.json の両方ともバージョンを書き換える。
そうして
bundle install yarn install
を実行した。無事にエラーは解消された。
おわりに
技術的負債は久々に触ると手間がかかるが、CopilotやChatGPTのようなツールがあると、心理的なハードルがかなり下がる。
また続きを書く。