こんにちは、バックエンドエンジニアの銀シャリです。
今回は、役立つ最新技術をつまみ食い的に試してみる連載「最新バックエンド技術つまみ食い」の第一回目。
昨年頃からWebエンジニア界隈で大きな盛り上がりを見せている言語、「Elixir(エリクサー)」について紹介します。
Elixirとは?
Elixirは、BEAMと呼ばれるErlang(アーラン)仮想環境上で動作する関数型言語で、Ruby on RailsのcoreチームメンバーでもあるJosé Valimによって2012年に開発されました。
小難しく書きましたが、ErlangとElixirについては、JavaとScala、JavaScriptとCoffeeScriptのような関係性だと思ってください。
Elixirが盛り上がる2つの理由
そんなElixirが最近盛り上がっているのには、以下のような理由があります。
- Erlang仮想環境上で動作することで、大量の並行処理を行うアプリケーションを高い信頼性で実現できる
- とっつきにくかったErlangの文法をRubyに近づけ、Erlangにはなかったパッケージマネージャ、ビルドツール、マクロなどを持つことでRubyプログラマに馴染みやすい言語になっている
Elixirを導入しよう
それでは、実際にElixirを導入してみましょう。
Erlangのインストール
まずはErlangをインストールしましょう。
以下のリンクから最新のものをダウンロードしてください。
http://www.erlang.org/downloads
Macをお使いの方であれば、Homebrewでインストールすることもできます。
brew install erlang
Elixirのインストール
ErlangがインストールできたらElixirをインストールしましょう。
以下の公式手順が参考になります。http://elixir-lang.org/install.html
Macをお使いの方は、Erlang同様にHombebrewでインストールするのが楽です。
brew install elixir
Windows向けのインストーラーも用意されています。(クリックでダウンロードされます)
https://s3.amazonaws.com/s3.hex.pm/elixir-websetup.exe
RubyでRVMやrbenvで言語自体のインストールバージョンを管理されていた方向けに、kiexというバージョンマネージャーも作られています。まだRubyほどバージョンも多くはありませんが、僕はこれを利用して新しいバージョンをインストールしています。
https://github.com/taylor/kiex
Windows版はないみたいです。
インストールの確認
インストールが終了したら、REPL(対話式実行環境)を起動してインストールの確認をしましょう。
ElixirのREPLはiexというものが最初から用意されています。$ iex # Windowsであればiex.batがインストールされていると思います Erlang/OTP 18 [erts-7.2.1] <pre>[code] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] Interactive Elixir (1.2.2) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> # 入力待ちになります
「iex(1)>」と表示されて入力待ち状態になれば起動成功です。インストールが完了したことになります。
iexを終了するには、まずCtrl+Cを入力します。
iex(1)> # Ctrl+Cを入力 BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution
処理が中断し、何やらメニューが表示されます。この状態でaを入力するか、もう一度Ctrl+Cを入力することでiexを終了することができます。
Elixirはじめの一歩
せっかくなので、iexでElixirに少しだけ慣れていきましょう。
# iex(1)の(1)の部分は、コマンド実行回数が表示されていますので、省略します。 # 四則演算 iex> 40 + 2 42 iex> 30 - 10 20 iex> 3 * 4 12 iex> 15 / 2 7.5 iex> 7.0 / 3.2 2.1875 # 余りの計算 iex> 5 % 2 ** (SyntaxError) iex:6: syntax error before: '%' #この記法は無いので怒られます iex> rem(5, 2) # rem関数を使用して計算します 1 # 商の計算 iex> div(5, 2) # div関数を使用すると計算できます 2 # 文字列 iex> "hello" <> "world" # 文字列は<>で連結します "helloworld" # コンソール出力 iex> IO.puts "Hello world from Elixir" # IO.putsで標準出力へ出力します Hello world from Elixir # これが標準出力への出力結果 :ok # エラーにならずに終了したので、最後に評価されるのはIO.putsの実行結果である:okとなります
基本的な演算は商余の計算が関数を使うくらいで、違和感はないですよね?
Elixirはじめのもう一歩
次に、簡単なスクリプトを作成して実行してみましょう。
ここでElixirの特徴でもあるパイプライン処理にもちょっとだけ触れてみます。以下のような内容のsample.exsを作成して、ローカル環境のどこか、コマンド実行時に指定しやすい場所に保存してください。
1..10 |> Enum.map(fn(x) -> x * x end) |> IO.inspect
保存したらelixirコマンドで実行してみましょう。
$ elixir sample.exs [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
結果が表示されましたか?
それでは書いたコードの解説をします。1..10
まずこの部分は、Rubyを書く方にはおなじみかと思いますが「1から10までの数値を値として持つ配列」を生成するコードです。
|> Enum.map(fn(x) -> x * x end)
続くこのコードに注目してみます。
先頭に「|>」が記述されていますが、これが「パイプライン演算子」です。パイプライン演算子によって1行目のコードで生成された配列を、この行に記述されたEnum.mapの処理に渡しています。
配列を受け取ったEnum.mapでは、各要素に、この関数の引数に渡された関数(fn(x)で開始してendまで記述されている部分の処理)を実行しています。
ここでは、「配列の各要素に対してその値を二乗する」処理を行っています。|> IO.inspect
そして最後の行です。前行で処理された結果は、そのまま配列としてこの行でパイプライン演算子によって渡されています。
IO.inspectは与えられた引数の構造に合わせて標準出力に吐き出してくれます。
それによって、結果の配列が表示されたというわけです。おわりに
Elixirのインストールから、簡単な構文とパイプライン演算子について紹介しましたが、いかがでしたでしょうか。
最後に、もっとElixirを学んでいきたい方向けに、ElixirSchoolというサイトが日本語訳されていますのでご紹介します。今後ますます注目度が上がってくる言語と思われるElixirに、みなさんもぜひこの機会に触れてみていただければと思います。
それでは!
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。