📔

誰でもNotionでブログが始められる個人開発サービス「N2B」の紹介

2023/08/20に公開

こんにちは。ブログが大好きなソフトウェアエンジニア、おとよ🦙と申します。
この記事ではタイトルの通り、私が先日リリースした個人開発サービス「N2B」について、何を実現するサービスなのか、どのようなシステムで構成されているのかについてご紹介したいと思います。

誰でもNotionでブログを

N2Bは誰でもNotionでブログが始められるサービスです。
これまでNotion Blogと言えば、始めるにあたって多少なりともGitやプログラミングの知識、またクラウドサービスのアカウント作成などが必要でした。

私が開発しているOSS「astro-notion-blog」もそんなNotion Blogのひとつです。
astro-notion-blogはプログラミング未経験者でも始められるよう、READMEに沿って進めばNotion Blogをリリースできるように作ってあります。
しかし、GitHubで公開している以上、ユーザーはGitHubアカウントを作成する必要がありますし、ホスティングのためにクラウドサービスのアカウントを作る必要があります。

プログラミングに多少なりとも興味のある人であればそれで何も問題ありません。
ですが、私としては、プログラミングへの興味に関係なく、もっと多くの人にブログを書く楽しさやブログを続ける楽しさを味わってほしいと思うようになりました。

ブログを続けるのに必要な要素は何か?

そもそもブログを書こう人という人自体が一般にそれほど多くありませんが、続けられる人はもっと少ないです。

ブログを続けるために必要な要素は何か?
これは多くのブログサービス提供者が考えていることでしょう。

モチベーションの問題、書くネタの問題、時間確保の問題など、いろいろ理由があると思いますが、私は書きやすさの問題にフォーカスすることにしました。
「書きやすさ」をさらに分解していくと、文章を書く際のフォーマット、エディタの操作性、PCやスマートフォンといったマルチデバイス対応の度合い、デバイス間の同期といった要素に分けることができます。

Notionは、完璧ではないものの、これらの要求をかなり満たしてくれます。
Notionであれば、マークダウンっぽい書き方もできますし、マークダウンを使わない書き方もできます。
Notionであれば、PCでもスマートフォンでも、デスクでも電車の中でもブログを書くことができます。

N2Bは、Notionブログサービスであると同時に、普段の執筆はNotionだけで完結するように作ってあります。
執筆時にN2Bにログインする必要はありません。

コンテンツは誰のものか?

もうひとつ、インターネットの世界にコンテンツを発信するにあたって大切なことがあります。
TwitterがXになったとき、多発したAPI関連のトラブルは記憶に新しい方もいらっしゃると思います。
中には、全く別のサービスへの引っ越しを検討された方もいらっしゃるのではないでしょうか。

Webサービスが終了したとき、他のサービスへの引っ越しを考えたとき、これまで作ってきたコンテンツがどうなるのかについて、そろそろ考えなければならない局面に来ているのではないか、そのように感じています。

コンテンツは、あくまでそれを生み出したユーザーのもので、いつでも自分で自由にできるべきです。
N2Bは、仮にN2Bが終了することになっても、ユーザーがこれまで作り出したコンテンツは消えません。データそのものはNotionにあるからです。
Notionにコンテンツがあれば、いつでも先に挙げたOSSにフォールバックすることができます。
Notionがダメになったとしても、データをエクスポートすることができます。そして、別のサービスに乗り換えてブログを続けることができるでしょう。

そういった意味で、N2Bでは皆さまに安心してブログを書いていただけると考えています。

システムの構成について

さて、サービスの紹介や思想的な話が長くなってしまいましたが、せっかくZennに投稿するので技術的な部分についても触れておきたいと思います。
N2Bのシステム構成についてご紹介します。
N2BではGoogle CloudとCloudflareの2つのクラウドサービスを使ったハイブリッド構成になっています。
図示すると下記のようになります。

N2Bのシステム構成

N2Bにはブログ執筆者であるユーザー向けの管理画面があり、これはCloud Runでホストされています。
ユーザーは管理画面でNotionと連携し、N2BはユーザーのNotionへアクセスするためのAPIトークンを得ます。
アプリケーション連携の他に、レイアウトやテーマ、メニュー文言の変更といったブログの執筆に直接的に関係のない設定を管理画面で行うことができます。

一方、ブログはCloudflareでホストされています。ブログの各種HTMLファイルは全てCloud Buildを使って静的にビルドされ、Cloudflare R2にアップロードされます。
これらのファイルはCloudflare Workersを通して配信されるため、読者にとって高速でストレスのない体験が期待できます。

Notion APIを通したデータの取得についても見てみましょう。
N2Bではブログを静的にビルドするため、ブログ記事を新しく公開したり更新するために毎回ビルドが必要になります。
この際、Cloud BuildがNotion APIと通信し、データを一度Cloud Datastoreに保存します。
おもしろいのは、更新があったブログ記事(Notionページ)のみデータを取得し直す差分更新を採用している点です。
これによりNotion APIのRate Limitを回避しています。

ブログのビルドなど時間のかかる処理は全てCloud Pub/Subを介して非同期で行なっています。
Cloud Pub/Subにメッセージをパブリッシュするときにパラメータを渡す方法は以前私のブログで書いたので、気になる方は読んでみてください。

最後に、プログラミング言語とWebアプリケーションフレームワークにも触れておきましょう。
言語はフロントもバックエンドも全てJavaScript/TypeScriptで書いています。バックエンドのランタイムはCloud Run、Cloud Build共にNodeです。
WebアプリケーションフレームワークにはAstroを用いています。なんと、ブログだけでなく管理画面もAstroです。
管理画面はSSRを有効にしたAstroで、初めてAstroで管理画面のような動的なアプリケーションを作りましたが、なかなか書きやすかったです。
デメリットとしては、テストライブラリがまだ充実していないことでしょうか。

さいごに

駆け足になりましたが、N2Bとはどんなサービスか、そのシステム構成について説明しました。
この記事を読んで少しでもN2Bでブログを書くことに興味が湧いた方は、ぜひ下記の公式サイトをご覧ください。初めての方には60日間の無料トライアルがあります。

正式サービス開始時のブログ記事もあります。実際にN2Bで作られたブログを見てみたい方や、ちょっと長すぎる60日のトライアルについて理由を知りたい方は下記の記事をご覧ください。

その他、私自身に興味を持ってくださった方は、毎週更新している技術ブログやX(旧Twitter)アカウントがありますので覗いてみてくださいませ。

https://twitter.com/otoyo0122/status/1692749337309417643

以上です。最後までお読みくださりありがとうございました。

Discussion