技術メモ

プログラミングとか電子工作とか

Phoenix入門 (第1章 概要、環境構築)

f:id:ysmn_deus:20190219130922p:plain

どうも、靖宗です。
前回まではElixir入門ということでやっていましたが、今回からはElixirで書かれているPhoenixを学習していきたいと思います。
まだ触ってないのでなんとも言えませんが、基本的にはElixirがざっくりと分かっている想定で記事を書いていきます。

Phoenixとは

PhoenixはElixirで書かれたMVCパターンを用いたフレームワークです。いわゆるRuby on RailsPythonDjangoにあたるものです。
一応公式ドキュメントのうたい文句としては「高い生産性と高いパフォーマンス」を両立するものだそうです。

Phoenixを構成するもの

  • Endpoint
  • Router
  • Controlles
  • Views
  • Templates
  • Channels
  • PubSub

だそうです。大体名前で想像はつきますが、各々はチュートリアルを進めて行くにあたって詳しく見ていきましょう。

Phoenix Layers

Phoenixはいろんな既存モジュールも組み合わせて機能を実装しています。

Coboy

ウェブサーバーだそうです。

ninenines.eu

Plug

たぶん各モジュールの機能をうまいこと構成してくれる便利ツール。よく分からないのでこれも追々。

hexdocs.pm

Ecto

データベースラッパーだそうです。コレのおかげでSQLとか書かなくてもよくなるはず。

hexdocs.pm

Phoenixのインストール

早速利用できるようにインストールしていきます。
Elixirは既にインストール済みとします。

Hexをインストールするように書かれていましたが、多分最新のElixir(記事を記載している時点では1.8)以上だと既に入ってると思います。
なので早速Phoenixをインストールします。

PS > mix archive.install hex phx_new 1.4.1 # 2019/02現在でPhoenixはv1.4.1
Resolving Hex dependencies...
Dependency resolution completed:
New:
[32m  phx_new 1.4.1[0m
* Getting phx_new (Hex package)
All dependencies are up to date
Compiling 10 files (.ex)
Generated phx_new app
Generated archive "phx_new-1.4.1.ez" with MIX_ENV=prod
Are you sure you want to install "phx_new-1.4.1.ez"? [Yn] Y
* creating /.mix/archives/phx_new-1.4.1

これでインストール完了です。早い!
Plug,Cowboy,Ectoなどは勝手に入るようです。

PostgreSQLのセットアップも必要ですが、Dockerで立てておくことにします。
ユーザー名とパスワードは省略して、ユーザー名postgres、パスワード無しでログインできるコンテナを作成します。

PS > docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
PS > docker run --name ph_psql -p 5432:5432 -e POSTGRES_PASSWORD=postgres -d postgres
49c57a5bb7f40366888e1a57efddc761c3a1c6b2b91794af5711e62bdb95edb2
PS > docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
49c57a5bb7f4        postgres            "docker-entrypoint.s…"   3 seconds ago       Up 2 seconds        0.0.0.0:5432->5432/tcp   ph_psql

2019/02/25 コマンド修正

一応ちゃんとPostgreSQLに入れるか試しておきます。

PS > docker exec -it ph_psql psql -U postgres
psql (10.5 (Debian 10.5-1.pgdg90+1))
Type "help" for help.

postgres=#

問題無さそうです。
嘘です、ユーザー名とパスワードが両方postgresじゃないといけないのでパスワードも設定する必要があります。
というか折角なので独自のユーザー名とパスワード(両方ともelixir)を試してみます。

docker run --name ph_psql -p 5432:5432 -e POSTGRES_USER=elixir -e POSTGRES_PASSWORD=elixir -d postgres

ひとまずこれでPhoenixを動かす準備はできてるようです。
次回はHelloWorldを実行したいと思います。