はじめに
普段は主にLinuxサーバの構築・運用をしているインフラエンジニアです。ミドルウェアのチューニングや障害対応でAIを利用していますが、生成AIのAPIはちゃんと触ったことがありません。ChatGPTやClaudeをブラウザで使うのと、APIをプログラムから叩くのは別物だと思っています。
そこで、無料で月3,000リクエスト使える「さくらのAI Engine」を題材に、初心者の視点で実践しながらつまずきそうなポイントを全4回シリーズ(予定)で記録していきます。
この記事はシリーズの1回目です。
| 各回のタイトル | 内容 |
|---|---|
| ①セットアップ編(本記事) | 無償プラン契約〜アカウントトークン(APIキー)発行〜最初の1リクエスト |
| ②全機能ためす編 | チャット生成/ベクトル埋め込み/音声の文字起こし/音声の読み上げ |
| ③つまずき解決編 | 実際に遭遇したエラーと解決法FAQ |
| ④まとめ編 | 30分で作るミニアプリ+無償枠の賢い使い方(予定) |
この記事のゴール
- さくらのAI Engineの無償プランを契約する
- アカウントトークン(APIキー)を発行する
- curlコマンドでAIから応答が返ってくる( これが今回のゴール。 逆に言うと、それ以上やらない)
所要時間: 約15分。 プログラミング知識は不要、ターミナル(またはWSL)でコマンドをコピペできればOK!
さくらのAI Engineとは
さくらインターネットが提供する、各種AIモデルをAPIで利用できるサービスです。初心者目線で特に重要なメリットは、次の3つだと考えています。
- 無料枠が月3,000リクエスト(トークン数ではなくリクエスト数でのカウントなので、残量の把握がとても簡単)
- 超過しても自動課金されない(無償プランなら課金の心配なし)
- OpenAI互換・Anthropic互換のAPI(世の中のサンプルコードやライブラリがほぼそのまま使える)
「初心者のAPI練習台」として、これ以上ないくらい良い条件だと思います。
ただし、下記の点には少し注意が必要です。
※音声認識(文字起こし)と読み上げの無償枠は月50リクエストと別枠で少なめ、詳しくは「②全機能ためす編」にまとめる予定です。
※無償プランにおいても、RAGで使用するドキュメントを登録した際には、ドキュメントを削除するまでチャンク数に応じた課金が継続的に毎月発生します。
事前準備
必要なものは2つだけです。
ただ、初心者にとって、ここが一番のつまずきそうな(あきらめる)ポイントかもしれません。特に2番目
-
さくらインターネットの会員ID(持っていなければ、会員登録して取得する)
詳しい手順は会員登録 (会員IDを取得)したい を参考に - curlコマンドが使える環境(A:macOS/Linux環境、B:Windows環境として後述)
※curlコマンド実行時の応答メッセージが見にくいので、jqコマンドを使えるように準備しておくと見やすくなります。
手順1: 無償プランを契約する
- さくらのクラウド ログインページ にアクセス
- さくらインターネットの会員IDを利用してログイン
- さくらのクラウドホームから「さくらのAI Engine」を選択
- 無償プランを選択して申し込み
詳しい手順は「さくらのAI Engine 利用手順 を参考に - さくらのAI Engineコントロールパネルが表示されることを確認
手順2: アカウントトークン(APIキー)を発行する
- さくらのAI Engineコントロールパネルの「アカウントトークン」からアカウントトークンを作成
- 表示されたアカウントトークンをコピーして、安全な場所に保存(これ以降、<アカウントトークン>と表記する部分はこのコピーした文字列に差し替えること)
→<アカウントトークン>は、絶対にインターネット上で共有しないこと
※アカウントトークンは再度表示されないので、わからなくなったら再作成する。
手順3: 【動作確認】使えるモデルを一覧で取得する
いきなり利用を始めるのもよいですが、「モデル一覧の取得」を最初のリクエストにして、動作確認するのがおすすめです。アカウントトークンが正しいかの確認と、利用可能なモデルの一覧取得が同時にできるから。
A:macOS/Linux環境
※<アカウントトークン>の部分は、手順2でコピーした内容に変更すること
export SAKURA_API_KEY="<アカウントトークン>"
curl -s https://api.ai.sakura.ad.jp/v1/models \
-H "Authorization: Bearer $SAKURA_API_KEY"
jqコマンドも使う場合
curl -s https://api.ai.sakura.ad.jp/v1/models \
-H "Authorization: Bearer $SAKURA_API_KEY" | jq .
実際のcurlコマンド実行結果(見やすさ比較のため、jqコマンドを使った場合も記載)
$ curl -s https://api.ai.sakura.ad.jp/v1/models \
-H "Authorization: Bearer $SAKURA_API_KEY"
{"object":"list","data":[{"id":"preview/Kimi-K2.7-Code","object":"model","owned_by":"sakura","created":1785207600},{"id":"whisper-large-v3-turbo","object":"model","owned_by":"sakura","created":1756188390},{"id":"preview/Qwen3-VL-30B-A3B-Instruct","object":"model","owned_by":"sakura","created":1761012000},{"id":"gpt-oss-120b","object":"model","owned_by":"sakura","created":1755765369},{"id":"preview/Qwen3-Embedding-4B-FP16","object":"model","owned_by":"sakura","created":1765846800},{"id":"preview/Kimi-K2.6","object":"model","owned_by":"sakura","created":1778545800},{"id":"preview/gemma-4-31B-it","object":"model","owned_by":"sakura","created":1782781200},{"id":"preview/Qwen3.6-35B-A3B","object":"model","owned_by":"sakura","created":1780534800},{"id":"llm-jp-3.1-8x13b-instruct4","object":"model","owned_by":"sakura","created":1758179200},{"id":"preview/Qwen3-0.6B-cpu","object":"model","owned_by":"sakura","created":1759975200},{"id":"preview/Phi-4-mini-instruct-cpu","object":"model","owned_by":"sakura","created":1759975200},{"id":"multilingual-e5-large","object":"model","owned_by":"sakura","created":1755880944}]}
# jqコマンドを使った場合、結果が見やすい!
$ curl -s https://api.ai.sakura.ad.jp/v1/models \
-H "Authorization: Bearer $SAKURA_API_KEY" | jq .
{
"object": "list",
"data": [
{
"id": "preview/Kimi-K2.7-Code",
"object": "model",
"owned_by": "sakura",
"created": 1785207600
},
{
"id": "whisper-large-v3-turbo",
"object": "model",
"owned_by": "sakura",
"created": 1756188390
},
{
"id": "preview/Qwen3-VL-30B-A3B-Instruct",
"object": "model",
"owned_by": "sakura",
"created": 1761012000
},
{
"id": "gpt-oss-120b",
"object": "model",
"owned_by": "sakura",
"created": 1755765369
},
{
"id": "preview/Qwen3-Embedding-4B-FP16",
"object": "model",
"owned_by": "sakura",
"created": 1765846800
},
{
"id": "preview/Kimi-K2.6",
"object": "model",
"owned_by": "sakura",
"created": 1778545800
},
{
"id": "preview/gemma-4-31B-it",
"object": "model",
"owned_by": "sakura",
"created": 1782781200
},
{
"id": "preview/Qwen3.6-35B-A3B",
"object": "model",
"owned_by": "sakura",
"created": 1780534800
},
{
"id": "llm-jp-3.1-8x13b-instruct4",
"object": "model",
"owned_by": "sakura",
"created": 1758179200
},
{
"id": "preview/Qwen3-0.6B-cpu",
"object": "model",
"owned_by": "sakura",
"created": 1759975200
},
{
"id": "preview/Phi-4-mini-instruct-cpu",
"object": "model",
"owned_by": "sakura",
"created": 1759975200
},
{
"id": "multilingual-e5-large",
"object": "model",
"owned_by": "sakura",
"created": 1755880944
}
]
}
B:Windows環境
※<アカウントトークン>の部分は、手順2でコピーした内容に変更すること
コマンドプロンプトの場合
set SAKURA_API_KEY=<アカウントトークン>
curl -s https://api.ai.sakura.ad.jp/v1/models -H "Authorization: Bearer %SAKURA_API_KEY%"
実際のcurlコマンド実行結果
>curl -s https://api.ai.sakura.ad.jp/v1/models -H "Authorization: Bearer %SAKURA_API_KEY%"
{"object":"list","data":[{"id":"preview/Kimi-K2.7-Code","object":"model","owned_by":"sakura","created":1785207600},{"id":"llm-jp-3.1-8x13b-instruct4","object":"model","owned_by":"sakura","created":1758179200},{"id":"preview/Qwen3-0.6B-cpu","object":"model","owned_by":"sakura","created":1759975200},{"id":"preview/Phi-4-mini-instruct-cpu","object":"model","owned_by":"sakura","created":1759975200},{"id":"preview/Qwen3-Embedding-4B-FP16","object":"model","owned_by":"sakura","created":1765846800},{"id":"preview/Kimi-K2.6","object":"model","owned_by":"sakura","created":1778545800},{"id":"preview/gemma-4-31B-it","object":"model","owned_by":"sakura","created":1782781200},{"id":"preview/Qwen3.6-35B-A3B","object":"model","owned_by":"sakura","created":1780534800},{"id":"multilingual-e5-large","object":"model","owned_by":"sakura","created":1755880944},{"id":"gpt-oss-120b","object":"model","owned_by":"sakura","created":1755765369},{"id":"whisper-large-v3-turbo","object":"model","owned_by":"sakura","created":1756188390},{"id":"preview/Qwen3-VL-30B-A3B-Instruct","object":"model","owned_by":"sakura","created":1761012000}]}
PowerShellの場合
PowerShellの curl は実体が別コマンド(Invoke-WebRequest)のため、コマンドがそのまま動きません。curl.exe と明示して実行する必要があります。
$env:SAKURA_API_KEY="<アカウントトークン>"
curl.exe -s https://api.ai.sakura.ad.jp/v1/models -H "Authorization: Bearer $env:SAKURA_API_KEY"
実際のcurlコマンド実行結果
> curl.exe -s https://api.ai.sakura.ad.jp/v1/models -H "Authorization: Bearer $env:SAKURA_API_KEY"
{"object":"list","data":[{"id":"preview/gemma-4-31B-it","object":"model","owned_by":"sakura","created":1782781200},{"id":"preview/Qwen3.6-35B-A3B","object":"model","owned_by":"sakura","created":1780534800},{"id":"llm-jp-3.1-8x13b-instruct4","object":"model","owned_by":"sakura","created":1758179200},{"id":"preview/Qwen3-0.6B-cpu","object":"model","owned_by":"sakura","created":1759975200},{"id":"preview/Phi-4-mini-instruct-cpu","object":"model","owned_by":"sakura","created":1759975200},{"id":"preview/Qwen3-Embedding-4B-FP16","object":"model","owned_by":"sakura","created":1765846800},{"id":"preview/Kimi-K2.6","object":"model","owned_by":"sakura","created":1778545800},{"id":"preview/Kimi-K2.7-Code","object":"model","owned_by":"sakura","created":1785207600},{"id":"multilingual-e5-large","object":"model","owned_by":"sakura","created":1755880944},{"id":"gpt-oss-120b","object":"model","owned_by":"sakura","created":1755765369},{"id":"whisper-large-v3-turbo","object":"model","owned_by":"sakura","created":1756188390},{"id":"preview/Qwen3-VL-30B-A3B-Instruct","object":"model","owned_by":"sakura","created":1761012000}]}
手順4: AIの自己紹介リクエスト
いよいよ本番です。gpt-oss-120bモデルを使って、自己紹介をお願いしてみましょう。
A:macOS/Linux環境
curl -s https://api.ai.sakura.ad.jp/v1/chat/completions \
-H "Authorization: Bearer $SAKURA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss-120b",
"messages": [
{"role": "user", "content": "こんにちは。自己紹介を1文でお願いします。"}
],
"max_tokens": 200
}'
jqコマンドも使う場合
curl -s https://api.ai.sakura.ad.jp/v1/chat/completions \
-H "Authorization: Bearer $SAKURA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss-120b",
"messages": [
{"role": "user", "content": "こんにちは。自己紹介を1文でお願いします。"}
],
"max_tokens": 200
}' | jq .
実際のcurlコマンド実行結果(見やすさ比較のため、jqコマンドを使った場合も記載)
$ curl -s https://api.ai.sakura.ad.jp/v1/chat/completions \
-H "Authorization: Bearer $SAKURA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss-120b",
"messages": [
{"role": "user", "content": "こんにちは。自己紹介を1文でお願いします。"}
],
"max_tokens": 200
}'
{"id":"chatcmpl-b5f7f86b8e0ca082","object":"chat.completion","created":1785297853,"model":"gpt-oss-120b","choices":[{"index":0,"message":{"role":"assistant","content":"こんにちは、私はOpenAIが開発した大規模言語モデルChatGPTです。","refusal":null,"annotations":null,"audio":null,"function_call":null,"reasoning":"We need to respond in Japanese, self-introduction in one sentence. Probably \"こんにちは、私はChatGPT、OpenAIが開発した大規模言語モデルです。\" That fits one sentence."},"logprobs":null,"finish_reason":"stop","stop_reason":null,"token_ids":null,"routed_experts":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":77,"total_tokens":147,"completion_tokens":70,"prompt_tokens_details":null},"prompt_logprobs":null,"prompt_token_ids":null,"prompt_text":null,"kv_transfer_params":null}
# jqコマンドを使った場合
$ curl -s https://api.ai.sakura.ad.jp/v1/chat/completions \
-H "Authorization: Bearer $SAKURA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss-120b",
"messages": [
{"role": "user", "content": "こんにちは。自己紹介を1文でお願いします。"}
],
"max_tokens": 200
}' | jq .
{
"id": "chatcmpl-b5e4b1a782801044",
"object": "chat.completion",
"created": 1785297870,
"model": "gpt-oss-120b",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "こんにちは、私はChatGPTというAIで、皆さんの質問に答えたり、さまざまな情報やアイディアを提供することが得意です。",
"refusal": null,
"annotations": null,
"audio": null,
"function_call": null,
"reasoning": "The user asks in Japanese: \"こんにちは。自己紹介を1文でお願いします。\" Means \"Hello. Please give a self-introduction in one sentence.\" So respond with a one-sentence self-introduction in Japanese. Probably: \"こんにちは、私はChatGPTというAIで、皆さんの質問に答えることが得意です。\" That's one sentence. Ensure it's one sentence. Provide in Japanese."
},
"logprobs": null,
"finish_reason": "stop",
"stop_reason": null,
"token_ids": null,
"routed_experts": null
}
],
"service_tier": null,
"system_fingerprint": null,
"usage": {
"prompt_tokens": 77,
"total_tokens": 206,
"completion_tokens": 129,
"prompt_tokens_details": null
},
"prompt_logprobs": null,
"prompt_token_ids": null,
"prompt_text": null,
"kv_transfer_params": null
}
choices[0].message.content に日本語の応答が入っていれば成功です。おめでとうございます、あなたは、今回のゴールを見事に達成しました!
応答に見慣れないフィールドreasoningと気になる自己紹介私はChatGPTというAIで…がありますが、これは③つまずき解決編で解説します
B:Windows環境
コマンドプロンプトの場合
curl -s https://api.ai.sakura.ad.jp/v1/chat/completions -H "Authorization: Bearer %SAKURA_API_KEY%" -H "Content-Type: application/json" -d "{\"model\": \"gpt-oss-120b\", \"messages\": [{\"role\": \"user\", \"content\": \"こんにちは。自己紹介を1文でお願いします。\"}], \"max_tokens\": 200}"
PowerShellの場合
curl.exe -s https://api.ai.sakura.ad.jp/v1/chat/completions -H "Authorization: Bearer $env:SAKURA_API_KEY" -H "Content-Type: application/json" -d '{\"model\": \"gpt-oss-120b\", \"messages\": [{\"role\": \"user\", \"content\": \"こんにちは。自己紹介を1文でお願いします。\"}], \"max_tokens\": 200}'
手順5: 利用量を確認する
さくらのAI Engineコントロールパネルの「利用量」から、いま何リクエスト使ったかを確認できます。
実際に確認した結果、この記事の作業で使ったのはチャット生成の5リクエストでした。
ここまでで消費したのはわずか5リクエスト。月3,000回の枠はほぼ手つかずです。この「まだまだいっぱいある」という安心感が、無償枠がリクエスト数カウントであることの最大のメリットだと感じました。
まとめ
- 無償プラン契約→アカウントトークン(APIキー)発行→モデル一覧取得→チャット1回、まで約15分
- 最初の1リクエストは「モデル一覧の取得」にすると認証確認とモデル名入手の確認が同時にできる
- モデル名は手打ちせずコピペした方が間違いない
次回②全機能ためす編では、公式ドキュメントを参考にチャット生成・ベクトル埋め込み・音声の文字起こし・音声の読み上げまで全機能を一通り試します。音声系は無償枠が月50回しかないので、うっかり溶かさない使い方も紹介する予定です。


