ume

HTTPSとは?

目次

  1. HTTPとは?
  2. httpとhttpsの違い
  3. SLL化とは?
  4. リダイレクトとは?

HTTPとは?

⇨個人情報がバレないhttp通信のこと ⇨要は安全性が高い通信 Webサーバーとクライアント間でのデータの送受信を行うために用いれられるプロトコル

httpとhttpsの違い

⇨安全な通信かどうか http⇨危険 https⇨安全 なぜHTTPSの方が安全なのか? ⇨SLL化ができているから

SLL化とは?

⇨情報を暗号化すること=他人が自分の情報を奪っても情報の中身を分からなくすることができる http通信ではカード番号やコードが外部の人間から見える 例えば楽天市場のサイトで商品購入するためにクレジットカードの番号とセキュリティコードを入力してその情報を送ると誰かにその番号とコードを取られるかもしれない ただhttpsの通信ではSSL化されているので まずカード番号やコードが外部の人間から見えない しかもカードの番号やコードが 1394739589→gdhがkぎdrht9hgkdhっgjkhvkんcjふぁdj: こんな感じで意味がわからん形で送られる(暗号化)ので外部の人が最悪 情報を抜き出しても不正に利用できない。

どうやってSSL化できるのか? ⇨第三者機関(認証局など)が発行しているSSL証明書というSSL化するための許可が必要 SSL化が通信で使われているかどうか=安全な方法でサイトとやり取りしているかどうかは この「鍵マーク」があるかないか SSL化されていない通信の場合↓ 保護されていないとなる

リダイレクトとは?

⇨出力先を変える=表示させる画面を変える 例えば webページを作成した後、後からurlを新しくした場合 リダイレクトしていない⇨古いurlをクリックすると古いWEBページにつながるOR ページが見つからない リダイレクトあり→古いurlをクリックしても新しいwebページに飛ぶ こんなイメージ自分で欲しい電力のとこに切り替えられる

Ruby 復習 クラス変数 インスタンス変数

目次

  1. クラス変数とインスタンス変数の比較
  2. クラスメソッドとインスタンスメソッドの比較
  3. モジュールについて
  4. Mix-in

クラス変数とは

インスタンスごとにそれぞれ固有とは↓でいうインスタンスごと(masa=User.new(“masa”))によって実引数が違うから @name(インスタンス変数)に入る値はインスタンスによってバラバラである。

インスタンスメソッドとクラスメソッドの違い

インスタンスメソッド例 Anime = Anime.newというインスタンスを呼び出すためのメソッドをインスタンスメソッド(anime.naruto)という.

↓クラスメソッド

モジュールについて

⇨クラスのようにメソッドや定数をまとめたもの

クラスメソッド作る時と同じ書き方

モジュールの使用用途補足 まず単一継承と多重継承という考えがある。 単一継承(1つのクラスしか継承できない) 多重継承(複数のクラスを継承できる) Rubyは単一継承です。 なのでrubyで複数のクラスの共通処理を使いたくても継承できるクラスは1つのみ。そこで代わりにモジュールを使用します。クラスを使用していて、どうしても継承などだけでは足りない、という場合にモジュールを使う。つまり、継承で共通化仕切れない部分を補うために、モジュールで共通処理を作ってなんとかする

Mix-in では今ゲームをつくっていたとして、Player クラスと Monster クラスを用意していたとしましょう

その場合にどちらにもデバッグに関するメソッドを入れたいのですが、Debug と Player や Monster は継承関係にあるものでもないし、かといって両方に書くのも面倒だったりします。 その場合はデバッグに関するモジュールを作ってあげて、単に機能としてこちらのクラスに提供できたら便利です。

module Debug

  def info //self をつけずに単にインスタンスメソッドにしてあげると、それを他のクラスのインスタンスメソッドとしてはめ込むことができたりします=mix-in
    puts "#{self.class} debug info ..."
  end

end

class Player
  include Debug // include モジュール名でモジュール内のメソッドが使える
end

class Monster
  include Debug
end

