はじめに
音楽共有SNSの核となるユーザーモデルの設計と実装について解説します。データベースの構造、ユーザー情報の管理、そしてフォロー機能の実装方法を、初心者にもわかりやすく説明していきます。
目次
1. ユーザーモデルの基本構造
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
-
UserMixin
: Flask-Loginが提供するクラスで、ログイン機能に必要なメソッドを提供します。 -
db.Model
: SQLAlchemyのモデルクラスを継承し、データベースとの連携を可能にします。 -
id
: 各ユーザーを一意に識別するための番号(主キー)です。
2. ユーザー情報のフィールド
username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(120), nullable=False)
favorite_band = db.Column(db.String(120))
favorite_genre = db.Column(db.String(50))
icon = db.Column(db.String(120))
-
username
: ユーザー名(最大80文字、重複不可、必須) -
password
: パスワード(最大120文字、必須)。実際には暗号化して保存します。 -
favorite_band
: お気に入りのバンド名(任意) -
favorite_genre
: 好きな音楽ジャンル(任意) -
icon
: ユーザーアイコンの画像パス(任意)
これらのフィールドにより、各ユーザーの基本情報と音楽の好みを記録します。
3. フォロー関係の実装
followed = db.relationship(
'User', secondary=followers,
primaryjoin=(followers.c.follower_id == id),
secondaryjoin=(followers.c.followed_id == id),
backref=db.backref('followers', lazy='dynamic'), lazy='dynamic')
この複雑に見える部分は、ユーザー間のフォロー関係を管理するための設定です:
-
secondary=followers
: 先ほど定義した中間テーブルを使用 -
primaryjoin
,secondaryjoin
: フォロワーとフォロー先の関係を定義 -
backref
: 逆方向の関係(フォロワー)を定義 -
lazy='dynamic'
: クエリの最適化のための設定
4. フォロー機能のメソッド
def follow(self, user):
if not self.is_following(user):
self.followed.append(user)
def unfollow(self, user):
if self.is_following(user):
self.followed.remove(user)
def is_following(self, user):
return self.followed.filter(
followers.c.followed_id == user.id).count() > 0
これらのメソッドにより、フォロー機能を簡単に実装できます:
-
follow
: 指定したユーザーをフォローします。 -
unfollow
: 指定したユーザーのフォローを解除します。 -
is_following
: 指定したユーザーをフォローしているかチェックします。
これらのメソッドを使うことで、ビュー関数内でフォロー操作を簡潔に記述できます。
まとめ
ユーザーモデルは、音楽共有SNSの中心的な要素です。このモデルを適切に設計することで、ユーザー情報の管理やフォロー機能の実装が容易になります。
今回のモデル設計のポイントは以下の通りです:
- 基本的なユーザー情報(ユーザー名、パスワードなど)の保存
- 音楽の好みに関する情報(お気に入りのバンド、ジャンル)の追加
- フォロー関係の効率的な管理
- フォロー機能を簡単に使えるメソッドの実装
次回は、このユーザーモデルを使って、実際のビュー関数(ログイン、登録、プロフィール表示など)の実装について解説する予定です。