📚

ガイドを通してPhoenix v1.6のポイントをおさらいする

2021/12/01に公開

この記事はfukuoka.ex Elixir/Phoenix アドベントカレンダー Advent Calendar 2021の1日目です🎄

ご挨拶

fukuoka.ex管理人のkoga1020です。早いもので12月、アドベントカレンダーの季節がやってまいりました。1カ月間よろしくお願いします🎄

テーマ

Phoenix v1.6の公式ドキュメントの日本語訳を先日zennのbookとして公開しました📕

今回はこれを題材に、v1.5からv1.6へのバージョンアップに伴い、何が変わったのか、おさらいをしていきたいと思います。

https://zenn.dev/koga1020/books/phoenix-guide-ja-1-6

これは何

Phoenixのhexdocsには公式が提供するガイドがあり、Phoenixの概要から各構成要素の説明、デプロイの解説など、Phoenixを利用する上で知っておくべき情報がまとまっています。これらはすべて英語で提供されるため、さらっと日本語で読めるドキュメントがあると良いなと思い、個人の活動で翻訳を行っているものです。

https://hexdocs.pm/phoenix/overview.html

Phoenix hexdocs

ちなみに、v1.5から行っている試みです。v1.5版はこちらから。

https://zenn.dev/koga1020/books/phoenix-guide-ja-1-5

v1.5からの変更点

9月末にv1.6.0がリリースされ、ちょうど2か月ほどになります。2021/11/29執筆時点でv1.6.2が最新版です。

https://github.com/phoenixframework/phoenix/blob/master/CHANGELOG.md#160-2021-09-24-

変更のアナウンスのブログから見出しだけ取り出してみましょう。

  • 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つが新たに追加されています。

https://zenn.dev/koga1020/books/phoenix-guide-ja-1-6/viewer/mix_phx_gen_auth

https://zenn.dev/koga1020/books/phoenix-guide-ja-1-6/viewer/asset_management

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周りのアセット管理のドキュメントに加えて、ガイドでは以下の変更が加わっています。

これら以外はv1.5とそこまで変化はなく、コードブロックが最新化されていたりといった変更が入っています。

コンテキストのガイドはかなりボリュームが増えており、読み応えのある内容となっています(前半後半で分けないとzennの文字数制限にかかってしまうほど...!)
本文にEcto.Multiを使ったトランザクション処理の書き方が含まれるなど、より実践に近い内容となっています。

Fly.ioに関してドキュメントも追加され、Phoenixの作者であるChrisがjoinして開発を進めているのもあってか、LiveViewを活用したアプリケーションの実行環境として要注目だと思います。

ドキュメントにも複数リージョンへのスケーリングのセクションがあり、アメリカの西海岸と東海岸にそれぞれ配置されたアプリケーションがクラスター化されるなど、おもしろい内容となっています。

「すぐに実行可能なPubSub+LiveView+Phoenixアプリケーションがユーザーの近くの大陸で動作するんだよ、すごいでしょ!」(意訳)的なこともツイートされてたり。

https://twitter.com/chris_mccord/status/1428821074553315332?s=20

以下のブログにLiveViewを開発に至ったモチベーションや歴史が書かれています。合わせて読むと良さげです。

https://fly.io/blog/how-we-got-to-liveview/

まとめ

簡単ですが、Phoenix v1.6のポイントをまとめてみました。

  • mix phx.gen.auth で認証の機構をサクッと作り、
  • LiveViewでAPIなしでサーバーと通信するリッチな画面をスピーディーに実装し、
  • webpack+nodeの依存なくビルドし、
  • あとはFlyにサクッとデプロイして稼働

のようなストーリーが見えます。LiveViewのProductionの事例などどんどん出てきそうですね。楽しみな技術です🚀

p.s. phx.gen.docker なる新たなmixタスクのPRも出ていました👀 デプロイ周りのスタンダードもあらかた固まってくるのではと思っています。

https://twitter.com/koga1020_/status/1463847262820335623?s=20

Discussion