自作のポートフォリオサイトをRender(無料プラン)で公開してから、一つ大きな悩みの種がありました。 それは、「15分間アクセスがないとサーバーがスリープしてしまう」という仕様です。
スリープ状態でサイトを開こうとすると、黒い画面が表示され、サーバーが立ち上がるまでに約30秒ほどの時間がかかってしまいます。今回は、この制限とどう向き合い、エンジニアリングでどう解決したかについての記録です。
リソースの計算:750時間の壁
Renderの無料枠には、月間750時間という稼働制限があります。
単純計算で、1ヶ月(31日)を24時間フル稼働させると 24×31 = 744時間。実は、24時間起こし続けても理論上は枠内に収まる計算です。
しかし、デプロイ(再構築)にかかる時間や、将来的な複数サービスの運用を考えると、リソースを100%使い切る可能性があるため安心できません。
そこで、「自分が活動している朝9時から夜24時までの間だけ、サーバーを10分おきにアクセスする」という運用を選択しました。このスケジュールなら月間の稼働は465時間程度に抑えられ、十分な余裕を残すことができます。
「外部から叩く」という解決策
サーバーをスリープさせないためには、15分が経過する前に外部からアクセス(Ping)を飛ばす必要があります。今回は、cron-job.orgという外部サービスを利用して、自動でサイトを訪問する仕組みを構築しました。
設定の肝は、Cron式と呼ばれるスケジュール命令です。
実装したスケジュール設定
「15分で寝る」という仕様に対し、余裕を持って10分おきにアクセスを飛ばす設定にしました。
スケジュール管理の設定画面
この設定で、「毎日、朝9時から夜23時台の間、10分おきにサイトを叩く」という動作を実現しています。
さらに、念には念を入れて、正時(0分)の直前である「59分」にもアクセスを追加しました。確実にサーバーが起きた状態で次の時間を迎えられるように、少しだけ「念押し」の設計にしています。
終わりに
「有料プランに上げれば済む話」かもしれません。 ですが、無料枠という限られたリソースの中で、いかに工夫して理想の挙動に近づけるか。その試行錯誤こそが、開発の醍醐味だと感じています。また、本音を言うと金欠な大学生なので1円でも出費を抑えたいです。
明日からは、朝一番のアクセスでも30秒待たされることはありません。 小さな改善ですが、僕のポートフォリオがようやく「いつでも誰にでも見せられる準備」が整った瞬間でした。
※この文章はAI geminiを用いて作成しています。