1. はじめに
久しぶりに何か個人開発をしようと思ったところ、友人が新しくブログを始めたいとのことで、ブログサービスを作りました。友人の希望に合わせて「Lightning Network(LN)」によるマイクロペイメントを組み込みました。
「できたから使ってみて欲しい」と連絡をしたところ、音沙汰がなくなったので、代わりにここで紹介させてください。
2. システムアーキテクチャ
Frontend: Firebase hosting, viteを使ったシンプルな構成としています。
Backend: Firebase functions(Cloud Run)を使っています。
そこまでアクセスが増える気もしていないですが、いざとなれば記事閲覧や投稿、決済といった機能ごとに分離してスケールできるような作りとしました。
個人開発として、ランニングコストを如何に抑えるかは大切なので、アクセスがない限りはほぼ課金されないようなインフラ構成としています。
3. 主な機能
ログイン
記事閲覧は誰でもできますが、記事投稿にはログイン機能が必要でした。
firebase authによるGoogle loginと、Webauthnによる公開鍵認証を実装しました。
サービス側でパスワード管理していないため、リスト攻撃などの一般的な認証リスクを構造的に排除しています。指紋認証や顔認証でスムーズにログインできる体験はユーザーとしても快適に感じるため、採用して良かったと思っています。
参考にしたのは以下の記事になっています。
https://developers.google.com/identity/passkeys/developer-guides/server-registration
ライトニングネットワーク
決済プロバイダーを使って、自前での管理はほぼしていません。WebhookをトリガーにFirestoreを更新するイベント駆動型としています。
友人の希望もありライトニングネットワークによる Bitcoin決済専用となっています。これによってサービスの門戸をかなり狭くしてしまっていますが、まずは友人1人にでも使ってもらうことが大事だと思い採用しました。まだ使ってもらえていません ;;
収益化方法
よくあるブログ記事の有料公開機能に加えて、「合言葉公開」と「積立公開」の2つを追加しました。合言葉による公開は文字の通りです。積立公開については、クラウドファンディングをイメージし、ユーザー全員が積立を行なって、一定額に達したら記事が全員に公開されるような仕組みとしています。
当初は考えていなかったのですが、ライトニングネットワークを導入したのであれば、支払い体験をできるだけ楽しんでもらいたいと思い追加機能として採用しました。
記事投稿
記事投稿は至ってシンプルな作りとしました。悩んだのですが、写真は掲載できず文字だけとなっています。ブログサービスは当たり前のように写真や動画の掲載ができますが、そういったメディアは保管の問題(ストレージのお金がかかる)や個人としてそこまで必要性を感じなかったため対応しなくても良いという判断としました。
モバイルUI
ブログ投稿となるとPCで執筆するイメージですが、モバイルからでもストレスなく投稿や閲覧はできた方がいいだろうと思い、モバイル用に投稿画面やメニューをレスポンシブルにしています。
4. 振り返ってみて
友人のために作り始めたサービスでしたが、結果として
- Firebase基盤を使ったWebサービス
- WebAuthnによるモダンな認証
という新しい技術スタックを勉強するいい機会となりました。
細かい部分を見れば、まだまだこれからではありますが、主要な機能を作ったこのタイミングで一度まとめておきたいと思い、記事を書かせていただきました。
もしサービスにアクセスしていただける稀有な方がいましたら、ぜひコメントなど頂けると嬉しいです。
