Hello worldにおいて、「コンソールに文字を表示する文法を覚えましょう」というのは目的の一部でしかありません。元々のC言語で言えば、ソースコードを作成する→コンパイルする→実行する この一連の流れを体験するためのものです。
公式にはGetting Startedがありますが、インストールの次はいきなりインタラクティブシェル(iex)を使った文法説明。いやそうじゃない、まず最終的な出力ファイルの作り方を教えてくれよと。プロダクトでもiexから走らせます、という事であればそれで良いんですが。
試行錯誤したりTwitterで教わったりしつつ、最低限のところまでは進めたので、書き残しておきます。
ソースコード作成
% cat hoge.ex defmodule Hoge do def hello do IO.puts "hoge world" end end
Hogeモジュールを定義し、その中にhello関数を作成。中はコンソールへの出力のみ。
コンパイル
% elixirc hoge.ex
ここまでは何の問題も無し。ただし、2回目以降のコンパイルではwarningが出ます。
% elixirc hoge.ex hoge.ex:1: warning: redefining module Hoge
びっくりするけども、実際のところ問題はない模様。
参考:Warning “Redefining module” when file is containing 2 Modules
実害のないwarningなんて、warningをスルーする習慣がつくだけだから良くないのでは…
実行
% elixir -e Hoge.hello hoge world
-eで ModuleName.function_name を指定。
コンパイルで出来あがるのはErlang VMのbeamファイルなので、Erlang VMで実行できるはずだ!と試したところ、Elixirのbeamファイル群がある場所を検索パスに含めてあげれば、実行できる模様。
% erl -pa "D:\bin\elixir\lib\elixir\ebin" -noshell -s Elixir.Hoge hello -s init stop hoge world
mixを使う
mix.は、Scalaならsbt、元のErlangならrebar相当となる、依存するライブラリ管理・テスト・実行あたりまでをカバーする、Elixir付属のビルドツールです。前述のようにいちいちelixircを叩いてコンパイルすることはあまりなくて、基本的にこれを使うっぽい。参考:Introduction to Mix
まずは雛形を作成。
% mix new hoge --bare * creating README.md * creating .gitignore * creating mix.exs * creating lib * creating lib/hoge.ex * creating test * creating test/test_helper.exs * creating test/hoge_test.exs Your mix project was created successfully. You can use mix to compile it, test it, and more: cd hoge mix compile mix test Run `mix help` for more information.
ソースコードはlib以下に出来ます。今回はhello worldなので、lib/hoge.exにIO.putsを置くだけ。(要は前述のソースコードと同じようにhello関数を作るだけ。ソースコード略)
あとは、mixにコンパイルしてもらいます。
% mix compile Compiled lib/hoge.ex Generated hoge.app
そして実行。
% mix run -e Hoge.hello hoge world
依存するライブラリやアプリケーション設定などは、mix.exsに記述すればいいようです。
0 件のコメント:
コメントを投稿