Output Diary

プログラミング × 読書 のアウトプットを発信しています

【Rails】NOT NULL制約とは

f:id:kina_kq:20210429084524j:plain

 

NOT NULL制約とは、

データベースのテーブルの項目につける制限(制約)のひとつで、

「空っぽの値(NULL)は入れちゃダメ制約」のことです。

 

NULLは「空だよー何も入ってないよー」ということをあらわす単語です。

NOT NULL制約が付与された項目にはNULLを入れることが出来ません。

 

NOT NULL制約とバリデーションではどう違う?

 

NOT NULL制約は、テーブルのカラムを定義します。

一方、バリデーションはモデルのバリデーションに記述します。

 

どっちもよく似ている感じがしますが、

両者の違いは空文字("")が許可されるかされないかの違いです。

 

「NOT NULL制約」は空文字が許可される一方、

バリデーションの「presence: true」では空文字は許可されません。

 

空文字含む全てのnullを許可したくない場合には「NOT Null制約」とバリデーションの「presence: true」の両方に記載しておくと安心です。

 

参考

IT用語辞典 NOT NULL制約

【Rails】1分で分かる!Not Null制約とpresence: trueの違いについて簡単にまとめてみた|TechTechMedia

 

 

【基本情報】テスト

f:id:kina_kq:20210428095102j:plain

 

今日は「テスト」についてまとめていきます。

 

人間によって書かれたプログラムにはどうしても記述ミスなどが発生してしまいます。

この記述ミスなどによる欠陥のことをバグと呼びます。

バグとは虫のことでその部分が食われているようなイメージです。

 

そんなバグを発見し無くすために「テスト」があります。

正しい品質のシステムを提供するためにはテストの存在はとても重要になってきます。

 

テストの流れ

 

単体テスト結合テストシステムテスト

 

単体テスト

 

テストは、まず部品単体の信頼性を確保するところから始まります。

この時に行われるのが、単体テストと呼ばれるやつです。

 

この単体テストでは、ブラックボックステストホワイトボックステストという手法を用いて検証を行います。

 

ブラックボックステスト

→システムの内部構造は考慮せず、仕様を満たしているかどうかのみを検証するテスト技法のことです。

ホワイトボックステスト

→システムの内部構造を理解した上で、それが意図通りに動作しているかを確認するテスト技法のことです。

 

結合テスト

 

単体テストがおわると、結合テストに入ります。

結合テストでは、複数のモジュールを繋ぎ合わせて検証を行い、モジュール間のインターフェースが正常に機能しているかなどを確認します。

 

結合テストでモジュール間のインターフェースを確認する方法にはトップダウンテストやボトムアップテストなどがあります。

 

トップダウンテスト

→上位モジュールから先にテストを済ませていくテストです。

 

ボトムアップテスト

→それとは逆で下位モジュールからテストを行うのがボトムアップテストです。

 

トップダウンテストとボトムアップテストを組み合わせて行う折衷テストや、

すべてのモジュールを一気につなげてテストをするビッグバンテストもあります。

 

システムテスト

 

最後はシステムテストです。

別名総合テストとも呼ばています。

 

実際に使用される状況と同じ設定でテストを行い、

開発したシステムが期待通りに動作するか、構築したシステムが仕様書通りの機能や性能要件を満たしているかについて検証します。

 

本番と同じ環境でテストをするので、開発環境では見つからなかったバグを発見することもあります。

 

納品前に全体を通したテストをすることで、システムの品質を確保することが出来ます。

 

参考

ブラックボックステスト~概要、技法、テスト観点について~ | ソフトウェアテスト・第三者検証ならウェブレッジ

みんな知ってるホワイトボックステスト、ブラックボックステスト。でもグレーボックステストとは…? | ハートランド・ザ・ワールド

システムテストとは?開発段階のテストの流れと主な種類|発注成功のための知識が身に付く【発注ラウンジ】

 

【ネットワーク】4Gと5Gの違いについて

f:id:kina_kq:20210426100120j:plain

 

 

今日は4Gと5Gの違いについてまとめていきます。

 

各世代の移動通信システム

 

f:id:kina_kq:20210426152246p:plain

