テックキャンプ 応用 データベースまで

🔳🔳13日目

 

🔳データベース設計とは
作成するサービスやシステムな必要な情報をどのように
データベースで管理するかを決める作業。

◎いつ行うのか
開発の最初の段階
プログラムを書き始めるよりも前

◎基礎知識
現実世界の要素をデータに落としこむ作業
例)顧客=ユーザー
顧客という概念(エンティティ)と情報(属性)
他の情報の関係性(リレーション)

🔳エンティティ
管理する必要にある概念(情報)
例)SNS
ユーザー、投稿内容、コメント、いいね

🔳エンティティの属性
エンティティが個別に持つ情報のこと。
例)ユーザー
名前、アドレス、パスワード、トプ画、ID

🔳リレーション
エンティティとエンティティとの間に存在する関係性のこと

🔳データベースの設計の手順
1,データベースで管理するデータ(エンティティ)を決める
2、それぞれのデータの属性を決める
3,エンティティ同士の関係性を決める(リレーション)
4,データを実際にデータベースのテーブルとして定義する

🔳レコードとカラム
◎レコード
エンティティの具体的なデータ(id, tanaka)
◎カラム
エンティティの属性(名前、email)

🔳リレーション
◎テーブル同士の関係性のこと

🔳キー
・テーブルのキーは、レコードを識別するための特別なカラム

 

🔳SQL
・リレーショナルデータベースの操作を行うための言語

🔳DDL
◎データを定義
・CREATE=データベースやテーブルの作成
・INT=数字、・VARCHAR(M)=最大M文字の文字列
・ALTER=更新
DROP=削除

🔳DML
◎データを操作
・INSERT=登録
・UPDATE=更新
・DELETE=削除
・SELECT=検索。テーブルにあるレコードを全て表示

🔳SQLでよく使いそうなやつら
◎SHOW DATABASES;
・データベースを一覧で表示
◎USE 〜〜;
・データベースを選択
◎SHOW TABLES;
・選択したDBに存在するテーブルを一覧表示
◎SHOW columns FROM ~~;
・テーブル構造を確認

◎FROM句
・検索するテーブル名を指定
◎SELECT句
・取得するカラム名を指定
ワイルドカード
・文字の代わりに使える記号。強そう。
◎WHERE句
・取得するレコードを制限
◎AND演算子
・複数条件指定して式を作り、全部正なら正になる
◎OR演算子
・複数条件指定で、どれか1つ以上正なら正になる
◎NOT演算子
・条件1つで、当てはまらないレコードが取得できる
◎BETWEEN演算子
・上限と下限を指定して、カラム値が範囲内なら正
◎IN演算子
・1つのカラムにリストを指定し、カラム値が含まれるなら正

◎CONCAT関数
・複数の文字列を連結できる
◎AS句
カラム名に別名を付けれる(省略可)
◎DISTINCTキーワード
・カラム値が重複する行を除外してデータ取得できる
◎GROUP BY句
カラム値が同じのデータを1つのグループとしてまとめる
◎COUNT関数
・グループ化されたデータに使える集計関数の1つ(NULL以外の行数を取得)
◎JOIN
・指定したそれぞれのテーブルの、カラム値が一致するデータを結合できる
🔳サブクエリ
ある検索結果を使って別のSQL分を実行(検索をさらに検索)

 

◎主キー
レコードを識別するための識別子。大体idが主キー

◎外部キー
関連する他のテーブルのレコードの主キーとして値を持つカラム

🔳制約(バリデーション)を使って設計
◎NOT NULL制約
・空欄(nil)を絶対に許さない警察
◎一意性制約
・テーブル内で重複するデータを禁止する
◎主キー制約
・主キーである属性値が必ず存在して、かつ重複してないことを保証
Railsではidカラムとして自動で生成される
◎外部キー制約
・外部キーに対応するレコードが必ず存在しなくてはいけない

🔳インデックスとは
・カラムに設定して、テーブル内のデータ検索を高速化できる。
・インデックスを貼ると言う。

🔳正規化とは
データ構造をより効率的で重複や無駄のないシンプルな構造にするための手順

◎なぜ正規化は必要?
カラムが混在するから

🔳正規化の順番
◎第一正規形
重複するカラムがない

◎第三正規形
主キーに依存しているかつ、非キー属性同士の依存がない

🔳エンティティの洗い出しのポイント
・データが登録する時に着目
🔳エンティティのリレーション
・多数の方に外部キーを設定

🔳多対多
・一つの投稿に対していろんなタグがついてる。中間テーブルが必要な物

🔳中間テーブル
・複数のテーブルとの関係の間を保つ役割。いいヤツ
◎has_many throughオプション
◎<<メソッド

🔳README
・マークダウンで書かれて、使用、規格、インストール方法などを文章化したやつ

 

 

🔳🔳12日目

 

jQuery
JSを簡単に分かりやすくしたやつ

🔳GitとGitHub
プログラミング言語ではない
開発の作業順序の管理や、共同作業のための仕組み
これがないと他のエンジニアと共同作業できない

🔳Git
アプリケーションなどのプロジェクトをバージョン管理してくれるシステム

🔳GitHub
・Gitの仕組みを使って複数人で開発ができるようにしてくれるツール
◎特徴
・世界中のあらゆるプロダクトが保存、公開されている
・グラフィカルな画面からGitを扱うことができる
・チーム開発に便利な様々な機能が用意されている

🔳リポジトリ
◎Gitの管理下にあるファイルやディレクトリの変更履歴を保存する入れ物。2種類ある
・ローカルリポジトリ
・リモートリポジトリ

🔳Gitのver管理流れ
1. 変更修正が一覧になっている
2. 同じバージョンとして記録したいデータを抜きだして登録する
3. バージョンを記録する

