ブログと○○を融合したプラットフォームを個人開発しました
概略
先日、初めての個人開発プロダクトをβ版リリースまで持っていくことができました!
本記事では、そのご報告と、主要なコンセプトやこだわりポイントをご紹介します。
作ったもの・開発動機
Webアプリ「ログツー」を作りました。
当初のコンセプトは「学習特化ブログ」です。既存のブログプラットフォームは多数ありますが、中高生の学習に特化したものは少ないことに着目しました。
学習に特化したブログプラットフォームがあれば、以下の効果が期待できると考えました。
- 環境による情報格差の解消
- 勉強過程や成果の共有によるモチベーション向上
- 教材作成者と学習者のマッチング
- 検索エンジンからの流入による教材の普及
- SNSや動画サイトとは異なり、学習者が気を散らさずに学習コンテンツを探しやすい
これらの需要が見込めると判断し、開発に着手しました。
技術スタック
開発のベースとして、Next.js チームが提供する SaaS Starter テンプレートを利用しました。主要な技術スタックとデプロイ環境は以下の通りです。
主な利用技術:
- Framework: Next.js (Reactフレームワーク)
- Database: PostgreSQL
- ORM: Drizzle ORM (TypeScript ORM)
- UI Library: shadcn/ui
- (Payments): Stripe (※課金機能は未提供)
デプロイ環境:
- Vercel: Next.js アプリケーションのホスティング
- AWS
- RDS (PostgreSQL): データベース
- S3: メディアファイル (画像、PDFなど) のストレージ
- CloudFront: メディアファイルの高速配信 (CDN)
AWS無料枠により運用するつもりが、少額の課金が発生した件は別の記事にしてあります。
ブログ記事の機能
Zennには技術者の方が多いので、データモデリングや検索機能の工夫点に焦点を当てて説明します。
階層タグ
ユーザーの学習分野や目的は多岐にわたるため、目的の記事にたどり着きやすい記事検索機能が重要になります。
「中学生 → 数学 → 図形 → 三平方の定理」のように、カリキュラムに沿ってタグを選択できる仕組みがあれば、目的の記事に容易にたどり着けると考えました。
そこで、タグ機能を以下のように実装しました。
- 記事には任意の文字列をタグとして設定可能
- /home ページの検索機能で、タグを階層構造で表示
- 広いカテゴリから絞り込みながらタグを選択して検索
- 階層構造は表示用であり、実際のタグには階層情報は含まれない
例えば、「中学生」直下の「数学」タグと「高校生・大学受験生」直下の「数学」タグは同じものです。記事が中学数学か高校数学かは、「中学生」または「高校生・大学受験生」のタグの有無で判断できます。「数学」タグ自体は同一として扱い、階層構造はタグの表示時のみに機能する仕組みです。
以下の画像は、実際のUIです。(階層構造の展開/格納処理はお気に入りポイントです!)
ログツー 記事検索UI
除外検索
勉強中の方にも気軽に投稿していただきたいため、記事内容の不正確さにはある程度寛容なプラットフォームを目指しています。しかし、解説記事を求める読者にとっては、不正確な記事はノイズになります。そこで、特定のタグを含まない記事を検索できる機能を実装することで、「学習内容を記録したい人」と「解説記事を読みたい人」のニーズに応えることを考えました。勉強中の場合は「勉強中」タグ、解説記事の場合は「解説」タグを付与してもらうことで、検索機能による棲み分けが可能です。
除外検索UI (選択済みタグをクリックすると〇→△→×と切り替わる)
数式やPDFの埋め込み
学習コンテンツ投稿の利便性を高めるため、以下の機能を追加しました。
- 数式埋め込み機能 (KateX)
- PDF埋め込み機能 (Adobe PDF Embed API)
PDF埋め込み機能の実装では、一部のPDFで表示が崩れる問題に悩まされ、ライブラリ選定に難航しましたが、Adobe様のAPIを利用することで解決しました。記事ページ内でスライドショーを表示できる便利な仕様を実現し、プリントやスライドの共有を想定しています。
学習ログ管理機能
教科ごとの学習時間を記録するツールも組み込みました。同様の機能のスマホアプリは多く提供されていますが、Webアプリとして提供することで差別化を図りました。
- 学校のタブレットにアプリをインストールできない
- 動画教材で学習しているので、パソコンから学習記録したい
といったニーズに応えることができます。もちろん、スマホからの利用にも対応しています。
また、ブログサービスに学習ログ管理機能を組み込むことで、以下の相乗効果が期待できます。
- 定期的な学習記録のために訪れる学習者をターゲットにした記事を作成できる
- 記事を「勉強中」に設定し、記事ごとに学習時間を管理できる
- 著者は自身の記事が学習に利用されているかを確認できる
この『学習ログ管理機能』こそが、記事タイトルの『〇〇』であり、サービスの中心的なコンセプトとしてネーミングにも反映させました。
ログツー 学習ダッシュボード
今後
さて、本サービスには一つ、重大すぎる問題が残っています。
今回紹介した工夫が真価を発揮するのは、ユーザーとコンテンツが増えた後です。
...そうです。閑古鳥が鳴いているのです。
次なる壁にぶち当たりましたが、心を折らずに開発・運営を進めていこうと思います。
本サービスに興味を持っていただけた方は、下記リンクから実際の記事ページを覗いてみてください。
最後まで読んでいただき、ありがとうございました。
今後ともログツーをよろしくお願いいたします。
Discussion