🧭 あなたに最適なVPSを30秒で無料診断 診断する →

【2026年版】AI画像の自動生成システムをVPSで24時間稼働させるための完全ロードマップ

AI画像の自動生成システムをVPSで24時間稼働させる完全ロードマップ

最初に結論を書いておく

GPU VPSは「用途が合えば強い」。でも月額コストはまぁまぁ高い。先にコスト計算してから読んでほしい。

正直に言うと、世の中の「GPU VPS最高!」系の記事はアフィ報酬目的で書かれているケースが多い。GPU積んだプランはそれだけ単価が高いから、紹介料もでかい。だから無条件に「GPU VPSを使いましょう」と押してくる記事は一旦疑ってかかってほしい。

ただ——Stable Diffusionに限っては、GPUは本当に必要。これは正当な理由がある。Claude Codeみたいに「API経由で外部のモデルに投げる」タイプのAIツールとは根本的に違って、SDは自分のマシンでモデルを動かす必要がある。ここだけはGPUから逃げられない。「Claude CodeにもGPUが要る」と言ってくる記事があったら、それは単純に間違いか、あるいはわかってて書いてるかのどちらかだ。

具体的なコスト感から先に書くと——

  • XServer VPS(GPU搭載プラン): 月額2〜5万円台が中心
  • さくらのVPS(GPU): 構成によるが同じく数万円帯
  • 月30日・24時間フル稼働で1日あたり1,000〜1,600円かかる計算になる

1日1,500円 × 30日 = 月45,000円

これが高いか安いかは、生成した画像でどれだけ稼げるかによる。ストックフォトで月5〜10万の収益が見込めるなら十分ペイする。「SNSのアイキャッチをちょっと自動化したい」程度なら、はっきり言って割に合わない。自分も最初「なんとなくかっこいい」でやりかけたことがあるので、これは身をもって言える。

その判断を先にしてから、以下の手順を読んでもらえれば。


「毎日SNS用の画像を大量生成したい」「ストックフォトを自動で量産したい」——そういう明確な目的があるなら、VPS上でのAI画像自動生成システムは確かに強い選択肢になる。

手元のPCを占有せず、cronで決まった時間に自動実行し、生成した画像をクラウドストレージへ自動転送。このパイプラインをVPS上に構築すれば、寝ている間にも画像が量産され続ける。

自分がこれを調べ始めたとき、「仕組みの解説」より「実際いくらかかるのか」が一番知りたかった。だからその話を先にした。以下は実際の構築手順。

自動生成システムの全体像

[cronジョブ] → [生成スクリプト] → [SD WebUI API] → [GPU VPS]
                                                       ↓
                              [画像ファイル出力] → [Google Drive / S3 転送]
                                                       ↓
                                              [Slack通知 / メール通知]

シンプルに言うと「cronがスクリプトを叩く → GPUが画像を生成する → どこかに保存する → 通知が来る」という流れ。一度組んでしまえば手放しで動く。

手元のPCでやるのと何が違うかというと——電源を切れる、落ちても自動復帰する、朝起きたら画像が揃ってる。この3点が地味に大きい。「PCつけっぱなしにして外出する」のは精神的に気になる。何かあったらリモートデスクトップで入らないといけないから、全然手放しにならない。VPSにする意味はここにある。家のPCを「サーバー代わり」にしてる間は、本当の意味での自動化とは言えないと思っている。

必要なVPSスペックの目安

用途最小構成推奨構成
SD 1.5ベース・1枚/分VRAM 8GB / RAM 16GBVRAM 16GB / RAM 32GB
SDXLベース・1枚/2分VRAM 16GB / RAM 32GBVRAM 24GB / RAM 64GB
並列生成(複数ワーカー)VRAM 24GB / RAM 64GBGPU複数台構成

自分の結論としては、SDXLで「1日1,000枚」はかなりハードルが高い。

1枚2分として単純計算すると2,000分 = 約33時間。1日24時間しかないので、並列ワーカーを使わないと物理的に達成できない。「1日1,000枚」という数字はキャッチーだけど、現実的なスタートラインは「まず1日50〜100枚で回してみる」くらいがいい。

目標枚数 → 必要スペック → 月額コストの順で逆算してから申し込む。この順番を間違えると「高いプランを契約したのに使いきれなかった」になる。申し込む前に自分の手で計算してほしい。

XServer VPS →

Step 1: SD WebUI APIサーバーの起動設定

