> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# プラットフォームの制限と制約

> Square Cloud における RAM/CPU の割り当て、ネットワークおよびストレージの制限に関する技術仕様。

Square Cloud は、分離性、安定性、そしてアプリケーション間でのインフラストラクチャの公平な分配を確保するために、コンテナベースのリソース制限を実装しています。

## 最小リソース要件

Square Cloud プラットフォーム上でホストされる各プロジェクトには、最適なパフォーマンスを確保するための特定の最小リソース要件があります。

* **ボット:** 最小 256 MB の RAM が必要です。
* **ウェブサイト:** 最小 512 MB の RAM が必要です。
* **キャッシュデータベース:** 最小 512 MB の RAM が必要です。
* **一般データベース:** 最小 1 GB の RAM が必要です。

### なぜ RAM の最小値が存在するのか？

コンテナには必須の運用オーバーヘッドがあります。言語ランタイム、OS ライブラリ、そしてネットワークバッファです。256 MB を下回ると、カーネルの OOM Killer が起動時やガベージコレクション中にプロセスを終了させる傾向があり、アプリケーションが実行不可能になります。

**技術的な影響:**

* 各コンテナは 1 つの動的 IPv4 と NVMe ストレージの IOPS を消費します
* 最小割り当てはリソースの断片化（ノイジーネイバー効果）を防止します
* 日次 snapshot の計算式: `(Total RAM / 256) * 2`（概算。上位プランでは、プランごとの正確な許容数がこれより少ない場合があります）

<Note>**影響データ:** 256 MB の最小制限を実装した後、アプリケーションの安定性が劇的に向上し、OOM（Out of Memory）によるクラッシュ率が **97.7%** 削減されました。</Note>

## CPU の割り当て

簡単に言うと、CPU は設定された RAM に基づいて割り当てられます。RAM を増やすと、通常はより多くの vCPU が付与されます。

### ルール

#### シングル vCPU プラン

1 vCPU プランのアプリケーションは、スロットリングなしでフルキャパシティを受け取ります。

#### マルチコアプラン（≥2 vCPU）

* パフォーマンスの下限: ≥512 MB の RAM を持つアプリケーションは、少なくとも 2 vCPU を受け取ります。
* 比例スケーリング:
  * Hobby（≤2 vCPU）: 512 MB の RAM ごとに +1 vCPU
  * Standard / Pro / Enterprise: 1 GB（1024 MB）の RAM ごとに +1 vCPU

### 例

| プラン        | プランの容量           | 設定された RAM | 割り当てられる vCPU |
| ---------- | ---------------- | --------: | -----------: |
| Standard   | 4 GB / 4 vCPU    |      1 GB |   2 vCPU（下限） |
| Standard   | 4 GB / 4 vCPU    |      4 GB |   4 vCPU（最大） |
| Enterprise | 128 GB / 16 vCPU |      2 GB |       2 vCPU |
| Enterprise | 128 GB / 16 vCPU |     16 GB |      16 vCPU |

スロットリングと安全制限

システムはプランの vCPU 制限を強制し、分配を公平に保つためにレベリングを適用します。短期的な弾力性により、スパイク時に追加の vCPU が付与されることがありますが、保証されるものではありません。

禁止されている CPU の使用:

* 暗号通貨のマイニング
* 許可のない、無制限で集約的な ML ワークロード
* 意図的なリソースの悪用

違反した場合、`LACK_OF_CPU` ステータスとなり、即時に停止されます。

## ネットワークの制限

帯域幅は RAM に応じてスケールします: **256 MB の RAM ごとに +50 Mbps**。

| 割り当てられた RAM |       帯域幅 |
| ----------: | --------: |
|      256 MB |   50 Mbps |
|      512 MB |  100 Mbps |
|        1 GB |  200 Mbps |
|        2 GB |  400 Mbps |
|        4 GB |  800 Mbps |
|        8 GB | 1600 Mbps |
|       10 GB | 2000 Mbps |

2000 Mbps を超える要件については、サポートにお問い合わせください。

## ストレージの制限

すべてのプロジェクトには、デフォルトで **10 GB の NVMe** ストレージが付与されます。

特徴:

* エンタープライズグレードの NVMe
* デプロイと再起動をまたいで永続化
* 高い IOPS とスループット

## 制限超過ステータス

### LACK\_OF\_RAM

発生条件: アプリケーションが割り当てられた RAM を超過するか、カーネルが OOM を通知した場合。

対応: ホストの安定性を保護するため、プロセスは即座に終了されます。

修正方法:

1. プロファイラでメモリリークを見つける（Node.js: `--inspect`、Python: `memory_profiler`）。
2. メモリ内キャッシュを削減するか、キャッシュを Redis に移動する。
3. コントロールパネルで割り当て RAM を増やす。

### LACK\_OF\_CPU

発生条件: 持続的な CPU 使用率が割り当てに対する妥当な制限を超えた場合。

対応: プロセスは `LACK_OF_CPU` ステータスで終了されます。

修正方法:

1. CPU のホットスポットをプロファイルする（Node.js: `0x`、Python: `cProfile`）。
2. ホットループ、DB クエリ、I/O バウンドの処理を最適化する。
3. RAM を増やしてより多くの vCPU を得る（CPU 割り当て表を参照）。
4. 重い処理を非同期ワーカーやバッチジョブにオフロードする。

トレードオフ: CPU を得るために RAM を増やすとコストが上がります。コードの最適化がスケールアップよりも安価かどうかを見極めましょう。
