さくらのクラウドの料金表をAPIで取得する方法|curl・jqで料金を取得・CSV化

さくらのクラウド # API # 料金 # 調べてみた

こんにちは、UOZUです!

さくらのクラウドには、サーバーやディスクなどの料金をAPIから取得できる機能があります。

料金をプログラムから取得できれば、

  • サーバー構成から料金を自動計算する
  • 社内向けの簡易料金シミュレーターを作る
  • 料金改定を定期的にチェックする
  • Excelやスプレッドシート向けの料金一覧を生成する

といった使い方ができます。

今回は、Linux環境から curl と jq を使って、さくらのクラウドの料金表を取得してみます。

料金表を取得するAPI

今回取得するのは、実際の利用料金や請求金額ではなく、さくらのクラウドで提供されている各サービスの価格表です。

料金表は、さくらのクラウドAPIの以下のエンドポイントから取得できます。

https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/public/price.json

今回は石狩第1ゾーン is1a を使用します。

公式マニュアルでは、料金表について認証を行わない方法と、APIキーを使用する方法の両方が案内されていますが、今回はAPIキーを使用せず取得してみます。

$ curl -s \
  -H "X-Requested-With:XMLHttpRequest" \
  https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/public/price.json

大量のJSONが改行なく表示されます。

{"Count":416,"ResponsedAt":"2026-10-04T21:45:37+09:00","ServiceClasses":{"0":{"DisplayName":"\u30d7\u30e9\u30f31(\u30c7\u30a3\u30b9\u30af\u306a\u3057)","IsPublic":true,"Price":{"Daily":110,"Hourly":11,"Monthly":2179,"Zone":"is1a"},"ServiceCharge":"cloud\/uptime","ServiceClassID":50050,"ServiceClassName":"plan\/1","ServiceClassPath":"cloud\/plan\/1"},"1":{"DisplayName":"\u30d7\u30e9\u30f32(\u30c7\u30a3\u30b9\u30af\u306a\u3057)","IsPublic":true,"Price":{"Daily":176,"Hourly":17,"Monthly":3489,"Zone":"is1a"},"ServiceCharge":"cloud\/uptime","ServiceClassID":50051,"ServiceClassName":"plan\/2","ServiceClassPath":"cloud\/plan\/2"},"2":{"DisplayName":"\u30d7\u30e9\u30f33(\u30c7\u30a3\u30b9\u30af\u306a\u3057)","IsPublic":true,"Price":{"Daily":250,"Hourly":24,"Monthly":5008,...

そのままでは確認しづらいため、jq を使用して整形します。

curl -s \
  -H "X-Requested-With:XMLHttpRequest" \
  https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/public/price.json \
  | jq .

これだけで、認証なしで取得できる料金表をJSON形式で確認できます。

{
"Count": 416,
"ResponsedAt": "2026-10-04T21:46:30+09:00",
"ServiceClasses": {
"0": {
"DisplayName": "プラン1(ディスクなし)",
"IsPublic": true,
"Price": {
"Daily": 110,
"Hourly": 11,
"Monthly": 2179,
"Zone": "is1a"
},
"ServiceCharge": "cloud/uptime",
"ServiceClassID": 50050,
"ServiceClassName": "plan/1",
"ServiceClassPath": "cloud/plan/1"
...

必要な料金だけ取得する

サービス名と時間額・日額・月額だけを取り出してみます。

ただし、実際に確認すると Price はすべて同じデータ型ではなく、一部のサービスでは配列になっていました。

そのため、Price がオブジェクトのサービスだけを対象にします。

curl -s \
  -H "X-Requested-With:XMLHttpRequest" \
  https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/public/price.json \
  | jq '
      .ServiceClasses[]
      | select(.Price | type == "object")
      | {
          name: .DisplayName,
          hourly: .Price.Hourly,
          daily: .Price.Daily,
          monthly: .Price.Monthly
        }
    '
{
"name": "プラン/3Core-3GB",
"hourly": 24,
"daily": 247,
"monthly": 4950
}
{
"name": "プラン/3Core-4GB",
"hourly": 27,
"daily": 280,
"monthly": 5610
}
{
"name": "プラン/3Core-5GB",
"hourly": 30,
"daily": 313,
"monthly": 6270
}

※実際に確認したところ、Priceはすべてのサービスで同じ構造ではなく、一部では配列として返されました。そのため、すべてのサービスに対して.Price.Hourlyなどを一律に参照すると、jqでエラーになる場合があります。今回はselect(.Price | type == "object")を使い、Priceがオブジェクト形式のサービスだけを対象にしています。

サーバープランだけ絞り込む

ServiceClassPath を使えば、特定のサービスだけ抽出できます。

例えばサーバープランだけ取得する場合は以下のようにします。

curl -s \
  -H "X-Requested-With:XMLHttpRequest" \
  https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/public/price.json \
  | jq '
      .ServiceClasses[]
      | select(
          (.ServiceClassPath | startswith("cloud/plan/"))
          and
          (.Price | type == "object")
        )
      | {
          name: .DisplayName,
          hourly: .Price.Hourly,
          daily: .Price.Daily,
          monthly: .Price.Monthly
        }
    '

必要なサービスだけを抽出できるため、料金比較や料金シミュレーターにも利用できそうです。

CSVで保存する

Priceがオブジェクト形式のサービスについて、サービス名・時間額・日額・月額をCSVとして保存することもできます。

curl -s \
  -H "X-Requested-With:XMLHttpRequest" \
  https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/public/price.json \
  | jq -r '
      ["サービス名","時間額","日額","月額"],
      (
        .ServiceClasses[]
        | select(.Price | type == "object")
        | [
            .DisplayName,
            .Price.Hourly,
            .Price.Daily,
            .Price.Monthly
          ]
      )
      | @csv
    ' > sakura-price.csv

Excelなどで確認したい場合にも便利です。

"サービス名","時間額","日額","月額"
"プラン1(ディスクなし)",11,110,2179
"プラン2(ディスクなし)",17,176,3489
"プラン3(ディスクなし)",24,250,5008
"プラン4(ディスクなし)",38,387,7731
"プラン5(ディスクなし)",51,523,10455
"プラン6(ディスクなし)",79,795,15903
"プラン7(ディスクなし)",106,1068,21351
"プラン8(ディスクなし)",160,1612,32246
"プラン9(ディスクなし)",215,2157,43036
"プラン10(ディスクなし)",273,2744,54874
"プラン11(ディスクなし)",332,3330,66608
"プラン12(ディスクなし)",424,4252,85046
"プラン13(ディスクなし)",500,5007,100131
"スイッチ",11,110,2200
"ルータ/100Mbps",4,110,2200
"共有セグメント/100Mbps",0,0,0

※2026年10月4日時点で取得した結果の一例です。最新の料金はAPIまたは公式料金表をご確認ください。

注意点

価格表APIを利用する場合、いくつか注意点があります。

  • APIキーを使って認証する場合、取得できる価格表はAPIキーが紐付くプロジェクトによって異なる場合があります。個別に提供されているサービスがある場合は、公開料金表にはない価格が取得できることもあります。
  • 料金情報の更新は1日1回
  • Price の構造はすべてのサービスで同じとは限らない
  • Hourly、Daily、Monthly が必ず存在するとは限らない
  • 短い間隔で大量のリクエストを行わない

スクリプトから利用する場合は、データ型や項目の有無を確認しながら処理した方が安全です。

さいごに

さくらのクラウドでは、各サービスの料金表をAPIからJSON形式で取得できます。
jqと組み合わせることで、必要なサービスだけを抽出したり、CSVとして保存したりすることもできます。

また、取得した料金情報を利用すれば、ゾーンごとの料金比較や料金シミュレーターの作成、料金改定のチェックなどにも活用できます。

Webの料金表を確認するだけでなく、料金情報をプログラムから扱いたい場合に便利なAPIですね。

最後までお読みいただき、ありがとうございました!

この記事を書いた人

UOZU

ネットアシスト運用チーム10年目の運用エンジニア

さくらのクラウド検定 ベーシック (第一回)

さくらのクラウド検定 アドバンスド (第一回)

AWS Certified Solutions Architect - Associate

AWS Certified AI Practitioner