アプリのホスティング費用を下げる方法
ホスティング費用を下げるには、何が実際に動いているのか、そしてなぜ動いているのかを確認し、誰も使っていないときはすべてをスリープさせることです。ゼロにスケールするホストでは、アイドル状態のアプリやスリープ中のデータベースはほとんど費用がかかりません。そのため、最も大きな節約は、アプリを起動したままにしている原因を取り除くことから得られます。多くの場合、それは数秒おきにデータベースを確認するコードです。そのうえで、通信量を減らし、誰も使っていないアプリを削除しましょう。
小規模なアプリの多くは、トラフィックの問題を抱えているわけではありません。「いつも何かが動いている」という問題を抱えています。このガイドでは、その原因を見つけて直す方法を、AIアプリビルダーへの指示例とあわせて説明します。
実際に支払っているもの
小規模なアプリのホスティング料金は、いくつかの項目から発生します。どの項目の金額が大きいかが分かれば、どこを調べればよいかも分かります。
| 費用 | 費用の要因 | よくある対策 |
|---|---|---|
| コンピュート(サーバー) | マシンの大きさと稼働時間 | スリープさせる。適切なサイズにする |
| データベース | サイズと起動している時間 | 常時のクエリを減らし、スリープできるようにする |
| 帯域幅 | 訪問者がダウンロードするデータ量 | 画像を圧縮し、ファイルをキャッシュする |
| ストレージ | 保存しているファイルとデータ | 不要な古いアップロード、ログ、バックアップを削除する |
| サードパーティAPI | AIモデル、地図、メール、SMSへの呼び出し | 結果をキャッシュし、上限を設定する |
Mythexを含む多くの最近のホストは、ゼロにスケールします。誰も使っていないときはサーバーが停止し、コンピュートの費用はかからず、次の訪問で起動します。そのため、問いは「サーバーはどれくらい大きいか」ではなく、「なぜサーバーが起動しているのか」に変わります。
ステップ1:お金がどこに使われているかを確認する
何かを変える前に、ホストの利用状況のページを開き、次を確認します。
- どのプロジェクトの費用が最も大きいか。1つのアプリが請求額の大半を占めることがよくあります。
- どのカテゴリーか。コンピュート、データベース、帯域幅、ストレージのどれか。
- いつ費用が発生しているか。お客様がいない夜間も一定の利用があるなら、何かがアプリを起動させている手がかりです。
Mythexでは、利用の詳細で直近30日間の利用を、Build(AIエージェント)とRun(ホスティング、帯域幅、データベース、ファイルストレージ)に分けて、プロジェクト別に確認できます。
ステップ2:アイドル状態のアプリとデータベースをスリープさせる
これは、多くの小規模アプリにとって最も効果の大きい手段です。アイドル時にスリープし、次のリクエストで起動するデータベースは、閑散時間帯にほとんど費用がかかりません。数秒おきに問い合わせられるデータベースは、アイドル状態になることがないため、一日中ずっと課金されます。
Mythexのホスティングの上限では、公開したアプリの仕組みを説明しています。スリープ中のアプリはコンピュートの費用がかかりません。データベースは最小のサイズで起動し、利用が増えると大きくなり、5分間アイドル状態が続くとスリープします。課金額は、サイズに起動していた時間をかけたものです。そのため、数分おきでも1回データベースに問い合わせるアプリは、常に稼働しているものとして課金されます。一方、バックグラウンドで何もしていないアプリの費用はごくわずかです。
アプリを起動させ続ける、よくある原因は次のとおりです。
- ポーリング。 ページがサーバーに「新しいものはあるか?」と2〜5秒おきに問い合わせること。1台のノートPCでそのタブを開いたままにすると、データベースはスリープできなくなります。
- 自動更新されるダッシュボード。 誰も見ていなくても、タイマーでデータを再読み込みすること。
- 死活監視ツール。 アプリに1分ごとにpingを送ること。
- サーバーコードのバックグラウンドループ。 データを永久に整理したり同期したりする
setInterval。 - 以前の遅い初回訪問を避けるために追加された、定期的な「キープアライブ」リクエスト。 これらはスリープを防ぐことで動作するため、まさに費用の原因になっています。
AIに原因を探してもらいましょう。
コードの中で、タイマーで動いている処理や、繰り返しデータベースに問い合わせている処理(ポーリング、setInterval、自動更新、バックグラウンドループ)を探してください。それぞれの一覧、実行の頻度、誰もページを開いていないときにも動くかどうかを教えてください。まだ何も変更しないでください。
そのうえで、1つずつ直します。
ダッシュボードは /api/orders を3秒ごとにポーリングしています。ブラウザのタブが表示されているときだけ更新し、間隔は3秒ではなく60秒にしてください。手動で更新できる「更新」ボタンも追加してください。
アプリに本当にリアルタイムの更新が必要な場合(チャットやライブのスコアボードなど)は、絶えず問い合わせるのではなく、何かが変わったときだけプッシュできるかをAIに確認しましょう。多くのアプリでは、「ユーザーがタブに戻ってきたときに更新する」だけで十分です。
ステップ3:サーバーを適切なサイズにする
大きなマシンは時間あたりの費用が高くなります。AIで作ったアプリの多くは、デフォルトのサイズで十分に動きます。問題が起きるのは、実際には遅いクエリが原因なのに、「もっと性能を」と頼んでしまうときです。
- エラーなくトラフィックを処理できる、最も小さいサイズを維持する。
- メモリ不足でクラッシュする場合は、まずアプリが大量のデータをメモリに読み込んでいないかをAIに確認してもらう(結果の1ページ分だけでなく、テーブル全体を読み込んでいないか)。
- 必要なトラフィックを計測してから、マシンを追加する。
Mythexでは、マシンのサイズは公開時にアプリの必要性に応じて決まります。追加のマシンは、トラフィックが多いときだけ起動し、減ると再びスリープします。費用はサイズに比例するため、大きすぎると感じたら、チャットでより小さいサイズを頼んでください。
ステップ4:帯域幅を減らす
帯域幅とは、訪問者がダウンロードするデータの量です。多くの場合、画像が最も大きな割合を占めます。
- 画像を圧縮し、WebPやAVIFなどの新しい形式で配信する。
- 表示されるサイズに合わせて画像をリサイズする。400ピクセルのサムネイルとして表示される4,000ピクセルの写真は、ダウンロードされるデータの大部分が無駄になります。
- 画面の下部にある画像は遅延読み込みにする。
- 静的ファイル(スクリプト、スタイル、画像)をキャッシュし、再訪問したお客様が再びダウンロードしないようにする。キャッシュとはをご覧ください。
- ページを表示するたびに、大きなファイルを配信しないようにする。
アプリのすべての画像を確認してください。表示される最大サイズにリサイズし、WebPに変換し、最初の画面より下にあるものは遅延読み込みにしてください。変更の前後の合計サイズを教えてください。
ページの表示速度の向上と、帯域幅の削減は、たいてい同時に進みます。詳しくはウェブサイトの表示速度を上げる方法をご覧ください。
ステップ5:誰も使っていないものを整理する
- 古いアプリの公開を取り消す。 テスト用のデプロイ、終わった実験、昨年のイベントサイトなどが対象です。
- 古いアップロード、ログ、エクスポートを削除する。必要のないものです。
- 使わなくなった共有プレビューリンクを削除する。 Mythexでは、プレビューリンクを開くとプロジェクトが起動し、クレジットが消費されます。誰かが開き続けている忘れられたリンクは、費用の原因になります。
- 不要なサービスを削除する。 アプリがもう呼び出していないAPIサーバーやワーカーなどです。
ステップ6:静的サイトを検討する
サイトにログインがなく、ユーザーのデータを保存せず、サーバー側のロジックもない場合(マーケティングサイト、ポートフォリオ、メニューなど)は、静的サイトにできます。これはCDNから配信されるただのファイルです。動かし続けるサーバーやデータベースはありません。Mythexでは、静的サイトは置いておくだけではクレジットを消費しません。
このサイトにはログインも保存データもありません。サーバーなしの静的サイトとして作り直せますか? 失うものは何ですか?
ステップ7:有料のAPI呼び出しを監視する
AIモデル、地図、SMSを呼び出すアプリでは、サードパーティの請求額がホスティング費用をはるかに上回ることがあります。
- 1回ごとに費用がかかる機能には、ログインを必須にする。
- ユーザーごとの上限を設ける(レート制限とはをご覧ください)。
- 変わらない結果をキャッシュする。たとえば、同じ住所のジオコーディングです。
- 各プロバイダーで利用上限や通知を設定する。
よくある間違い
- 計測せずに推測する。 まず利用内訳を確認しましょう。費用の大きい部分は、想像と違うことがよくあります。
- 遅さを直すために、より大きなサーバーを買う。 データベースのインデックスが欠けている、または大量のデータを読み込んでいることが、本当の原因であることが多いです。
- すべてをポーリングする。 数秒おきのタイマーは、データベースをスリープさせない原因になります。
- 「ウォーム」に保つためにアプリにpingを送る。 これでは、ゼロスケールによる節約が失われます。最初の訪問で少し待つことを受け入れるか、常時稼働を意図的に選びましょう。
- 古いデプロイを忘れる。 使われていないアプリは、データベースやバックグラウンドジョブとともに、静かに費用を積み重ねます。
- 画像を圧縮しない。 小規模なサイトでは、これが単独で最も大きな帯域幅の費用になることがよくあります。
チェックリスト
- どのプロジェクトのどのカテゴリー(コンピュート、データベース、帯域幅、ストレージ)の費用が最も大きいかを把握している。
- 誰も見ていないときに、データベースを数秒おきに問い合わせているものがない。
- ダッシュボードは適切な間隔で更新されるか、タブが表示されているときだけ更新される。
- 理由のない死活監視ツールやバックグラウンドループがアプリを起動させていない。
- サーバーは、動作する最小のサイズになっている。
- 画像はリサイズ、圧縮、遅延読み込みされ、静的ファイルはキャッシュされている。
- 古いアプリは公開を取り消し、古いファイルは削除し、使わないプレビューリンクは削除した。
- データやログインのないサイトは静的になっている。
- 有料APIにはログイン、ユーザーごとの上限、プロバイダーの利用通知がある。
Mythexでの費用削減
Mythexでは、構築とホスティングの両方に1つのクレジット残高を使います。そのため、ホスティングの節約は、構築に使えるクレジットを増やすことになります。Mythex特有のポイントは次のとおりです。
- 公開したアプリとそのデータベースは、アイドル時にスリープし、次の訪問で起動します。データベースは5分間のアイドルでスリープするため、常時のポーリングをやめることが、通常は最も効果の大きい改善です。
- Proは、ホスティング、データベース、帯域幅、ファイルストレージ、プレビューのサンドボックスについて、Freeの半額の料金です。AIの料金は両方のプランで同じです。詳しくはクレジットをご覧ください。
- 残高が少なくなって公開したアプリが一時停止する前に、メールでお知らせします。一時停止したアプリも、データベースとファイルは保持されます。
実行コストの全体像については、アプリの制作費用の目安とWebホスティングとはもあわせてご覧ください。
よくある質問
お客様が少ないのに、ホスティング料金が高いのはなぜですか?
たいていは、何かがアプリを起動したままにしているからです。数秒おきにデータベースを確認するコード、1分ごとにping(死活監視)を送る監視ツール、忘れられたバックグラウンドのループなどが、訪問者がいなくてもサーバーとデータベースを一日中動かし続けることがあります。
スリープしているアプリにも料金はかかりますか?
ゼロにスケールするホストでは、スリープ中のアプリはコンピュートにほとんど、またはまったく費用がかかりません。ただし、保存しているデータの分は通常かかります。Mythexでは、公開したアプリがスリープしている間はコンピュートの費用はかからず、データベースは5分間アイドル状態が続くとスリープし、起動していた時間分だけ課金されます。
ポーリングはホスティング費用に悪影響がありますか?
はい。数秒おきのポーリングでは、データベースがアイドル状態になる時間が一度もないため、スリープできません。ポーリングの間隔を長くする、ページを誰かが見ているときだけポーリングする、または問い合わせるのではなく更新をプッシュする方法に切り替えましょう。
静的サイトは、ウェブアプリよりホスティング費用が安いですか?
通常は安くなります。静的サイトはCDNから配信されるファイルだけで、動かし続けるサーバーやデータベースがありません。ログインや保存されたデータがないサイトなら、静的サイトとして作るのが、最も大きなコスト削減策の1つです。