週刊Elixirライブラリ2015-5

Elixirのライブラリの解説を週ごとにお届けする記事です。
解説が間違っていた場合には、コメントか@hayabusa333にご連絡くださると嬉しいです。

今週はCalliopeについて

# Calliope is 何?
CalliopeはElixirのHamlパーサになります。

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

# Calliopeの実行を試すために新規プロジェクトの作成

$ mix new my_calliope
$ cd my_calliope

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

$ vim mix.exs

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

defmodule MyCalliope.Mixfile do
  use Mix.Project

  def project do
    [app: :my_calliope,
     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]]
  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
    [ {:calliope, github: "nurugger07/calliope"} ]
  end
end

# 依存関係の解決を行います。

$ mix deps.get
$ mix deps.compile

# Calliopeを実際に使ってみる
Calliopeを実際に使ってみて、Hamlの記法がHTMLへと変換されることを確認

$ iex -S mix
iex(1)> Calliope.render "%h1 Welcome to Calliope"
"<h1>Welcome to Calliope</h1>"

# Trot にて Calliopeを使ってみる
HAMLを使って、HTMLを記載できるとなると、ブラウザから確認がしたくなります。
そこで以前に紹介いたしました。Trotにて実際に確認を行ってみましょう
Trotのインストールまでは下記をごらんください
週刊Elixirライブラリ2015-3
Trotの準備は完了している前提でお話しさせていただきます。

# テンプレートを記載
まずはテンプレート用のディレクトリを作成し、Hamlの記載を行います。

$ mkdir -p priv/templates
$ vim priv/templates/hello_haml.html.haml

priv/templates/hello_haml.html.hamlの内容は以下となります。

%html
        %head
                %title Haml Template

        %body
                %h1 Haml Template
                %p <%= @message %>

# my_trot に新規にテンプレートのルートを追加します。

$ vim lib/my_trot.ex 

lib/my_trot.exの内容は以下となります。

defmodule MyTrot do
  use Trot.Router
  # テンプレートを使用することを明示する
  use Trot.Template

  get "/", do: 200

  post "/hello" do
    # ヘッダーのparamを取得するために実行
    # bodyのparamは下記のメソッドでは取得できない模様
    conn = fetch_query_params(conn)
    # URLからパラメータが取得できたかをコンソール表示(デバッグ用)
    IO.inspect conn.params
    # conn.params["name"]にて、ヘッダーにて取得されたパラメータの
    # name属性の値を表示するように指定
    "Hello Trot is #{conn.params["name"]}!!"
  end

  # Haml用に新しいURLのルートを作成
  get "/hello/haml" do
    render_template("hello_haml.html.haml", [message: "Hello Haml"])
  end

  import_routes Trot.NotFound
end

MyTrotを実行します。

$ iex -S mix

以下のURLにアクセスを行います。
URL:http://localhost:4000/hello/haml
出力結果:Hello Haml Template

Hello Haml Templateが表示されたら成功です。
これでHTML形式にて記載を行わなくてもHTMLを書くことができるようになりました。
Trotには標準でCalliopeが内部にインストールされるようになっておりますので使用してみてはいかがでしょうか

# 参考サイト
テンプレートをレンダリングするだけの簡単なお仕事〜

# まとめ
今回はHamlパーサのCalliopeをご紹介いたしました。
上記でも記載いたしましたが以前に紹介させていただきました TrotにはCalliopeは標準にて使用できるためHamlにてHTMLファイルを記載してみてはいかがでしょうか。
面白いWebアプリケーションができるのが楽しみです。

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