小説が好きすぎて小説紹介サイト作った
はじめに
小説好きの友人と共同開発した小説紹介サイト「ノベルバース」について、使用技術や開発過程で直面した課題、そしてセキュリティ面での取り組みを紹介します。
サイト概要
サイト名:ノベルバース (https://www.novelverse.net)
ノベルバース(以下、本サイト)は、次に何を読もうか迷っている人が最新情報を元に、手軽に小説を探せることを目的に設計されました。ユーザーは多様なカテゴリーや作家名から小説を探索し、お気に入りの作品をブックマークできます。また、掲示板から、読んだ感想のシェアすることもできます!
主な機能
アカウント管理(作成、削除、ログイン、ログアウト)
多様なカテゴリーによる小説一覧表示
小説詳細情報の閲覧
ブックマーク機能(「読みたい+」ボタン)
検索機能(全文検索および作家名検索)
お問い合わせフォーム
掲示板
使用技術
開発に使用した主要な技術スタックは以下の通りです:
フロントエンド
HTML / CSS
JavaScript (Vanilla JS)
EJS(テンプレートエンジン)
バックエンド
Node.js(Express)
データベース
MongoDB
認証
Passport.js
インフラ
Heroku(ホスティング)
UptimeRobot(監視ツール)
外部サービス/API
Resend(メール配信サービス)
Cloudinary(画像ホスティング)
バックエンド
Express.jsをベースにしたRESTful APIを構築し、MongoDB(Mongoose ODM使用)でデータを管理しています。認証にはPassport.jsを採用し、ローカル戦略を実装しています。
フロントエンド
サーバーサイドレンダリングにEJSを使用し、動的なUI操作にはVanilla JavaScriptを採用しました。これにより、シンプルながら柔軟な実装を実現しています。
データベース設計
MongoDBを採用し、小説情報、ユーザーデータ、ブックマーク情報などを柔軟なスキーマで管理しています。
API統合
Resend APIを使用してアカウント作成時のメール送信とお問い合わせフォームからのメール送信を実装し、Cloudinaryを活用して画像のアップロードと管理を効率化しました。
セキュリティ対策
セキュリティは最重要事項の一つとして認識し、以下の対策を実施しました:
入力サニタイズ:`express-mongo-sanitize`と`sanitize-html`を使用し、NoSQLインジェクションやXSS攻撃を防止。
CSRF対策:`csurf`ミドルウェアを導入し、クロスサイトリクエストフォージェリを防止。
レート制限:`express-rate-limit`を実装し、DDoS攻撃やブルートフォース攻撃のリスクを軽減。
セッション管理:`express-session`と`connect-redis`を使用し、安全なセッション管理を実現。Redisをセッションストアとして採用し、セッションデータの永続化と高速アクセスを両立。
環境変数管理:機密情報は`dotenv`を使用して環境変数で管理し、ソースコード上に直接記述しないよう徹底。
バリデーション:`Joi`ライブラリを使用してユーザー入力の厳格なバリデーションを実施。
安全なパスワード管理:`passport-local-mongoose`を利用し、パスワードのハッシュ化とソルト化を自動化。
開発で直面した課題と解決策
Herokuの無料プラン廃止対応:
Herokuの無料プランが終了したため、アプリケーションが定期的にスリープ状態になる課題がありました。これに対し、UptimeRobotを使用して定期的にアプリケーションにリクエストを送ることで、スリープ状態を回避しました。データベース設計の最適化:
小説情報とユーザー情報の関連付けに時間を要しました。最終的に、効率的なクエリが可能なスキーマ設計を採用し、パフォーマンスを向上させました。非同期処理の管理:
APIリクエストやデータベース操作など、多数の非同期処理の管理に苦心しました。async/awaitを適切に使用することで、コードの可読性と保守性を向上させました。セッション管理の最適化:
大量のユーザーセッションを効率的に管理するため、Redisを導入しました。これにより、セッションデータの永続化と高速なアクセスを実現しました。
今後の展望
ユーザー体験の向上:ユーザーフィードバックを基に、UIのさらなる改善や新機能の追加を検討しています。
スケーラビリティの向上:将来的なトラフィック増加に備え、マイクロサービスアーキテクチャに移行するための学習をし、実装までしたいと思っています。
テスト自動化:単体テストや統合テストの導入により、品質管理プロセスを強化する予定です。
SEO対策:現在、metaタグなどの最低限のSEO対策しか施していないので、WEBサイトにおけるSEO対策についてもっと理解を深め、反映させていこうと思っています。
結論
本サイトの開発を通じて、フルスタック開発の経験を積むとともに、実践的なセキュリティ対策の基礎を学びました。
今後も継続的な改善を行い、小説好きユーザーにとって価値のあるプラットフォームを目指していきます!
気になった人は、まずはサイトに訪れてみてください!「読みたい」ボタンを押してブックマークをしたり、掲示板の書き込みをするにはアカウント作成が必要になるので、使い倒したい!古参になりたい!と思ったら、ぜひ、アカウントを作ってみてください!