Elixir: Elixir 1.9に備わった新機能
gumi TECH
Posted on May 9, 2019
2019年4月29日付でPlataformatec blogに公開された「What’s new in Elixir – Apr/19」で、v1.9.0-devに加えられた新機能が紹介されました。本稿は、その記事に公式ドキュメントなどの情報を補ってご説明します。
mix release
の追加
新たにmix release
が備わりました。基本的なリリースに加え、ランタイム設定、テンプレートファイルによるカスタマイズ、カスタムステップなどがサポートされます。
mix release
は現行のプロジェクトの自己完結したリリースを組み立てます。
MIX_ENV=prod mix release
MIX_ENV=prod mix release NAME
リリースがつくられると、ターゲットに向けてパッケージ化し、デプロイできます。ターゲットは、同じオペレーティングシステム(OS)のディストリビューションおよびバージョンで、mix release
コマンドが実行されたマシンで動かしておかなければなりません。
リリースは、mix.exs
ファイルのdef project
において:releases
キーにより設定できます。
def project do
[
releases: [
demo: [
include_executables_for: [:unix],
applications: [runtime_tools: :permanent]
],
...
]
]
end
mix new
で設定ファイルをつくらない
まず、mix new
でconfig/config.exs
をつくらなくなりました。設定ファイルに依存することは、ライブラリやその作者にとって望ましくないとされてきたからです(「Avoid application configuration」)。つぎに、mix new --umbrella
は、子アプリケーションごとの設定はつくりません。すべての設定は、アンブレラプロジェクトのルートで宣言することになります。理由については「No longer generate config for mix new」をご参照ください。
Elixirに新たなConfig
モジュールを追加
リリースは独自の設定がされるかもしれません。また、ビルドツールのMixに依存するのは望ましくないでしょう。そこで、use Mix.Config
はやわらかな非推奨(soft-deprecated)となります(やわらかな非推奨については「Elixir: バージョン間の互換性と非推奨」参照)。これからは、Elixirに新たに備わったConfig
モジュールをimport Config
としてお使いください。
つぎのふたつの部分で互換性が破られます(「Add config providers」参照)。
- 設定モジュールの追加
Config
Config.Reader
Config.Provider
- リリースに
Config.Provider
のサポートを追加
旧 | 新 |
---|---|
use Mix.Config | import Config |
Mix.Config.merge/2 | Config.Reader.merge/2 |
Mix.Config.read!/2 | Config.Reader.read!/2 |
Mix.Config.eval!/2 | Config.Reader.read_imports!/2 |
Mix.Config.persist/1 | Application.put_all_env/2 |
ロガーのパフォーマンス向上
ロガーは、メッセージが破棄されるときの処理を効率化しました。また、Erlang/OTP v21.2以降により、全体のパフォーマンスが向上しています。
その他の新機能
~U
シギルの追加
UTC DateTime
をつくる~U
が加わりました(「Add ~U sigil for UTC date times」参照)。なお、~u
はありません。
新たな関数
設定ファイルを簡単にできるように、つぎの3つの関数が新たに加わりました(「Add support for a default value in System.get_env/1」参照)。
細かな変更
細かな変更については、「Changelog for Elixir v1.9」をご参照ください。
Posted on May 9, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.