むじんブログ ”3歩進んで2歩下がる”

37歳未経験からのエンジニア転職を目指す営業部長

学習のアウトプット(TECH CAMP 発展コース序盤)

今日は時間割学習で、朝から夜まで10時間学習。

アウトプット量もかなり多くなった。

 

【学習宣言】

明日は4時間学習する。

 

----------------------------------------------------------------------------------

indexメソッド】

コントローラーアクションではなく、Rubyのメソッドの方。

 

ある文字列で、自分の検索したい文字(またはワード)が

何文字目にあるかを確認できるメソッド。

1

「こんにちは」の文字列で「にち」は3文字目から書かれている・・・というもの。

 

さらに、検索したい文字が

文字目を頭とした場合に△文字目にある」という調べ方も出来る。

2

「こんにちは」の文字列で「ん」を頭とした場合、「にち」は2文字目から書かれている・・・というもの。

 

※注意点

indexメソッドでは、頭の文字は「0番目」という扱いになるので

上記の例1では実際には3番目ではなく2番目になる。

もし頭を1番目にしたい場合は、単純に結果に1を足すと良い。

 

・書き方

def メソッド名(引数)

 puts 引数.index(“探したい文字”, 何番目を頭として探すか)

end

 

----------------------------------------------------------------------------------

【課題解決について】

分からないことがあった場合に、整理せずにすぐ質問するのではなく、

・自身で深掘り、課題解決能力を向上させる

・理解度を深め、相手に伝える技術が高まる

上記の観点から、以下のフォーマットに沿って自己解決を図る時間を設けることが大切。

(現場に入っても重要な考え方となる)

 

解決したいこと

自力で調べた内容

仮説と検証作業の結果

 

----------------------------------------------------------------------------------

Ruby on Railsの基本理念】

DRY

Dont Repeat Yourselfの略で、同じ情報・コードを繰り返し使わないということ。

可読性の向上・バグの予防・処理速度向上のため

 

CoC

Convention over Configurationの略で、設定よりも規約を優先するという考え方。

railsで予め定義された処理を自分で書かないという意味。

開発スピードや質だけでなく、開発者同士が共通認識できて可読性も向上する。

ディレクトリも規約に基づいて構築されている

 

オブジェクト指向

全てを「モノ」として捉える方針のこと

 

----------------------------------------------------------------------------------

Action View

Railsアプリケーションにおいて、ビューの機能を実現するオブジェクト。

Action Viewの中にテンプレートエンジンのERBが含まれているので、

~.html.erbファイルをビューファイルとして使える。

 

ビューファイルは直接レスポンスとして返っているのではなく、

Action Viewによってまとめられた後に返されている。

 

コントローラーで定義したインスタンス変数は、直接ビューファイルで使えるのではなく、

Railsの裏で動いている様々な機能を介した後にAction Viewを通じてビューファイルに渡されている。

(仕組み自体はソースコードを読めば分かるが、今はそこまでは不要)

 

コントローラーは複数あり、それに対応したビューファイルもその数だけある。

名前もそれぞれ相関している。

----------------------------------------------------------------------------------

【ヘルパーメソッド】

ビューファイルで記述したヘルパーメソッドは、HTMLとして読み替えられる。

例)link_toメソッド→aタグに読み替え

 

ヘルパーメソッドは数が多く、暗記する必要はない。

また、ヘルパーメソッド自体を自作することもできる。

 

----------------------------------------------------------------------------------

【モジュール】

インスタンスを生成しないクラスのようなもの。

インスタンスを使用せずに処理だけを使う場合はモジュールで作成する。

 

モジュールの中にさらにクラスを定義することもできる。

メリットとしては、同じクラス名でも別々のモジュールの中に入れておけば

別のクラスとして認識されて使用できる。

 

module モジュール名

 class クラス名

 end

end

 

モジュール名::クラス名

で呼び出し可能。

 

----------------------------------------------------------------------------------

Helper

ヘルパーメソッドを作成できるモジュール。

app/helpers配下のディレクトリに存在している。

このディレクトリには、各コントローラーに対応したヘルパーファイルなどもある。

 

application.helperファイル内で新しいヘルパーを定義すると、

ビューファイルで<%= %>で使用できるようになる。

 

ビューファイルで同じRubyの記述を繰り返してしまった場合などは、

切り出してヘルパーファイルに記述してヘルパー化すると

可読性が向上する。

 

----------------------------------------------------------------------------------

【部分テンプレート(復習)】

renderメソッド部分テンプレートを呼び出すためのメソッド

partialオプションどの部分テンプレートを呼び出すかを指定する

localsオプション呼び出した部分テンプレートで、指定した変数を用いることができる

 

<% render partial: sample”, locals { post = hello } %>

→_sample.etml.erbファイルを部分テンプレートとして呼び出す。

 また、部分テンプレート内では変数postが使用できる。

 

----------------------------------------------------------------------------------

rawメソッド】

