【パーフェクト Ruby on Rails】を読む - その3

1-4scaffoldを使ってRailsでの開発を体験しよう

1-4-1

% ls -1FA db/migrate

lsコマンド : ファイルやディレクトリの情報を表示することができます。
ls -1FA db/migrateの分解
・・・ 1 = ハードリンクの数(ハードリンクはファイルのあだ名のことです。)
・・・ F = 名前の後ろにファイル識別子を付ける
・・・ A = カレントディレクトリ(.)と親ディレクトリ(..)以外のピリオド始まりのファイルやフォルダも表示されるようになります。
aをつけるとカレントディレクトリ(.)と親ディレクトリ(..)も表示されます。

--skip-action-cable?🤔これだけイメージつかん何だろ

フロントのWebSocketとバックエンドのRails周りをシームレスに統合する、フルスタックなフレームワーク。つまり?…
ユーザーが任意のタイミングで通信を開始した時にフロントとバック(Rails部分)の繋ぎ目をなくす役割。それが無いと何の影響が出るのかわからない。

Action Cableとは

Action Cableとは双方向通信を低コストで行うために、WebSocketsとRailsをつなぎ目がないくらい、自然な感じで統合するためのフレームワークという認識でOKです。

Action Cableを利用することで、たとえばリアルタイムで更新されるチャット機能を実装することができます。

3ウェイハンドシェイク(web技術の基本P61)での1つ目のコネクションの確立を行ったら、そのまま繋いだままにしておく事ができます。
なのでリアルタイムのやり取りにおけるチャット機能で用いると良さそうです。

WebSocketってそもそもなに??

WebSocketはXMLHttpRequest(WebサーバーとHTTP通信を行うためのAPI)の欠点を解決する技術として開発された。

TCP/IPプロトコル通信とは

ネットワークインターフェイス層(1層)、インターネット層(2層)、トランスポート層(3層)、アプリケーション層(4層)で構成され、機器やOSが異なっても共通のプロトコルを用いて通信を成立させることができるものです。

各層の役割

ネットワークインターフェイス層(Layer1)

  • 同一のネットワーク内でデータを転送すること。有線のイーサネット無線LANWi-Fiを組み合わせることでローカルネットワークを構築を可能にする。
  • 端的にいうと「データを共有する始まりの場所」🚛💨<これから出発!

    インターネット層(Layer2)

  • 多数のネットワーク同士をルータを用いることでネットワーク間でデータを転送を行います。これをルーティングと呼びます。
  • 端的にいうと「データを色々な所に送る場所」🚚💨<ワイは南か…

    トランスポート層(Layer3)

  • パソコンやスマートフォンでネットワークを介した複数のアプリケーションを普段使う中で、適切なアプリケーションに流れているデータを送る役割をはたします。
  • 端的にいうと「データの目的地、住所を示す場所」🏣🛵💨<行ってきまーす!

    アプリケーション層(Layer4)

  • アプリケーションで扱うデータのフォーマットや手順を決める役割を果たします。
  • 端的にいうと「データを人間が見てわかるように変換してくれる所」🙋‍♂️🎁<サンキュ!

イーサネットとは

イーサネットというのは、パソコンなどの機器を有線接続する際の通信規格の一つです。 「規格」なので、有線接続のルールともいえます。 ... 「イーサネット対応機器」というのは一般的に、LANケーブルを差せるということです。 そのため、イーサネットとLANケーブルはほぼ同義と考えても問題ありません

1-4-2

rails dbconsoleコマンドライン上からデータベースの中身の確認や編集をすることができるコマンドです。
MySQLPostgreSQLSQLite、SQLite3といったデータベースでも利用可能)
- .table : テーブル一覧の表示
- .schema テーブル名 : 指定したテーブル構成の確認

$ rails dbconsole
SQLite version 3.32.3 2020-06-18 14:16:19
Enter ".help" for usage hints.
# 作成したテーブル一覧を表示
sqlite> .table
ar_internal_metadata  bookmarks             schema_migrations   
boards                comments              users 
# usersテーブルの内容
sqlite> .schema users
CREATE TABLE IF NOT EXISTS "users" ("id" integer NOT NULL PRIMARY KEY, "email" varchar NOT NULL, 
"crypted_password" varchar DEFAULT NULL, "salt" varchar DEFAULT NULL, "created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL, "last_name" varchar NOT NULL, "first_name" varchar NOT NULL,
"avatar_image" varchar DEFAULT NULL, "reset_password_token" varchar DEFAULT NULL, 
"reset_password_token_expires_at" datetime DEFAULT NULL, "reset_password_email_sent_at" datetime DEFAULT NULL, 
"access_count_to_reset_password_page" integer DEFAULT 0, "role" integer DEFAULT 0 NOT NULL);
CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email");

rails db:migrate を実行すると、まず初めにschema_migrationテーブルを読みに行きます。実行されていないmigrationファイルを実行し、新たなmigration IDを付与します。migrate IDは日時(UTC)が入ります。

**20200514151200**_create_tasks.rb

参照

lsコマンドとオプションについて https://qiita.com/chihiro/items/6e1404c41e1236a9efe1

WebSocketとAjaxの違いについて
https://teratail.com/questions/1037

TCP/IPとは
https://www.itmanage.co.jp/column/tcp-ip-protocol/

rails dbconsole(rails db)で利用できるコマンド
https://qiita.com/k-o-u/items/a9b5e5472ba8415dd1aa