1.0のリリースから1年を経て,Elixir 1.1が発表された。新しい公開APIとパフォーマンスの改善,改良したツーリングが提供される。
Elixir 1.1にはEnum
, Task, String
モジュールの新APIなど,約40の新機能が導入される。さらに新しいデータ型として,Map上にSet
APIを実装したMapSet
が追加されている。
ツーリングも改善された。ユニットテストフレームワークのExUnit
には,タグの指定によるテストのスキップと,フェール時のキャプチャログ出力を可能にする,新たなオプションが追加されている。ビルドツールのMix
は,コンパイル時の依存関係とランタイムの依存関係を分離し,コンパイル時の依存対象が変更された場合のみ再コンパイルを行うことで,パフォーマンスの向上が実現した。
そして最後に,Elixir 1.1リリースには,コミュニティが“誰にとっても安全で,快適な場所へと成長する”ための行動規範(code of conduct)が添付されている。この規範には,性的な言葉の使用や個人攻撃,ハラスメントなど,コントリビュータにとって受け入れ難い行為が定義されている。
作者のJosé Valim氏に話を聞いた。
Elixirの完成度はどのレベルなのでしょう?1.1は開発者に何をもたらすのでしょうか?
オープンソースプロジェクトが1.0に達する時は,APIの安定だけでなく,a) プロジェクトの最小限のコアの定義が完了して,その後リリースを重ねながら,新たな機能が速やかに開発され,追加されていくのか,あるいは b) 将来的に開発者が構築を続けていくための,プロジェクトの基盤部分が完成したか,どちらかの意味を持っているのが通常です。Elixirは間違いなく後者です。
Elixir 1.1では,実際に運用されているアプリケーションから得られたデータに基づいたコードベースの最適化,バグの修正,ツーリングの生産性と動作速度の向上といったことが行われています。
Elixirのロードマップについて詳しく説明して頂けますか?将来的には何を期待できるのでしょう?
私たちは現在,Elixir 1.2を開発しています。最大の目標は,Erlang 18と呼ばれる,Erlang VMの新バージョンとランタイムを活かし切ることです。マイナーリリースですので,年内にはリリースしたいと思っています。
現時点で1.3の日程は決まっていませんが,今はGenRouterという新しいコンポーネントの開発を行っています。これはElixir開発者のシステムに対して,バックプレッシャを備えた効率のよいデータルーティング機能を提供するものです。GenRouterを使うことで,信頼性の高いデータブロードキャストが可能になります – さまざまなストレージにデータを送信するログ処理コンポーネントや,ロードバランス機能を備えたジョブ処理システムなどが考えられるでしょう。
これらの話題については,ElixirConf 2015でも取り上げています。近々ビデオも公開する予定ですので,詳細を確認して頂けると思います。
Elixirが現在,業界内でどのように活用されているのか,公式見解といったものはありますか?
Webインフラストラクチャ: Webに関しては,Elixirはすべてのスタックに対応することができます。TCPとUDP上のプロトコル実装,HTML5アプリやAPIバックエンドといったWebアプリケーション,さらには分散システムやゲームサーバでも採用例があります。
組込みシステム: 組込みプラットフォームに適用しようという動きが広がっています。この種のシステムでElixirを活用することによって,上級技術者はもとより,初心者にも容易に開発ができるようになるのです。“モノのインターネット(IoT)”と,分散システムの構築におけるElixirの生来の能力を考えると,これは非常に興味深い動きです。ElixirConf 2015ではさまざまなデバイスでElixirを運用したり,システムのファームウェアをライブでアップグレードしている例を見聞しました。この種のトピックは,以前にPlatformatecのブログでも取り上げられています。ElixirConf2015用のビデオも近日中に公開される予定です。
金融およびビデオプラットフォーム: データプロセッシングにElixirを使って,大量のデータを毎日処理しているスタートアップがいくつかあります。詳細は間もなく公表されると思いますが,開発中のGenRouterがリリースされる来年には,さらに多くの事例が見られるものと期待しています。
Elixirは,Erlangの仮想マシン(BEAM)を対象とした関数言語である。セマンティクス的にはErlangに近く,そのVMの目的に忠実な,すなわちレジリエントでスケーラブルな分散システムの構築に加えて,高度な文法構造を提供することを目標としている。さらに,Erlang自体では使用できない,例えば動的ディパッチによるポリモーフィズム,アクタ,高次関数,パターンマッチ,メタプログラミングといった高度な機能もサポートする。Erlangライブラリにブリッジされているので,Erlangエコシステムへのアクセスもシームレスに可能だ。
“Elixir in Action”の著者であるSaša Jurić氏によると,
[Erlangでは]作業があまりにも煩雑で,低レベルの機能部分で不必要な苦労をすることがよくあります。Elixirはこの部分に関して,言語(マクロによるメタプログラミングやプロトコルによるポリモーフィズムなど)およびツーリング部分(プロジェクトビルド用のmixやパッケージマネージャのhexなど)の両方で,多数の便利な機能を提供してくれます。おかげで私たちは,本来解決すべき問題により集中することができるのです。
Elixir 1.1はGitHubで公開されている。