0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DailyBeat技術スタックと選定理由

Posted at

ライブラリとフレームワーク

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: フォームの定義とバリデーション

ルート(エンドポイント)

  1. ログイン

    • 技術: Flask, Flask-Login
    • 機能: ユーザー認証、セッション管理
  2. 登録

    • 技術: Flask, SQLAlchemy
    • 機能: 新規ユーザーの作成、パスワードのハッシュ化
  3. ログアウト

    • 技術: Flask-Login
    • 機能: ユーザーセッションの終了
  4. マイページ表示

    • 技術: Flask, SQLAlchemy, Flask-Login
    • 機能: ユーザー情報と投稿の取得、テンプレートレンダリング
  5. 楽曲投稿

    • 技術: Flask, SQLAlchemy, WTForms
    • 機能: フォーム処理、データベースへの保存
  6. 全投稿表示

    • 技術: Flask, SQLAlchemy
    • 機能: 投稿データの取得とソート、ページネーション
  7. ユーザーフォロー/アンフォロー

    • 技術: Flask, SQLAlchemy, Flask-Login
    • 機能: フォロー関係の更新
  8. ユーザープロフィール表示

    • 技術: Flask, SQLAlchemy
    • 機能: ユーザー情報と投稿の取得、テンプレートレンダリング
  9. メッセージ送信

    • 技術: Flask, SQLAlchemy, WTForms
    • 機能: フォーム処理、メッセージのデータベース保存

この技術スタックにより、DailyBeatは効率的な開発と保守が可能な、機能的な音楽共有SNSアプリケーションとして実現されています。各技術の選択は、開発の容易さ、パフォーマンス、セキュリティ、そして将来の拡張性を考慮して行われています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?