はじめに
言葉を書くだけで画像ができる AI 画像生成サービス Kamie(カミエ) を、個人で作って公開してみました!
-
Discord:サーバーで
/imagineと打つだけ - Web:ブラウザからログインして、そのまま生成
👉 https://blacklagunastudio.com/kamie/
はじめての人には無料ポイントがあるので、登録して 1 枚つくるまで 1 分かかりません。まずは触ってみてください。
この記事では、企画からデザイン・サーバー・決済・運用までを 1 人で作るときに 「ここは考えてよかった」 と思ったポイントを、設計の考え方を中心に紹介します。
実装の細部まではあえて書いていません。「こういう考え方で作るとラクだった」というエッセンスとして読んでもらえるとうれしいです。
できること
| 機能 | ひとことで言うと |
|---|---|
| ✨ 生成 | プロンプトを書いて 1 枚つくる |
| 🎰 おまかせガチャ | お題を Kamie が考えて、ランダムに 1 枚 |
| 🔁 続ける | できた画像を元に「髪を赤く」「夜にして」などと直していく |
| 🧩 共通設定 | 「銀髪の女騎士、油絵風」のような設定を毎回のプロンプトに自動で付ける |
| 🪄 プロンプト作成 | 書くことが思いつかない人向けに、選ぶだけでプロンプトができる |
| 🏆 フォトコン | 月ごとのお題に投稿して、みんなで投票 |
| 💎 ポイント・VIP | 毎日のログインボーナス、ポイント購入、月額プラン |
特に気に入っているのが 🔁 続ける と 🧩 共通設定 の組み合わせです。
同じキャラで何枚も作りたいとき、毎回長いプロンプトを書かなくても、少しずつ直しながら「自分の 1 枚」に近づけていけます。
全体の構成(ざっくり)
┌──────────── 1 つの Python プロセス ────────────┐
Discord ────────▶│ Discord Bot(スラッシュコマンド・ボタン) │
│ │ │
ブラウザ ─▶ Caddy ─▶│ Web API / Web ページ(同じプロセス内) │──▶ 画像生成 API
(HTTPS) │ │ │──▶ 決済(Stripe)
│ SQLite(ユーザー・ポイント・作品・投票) │
└────────────────────────────────────────────────┘
- 言語:Python(discord.py + aiohttp)
- DB:SQLite
- Web サーバー:Caddy(HTTPS 証明書を自動で取ってくれる)
- ログイン:Discord / Google
- 決済:Stripe
- サーバー:クラウドの小さめのインスタンス 1 台
「え、全部 1 プロセス? DB も SQLite?」と思われるかもしれませんが、個人開発の最初の 1 台としてはこれがちょうどよかった というのが一番伝えたいことです。
考えてよかったポイント 5 つ
1. Bot と Web を「1 つのプロセス」にした
Discord Bot の中で Web サーバーも一緒に動かしています。
よかったこと
- ポイントの増減・生成処理・決済の反映が 同じコード・同じ DB を通るので、Discord と Web でズレが起きない
- デプロイ対象が 1 つだけ。再起動も 1 回だけ
- Discord でログインした人は、Web でも 同じポイント・同じ VIP をそのまま使える
気をつけたこと
- 画像生成のように時間がかかる処理で、Bot 全体が止まらないようにする(非同期で待つ)
- 再起動の瞬間は両方止まるので、トップページのような「止まってほしくないもの」は Caddy から静的ファイルとして直接返す
「サービスが小さいうちは、分けるより まとめておくほうが壊れにくい」というのが実感です。
2. ポイントは「財布を 2 つ」に分けた
ポイントを 1 つの数字で持つと、すぐに困ります。
- 月額プランでもらった分 → 更新日にリセット したい
- 購入した分・特典でもらった分 → 無期限 にしたい
そこで、ポイントを 「月額分」と「購入・特典分」の 2 つの財布 に分けて持ち、
使うときは、月額分から先に減らす
というルールにしました。こうするとユーザーにとって損がなく、画面にも「月額分 ◯pt / 購入分 ◯pt」と素直に出せます。
課金まわりは後から仕様を変えるのが本当に大変なので、最初に「ポイントの種類」と「減る順番」を決めておく のがおすすめです。
3. 「成功したときだけポイントを減らす」を最初から設計に入れた
画像生成は、外部 API のエラーや「この内容は生成できません」という判定で失敗することがあります。
そこで処理の流れを
- 残高が足りるかを確認する
- 生成する
- 成功したときだけ、ポイントを減らして記録する(ここは 1 回の DB トランザクションでまとめて行う)
という形に固定しました。「払ったのに何も出なかった」が起きないので、問い合わせがほぼ来ません。
決済も同じ考え方で、Stripe から同じ通知が 2 回届いても、ポイントが 2 回付かない ようにしています(通知ごとの ID で「もう処理したか」を記録するだけで防げます)。
4. 「続ける」は “前の画像” と “前のプロンプト” を両方使う
「🔁 続ける」は、ユーザーが書いた指示だけを送ると、顔や画風が変わってしまいがちです。
なので、
- 元の画像
- 元のプロンプト
- 今回の指示(「髪を赤く」など)
- 共通設定(オンなら)
を組み合わせて、「指示されていないところは、できるだけそのまま保つ」 という前提で生成するようにしました。画像の縦横比も元の画像に合わせます。
AI 機能は「すごい 1 枚」よりも、思った方向に少しずつ近づけられる操作感 のほうが満足度が高い、と感じています。
5. 運用のための「自分用の画面」を早めに作った
公開後に一番時間を取られるのは、実は開発より 「今どうなってる?」を確認する作業 でした。
- DB の中身をブラウザで見られる 読み取り専用の管理画面(Basic 認証つき)
- デプロイ後に主要ページが正しく返るかを自動でチェックするスクリプト
このあたりを作ってから、運用のストレスがかなり減りました。
管理画面は 「読み取り専用」にしておく のがポイントで、うっかり本番データを壊す心配がありません。
1 人で作ってみて
- 最初の構成は小さく、でもお金とポイントのルールだけは最初に固める
- 失敗したときの体験(返金・お詫び・エラーメッセージ)を先に作る
- 自分が運用しやすい道具は、ユーザー向けの機能と同じくらい大事
この 3 つが、個人でサービスを公開してみて一番の学びでした。
まずは触ってみてください 🎨
👉 Kamie:https://blacklagunastudio.com/kamie/
- Web なら、Discord または Google でログインするだけ(メールアドレスやパスワードの入力は不要)
- はじめての人には 無料ポイント があります
- 毎日のログインボーナスでも、ポイントがもらえます
- 作った画像は 商用利用もできます
おすすめの遊び方は、
- 🎰 おまかせガチャ で 1 枚つくってみる
- 気に入った画像を 🔁 続ける で「夜にして」「笑顔にして」と直してみる
です。「選ぶだけのプロンプト作成」もあるので、何を書けばいいか迷っても大丈夫です。
感想・要望・「こういう作りにしたらもっとよくなるよ」などのコメントも、大歓迎です!
まとめ
仕事後に頑張って作ったので疲れた…
