TECH EXPERT 3日目

TECH::EXPERT

本日3日目。TECH EXPERTのカリキュラムは結構スケジュールがシビア。
一応、カリキュラム的には今日までの3日間でカリキュラムより1日分先行できた。
ただ、TECH的には1日8時間×7日もしくは10時間×6日+1日休日で週60時間程度の勉強時間を要求しているのに対し、私は1日12時間ペースでやっているのである意味当然。
昼飯も食べずに9時〜21時でがっつりやってるからね。
でも昼飯は外に食べに行かなくても、軽食程度は準備しておいたほうがいいかも。

話が逸れたけど、カリキュラムがかなり厳しいよ。目安2時間って書いてあっても真面目に理解しようとすると倍はかかる。自分の理解力にはかなり自信があるので半分くらいの時間で終わるかと思ってたけど、真面目にやってたらほぼほぼ目安どおりにしか進まない。書いてある内容をただなぞるだけなら確かに2時間で終わるかもしれない。けど、それでは知識としては身に付いてないも同然。
カリキュラムではhtml/cssなんて1日で終わる分量しかないけど、この程度の知識では実際には全く使い物にならない。ちょっとだけDotInstallをやったこともあるけど、TECHより遥かに濃い。もしかしたら序盤のカリキュラムだから触りだけ簡単にやってるのかも。

メモ書きながら思ったけど、これ1日でやる分量じゃないよ。
明日覚えてる自信ない。
脳みそパンパンなのでとりあえず吐き出しておいて、おいおいまとめ記事にします。

やったことメモ

クラスとインスタンス

クラスという大きな括りがあって、その中の個別の事象をインスタンスという。(この理解あってるのか?)
1つ1つの事象はオブジェクトと呼ばれる。
具体的には犬クラスがあって、柴犬というインスタンスがある。

クラス

クラスの定義は以下のように行う。
クラスは定数として書かなければならず、先頭の文字は大文字にする。

class hogehoge
end

クラス同士で親子関係を持つことができ、その場合は以下のように記述する。

class 子クラス < 親クラス

クラスメソッド

クラスメソッドにはメソッド名の前にself.をつける。
class外からこのメソッドを呼び出すことはできない。

def self.メソッド名
end

インスタンスメソッド

クラスメソッドと違い、selfはいらない。
同クラスのインスタンスからしかこのメソッドは呼べないので、インスタンスも生成してインスタンス.メソッド名としないと使えない。

def メソッド名
end

クラス変数とインスタンス変数

クラス変数は@@クラス変数と指定する。
インスタンス変数は@インスタンス変数と指定する。
単にクラスを定義しただけだと変数を取り出すのが面倒なので、後述するゲッターやセッターを用いて変数の中身を取り出す。

ゲッターとセッター

ゲッター

インスタンスから属性値を取り出す際に使うメソッドのこと。
属性名に対応するメソッドを作って属性値を返すように設定しておくことで、コードが書きやすくなる。

def instance.zokusei
return @zokusei
end

セッター

インスタンスの属性値を入力する際に使う。

def instance.zokusei=[a,b,c,d]
@zokusei = [a,b,c,d]
end

メソッド名はスペースがあっても読み飛ばされるので
instance.zokusei = [a,b,c,d]
と書けばまるで右辺の値が代入している式のようにみえる。
実際にはinstance.zokusei=[a,b,c,d]メソッドが実行されている。

attr_accessor

ゲッター・セッターともに非常に利用頻度が高いので、毎回2つずつ定義するのは面倒。
なので直訳すると属性アクセッサーなるメソッドを用いて簡略化できる。

class Dog
attr_accessor :name, :type. :sex
end

こうするとname,type,sexの属性について前述のゲッターとセッターが設定される。

initializeメソッド

class = Class.new() などでインスタンスが生成された際に呼ばれるメソッド。
変数等の初期値を入力するために利用する。

以下のように定義しておくと、インスタンス変数に値を入れてくれる。
なおClass.new(A, B)としても結果は同じ。

