- Published on
プロジェクトJuna
- Authors
- Name
- Yuta Miyaura ( HN:Imura )
- @ADHD66502327
個人開発プロジェクトJuna
プロジェクト概要
- プロジェクト名: Juna
- 目的: 見えない障害に悩む人々が意見交換の場を通じて何を感じ、何を考え、どのように生きているかを共有する。また、開発時にLLMを使用してコーディング量とスピードの加速を検証する。
- 主な機能: 記事投稿、閲覧(未ログインでも可)、いいね、コメント、ユーザー管理、タグ機能、人気記事ランキング
- 対象ユーザー: 見えない障害に悩む人々、支援者、一般ユーザー
技術要件
- 開発言語: Python (Django), JavaScript (Next.js)
- フレームワーク・ライブラリ: Django REST framework, Next.js, TipTap (または他のカスタマイズ可能なWYSIWYGエディタ)
- データベース: PostgreSQL
- インフラストラクチャー: Render.com (無料プランでのアプリケーションホスティング)
- その他の技術スタック: JWT認証, 必要なライブラリ
LLMの使用目的
- 開発効率の向上: LLMを使用してコーディング量とスピードの加速を検証する。
言語サポート
- 必要な言語: 日本語
- 優先度: 高
コスト
- 予算: リリース後の維持費を年間0円から5000円に抑える
- 課金形態の希望: 開発時はLLMの有益性に応じて課金を検討
その他の考慮事項
- セキュリティ: ユーザーデータの保護、安全な認証システム
- プライバシー: GDPRやその他のプライバシー法規制の遵守
- 法規制の遵守: 日本国内の法規制に準拠
- サポート体制: 開発中の技術的な問題に対するサポート
機能仕様
ユーザー登録機能
概要: 新しいユーザーがシステムに登録するための機能。
入力:
- ユーザー名: 文字列、必須、ユニーク
- パスワード: 文字列、必須、最低8文字
- メールアドレス: 文字列、必須、ユニーク、有効なメール形式
処理:
- 入力されたデータのバリデーション
- メールアドレスの確認プロセス
- データベースへのユーザー情報の保存
- 認証トークンの生成と返却
出力:
- 成功時: HTTPステータスコード 201 (Created)、ユーザー情報と認証トークンを含むJSONオブジェクト
- 失敗時: HTTPステータスコード 400 (Bad Request)、エラーメッセージを含むJSONオブジェクト
エラーハンドリング:
- ユーザー名が既に存在する場合: "このユーザー名は既に使用されています。"
- パスワードが基準を満たしていない場合: "パスワードは最低8文字以上である必要があります。"
- メールアドレスが無効な場合: "有効なメールアドレスを入力してください。"
- メールアドレスが既に存在する場合: "このメールアドレスは既に登録されています。"
ログイン
概要: ユーザーがシステムにログインするための機能。
入力:
- ユーザー名: 文字列、必須
- パスワード: 文字列、必須
処理:
- 入力されたユーザー名とパスワードの検証
- 認証トークンの生成と返却
出力:
- 成功時: HTTPステータスコード 200 (OK)、認証トークンを含むJSONオブジェクト
- 失敗時: HTTPステータスコード 401 (Unauthorized)、エラーメッセージを含むJSONオブジェクト
ログアウト
概要: ユーザーがシステムからログアウトするための機能。
入力:
- 認証トークン: 文字列、必須
処理:
- トークンの無効化
出力:
- 成功時: HTTPステータスコード 200 (OK)、メッセージを含むJSONオブジェクト
ユーザー登録
概要: 新しいユーザーがシステムに登録するための機能。
入力:
- ユーザー名: 文字列、必須、ユニーク
- パスワード: 文字列、必須、最低8文字
- メールアドレス: 文字列、必須、ユニーク、有効なメール形式
処理:
- 入力されたデータのバリデーション
- メールアドレスの確認プロセス
- データベースへのユーザー情報の保存
- 認証トークンの生成と返却
出力:
- 成功時: HTTPステータスコード 201 (Created)、ユーザー情報と認証トークンを含むJSONオブジェクト
- 失敗時: HTTPステータスコード 400 (Bad Request)、エラーメッセージを含むJSONオブジェクト
エラーハンドリング:
- ユーザー名が既に存在する場合: "このユーザー名は既に使用されています。"
- パスワードが基準を満たしていない場合: "パスワードは最低8文字以上である必要があります。"
- メールアドレスが無効な場合: "有効なメールアドレスを入力してください。"
- メールアドレスが既に存在する場合: "このメールアドレスは既に登録されています。"
タグ別人気記事ランキング
概要: 各タグに関連する記事の人気ランキングを表示する機能。
入力:
- タグ: 文字列、必須
処理:
- 指定されたタグに関連する記事のいいね数に基づくランキングの生成
出力:
- 成功時: HTTPステータスコード 200 (OK)、ランキングを含むJSONオブジェクト
タグ一覧
概要: 利用可能な全タグの一覧を表示する機能。
入力: なし
処理:
- システム内の全タグの取得
出力:
- 成功時: HTTPステータスコード 200 (OK)、タグ一覧を含むJSONオブジェクト
記事一覧
概要: システム内の全記事の一覧を表示する機能。
入力:
- ページ番号: 整数、オプション
処理:
- 指定されたページに対応する記事の取得
出力:
- 成功時: HTTPステータスコード 200 (OK)、記事一覧を含むJSONオブジェクト
マイページ
概要: ユーザー自身のプロフィール情報と投稿した記事の一覧を表示する機能。
入力:
- ユーザーID: 整数、必須
処理:
- 指定されたユーザーIDに関連するプロフィール情報と記事の取得
出力:
- 成功時: HTTPステータスコード 200 (OK)、ユーザー情報と記事一覧を含むJSONオブジェクト
フォロー
概要: 他のユーザーをフォローする機能。
入力:
- フォローするユーザーID: 整数、必須
処理:
- 指定されたユーザーIDのユーザーをフォローする
出力:
- 成功時: HTTPステータスコード 200 (OK)、メッセージを含むJSONオブジェクト
ブロック
概要: 他のユーザーをブロックする機能。
入力:
- ブロックするユーザーID: 整数、必須
処理:
- 指定されたユーザーIDのユーザーをブロックする
出力:
- 成功時: HTTPステータスコード 200 (OK)、メッセージを含むJSONオブジェクト