自作のポートフォリオサイトを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を用いて作成しています。