チャットアプリケーションの要件定義・中間テーブル

広告

こちらでは、チャット機能のある、LINEメッセンジャーを例としてチャットアプリケーションの概要と要件定義をします。

まず、必要な機能を確認しましょ。

  1. ログイン/ログアウト
  2. チャットルームを作る
  3. メッセージを送る(テキスト・写真など)

単純に書くとこちらの3つの操作が必要です。

次、チャットアプリケーションの概要と要件定義を整理しましょ。

上記のチャットアプリで必要となるテーブルを考えましょ。

  1. ユーザー管理機能(新規登録・ログイン・ログアウト機能)
  2. チャットルーム管理機能(新規作成・削除機能)
  3. メッセージ管理機能(テキスト投稿・画像投稿機能)

これらの機能に必要なテーブルは、

  • usersテーブル
  • roomsテーブル
  • messagesテーブル
一つのユーザーは多数のルームに参加できる・一つのルームには多数のユーザーがいる

今回のような、「ユーザーは複数のルームに所属する」「ルームには複数ユーザーが所属する」という場合の関係性を多対多と言います。ここで問題なのは、1つのカラムに対して複数の値を保存することはできないことです。

方法として、関連するidが増えるごとにカラムを増やすということは可能ですが、そうすると無駄なカラムが発生してしまいます。

この問題を解決してくれるのが、「中間テーブル」です。

(英語:join table)

例としてインスタグラムをみましょ。一つの写真に複数のタグ付けができます。
このようなタグ付け機能を実現するには3つのテーブルが必要です。タグを保存するテーブル、写真を保存するテーブル、どの写真にどのタグが登録されているかを保存するテーブル。

  • tags テーブル
  • posts テーブル
  • post_tags テーブル (中間テーブル)

中間テーブルは、多対多の関係にある2つのテーブルの間に挟まって、2つの組み合わせパターンだけをレコードとして保存します。2つのモデルのみでは多対多のアソシエーションを組むことができないことから、 中間テーブルを利用して多対多の関係を定義します。

テーブルの実装については、他のカリキュラムで説明させていただきます。

今回は多対多のアソシエーションについて理解するようにしましょ。

まとめると。

チャットアプリケーションの要件定義をしてみること

多対多のアソシエーションには中間テーブルを使用して2つの組み合わせパターンを作ること

実行できたらテストコードも忘れずに!

結合テストコード・必須メソッド一覧

テストコードで検証しよう

Contrexmind /コントマイ

韓国と日本の大学でアパレルデザイン・CADを専攻、パタンナーとして活動。
その後、企画・MD部署に配属されビジネス業務に従事。
IT企業に移りビジネスデベロップメントチームで、 PMとしての経験を積む。
2018年グローバルIT企業の日本法人立ち上げの責任者を務め、現在はビジネスディレクターとして活動中。
副業コンテンツブロガー

ホーム » ページ 3

結合テストコード・必須メソッド一覧

広告

Ruby on railsテストコードとは>

アプリケーション実装するとき、自分のコード通りの動作を確認するために、テストコードを実行して自動で確認する、この時使うコードをテストコードと言います。

テストコードを初めて実装するとき、これだけ知ってればコードが書けます!

ベーシックなコードなので覚えましょ!

visit
visitはパスを指定することで、指定したビューファイルに遷移できるメソッド

例えば、トップページ(root)に移動したい時

visit root_pathのように記述する

fill_in
fill_inは入力フォームに指定の値を入力することができるメソッド

例えば、fill_in ‘Nickname‘, with: @user.nickname

このテストコードで名前フォームへの入力を行うことができる

have_content()
expect(page).to have_content(‘X’)と記述すると、visitで訪れたpageの中に、Xという文字列があるかどうかを判断するマッチャのこと

have_no_content()
have_contentの逆、文字列が存在しないことを確かめるマッチャ

hover
find(‘ブラウザ上の要素’).hoverとすることで、特定の要素にカーソルをあわせたときの動作を再現

find().click
find(‘クリックしたい要素’).clickと記述することで、実際にクリックができる

change
expect{ 何かしらの動作 }.to change { モデル名.count }.by(1)と記述することによって、

モデルのレコードの数がいくつ変動するのかを確認できる

changeマッチャでモデルのカウントをする場合のみ、expect()ではなくexpect{}となる

current_path
現在いるページのパスを示し

expect(current_path).to eq(root_path)と記述すれば、今いるページがroot_pathであることを確認できる

ここまでのテストコードはあくまでの基礎でありますが、原理を理解していればとこでも反映できますので、ぜひ覚えておきましょ!

テストコードで検証しましょ

「基礎プログラミング用語」サービス設計編

Contrexmind /コントマイ

韓国と日本の大学でアパレルデザイン・CADを専攻、パタンナーとして活動
その後、企画・MD部署に配属されビジネス業務に従事
IT企業に移りビジネスデベロップメントチームで、 PMとしての経験を積む
2018年グローバルIT企業の日本法人立ち上げの責任者を務め、現在はビジネスディレクターとして活動中
副業コンテンツブロガー

Twitterでも配信をしてます!
是非、✅してください!

Contrexmind Twitter

WordPressのヘッダーにコードを追加するには?

広告

Google ADSense を入れようとすると、WordPressでヘッダーにコードを入れないといけない。