🔳インデックス
verを記録するためにファイルを一時的に登録する場所

🔳コミット
インデックスに追加された変更修正をver記録する操作

◎git commit -m '任意メッセ追加'

🔳ブランチ
リポジトリで管理しているプロジェクトの流れを記録する場(枝)
・1つの主流から枝のように分かれてプロジェクトが管理できる

🔳master ブランチ
・最初にコミットを行うと自動で生成される
・大元のブランチになることが多い

🔳トピックブランチ
・ブランチを作るにはすでにあるブランチをコピーしないとダメ!
つまり、次に作るブランチはmasterブランチのコピー、
それをトピックブランチと言う。

🔳プルリクエス
・1つのブランチでの作業について話せる掲示板のようなもの
◎作成時のポイント
タイトルに[WIP]、#whatと#whyを書く

🔳プル
リモートリポジトリの変更をローカルリポジトリに取り込む操作のこと

🔳デプロイ
アプリをサーバー上で利用可能な状態にすること

🔳コンフリクト
ブランチごとに情報が異なり辻褄が合わないこと

🔳Behind
・現在のブランチよりも比較するブランチが進んでいる変更履歴
つまり、既にマージとpull originしてる

🔳Ahead
・現在のブランチが進めた変更履歴
つまり、まだマージとpull originしてない

◎読みやすいコードを書くために、演算子に半角スペースを1つ入れる
悪い例)1+1=2
良い例)1 + 1 = 2

 

 

 

🔳🔳11日目


🔳良いコードの要素
命名規則
・的確で具体的な単語
・汎用的な名前を避ける
・名前に情報を含める
・誤解されない名前
➡️よく出る英単語
set=代入
add=追加
render=返す
import=読み込む
fetch=情報取ってくる
modify=部分的に修正
apply=適用する
remove=取り除く
is=調べてtrue/falseで返す
◎コードのレイアウト
・整列
・一貫性
・ブロック化
◎コメント
・なぜこのコードを書いたか背景や理由を説明
・他の開発者へのメモを残す
TODO(いつかやる)、FIXME(直せる人直して)
・実際の例を記入する

🔳良いコードのまとめ
◎実際に学んだことを実行
・自分以外の人にコードを最短時間で理解してもらうコード
◎当たり前に「読みやすいコード」を書く
◎コードで伝える

🔳リファクタリングとは
・処理の内容を変えずに冗長なコードを削除したり改善する事

🔳リファクタリングのメリット
◎読み手が最短時間でコードを理解できる
◎修正しやすい

🔳リファクタリングを行うためには
◎制御フロー
・条件式の並び順(左=調査対象、右=値が変化しない比較対象)
・if/elseの順番(肯定形を使う、単純or関心を引く条件を先に書く)
・関数から早く返す(return文)
・ネストを浅くする
◎式の分割➡️説明変数を使う
メリット
・大きなコードの塊を分割できる
・簡単な名前で式を説明することでコードを文章化
・概念を読み手が認識しやすくなる
◎変数
・不要な変数を削除
・変数のスコープを小さく
・変数は一度だけ使う
◎メソッドの抽象化
◎関心(機能)の分離
◎短いコードを書く
・汎用的なコードを作り、重複コードを削除
・未使用コードや無用の機能は削除
・最も簡単に問題を解決できる要求を考える
・定期的に全てのAPIを読み、標準ライブラリに慣れ親しんでおく。

 

🔳正規表現とは
◎文字列に特定の文字が含まれてるかを確認することや、
特定の文字を取り除くなどの操作を行うための技術

🔳正規表現の特徴
◎文字列の一部を置き換え
◎文字列が成約を満たしているか調べる
◎文字列の一部分を抽出

🔳正規表現を実現する2つのメソッド
・sub(gsub)
・match
・split

jQueryだと、DOM要素の取得を全部共通の$("セレクタ名")で書き換えれる

分からないことはいきなり検索せず、
仮説を立ててから調べる

 

🔳🔳10日目

 

🔳応用のアウトプット
◎アウトプットのポイント
新規性にとらわれず、気づいたことをアウトプット

質問する前に仮説検証する。
課題整理のレベルを上げる(具体性を上げる)

■解決したいこと
エラー文や、今起こっているトラブルを端的に書く

■自力で調べた内容
検索エンジンを用いた際の検索ワードについてや読んだ記事のリンクを書く

■仮説と検証作業の結果
検索して得た情報から立てた仮説と、その検証作業による結果を書く

①トップページが明確にどのviewの事か
②出力されたエラーメッセージを記述し、キャプチャ画像も添付した
③Nomethodエラーは基礎でも出力されるエラーであったため、
一度触れたトラブルシューティングの内容を復習してみた
④パスについてのエラーメッセージが出力されており、
ルーティングがおかしいと仮説を立てた。
カリキュラムのroutes.rbの内容と見比べ検証を行ってみた。

検索力とは
①目的にあった検索結果を表示させるためのキーワード選び
②検索結果から精度の高い記事を探しだすスキル

🔳キーワード選びの技術
◎複数キーワード
◎期間指定で新しい記事
Googleの検索テクニック
・マイナス検索 例)-Qiita
・フレーズ検索 例)"Webアプリケーション開発"
◎英語
・よく使う英単語
change:変える
save:保存する
default:デフォルトの
compare:比較する
configure:設定する
override:上書き
install:導入

🔳複数キーワードで検索
◎文章を単語に分割
(エラー文等一部例外あり)
◎何に関係のある情報かを含める
◎意味を調べる時は「とは」をつける

🔳精度の高いサイトを見つける技術
◎サイトは1ページ目から探す
◎信頼できるサイト・著者を知る
◎一次ソースを調べる
◎間違った情報を嗅ぎとる