CowboyとElixirで静的ページを表示する

ElixirとCowboyを使って、Webページを表示するための記事です。
解説が間違っていた場合には、コメントか@hayabusa333にご連絡くださると嬉しいです。

# Cowboy is 何?
CowboyはErlangで書かれた小さくて高速なモジュラー形式のHTTPサーバです。
今回はElixirでCowboyを使い静的ページを表示したいと思います。

# 実行環境
OS:OS X Yosemite
Erlang:Eshell V6.5, OTP-Version 18
Elixir:v1.0.4

# Cowboyで静的なページを表示するための新規プロジェクトの作成

$ mix new static_hello_world --sup
$ cd my_ecto

# HexにてCowboyをインストールするために設定ファイルの記載を行う

$ vim mix.exs

mix.exsの内容は下記となります。

defmodule StaticHelloWorld.Mixfile do
  use Mix.Project

  def project do
    [app: :static_hello_world,
     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, :cowboy, :ranch],
     mod: {StaticHelloWorld, []}]
  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
    [{ :cowboy, "1.0.0" }]
  end
end

# Cowboyにて静的ページを表示するためにCowboyの起動に関するコードを記載する

$ vim lib/supervisor.ex
defmodule StaticHelloWorld.Supervisor do
  use Supervisor

  def start_link(_) do
    {:ok, sup} = Supervisor.start_link(__MODULE__, [], name: :supervisor)
  end

  def init(_) do
    processes = []
    {:ok, {{:one_for_one, 10, 10}, processes}}
  end
end
$ vim lib/static_hello_world.ex
defmodule StaticHelloWorld do
  def start(_type, _args) do
    dispatch = :cowboy_router.compile([
     { :_,
       [
         {"/", :cowboy_static, {:priv_file, :static_hello_world, "index.html"}}
       ]
     }
    ])
    { :ok, _ } = :cowboy.start_http(:http, 100, [{:port, 8080}], [{ :env, [{:dispatch, dispatch}]}])
  end
end

# 実際に表示する静的ページを作成する

$ mkdir priv
$ vim priv/index.html
Hello World!

# Cowboyを起動する

$ mix deps.get
$ mix run --no-halt

ブラウザにて http://localhost:8080 にアクセスし
HelloWorldと表示されたら成功です。

# まとめ
今回はElixirでCowboyを使用し静的なWebページを表示してみました。
Plugを使えば、もっと簡単に表示することもできますが下側からPlugが何をしているのかを追いかけてみるために参考になればと思い記事を買いてみました。
次回以降からは動的なページやCookieなど他の要素も紹介していければとも思いますので、宜しくお願いいたします。

それでは皆さま、良いElixirライフを