elixirだ 第5回
TRANSCRIPT
Mixおさらい> Rubyにおけるbundlerとrake > 依存性解決 > タスクランナー > mix new my_app > mix test > mix something.i.defined
モジュール属性> 他言語での定数みたいに使う > Joe-noh/japanese_holiday
> コンパイル終了後、原則消える > 実行時にはアクセスできない > 当然、編集もできない
lib/fibonacci.ex @doc """ 次のフィボナッチ数を返す
iex> Fibonacci.next 0 iex> Fibonacci.next 1 """ def next do # 略 end
mix.exsdefp deps do latest = ">= 0.0.0"
[ {:ex_doc, latest, only: :docs}, {:earmark, latest, only: :docs} ] end
$ mix docs するために必要
hexdocsに公開
$ mix hex.user register
$ mix hex.publish $ mix hex.docs
> https://hex.pm/docs/publish
タスク
$ mix phoenix.new
$ mix phoenix.gen.html
$ mix ecto.migrate
> よくやることをまとめておく > プロジェクトの初期化や生成 > 運用に関わる作業
慣習> lib/mix/tasks以下に書く > mix foo なら > lib/mix/tasks/foo.ex > mix foo.bar なら > lib/mix/tasks/foo.bar.ex
これちょっと注意
fib.exdefmodule Mix.Tasks.Fib do use Mix.Task
def run([num]) do Application.start(:fibonacci)
num = String.to_integer(num)
1..num |> Enum.map(fn _ -> Fibonacci.next end) |> Enum.each(&IO.puts/1) end end
ポイント> use Mix.Task > run/1を定義 > 引数はList > 文字列で渡ってくる > mix fib 3 なら引数は ["3"] > OptionParser 便利
fib.exdefmodule Mix.Tasks.Fib do use Mix.Task
@shortdoc "フィボナッチ!"
def run([num]) do # 略 end end
mix helpで表示するには@shortdocが必要!
mix.exsdefp deps do latest = ">= 0.0.0"
[ {:ex_doc, latest, only: :docs}, {:earmark, latest, only: :docs}, {:dialyze, latest, only: :dev} ] end
よしなにやってくれる便利ライブラリ
lib/fibonacci.exdefmodule Fibonacci do # 中略
@spec next() :: integer | no_return def next do # 略 end end
lib/fibonacci/server.ex
defmodule Fibonacci.Server do @type server :: pid | atom
# 中略 @spec next(server) :: integer | no_return def next(pid) do # 略 end end
なんぞ> @specで関数の仕様を記述 > @typeで自分で型を定義
> 詳しくは公式を参照 > Kernel.Typespec