りゅうじの学習blog

学習したことをアウトプットしていきます。

2021年9月10日 図解入門 TCP/IP

1.3.2 データリンク層で動作する機器

データリンク層は、物理層の信頼性を確保し、同じネットワークにいる端末と接続できるようにする階層です。 データリンク層で動作する機器は、フレームのヘッダーに含まれるMACアドレスの情報をもとにフレーム転送を行います。MACアドレスデータリンク層における住所、つまり識別子です。

ブリッジ

ポートとポートと間ののような役割です。端末から受け取ったMACアドレスMACアドレステーブルという表で管理し、転送処理を行います。この転送処理のことをブリッジングといいます。※ ブリッジは、最近はL2スイッチに置き換えられ、単体機器として見ることはありません。

L2スイッチ

たくさんポートを持ってるブリッジです。
端末から受け取ったフレームのMACアドレスをブリッジ内のMACアドレステーブルで管理し転送処理を行います。

私たちなりに例えると

ブリッジは配送会社で言えば、倉庫(MACアドレステーブル)です。送信端末から荷物(MACアドレス)をトラック1号車1番ポート(1番ポート)で倉庫まで行き、倉庫から転送しトラック2号車(2番ポート)で受信端末まで届けます。    💻    →  🚛   →   🏬   →   🚛   →   🖥
MACアドレス1       アドレスの転送      MACアドレス2

ひとこと
もっと例える力を磨きたい。

参照

MACアドレス
https://www.cman.jp/network/term/mac/

2021年9月10日 パーフェクト Ruby on Rails

2-5 ビューテンプレートについて

2-5-1 ヘルパーメソッドの利用

  • ヘルパーメソッド ViewをよりシンプルにDRYに書くための、Railsで用意されたモジュール。基本的にはviewをhelpしてくれるもの。自分で作ることもできる。

$ rails routesコマンドを打つと表示されるPrefixVerb以下に記載されている部分(例えばuserやprofileなど)に_path_urlなどをviewファイルで付け足す事で、その行きたいviewページまでのurlを簡単に指定することが出来ます。
※ ただしコンソール上で試したい時は先頭にapp.profile_urlというようにします。

一部抜粋
・ url_for
・ link_to
・ form_with
・stylesheet_link_tag
javascript_pack_tag
・ time_ago_in_words
・number_with_delimiter


trメソッド

p106 独自ヘルパーメソッドの定義の項目のコード

# app/helpers/application_helper.rb
module ApplicationHelper
  def to_hankaku(str)
    str.tr("A-Za-z", "A-Za-z")
  end
end

全角英文字を半角に変換するヘルパーメソッドでtrメソッド について学びました。
今回の場合はtr("A-Za-z", "A-Za-z")でハイフンの左辺から-の右辺までを指定しています。A-Zで大文字の範囲指定を行い、a-zで小文字の範囲指定を行なっています。大文字と小文字の間に区切りがなかった事で、初見では戸惑いました。

エスケープ処理

フォーム画面にscriptタグなどを書いても基本的には処理されません。これはRails側で守ってくれているのでやらなくても良い事ですが、意図的にエスケープ処理をしないようにする事もできます。

rawヘルパーメソッド

<%= raw "<script>alert('sample');</script>" %>

MVCについてのまとめ

  • Model層について、ActibeRecordの基本的な操作、バリデーション、コールバック
  • Controller層について、ModelとViewを繋ぐこと。リクエストオブジェクトやアクションコールバック、脆弱性への対処。
  • View層について、受け取ったModelを表示すること、テンプレートエンジン、ヘルパーメソッド、さまざまフォーマットでの表示

参照

ヘルパーメソッド
https://qiita.com/Yukaaaah/items/19e524fd0c0e4a3451f1
Ruby 3.0.0 リファレンスマニュアル instance method String#tr
https://docs.ruby-lang.org/ja/latest/method/String/i/tr.html

2021年9月9日 パーフェクト Ruby on Rails

variants

条件によってテンプレートの切り替えができる機能です。接続してきた端末によってPCとは別のテンプレートを表示したいという場合に有効です。

class ApplicationController < ActionController::Base
  before_action :detect_mobile_variant
  
  private
  
  def detect_mobile_variant
    request.variant = :mobile if request.user_agent =~ /iphone
  end
 #app/views/books/show.html+mobile.erb
   略
   <h1>本の情報(for mobile)</h1>

/iphoneの前にある=~はなんだろうと思いました。

