Git Product home page Git Product logo

team_project's Introduction

Setup

docker-compose up

各コマンドの実行方法

docker exec -it g2_app bash でrailsが動いてるコンテナに入れます。
コンテナ内部で bin/rails g model Hoge とかすればrailsコマンドが実行できます。

debug

ここにVSCodeでのデバッグについて記しました。
https://github.com/k-karen/team_project/wiki/1.-About-Development-Environment#rails%E3%81%AEvscode-docker%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

ローカル環境でのユーザー作成などについて

ホーム
http://localhost:3000/
登録画面
http://localhost:3000/sign_up
ログイン画面
http://localhost:3000/login

team_project's People

Contributors

k-karen avatar shunya9811 avatar cozy07 avatar

Watchers

 avatar

team_project's Issues

biography等のプロフィールの編集

現在、プロフィール編集ボタンを押すと、username、email、password等を編集するようになっている。

biography等のプロフィールの編集ができないのを修正する

友達ではないユーザーのプロフィールページに飛べてしまうのを修正する

現状、/users/:idと直打ちすることで、友達ではないユーザーのプロフィールに飛べてしまっているので、直す必要があるかも

ただ、もしroom内に友達ではないユーザーがいたとして、room内から友達追加をしたい場合
プロフィールページに遷移して追加できるといいのかもしれない
しかしそうすると、友達ではないユーザーのプロフィールページに飛べてしまうのを禁止しまうと
プロフィールページに遷移してもらって、友達追加するということができなくなってしまうかも

機能の優先順位付け

毎週金曜日にdemoを作りたいので、そういう感じのやつ

  • 最初デプロイして、公開されたサイトがある状態
  • ...
  • ...
  • ...

↑最終的には、それぞれを看板化してTodoに突っ込む

ActionCableの権限周りの対応

"rooms"にbroadcastすると、自分が見れるはずではないroomの配信も受信することになる

"rooms"にユーザーidのプレフィックスをつけて対応しています。
turbo_stream_fromが署名したりしていい感じにしてくれてるっぽいのでActionCableは使わずにすみました。

ユーザー登録・ログイン機能

一旦簡単なログインを実装してしまいます。
usersテーブルなどは、めちゃくちゃ簡単に作って、細かいのは追々というところで。

逆に大変だったので、普通にsorceryを導入してcurrent_userを使える状態にしました。

テスト自動化

  • minitestをRspecにする #101
  • ciに組み込む
  • (可能なら)ブラウザを使ってテストが出来る状態をローカルに作る
  • (可能なら)ブラウザを使ってテストが出来る状態をCI上につくる

テキストメッセージの送受信

開発の進め方的にはこんな感じ?

  1. Hotwireのセットアップ
    まず、Hotwireをプロジェクトに追加する必要があります。
    Gemの追加: Gemfile に hotwire-rails を追加し、bundle install を実行します。
    JavaScriptのインストール: TurboとStimulusのJavaScriptライブラリをインストールします。Rails 7以降では、これらはデフォルトで含まれています。

  2. メッセージモデルの作成
    チャットメッセージを格納するためのメッセージモデルを作成します。
    モデルの生成: rails generate model Message user:references body:text というコマンドでメッセージモデルを生成します。ここで、user:references はメッセージがどのユーザーに属しているかを示し、body はメッセージの本文を保存します。
    マイグレーションの実行: 生成されたマイグレーションファイルを使って、rails db:migrate コマンドでデータベースにメッセージテーブルを作成します。

  3. メッセージ送信の実装
    Turboを使用して、メッセージの送信と表示をリアルタイムで行います。
    メッセージフォーム: メッセージを送信するためのフォームを作成します。このフォームには、data-turbo="true" という属性を追加して、Turboの機能を有効にします。
    Turbo Stream: メッセージが送信されると、サーバーサイドからTurbo Stream形式で応答を返します。これにより、送信されたメッセージがリアルタイムでチャット画面に追加されます。

  4. メッセージのリアルタイム更新
    Broadcasting: 新しいメッセージが作成された時、サーバーサイドでTurbo Streamを使用して、そのメッセージをすべての購読者にブロードキャストします。
    更新の表示: ユーザーのブラウザでは、Turbo Streamを通じて送信された更新がリアルタイムで表示され、チャット画面が更新されます。

  5. Stimulusの使用
    インタラクティブな要素の追加: Stimulusを使用して、より動的なクライアントサイドの動作を追加できます。例えば、送信ボタンの無効化や、スクロールの自動調整などの機能を追加することができます。

ログインしたユーザーに紐づいたルームのみが見えるような状態にする

