🥾

Elixir + Phonenix でWebアプリ作る時の基本まとめ:環境構築

2021/06/21に公開

Elixir + Phoenixとはなにか

ElixirはErlangランタイム上で動作するプログラミング言語。
PhoenixはElixirで記述するWebフレームワーク。
ちょうどRubyとRailsのようなもの。

すでにRuby on RailsやNode.js + React.js・Vue.jsのようなWebフレームワークがあるのに何故また新しいフレームワークが必要なのか。
理由はこの動画によくまとまっています。
https://www.youtube.com/watch?v=U_Pe8Ru06fM

つまり、Railsはサーバーサイドテンプレートが主になり、ユーザー環境がインタラクティブじゃない、一方でReact.jsを使ったSPAならインタラクティブなユーザーエクスペリエンスが実現できるが実装は複雑で一筋縄じゃいかない。

Elixir + Phoenixならその間を取って、複雑さを最小限にしつつユーザーにリッチなエクスペリエンスを提供できるそうな。

サイト構成はSPAではなく、Railsのようにリソースごとにコントローラを作ってページ切り替えをしつつ、各ページ内の情報更新はSPAのようにリアルタイムにやっていく。
PhoenixのLiveViewを使えば、サーバーサイドでデータの更新を記述すればJS書かずにブラウザ上の表示を更新できる。

だけど、今まで出てきた多くのものがそうであったように、前評判で言われてたことが実際に手を動かしたらそんなに簡単じゃないことに気付かされることもある。

なので、まずは自分で手を動かしてやっていこうと思う。
今回はPhoenixを動かす前段階の環境構築をやっていく。

Elixir環境のインストール

Macの場合は

$ brew install elixir

で終わり。
以下はソースコードからインストールする手順。

Erlang/OTPのインストール

各ディストリビューションのパッケージから入れる場合はよしなに。私は通常、ソースコードからインストールします。

  1. Erlang/OTP公式サイトからソースコードを落とす。
  2. 解凍してディレクトリに入る。
    $ tar xvzf otp_src_24.0.tar.gz
    $ cd otp_src_24.0
    
  3. ビルドを実行(私は /usr/local/erlang 以下にバージョン番号でディレクトリを創ってそこにインストールしています)。
    $ ./configure --prefix=/usr/local/erlang/24.0 --enable-threads --enable-kernel-poll --disable-hipe --enable-shared-zlib --with-ssl --without-javac
    $ make
    
  4. インストール
    $ sudo make install
    
  5. パスの設定
    $ echo "export PATH=/usr/local/erlang/24.0/bin:\$PATH" >> ~/.zshrc
    $ source ~/.zshrc
    
  6. 動作確認
    % erl
    Erlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit]
    Eshell V12.0  (abort with ^G)
    1> 
    
    上の画面が立ち上がったらCtrl-Cを2回叩いて抜ける。

Elixirのインストール

  1. ダウンロード
    $ git clone https://github.com/elixir-lang/elixir.git
    $ cd elixir
    
  2. 最新バージョン確認
    $ git tag
    v1.11.0
    v1.11.0-rc.0
    v1.11.1
    v1.11.2
    v1.11.3
    v1.11.4
    v1.12.0
    v1.12.0-rc.0
    v1.12.0-rc.1
    v1.12.1
    
    最新の安定版は v1.12.1 のようだ。
  3. ビルドとテスト
    $ git checkout v1.12.1
    $ make clean test
    
  4. 私は /usr/local/elixir 以下にバージョン番号でディレクトリを作ってインストールする。
    $ sudo make install PREFIX=/usr/local/elixir/1.12.1 
    
  5. パスの設定
    $ echo "export PATH=/usr/local/erlang/1.12.1/bin:\$PATH" >> ~/.zshrc
    $ source ~/.zshrc
    
  6. 動作確認
    % iex
    Erlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit]
    Interactive Elixir (1.12.1) - press Ctrl+C to exit (type h() ENTER for help)
    iex(1)> 
    
    上の画面が立ち上がったらCtrl-Cを2回叩いて抜ける。

Phoenixのインストール

  1. Phoenix公式サイトの左上で最新の安定版のバージョン番号を確認する。
    • 今回は 1.5.9 だった。
  2. Phoenixをインストールする。
    $ mix archive.install hex phx_new 1.5.9
    

Node.jsのインストール(Ubuntuの場合)

  1. パッケージの更新
    $ sudo apt update
    
  2. 一旦 nodejsとnpmをインストールする(ただしこの段階では古い可能性がある)。
    $ sudo apt install nodejs npm
    
  3. n packegeをインストール
    $ sudo npm install n -g
    
  4. 最新の安定版をインストール
    $ sudo n stable
    
  5. 古いnodeとnpmをアンインストール
    $ sudo apt purge -y nodejs npm
    
  6. 一度ログインし直す。

PostgreSQLのインストール(Ubuntuの場合)

$ sudo apt install postgresql

以上。

inotify-toolsのインストール

$ apt-get install inotify-tools

Ubuntu以外のディストリビューションでの入れ方は以下。
https://github.com/inotify-tools/inotify-tools/wiki

以上で環境構築は終了です。お疲れ様でした。
次回は基本的なWebアプリの作り方をまとめていきます。

Discussion