導入
Homebrew での導入は以下。
brew update brew install elixir
バージョン確認。
$ elixir -v Elixir 1.0.4
Erlang も入る。
erl -version Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 6.4
IEx (Interactive Elixir)
対話型シェルで、各種操作が実行できる。
$ iex Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help) iex>
REPL として直接コードを実行したり、
iex> 1 + 1 2 iex> IO.puts "Hello World!" Hello World! :ok
コンパイルしたり
iex> c "my_file.ex"
Enum モジュールに定義されている型の情報を見たり
iex> t Enum
ドキュメント見たり
iex> h(IO.puts/1) def puts(device \\ :erlang.group_leader(), item) Writes the argument to the device, similar to write/2, but adds a newline at the end. The argument is expected to be a chardata.
モジュール名.関数名/arity の形式で、arity は引数の数となる。
IExのヘルプは以下で見れる。
iex> h(IEx)
コンパイルと実行
コンパイラは elixirc スクリプトの実行は elixir というコマンドが用意されている。
拡張子との対応は慣例として以下。
用途 | コマンド | 拡張子 |
---|---|---|
対話型シェル | iex | - |
スクリプト | elixir | .exs |
コンパイル | elixirc | .ex |
スクリプトの実行は 拡張子 .exs のファイルを elixir で実行。
コンパイルは .ex のファイルを elixirc でコンパイルすると Elixir.モジュール名.beam
という名前の Erlang VM の beam ファイルができる。
beam ファイルの実行は以下でできる。
elixir -e モジュール名.関数名
Hello World
hello_world.exs というスクリプトファイルを作る。
IO.puts "Hello world."
実行は elixir コマンドで以下のように実行できる。
$ elixir hello_world.exs Hello world.
コンパイルする場合には hello_world.ex を以下のように作る。
defmodule Hello do def hello do IO.puts "Hello World" end end
コンパイル
$ elixirc hello_world.exs
Elixir.Hello.beam ができ、elixir -e モジュール名.関数名
で実行できる。
$ elixir -e Hello.hello Hello World!
iex を実行すると、カレントの beam が自動的にロードされるので以下のように実行できる。
iex(1)> Hello.hello Hello World :ok
mix
Elixir ではプロジェクト管理ツールとして Mix がついてくる。
コマンド | 説明 |
---|---|
mix new | プロジェクト作成 |
mix test | テストを実行 |
mix compile | コンパイル |
mix -help | ヘルプ |
新規プロジェクトを作成すると以下のようになる。
$ mix new example * creating README.md * creating .gitignore * creating mix.exs * creating config * creating config/config.exs * creating lib * creating lib/example.ex * creating test * creating test/test_helper.exs * creating test/example_test.exs Your mix project was created successfully. You can use mix to compile it, test it, and more: cd example mix test Run `mix help` for more commands.
ディレクトリ構成は以下のようになる
. ├── README.md ├── _build ├── config │ └── config.exs ├── lib │ └── example.ex ├── mix.exs └── test ├── example_test.exs └── test_helper.exs
ディレクトリとファイルの説明は以下。
コマンド | 説明 |
---|---|
_build | ビルドによる成果物が格納される |
config | プロジェクトと依存設定などの設定ファイルが置かれる |
lib | アプリケーションのソースコードが格納される |
mix.exs | プロジェクト名やバージョン、依存などを定義する |
test | テストコードが格納される |
mix.exs
プロジェクトの設定は mix.exs で管理される。
defmodule Example.Mixfile do use Mix.Project def project do [app: :example, version: "0.0.1", elixir: "~> 1.0", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps] end def application do [applications: [:logger]] end defp deps do [] end end
2つのパブリック関数 project と application でプロジェクト全体の設定とアプリケーションファイル生成時の定義を行う。
プライベート関数の deps で依存関係を定義する。Hex パッケージや Git リポジトリが指定できる。
mix で コマンドライン版 Hello World
先ほど作ったプロジェクトの example.ex を以下のようにする。
defmodule Example do def main([]) do IO.puts "Hello world." end end
コンパイルして、
$ mix compile Compiled lib/example.ex Generated example app
実行。
$ mix run -e "Example.main([])" Hello world.
iex から起動することもできる。
$ iex -S mix iex(1)> Example.main([]) Hello world.
コマンドラインから実行するには mix.exs
に escript: [ main_module: Example ]
のようにメインモジュールを指定する。
def project do [app: :example, version: "0.0.1", elixir: "~> 1.0", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps, escript: [ main_module: Example ]] end
以下のようにすると、ルードディレクトリに example
という実行可能ファイルができる。
$ mix escript.build
コマンドラインから実行できる。
$ ./example Hello world.
次回はPhoenix編。