Edited at

Herokuの新しいスタック「Heroku-16」で何が変わったか? (2017年5月8日よりデフォルトに)

More than 1 year has passed since last update.

先日 Heroku Blogに「The Heroku-16 Stack is Now Generally Available」ということで、Heroku-16スタックなるものが正式リリースになったとアナウンスがありました。

The Heroku-16 Stack is Now Generally Available

https://blog.heroku.com/heroku-16-is-generally-available

こちらについて簡単にまとめたのでメモをしておきます。


そもそも Herokuのスタックとは?

HerokuはアプリケーションをSlagという実行可能なプログラムの塊にして、そのSlagをDynoと呼ばれる環境へデプロイしてアプリケーションを実行させています。このSlag実行環境であるDynoが配備される際に、その元になるイメージがスタックです。

Herokuはこのスタックに利用されているオペレーティングシステムやコンポーネントを常にメンテナンスしています。これにはOSや言語ランタイムのセキュリティパッチなども含まれています。これによって、開発者は自分のアプリケーションのコードに集中できるわけです。

今回の更新は、このスタックがメンテナンスではなくOSごと新しくバージョンアップした事になります。


Heroku-16 スタックの何が新しいのか?

今回リリースされたHeroku-16スタックは、従来のCedar-14スタックからいくつかの更新が行われていますが、特にOSのバージョンアップとDockerImageのファイルサイズがかなりコンパクトになったのが大きいようです。

Cedar-14
Heroku-16

ベースとなるOS
Ubuntu 14.04 LTS
Ubuntu 16.04 LTS

Docker imageのサイズ
1.35GB
465MB

また前のスタックよりも約15%の開発ヘッダーが入っているそうで、ネイティブのPythonやRubyパッケージのコンパイル時の失敗が減るそうです。

Dockerイメージを利用する場合は、Dockerfileを以下のように指定すれば、誰でも無料で使えます。

FROM heroku/heroku:16

ベースとなるUbuntu OSのバージョンアップにより、いくつかのパッケージはバージョンが変わっていますので、詳しくはこちらを確認すると良いでしょう。

Ubuntu Packages on Heroku Stacks

https://devcenter.heroku.com/articles/stack-packages


アップグレード方法

HerokuのPipeLines機能を利用していれば、Heroku-16スタックを試す場合にもapp.jsonに以下の記述を追加してPull Requestを作成するだけで、Review Appが安全にHeroku-16スタックでアプリを別環境でビルドしてくれます。


shell

{

"stack": "heroku-16"
}

新しいスタックで問題がなければ、Herokuのアプリ自体を以下の手順で更新できます。


shell

$ heroku stack:set heroku-16 -a example-app

$ git commit -m "upgrade to heroku-16" --allow-empty
$ git push heroku master


スタックのサポート期限

Heroku-16 スタックはサポートは2021年4月までを予定していて、基本的にはベースとなっているOSであるUbuntuのサポートポリシーに合わせているようです。

したがって、旧バージョンのCedar-14も、ベースとなるUbuntuである14.04のサポート期限である2019年4月までサポート予定となっています。

参考 : Ubuntuとは | Ubuntu Japanese Team

https://www.ubuntulinux.jp/ubuntu


デフォルトのスタックの入れ替え時期

現在はCedar-14スタックがデフォルトですが、2017年5月8日よりデフォルトのスタックがHeroku-16スタックに切り替わりますので、それまでにテストしておくと良さそうです。

・・・といってもデフォルトのスタックの入れ替えというのは新しく作成したアプリケーションが対象で、既に作成済みのアプリケーションのスタックがいきなり変わるってことはないので、そこは安心です。


リソース

The Heroku-16 Stack is Now Generally Available

https://blog.heroku.com/heroku-16-is-generally-available

Heroku-16 Stack

https://devcenter.heroku.com/articles/heroku-16-stack