花金のプレ金で教室に向かう電車が遅延するハプニング【TECH::EXPERT】

TECH::EXPERT プログラミング 応用カリキュラム編

【本日のメニュー】
・データベース設計
・学習の進め方
・電車でSass
・カフェでRails
・会社でRuby

【データベース設計】
▼テーブルの構成要素
エンティティは現実世界で扱うデータのことで、それを表に入れてテーブルと総称している。
テーブル=エンティティという考えでも差し支えないらしい。

異世界のゲームのデータテーブルは、現実世界のデータと異なるからエンティティではなくなるの?
という問いに対しては、「現実世界の退屈という闇から生まれたゲームが持つデータなのでエンティティ」
とでもいうのだろうか(未確認)

▼キーの役割
キーと呼ばれる特殊なデータが存在します。キーの役割はレコードを識別すること。
よぐわがんにゃいから、キーはレコードとおともダチ❤️として次に進むとしよう。

▼キーの種類
[主キー] レコード同士がバッティングしないようにユニークになっている。idの部分のことを言ってるらしっす。
おもキー?しゅキー? しゅキー! あ、そう。
いっぱいちゅき

[外部キー] ほかのテーブルとつながるためにあるもの
多分user_idとかその手アレだと思います。
このtweetが誰が呟いた?のカラムはuser_idが入っているが、userテーブルではidの部分を見る

▼安全なテーブルの設計
データよトラブルなどを避けるためのテクニックを学ぼう

[制約をつける] このデータの状態は入れられないというレギュレーションをつける。Railsでいうところのバリデーション。

[制約の種類] ・NOT NULL制約
・一意性制約
・主キー制約
・外部キー制約

らしい。Null禁はわかるけど他はわからないですね。
んじゃ進めましょう。

[NOT NULL制約] データが空の状態(nill)の場合はエラーとなる。空データは入れてはいけない。
必須項目などに使用するのだろう。
チャットスペースロケハンしましたが、ユーザー情報と、グループ名が必須でした。

[一意性制約] 主キー(id)が重複できないユニークなものが入るよ!って書いたあったけど、
それとにたような感じで、データカ入れるカラムのその中で重複できないの意味。
例えばすでに登録されているメールアドレスが登録できないなど。
Twetterだと、ユーザーID(@hoge)は被れないですよねー

[主キー制約] レコードが必ず主キーを持っていなくてはいけないことを保証するための制約。
まあ、確かにidないと何もかもやっていられないよね。
エクセルだと揃ってから項番振り直すけど、DBは勝手に主キーがついて、消したら歯抜けみたいですね。

>Railsでテーブルを作成する際、主キー制約は元々実装されています。Railsでは主キーはidカラムとして自動で作成されます。つまりidカラムの値は重複しないようにできています。

[外部キー制約] 説明だけ読むと全くわからん。カリキュラムの言う通りレッツトライ!
要約すると、外部のテーブルをcとかで呼んでるけど、
userテーブルではId4がいないのにuser_id4に情報入れないでください!
と言う意味でした。
いない人、存在しないレコードに紐づけられないよ。当たり前だよなぁ?
当たり前〜当たり前〜当たり前エラー
ユーザーがいないのに、情報を紐づけると、エラー♫
当たり前エラー♫

▼インデックスでデータの検索を高速化
なんか、インデックスっていろんなところで使われる言葉ですけど、データベースの中を探すのが早くなるらしいっすよ。
説明読んでもわからないので進めましょ。

今はわかったこと。
・検索は早くなる
→検索しやすくするらしいよ。
・保存、更新がそくが遅くなる。
→インデックスと言うものを作ることによって、保存更新の時にインデックスを考慮するためその分の時間がかかるイメージ。なくてもいいならつけない方が処理が早いかもしれないよってこった。
・データベース容量を食う
→検索しやすくする情報をもつ。だからデータ容量を食うんですね。
・マイグレーションファイルにインデックスをどうこうする指示を書くみたい。

ここら辺わかんなかったので、理解度テストとかデータベース設計とかで回収しにきます。

Pictweetの時にマイグレート失敗してるからつど「bundle exec rake db:migrate:status」で確認してる。

【学習の進め方】
カリキュラムを進めるのが大前提ですが、短時間のうちにやろうとするとあんまり進みが良くないので、
思い切って辞めてみようと思います。
電車、カフェ、自宅ではプロゲート 、教室にきて決められた時間でカリキュラムを進める。に作戦変更です。
進捗やばすぎたら作戦変更するするかもしれませんが。
今日は進捗120%切ってて焦っていつもより進みが早い気がします。
進捗自体の進みは少ないですが、いつもだったら平日夜学習2回分を1回で終わらせた感じだなー。
なんで、この学習報告の文章もなんだか駆け足に見えませんか?
ということで、ドキドキチキチキ進捗レースを楽しみます。

【電車でSass】
相変わらずiPadでプロゲートやっとります。
iPadだとファイル作成系操作がうまく行かないのでそれがなさそうなレッスン選んでやってます。
というわけでSass。カリキュラムにもあるしね!
一周終わったので、Rubyを復習しようかなと思います。
然るべき時がきたらjQueryをゴリゴリやる予定。

【カフェでRails】
カフェではMakbook出せるので堂々とrailsしました。
プロゲートでrailsやっているのですが、pictweetに似たようなもの作ってます。
めっちゃ周回プレイしてレベル上げしようと思います。
道場コースっていうのがあって、コメントアウトで書いてあるヒントとか、
事前学習的なスライドが見れないっていうのもあって、
それは何度か周回踏んだらやってみようかと思います。

【会社でRuby】
会社でサイトの解析というか確認というか、そういうのをしていて、
サイト構造上うまくデータ取れないページがあるらしく、
Jsスクレイピングあたりでやってみようかと画策しましたが、難しかったです。
というのも、スクレイピング・クローリングに対する記事が少なすぎて、
計算はしてないですが、肌感はこんな感じ。

Python:80%
Ruby on rails(Ruby含む):15%
Javascript:5%

なので、会社の人に頼んでRubyをWinにインストールする許可をいただきました!
リンク切れチェックをしたいのですが、今の手持ちのソフトだと役不足なので、
それを解消するためのお手製プログラムを作るつもりです。
勉強にもなるし、役立つものが作れたら嬉しいな!
ってことでインストールを始めたのですが、winのRuby環境作るのわかんねー!
カリキュラムのインストールのくだりってすごくわかりやすいんだと思います。

なんか、Gemを使うためにdevkitなるものを入れなきゃいけないらしいんだけど、
情報サイトのやり方見ながらやってるけどうまく行かないんだよねぇ。
また来週チャレンジだわさ!

Pythonでもできるらしいけど、railsのスクレイピングもやったし、
これからの課題も考えるとRubyで挑戦。
一応それ専用の書籍(スクレイピング、クローラーをRubyで云々的なやつ)
ニッチだなぁ。ニッチなの?ほんもでてる…。
そんなこんなで実践できる環境っていいよね。涙出る。いっぱいチュキ。