Elixir の Getting Started に PR してみる
この記事に必要な範囲で自己紹介すると、
- 最近 Elixir の勉強をしている
です。
Elixir の Getting Started
公式サイトにある初心者学習用のページです。最近、ここに書いてあるコードを IElixir で試しながら読み進めています。
Module attributes - Elixir のページにある下記のコードの実行に失敗したことが、PR を出そうと思ったきっかけです。
defmodule MyPlug do
use Plug.Builder
plug :set_header
plug :send_ok
def set_header(conn, _opts) do
put_resp_header(conn, "x-header", "set")
end
def send_ok(conn, _opts) do
send(conn, 200, "ok")
end
end
IO.puts "Running MyPlug with Cowboy on http://localhost:4000"
Plug.Adapters.Cowboy.http MyPlug, []
IElixir で hex package を使う
話が脱線しますが、IElixir で Hex package を使うときの方法を紹介しておきたいと思います。
IElixir では Boyle
というモジュールを使って環境の管理ができます。例えば、ノートブックの最初のセルを以下のようにしておけば、plug_cowboy
のインストールされている getting_started
という名前の環境で作業をすることができます。ちなみに、plug_cowboy
は Plug.Adapters.Cowboy
を使うために必要な package です。
defmodule Environment do
@env_name "getting_started"
def prepare() do
unless confirm_env(Boyle.list()) |> is_nil() do
Boyle.install({:plug_cowboy, "~> 2.0"})
end
end
defp confirm_env({:ok, env_list} = _boyle_list) do
unless @env_name in env_list do
Boyle.mk(@env_name)
end
Boyle.activate(@env_name)
end
defp confirm_env(_), do: nil
end
Environment.prepare()
Boyle.active_env_name()
コードの修正
Getting Started のコードの話に戻ります。ちゃんと依存 package を導入して実行してみたのですが、下記のエラーが出てしまいました。
** (CompileError) console:12 "undefined function send/3"
実は Plug.Builder
には send/3
なんて関数は存在しません。ドキュメントで検索すると分かりますが、今回の用途では send_resp/3
を使います。
エラーを見ればすぐに分かることですが、無駄な時間の削減に少しだけ貢献できそうなので、修正の PR を出すことにしました。
Elixir の公式ページのソースは elixir-lang/elixir-lang.github.com にあるので、これをクローンして PR を出せば良さそうです。
PR link: https://github.com/elixir-lang/elixir-lang.github.com/pull/1293
その結果、速攻でマージしていただきました。しかも Elixir の creator である José Valim さんから素敵なコメント付きで!
おわりに
ドキュメントのソースが GitHub で公開されている場合は、ドキュメント間違ってんな、で終わらせずに、積極的に PR していきたいと思います!