フォーラムの作り方:カテゴリ、スレッド、検索、スパム対策
フォーラムとは、カテゴリの中にスレッドがあり、スレッドの中に返信があり、それにアカウント、検索、モデレーションが加わったものです。チャットグループとは違い、話題ごとに会話が整理され、何年たっても役立ち続けます。3年前のスレッドも検索で見つかり、その人の答えが得られることがあります。作るには、スレッドのページと検索を正しく作り、公開フォーラムなら検索エンジンが読めるようにし、最初の本物の会員が登録する前にスパム対策とモデレーションの仕組みを整えておく必要があります。
フォーラムに必要なもの
ページ
- カテゴリ一覧 — ほとんどのフォーラムの最初の画面で、各カテゴリの説明と最新の投稿を表示します。
- スレッド一覧 — カテゴリ内のスレッドを最新の返信順に並べ、返信数と、解決済みや固定の印を表示します。
- スレッドページ — 最初の投稿とすべての返信を順番に表示し、引用、リアクション、返信欄を備えます。
- 新規スレッドのフォーム — タイトル、カテゴリ、本文、任意のタグ。
- 検索 — タイトルと投稿本文を対象にし、カテゴリで絞り込めます。
- ユーザープロフィール — 名前、アバター、参加日、投稿数、最近の投稿。
- モデレーションのキュー — 通報された投稿と承認待ちの投稿。
データ
| テーブル | 主なフィールド |
|---|---|
| ユーザー | 名前、アバター、役割、信頼レベル、参加日、状態 |
| カテゴリ | 名前、スラッグ、説明、表示順、投稿できる人 |
| スレッド | タイトル、スラッグ、カテゴリ、投稿者、固定、ロック、解決済み、最後の返信日時 |
| 投稿 | スレッド、投稿者、本文、作成日時、編集日時、非表示かどうか |
| リアクション | 投稿、ユーザー、種類 |
| 通報 | 投稿、通報者、理由、状態、モデレーターの判断 |
| 購読 | ユーザー、スレッド(新しい返信の通知用) |
「最後の返信日時」と「返信数」をスレッド自体に保存しておくと、ページを読み込むたびに投稿を数え直さずに済み、スレッド一覧が速く表示されます。
権限
- ゲスト は公開カテゴリを閲覧できます。
- 会員 は投稿と返信ができ、自分の投稿を一定時間編集できます。
- モデレーター はスレッドを非表示、移動、ロック、固定、統合でき、ユーザーを停止できます。
- 管理者 はカテゴリと役割を管理します。
非公開カテゴリは、リクエストごとにサーバー側でチェックする必要があります。スレッドのページ、検索結果、RSS、通知のすべてで同じチェックが必要です。そうしないと、非公開の投稿が別の経路から漏れてしまいます。役割ベースのアクセス制御の追加方法をご覧ください。
決めること・トレードオフ
フラットか、ツリーか。 フラットなスレッド(時間順の返信と引用)は読みやすく、ほとんどのフォーラムの標準です。ネスト型の返信(Reddit 型のツリー)は議論には向きますが、スマートフォンでは追いにくくなります。理由がなければフラットを選びましょう。
Q&A モード。 サポートや質問用のフォーラムでは、質問者が一つの返信をベストアンサーとして選べるようにし、質問のすぐ下に表示します。この一つの機能で、古いスレッドもずっと役立つようになります。
SEO のための公開か、非公開か。 公開のスレッドページは、安定した検索流入を生み出せます。ただし検索エンジンが読めなければなりません。つまり、各スレッドに分かりやすい固有の URL、適切な <title>、そして後から JavaScript で読み込むのではなく、HTML に入った投稿が必要です。検索流入が重要なら、サーバーサイドまたは事前レンダリングされたスレッドページを依頼しましょう。詳しくは AI で作ったサイトの SEO をご覧ください。
リッチテキストか、Markdown か。 プレビュー付きの Markdown は安全に保存しやすい形式です。ビジュアルエディタは、技術に詳しくない会員にとって使いやすい形式です。どちらを選んでも、表示する前に HTML をクリーンにし、誰も投稿にスクリプトを埋め込めないようにしてください。
検索。 最初の数年なら、Postgres の全文検索で十分です。専用の検索サービスが割に合うのは、大規模になってからです。アプリに検索を追加する方法をご覧ください。
公開前のスパム対策とモデレーション
フォーラムは、ほかのどの種類のサイトよりも速く自動スパムを集めます。各投稿が、リンクを含められる公開ページになるからです。最初から計画しておきましょう。
- 信頼レベル。 新規アカウントはリンクや画像を投稿できず、最初の2〜3件の投稿は承認を待ちます。その後は自由に投稿できます。
- レート制限。 新規アカウントの投稿数を、1分あたりと1日あたりで制限します。
- メール認証 を投稿の前に行います。
- 通報ボタン をすべての投稿に付け、モデレーションのキューに送ります。
- ユーザーのリンクに nofollow を付け、スパム業者が検索エンジンから得るものがないようにします。
- モデレーションのログ。 誰が何をいつ、なぜ行ったかを、モデレーターが確認できるようにします。
- 明確なルール をすべてのカテゴリに固定表示します。
最初のプロンプトの例
自宅のエスプレッソを楽しむ人のための、公開型の Q&A フォーラムを作ってください。カテゴリは Machines、Grinders、Technique、Beans、Buy and Sell です。誰でも閲覧でき、会員はメールとパスワードで登録し、投稿の前にメールを確認します。/t/[slug] のスレッドページはサーバーサイドでレンダリングし、検索エンジンが読めるように固有のタイトルとメタディスクリプションを付けてください。返信はフラットで時間順にし、引用とサムアップのリアクションを付けます。スレッドを立てた人は、一つの返信をベストアンサーとして選べ、質問の下に表示されます。新規会員の最初の3件の投稿は、モデレーターの承認を待ち、承認されるまではリンクを投稿できないようにしてください。モデレーターはスレッドを非表示、ロック、固定、移動でき、通報された投稿のキューを確認できます。すべての操作はログに残します。タイトルと投稿を対象にした検索(カテゴリで絞り込み可能)と、フォローしているスレッドへの新しい返信のアプリ内通知を追加してください。すべてデータベースに保存します。
構築のステップ
- まずスレッドページ。 カテゴリを数個と、現実的な50件のスレッドを用意します。スマートフォンで、読む、引用する、返信するが正しく動くようにしましょう。
- カテゴリとスレッドの一覧。 最新の活動順の並べ替え、上部に固定されたスレッド、解決済みの印。
- アカウントと認証。 アプリにログインを追加する方法をご覧ください。
- モデレーションと信頼レベル。 承認キュー、通報、非表示、ロック、移動、ログ。新規アカウントでリンクの投稿を試して、テストしてください。
- 検索。 会員が実際に入力しそうな検索語で試します。
- SEO。 公開して、スレッドを開き、ページのソースを表示して、投稿が HTML に含まれているか確認します。スレッドのサイトマップを追加します。
- 実際の内容を投入する。 役に立つ最初の20件のスレッドは自分で書くか、数人の専門家に依頼します。空のフォーラムには、最初の投稿をしてくれる人がいません。
よくある失敗
- 空の状態で公開する。 誰も最初に投稿したがりません。実際の質問と回答を用意しましょう。
- カテゴリが多すぎる。 忙しい5つのカテゴリは、閑散とした20のカテゴリに勝ります。後で分割しましょう。
- 新規アカウントの承認がない。 スパムボットは新しいフォーラムをすぐに見つけます。
- 投稿の HTML をサニタイズしていない。 投稿内のスクリプトは、ほかのユーザーのセッションを乗っ取ることがあります。必ずユーザーの内容を整えてから表示してください。
- 非公開カテゴリの漏れ。 スレッドのページだけでなく、検索結果と通知も確認しましょう。
- ページを開くたびに返信数を数える。 件数はスレッドに保存し、投稿が変わったときに更新します。
- アカウントを削除する方法がない。 退会した会員の投稿をどうするかを決めておきましょう。
フォーラムソフトのほうが良い場合
Discourse などのオープンソースやホスト型のフォーラムソフトは、信頼レベル、スパム対策、メール連携、モデレーション、スマートフォンでのレイアウトを何年もかけて磨いてきました。一般的なフォーラムが欲しく、他のアプリの一部にする必要がなければ、一から作るよりも、こうしたソフトを導入するかサブスクリプションを使うほうが、たいてい速く安全です。チャットツールは素早いやり取りには向いていますが、答えを後から見つけやすく残すのは苦手です。
自分で作るのが向いているのは、フォーラムが自分の製品の一部である場合(SaaS の中のサポートフォーラム、マーケットプレイスの Q&A など)、スレッドに独自のデータを紐づける必要がある場合(機械の型番、注文、講座のレッスンなど)、またはフォーラムのデザインと URL を完全に自分のものにしたい場合です。プロフィールやイベントを備えた、より広い会員向けのスペースについては、コミュニティプラットフォームの作り方をご覧ください。
Mythex での構築
Mythex では、フォーラムをチャットで説明し、ライブプレビューで試してから、公開アドレスに公開します。Pro プランならカスタムドメインも使えます。アプリに必要になると、Mythex がユーザー、スレッド、投稿用の専用の Postgres データベース を追加し、アバターや画像用のファイルストレージも用意します。標準の構成はブラウザでレンダリングされる Vite と React のアプリです。そのため、公開フォーラムではサーバーサイドでレンダリングされるスレッドページを依頼してください(Next.js も選択肢です)。そして SEO のレシピ に従います。会員のログインとメールは、自分で用意するものです。アプローチとプロバイダーを選び、キーをプロジェクトのシークレットとして保存すると、エージェントが組み込みます。サインアップを開く前に、/test を使って、エージェントに投稿とモデレーションをクリックして確認させてください。また、AI で作ったアプリのセキュリティチェックリスト も読んでおきましょう。
よくある質問
フォーラムサイトに必要なものは何ですか?
カテゴリ、返信付きのスレッド、ユーザーアカウント、検索、モデレーション機能です。多くのフォーラムでは、返信の通知、質問スレッドでベストアンサーを選ぶ方法、新規アカウント向けのスパム対策も必要になります。
フォーラムは公開にすべきですか、非公開にすべきですか?
公開フォーラムは、各スレッドが Google で見つかるページになるため、検索からの流入を生み出せます。非公開フォーラムは、機密性の高い話題や有料会員向けに適しています。多くのフォーラムは、閲覧は公開のままにし、投稿するときだけアカウントを必要とする形にしています。
フォーラムのスパムを防ぐには?
新規アカウントにできることを制限します。最初の投稿は承認まで保留し、しばらく活動するまでリンクを禁止し、投稿頻度を制限し、会員が使える通報ボタンを設けます。登録時にはメールアドレスを確認し、モデレーターの操作はログに残しましょう。
Discourse のようなフォーラムソフトを使うほうがよいですか?
フル機能のフォーラムを素早く立ち上げたいなら、実績のあるフォーラムソフトのほうが安全な選択です。何年もかけて磨かれたモデレーションとスパム対策の機能があります。フォーラムが大きなアプリの一部である場合や、一般的なフォーラムソフトにはないデータやワークフローが必要な場合に自作を検討しましょう。