Elixir

Ubuntu18.04でElixirとPhoenixのインストール

投稿日:2018年9月30日 更新日:

Elixir

Elixir(エリクサー)は、Erlang (アーラン)VM上で動作する関数型プログラミング言語.
並列処理といったErlangの特徴を持ちながら、Rubyぽい書き方ができて親しみやすい.

日本語訳. 最新情報は上を見たほうがよさそう.

Phoenix Framework

Phoenixは、Railsの影響を受けたElixir上のWeb開発フレームワーク.

Erlang VMのインストール

まず、Erlangをインストールする必要がある.

公式の方法ではうまくインストールできなかったので、kerlというバージョンマネージャーをインストールした.

kerlコマンドをダウンロード

kerlコマンドに実行権限を付与

そして、PATHの通ったところに移動

kerlコマンドのオプション

releaseの一覧表示

build

releasseの一つを選んでbuild.第二引数はラベル.
公式からのダウンロードも遅いし、ビルドにも結構時間がかかる.
あわせて1時間ほどかかった.

buildの状態を確認

install

インストール

activate

下記コマンドをそのまま.bashrcに書いた.

hello erlang

eshellプロンプトが表示されれば無事インストールされている.
プロンプトから抜けるには、ctrl+cを2回押す.

Elixirのインストール

kiexのインストール

kiexは、elixirのバージョンマネージャ.

下のコマンドで、~/.kiexにkiexコマンドをインストールする.

.bashrcなどに下記を追加してsource .bashrc

kiexコマンドのオプション

list known

インストールできるバージョンを確認.
rvmと同じ感じで使うことができる.

install

適当なバージョンを選んでインストール.
また、ここで30分ほど時間がかかる.

use

–defaultオプションをつけることで基本使うバージョンを指定できる.

hello elixir

iexでインタラクティブElixirが立ち上がればインストールできてる.

mix

mixは、nodejsでいうnpm、rubyでいうgemみたいなライブラリを管理するコマンド.

Phoenix

hexのインストール

hexはErlangのパッケージマネージャー、phoenixのインストールと依存環境のインストールに必要.

phoenixのインストール

hello phoenix

rails newと同じ感じでプロジェクトを作成できる.

ectoは、active record類似のデータベース操作ライブラリ.
今回はデータベースの設定が面倒なのでectoを使わない.

また、node.jsをインストールしておくと、assets以下でpackage.jsonでnpmライブラリを管理してくれる.

とりあえず、開発用サーバーの起動.ライブリロード機能つき.

rebar3というライブラリが足りてないらしく、インストールするか聞かれる.

inotify-toolsがないのでライブリロードできないと言われる.

なぜか、apt installでインストールできなかったのでソースからコンパイルした.

こう言われるので、

ldconfigしたら無事通った.

ふう.

phoenixを探検

mix.exs

プロジェクトのmix.exsは、railsのGemfileみたいなもの.
使うライブラリを特定する.

lib

railsでいう、appディレクトリ.
プロジェクトの本体部分.

router.ex

その一部.

ここに、 get "/hello", PageController, :hello を書き加えてみる.
mix phx.routesコマンドで登録済みのルートが確認できる.

そして、ブラウザのhttp://0.0.0.0:4000/hello/にアクセスしてみる.

すると、 function HelloWeb.PageController.hello/2 is undefined or private というエラーが出る.

page_controller.ex

再び、http://0.0.0.0:4000/hello/にアクセスしてみると、エラーが変わっている.
Could not render "hello.html" for HelloWeb.PageView, please define a matching clause for render/2 or define a template at "lib/hello_web/templates/page". The following templates were compiled:

hello.html.eex

今度は、templates/page以下に、hello.html.eexを作成する.
eexは、erubyのelixirバージョン.
<%= %>で囲んだ部分についてelixirコードを実行できる.

わーい

文字を表示する

router.ex

router.exにさらに追加.

page_controller.ex

paramsにnameが入ってくるので、さらにviewにわたす.

