はじめに
THINKONYX で個人開発しているサービス「愛犬取説(あいけんとりせつ)」を 2026 年春に公開しました。本記事では、サービスの紹介と、開発過程で一番苦労した「決済システムの選定」について書き残しておきます。
特に、Stripe のアカウント承認が下りなかった話は、これから個人で課金サービスを作ろうとしている方の参考になれば幸いです。
サービスURL: https://dog-manual.thinkonyx.jp
愛犬取説とは
万が一の時も安心。愛犬の大切な情報を 1 枚にまとめて共有できる Web アプリ。
愛犬取説は、愛犬の以下のような情報を 1 つの「取扱説明書」にまとめて保存・共有できるサービスです。
- 基本情報(名前、犬種、生年月日、マイクロチップ番号など)
- 医療履歴(ワクチン、既往症、かかりつけ医)
- 性格・苦手なもの・知っているコマンド
- 食事、散歩、排泄、睡眠などの生活リズム
- 緊急連絡先(家族、かかりつけ動物病院)
作成した取説は QR コード付きの公開ページとして共有できるので、
- ペットホテルに預ける時
- 旅行先で動物病院にかかる時
- 自分が事故・入院などで一時的に世話ができなくなった時
など、第三者が愛犬を一時的にケアする場面で「この子の情報を一発で伝えられる」ことを目指しています。
実際、私自身が「もし自分に何かあった時、愛犬のことを家族や預け先にちゃんと伝えられているだろうか?」と不安になったのが開発のきっかけでした。
開発のきっかけ
ペットの飼い主であれば誰しも、
- かかりつけ動物病院の電話番号、すぐ言える?
- フードのメーカーと量、メモしてある?
- アレルギーや過去の手術歴、家族全員が把握してる?
…と聞かれて、すべて即答できる人は意外と少ないと思います。
私自身、愛犬を実家に預ける時に「散歩の時間って何時だっけ?」「フードの量って何グラム?」と毎回 LINE で聞かれていて、これを 1 つにまとめておけば良いのでは、と思ったのがスタートでした。
スマホのメモでも良いのですが、
- 第三者にもサッと見てもらえる形式が欲しい
- 緊急時にログイン無しで見られるようにしたい
- スマホで撮った写真と一緒に管理したい
という要件を満たすために、Web アプリとして自作することにしました。
技術スタックは Next.js 15 + Supabase + Vercel というシンプルな構成です。フロントエンドは React 19、認証・DB・ストレージは全部 Supabase に寄せています。
Stripe に弾かれた話
サービスは基本無料ですが、運営費(Vercel・Supabase・ドメイン・メールサーバー)を賄うために、応援機能(投げ銭)を入れることにしました。
最初に選んだ決済プラットフォームは、個人開発の定番である Stripe です。
Stripe アカウント審査で不承認
ところが、Stripe のアカウント審査で不承認となりました。
理由として説明されたのは、ざっくり言うと
「カードネットワークパートナーのポリシーにより、当該事業はサポートできない」
というものでした。Stripe 独自の判断ではなく、その上流にあるカードブランド側のリスク評価で弾かれた、というニュアンスです。
これは Stripe に限った話ではなく、同じカードネットワークを使う他の決済代行(Square、PAY.JP など)でも、同じ理由で弾かれる可能性が高いということを意味します。
「個人事業 × 比較的新しいサービス × 寄付モデル」という組み合わせは、カードブランド側から見るとリスクカテゴリに入りやすいようで、これは個人で交渉してもひっくり返せる類の話ではない、と判断しました。
結論:Buy Me a Coffee に切り替え
色々調べた結果、Buy Me a Coffee(BMC) を採用することにしました。
BMC を選んだ理由はシンプルで、
- 私(運営者)と決済の間に BMC が入るので、自分でカード会社と直接契約する必要がない
- 一回の投げ銭・月額メンバーシップ両方に対応している
- クリエイター向けに最適化されていて、UI が親しみやすい
- 海外ユーザーにも対応しやすい
という点が、「個人で運営する応援ベースのサービス」と相性が良かったからです。
愛犬取説では、Buy Me a Coffee の Webhook を受けて、応援してくれた方にサービス内で「応援会員」バッジが表示される仕組みを実装しました。
応援ページ: https://buymeacoffee.com/thinkonyx
学んだこと: 個人で課金システムを組む時は、「Stripe で行ける前提」で設計せず、カードブランド審査が落ちる前提のプラン B を最初から想定しておいた方が良い、というのが今回の教訓です。
技術的にハマったところ
参考までに、開発中にハマったポイントをいくつか共有します。
1. Next.js 15 の params が Promise 化された
Next.js 15 から、動的ルートの params が Promise になりました。
// Before (Next.js 14)
export default function Page({ params }: { params: { slug: string } }) {
const { slug } = params
}
// After (Next.js 15)
export default async function Page({ params }: { params: Promise<{ slug: string }> }) {
const { slug } = await params
}
最初これに気づかず、共有ページが動かなくて 30 分くらい溶けました。
2. OG 画像の <div> 制約
リンクをチャットや SNS に貼った時にプレビュー画像が出るように、next/og の ImageResponse で OG 画像を動的生成しました。
ハマったのは、<div> に複数の子要素を入れる場合は display: 'flex' を明示しないと 500 エラーになるということ。エラーメッセージは出るのですが、最初は「なぜ flex を強制されるのか」がピンと来ず、しばらく悩みました。
3. Supabase RLS と公開ページの両立
愛犬取説は「ログインユーザー本人だけが編集できる」「でも QR コード経由なら誰でも閲覧できる」という二重のアクセス制御が必要でした。
これは Supabase の Row Level Security(RLS)で、
authenticatedロール: 自分のuser_idの行のみ操作可anonロール: 公開フラグが立っている行のみ SELECT 可
のように分けて書くことで実現しました。最初は anon 用のポリシーを書き忘れていて、共有ページから見ると「取説が見つかりません」になる、というバグを踏みました。
これから
愛犬取説は、まだリリースしたばかりの小さなサービスですが、
- 動物病院・ペットホテル様向けの紹介
- ワクチン期限リマインダー機能
- 複数の家族で 1 頭の取説を共有できる機能
など、追加していきたい機能はたくさんあります。
ペットを家族として迎えている方、特に「自分にもしものことがあった時、この子は大丈夫だろうか」と一度でも考えたことがある方に、ぜひ使ってみてもらえると嬉しいです。
リンク
- 愛犬取説: https://dog-manual.thinkonyx.jp
- 応援する: https://buymeacoffee.com/thinkonyx
- お問い合わせ: info@thinkonyx.jp

No responses yet