[翻訳] Elixirの作者、José Valimへのインタビュー

Nihal Sahuさんの2015年11月30日付のインタビュー記事[An Interview with Elixir Creator José Valim](http://www.sitepoint.com/an-interview-with-elixir-creator-jose-valim/)の翻訳です。

全然技術的な投稿じゃないんですが(とはいえポエムでもないか)、Joséのアニキの言ってることがなかなかいい感じなので訳してみました。

。。。そういえばJoséってジョゼでいいの？ホゼなの？ホセなの？[^0]

[^0]: ポルトガル語なんでジョゼでいいらしい - [Wikipedia](https://en.wikipedia.org/wiki/Jos%C3%A9)

-----
数週間前に遡ります。私はちょうどElixirを始めた頃でした。すごくハマってしまってIRCに飛び込んで質問しまくりで皆さんにご迷惑をお掛けしたかもしれません。私はElixirの作者である[José Valim](https://github.com/josevalim)にもいくつか質問しました。JoséはRubyコミュニティの人気者で彼にメッセージを送ったところとても親切に答えてくれました。いくつか質問したあと、これは彼にインタビューしてみないとな…と思いました。以下は会話の結果です。

**あなたを知らない人のために簡単に自己紹介をお願いします**

私はJosé Valim、Elixirプログラミング言語の作者でPlataformatec社の共同設立者です。私はブラジル人でポーランドに住んでおり、オープンソース業務で日々を過ごしています。

**Joséさん、あなたはRubyコミュニティで非常に活動的なメンバーとして広く知られています。あなたはまたErlangをベースにElixirというプログラミング言語を作ったわけですが、どんなふうにプログラミング言語を新しく作ろうとしたのでしょうか？プログラミング言語を作るための考え方に慣れていたとか？**

私には正式なコンピュータサイエンスのバックグラウンドがありません。ですのでElixirを作ろうと決めたとき、私は字句解析や構文解析その他諸々の必要とされる背景的な知識にキャッチアップしないと駄目だと気付きました。

私は数冊のそれらについて書かれた本を読み、様々な言語がどのように実装されているかを知るためにソースコードを読み、またいろんなツールを使ってみて何が可能で何がそうでないかをよりよく把握するのに役立てました。何がシンプルで何がややこしいか。構文解析は今でもチャレンジングだと思います。特に滅多に起きないケースに出くわしたとき、それの解決法を探すのは延々と続く作業になることもあります。私はBisonのマニュアルも[Dragon Book](http://dragonbook.stanford.edu/)も使いました。Erlang、RubyそしてJavaScriptにコンパイルするいろんな言語の構文解析を調べたのを覚えています。

**それについてもう少しお願いします。何があったんですか？**

話せば長いんですが…短く美味しいところだけかいつまんで話してみましょう。2010年のことですが、私はマルチコアのシステムで作業している時にRailsのパフォーマンスを向上させるという仕事をしていました。私達が作業していたマシンもそうでしたし、出荷するのはもっともっと多いコア数のマシンでしたし。でもやってみてわかったのはRubyには並行動作をうまく解決する適切なツールが用意されていないため極めて納得がいかない結果だったということです。それがきっかけとなって私は他のテクノロジーを探し求め、結局Erlangの仮想マシンにハマってしまった、というわけです。

どんどんErlangを使い続けて経験を積んでいくうちにこれはどうも他のたくさんの言語、関数型言語も含めてですが、構造を何か見落としていたのではないかということに気づきました。それでErlang仮想マシン上に違う構造と優れたツールを乗っけたElixirを作ろうと決めたんです。

**Erlangに付け加えられたElixirの主要な特徴(と呼んでいいのでしょうか)は何ですか？**

Elixirは優れた、簡単に使えるツール、ドキュメント、そしてリソースを念頭に設計されました。技術的な面でいうとマクロ機構と、プロトコルによるポリモーフィズムを提供しています。どちらも言語の拡張性の向上が狙いです。

**ここのところ、我々は急に関数型へ興味が向かっていますがどう思いますか？オブジェクト指向のプログラマーにとって何を与えてくれるのでしょうか？**

その質問は関数型とオブジェクト指向プログラミングが明確な定義を持っていないのでトリッキーですね。特に複数のオブジェクト指向言語を話題にしているとそれぞれの言語で言ってることが全然違ってたりしますし…。実際オブジェクト指向という言葉を作ったアラン・ケイのオブジェクト指向の定義はJavaやC++で使われているオブジェクトよりもElixirのプロセス/アクターの方にずっと近い[^1]です。

[^1]: アラン・ケイも「オブジェクトやクラスよりもメッセージの方が重要だったのに間違って解釈された」と言ってますね。

とは言うものの私もすごく自分流の関数型プログラミングの定義というのを持っていまして、それは、関数型プログラミングはあなたのシステムの複雑な部分を明確化させる、ということです。例えば、変更可能な状態は時間の経過によって変化するデータです。時間というやつはシステム内で動く部品を増やしてくれるので複雑さを持ち込む元になるのです。我々は違うタイミングで変化するデータの細切れを何とかまとめないといけません。ですから「変更可能な状態」は基本と考えてはいけなくて、必要になった場合にしかたなく使う抽象化と考えるべきです。そうすればもっと物事を明確に扱えます。

そしてそれが最も面白いところなんです。関数型プログラミングはよく並行動作と絡められますが、そう設計されたからそうなっているというわけではないのです。システム内の複雑なところを明確にしようとしているうちに、たまたま並行動作のようなより複雑な問題を簡単にしてしまっただけなのです。

**Elixirコミュニティについて少しお話しいたたけますか**

Elixirコミュニティは着実に伸びています。この10月にオースティンで250名の参加者を集めてElixirConf 2015を開催しましたが[^2]、参加者のうち半数以上が既に業務でElixirを使っていました。複数の大手の出版社からElixir本が出ていますし、もうすぐさらに出てくる予定です。

[^2]: ここで[いろいろ非推奨にして](http://qiita.com/HirofumiTamori/items/cdb9d2d46b638a38ae5a)騒ぎになったわけですね(笑)

最もワクワクするのは、しかしながら、それが健全な成長だということです。あなたがElixirを使い始めるということは単に新しい言語を学ぶというだけではなくErlang仮想マシンで提供される全てのエコシステムとツールを学ぶということを意味します。ElixirConfを通じて、Erlang仮想マシンのバイトコードからスケーラブルな分散システムを構築するための抽象化についてに至るまで、このエコシステムについてマスターしたいということにすごく興味が持たれていて、とても興奮しました。

**Joséさん、どうもありがとうございました。あなたとElixirの幸運をお祈りします。コミュニティでのご活躍にも感謝しています。**

ありがとうございました。

-----