はじめに
Elixirという言語を使ったアプリケーションのチュートリアルを行います。
どうやらElixir + Phoenixというのが一般的なようです。
node + Express, ruby + ruby on railsのようなイメージでしょうか。
しかし今回は、Elixir単体でプロジェクトを作成し、Cowboyという高速なWebサーバーを併用しアプリケーションを始めてみたいと思います。
前提環境
mac os
インストール
erlangをインストール
Elixirを動かすためのerlang(アーラン)というものをインストールする
brew install erlang
Elixirをインストール
続いてElixir本体をインストール
brew install elixir
インストールの確認
バージョン表記が表示されればOK
elixir -v
プロジェクトの作成
Elixirでの新規プロジェクトの作成はmix newコマンドに続けてアプリケーション名を入れて行います。引数に「–sup」を入れるとSupervision treesを含むアプリケーションが作成されるとのこと。
プロセスの監視を行うデーモン化ツール?ちょっと知識が浅いですが追加した状態で作成します。
mix new hello_app --sup
ズラっとファイルが作成されます。でも他のフレームワークなどと比べるとかなりシンプルな印象ですね。
依存関係の追加方法
依存関係を追加する方法は、nodeでいう「npm i ~」のようにコマンドで行うのではなく、mix.exsファイルに直接追記する形になります。
(JavaScriptが主なので度々比較してしまうのはご容赦下さい。)
mix.exs
defp deps do
[
// 追加
{:cowboy, git: "https://github.com/ninenines/cowboy.git", tag: "2.0.0-pre.4"}
]
end
メイン処理の追記
ルーティングの設定と、Supervisorの設定を追記します
defmodule hello_app do
# 以下追加
use Application
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
worker(__MODULE__, [], function: :run)
]
opts = [strategy: :one_for_one, name: HelloApp.Supervisor]
Supervisor.start_link(children, opts)
end
def run do
routes = [
{"/", HelloApp.Handler, []}
]
dispatch = :cowboy_router.compile([{:_, routes}])
opts = [{:port, 4000}]
env = %{dispatch: dispatch}
{:ok, _pid} = :cowboy.start_clear(:http, 100, opts, %{env: env})
end
end
Handlerの記述
ルーティングで指定したHandlerの中身のファイルを作成します。
hello_app/handler.ex
defmodule HelloApp.Handler do
def init(req, opts) do
headers = %{"content-type" => "text/plain"}
body = "Hello world!"
{:ok, resp} = :cowboy_req.reply(200, headers, body, req)
{:ok, resp, opts}
end
end
依存関係の解決と実行
まず先ほどmix.exsに追記したCowboyの依存関係を解決するために以下のコマンド
mix deps.get
続いてプログラムを実行するために以下のコマンド
iex -S mix
ブラウザで開き表示を確認する(初期ポート4000)
参考
環境構築
https://elixir-lang.jp/install.html
https://qiita.com/hayabusa333/items/f5a1ab7a2121579ead25
文法など
https://elixirschool.com/ja/lessons/basics/basics/
https://dev.classmethod.jp/articles/web_language_topic-elixir_introduction/