社内勉強会でHerokuでの本番運用について発表しました。 いま携わっているSUZURIはHerokuで運用しており、個人でもHerokuで運用しているアプリがあります。その中で経験したことや知見を話しました。
目次を見るとわかるようにテーマは多岐にわたっており、ざっと&ゆるめに発表しようという趣旨です。
Herokuはスケーラブルなアプリ養成ギプス
Herokuのいいところといえば、マネージドで手軽に使えること、開発者にとって便利な機能が豊富なこともそうですが、アプリケーション設計に良い影響を与える点もあります。
たとえば、Herokuではローカルにファイルを保存できません(正確にはできますが、1日1回自動で再起動され、そのときに消滅します)。この挙動に代表されるように、Herokuではシステムローカルな何かに依存しない、疎結合でステートレスなアプリケーション設計が強制されます。
このHerokuが提唱している方法論をまとめたものがThe Twelve-Factor Appです。初めて読んだときはよくわからなかったのですが、新卒研修でインフラを学んだり、アプリケーション設計の知識がついていくにつれて、なるほどとてもよいポリシーだなあ、としみじみ感じています。
Herokuで動くように作ればスケーラブルなアプリが自然にできていくということで、養成ギプスを思わせます。Dockerなどのコンテナでアプリを運用するときにも同じ考え方を適用できるため、コンテナ時代になってその重要性はさらに高まっているのではないかと思います。Twelve-Factor Appを学ぶのにもHerokuはおすすめです。
おまけ
「おまけ」に書いたのですが、Herokuにはテスト、ステージング、本番環境をシームレスに統合するCI/CD環境であるHeroku Pipelinesがあります。たとえばマージすると自動でデプロイできるGitHub Integration、CI環境のHeroku CIや、ChatOpsもあります。特にHeroku Review AppsはPull Requestを作るたびに新しい環境を自動的に作ってくれてとても便利です。
しかしこの機能はGitHubしかサポートしておらず、会社のリポジトリはGitHub Enterpriseなので使えません😭 “github.com"がハードコードされていて色々大変らしいという話を@hsbtさんから聞いたのですが、本当に書いてあって笑いました。なんとかしてほしいものです。
Heroku’s GitHub sync features are hard-coded to connect to and use github.com. ―Can I use Github Enterprise with Pipeline Review apps? - Knowledge Base
実はこの日には新卒エンジニア研修の座学で1時間の発表もしており、2回目の発表でとてもヘビーでした。あんまりうまく喋れてなかったのではないかと思います……。