匿名掲示板「AnchorBoard」を作りました

2023/03/16に公開約2,800字

どういうアプリ?

https://anchorboard.net

タイトル通り、匿名掲示板です。PWA対応したので、どのデバイス・OSからでもインストールできます。


5chやRedditを参考に、よりシンプルなUI/UXを目指して開発しました。

なぜ今更、匿名掲示板なんだ?という意見もあかもしれません。筆者はよく5chや2chのまとめサイトを見てケラケラ笑っているのですが、あの場所でしか生まれない、匿名ならではのユーモアや興味深い情報があります。そのような場所を、若者を含むもっと幅広い世代に提供したいと思い、シンプルで見やすいアプリを作ろうと思い立ちました。

AnchorBoardでは、スレッド作成の際に1つから3つまでタグを付与することができます。これは5chでいう板、RedditでいうSubRedditの役割を担っています。スレッドのコメントは5ch風のフラット構造もしくはReddit風のツリー構造で表示できます。

5chでは1日ごとに全スレッド共通で使われるIDが各ユーザーに割り振られますが、AnchorBoardではコメントを投稿した際、コメ主にはそのスレッド専用のAuthorIDが付与されます。このIDはアカウントとひもづけられるので、日付が変更した後でも、スレッドが同じなら同じIDで書き込むことができるようになります。一方、違うスレッドに書き込めば、たとえ同じ日でも別のAuthorIDが割り振られます。

AnchorBoardではアカウント作成の際、電話番号によるSMS認証を必須とすることで、複垢やBotによる荒らしを軽減させています。5chでは度々スクリプト荒らしやコピペ連投が問題になるらしいのですが、複数保持のハードルが高い電話番号を認証に使うことで、この荒らし問題を極限まで減らせると考えています。

使った技術

Go言語, Gin, pgx

半年前に書いたコードでも迷わずに読み進められるのはGoの強みですね。あまりプログラミング言語開発のことは知りませんが、徹底的な引き算思考の言語設計には芸術的な美しさを感じます。

SvelteKit

SSRとかSPAとかよく分からなかった私にもいい感じのWebアプリを作らせてくれた素晴らしいフレームワークです。Svelteはフレームワークにあらかじめwritableという状態管理の機能が入っているのですが、これの使いやすさ・シンプルさは控えめに言って神だと思います。

CockroachDB

背筋が凍る名前を冠していますが、スケーリングのしやすさでは右に出るもののない、PostgreSQL互換のNewSQLです。ノードを追加するだけで勝手に冗長性確保や容量の増加を行ってくれるとても賢いデータベースです。

Caddy

Go言語で書かれたWebサーバーです。HTTPS自動化を行ってくれるので、とても楽ちんです。

Docker Swarm

すっかりKubernetes一強になったクラウド界隈ですが、Swarmも忘れないであげてください。低スペサーバーでもバリバリ働き、ネットワークのmTLS化&証明書の自動更新を行い、Overlay Networkで簡単にサービス同士を繋げられる使いやすさは、Kubernetesにはない魅力だと思います。

Vultr

VPC内に$5のインスタンスを複数立てて、Docker Swarmでクラスターを構成しています。近いうちに別の記事で改めて書こうと思いますが、毎月インスタンスのサイズに応じて与えられる無料枠の大きさや超過転送量の安さは、AWSやGCPにはない大きな魅力です。

招待コードについて

AnchorBoardでは、アカウント作成の際に、電話番号のほかに招待コードを要求しています。招待コードは今のところ「AnchorBoard」と入力すれば、1日100人程度までアカウント作成できるようにしています。それ以上の場合は、すでにアカウントを持っている人に招待コードを発行してもらう形にしています。

なぜこのような形をとったのか。ClubHouseのやり方をパクって話題性を作りたかった、というのも無くはないですが、より大きな理由はSMS pumping fraudを封殺するためです。

https://gigazine.net/news/20230221-twitter-lost-60-million-dollars-2fa-sms/

Twitterが最近SMSによる2段回認証を廃止しましたが、その理由はこれの被害を阻止するためだったと言われています。Twitterはこの詐欺により年間で80億円近くの損害を受けていたそうです。SMS送信の料金は国によって変わりますが、日本だと一通あたり10円くらいかかります。クライアントが何回でもSMS送信できるようにしてしまうと、悪意あるユーザーやハッカーの標的になった時点で個人開発者は破産が確定します。当初はIPアドレス単位でのブロックも考えましたが、DDoS攻撃の前にはあまり意味がないのでこの方法も除外しました。

そして最終的に落ち着いた解決策が招待コード方式です。一つの招待コードで送ることのできるSMSの数を限定し、さらに招待コードの発行を1アカウント5つまでとすることで、このSMSを使ったBotスキームを封じることができます。

今後の予定

プライバシーポリシーやAdSenseの申し込み、GDPRやCCPA対策など、あの辺の面倒なやつ必要事項を順次片付けていこうと思います。Webサイトを作ったのはこれが初めてですが、AdSenseを貼ってるサイトは皆こういう地道な作業をクリアしていったんだなあと思うと、なかなか見え方が変わってくるものです。

ここまで読んでくださりありがとうございます。好きな食べ物でも愚痴でもなんでもいいので、AnchorBoardにスレ立て、もしくは書き込んでくれると筆者がとても喜びます(誹謗中傷や罵詈雑言を書かれると傷付きます)。

https://anchorboard.net

バグや改善要望などあれば、このスレッドに書き込むか私のTwitterまで連絡いただけると助かります。

Discussion

ログインするとコメントできます