画像引用元(https://linksmate.jp/article/mvno_3g/

 

GはGenerationの略です。

2000年代には入ってから、3Gが主流となりました。

世代があがるごとに速度が高速化されていっています。

 

現在ではまだまだ4Gが使われることが多いです。

徐々に5Gのエリアが拡大しつつあるといった感じです。

 

 

4G→5Gにするメリット

 

・通信速度を格段に上がる

・同時接続数も増える

・遅延が減る

の3つです。

 

1つ目の、「通信速度を格段に上がる」に関しては、

4Gの通信速度は100Mbps〜1Gbpsに対し、

5Gでは最大100Gbpsとなり、100倍以上速くなると予測がされています。

 

5GになることでYoutubeとかもサクサク見れそうですね👀

 

5Gになることのデメリット

 

デメリットもあります。

サイバー攻撃を受ける可能性があがるということです。

 

なぜなら、

同時接続数が増えることにより、

サーバー攻撃のターゲットも増えることになるからです。

 

 

まとめ

 

5Gに変わることにより、得られるメリットは大きいですが、

セキュリティには気をつける必要がありそうです。

 

利便性を取れば同時にセキュリティにも意識を向ける必要があるので、

利便性とセキュリティは表裏一体ですね。

 

参考

5Gって何がすごいの?4Gとの違いや未来に起こる変化を知ろう | WEB担当者の活用帖【ナレッジ・デポ】

3G、4G/LTE、5Gの違いとは?対応エリアなど3G、4G/LTE、5Gの疑問にリンクスメイトがお答えします! | リンクスメイト -LinksMate-

5Gとは?4Gとの違いやメリットデメリット、セキュリティ対策まで徹底解説

【Rails】form_withについて

f:id:kina_kq:20210425125010j:plain

 

forma_withとは、

railsで情報を送信するためのヘルパーメソッドです。

 form_withにより、簡単にHTMLを作成することができます。

 

form_withの使い方

ビューファイル (データベースに保存しない時)

<%= form_with url: "users_path" do |form| %>
   <%= form.text_field :email %> 
<%= form.submit %> <% end %>

ビューファイル(データベースに保存する時)

<%= form_with model: @user do |form| %>
    <%= form.text_field :email %> 
  <%= form.submit %> <% end %>

 

データベースに保存する時、form_withの引数には

モデルクラスのインスタンスを指定します。

 

 form_withは渡されたものによって、

行うHTTPメソッドとアクションをそれぞれ判断します。

 

form_with url:url_path

 

<%= form_with url: "users_path" do |form| %>
   <%= form.text_field :email %> 
<%= form.submit %> <% end %>

 

pathに対してPOSTメソッドを行うので、

この例だと、users_pathに対してPOSTを行い、

params[:email]のような形でtext_fieldに入力された値を取得します。

 

form_with model: @model

 

モデルに入っているものに対して、2パターンの処理があります。

 

パターン1:新しく作られたものの場合

パターン2:既存のものを呼び出した場合

 

❏ パターン1(モデルに入っているのものが新しく作られたものの場合)

newアクションから渡ってきます。

app/controllers/users_controller.rb
 
def new
  @user = User.new
end
app/views/users/new.html.erb
 
<%= form_with model: @user do |form| # modelを渡している %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

 

このときRails@userの中身が空であると判断し、

createメソッドを呼び出すことを判断します。

 

app/controllers/users_controller.rb
 
def create
  User.create(user_params)
end

private
  # ストロングパラメータ
  def user_params
    paramas.requie(:user).permit(:email)
  end

paramas.requie(:user).permit(:email)

の部分には注意です。

require(:user)のように一度userを呼んでいます。

 

 

 ❏ パターン2(既存のものを呼び出した場合) 

editアクションから渡ってきます。

app/controllers/users_controller.rb
 
def edit
  @user = User.find(params[:id]) # DBから既存のものを取得
end
app/views/users/edit.html.erb
 
<%= form_with model: @user do |form| # modelを渡している %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

 

このときRails@userの中身があると判断し、

updateメソッドを呼び出すことを判断します。

 

app/controllers/users_controller.rb
 
def update
  User.find(params[:id]).update(user_params)
end

private
# ストロングパラメータ
def user_params
paramas.requie(:user).permit(:email)
end

 

超ざっくりしたまとめ

中身がある場合はupdate

中身がない場合はcreate

 

参考

【Rails】form_withの使い方を徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト

【Rails】form_with/form_forについて【入門】 - Qiita

 

 

【Rails】マイグレーション

緑, ミント, 茶

 

今日はマイグレーションについて調べたものをまとめていきます。

 

マイグレーションとは 

 

マイグレーション(migration)は、

Active Recordの機能の1つです。

 

通常テーブルを操作したい場合は、SQLを書かなればいけませんが、

マイグレーションにはSQLを書くことなく、Rubyのデータベース内にテーブル作成することが出来る」機能を持っています。

 

 SQLを書く必要がない理由

 

ActiveRecordという機能がRubySQLに自動翻訳しています。

この機能により、Rubyが記載された所定のファイルを使い翻訳処理を経由してSQLでデータベース操作が可能です。

 

SQLに翻訳される元となるRubyで記載された命令文を、マイグレーションファイルというものに記載します。

 

マイグレーションファイルとは

 

マイグレーションファイルとは、データベースの設計図です。

このファイルを実行すると、記述した内容がデータベースに反映されます。

 

❏ 実行の仕方
$rails db:migrate

 

このコマンドは、

マイグレーションファイルを実行し、データベースに反映させるためのコマンドです。

 

❏ schema_migrationsテーブル

 

これは、migrateが実行されると自動でデータベースに作成されるテーブルです。

マイグレーションファイルのバージョンがこのテーブルにどんどん保存されていきます。

 

マイグレーションファイルは`20XXXXXXXXXXXX_hoge_hoge.rb`のような名前で作成されます。

`20XXXXXXXXXXXX`の部分には日時の情報が自動的に入り、この部分がバージョンを表します。

 

マイグレーションファイルの状態確認

$ rails db:migrate:status

 

scheme_migrationsテーブルにversionがあればup、なければdownと表示されます。

 

< 間違えてカラムを作成してしまったとき>

$ rails db:rollback

 

このコマンドを実行すると、最新のマイグレーションファイルのバージョンがscheme_migrationsテーブルから削除されます。

 

upからdownになったことを確認したあと、マイグレーションファイルを修正し、再度

rails db:migrateコマンドを実行します。 

 

複数のマイグレーションファイルをrollbackさせたいときには、以下のように記述します。

$ rails db:rollback STEP=3

 

<rollbackする際の注意点>

 

マイグレーションファイルを削除するときは注意が必要です。

マイグレーションファイルはデータベースを作成した歴史であり、実行されているマイグレーションファイルは絶対に編集したり削除したりしてはいけません。

(私は何もわかっていないまま編集&削除して、大変な思いをしました笑)

 

エラーのパレード状態になります。

 

<間違って削除してしまったときは>

一旦、rails db:migrate:statusコマンドでマイグレーションファイルの状態を確認します。おそらく、NO FILEと表示されます。

 

なぜNO FILEと表示されるかというと、

schema_migrationsテーブルにバージョンが保存されているためです。

 

 なので、schema_migrationsテーブルから削除してしまったマイグレーションファイルのレコードを削除すれば、NO FILEの表示は消えます。

 

スキーマファイル

 

マイグレーションが実行されると、dbフォルダにschema.rbというファイルが作成されます。これをスキーマファイルといいます。

 

スキーマファイルにはschema_migrationsテーブルの最後のレコードのversionが記録されます。

 

 

参考

Active Record マイグレーション - Railsガイド

DIVE INTO CODE | Railsにおけるマイグレーションとは

Rails初心者がつまずきやすい「マイグレーション」

【Rails】マイグレーションファイルを徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト

【ネットワーク】中継装置

f:id:kina_kq:20210423081716j:plain

 

中継装置とは、

目的の端末までの通信を中継するための装置です。

 

今日は中継装置の種類について説明していきます。

 

ネットワークインターフェースカード

 

 ネットワークカード - Wikipedia

 

ネットワークインターフェースカードとは、

PCなどの端末に内蔵されているLANと接続するための通信装置のことです。

NICと略されたり、ネットワークアダプタとも呼ばれます。

 

ネットワークインターフェースカードには、

MACアドレスが割り当てられます。

 

このMACアドレスは全世界で一意なもので、世の中には重複するMACアドレスは存在しません。LANで接続される機器には必ずつけるようになっています。

 

 ハブ、リピータ

 Ethernet LAN - リピータ・リピータハブ・ブリッジ・スイッチ・ルータ

 

画像出典「https://wa3.i-3-i.info/word1954.htmhttps://www.infraexpert.com/study/ethernet6.html

 

ハブ、リピータとは、

電気信号を中継するための装置です。

 

スター★型のネットワークでケーブルにつながっている端末のすべてにデータが流れるのが特徴です。

 

上の写真でいうとm元締めの機械が「ハブ」にあたります。

 

すべてに送信すると無駄な通信が発生することから、ハブやリピータが利用される場面は少なくなってきています。

 

ブリッジ、L2スイッチ(Layer 2スイッチ)

 

LAN内の端末にデータを送信するための装置です。

流れてきたパケットの「MACアドレス」を確認し、必要があれば他のセグメントへパケットを流す役割を持ちます。

 

Layerは改装の意味で、

L1は電気信号、

L2はMACアドレス

L3はIPアドレス

での制御を行います。

 

ルータとL3スイッチ(Layer3スイッチ)

 

LANとインターネットの間などでデータを転送するための装置です。

データの中の宛先(IPアドレス)を識別して転送します。

 

ルータはソフトウェアを使って中継するために柔軟なルールを設定することができ、L3スイッチはハードウェアで中継するため高度な中継をすることが出来ます。

 

ルータはデータがLANからインターネットへ出ていく際の出入り口となることから、デフォルトゲートウェイと呼ばれています。

 

参考 

ネットワークインターフェースカード | 基本情報技術者試験 無料ビデオ

ハブとは IT用語辞典

ブリッジとは | 分かりやすく図解で解説 - ITを分かりやすく解説

【Rails】redirect_toとrenderの違いについて

f:id:kina_kq:20210422080753j:plain

 

おはようございます☀

今日は、redirect_torenderの違いについてまとめていこうと思います。

 

 redirect_toとrenderの違い

 

・render     : controller → view
・redirect_to   : controller → URL → route → controller → view

 

renderはいきなりviewに飛ぶのに対し、

redirect_toの方が寄り道が多いことがわかると思います。

  

renderは、

アクションを実行せずにビューファイルを表示させるのに対し、

redirect_toは、

1回指定したアクションを実行してそのアクションに対応したビューを表示させます。

 

redirect_toとは

 

 redirect_toは、

指定したURLに遷移させることができるメソッドです。

 

redirect_toメソッドを使うと、決められたコントローラーのアクション以外のアクションなどを実行させ、選択したビューファイルを表示させることができます。

 

 redirect_toメソッドのリダイレクト先の指定

 

パターン1:URLで指定する

redirect_to "https://www.pokemon.co.jp/"

 

パターン2:アクションで指定

redirect_to action: :new

 

パターン3:指定したコントローラのアクションで指定

redirect_to  controller: :users, action: :show

 

パターン4:アクションの個別のリソースを指定

redirect_to  controller: :users, action: :show, id: 1

 

パターン5:前のページを指定

redirect_to :back

 

 などがあります。

その他にもステータスコードを指定してリダイレクトをさせることも可能です。

 

renderとは

 

renderは、

Action内で、呼び出すViewを指定するメソッドです。

Action内でインスタンス変数として格納されたものは、viewから呼び出せます。

 

 

使い分け

 

データを追加、更新、削除を行う時 →「redirect_to」
データの取得を行う時 →「render」

 

controllerの処理が必要だー!といったものに対しては、

redirect_toを使い、

 

失敗したらエラー表示させるだけでよいよーといったものに対しては、

renderを使うといった感じです。

 

参考

 

【Rails】renderとredirect_toの違いと使い分け - Qiita

【Rails】redirect_toとrenderの使い分け - Qiita

renderとredirect_toの違いを整理 【Day 1/30 2nd】|K.Tawara|note

【Rails】redirect_toの使い方を徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト