Elm 0.18への対応方法

  • 9
    Like
  • 0
    Comment

はじめに

Elm 0.18 がリリースされていくらか経ったので、0.17依存のプロジェクトを0.18に対応させる手順を紹介します。
基本的には、Elm 公式のアップグレード手順に従うだけで、ほぼ自動的に対応できますが、いくつか注意点を補足しています。

Elm Platform のアップグレード

公式のアップグレード手順には明記されていないですが、まず Elm Platform のアップグレードが必要です。
基本的には、Elm 公式ガイドに書いてあるインストールの方法で、最新の0.18版を上書きするだけです。
npm の場合なら、単に

npm install -g elm

でアップグレードできるでしょう。

elmenv を使っている場合

elmenv なんかを使うのはやめましょう!
メンテナンスもあまりされていないし、ソースコードから elm をコンパイルするのでクッソ遅いし、コンパイルこけるし、つらいです。
かわりに、elm-useを使うことをおすすめします。
なんと、

npm i -g elm-use
# または
# yarn global add elm-use
elm-use 0.18

だけで、後述する elm-format もすぐに使えるようになります。
もちろん、すでに Elm 環境が入っている方は、そちらの実行ファイルが優先されないように、削除するなり、パスの優先順位を調整するなりしましょう。

elm-format のインストール

Elm のコードをParsingして、整形するelm-formatをインストールします。
これも公式ドキュメントには明記されていませんが、事前にインストールしておかないと、後述のelm-upgradeが途中でコケます。

elm-formatレポジトリの指示にしたがって、インストールしましょう。

elm-upgrade

elm-upgradeを使えば、ほぼ一発で Elm 0.18 への対応が可能です。

npm install -g elm-upgrade
cd path/to/my/elm/project
elm-upgrade

依存ライブラリの変更に起因する修正

ここまでで、基本的な対応は完了ですが、coreパッケージのAPIが変更されたりしている影響で、追加の修正が必要です。

Elmはコンパイラが優秀なので、elm-makeなどを走らせてみて、コンパイルエラーが出たところを修正するだけで問題ないでしょう。

詳しくは移行ガイドにも書いてありますが、以下の変更に起因するエラーが出ると思います。

  • program 関数の引数がかわった
  • andThen の引数の順番がかわった
  • 変数名に'を使えなくなった

いずれも、コンパイラの指示通りに修正するだけです。

(オプション) インデントを修正

elm-formatは、4スペースインデントのみに対応しています。
何度か「2スペースに対応してくれ」というissue(#158#226)がありましたが、設定ファイルでの対応も含め、完全に否定されています。

どうしても2スペースインデントがいい方は、たとえば以下のコマンドで2スペースに変更しましょう。

find src -type f | xargs sed -i 's/    /  /g'

(オプション) バージョンアップデート

もし、今回0.18対応させたプロジェクトを、Elm Packagesに公開しているのであれば、バージョンを更新して公開しましょう。