いったいヘッダーはどこにあるのか、見つかったとしても突然にHTML修正をするのは戻れなくしまう可能性があり危険。

その時、最もやりやすく安全に操作できる方法はプラグインを設置することです。

プラグインを使用すると、

メリット

  • テーマを切り替えても、コードスニペットが残る
  • ホームページのヘッダー・フッターのみにコードスニペットを追加することができる。前後のコードを触らずに編集可能
  • 完全初心者向け!安全なのでおすすめ!

デメリット

  • プラグイン使用料金発生:年間3万円ほど

今回は安全なプラグインを使用しましょ。

「Insert Headers and Footers by WPBeginner」

様々なプラグインがありますが、調べた結果、こちら「Insert Headers and Footers by WPBeginner」 を設置することにしました。

  1. インストールしたら有効化までクリックします。
  2. プラグインを起動>設定
  3. Setting>Scripts in Header に必要なコードを入力

4. Saveを押して反映させる

実際HTMLでの操作も可能ですが、バックアップを取らないと間違えて元に戻すのに大変な場面に。

ですので、初心者はプラグインを積極的に使いましょ。

色々な種類のプラグインをダウンロードして使ってみるのも勉強になるので、ぜひやってみてください。

Contrexmind /コントマイ

韓国と日本の大学でアパレルデザイン・CADを専攻、パタンナーとして活動
その後、企画・MD部署に配属されビジネス業務に従事
IT企業に移りビジネスデベロップメントチームで、 PMとしての経験を積む
2018年グローバルIT企業の日本法人立ち上げの責任者を務め、現在はビジネスディレクターとして活動中
副業コンテンツブロガー

Twitterでも配信をしてます!
是非、✅してください!

Contrexmind Twitter

ホーム » ページ 3

🟡「基礎用語」サービス設計

広告

今日はサービス設計についてです。

開発をするには基礎の学習だけでは無理があります。なぜなら、

  • なぜそれを作りたいのか?
  • アプリの流れは?
  • どんなカテゴリが必要?
  • カテゴリをどう整理する?

簡単に言うとWHAT・WHY→HOW?がないまま開発はできないからです。
その開発業務をよりスムーズにするために必要なのが「設計」です。

設計の手順には一般的に「要件定義」→「基本設計」→「詳細設計」と言えます。

基本設計 
要件定義の内容を、開発に必要な内容へまとめること。(=外部設計)​

詳細設計
実際に書くべきコードを洗い出す作業(ルーティングは?モデルは?など表にして管理)

DB設計
開発で使用するDB(データベース)の表を設計すること。
そして、どのようなテーブルがあれば管理しやすいかを考えて、
その中でテーブル同士の関連付けをしていく

「今日の用語」

駆け出し エンジニアさんと繋がりたい

広告

はじめまして。

クリエイターのコントマイです。

最近まで、イラストを描いていてインスタグラムで配信をしてました。

その最中、仕事でも関係のあるエンジニアについて深く勉強をしようと決断をしまして、現在一生懸命学習をしてます!

現在、駆け出しエンジニアを目指して頑張ってます!

ここで、自分の背景を紹介します。

Contrexmind /コントマイと呼ばれる

韓国と日本の大学でアパレルデザイン・CADを専攻、パタンナーとして活動。
その後、企画・MD部署に配属されビジネス業務に従事。
IT企業に移りビジネスデベロップメントチームで、 PMとしての経験を積む。
2018年グローバルIT企業の日本法人立ち上げの責任者を務め、現在はビジネスディレクターとして活動中。
副業コンテンツブロガー

こちらのブログではこの4点を中心に配信していきます。

  1. 駆け出しエンジニアになるための基礎
  2. 用語整理
  3. 課題を解決するため一緒に考える
  4. メンタルについ
,

駆け出しエンジニアになるまでもかなり時間と努力が必要!

決められた時間の中で最大に脳を動かせてインプットするように日々考えてます。

場所・音など周りの環境作りも大事。

その意図からは環境作りのコラムも配信します。

【イラストコラム】”カフェ勉”スターバックスで何する?

学習してる方、イラスト好きな方、たくさんのコメントや課題、どんどん投げてください。

一緒に解いていきましょう!!


🟡テストコードで検証しよう

広告

今日はテストコードの基礎について書きます。

まず、テストコードはなぜ書くのか。

これが必要な理由は何でしょうか ?

  • テストコードを書くと、アプリケーションの品質が担保されるだけではなく、設計を読み解くこともできる
  • こうした情報を追加することで、自分のブログについてや、今後それをどうしていきたいかについて、アイデアを明確にできます。

学習をするレベルだとこのテストコードはとても役に立ちます。

簡単なテストコードを実行してみましょ。まずは、

1.必要なモデルのテストコードを記述するファイルを作成しましょう。

% rails g rspec:model comment

2.FactoryBot.rb を編集する

spec/factories/comments.rb 

require 'rails_helper'

RSpec.describe Comment, type: :model do

before do @comment = FactoryBot.build(:comment)

end

it 'textカラムが空の場合コメントは保存できない' do

end

end

3.テストを実行

% bundle exec rspec spec/models/comment_spec.rb

この順番でテストをやっていくと、エラーメッセージは正しく出るのか確認できます。