スケーラブル(scalable)とは、利用者数やデータ量が増えたときに、リソースを足すことで性能を保ったまま処理能力を伸ばせる(減ったときは縮められる)性質を指す形容詞です。名詞形のスケーラビリティ(scalability)はその度合いを指し、日本語では「拡張性」と訳されます。この記事では、言い換えの使い分け、クラウドで混同されやすい弾力性(エラスティシティ)との違い、そして「台数を増やしてもどこまで伸びるか」を計算で見積もる方法までを扱います。
まとめ:スケーラブル(スケーラビリティ)の要点
- スケーラブルは「規模の変化に耐えて伸縮できる」という性質を表す形容詞、スケーラビリティはその能力・度合いを表す名詞です。
- 言い換えは「拡張性がある」「拡張可能な」が基本です。ただし日本語の「拡張性」は機能を足せる性質(extensibility)にも使われるので、要件では「同時接続数を何倍にしても応答何秒以内」のように数値で書きます。
- 弾力性(エラスティシティ)は、需要に合わせてリソースをすばやく増減する性質で、自動化はその代表的な実現手段です。NIST SP 800-145はこれを「rapid elasticity」としてクラウドの必須特性の1つに挙げています。スケーラブルな設計がなければ弾力性は成り立ちません。
- 拡張の方式はスケールアウト(台数を増やす)とスケールアップ(1台を強くする)です。長期の成長にはスケールアウトが本命で、単体増強には物理上限と単一障害点の問題が残ります。
- 台数を増やしても性能は比例しません。直列処理が5%あるだけで、アムダールの法則では何台足しても20倍が上限です。負荷テストの実測からUSLの係数を求めると、伸びが止まる台数を事前に見積もれます。
スケーラブルの意味と語源
scalableは、「規模・尺度」を意味するscaleに「〜できる」を表す接尾辞-ableが付いた語で、直訳は「規模を変えられる」です。IT分野では、ユーザー数・リクエスト数・データ量が10倍になっても、サーバーやノードを足せば同じ応答性能を保てるシステムを「スケーラブルである」と言います。逆に、利用者が増えると作り直さない限り遅くなる構成は「スケーラブルでない」と表現されます。
e-Wordsはスケーラビリティの項で「機器やソフトウェア、システムなどが性能や機能を拡張できる可能性や度合いのこと」と定義しています。性能が高いこととスケーラブルであることは別物で、1台で速いことだけでは、スケーラブルとは判断できません。台数追加やCPU・メモリの増強に応じて処理能力を伸ばせるかを確認します。
スケーラブル(形容詞)とスケーラビリティ(名詞)の違い
2語の違いは品詞です。スケーラブルは「スケーラブルなアーキテクチャ」のように名詞を修飾し、スケーラビリティは「スケーラビリティが高い/低い」のように度合いを語るときに使います。「スケーラブルなシステム=スケーラビリティを備えたシステム」と読み替えれば、指している中身は同じです。
ビジネスにおけるスケーラブルの意味と費用構造
事業の文脈では、売上や顧客数が増えても、費用や人手が同じ比率では増えない事業構造を「スケーラブルなビジネス」と呼びます。SaaSのように1つのソフトウェアを多数の顧客へ配る事業が典型で、顧客ごとに人手の作業が発生する受託や労働集約型のサービスは、売上に比例して人員も増えるためスケーラブルではないとされます。
スケーラブルの言い換えと類語の使い分け
文書で「スケーラブル」を言い換えるときは、何に対して伸び縮みするのかで語を選びます。特に「拡張性」は、量に耐える性質(scalability)と、機能を後から足せる性質(extensibility)の両方に使われるため、要件定義書で単独で使うと解釈が割れます。
| 言い換え | 英語 | 指す範囲 | scalableとの関係 |
|---|---|---|---|
| 拡張性がある・拡張可能な | scalable | 量の増加に耐える | ほぼ同義(標準の訳語) |
| 規模を変えられる | scalable | 増やす・減らす両方 | 直訳に近い |
| 伸縮性がある・弾力的な | elastic | 需要に応じた迅速な増減 | scalableを前提にした運用の性質 |
| 機能拡張しやすい | extensible | 機能・項目の追加 | 別概念(量ではなく機能) |
| 柔軟な | flexible | 構成・用途の変更 | 意味が広く置き換え不可 |
| 拡大できる | expandable | 容量・規模の追加 | 近いが縮小を含まない |
要件や提案書で誤解を避けたいなら、「スケーラブルな構成」とだけ書かず、「同時接続を現状の10倍にしてもp95応答を1秒以内に保てる」「ピーク時はサーバーを自動で最大8台まで増やす」のように、増える量・守る指標・上限を数値で書くのが確実です。
スケーラビリティと弾力性(エラスティシティ)の違い
クラウドで最も混同されるのが、スケーラビリティと弾力性です。スケーラビリティは「リソースを足せば処理能力が伸びる」という設計上の能力で、弾力性は「需要の増減に合わせてリソースをすばやく増減させる」という性質で、クラウドでは自動スケーリングによって実現するのが代表的です。
米国国立標準技術研究所のNIST SP 800-145(The NIST Definition of Cloud Computing)は、クラウドの5つの必須特性(オンデマンド・セルフサービス、幅広いネットワークアクセス、リソースの共用、スピーディな拡張性=rapid elasticity、サービスが計測可能であること)の1つに弾力性を挙げ、「需要に応じて外向き・内向きにすばやくスケールするよう、能力を弾力的に(場合によっては自動で)提供・解放できる」と定義しています。MicrosoftのAzureの用語解説は、両者を「スケーラビリティは将来の計画に役立ちます。エラスティック性は、予測不能なイベント中のパフォーマンスを保護します」と対比しています。
| 観点 | スケーラビリティ | 弾力性(エラスティシティ) |
|---|---|---|
| 性質 | 設計上の能力 | 運用上の即応性 |
| 時間軸 | 数か月〜数年の成長 | 数分〜数時間の変動 |
| 増減の方向 | 主に増やす | 増やす・減らすの両方 |
| 実現手段 | ステートレス化・分散設計 | 自動スケーリングのポリシー |
| 例 | 会員数の増加に台数追加で追随 | セール開始の10分間だけ台数を増やす |
両者の関係は一方向です。台数を足して伸ばせない構成では、自動で台数を増やしても性能は上がりません。一方で、スケーラブルに作っていても、需要の変化に見合う速さでリソースを増減できなければ、弾力性は低いままです。
スケールアウトとスケールアップ(水平・垂直スケーリング)の違い
拡張の実現方式は、サーバーやノードの台数を増やすスケールアウト(水平スケーリング)と、1台のCPU・メモリを増強するスケールアップ(垂直スケーリング)に分かれます。Azureの解説は、1台を上限まで強くしてからノードを足す対角(ハイブリッド)スケーリングも挙げています。
| 観点 | スケールアウト(水平) | スケールアップ(垂直) |
|---|---|---|
| 拡張方法 | 台数・ノードを追加 | 1台のCPU/メモリを増強 |
| 上限 | 設計とデータ層しだい | 最大のインスタンスサイズまで |
| 可用性 | 1台停止でも継続しやすい | 単一障害点になりやすい |
| 実装の難しさ | 状態の外出し・データ整合性 | 構成変更が少ない |
| 停止の有無 | 無停止で追加しやすい | 再起動を伴うことが多い |
| 向く場面 | 継続的な成長・大規模トラフィック | 短期の性能不足・改修を避けたい時 |
AWSのWell-Architectedフレームワーク信頼性の柱は、設計原則の1つに「水平方向にスケールしてワークロード全体の可用性を高める」を掲げ、1つの大きなリソースを複数の小さなリソースに置き換えて単一障害点の影響を減らすよう求めています。まず垂直で伸ばし、上限が見えたら水平へ移る段階設計も現実的です。設定手順や移行の判断はスケールアウトとスケールアップとは?水平・垂直スケーリングの違いと実装・使い分けを実装目線で解説【2026年版】で詳しく整理しています。
サーバーの拡張性の限界とクラウドの自動スケーリング
サーバー単体の拡張性とその限界
物理サーバーや1台の仮想マシンの拡張性を高める手段は、CPU・メモリ・ストレージの増設です。ただし、1台に載せられる資源には天井があります。上位構成の費用対効果は、料金だけでなく、対象処理の性能がどれだけ伸びるかを測って判断します。さらに、処理を1台に集めるほど、その1台が止まったときの影響が大きくなります。サーバーの拡張性を本格的に上げたいなら、単体を強くするのではなく、ロードバランサの後ろに同じ構成のサーバーを並べて台数で伸ばす構成に移るのが定石です。複数台に分けた構成は、障害時に処理を引き継ぐ冗長化の設計とも重なります。
自動スケーリングの算出式と設定値
弾力性を実装する仕組みが自動スケーリングです。KubernetesのHorizontal Pod Autoscaler(HPA)は、次の式で必要なPod数を決めます。
desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
たとえば4つのPodでCPU requestsに対する平均使用率が90%、目標値が60%なら、基本式の算出値は4×90÷60=6です。実際の増減には最大Pod数やメトリクスの欠損、Podの準備状態なども反映されます。比率が1.0から許容誤差(既定0.1=10%)の範囲に収まる間は台数を変えず、スケールダウンは既定で300秒の安定化ウィンドウを置いて、短い谷で台数が揺れないようにしています。
AWSのEC2 Auto Scalingのターゲット追跡ポリシーも、平均CPU使用率などの指標を目標値(公式の例では50%)に近づけるように台数を増減します。AWSは可用性を優先する方針を明記しており、複数のポリシーのうち1つでもスケールアウトを求めれば台数を増やし、スケールインは、縮小を有効にしたすべてのターゲット追跡ポリシーが縮小可能と判断したときだけ行います。目標値・最小台数・最大台数は、必要性能と予算に合わせて設定します。HPAでは最大Pod数の指定が必須ですが、上限を過大にすると不要な増加で費用がふくらむおそれがあります。ピーク時に何台必要かの見積もり方はキャパシティプランニングとは?ピーク負荷から必要台数と余裕率を見積もる手順、AWSでアクセス集中に備える設定とクォータはアクセス集中対策をAWSで設計する|Auto Scalingの設定と見落とすクォータ・事前準備の手順で解説しています。
コンテナ・サーバーレスによる拡張
コンテナは起動が速く、同じイメージを何個でも並べられるため、水平スケールと相性が良い技術です。サーバーレス(FaaS)のオンデマンド実行は、リクエスト数や実行時間などに応じて課金されるため、変動の大きい処理に向きます。ただし、AWS LambdaのProvisioned Concurrencyのように、待機させておく容量にも料金がかかる構成があります。これらを組み合わせる設計の全体像はクラウドネイティブとは?CNCFの定義・構成技術・移行との違いと導入判断を解説で扱っています。AWS・Google Cloud・Azure上でこうした構成を組む作業は、インフラ構築(AWS・Google Cloud・Azure)として支援しています。
スケーラビリティを数値で測る:台数を増やしても伸びない理由
「台数を2倍にすれば処理能力も2倍」という線形の伸びが得られるかは、処理の独立性や共有資源の競合によって変わります。どこまで伸びるかを事前に見積もるには、2つの式が使えます。
アムダールの法則で見る上限
アムダールの法則は、総仕事量を固定し、同等性能の処理資源へ並列化する場合に、1台での実行時間のうち直列部分が占める割合をsとすると、N台に増やしたときの速度向上が「1÷(s+(1−s)÷N)」になるという式です。Gene Amdahlが1967年の春季合同コンピュータ会議(Spring Joint Computer Conference)で発表した論文「Validity of the single processor approach to achieving large scale computing capabilities」に由来します。sが小さくても上限は1÷sで頭打ちになります。
| 直列部分の割合 | 8台 | 16台 | 64台 | 理論上限 |
|---|---|---|---|---|
| 1% | 7.5倍 | 13.9倍 | 39.3倍 | 100倍 |
| 5% | 5.9倍 | 9.1倍 | 15.4倍 | 20倍 |
| 10% | 4.7倍 | 6.4倍 | 8.8倍 | 10倍 |
Webシステムでの直列部分は、単一のデータベースへの書き込み、排他ロック、採番テーブルなどです。直列部分が5%ある構成では、64台に増やしても15倍余りにしかなりません。台数を足す前に、直列部分を減らすほうが効きます。
USLで見る「増やすと遅くなる」台数
アムダールの法則は「伸びが鈍る」までしか説明しません。Neil Guntherが著書『Guerrilla Capacity Planning』(Springer、2007年)やarXiv:0808.1431の論文で体系化したUSL(Universal Scalability Law)は、ノード間の整合を取るためのやり取り(キャッシュの同期や分散ロック)の係数βを加え、相対スループットをC(N)=N÷(1+α(N−1)+βN(N−1))で表します。βが0より大きいと、ある台数を超えたところでスループットが下がり始めます。0≦α<1・β>0の条件で台数を連続値とみなすと、ピークは√((1−α)÷β)台です。実際の台数は整数なので、前後の整数で比べます。
# USL(Universal Scalability Law)で台数ごとの相対スループットを計算する
import math
def usl(n, alpha, beta):
# alpha=競合(直列化)係数、beta=整合(クロストーク)係数
return n / (1 + alpha * (n - 1) + beta * n * (n - 1))
alpha, beta = 0.05, 0.001
for n in (1, 2, 4, 8, 16, 32, 64):
print(f"{n:>3}台: {usl(n, alpha, beta):5.1f}倍")
print(f"ピーク台数: {math.sqrt((1 - alpha) / beta):.1f}台")
Python 3で実行すると、α=0.05・β=0.001の構成は32台で9.0倍とピークに近づき、64台では7.8倍に落ちます。ピーク台数の計算値は30.8台です。
1台: 1.0倍
2台: 1.9倍
4台: 3.4倍
8台: 5.7倍
16台: 8.0倍
32台: 9.0倍
64台: 7.8倍
ピーク台数: 30.8台
実務では、本番相当の負荷テストで1台・2台・4台・8台のスループットを測り、その点にUSLの式を当てはめてαとβを求めます。求めたピーク台数が、想定するピーク時の必要台数より小さければ、台数を増やす前に設計を直す必要があります。自動スケーリングの最大台数は、USLの推定ピーク付近で追加の負荷テストを行い、応答時間・スループット・障害時の必要容量を確認して決めます。
スケーラブルなシステムを設計する原則
ステートレス化と疎結合(マイクロサービス)
Webアプリケーションの水平スケールを容易にする代表的な設計は、アプリケーションサーバーのステートレス化です。ログイン状態やカートの中身をサーバーのメモリに持たせると、同じ利用者を同じサーバーへ送り続ける必要が生まれ(スティッキーセッション)、台数を増やしても負荷が均等に散りません。状態はRedisなどの外部ストアに置き、どのサーバーでもリクエストを処理できるようにします。保存先の選び方はセッション管理とは?セッションIDの発行から失効までの実装と保存先選定を解説で比較しています。機能を独立したサービスに分ければ負荷の高い部分だけを増やせますが、分割の判断はマイクロサービスとは?モノリスとの違い・メリット・デメリットと選び方、モジュラモノリスまで整理を参考にしてください。
データ層のスケーリング(レプリケーション・シャーディング・キャッシュ)
アプリケーション層は比較的簡単に台数を増やせますが、詰まるのは多くの場合データベースです。まずクエリやインデックス、DBの資源量を見直し、それでも必要性能を満たせない場合に分散を考えます。読み取りが多いならリードレプリカを増やして参照を分散し、書き込みや保有データが増え続けるならキーでデータを複数のサーバーへ分けるシャーディングを検討します。よく読まれるデータはRedisやCDNのキャッシュに載せ、データベースに届く回数そのものを減らします。
スケーラビリティ設計で陥りやすい失敗
- 状態をサーバーに持たせたまま台数を増やす:既存セッションが元のサーバーに固定されるため、追加したサーバーへ既存の負荷が移らず、負荷の偏りが残ることがあります。
- アプリだけ水平化してデータベースを分けない:前段を何台にしても、単一のDBの書き込み性能で全体が頭打ちになります。
- 性能検証や予算を踏まえずに自動スケーリングの最大台数を設定する:USLのピークを超えて台数が増えると、費用が増えるうえに遅くなります。
- 負荷テストを1台構成でしか行わない:1台の性能から台数分の性能を掛け算で見積もると、直列部分と整合コストを見落とします。
よくある質問
スケーラブルの言い換えは何ですか?
「拡張性がある」「拡張可能な」「規模を変えられる」が標準的な言い換えです。需要に合わせて自動で増減する意味なら「弾力的な(elastic)」が近く、機能を追加しやすい意味の「拡張性(extensible)」とは別の概念です。誤解を避けたい文書では、増える量と守る指標を数値で書きます。
scalableの日本語の意味は?
「拡張可能な」「規模を変えられる」と訳されます。scale(規模)に-able(〜できる)が付いた語で、IT分野では利用者や負荷が増えても、リソースを足して性能を保てる状態を指します。事業の文脈では、売上が増えても費用が同じ比率では増えない事業構造を指します。
スケーラビリティと弾力性(エラスティシティ)はどう違いますか?
スケーラビリティはリソースを足せば処理能力が伸びる設計上の能力、弾力性は需要の増減に合わせてすばやくリソースを増減させる性質で、自動化はその代表的な実現手段です。NIST SP 800-145は弾力性(rapid elasticity)をクラウドの5つの必須特性の1つにしています。
サーバーの拡張性を高めるにはどうすればよいですか?
1台のCPUやメモリを増やす方法は手早い一方、上限と単一障害点の問題が残ります。本格的に高めるなら、アプリをステートレスにしてロードバランサの後ろに台数を並べ、データベースはレプリカやシャーディングで分けます。そのうえで自動スケーリングの最小・最大台数を決めます。
スケーラビリティはどうやって測りますか?
負荷テストで台数を1・2・4・8台と変えてスループットを測り、台数に対する伸び方を見ます。測定値にUSLの式を当てはめると、伸びが止まる台数を見積もれます。直列部分が5%ある処理は、アムダールの法則では何台に増やしても20倍が上限です。
スケールアウトとスケールアップはどちらを選ぶべきですか?
継続的な成長や高い可用性が必要ならスケールアウトが本命です。短期の性能不足を既存構成のまま解消したいならスケールアップが手早く済みます。まず垂直で伸ばし、上限が見えたら水平へ移る段階設計もよく取られます。