ライブラリとフレームワーク
1. Flask
選定理由:
- 軽量で柔軟性が高く、小規模から中規模のアプリケーションに適している
- 学習曲線が緩やかで、初心者でも比較的容易に習得できる
- 必要な機能を持つ拡張機能が豊富に用意されており、開発効率を高められる
- Pythonベースであるため、開発者にとって親しみやすい言語である
使用機能:
- ルーティング(URLと機能の紐付け)
- テンプレートレンダリング(HTMLの生成)
- リクエスト処理
- レスポンス生成
2. SQLAlchemy
選定理由:
- Pythonで最も広く使われているORMの一つで、信頼性が高い
- データベース操作をPythonオブジェクトとして扱えるため、開発効率が向上する
- 複雑なSQLクエリを書かずに済み、コードの可読性が向上する
- 将来的なデータベースの変更(例:SQLiteからPostgreSQLへ)が容易になる
使用機能:
- データベースモデルの定義(User, DailySong)
- データの挿入、更新、削除、取得操作
3. Flask-Login
選定理由:
- Flaskアプリケーションに簡単にユーザー認証機能を追加できる
- セッション管理やユーザーのログイン状態の追跡が容易になる
- 「ログインが必要」な機能を簡単に実装できる
使用機能:
- ユーザーのログイン、ログアウト処理
- 現在のログインユーザーの取得
- ログインが必要なページの保護(@login_required デコレータ)
4. WTForms
選定理由:
- フォームの作成と検証を簡単に行える
- CSRF保護が組み込まれており、セキュリティ強化が容易
- Flaskとの統合が容易で、Flask-WTFという拡張も利用可能
使用機能:
- 楽曲投稿フォーム(DailySongForm)の作成
- メッセージ送信フォーム(MessageForm)の作成
- フォームのバリデーション
5. APScheduler
選定理由:
- Pythonで定期的なタスクを簡単にスケジュールできる
- 様々なスケジューリング方法(間隔ベース、日付ベース、クーロン式など)をサポートしている
- アプリケーション内で直接スケジューリングを管理できるため、外部のcronなどに依存しない
使用機能:
- 毎日の楽曲リセット処理のスケジューリング
データベースモデル
1. User
説明: ユーザー情報を格納するモデル
主な属性:
- id: ユーザーの一意識別子
- username: ユーザー名
- password: ハッシュ化されたパスワード
- favorite_band: お気に入りのバンド
- favorite_genre: お気に入りの音楽ジャンル
- icon: ユーザーアイコンのファイルパス
関連する技術:
- SQLAlchemy: モデルの定義と操作
- Flask-Login: UserMixinを継承してログイン機能を実装
2. DailySong
説明: 日々の楽曲投稿を格納するモデル
主な属性:
- id: 投稿の一意識別子
- user_id: 投稿したユーザーのID(外部キー)
- title: 曲のタイトル
- artist: アーティスト名
- genre: 音楽ジャンル
- music_url: 音楽の共有URL
- date_posted: 投稿日
- is_current: 現在の投稿かどうかを示すフラグ
関連する技術:
- SQLAlchemy: モデルの定義と操作
3. followers
説明: ユーザー間のフォロー関係を表す中間テーブル
主な属性:
- follower_id: フォローしているユーザーのID
- followed_id: フォローされているユーザーのID
関連する技術:
- SQLAlchemy: 多対多関係の定義
フォーム
1. DailySongForm
説明: 日々の楽曲投稿用フォーム
主な項目:
- title: 曲のタイトル
- artist: アーティスト名
- genre: 音楽ジャンル(選択式)
- music_url: 音楽の共有URL
関連する技術:
- WTForms: フォームの定義とバリデーション
2. MessageForm
説明: メッセージ送信用フォーム
主な項目:
- message: メッセージ本文
関連する技術:
- WTForms: フォームの定義とバリデーション
ルート(エンドポイント)
-
ログイン
- 技術: Flask, Flask-Login
- 機能: ユーザー認証、セッション管理
-
登録
- 技術: Flask, SQLAlchemy
- 機能: 新規ユーザーの作成、パスワードのハッシュ化
-
ログアウト
- 技術: Flask-Login
- 機能: ユーザーセッションの終了
-
マイページ表示
- 技術: Flask, SQLAlchemy, Flask-Login
- 機能: ユーザー情報と投稿の取得、テンプレートレンダリング
-
楽曲投稿
- 技術: Flask, SQLAlchemy, WTForms
- 機能: フォーム処理、データベースへの保存
-
全投稿表示
- 技術: Flask, SQLAlchemy
- 機能: 投稿データの取得とソート、ページネーション
-
ユーザーフォロー/アンフォロー
- 技術: Flask, SQLAlchemy, Flask-Login
- 機能: フォロー関係の更新
-
ユーザープロフィール表示
- 技術: Flask, SQLAlchemy
- 機能: ユーザー情報と投稿の取得、テンプレートレンダリング
-
メッセージ送信
- 技術: Flask, SQLAlchemy, WTForms
- 機能: フォーム処理、メッセージのデータベース保存
この技術スタックにより、DailyBeatは効率的な開発と保守が可能な、機能的な音楽共有SNSアプリケーションとして実現されています。各技術の選択は、開発の容易さ、パフォーマンス、セキュリティ、そして将来の拡張性を考慮して行われています。