initialize(A, B)
@zokusei1 = A
@zokusei2 = B

こんな風に書くこともできる。

class Customer
  def initialize(name, money, ticket=nil)
    @name, @money, @ticket = name, money, ticket
  end
end

デフォルト引数

下のticket = nilのように書いてあるもの。引数がない場合にnilが代入される

class Customer
  def initialize(name, money, ticket=nil)
    @name, @money, @ticket = name, money, ticket
  end
end

複数ファイルにまたがるファイルの管理

カレントディレクトリの他のファイル(ライブラリ)を参照させたい場合にはrequireメソッドを用いて記述する。この際、読み込むファイルの拡張子は記載する必要がない。

require ‘./customer’
require ‘./movie

while文

条件がtrueの場合に繰り返す。
なおdoは省略可能。

while 条件式 do
end

Rubyの開発環境構築(頭に???が浮かんでるけど書きなぐり)

ホームブリューとrbenvをインストール

home-brew  install
rbenv ruby-build install

ターミナルのirb上で日本語入力を可能にする設定を行う。

brew install readline

eadlineのパスを通す。
パスを通すことでreadlineをどのディレクトリからでも使用できるようになる。

brew link readline --force

ubyのinstall

RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline)"
$ rbenv install 2.5.1

なにこれ?状態ですが、指示どおりに。

mySQLをインストール

 brew install mysql@5.6

liuxコマンド

pwd
print working directory
./カレントディレクトリを指す

Rails

とっても重要な概念。railsの流れは常にこう。
ルーティング → コントローラー → ビュー

アクセスしたアドレス(パス)を元に、次のアクションを起こすためにどのコントローラーを使うかルーティングを行う。
指定されたコントローラーに所属するアクションを用いてデータの取得等を行う。
取得したデータをビューとしてhtmlに返す。

get 'パス' => 'コントローラー名#アクション名'
get 'tweets' => 'tweets#index'  

コントローラーの作成・削除

rails g controller コントローラ名
  # コントローラーを作成 gはgenerateの略
rails d controller コントローラ名
  # 作成したコントローラを削除

作成した場合、app/controllerにコントローラー名フォルダとコントローラー名.rbファイルが作成される。
対応するviewに関しては、app/viewにコントローラー名フォルダが作成されるが、中身となるアクション名.html.erbは自動的には作成されないので必要に応じて自分で新規作成する。(コントローラー作成時にアクションまでは指定しないので当然ではあるが)

Modelクラス

「モデル」でデータベースから情報を取り出す。
あるデータベースから取り出せるモデルは限定されており、命名にも強い関連が付けられている。

コントローラーがデータのやり取りをするために必要で、通常はコントローラー作成後にモデルも作成する。

種類 概要 名前例
モデルクラス名 先頭は大文字、単数形 Tweet
モデルクラスのファイル名 先頭は小文字、単数形 tweet.rb
テーブル名 先頭は小文字、複数形 tweets

以下のようにしてモデルを作成する。命名規則からhogehogeは全て小文字

rails g model hogehoge

migrationファイル

データベースを作成するための設計図のようなもの。
前述のmodelをgenerateした際に同時に作成される。

  class CreateTweets < ActiveRecord::Migration[5.2]
    def change
      create_table :tweets do |t|
        t.string      :name
        t.text        :text
        t.text        :image
        t.timestamps null: true
      end
    end
  end

t.string ~ :imageまでは自分で作成。
テーブルに必要な型とカラム名を指定する。
t.型 :カラム名と記述。

このままだと設計図止まりなのでテーブルを作成する。

rake db:migrate

ローカルサーバーの立ち上げ

rails s

サーバーを終了する場合にはcontrol+C。
ターミナルをタブで分けた方が使いやすいので、command+Tでタブを分ける。

Rails console

rails c

コンソールを起動するとターミナルからrailsのメソッドを使うことができる。
終了するときはexit

View

viewフォルダ内の html.erbでコントローラーのアクションで定義したメソッドを使うには<%= メソッド名 %>とする。

コメント