InstagramやThreadsでフォロワーが増えると、「プラットフォームに依存しすぎている」という不安が生まれます。アルゴリズムの変更で一夜にしてリーチが半減したり、アカウントが突然制限されるリスクは、どんなクリエイターにとっても現実的な脅威です。
私がアプリ開発をしながらアート活動も続けてきた経験から感じるのは、「自分のプラットフォームを持つこと」の価値の大きさです。ファンクラブアプリは、その最もシンプルな形です。Rorkを使えば、個人クリエイターでも数日で自分だけのファンクラブアプリを作れます。
ファンクラブアプリで何が変わるか
SNSと自前アプリの最大の違いは「プッシュ通知へのアクセス」です。SNSの投稿は、フォロワーの何割かにしか届きません。しかし自前アプリのプッシュ通知は、許可したユーザー全員に届きます。
もう一つの違いは収益の直接性です。SNS広告やスポンサーシップは間に代理店や企業が入ります。自前アプリのサブスクリプションは、Appleの手数料(初年度30%、2年目以降15%)を除いた金額が直接振り込まれます。月額500円のサブスクに100人いれば、月に3万5000円〜4万2500円が手元に残ります。
アプリの設計:3ティア構造が基本
ファンクラブアプリは「どこまで無料で、何が有料か」の設計が核心です。私がいくつかのアプリを見てきた経験から、3ティア構造が最も機能すると感じています。
フリーティア(無料)
全ての投稿の概要(サムネイル+冒頭テキスト)を閲覧できます。これが「ショーウインドウ」の役割を果たします。
シルバーティア(月額380〜580円)
全投稿の全文閲覧、限定コンテンツ(メイキング動画・スケッチ・舞台裏)、プッシュ通知での新着お知らせ。
ゴールドティア(月額980〜1,480円)
シルバーの全機能に加え、月1回のライブQ&A参加権、DM送信可能、名前をクレジットに記載、限定グッズ割引。
Rorkへのプロンプトでは「3ティア制のファンクラブアプリを作って。Supabaseでコンテンツと会員情報を管理し、RevenueCatでサブスク課金を実装して。フリーユーザーには投稿の冒頭部分のみを表示し、有料会員には全文を表示するアクセス制御を実装してほしい」と伝えると、基本構造が一気に生成されます。
Supabaseのテーブル設計
Rorkに設計させたテーブル構造の例です。
-- 投稿コンテンツ
create table posts (
id uuid primary key default gen_random_uuid(),
title text not null,
preview_text text, -- 無料ユーザーに表示する概要
full_content text, -- 有料ユーザーのみ閲覧可
media_urls text[], -- 画像・動画URL配列
required_tier int default 1, -- 1=フリー, 2=シルバー, 3=ゴールド
created_at timestamptz default now()
);
-- ユーザーの購読状態(RevenueCatのWebhookで更新)
create table user_subscriptions (
user_id uuid references auth.users primary key,
tier int default 1,
valid_until timestamptz,
revenuecat_customer_id text
);Row Level Security(RLS)でアクセス制御を実装します。「postsテーブルにRLSポリシーを追加して。free_contentはフルアクセス可、premium_contentはuser_subscriptionsでtier >= 2のユーザーのみ閲覧可能にして」とRorkに指示します。
-- シルバー以上のコンテンツのRLSポリシー
create policy "premium_content_access" on posts
for select using (
required_tier = 1
or (
required_tier >= 2
and exists (
select 1 from user_subscriptions
where user_id = auth.uid()
and tier >= posts.required_tier
and valid_until > now()
)
)
);RevenueCatでのサブスク実装
RevenueCatはファンクラブアプリに非常に相性が良いツールです。Webhookで購読状態の変更をSupabaseに反映させることで、データベースを常に最新の状態に保てます。
Rorkへの指示:「RevenueCatのWebhookを受け取るAPIエンドポイントを実装して。initial_purchase、renewal、cancellationのイベントを処理して、user_subscriptionsテーブルのtierとvalid_untilを更新してほしい」
// app/api/revenuecat-webhook/route.ts
export async function POST(request: Request) {
const payload = await request.json();
const { event } = payload;
const userId = event.app_user_id;
const productId = event.product_id; // "silver_monthly" or "gold_monthly"
const tier = productId.includes('gold') ? 3 : 2;
const validUntil = new Date(event.expiration_at_ms);
if (event.type === 'INITIAL_PURCHASE' || event.type === 'RENEWAL') {
await supabase
.from('user_subscriptions')
.upsert({ user_id: userId, tier, valid_until: validUntil });
}
if (event.type === 'CANCELLATION') {
// 期間満了まではアクセスを維持
await supabase
.from('user_subscriptions')
.update({ tier: 1, valid_until: validUntil })
.eq('user_id', userId);
}
return Response.json({ ok: true });
}コンテンツ投稿機能の実装
クリエイター自身がアプリからコンテンツを投稿できる管理画面も必要です。「クリエイター専用の投稿画面を実装して。テキスト・複数画像のアップロード、対象ティアの選択、プレビューテキストの入力ができるようにして。Supabase Storageに画像を保存して」とRorkに指示します。
ただし、管理機能はできればWebアプリで実装することをお勧めします。理由は2つあります。AppStoreの審査では、クリエイターが有料コンテンツを管理・追加する管理者機能はWebに置くよう求められることがあるからです。また、PCのブラウザからの方が長文コンテンツの入力やファイル管理が快適です。
AppStore審査のポイント
ファンクラブアプリはいくつかの審査上の注意点があります。
コンテンツの適切性: 年齢制限を正しく設定してください。成人向けコンテンツが含まれる場合は17+の設定が必要で、裸体や性的表現があれば一部の国でリリース不可になります。
サブスクのガイドライン: AppleのGuideline 3.1.3に従い、サブスク内容が「継続的に更新されるコンテンツ」であることを示す必要があります。定期的な新規投稿の実績を審査ノートに記載すると通過率が上がります。
外部決済への誘導禁止: アプリ内でWebのPatreonページや外部決済に誘導するリンクを貼ることは、審査で否決される原因になります。App内課金のみで完結させてください。
実際の収益感
月額500円のサブスクが100人いる場合、Appleの手数料15%(2年目以降)を引くと月4万2500円になります。200人になれば月8万5000円です。SNSの広告収益と違い、フォロワー数に関係なく登録者数に比例して安定した収益になります。
重要なのは「最初の30人」です。既存のSNSフォロワーに告知し、初月無料トライアルを設定して体験させることで、定着率が大きく変わります。RevenueCatのintroductory_offersを使えば、Rorkから「初月無料のイントロオファーを設定して、ペイウォール画面に強調表示して」と指示するだけで実装できます。
アート活動とアプリ開発を組み合わせることで、どちらか一方だけではたどり着けない場所に行けると思っています。自分のファンクラブアプリは、その最も具体的な形のひとつです。