DEV Community

gumi TECH for gumi TECH Blog

Posted on

Elixir: Phoenix 1.4.0-rcがリリース候補として公開

Phoenix 1.4の最初のリリース候補が公開されました。本稿はElixir Forumの投稿「Phoenix 1.4.0-rc.0 released!」にもとづいて、その内容をご紹介します。Phoenix 1.4のおもな新機能としては、つぎのようなものが挙げられます。

  • HTTP2への対応
  • ローカルSSL証明書の生成
  • コンパイル時間の短縮
  • 新たなエラーページ

さらに、構造は改善され、拡張性が高まります。ルーティングとDSLテストのために、新たなJavaScript APIPresenceやElixirフォーマッタとの統合も採り入れられました。

hex phx_newアーカイブ

mix phx.newアーカイブは、hexでインストールできます。より簡単なバージョン管理に役立つでしょう。新しいアーカイブにするには、mixコマンドをつぎのように入力してください。

$ mix archive.uninstall phx_new
$ mix archive.install hex phx_new 1.4.0-rc.1
Enter fullscreen mode Exit fullscreen mode

新しいジェネレータはMilligramを使って、Bootstrapでクラスなしのマークアップを生成できるようにします。その結果、デフォルトの見栄えはよく、つくり出されるマークアップをそれぞれのCSS要件に応じてカスタマイズするのも簡単です。

なお、Phoenixアプリケーションは、これまでと同じくElixir 1.4で動きます。ただし、新たなphx.newアーカイブにはElixir 1.5以上が必要です。

HTTP2対応

Cowboy 2のリリースにより、Phoenix 1.4はmix.exsにつぎの1行を書き加えるだけでH2に対応します。

defp deps do
  [

    {:cowboy, "~> 2.5"}

  ]
end
Enter fullscreen mode Exit fullscreen mode

これで、PhoenixはCowboy 2のもとで動きます。

ローカルSSL開発

ほとんどのブラウザでは、HTTP2リクエストにはSSLによる接続が必要です。そうでないときは、HTTP 1.1リクエストにフォールバックされます。ローカルSSL開発のために、Phoenixは新たにphx.gen.certタスクを備えました。開発でHTTPSのテストをするときに、自己証明書が生成できる機能です。

コンパイル時間の短縮

Plugとコンパイル時に手を加えたことにより、開発のコンパイルスピードが改善されました。詳しくは「What's new in Phoenix development - February 2018」の「Faster development compilation」の項をお読みください。

新しい開発用404ページ

開発時の404ページに、ルータから使えるルートがリスト表示されます(図001)。

図001■新しい404ページ

新しい404ページ

UserSocketの接続情報

これまで要望の声が高かったのは、Phoenixチャネルを使っているとき、基本となるトランスポート情報を参照することでした。Phoenix 1.4は、UserSocketのコールバックconnect/3が備わりました。得られる接続情報は、WebSocketおよびLong-pollトランスポートのHTTPリクエストにおけるピアIPアドレス、ホスト情報、X-Headerなどです。

非推奨となるトランスポートマクロ

チャネルの改修にともない、トランスポートマクロは推奨されなくなります。トランスポート情報が、エンドポイントからのソケット呼び出しにより直接得られるからです。つぎのように簡単に書き替えられます。

# app_web/channels/user_socket.ex
- transport :websocket, Phoenix.Transports.WebSocket
- transport :longpoll, Phoenix.Transports.LongPoll, [check_origin: ...]

# app_web/endpoint.ex
- socket "/socket", MyAppWeb.UserSocket
+ socket "/socket", MyAppWeb.UserSocket, 
+   websocket: true # or list of options
+   longpoll: [check_origin: ...]
Enter fullscreen mode Exit fullscreen mode

新しいPresence JavaScript API

新たに後方互換性のあるPresence JavaScript APIが採り入れられました。競合条件の解決ができ、使い方も簡単です。これまでは、presence_statepresence_diffイベントの複数のチャネルコールバックがクライアントに求められました。そして、クライアントから呼び出されるのが関数Presence.syncStatePresence.syncDiffです。そのインタフェースが、コールバックonSyncひとつに統合されます。チャネルコールバックと状態を監視するのはPresenceオブジェクトです。

let presence = new Presence(roomChannel)
presence.onSync(() => {
  console.log("users online:", presence.list((id, {name}) => name))
})
Enter fullscreen mode Exit fullscreen mode

webpack

mix phx.newジェネレータは、アセットの生成にbrunchでなくwebpackを用います。開発のやり方は変わりません。ファイルはそれぞれつぎのディレクトリに納められます。

  • assets/js: JavaScript
  • assets/css: CSS
  • assets/static: 静的アセット

JavaScriptツールになじみがない人でも、webpackで同じように開発できるでしょう。最適化を求める人は、webpackにより洗練されたコードバンディングや不要なコードの除去などの恩恵が受けられます。

アップグレードガイド

このリリースではユーザーに影響の大きな変更はありません。1.3.xからのアップグレードも簡単です。手順や詳しい内容については、「Phoenix 1.3.x to 1.4.0 Upgrade Guides」をお読みください。

Programming Phoenix 1.4」が現在ベータ版で発売されています。細かな改善点や修正項目についてはElixir Forum「Phoenix 1.4.0-rc.0 released!」をご覧ください。

Top comments (0)