# A1111 WebUIをAPIモードで起動(UIなし、APIのみ)
cd /root/stable-diffusion-webui
python launch.py \
  --api \
  --nowebui \
  --xformers \
  --no-half-vae \
  --port 7860 \
  --listen &

# 起動確認
curl http://localhost:7860/sdapi/v1/options | python3 -m json.tool | head -20

--nowebui をつけてAPIだけ起動するのがポイント。ブラウザで触るUIを立ち上げる必要がないので、VRAMとRAMをそのまま生成に回せる。自動化が目的なら画面は要らない。これだけでパフォーマンスがけっこう変わる。「UIも見たい」と思う気持ちはわかるけど、自動化が目的なら割り切ってAPIのみにする。

systemdでAPI自動起動

cat > /etc/systemd/system/sd-api.service << 'EOF'
[Unit]
Description=Stable Diffusion WebUI API
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/stable-diffusion-webui
ExecStart=/root/venv/bin/python launch.py --api --nowebui --xformers --port 7860 --listen
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable sd-api
systemctl start sd-api

Restart=always は必須。VPSが再起動されたときやプロセスが落ちたときに自動で復帰してくれる。「深夜3時のバッチが静かに失敗してた」という事故を防げる。これを入れ忘れると「なんか今日の朝、画像が来てないな」という地味なストレスを味わうことになる。自分はこれを忘れて一度やらかした。

Step 2: バッチ生成Pythonスクリプト

#!/usr/bin/env python3
# generate_batch.py — プロンプトリストから画像を一括生成

import requests
import base64
import os
import json
from datetime import datetime
from pathlib import Path

API_URL = "http://localhost:7860"
OUTPUT_DIR = Path("/root/output") / datetime.now().strftime("%Y%m%d")
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)

PROMPTS = [
    "a serene mountain landscape at sunrise, photorealistic, 8k",
    "minimalist office desk setup, top view, clean aesthetic",
    "cozy coffee shop interior, warm lighting, bokeh",
]

def generate(prompt: str, idx: int) -> str:
    payload = {
        "prompt": prompt,
        "negative_prompt": "blurry, low quality, watermark",
        "steps": 28,
        "cfg_scale": 7,
        "width": 1024,
        "height": 1024,
        "sampler_name": "DPM++ 2M Karras",
    }
    r = requests.post(f"{API_URL}/sdapi/v1/txt2img", json=payload, timeout=120)
    r.raise_for_status()
    img_data = base64.b64decode(r.json()["images"][0])
    out_path = OUTPUT_DIR / f"img_{idx:04d}.png"
    out_path.write_bytes(img_data)
    print(f"[{idx}] 生成完了: {out_path}")
    return str(out_path)

if __name__ == "__main__":
    for i, prompt in enumerate(PROMPTS):
        generate(prompt, i)
    print(f"完了: {len(PROMPTS)}枚生成 → {OUTPUT_DIR}")

このスクリプトはそのまま動く最小構成。PROMPTS リストを増やすだけで生成枚数が増える。まずこれを動かしてから、慣れてきたらCSVやJSONからプロンプトを読み込む形に拡張すると管理しやすい。最初から完璧な構成を目指さなくていい。動くことを確認してから育てていくのが結局早い。自分の場合、最初に作りこみすぎて動かすまでが遠くなった経験がある。

Step 3: cronで毎日自動実行

# crontab -e で以下を追加
# 毎日午前3時に生成バッチを実行(夜間は負荷が少ない)
0 3 * * * /root/venv/bin/python /root/scripts/generate_batch.py >> /root/logs/generate.log 2>&1

# 生成後にGoogle Driveへ自動転送(rclone使用)
30 3 * * * rclone copy /root/output/ "gdrive:AI_Images/$(date +\%Y\%m)" --progress >> /root/logs/rclone.log 2>&1

午前3時実行にしているのは、生成処理でVPSのCPU・GPUを長時間フル稼働させるので「業務時間帯を外す」という理由が半分、「翌朝起きたら画像が揃ってる」という体験が気持ちいいという理由が半分。正直、後者のほうがモチベーションに効く。これが習慣になると、朝コーヒーを淹れながらSlack通知を確認するのがちょっとした楽しみになる。

rcloneは初回設定がちょっと面倒だが、一度通せばGoogle DriveもS3もDropboxも同じコマンドで転送できる。「毎回手動でダウンロードする」のを続けるより絶対に入れたほうがいい。ここをサボると自動化の旨味が半減する。面倒でも最初の30分を使って設定してしまえば、あとはずっとラクになる。

