Elixir: Phoenix 1.4.0-rcがリリース候補として公開
Tags: elixir, webdev, progarmming, tutorial
Published: 2018-10-22 01:12:06

---
title: Elixir: Phoenix 1.4.0-rcがリリース候補として公開
published: true
description: Phoenix 1.4の最初のリリース候補が公開されました。本稿はElixir Forumの投稿「Phoenix 1.4.0-rc.0 released!」にもとづいて、その内容をご紹介します。
tags: #elixir, #webdev, #progarmming, #tutorial
---

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

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

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


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

```terminal
$ mix archive.uninstall phx_new
$ mix archive.install hex phx_new 1.4.0-rc.1
```

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

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

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

```elixir
defp deps do
  [

    {:cowboy, "~> 2.5"}

  ]
end
```

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


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


# コンパイル時間の短縮
Plugとコンパイル時に手を加えたことにより、開発のコンパイルスピードが改善されました。詳しくは「[What's new in Phoenix development - February 2018](https://dockyard.com/blog/2018/02/12/what-s-new-in-phoenix-development-february-2018)」の「Faster development compilation」の項をお読みください。


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

#### 図001■新しい404ページ
![新しい404ページ](https://elixirforum.com/uploads/default/original/2X/8/8b1ab227fd84ec401eeb69bf7570301da12c992d.jpeg)


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


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

```elixir
# 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: ...]
```

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

```js
let presence = new Presence(roomChannel)
presence.onSync(() => {
  console.log("users online:", presence.list((id, {name}) => name))
})
```

# 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](https://gist.github.com/chrismccord/bb1f8b136f5a9e4abc0bfc07b832257e)」をお読みください。


「[Programming Phoenix 1.4](https://pragprog.com/book/phoenix14/programming-phoenix-1-4)」が現在ベータ版で発売されています。細かな改善点や修正項目についてはElixir Forum「[Phoenix 1.4.0-rc.0 released!](https://elixirforum.com/t/phoenix-1-4-0-rc-0-released/17182)」をご覧ください。