Elixir/Phoenix環境をWindows10に構築する(2)
Elixirのインストールはこちら。
やること
今回はPhoenix
をインストールします。
インストールの手順はこちらが詳しいようです。
Phoenix
はElixirで書かれた、MVCパターンのWebアプリケーションを開発するためのフレームワークです。Ruby on Rails
やASP.NET MVC
などと同じようなものですね。
このフレームワークを使うことで、Webアプリケーションの雛形がスパッと生成され、フレームワークに乗ることで効率的に開発ができると思われます(まだよくわかってない)。
Mix
さて、そんなPhoenix
のインストールですが、これに限らず開発に必要な様々なパッケージの導入などにはMix
という機能(コマンド)を使う必要があるようです。
今のところのなんとなくのイメージなのですが、dotnet
コマンドみたいなものなのかなと思っています。
プロジェクトの作成にdotnet new
、パッケージの追加にdotnet add
、プロジェクトの実行にdotnet run
したりしますが、Mix
はこれらと同じことをするときに使います。
Mix
はElixir
のインストール時に一緒にインストールされているはずです。
コマンドラインで確認してみましょう。
$>mix -v Erlang/OTP 21 [erts-10.1] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] Mix 1.8.1 (compiled with Erlang/OTP 20)
Hexのインストール
Hex
というのはパッケージマネージャで、Phoenixアプリケーションを可動させるための各種パッケージをインストールするために必要です。
コマンドプロンプトで以下のように入力してHex
をインストールします。
mix
コマンドの出番です。
$>mix local.hex
Phoenixのインストール
コマンドプロンプトで以下のように入力します。
$> mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez
これでPhoenix
のインストールは完了...しません。
残念ながら。
Node.jsのインストール
Node.jsのインストールはオプションとのことですが、オプションならば入れておくことにします。 Node.jsのダウンロードサイトからインストーラをダウンロードします。 nodejs.org
インストーラを実行します。
次の画面でAgreementに同意します。 インストール先は既定値で。
インストールの構成もそのまま。
インストールが完了したら、確認してみます。
$>node -v v10.15.3
バージョンが表示されたらOKです。
PostgreSQLのインストール
WebアプリケーションでDBは欠かせないですね。 公式サイトから現時点での最新版(11.2)をダウンロードします。 PostgreSQL Database Download | EnterpriseDB
ダウンロードが完了したらインストーラを実行します。
インストール先は既定値で。
インストールするコンポーネントも規定値で。
データ(おそらくDBのテーブルとか)の保存先も規定値で。
このDBのデフォルトの管理者(Super User)としてpostgres
という名前のユーザーが用意されるのですが、そのユーザーのパスワードを決めます。
ローカル環境の構築なのでpostgres
としておきました。
ポート番号は既定値で。
ロケールは「Japanese, Japan」にしました。
最後に表示されるインストール情報はこんな感じです。
Installation Directory: C:\Program Files\PostgreSQL\11 Server Installation Directory: C:\Program Files\PostgreSQL\11 Data Directory: C:\Program Files\PostgreSQL\11\data Database Port: 5432 Database Superuser: postgres Operating System Account: NT AUTHORITY\NetworkService Database Service: postgresql-x64-11 Command Line Tools Installation Directory: C:\Program Files\PostgreSQL\11 pgAdmin4 Installation Directory: C:\Program Files\PostgreSQL\11\pgAdmin 4 Stack Builder Installation Directory: C:\Program Files\PostgreSQL\11
これでインストールの準備が完了です。 インストールを開始しましょう。
インストールが完了すると、以下のように表示されます。 ここのチェックを外してインストールを終了します。
パスを通す
Postgresの各種コマンドを実行できるようにパスを通します。
上記の「インストール準備完了時に表示される情報」をもとに、Postgresのインストール先にあるbin
フォルダを環境変数のPath
に加えます。
全て規定値でインストールしていれば以下のフォルダだと思います。
C:\Program Files\PostgreSQL\11\bin
確認
それでは確認してみましょう。 一度コマンドプロンプトを閉じて、再度コマンドプロンプトを起動してください。 そして、以下のコマンドを入力します。
$>psql --version psql (PostgreSQL) 11.2
インストール成功です。
再びPhoenixのインストールへ
これでPhoenixのプロジェクト作成と実行に必要なものが揃いました。 それではプロジェクトを作成しましょう。
プロジェクト作成
プロジェクト作成には次のコマンドを入力します。 お約束のハローワールドです。
$>mix phoenix.new hello_world
プロジェクトの生成が開始し、hello_world
フォルダが作成され、その中にプロジェクトを構成するファイルやフォルダが配置されます。
インストール中に以下のように依存関係をインストールするか訊かれるので、もちろんy
としておきます。
これで、必要なパッケージが取得、インストールされ、すぐに実行可能な状態になります。
Fetch and install dependencies? [Yn] y * running mix deps.get * running npm install && node node_modules/brunch/bin/brunch build
プロジェクトの生成が完了したら、早速実行...といきたいところですが、ちょっと待ちましょう。
プロジェクト生成処理のメッセージの一番最後を見てみましょう。 こんなメッセージがあります。
We are all set! Run your Phoenix application: $ cd hello_world <= プロジェクトフォルダに移動して $ mix phoenix.server <= Webサーバーを起動しなよ You can also run your app inside IEx (Interactive Elixir) as: $ iex -S mix phoenix.server <= IEx(対話型の実行環境)からでも実行できるよ。 Before moving on, configure your database in config/dev.exs and run: $ mix ecto.create <= 実行する前に設定ファイル(./config/dev.exs)を変更して、これをやってね。DB作るから
これをやらなくてもWebサーバーは起動できてウェルカムページも表示されます。
しかし、DBが作られていないためコンソールには延々とエラーメッセージが流れることになります。
ですので、Webサーバーを起動する前にこのプロジェクトのためにDBを作成します。 プロジェクトフォルダ直下で、以下のコマンドを入力します。
mix ecto.create
これで準備完了です。
念の為、このプロジェクト用のDBが作られているかを確認しましょう。
-U
オプションはPostgresSQLのユーザーを指定するオプションです。
今回のインストール作業ではデフォルトのpostgres
ユーザーのみが存在しているはずなので、それを指定します。
-l
オプションは現時点で存在するDBのリストを表示させるオプションです。
パスワードを求められるので、インストール作業中に指定したパスワードを入力します。
今回、私はpostgres
と設定しました。
以下のようにDBのリストが表示され、その中にプロジェクトの名前が見つかればOKです。
今回はhello_world
というプロジェクトでmix ecto.create
したので、hello_world_dev
というDBがリストに含まれています。
$>psql -U postgres -l ユーザ postgres のパスワード: データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限 -----------------+----------+------------------+--------------------+--------------------+----------------------- hello_world_dev | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 | postgres | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 | template0 | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres + | | | | | postgres=CTc/postgres (4 行)
Webサーバーの起動
プロジェクトフォルダ直下で、以下のコマンドを入力してWebサーバーを起動します。
$> mix phoenix.server ...略... Generated ecto app ==> phoenix_ecto Compiling 6 files (.ex) Generated phoenix_ecto app ==> hello_world Compiling 12 files (.ex) Generated hello_world app [info] Running HelloWorld.Endpoint with Cowboy using http://localhost:4000 22:23:11 - [32minfo[39m: compiled 6 files into 2 files, copied 3 in 1.0 sec
それではブラウザでlocalhost:4000
にアクセスしてください。
以下の画面が表示され、かつ、コンソールにエラーメッセージが流れていなければ成功です。
コンソールにエラーメッセージが流れる場合
もしかしたら、mix phoenix.server
を実行したときにコンソールに以下のようなエラーが流れるかもしれません。
C:\Users\nishizawa\Desktop\hello_world>mix phoenix.server warning: found quoted keyword "test" but the quotes are not required. Note that keywords are always atoms, even when quoted. Similar to atoms, keywords made exclusively of Unicode letters, numbers, underscore, and @ do not require quotes mix.exs:52 Compiling 12 files (.ex) Generated hello_world app [info] Running HelloWorld.Endpoint with Cowboy using http://localhost:4000 [error] Postgrex.Protocol (#PID<0.352.0>) failed to connect: ** (Postgrex.Error) FATAL 28P01 (invalid_password): ・ス・ス ・ス[・スU"postgres"・スフパ・スX・ス・ス・ス[・スh・スF・スリに趣ソス・スs・ス・ス・スワゑソス・ス・ス [error] Postgrex.Protocol (#PID<0.350.0>) failed to connect: ** (Postgrex.Error) FATAL 28P01 (invalid_password): ・ス・ス ・ス[・スU"postgres"・スフパ・スX・ス・ス・ス[・スh・スF・スリに趣ソス・スs・ス・ス・スワゑソス・ス・ス ...
文字化けは無視していただいて、英語の部分だけ見るとinvalid_password
があります。
このエラーは「WebサーバーがDBに接続しようとしたけど、パスワードが違うから接続できなかった」という内容のようです。
対処
mix phoenix.new
でプロジェクトを作成したときのメッセージを思い出してみましょう。
config/dev.exs
を設定してね、というメッセージがあったと思います。
このconfig/dev.exs
ファイルの中にDBへの接続に関する設定も書かれています。
エディタで開いて、一番下に以下のようなDBに関する記述が見つかります。
# Configure your database config :hello_world, HelloWorld.Repo, adapter: Ecto.Adapters.Postgres, username: "postgres", password: "postgres", database: "hello_world_dev", hostname: "localhost", pool_size: 10
このusername
とpassword
にPostgreSQLのユーザー名とパスワードが正しく記述されているかを確認してください。
デフォルトで上記の内容になっているので、もしインストール作業の中でpostgres
ユーザーのパスワードをpostgres
以外に設定していた場合、このファイル内のpassword
の項目を変更してください。
例えば、postgres
ユーザーのパスワードにhello
と指定していたとしたら、以下の用に書き換える必要があります。
# Configure your database config :hello_world, HelloWorld.Repo, adapter: Ecto.Adapters.Postgres, username: "postgres", password: "hello", database: "hello_world_dev", hostname: "localhost", pool_size: 10
以上でPhoenixのインストールまで完了です。