ガイドを通してPhoenix v1.6のポイントをおさらいする
この記事はfukuoka.ex Elixir/Phoenix アドベントカレンダー Advent Calendar 2021の1日目です🎄
ご挨拶
fukuoka.ex管理人のkoga1020です。早いもので12月、アドベントカレンダーの季節がやってまいりました。1カ月間よろしくお願いします🎄
テーマ
Phoenix v1.6の公式ドキュメントの日本語訳を先日zennのbookとして公開しました📕
今回はこれを題材に、v1.5からv1.6へのバージョンアップに伴い、何が変わったのか、おさらいをしていきたいと思います。
これは何
Phoenixのhexdocsには公式が提供するガイドがあり、Phoenixの概要から各構成要素の説明、デプロイの解説など、Phoenixを利用する上で知っておくべき情報がまとまっています。これらはすべて英語で提供されるため、さらっと日本語で読めるドキュメントがあると良いなと思い、個人の活動で翻訳を行っているものです。
ちなみに、v1.5から行っている試みです。v1.5版はこちらから。
v1.5からの変更点
9月末にv1.6.0がリリースされ、ちょうど2か月ほどになります。2021/11/29執筆時点でv1.6.2が最新版です。
変更のアナウンスのブログから見出しだけ取り出してみましょう。
- New authentication and mailer generators
- New LiveView HEEx engine
- New LiveView server lifecycle hooks
- New LiveView live_session for optimized navigation
- Node and webpack free asset building with esbuild
mix phx.gen.auth
の提供、新しいHTMLエンジンであるHEExの提供(ヒークスと読むらしいです)、nodeとwebpackの依存をなくしてesbuildを利用した新しいビルド方式あたりが主な変更となっています。
前述したv1.6の翻訳ガイドでも、v1.5のガイドから以下の2つが新たに追加されています。
mix phx.gen.auth
はコマンド一発でEメール+パスワードの認証の仕組みをアプリケーションに導入できます。単純なものであればこれで十分ですね。あくまでこれですべてが賄えるのではなく、これをベースに、ロールの機能をつける、二要素認証を独自に足す、Googleログインを作る等々、要件に応じたカスタマイズのベースにするようなイメージです。
フロントエンドに関しては「ライブラリとしてはwebpackやnodeの依存をデフォルトでなくすよ、必要であれば各自追加してね」というスタンスが伺えます。リリースのブログにも The biggest support issues for Phoenix over the years has revolved around node tooling, breaking changes, and often times unnecessary churn.
とあり、悩みのタネだったのでしょう。
ガイド上の変更点
上の mix phx.gen.auth
と esbuild周りのアセット管理のドキュメントに加えて、ガイドでは以下の変更が加わっています。
- ビューとテンプレートのガイドがHEExベースの記述になった
- Flyへのデプロイガイドが追加された
- コンテキストガイドが大幅ボリュームアップ。Ecto.Multiを使った書き方も登場
これら以外はv1.5とそこまで変化はなく、コードブロックが最新化されていたりといった変更が入っています。
コンテキストのガイドはかなりボリュームが増えており、読み応えのある内容となっています(前半後半で分けないとzennの文字数制限にかかってしまうほど...!)
本文にEcto.Multiを使ったトランザクション処理の書き方が含まれるなど、より実践に近い内容となっています。
Fly.ioに関してドキュメントも追加され、Phoenixの作者であるChrisがjoinして開発を進めているのもあってか、LiveViewを活用したアプリケーションの実行環境として要注目だと思います。
ドキュメントにも複数リージョンへのスケーリングのセクションがあり、アメリカの西海岸と東海岸にそれぞれ配置されたアプリケーションがクラスター化されるなど、おもしろい内容となっています。
「すぐに実行可能なPubSub+LiveView+Phoenixアプリケーションがユーザーの近くの大陸で動作するんだよ、すごいでしょ!」(意訳)的なこともツイートされてたり。
以下のブログにLiveViewを開発に至ったモチベーションや歴史が書かれています。合わせて読むと良さげです。
まとめ
簡単ですが、Phoenix v1.6のポイントをまとめてみました。
-
mix phx.gen.auth
で認証の機構をサクッと作り、 - LiveViewでAPIなしでサーバーと通信するリッチな画面をスピーディーに実装し、
- webpack+nodeの依存なくビルドし、
- あとはFlyにサクッとデプロイして稼働
のようなストーリーが見えます。LiveViewのProductionの事例などどんどん出てきそうですね。楽しみな技術です🚀
p.s. phx.gen.docker
なる新たなmixタスクのPRも出ていました👀 デプロイ周りのスタンダードもあらかた固まってくるのではと思っています。
Discussion