Heroku : Router 2.0 と HTTP/2 の一般提供開始

2023 年 9 月、Common Runtime の新しい Router となる ”[Router 2.0](https://devcenter.heroku.com/articles/http-routing#router-2-0)" の[パブリックベータ](https://blog.heroku.com/router-2dot0-the-road-to-beta)を発表しましたが、ついに Router 2.0 が一般提供開始（GA）となりました。今後数カ月のうちに従来のCommon Runtime Router に取って代わる予定です。これにより、顧客に新しいネットワーキング機能とパフォーマンスがもたらされることになります。

Router 2.0 のベータ版公開により、[HTTP/2](https://blog.heroku.com/heroku-http2-public-beta) も提供可能になりましたが、Router 2.0 の一般提供開始に伴い、HTTP/2 もすべての Common Runtime のお客様だけでなく [Private Spaces](https://devcenter.heroku.com/articles/routing-in-private-spaces#http-2) のお客様にも一般提供が開始されることとなりました。

Router 2.0 は、今後何年にもわたり、Heroku　が最先端のネットワーキング機能とパフォーマンスの向上を提供する基盤となることでしょう。

# 新しい Router をなぜリリースするのか
既存の Router を改善するのではなく、新しい Router を構築する理由は何か。その主な目的は、新しいルーティング機能をより迅速かつ安全に顧客に提供することです。変更の背景については、[パブリックベータ発表時の投稿](https://blog.heroku.com/router-2dot0-the-road-to-beta)で詳細をご覧いただけます。

# パブリックベータから得た教訓
過去数カ月にわたり、Router 2.0 はパブリックベータ版として提供されてきました。この期間を通じ、利用者の皆様から貴重なインサイトを収集し、設計を改良する機会を得ることができました。早期にご採用くださったお客様と Public ロードマップを通じて寄せられた豊富なフィードバックのおかげで、Router に数多くの改善を加えることができたため、一般提供に進む前に十分な検証を行うことができました。

この期間中、多くの改善を行いましたが、特に [Puma ベース](https://github.com/puma/puma)のアプリケーションに関する問題が例外的でした。調査の過程で、実際には Puma 自体のバグであることがわかり、解決することでコミュニティに貢献することができました。

以下の詳細な分析では、ベータ期間中に行われたエンジニアリング調査と、顧客の期待に応えるパフォーマンスと信頼性を確保するための徹底的なテストについて説明しています。

https://blog.heroku.com/pumas-routers-keepalives-ohmy

# Router 2.0のベータ版で明らかになった改善点や学び
## Router 2.0 を活用するためのヒントとコツ
Router 2.0を試したいという方に、こちらの記事で専門家が便利なヒントとコツをご紹介していますので、ご覧ください。

https://blog.heroku.com/tips-tricks-router-2dot0-migration

## HTTP/2の力
HTTP/2 のサポートが Common Runtime および [Private Spaces](https://www.heroku.com/private-spaces) のお客様向けに一般提供されました。

HTTP/2 は、[Heroku プラットフォーム](https://www.heroku.com/platform)において[最もリクエストの多い改善点](https://github.com/heroku/roadmap/issues/34)の 1 つでした。HTTP/2 は、マルチプレクシングやヘッダー圧縮といった機能を導入することで、遅延を減らし、Heroku アプリケーションのエンドユーザー体験を向上させることが期待できるためです。私たちは HTTP/2 の利点をすべての Heroku 利用者の皆様に提供できることを大変嬉しく思います。

HTTP/2 の利点や Heroku における動作に関するさらなる情報について知りたい方は、[パブリックベータ版のローンチ時の記事](https://blog.heroku.com/heroku-http2-public-beta)をご覧ください。

今後、HTTP/2 を有効化した際のパフォーマンス向上を観察できるデモとブログ記事も公開予定ですので、ご期待ください！

## 使ってみよう
### Router 2.0 を有効化する
Common Runtime アプリケーションで Router 2.0 を使用するには、以下のコマンドを実行してください。

```shell
$ heroku features:enable http-routing-2-dot-0 -a <アプリ名>
```

### HTTP/2 を有効化する
**Common Runtime**
HTTP/2 は Router 2.0 では既定で有効化されています。上記のコマンドを実行すると、アプリケーションは HTTP/2 トラフィック処理を開始します。

HTTP/2 では、有効な TLS 証明書が必要です。[Heroku Automated Certificate Management](https://devcenter.heroku.com/articles/automated-certificate-management) の使用をお勧めします。

Common Runtime では、カスタム ドメインで HTTP/2 をサポートしますが、`<app-name>.herokuapp.com` のような組み込みドメインではサポートしていません。

Router 2.0 を継続利用しつつ、HTTP/2 を無効化したい場合、以下のコマンドを使用してください。

```bash
heroku labs:enable http-disable-http2 -a <アプリケーション名>
```

**Private Spaces**
Private Spaces アプリケーションで HTTP/2 を有効化するには、以下のコマンドを使用してください。

```shell
$ heroku features:enable spaces-http2 -a <アプリ名>
```

Private Spaces では、カスタムドメインおよび組み込みのデフォルトアプリケーションドメインの両方で HTTP/2 をサポートします。

HTTP/2 を無効化するには、アプリケーションで Heroku の機能フラグ `spaces-http2` を無効化してください。

# Heroku のネットワーク系機能が今後目指していく方向性
この新しいルーティングプラットフォームを厳格なテストを経てオンライン化できたことに大変感謝しています。Router 2.0 とその関連機能を構築する際に、ご利用いただいた皆様の忍耐とサポートをいただいたことに心より感謝します。

これは始まりにすぎません。Router 2.0 が一般提供開始になった今、次のロードマップの取り組みに着手していきます。ネットワークエラーログの強化、Dyno までのネットワークにおける HTTP/2、HTTP/3、mTLS の利用など、さらに革新的でモダンな機能をオンライン化する予定です。

今後も、GitHub 上に公開している Heroku [Public ロードマップ](https://github.com/heroku/roadmap)と利用者の皆様からのフィードバックを引き続きトラッキングし、改善に役立てていくことで、将来のネットワーク関連の機能およびルーティングの機能の拡張を検討してまいります。

※本記事は [Router 2.0 and HTTP/2 Now Generally Available](https://blog.heroku.com/router-2dot0-http2-now-generally-available) の翻訳になります。
Posted by [Ethan Limchayseng](https://blog.heroku.com/authors/ethan-l)
Product Manager