Step 4: Slack通知でバッチ完了を知らせる

# generate_batch.py の末尾に追記
import requests as req

def notify_slack(message: str):
    webhook = os.environ.get("SLACK_WEBHOOK_URL")
    if not webhook:
        return
    req.post(webhook, json={"text": message})

notify_slack(f"✅ バッチ完了: {len(PROMPTS)}枚生成 | {datetime.now().strftime('%Y-%m-%d %H:%M')}")

これを入れておくと「バッチが動いているか死んでいるか」が朝スマホで確認できる。通知が来なかった日 = 何かが失敗した日、と即わかるのが地味に助かる。

自分の場合、これがないと「今日ちゃんと動いたかな」が気になって結局VPSにログインして確認しに行く。それじゃ手放しにならない。環境変数 SLACK_WEBHOOK_URL に Webhook URL をセットするだけで5分で導入できるので、面倒くさがらずに入れてほしい。「監視があって初めて自動化」だと思っている。

さくらのVPS →

自動化の主な活用シーンと、正直なコスト感

シーン生成スケジュール月間枚数目安
SNS (Instagram/X) 用素材毎日10枚300枚
ストックフォトサイト投稿毎日50枚1,500枚
ECサイト商品背景注文トリガーオンデマンド
ブログ記事アイキャッチ週3回・5枚60枚

率直に言うと、SNS用に毎日10枚程度ならGPU VPSの月額コストは割に合わない可能性が高い。

月300枚のために毎月2〜5万円払うのは、Adobe Stockなどで素材を購入したほうが安く済むケースがある。「自動化したい気持ち」と「コストの現実」は分けて考えてほしい。気持ちはわかるけど、月数万円の固定費は現実として毎月やってくる。

一方、ストックフォトへの大量投稿(月1,000枚超)が目的なら話が変わる。月1,500枚をAdobe Stockで仮に1枚30円で売れるとして、月4.5万円の収益になる計算。GPU VPSのコストとトントンか少し上回る水準。「月に何枚生成して、1枚あたりいくら稼げるか」を先に試算してから投資判断してほしい。感覚で始めると月数万の固定費だけが残る。これは本当にそうなる。

Adobe Stock、Shutterstockなど大手サービスは2023〜2024年にAI生成画像の審査ポリシーを設け、AI生成であることの申告と人間による品質チェックを義務付けています。無断でAI生成画像を人間制作として申告すると規約違反になります。各サービスのAIポリシーを事前に確認してください。
systemdのRestart=alwaysを設定しておけばSD WebUI APIが自動再起動されます。スクリプト側でも既に生成済みのインデックスを記録しておき、再実行時に続きから再開する「チェックポイント機能」を実装することで、クラッシュ時のロスを最小化できます。
SD WebUI APIには /sdapi/v1/options エンドポイントがあり、POSTリクエストでsd_model_checkpointを動的に切り替えられます。朝は風景系モデル、昼はポートレート系モデルのように、cronジョブごとに異なるモデルを指定することが可能です。

まとめ:あなたの使い方で選ぶ

使い方判断理由
ストックフォトへ月1,000枚以上投稿したいやる価値あり販売収益との損益が合いやすい。GPU VPS一択
SNS用素材を毎日10〜30枚生成したいコスト要確認月2〜5万円に見合う収益があるかを先に試算。合わなければ外部APIで代替も検討
ブログのアイキャッチを週数枚生成したいGPU VPSは過剰月60枚程度に数万円は完全に割に合わない。外部APIや無料ツールで十分
ECサイトの商品背景をオンデマンドで生成したいあり受注連動で動かせるなら費用対効果が出やすい
まずシステムの動きを試してみたいまず試すさくらのVPSなど無料お試し期間で感触をつかんでから判断する

はっきり書いておくと、**「GPU VPS = 高い自動化ツール」**という認識が正しい。高い分だけのリターンが見込める用途かどうかを先に考えてから導入するのが正解。「なんとなく自動化かっこいい」で始めると、月数万円の固定コストだけが残る。自分もそれをやりかけたことがあるので言える。

逆に収益化の目算が立っているなら、手元PCを使い続けるより圧倒的に楽。自分で電源管理しなくていい、落ちても自動で復帰する、朝起きたら画像が揃ってる——この体験は一度味わうと戻れない。

迷っている時間がもったいない。動いてから考えよう。「1週間回してみたらどうなるか」を体で覚えてから、本格運用に移るかどうか決めればいい。

XServer VPS →

さくらのVPS →