見出し画像

小説が好きすぎて小説紹介サイト作った


はじめに

小説好きの友人と共同開発した小説紹介サイト「ノベルバース」について、使用技術や開発過程で直面した課題、そしてセキュリティ面での取り組みを紹介します。

サイト概要

サイト名:ノベルバース (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を活用して画像のアップロードと管理を効率化しました。


セキュリティ対策

セキュリティは最重要事項の一つとして認識し、以下の対策を実施しました:

  1. 入力サニタイズ:`express-mongo-sanitize`と`sanitize-html`を使用し、NoSQLインジェクションやXSS攻撃を防止。

  2. CSRF対策:`csurf`ミドルウェアを導入し、クロスサイトリクエストフォージェリを防止。

  3. レート制限:`express-rate-limit`を実装し、DDoS攻撃やブルートフォース攻撃のリスクを軽減。

  4. セッション管理:`express-session`と`connect-redis`を使用し、安全なセッション管理を実現。Redisをセッションストアとして採用し、セッションデータの永続化と高速アクセスを両立。

  5. 環境変数管理:機密情報は`dotenv`を使用して環境変数で管理し、ソースコード上に直接記述しないよう徹底。

  6. バリデーション:`Joi`ライブラリを使用してユーザー入力の厳格なバリデーションを実施。

  7. 安全なパスワード管理:`passport-local-mongoose`を利用し、パスワードのハッシュ化とソルト化を自動化。

開発で直面した課題と解決策

  1. Herokuの無料プラン廃止対応
    Herokuの無料プランが終了したため、アプリケーションが定期的にスリープ状態になる課題がありました。これに対し、UptimeRobotを使用して定期的にアプリケーションにリクエストを送ることで、スリープ状態を回避しました。

  2. データベース設計の最適化
    小説情報とユーザー情報の関連付けに時間を要しました。最終的に、効率的なクエリが可能なスキーマ設計を採用し、パフォーマンスを向上させました。

  3. 非同期処理の管理
    APIリクエストやデータベース操作など、多数の非同期処理の管理に苦心しました。async/awaitを適切に使用することで、コードの可読性と保守性を向上させました。

  4. セッション管理の最適化
    大量のユーザーセッションを効率的に管理するため、Redisを導入しました。これにより、セッションデータの永続化と高速なアクセスを実現しました。

今後の展望

  1. ユーザー体験の向上:ユーザーフィードバックを基に、UIのさらなる改善や新機能の追加を検討しています。

  2. スケーラビリティの向上:将来的なトラフィック増加に備え、マイクロサービスアーキテクチャに移行するための学習をし、実装までしたいと思っています。

  3. テスト自動化:単体テストや統合テストの導入により、品質管理プロセスを強化する予定です。

  4. SEO対策:現在、metaタグなどの最低限のSEO対策しか施していないので、WEBサイトにおけるSEO対策についてもっと理解を深め、反映させていこうと思っています。

結論

本サイトの開発を通じて、フルスタック開発の経験を積むとともに、実践的なセキュリティ対策の基礎を学びました。
今後も継続的な改善を行い、小説好きユーザーにとって価値のあるプラットフォームを目指していきます!
気になった人は、まずはサイトに訪れてみてください!「読みたい」ボタンを押してブックマークをしたり、掲示板の書き込みをするにはアカウント作成が必要になるので、使い倒したい!古参になりたい!と思ったら、ぜひ、アカウントを作ってみてください!

いいなと思ったら応援しよう!