週刊Elixirライブラリ2015-19
Elixirのライブラリの解説を週ごとにお届けする記事です。
解説が間違っていた場合には、コメントか@hayabusa333にご連絡くださると嬉しいです。
今回はElixirScriptについて
# ElixirScript is 何?
ElixirScriptは、記載したElixirのコードをJavaScriptのコードへと変換するために作られました。
# 実行環境
OS:OS X Yosemite
Erlang:Eshell V6.5, OTP-Version 18
Elixir:v1.0.4
# ElixirScriptの実行を行うための新規プロジェクトの作成
$ mix new my_elixir_script $ cd my_elixir_script
# HexにてElixirScriptをインストールするために設定ファイルの記載を行う
$ vim mix.exs
mix.exsの内容は下記となります。
defmodule MyElixirScript.Mixfile do use Mix.Project def project do [app: :my_elixir_script, version: "0.0.1", elixir: "~> 1.0", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps] end # Configuration for the OTP application # # Type `mix help compile.app` for more information def application do [applications: [:logger]] end # Dependencies can be Hex packages: # # {:mydep, "~> 0.3.0"} # # Or git/path repositories: # # {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"} # # Type `mix help deps` for more examples and options defp deps do [{:elixir_script, "~> 0.12"}] end end
# 依存関係の解決を行います。
$ mix deps.get
# ElixirScript を実行してみる
$ mix ex2js "lib/my_elixir_script.ex" -o "js" -r "js"
# ElixirScript にて、実行した内容を確認する
$ cat js/my_elixir_script.js import { Patterns, Kernel, Atom, Enum, Integer, JS, List, Range, Tuple, Agent, Keyword, BitString } from 'js/elixir'; const __MODULE__ = Kernel.SpecialForms.atom('MyElixirScript'); export {};
# 実際のコードを記載し、ElixirScript にて変換する
defmodule MyElixirScript do def add(x, y) do x + y end defp sum(x, y) do x + y end defp map() do Enum.map(1..10, fn(x) -> x * x end) end end
# ElixirScript を再実行してみる
$ mix ex2js "lib/my_elixir_script.ex" -o "js" -r "js"
# ElixirScript にて、再実行した内容を確認する
$ cat js/my_elixir_script.js import { Patterns, Kernel, Atom, Enum, Integer, JS, List, Range, Tuple, Agent, Keyword, BitString } from 'js/elixir'; const __MODULE__ = Kernel.SpecialForms.atom('MyElixirScript'); let sum = Patterns.defmatch(Patterns.make_case([Patterns.variable(), Patterns.variable()],function(x,y) { return x + y; })); let map = Patterns.defmatch(Patterns.make_case([],function() { return Enum.map(Range(1,10),Patterns.defmatch(Patterns.make_case([Patterns.variable()],function(x) { return x * x; }))); })); let add = Patterns.defmatch(Patterns.make_case([Patterns.variable(), Patterns.variable()],function(x,y) { return x + y; })); export { add };
# まとめ
今回はElixirにてJavaScriptを生成するElixirScriptを紹介いたしました。
altJSとして、今後どう成長していくのか気になるElixirScriptでした。
それでは皆さま、良いElixirライフを