Edited at
ElmDay 20

Elm 0.19に移行する


Elm 0.19に移行する

Elm 0.19リリース直後に、既存の0.18なプロジェクトで一度試してパッケージが足りなくて断念したのですが、改めて試したところなんとか移行ができたので、振り返りもかねてまとめておきます。


主な手順



  1. elm-upgradeをかける

  2. 0.19がサポートされてないパッケージの依存を解決する

  3. 型エラーを直す

  4. CI設定やRailsの設定を直す


elm-upgrade

以下のコマンドを実行して何かしら失敗したらGitでコードを戻してやり直します。

npm install elm@elm0.19.0

npm install elm-format@elm0.19.0
npx elm-upgrade@latest

elm-upgrade のいうとおりにしていれば単純なめんどくさい作業は大体終わっています。

elm-format という最近流行りの標準的なコードフォーマッターがかかるので行数が増えるのは注意点かもしれません、


パッケージ依存を解決する

elm make を走らせても、パッケージの問題でそもそもコンパイルがはじまらないので、それをいい感じに直してきます。

公式パッケージは大体移行できるので、対応してなさそうなサードパーティを削除していくのが早いです。

0.19対応してないパッケージがあるので、そういったのは代わりを探したり、標準的なパッケージの機能を組み合わせたりで代替できないか模索します。

今回は、幸いすべての代替を見つけることができたんですが、互換性をわかりやすく壊していくというスタイルとはいえどうしてもアップグレードし続けるというのはマンパワーが必要だなと感じます。

特に、Elm Bootstrapには助けられました。

0.18ではelm-dialogを使っていたんですが、機能的にもよりよくなっていて移行してよかったです。


型エラーやバグを直す

Elmの方針として、互換性というのはわかる形でどんどん壊していくので、それに追従します。

今まで使えてた方法は、設計のまずさなどの理由で変わってしまうことが多いので、リファクタリングを兼ねて粛々と修正します。

公式で移行ガイドがあるので、それがヒントになることもあります。

今回、困ったのは fmod 関連の変更でした。

名前が fractionalModByに変わり引数の順序が変わっています。

名前が変わった時点で気づけばよかったのですが、引数の順番が変わっているのに気づくまで手間取ってしまいました。


CI設定やフレームワークの設定

関連コマンドが全部 elm に集約されたのでそれらをいい感じに直します。

elm-package がなくなって elm make に統合されたので、コマンド数が減ったのでかなりすっきりするかと思います。

未だにsprocketsでこうゆうことをしているので、はやくwebpackに移行したいです...。


事後評価

アップグレード作業というのはどうしてもしんどかったり検証が大変なんですが、Elmの場合は検証がツールに全部任せられるので安心してできました。

また、しんどいところは技術的な負債が原因の一端なので、それらを同時に返すことができると考えると相応の価値があるのでよかったです。