Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

「Elixir Conf Japan 2017」全セッションレポート ~ 日本での活用事例が増えているElixir/Erlang

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2017/04/21 10:00

 2017年4月1日に秋葉原コンベンションホールにて「リアルワールドでのElixir/Erlang活用に焦点を当て、既に実戦投入できる技術であることを実感していただく」「Elixirに興味を持つ方々やElixirユーザーの方々を盛り上げ、ユーザーを増やしコミュニティに勢いをつけ、プログラミング言語Elixirの活用を強く推進する」ことを狙いとしたElixir Conf Japan 2017が開催され、300名以上の参加者が集まりました。

目次

「Opening Keynote」

José Valimさん
José Valimさん

 Elixirの作者であるJosé Valimさんによるオープニングキーノートです。Joséさんが日本にいらっしゃるのは2回目で、前回は2013年のRubyKaigiのキーノートでRubyにおける並行プログラミングの可能性について話されて以来4年ぶり、また日本へ来られてうれしいとのことでした。

 2011年当時のRails 2.2にThread Safetyという特徴が入りました。ただしこれは「壊れない」という保証をするのみで、実際に使えることや使いやすいということについては考えられていませんでした。当時JoséさんはRails Core Teamにおり、並行性が今後も重要になるのなら他のコミュニティからRubyに導入しようと思い調べはじめたのが最初であったとのことです。

 Erlangには”Seven Languages in Seven Weeks”という本の中で出会いました。Erlangは(たとえCPUが複数コア存在しても)マシンの全てのリソースを使えるような並行性を備えているだけでなく、それを生かした長期の目標である分散や安定したソフトウェアを書くという点についても考えられていました。ただErlangを気にいって使っているうちに、Erlangが備えていない機能も見えてきました。例えばユニコードのサポートです。Joséさんが自分の名前をプログラムの中に書くのにはユニコードのサポートが必要でした。

 そこで2011年の初めに自分の言語を作りはじめたということです。そのころは今のElixirと異なる、プロトタイプオブジェクトを用いたJavaScriptのような言語で、Erlangとも協調して動作しなかったといいます。一旦は完成したのですが問題が多く行き詰まってしまいました。それでも問題を頑張って修正して完成度を上げようと試みたのですが、うまくいかなかったそうです。振り返るとパズルで手元にあるピースをとにかく無理矢理当てはめていくような作業に似ていて、どうやって完成させるかという点について考えられていなかったとJoséさんは述べられました。

 そこでElixirのゴールを以下のように設定して再出発したそうです。

  • 生産性
    • ツール
  • 拡張性
    • ポリモーフィズムとメタプログラミング
  • (Erlangとの)互換性

 マクロを使ったLispのようなメタプログラミングは非常に自由かつ強力ではありますが、それをどのように既存の構文と組み合わせるか、そしてどのように明示的に宣言させるかについて悩んだそうです。そこでマクロの適用をコンパイル時にのみに制限することでうまく組み合わせることができ、Elixirでデータ操作を書くことでElixirの構文を変更できるマクロの構築に成功しました。

 それでは2017年現在にJoséさんが考えるElixirとは何なのでしょうか。それは以下の3つの要素を考えることで成り立っていると言います。

  • Data(types)
  • Modules
  • Processes

 例えばデータの上書きが可能なオブジェクト指向プログラミングでdictionary.store("key", "value")というコードがあったとき、状態はdictionaryが持っており、振舞いはstoreで定義されます。さらに、データの上書きが可能で一旦上書きしてしまうと過去のデータはどこにも残らないため、それぞれのオブジェクトは時間という概念も内包しています。つまりこの言語では、状態、振舞、時間が一つのオブジェクトへと纏められているということが言えます。

 一方Elixirでは役割が分けられており、状態のことはDataに、振舞のことはModuleに、時間のことはProcessへと分離して扱うことができます。特にProcess(プロセス)が特徴的で、プロセスはデータを持ち、プロセス内ではコードは直列で実行されますが、各プロセスは互いに影響を及ぼさずに並行動作することができます。プロセスが協調動作するときにはプロセス間でメッセージをやりとりします。この仕組みがElixirでモデルの時間による変更を表しているということでした。そしてこの理解しやすいメンタルモデルがあるために、プログラムの中で並列化できている部分が多ければ多いほど、コアが増えたときに速度を上げることができるアムダールの法則を生かすことができるそうです。

 Joséさんは、最後に2017年以降のElixirについて以下のような計画があることを提示し、

  • GenStage & Flow
  • UTF-8 Atoms
  • GenHTTP
  • Type System
  • Data streams & Property testing

 これらによってElixirが適用できるドメインが広がり、さらにElixirが広がっていくだろうと述べられました。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • ヽ(´・肉・`)ノ(ニク)

     株式会社Farmnoteに勤務するプログラマ。普段はRubyやTypeScript、Javaを書いています。  Sapporo.beamというErlangVM系のことについて話す集まりを毎週木曜日に開催しています。

バックナンバー

連載:イベントレポート

もっと読む

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5