15
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Elm 0.18への対応方法

Last updated at Posted at 2016-12-12

はじめに

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に公開しているのであれば、バージョンを更新して公開しましょう。

15
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?