hello.html.eex

そして、hello.html.eexで、<%= %>で囲む.

ブラウザで、http://0.0.0.0:4000/hello/Phoenixにアクセス

PhoenixでCRUD

postgresqlサーバーの設定

データベースを作れるユーザーを作成しておく.
passwordも設定しておく.

新たなプロジェクト作成

config/dev.exs

先ほど設定したユーザー名とパスワードに変更する.

データベースの作成

データベースが無事作成できれば設定はOK.

Scaffold

railsのscaffoldぽいジェネレータをつかってみる.
phx.gen.html コンテキスト名 スキーマ名 テーブル名 カラム名:カラムの種類
railsと同じくカラムの種類stringは省略できる.
コンテキストは、phoenix1.3から導入された新しい流儀.
cucumberみたいに、コントローラーには人間に親しみやすい関数でシンプルに記述する.
データベースの操作とかは、コンテキストにまとめてコントローラーで使う関数を書く.

router.ex

画面の指示通りにrouter.exに新たなルートを設定する.

resourcesは、railsみたいに7つのルートを作成してくれる.

migration

migrateする

サーバを起動してみる

ブラウザで、http://0.0.0.0:4000/postsにアクセス

BootstrapをつかったCRUDアプリができてる.

elixir tips パターンマッチング

以下は、自動生成されたコントローラーのコード.
コントローラーのアクション関数の第二引数には、paramsがはいってくる.
createアクションの第二引数の設定は、 %{"post" => post_params} .
%{}はマップという連想配列みたいなものなんだけど、これはキーが”post”に該当する値をpost_paramsに指定するという意味.
つまり、post_params = params[“post”].

パターンマッチングは、case文のところでも使っていて、 {:ok, post} -> は、Article.create_postの返り値が、:okを含んでいる場合、次の値をpostに指定するという意味になる.

elixir tips パイプライン

上のコードで、 conn |> put_flash と文同士を |> でつないでいるのがパイプライン
パイプライン演算子では、左の式の結果を右の式の第一引数にすることができる.右の式では第二引数以降を指定する.

elixir tips inspect

プリントデバッグするのに便利なのが、inspect.
IO.putsは引数が文字列でないとエラーになるけど、IO.inspectだといい感じに文字列にしてくれるうえ、きれいにフォーマットしてくれる.

Loggerというライブラリもあるみたい.

この場合、inspectを使うときには、pretty: trueのオプションをつけないとフォーマットしてくれない.

elixir tips iex

mix phx.serverでサーバー起動のタスクができるけど、iex -S mix phx.serverでインタラクティブシェルにしながらサーバーの起動もできる.
rails consoleと同じくプロジェクトの名前空間が使えるから、データベースの操作や確認ができて便利かも.

情報

kindle unlimitedで読める!
なお、①と②がphoenixのバージョン1.2で、③から1.3に対応しているので、まず、①〜③で通読してから①を読み直すのがよいと思われる.

Elixir/Phoenix 初級1: はじめの一歩 (OIAX BOOKS)

Elixir/Phoenix 初級1: はじめの一歩 (OIAX BOOKS)書籍

作者黒田 努

発行オイアクス

発売日2017年11月30日

カテゴリー単行本(ソフトカバー)

ページ数220

ISBN4908829209

Supported by amazon Product Advertising API

Elixir/Phoenix 初級②: データベースとクエリ構造体 (OIAX BOOKS)

Elixir/Phoenix 初級②: データベースとクエリ構造体 (OIAX BOOKS)電子書籍

作者黒田 努

発行株式会社オイアクス

発売日2017年2月23日

カテゴリーKindle版

ページ数305

Supported by amazon Product Advertising API

-Elixir
-,

執筆者:

関連記事

Phoenix channelとReact.jsで簡易チャット

By: Eric Fischer – CC BY 2.0 目次1 Phoenixでreact.jsをつかう2 フォームとメッセージの表示部分をつくる3 Phoenix channel4 D …