=~の戻り値はマッチすれば真、マッチしなければ偽を表すため、if文などの条件分岐でもよく使われます。

今回の場合はアクセスしたのが/iphoneかどうかを後置ifを使って条件分岐しているという事ですね。
正規表現と文字列を比較する場合によく使われます。

request.user_agentとは

ユーザーエージェント (User Agent)とは、ウェブサイトへアクセスする際に使用されるプログラム、あるいはそれらを識別するための文字列のことを指す。

こちらのQiita記事に詳しく記載されています。rack-user_agentというgemがとても便利ですね。 https://qiita.com/reeenapi/items/5c088561363cd8b00332

PC専用のサービスを作っていて、モバイル専用のページを作りたいときにvariantsはとても便利ですね。

ひとこと
ひとりでも継続します。

参照

Ruby 3.0.0 リファレンスマニュアル instance method String#=~
https://docs.ruby-lang.org/ja/latest/method/String/i/=3d=7e.html
正規表現とは https://userweb.mnet.ne.jp/nakama/
Railsドキュメント request.user_agent
https://railsdoc.com/page/request
ユーザーエージェント
https://www.irep.co.jp/knowledge/glossary/detail/id=10210/
RailsでUserAgentの情報を取得して簡単に扱いたい
https://qiita.com/reeenapi/items/5c088561363cd8b00332

2021年9月8日 パーフェクト Ruby on Rails

2-3-5 StrongPrameters

想定通りのパラメータかどうかをホワイトリスト方式でチェックする機能です。

  • マスアサイメント
    データベースに保存されるカラムを一括で指定できる機能
  • コントローラーのprivateに記載する

検証ツールなどで想定外の項目を追加して送信された際に、ホワイトリスト以外の人を入店拒否するための機能がストロングパラメータです。

検証ツールを開いて
👨🏻‍💻< admin: true追加したろ!
🖥< えーと…ホワイトリストに:adminはないよ?そんなパラメータは許可してないで!
👨🏻‍💻<なんだってー!

2-4 コントローラーとビューの協調とビューテンプレートの基本

2-4-1 レンダリングまでの流れ

app/views/コントローラー名/アクション名.html.erb

class SurfsController < ApplicationController
def board
end # render記載の省略ができる さらに省略すると def board; end で1行でイケる!

renderとredirect_toの違い

  • render 表示させるviewを指定し表示(controllerに遷移する前の値を保持したい場合はrender)
  • redirect_to URLをもとにviewを表示。(値を保持しない)

redirect_to @userというのが出てきた場合 Railsでは()を省略してくれてる+省略に省略を重ねて上のようになっている 本来は↓なので注意 redirect_to user_url(@user.id)

  • 相対パス そのファイルや行きたい先へのルートを明確に示してあげたものです。
  • 絶対パス そのファイルの住所のみを記載し、道順は示しません。

ひとこと

ホワイトリストってワードは技術書でよく出てくるから知っておいてね


参照

attr_accessor
https://pikawaka.com/ruby/attr_accessor
ホワイトリスト方式セキュリティの仕組みと効果
https://www.hitachi-solutions-create.co.jp/column/security/white-list-security.html
Rails】renderとredirect_toの違いと使い分け
https://qiita.com/morikuma709/items/e9146465df2d8a094d78
redirect_to @userが何を省略しているかわかりますか?〜挫折しないRailsチュートリアル7章〜
https://qiita.com/Kawanji01/items/96fff507ed2f75403ecb

2021年9月7日 図解入門 TCP/IP

定番プロトコル

各階層に「ほぼこれを使用する」という定番プロトコルが存在しています。
- 有線環境 イーサネット
- 無線環境 IEEE802.11
- ネットワーク層 IP 一択
- トランスポート層 通信の信頼性重視ならTCP リアルタイム性重視ならUDP
- アプリケーション層 HTTP HTTPS QUIC DNS の4択

ネットワークを構成する機器

・前提として

存在するネットワーク機器が全ての階層のプロトコルを見て処理できるわけではない

物理層で動作する機器

物理層は、ケーブルやコネクタの形状、そのピンアサイン(ピン配列)など、物理的な仕様について、全て定義されている階層です。 物理層で動作する機器は、パケットを光/電気信号に変換したり、電波に変調したりする機能を持っています。

NIC
PCやサーバーなどのコンピューターをネットワークに接続するために必要なハードウェア。全てのネットワーク端末は、アプリケーションとOSが処理したパケットをNICを通してLANケーブルや電波に流します。

