記事作成の動機(つぶやき)
※スルー可
- バージョンアップで日本語記事の約半分は古い情報になった件
- 札幌でElixirコミュニティとかできないかなぁ。面白いことができればそれがベスト→Sapporo.BEAMありました!
- 今月終わったら新卒じゃなくなるし、なんかやっておきたかった感
用語解説
※スルー可
※筆者はLaravelとSpringしかさわったことありません。
用語 | 読み方 | 分類 | 解説 |
---|---|---|---|
Erlang | アーラン | PL | 並列処理に特化。関数型プログラミング言語 |
Elixir | エリクサー | PL | ErlangをRubyライクにした言語 |
Phoenix | フェニックス | FW | Railsライクなフレームワーク |
PostgreSQL | ポストグレスキューエル | DB | Phoenixがデフォルトで指定しているデータベース |
BEAM | ビーム | VM | ErlangとElixirが動作する仮想マシンの実行環境 |
環境構築 (※Ubuntu向け)
環境構築は神スライドみながらやってます。
生憎、ローカルLinux汚染されすぎてアルテマウェポン(Docker-Compose)すら死ぬ筆者は
いろいろすみません
CoderでやったらCowboy(仮想サーバー)上の実行結果を確認できませんでした。新しいことに挑戦すれば挫折することもありますね。旧アカウント持っているのでCloud9でこの記事を自分で読んで環境構築しました。当然AWS Cloud9でも同じことができます。
いよいよ、環境構築に入ります。コマンド連打になりますが、Y/N聞かれたら、全てYにしましょう。
Elixirの用意
# これがないとインストールに失敗することがあるらしいので
# (参照:https://qiita.com/kirishima677/items/82198a304d121d201cc2)
sudo touch /etc/init.d/couchdb
# Erlangの依存関係リストを取得・登録・削除・更新
sudo wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
sudo dpkg -i erlang-solutions_1.0_all.deb
rm -rf erlang-solutions_1.0_all.deb
sudo apt-get update
# Elixirを入れてバージョンの確認
sudo apt-get install elixir
iex -v
最後のiex -v
でバージョンを確認できれば大丈夫です。
PostgreSQLの用意
PhoenixがデフォルトでPostgreSQLにするもんで、他のDBでやるのはなかなか大変です。後日別記事で紹介できたらいいなあ(希望)
sudo apt-get update
# PostgreSQLをインストール
sudo apt-get install postgresql
sudo service postgresql start
# 問題なく動作するか確認
sudo -u postgres psql
# Ctrl + D で抜けてください
# ユーザとパスワード設定
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
sudo service postgresql restart # DB再起動
PostgreSQLのUTF-8設定
筆者はPostgreSQL使ったことないので神記事をもとにUTF-8の設定をしましたが、この記事のtemplate0
を指定する方法のほうが合理的で楽ですね……。
sudo -u postgres psql # 以下のコマンドはPSQLで実行します
UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
DROP DATABASE template1;
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8';
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
# 確認用コマンド。下記画像のようにtemplate1がUTF8になればOK
# 確認ができたら q を押してから Ctrl + Dで抜けましょう
\l
Phoenixの用意
※何度も言いますが、デフォルトでPostgreSQL
が設定されます。
# 依存解決ツール(hex)を入れておく
mix local.hex
# Phoenixのインストール
mix archive.install hex phx_new 1.4.0
# プロジェクト作成について
# 任意のプロジェクト名に書き換えてください(ハイフンとか使えない文字もあります)
# webって文字があるプロジェクト名は使えません(私はapiにしています)
mix phx.new プロジェクト名
cd プロジェクト名
# いれたらエラーがなおった子たち
# 名前的にはErlangの開発用のプラグイン(調べます)
sudo apt-get install erlang-dev
sudo apt-get install erlang-parsetools
# ファイルやディレクトリの監視ツール。あとでPhoenixに要求される
sudo apt-get install inotify-tools
余談① Node.jsを使いたい場合
神記事を参照して入れられます。必須ではないはず、ですが使いたい人はいるはずです。
# Node.js
cd プロジェクト名/assets
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
source ~/.nvm/nvm.sh
npm install
nvm install --lts
cd ../
余談② 仮想サーバのポートを変える
筆者はCloud9なので8080に設定にしました。でないと、サーバ上での動作がわかりません。既に4000を使っている場合等の事情があればプロジェクト名/config/dev.exs
のhttp:4000
をhttp:8080
に変えておきましょう。
依存関係の更新とビルド
ここが一番のハマり要素!! マヂで何時間かけて調べたかわかりません(´・ω・`)
mix deps.get # ここで落ちると厄介
mix ecto.create # コンパイル。なんかここでrevar入れられた
具体的にはDBや仮想サーバに接続するライブラリ等を取得しています。Javaで言うところのjarみたいな認識です。もしも、記事が古くなってきてハマってしまったら、コメントに書いて、筆者に八つ当たりしてくださいね。たぶん調べてどうにかします。だいたいバージョンの指定が古かったりとか、代替のライブラリがあるとか、大人の事情
が多いです。
- hexの公式が参考になります。(参考になる?)
- Numberとか実用的なライブラリもあるので、DB接続と合わせて別記事で紹介できたらいいなあ(希望)
- プラグインの導入は救世主である株式会社gumiの記事がわかりやすいです。
- 上記のコマンドの詳細は仏記事を参考にしました。
※日本語の本がないElixirを習得するなら株式会社gumiの記事は完全網羅すべきです。
公式に許可を取って「見やすく、わかりやすく」日本語訳してくだすってます。普及にかなり本気です!
サーバ、始動
下記のいずれかコマンドでサーバが立ち上がれば環境構築は完了です。
# iex上で実行
iex -S mix phx.server
# 普通に実行
mix phx.server
# 正直違いがわかりません!どう違うのか調べます
ポートを触っていないなら http://localhost:4000 でアクセスできるでしょう。
ポートを触っているなら http://localhost:8080 でアクセスできるでしょう。
ちなみに筆者はプロジェクト作成時に --no-html
で指定していますので、index.html
は作成されておらず、計画通りエラりました。皆さんはちゃんとしたPhoenixの画面が出ているはずです。
お疲れ様でした!!!!
これで私の会社では、私が一番ElixirとPhoenixに詳しいはずです!(他に誰も触ってないだけ)
今後の話題
次回 WebAPIサーバをつくる
- プロジェクト作成時の引数
- ライブラリ
- 設定ファイル
- サーバ起動時のコマンドの違い
- PostgreSQLとMySQL以外でもやってみたい。特にSQLiteは需要あるはず。
- そもそもElixir言語について、記事に書けてない。
- herokuがPostgreSQL使えるからデプロイ方法も調べておきたい。