Player.new.info // Player debag info 
Monster.new.info //Monster debug info

Player.new.info この部分は(Player.new).infoこう考えると分かりやすい (Player.new)でインスタンスを作っている。その後そのインスタンスに対してinfoメソッドを呼び出していると考えることができるかなと思います。

Ruby 復習

目次

  1. class文
  2. initializeメソッド
  3. 組み込みクラスの継承の関係
  4. アクセスメソッド
  5. 特別な変数self

クラス文

class クラス名 クラスの定義 End

注意 クラス名は必ず大文字で始めないとあかん

initializeメソッド

Class文の中で定義されたメソッドをそのクラスのインスタンスメソッドという。initializeメソッドは特殊でnewメソッドが使われるとかならずinitializeメソッドが呼ばれる。イメージとしてnewがinitializeに置き換わるイメージ。

例 

def initialize(name) ⇦イニシャライズメソッド
@name = name 
end 



def naruto ⇦インスタンスメソッド
put ”私の名前は#{name}です”
end 

def sasuke ←インスタンスメソッド
put ”私の名前は#{name}です”
end 

anime= Anime.new(“ナルト”)
anime.naruto //私の名前はナルトです


anime= Anime.new(“サスケ”)
anime.naruto //私の名前はサスケです

アクセスメソッド

インスタンス変数をオブジェクト外部から参照したりインスタンス変数を変更したりするためのメソッド インスタンス変数=initializeメソッドで出てきた@nameのことをインスタンス変数という。 インスタンス変数はオブジェクト外部から参照できない、変更できないとは?

class Anime

def initialize(name) ⇦イニシャライズメソッド
@name = name 
end 

anime= Anime.new(“サスケ”) 
anime.@name  // NG 参照できない
anime.@name = “サクラ” // NG  @nameの中身を変更できない

そこでアクセスメソッドを使う ⇨ attr_reader :変数名 参照が可能(別名ゲッター) attr_writer :変数名 更新が可能(別名セッター) attr_accessor :変数名 参照と更新が可能(アクセサ) どこに記載する? ⇨クラス名の下

class Anime

attr_reader :name 

def initialize(name) ⇦イニシャライズメソッド
@name = name 
end 

anime= Anime.new(“サスケ”) 
anime.name  // OK 参照できる サスケ

特別な変数self

self=オブジェクト self=そのメソッドを受け取っているレシーバーをさす sayhiの中でselfを使うとsayhiメソッドからメッセージが送られているレシーバー(tom)をさす

class User 
attr_accessor :name

def initialize(name)
@name = name 
end

  def sayHi
  
    puts "hi! i am #{@name}"
    puts "hi! i am #{self.name}"
    puts "hi! i am #{name}"
  end

end

tom = User.new("tom")
tom.sayHi  ⇦このレシーバー(tom)selfは指している

Ruby復習 継承

  1. 継承
  2. 継承のメリット
  3. 組み込みクラスの継承の関係

継承

既に定義されているクラスを引き継いで新しいクラスを作ること 継承によって新しく作られたクラス⇨サブクラス 軽症の元になったクラスをスーパークラスと言います

継承のメリット

① 既存の機能はそのままで全く新しい機能を追加する=1から作る必要がない ②既存の機能を定義し直して同じ名前のメソッドに違う振る舞いをさせる ③既存の機能に処理を追加して拡張する

組み込みクラスの継承の関係

Ruby の全てのクラスはBasicobjectクラスのサブクラスとなっています。通常のオブジェクトに必要なクラスはObjectクラスとして定義されている。 

Rails ログイン機能

目次

  1. ログインとは
  2. ログインの流れ
  3. ログインの手順1
  4. ログインの手順2
  5. ログインの手順3

ログインとは

⇨サイトを操作しているユーザーが誰であるかが判別できる状態のこと

ログインのメリット⇨ユーザーごとにユーザーに合わせた情報を提供できる

例 YouTube ⇨一人一人の好みに合わせた動画が表示される。

ログインの流れ

手順1 ログインページの作成

