歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Elixir】ElixirのWebフレームワーク、Phoenixをインストールだけしてみた

Elixirという関数型言語が流行り始めているような雰囲気を感じています。

ErlangVM上で動く並列処理に強い言語で、(詳しく知らないのですが)Prologの影響が強くいまいち使いづらいErlangに対して、 Rubyっぽい見た目で使いやすくした言語と聞いています。

R言語をたまに使っている身としては、dplyrやtidyrと同じくF#のパイプライン演算子が使える言語として気になっていました。 仕事でRubyを書いていても、「ここはパイプを使いたいなあ…でも無理やり実装してもRubyオブジェクト指向の世界観に合わないし」と 悩んでいたのでいろいろ試してみたいです。

この間プログラミングElixirが出て、今読みながらいろいろと遊んでみたいです。 プログラムの書き方だけでなく、ドキュメントの文化や、テストコードの書き方まで紹介されており、 かなり実用的で楽しい本だと感じています。

プログラミングElixir

プログラミングElixir

といっても今日はRuby on RailsライクなフレームワークであるPhoenixをインストールして起動しただけの内容です。 公式ドキュメントや下の記事を参考にしました。

APIサーバーを作りたいだけなので、TrotというSinatraっぽいマイクロフレームワークだ という記事を見つけたので、そちらも気になっています。

qiita.com

ひとまず、AWSUbuntu Server 14.04 LTS (HVM)のインスタンスを立てて入れました。特に詰まることもありませんでした。

Elixirのインストール

Elixirの公式ドキュメントにある通りにインストールできます。

wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install esl-erlang
sudo apt-get install elixir

次にhexをインストールします。Elixir, Erlang 向けのパッケージ管理ツールで、要するにPythonのpipやRubyのGemのようなものらしいです。

mix local.hex

PostgreSqlのインストール

「The PostgreSQL wiki has installation guides」 という記述があったため、 そのリンク先にあったOfficial Ubuntu Community Wikiに従ってインストールしました。

といってもapt-get installしただけです。

sudo apt-get install postgresql postgresql-contrib

Phoenixのデフォルトではuser, passwordともにpostgresに接続するよう設定されているため、 そのように設定します。

当たり前ですが、デフォルト設定は変えたほうがいいですね。

sudo service postgresql start
sudo -i -u postgres
psql

localのpostgresに接続したら、パスワードをpostgresに設定します。

ALTER ROLE postgres LOGIN PASSWORD 'postgres';
¥q

node.jsのインストール

「Node is an optional dependency. 」と書いていたのですが、一応インストールしました。

sudo apt-get install nodejs npm nodejs-legacy
sudo npm install

Phoenixプロジェクトを作成して立ち上げる

mix phoenix.new hello_phoenix
cd hello_phoenix

立ち上げます。

mix ecto.create
mix phoenix.server

どうやらRuby on Railsのように、コマンドでDBを作成したりいろいろと操作できるようです。

ここまで来て気づいたのですが、私はプライベートなサブネットに作ってしまったので、 ブラウザで接続できません。

curllocalhostを叩いたものをgrepして、"Welcome to Phoenix!"と表示されているのか確認します。

curl http://localhost:4000 | grep "Welcome to Phoenix!"

表示結果です。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1938  100  1938    0     0   170k      0 --:--:-- --:--:-- --:--:--  172k
  <h2>Welcome to Phoenix!</h2>

大丈夫そうですね。