DB
・user-roomの中間テーブルの作成 ⇒ 別issueで作成した
・roomにowenerユーザーのidを追加する(?)

画面
・roomに自分以外のユーザーを結びつけるフォームを用意する
→ 最初は簡易にidをinput formに入れるだけでも良いかも?
  カンマ区切りで、ユーザーidを列挙するフォーム

friend機能を本当は作らないかとも ⇒ 松原さん

ログイン後 → Room一覧 ⇒ 別issueで作成した

ログイン後のTOPページのroomのソートを修正する

1, create room1
2, create room1におけるmessage
3, create room2
の順番で動作したとき、roomが並ぶ順番としては、room2が一番上にきてほしい。
現状では、room1が一番上にきている。

つまり単に最新のメッセージでソートするのでなく、メッセージがない場合はroomの作成時間を比較させたい。

機能洗い出し

チャットアプリにほしい・必要な機能をどしどし書いていこう

・書き出すだけ書き出すフェーズ
・優先順位をつけるフェーズ

♡ ← 優先順位超高いよね(💯なかったので、変えました。)
👍 ← 優先順位高いよねにつける

マイページ作成

進め方はこんな感じ?

  1. ユーザー認証のセットアップ
    まず、ユーザーがログインできるようにするために、ユーザー認証システムを設定します。
    Deviseの使用: DeviseはRailsで広く使用される認証ソリューションです。gem 'devise' を Gemfile に追加し、bundle install を実行します。
    Deviseのセットアップ: rails generate devise:install と rails generate devise User を実行して、ユーザーモデルと認証のためのビュー、コントローラーを生成します。

  2. ユーザーモデルの拡張
    ユーザー情報を格納するために、ユーザーモデルを拡張します。
    追加の属性: 必要に応じてユーザーモデルに追加の属性(例えば、氏名やプロフィール画像など)を追加します。これはマイグレーションを作成してデータベースに適用することで行います。

  3. マイページのコントローラーとビューの作成
    マイページを表示するためのコントローラーとビューを作成します。
    コントローラーの生成: rails generate controller MyPage を実行してマイページ用のコントローラーを生成します。
    アクションの定義: コントローラーに show アクションを定義して、ユーザーのプロフィール情報を表示します。
    ビューの作成: show アクションに対応するビューファイルを作成し、ユーザー情報を表示するためのHTMLを記述します。

  4. ユーザー情報の編集機能
    ユーザーが自身の情報を編集できるようにします。
    編集用のビュー: ユーザー情報の編集用のビューを作成します。通常、edit と update アクションをコントローラーに追加して、対応するビューファイルを用意します。
    フォームの作成: ユーザー情報を編集するためのフォームを作成します。このフォームは、ユーザーが入力した情報を update アクションに送信します。

  5. アクセス制御
    マイページはユーザー自身のみがアクセスできるように、アクセス制御を実装します。
    認証チェック: Deviseの authenticate_user! フィルターを使用して、ユーザーがログインしていることを確認します。
    権限チェック: ユーザーが自分自身の情報のみを編集できるように、コントローラーで権限チェックを行います。

  6. ルーティングの設定
    マイページと編集ページへのルートを設定します。

ルーティングの追加: config/routes.rb ファイルにマイページと編集ページへのルートを追加します。

routes.rbの設計(全体感の相談)

Iteration2で作成するものについて、どのようなエンドポイントを作成するか、
一旦共有したい

Rails.application.routes.draw do
  # ユーザー登録周り
  # マイページ作成
  # ...
end

本番環境構築・ドキュメント作成をする

capistranoでdeployするようにしてworkflowに組み込みたい気持ちがあったけど、
時間なさそうなので一旦docker環境をそのままEC2で再現する方向に

メール・ドメインは私用のやつ流用しようかなと考え中

ユーザー間の関係作成

ユーザー間の関連を作ります。

ユーザーAがユーザーBを登録することで、ユーザーAはユーザーBを自分の作成したRoomに招待出来るようにします。
一旦、この状態のときユーザーBはユーザーAをユーザーBが作成したRoomへは追加できないという仕様にします。
(これは必要であれば変更可能な仕様です)

・DB周りの作成
・フォーム周りの作成

大枠の設計をしましょう

一旦考慮する範囲(P0,P1)

ユーザー登録・ログイン機能
テキストメッセージの送受信
アイコンやトークの設定へ飛べるような、マイページ
GoodとBad/絵文字の入力
最新のトークが一番上にくる
複数人での会話
連絡先の管理(メッセージをやり取りしたい相手をリストにお互い追加したら、連絡が取れるようになるみたいな)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.