手順2 ログインページからメールアドレスやパスワードなどの情報をRailsに送信

手順3その情報を元に操作しているユーザーを特定し、ログイン状態にする。

ログインの手順1

手順1 ログインページの作成(ルーティング、アクション、ビューを追加する。データベースにカラムの追加)

ルーティングの作成 get “URL” => コントローラ名#アクション名 アクション名の追加

アクションの追加Controllerファイルで def アクション名 end と記載

ビューの追加 Viewフォルダーの中で右クリックでファイルを追加する。

データベースにカラムの追加 ターミナルで rails g migration ファイル名 Changeアクションの中でadd_column : テーブル名, :カラム名, データ型

Rails db:migrate

ログインの手順2

手順2 ログインページからメールアドレスやパスワードなどの情報をRailsに送信 フォームに入力された内容をコントローラに送信できるようにする。 ⇨ルーティングとアクションの追加 ⇨html.erb内にform_tagメソッドで入力内容を↑で作ったルーティングのurlに指定して送る。form_tagメソッドでURLを指定する際はroutingではpostと明記する。またフォームに入力された値がRails側(コントローラ側)に送信されるように、inputタグにname属性を追加しましょう。name属性をつけるとコントローラに送られる。

ログインの手順3

手順3その情報を元に操作しているユーザーを特定し、ログイン状態にする。 ⇨ユーザーの特定をする、特定したユーザーでログインにする

ユーザーを特定する=formに入力されたメールアドレスとパスワードに一致するユーザーをデータベースから取得し変数@userに代入しコントローラに返す。formに入力されたメールアドレスとパスワードはParams[:emai]とparams[:password]で受け取れる。 コントローラで @user = User.find_by(email:params[:email]), password:params[:password]の意味はフォームから受け取ったemailをfind_by(データベース内から一致するものを見つける)

Rails ログアウト機能を作ろう

目次

  1. ログアウトのやり方
  2. ログアウトの手順1、2、3
  3. ログインとログアウト時で画面に表示するものを切り替える

ログアウトのやり方

⇨アクション内でsession[:キー名]=nil   

ログインの時は値を代入することでログインを保っていた。 ログアウトは逆で値を削除(空)する=nil

手順1ルーティングとアクションの作成

手順2アクション内にsession[:user_id]=nilを記載 手順3 リダイレクトでログインページの表示

手順1ルーティングファイル作成 post ”logout” => “users#logout” 注意sessionを使うときもpostを使う

手順2 アクション内にsession[:user_id]=nilを記載

手順3 リダイレクトでログインページの表示

ログインとログアウト時で画面に表示するものを切り替える

ログインしてるのにトップページにログインのリンクがあったりするのはおかしいのでログイン状態時に表示するものログアウト時に表示するもの切り替えよう applocationのif session[キー名] のtrueのところに表示したいものをlink_toで表示する

rails server を起動するとエラーが出た。

目次

  1. エラーの経緯
  2. エラーの意味と原因
  3. エラーの解決策

エラーの経緯

rails tutorialをcloud9で勉強しようとしてターミナルでrails serverを起動しようとしたら いきなり こんなエラーが出た。

エラーの意味と原因

意味⇨もう既にrails server 立ち上がってるよ。2つもサーバーなんて起動できません。 なんでこんなことになったかというと前回勉強をやめる際に勉強をやめる手順を間違えた 正解の手順ターミナルでcontroll + cと入力⇨✖︎印でブラウザー等を閉じる。 私がしたことターミナルをバツ印で閉じてしまった。この時点でサーバーは起動し続けている。

エラーの解決策

rails s を実行中のターミナルを探して停止することです。 ターミナル $ ps aux | grep rails すると次のように出てきます。

1183 0.3 0.6 1117144 344852 pts/1 Sl+ 00:30 4:59 /usr/local/rvm/rubies/ruby-2.3.0/bin/ruby bin/rails server -b 0.0.0.0 -p 8080

プロセス番号の削除=1183 ターミナルで $ kill 1183 終わり