リピーター
LANケーブルを流れる電気信号は、伝送する距離が長くなるほど減退し、100m近くなると波形が壊れます。リピーターは、それをもう一度増幅して、波形を整えて、もう片方に転送します。これで伝送距離を延ばして、より遠くへパケットを届けられるようにします。(光ファイバーケーブルの普及もあってあまり使われなくなってきています。)

リピーターハブ
受け取ったパケット(ビット)のコピーを、他の全ポートに転送する機器です。

メディアコンバーター
メディアコンバーターは電気信号と光信号を相互に変換する機器です。

メディアコンバーターを私たちなりに例えると

データ(ボール)を届けたくて、ターザンロープ(LANケーブル)でいけるところまで行ったが、着地地点までいけなかったので、その途中を光信号(ぶん投げる)にして遠くまで飛ばして、着地地点に届ける手法。

⛰🚡🤽=✨=>🥎🤲🚡⛰

アクセスポイント
パケットを電波に変調・復調する変換器です。
無線と有線の架け橋になっているので、身近なところではWi-Fiルーターをアクセスポイントとしています。

ひとこと

例え をがんばりました。

参照

本書のみ

2021年9月7日 パーフェクト Ruby on Rails

2-2-4

ルーティングとリソース

resources

resourcesメソッドとは、railsで定義されている7つのアクションのルーティングを自動で作成するメソッドです。 resourcesメソッドを使うことにより、簡単にルーティングを作成することができます。

idを持つルートに限り
それぞれがidを持った個人のページを持ち、URLに表記されるidからページの場所を探してきます。

resource

みんな一意のルーティングでページの場所は一緒になります。表示させる内容はそれぞれviewで変更しているだけです。

memberとcollectionの違い

どちらもルーティングをネストさせる時に用いますが、memberにはURLにidが含まれます。例えば、特定の投稿に対して、ブックマークする時などに使用します。
collectionはURLにidを含みません。
- memberは特定のデータに利用する - collectionは全体のデータに利用する

例)
collectionは昼会でmemberは特定の誰かを指す。


2-3-4例外処理

何かしらのエラーが起きた時は基本的にRails側でよしなにやってくれているものですが、特定の動きをした時に行なって欲しい例外処理を自分で作ることができます。
そういった場合にはコントローラーにrescue_formを使い記述します。

CSRF対策として、データの変更などのリクエスト時にセキュリティトークンも同時に発行し、それを検証することで自身のアプリケーションからのリクエストであることを証明する手法がとられています。

参照

2021年8月19日 現場Rails Chapterr6 (routes.rbについて)
https://morning-6.hatenablog.com/entry/2021/08/20/093820

2021年9月6日 図解入門 TCP/IP

1.2.4 標準化団体がプロトコルを決める

IEEE

比較的ハードウェア寄りのネットワーク技術の標準化は IEEE802委員会 で研究及び議論されています。
IEEE802の802は、1980年2月に発足したことから付けられた名称です。

IETF

比較的ソフトウェア寄りのプロトコルのほとんどが策定されている。

ハードウェアとソフトウェアの違い

それぞれがお互いの領域に侵食せず、参照するような形で標準化を進めるようになっているため、うまく共存できています。

1.2.5 各階層が連携して動作する仕組み

カプセル化と非カプセル化

送信端末は、アプリケーション層から順に、それぞれの階層でペイロードにヘッダーをくっつけて、PDUにしてから、ひとつ下の階層に渡します。

私たちなりに例えると

送信側でアプリケーション層でPDU(ダンボール)にデータ(ペイロード)を入れてヘッダー(伝票)を貼り、次の層へ違う名前を持たせながら渡していく工程をカプセル化と呼び、受信側では逆に伝票を剥がしながら上の階層へ渡していきます。これをカプセル化と呼びます。


コネクション型とコネクションレス

全部自動でやってくれてるのでユーザーは意識することはありません(すごい!🙌)

・コネクション型

最初に相手に対して 「送っても良いですか?」 と伺って
相手が 「良いですよ」 と確認してからデータを送る(3ウェイハンドシェイク)
しっかりとした手順を踏むため、転送に若干時間がかかりますが、確実にデータを転送する事ができます。
メリット
確実にデータを転送する
デメリット
少し遅い


コネクションレス

いきなり相手にデータを送りつけ、勝手に終了する。
メリット
速い
デメリット
必ず届くとは限らない

郵便配達をイメージするとわかりやすい。🏣🛵💨


参考

ハードウェアとソフトウェアについて
https://tech-camp.in/note/technology/86966/