〜サービス設計〜

〜アプリケーション開発の手順を学ぼう〜

企画

 どんなアプリ(機能)を作るか決める段階のこと。

 ⑴誰のどんな問題を解決したいのかを決める。

 ⑵解決方法を決める。

要件定義

 ユーザーがどのように機能を使用するのかを考え言語化する、障害が起こったときどうするかを決めるなどの詳細情報を整理すること。

設計

 エンジニアが実際にどのようにアプリや新機能を作っていくかの手順書や、必要な設計図を作る工程のこと。

 設計には基本設計と詳細設計という2つのヒューズがある。

デプロイ

 作ったアプリを外部のサーバーに移して、全世界からアクセスできるように設計すること。

保守/運用

 アプリ/機能がデプロイされたあとの段階のこと。動いているアプリに異常がないか定期的に確かめたり、想定通りにアプリ、機能が動かないなどトラブルが発生したときに対処すること。

 

〜サービスを企画し要点を洗い出そう〜

ペルソナ

 マーケティング用語で、『サービスを使用するユーザー』のこと。

ユーザーストーリー

 『ペルソナの課題に対して、そのような機能で解決していくのか』を明確にしたもの。

 

〜設計しよう〜

基本設計

 要件定義の内容を、開発に必要な内容へまとめること。(外部設計とも呼ばれる。)

詳細設計

 実際に書くべきコードを洗い出す作業。

画面遷移図

 どの画面でどんな操作をしたらどのページに移動するかを図で表記したもの。

DB設計

 開発で使用するDB(データベース)の表を設計すること。具体的に考える項目は、『テーブル』や『カラム』、『関連付け(アソシエーション)』など。

 設計手順としては、まず保存する項目を洗い出し、どのようなテーブルがあれば管理しやすいかを考慮しつつ、その中でテーブル同士の関連付けを考える。

エンティティ

 サービスで扱われるデータ自体のこと。

モデリング

 エンティティの分類や関連付けなどを行い、模型のように表すこと。具体的にいうと、エンティティ自体を見直し、さらにエンティティ同士の関係性を考え、図などに表記したりすること。

正規化

 データベースの構造を効率的でシンプルな形にすることです。

 ⑴非正規型   何もしていない状態。

 ⑵第一正規型  重複する値やカラムを分離する。

 ⑶第三正規型  情報が混在するエンティティを分離する。

制約

 データを扱う際に制限をかけること。制約はDBへ直接設定するので、後に変更すると非常に手間のかかる可能性がある。

 

⑴NOT NULL制約

 テーブルの造成地にNULL(空の値)が入らないように制限する制約。指定したカラムが、DBに空のままの状態で保存するのを防ぐ。

 t.型 :カラム名, null: false

 例えば、usersテーブルの『name』カラムにNOT NULL制約を設定すると、nameカラムが空のレコードだと保存できなくなる。その制約は、『t.string :name』に『null: false』と記述することで設定できる。

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name, null: false
      t.timestamps null: false
    end
  end
end

 

⑵一意性制約

 テーブル内で重複するデータを禁止する制約。emailカラムに対して一意性制約を設定することで、同じemailのレコードは保存できなくなる。

 

⑶主キー制約

 そのデータが空になることがなく、かつ重複していないことを保証する制約。主キーに対して、NOT NULL制約と一意性制約を両方設定するのと同義になる。

 また、Railsでテーブルを作成する際、主キー制約はidカラムとして自動で生成される。

 

⑷外部キー制約

 外部キーの対応するデータが必ず存在しなくてはいけない制約。関連性のあるテーブル同士を結びつける場合に、対応する外部キーのカラム後に記述する。

 t.型 :カラム名, foreign_key: true

 

⑸チェック制約

 値が保存される際に条件を満たしているかチェックできる制約。

 

ER図

DBのテーブルなどを図で表記したもの。