😽

Herokuの無料枠を使いこなそう

2022/05/05に公開

個人開発する際にコスト面と手軽さを考えるとAWSにデプロイするのはあまりふさわしくないでしょう。Herokuだともっと手軽くデプロイできるし無料枠もあるので、個人で開発したおもちゃをデプロイするのはちょうどいい感じだと思います。本記事ではHerokuの無料枠を使いこなす方法を紹介します。

ちなみに、この間筆者が開発した多言語WebニュースアプリもHerokuにデプロイしています。

https://zenn.dev/jcc/articles/e672181fd7b174

550h Dyno Hours

現時点(2022年5月)Herokuのプランはこうなっています。

アカウントを作ったら、550時間の無料枠が付与してくれます。

+450h Dyno Hours

プランの中に550h-1000hって書いてあるのに、残りの450hはどこからもらえるだろうと思いながら、公式のブログを調べてみました。

https://devcenter.heroku.com/articles/free-dyno-hours

Personal accounts are given a base of 550 free dyno hours each month. In addition to these base hours, accounts which verify with a credit card will receive an additional 450 hours added to the monthly free dyno quota.

クレジットカードと紐付ければさらに450時間が追加されます。月に720時間を計算すれば、一つのアプリケーションを24時間走らせるのは十分でしょう。
しかし、そんなにおいしい話ではありません。他のサービスと同じく無料枠なので、必ずなんらかの制限があります。

If an app has a free web dyno, and that dyno receives no web traffic in a 30-minute period, it will sleep. In addition to the web dyno sleeping, the worker dyno (if present) will also sleep.

アクセスなしで30分経つと、アプリケーションが強制的にsleepされます。新しいアクセスがある場合、アプリケーションが再起動されます。
staticなアプリケーションはまだいいですが、定期的にスクリプトを走らせてデータを取得してDBに書き込むような操作がある場合は困りますね。

sleepさせないためのハック

実はこの問題を割と簡単に解決できます。

アプリケーションに下記のコードを追加するだけです。

const http = require('http');
setInterval(() => {
    http.get('https://your_app_name.herokuapp.com/');
}, 15 * 60 * 1000);

やっていることとしては、15分ごとに自分自身をpingすることで、Web dynoを起こしています。(Node.jsの例ですが、他の言語でも簡単に実装できるはずです。)
まさにこんな感じですね。
寝るな!!!起きろう!!!

ただし、FreeプランだとSSL認証の機能がないので、Hobby以上のプランが必要です。カスタムドメインを使う際に気を付けてください。

Happy Heroku Life!!

Discussion