raw(文字列)と記述し、HTMLを正しく表示させるのに活用する。

rawメソッドの中に入れることで、記号などがフォーマット化されて文字化けをしなくなる。

 

----------------------------------------------------------------------------------

Action Controller

Railsでコントローラーの役割を実現するために必要なオブジェクト。

これがあることでリクエストの受け取り・レスポンスの返却を行うことができている。

 

----------------------------------------------------------------------------------

whereメソッドとLIKE句(復習)】

whereメソッドは、モデルが使用できるActhiveRecordメソッドの1つ。

where(条件)で、条件を満たしたレコードを

テーブルからインスタンスで配列の形で取得する。

条件には「検索対象となるカラム」を含んだ条件式を記入する。

whereメソッドを連続させると、複数条件に一致したレコードを取得できる

 

例)

Tweet.where('id < 3')

→ID3未満のレコードを全て配列の形で取得する

 

LIKE句は曖昧な文字列を検索する時に用いるもの

where('title LIKE(?)', "a%")

aから始まるタイトル

where('title LIKE(?)', "%b")

bで終わるタイトル

where('title LIKE(?)', "%c%")

cが含まれるタイトル

where('title LIKE(?)', "d_")

dで始まる2文字のタイトル

where('title LIKE(?)', "_e")

eで終わる2文字のタイトル

title」は「text」など、カラムによって変わる。

 

----------------------------------------------------------------------------------

【コントローラーとモデルの役割】

コントローラーはあくまでリクエストを受け取りレスポンスを返すのが役割なので、

データを引用するなどの細かい処理は記載せずに他に切り出す。

各エンジニア間で共通認識として持つことで共有がしやすくなり、

レスポンスとして返るものが何かなども分かりやすくなる。

 

※以前はモデルに切り出していたが、本来は今回学んだサービスクラスに切り出す方が好ましいらしい。

 

----------------------------------------------------------------------------------

レンダリング

HTMLなどのビューファイルを画面に表示させること。

index.html.erbなど)

 

JSON

データを扱う場合のフォーマットの1つ。

他にもフォーマットはあるが、動作が軽く、新しい言語との親和性が高いことからよく用いられている。

 

----------------------------------------------------------------------------------

【コントローラーとビューの関係性】

コントローラーにアクションを定義すると、それに対応したHTMLファイルが返却するレスポンスとして決定される。

(例えはindexアクションであれば、index.html.erb

もしビューファイルを任意のものにしたい場合はrenderメソッドのtemplateオプションを使う。

JSON形式にしたい場合は、render json{ ~ }とする。

 

----------------------------------------------------------------------------------

【サービスクラス】

実はコントローラーの記述をモデルに切り出すのもあまり好ましくない

(モデルはモデルでき必要な記述がある)ため、切り出し専用のファイルを作ると利便性が高まる。

appディレクトリにフォルダ・ファイルを作ってサービスクラスを記述して

それを引用することでコントローラー・モデルともにスッキリさせることができる。

 

----------------------------------------------------------------------------------

【セッション】

サイトなどにおいて、前回の情報を一時的にそのまま保存しておく仕組み。

ショッピングサイトでの買い物カゴのデータや、ユーザーログイン情報などが

これにあたり、WEBサービスの利便性向上につながっている。

 

コントローラーでsessionというオブジェクトを使って実装できる。

deviseでは内部でセッションが既に実装されている)

 

【クッキー】

ブラウザが持っているデータの保存場所。

セッションはデータベースではなくクッキーに保存されている。

 

CookieStore

Railsでクッキーを使用する場合のデフォルトの保存場所(セッションストレージ)のこと。

セッションはハッシュ形式で保存される。

一時的に保存しているユーザーセッションが悪意のあるユーザーに

盗まれたりしないように、CookieStoreではセッションを暗号化したり

定期的にリセットしたりしている。

 

----------------------------------------------------------------------------------

ActiveModel

Railsでモデルの機能を実現するために必要なオブジェクト。

様々なモジュールが利用できる。

 

Callbacksモジュール】

「データを保存する時」などの任意のタイミングで実行する処理を設定することができるActiveModelのモジュール。

設定する処理のことをコールバックと呼ぶ。

コールバックの登録は普通のメソッドと同じように記述する。

 

コールバックのタイミングは、after_validationのように指定する。

 

Validationsモジュール】

ActiveModelのモジュールの1つで、バリデーション機能のためのもの。

 

Serializationモジュール】

JSONで戻ってくるデータを整えることができるモジュール。

例えば、レスポンスとして戻す時に、必要のないカラムを含めないなど。

シリアルは「一続き」のような意味。必要なものだけを一続きにするイメージ?

 

Formオブジェクト】

①フォームから送られたデータが複数のモデルに関連するもので、それぞれのモデルでデータを更新させたい場合

②フォームから入力された値に対応するモデルはないが、バリデーションをかけたい場合

に用いるオブジェクト。