20201017_アウトプット

アプトプット画像

学んだこと(5時間半)

なぜビュー反映させる時に、raw(文字列)をする必要があるの?

  • クロスサイトスクリプティングXSS:Cross Site Scripting)が関係していた。

  • クロスサイトスプリクティングとは、フォームなどのユーザーが自由に入力できる場所に、JavaScriptやhtmlの罠を仕掛け、罠のスプリクトを実行した人の個人情報が盗んだり、悪意のあるソフトウェアに感染させたりする仕組みのこと。

  • それを防ぐには、ユーザーが自由に記入できる場所において、悪意のあるプログラムを書けないようにする。

  • 書けないようにするために、入力値を制限する方法や、エスケープ処理といって特殊文字(<・>・&等)をただの文字列にする必要がある。

  • エスケープ処理に使えるのがrawメソッド。「<」「>」「&」のような文字を「&lt;」「&gt;」「&amp;」のような無害な文字列に置き換えることができる。

こちらの記事が分かりやすく勉強になりました。
(一部、引用させていただきました。)

viewを深堀り

  • form_withやlink_to等、ビューで使える「ヘルパーメソッド」の戻り値は、HTMLの要素(文字列)になるよ

  • すでに用意されているヘルパーメソッド以外にも、自作することができるよ

  • その時に、「Helper」と呼ばれるモジュールを活用しよう(この中に、繰り返し同じ処理を記述することによって、ビューの可読性が上がるよ)

【application_helper.rbの記述】
module ApplicationHelper
  def sample
    # sampleというヘルパーメソッドです
  end
end
【index.html.erbの記述 メソッド名書くだけでOK】
<%= sample %>

忘れていたcollectionとmemberの違い

  • そもそも、collectionとmemberはルーティングに設定するもの

  • ワード検索を設定したい時は入れ子構造で設定するよ(入れ子構造で設定するのは、今回7つのアクションがあってのワード検索だから)

アクション rails routesで見たときの違い
collection :idつかない
member :idつく

つまり、検索ヒット後に、:id指定が必要なページにいくのかどうかで決める。


controllerを深堀り

  • コントローラーは「リクエストを受け取り、レスポンスを返すこと」が仕事なので、細かいデータの処理を行う仕事は、モデルに任せよう(曖昧検索・ワード検索・DBからのデータ取得等)

  • モデルに任せる以外にも「サービスクラス」という概念もあるよ

  • サービスクラスとは、モデルに記述処理を切り出せる機能のことだよ

ブラウザにおける情報の一時記憶

  • セッションとは、Webサービスにおいて情報を一時的に記憶しておく仕組みだよ(買い物のかご情報など)

  • コントローラーにハッシュに値を追加するような記述で使用できる(クッキーストアにハッシュ形式で保存される)

  • 実はdeviseにその機能が実装されており、だからログイン時に前に記入した情報が残っていた

class TestsController < ApplicationController
 def index
  session[:sample] = 1
 end
end
  • クッキー(Cookie)とは、「ブラウザ」が持っているデータを保存できる領域のこと(データベースじゃないよ!!)

  • クッキーストアとは、Ruby on Railsでセッションを用いる際の、デフォルトの保存先のこと。この保存先はセッションストレージと呼ぶことが一般的。

レスポンスの復習

  • レンダリングとは、指定したHTMLのビューファイルを画面に描画すること

  • JSON(ジェイソン)とは、データを扱う場合のフォーマットのこと。



積み残し(復習したいこと)



感想

  • 教室に行くと集中できる。理由を考えたところ、人とのスペースが十分にあることと、椅子の座りごごちがいいことと、プログラマーを目指す仲間とたまに話して息抜きできるためだと思う。

  • 今日はオンラインでしか会ったことのない方と会えて嬉しかった。個人アプリを見せてくれた。スマートなところがで素敵で、MVCを活かした設計だった。

  • 共通点の多い、私と同じ悩みを持っている方とお話しできて嬉しかった。勇気をもらえた。悩みとは、どんな時も「勉強しなきゃ‥」と心のどこかでずーっと感じていたり、上手にリフレッシュできないという悩み。

  • 上記悩みについて、最低限の時間を目標として、それ以上の時間はボーナスタイムにした方が自分にはあっているのかも。(そうすることで、それ以外の時間は休んでもいいんだよ、と自分を許すというか)

  • オブジェクト指向に関する概念をもっと知識を深めたくて、隙間時間に「オブジェクト指向でなぜつくるのか(平澤 章 著)」の本を読み始めた。まだ始めの部分だが、以前は「機能」中心に作っていて、更新や手直しをすることがとても大変だったこと。そこからパーツ分けをするようになりオブジェクト指向のおかげで「楽になっていった」こと。まだ始めの部分だけど「なぜ」が分かりやすくて、勉強になる。

20201016_アウトプット(JavaScript、Rails深堀)

アプトプット画像

今日の内容

  • プロゲート でJavaScriptの基礎

  • カリキュラムはRailsの深堀

新しい気づき

  • case文を使う時に「break(switch文を終了する命令)」が必要な理由は、ないと、その次のcaseの処理も実行してしまうため。

  • while文を使う時に、繰り返される処理結果の値が反映されるコードを必ず入れるのは無限ループを防ぐため。

  • 配列における「.length」は要素の数を取得していること(要素の文字数じゃなかった)

  • 「a===b」(abは、等しい)「a!==b」(abは異なる)

  • 値によって処理を分岐したい場合には「switch文」も使える。

const color = "赤";
switch(color){
   case "赤":
        console.log("止まれ");
   break;
   case "黄":
        console.log("要注意");
   break;
   default:
        console.log("colorの値が正しくないよ!")
   break;
}



  • Action Viewとはビュー機能を実現するために必要な処理のまとまり。(オブジェクト)

  • Helperとは、ヘルパーメソッドを作成することができるモジュールのこと。

  • クラスとモジュールの使い分けとして、具体的なオブジェクトを生成したい時(インスタンス等)はクラスで、処理だけ(メソッド等)が必要な場合はモジュール。

  • Action Controllerとはコントローラー機能を実現するために必要な処理のまとまり。(オブジェクト)

  • ワード検索(曖昧検索)は、モデルへ。(コントローラーの可読性を高めるため)



積み残し

感想

  • JavaScriptの学習を初めて思ったことは、新しい概念もあるけれど、基本的な部分は同じことが多い。(変数を定義したり、再代入したり、if文であったり、配列であったり・・)なので、ここはRubyでいうここかな?と差異を比べながら学んでいきたい。

  • 今までは新しい言語を学ぶ=難しそう!!!と思っていけれど、一度基本的な考え方が理解できれば、1〜100をまた全て覚え直すのではなく、異なる部分の知識をアップデートしたり、足りない知識の部分を追加していくイメージが自分の中で想像できたので、プログラマーってやっぱり奥深くて面白いと感じた。

  • オードリータンさんの本がきっかけで小飼弾さんを知った。ググった時にYoutubeが出てきたので見始めた。知らない単語がたくさん出てくるのでその都度検索するのだが学びになる。毎回完璧には覚えられないけれど耳で何回も聞いて、プログラマーの人の言葉(ITの世界で使われている単語)を理解できるようになりたいな。

20201014_アウトプット(JavaScript)

アプトプット画像

学んだこと(2時間30分)

for文(繰り返し処理)

条件式が「true」である限り、処理が繰り返される。

for ([①初期化式]; [②条件式]; [③加算式]){
 //繰り返す処理の内容
}
記述 内容
①初期化式 for文の中で使用する変数を定義
②条件式 何回繰り返すか指定
③加算式 ①初期化式の定義した変数の増減
let count = 1
for (let i = 1; i <= 10; i += 1) {
  console.log(`${count}回目の出力`)
  count +=  1
}
  • 「増加する」を表す時に、JavaScriptではi++と表記する。rubyには無いため初めて見た時これはなんだろうと思った。(rubyだと「i+=1」)この記事が勉強になった!(オブジェクト指向の違いによりrubyには++が無いと知った。) blog.tokoyax.com

forEach文

  • JavaScriptにおいて、配列の繰り返しを行う処理は、「for文」または「forEach()関数」を使用する。
配列.forEach( function(value){
  // 処理の記述
})
  • 関数(function)を指定することで実行出来る。

  • 指定した関数に引数を定義。その引数に配列の要素が入る。(上記の例ではvalue

  • 最後の要素まで繰り返すたびに、引数は各要素に置き換えられる。

その他

  • rubyドリルで、インスタンスを生成した時に(モデル名.new)、initializeメソッドを定義するものと思っていたが、initializeメソッド自体が必須というわけでは無いと知った。



積み残し(復習したいこと)

  • Rails勉強会→50%復習

  • rollback,カラムの追加



感想

  • 仲間が教えてくれた「Au オードリー・タン 天才IT相7つの顔」を読み始めた。展開がワクワクするので時間を忘れてずっと読んでしまいそうになる(笑)

  • 今読み終えた部分で印象に残っていることは、① ユーモアは素敵な武器にもなりうること、②天才はしっかり寝てる(8時間)こと(”残業が睡眠”は衝撃的)、③相手の気持ちがわかる人ほど多角的に物事を深く考えていること、④生育環境が良いこと、⑤コマンドをパソコンがなかったので紙で消しては書いていたこと(好き・面白いという気持ちは最強)、⑤様々な本を読破していること(その時に落書きを利用していること)など。面白い〜!

  • 読んでいて感じることは、答えを導き出す一瞬の間にクリティカルシンキングをしているのだろうなと予測するのだが、出てきた回答に対して不安に思ったり、自信がないと感じることはないのだろうか。(何十通りもの答えが出て「これがベスト!」となるのだろうか。)そこが知りたいなと思いながら読んでいる。

  • 天才すぎて自分とかけ離れているけれど、素敵なところ1つでもいいので取り入れていきたいな。

  • あとは会社でちょっと考えさせられる出来事があり、早くエンジニアになって「明日仕事がなくなっても生きていける」というような「仕事に選ばれない」生き方をしたいと強く思った。コードをバリバリ書いて、思いを実現できるようになりたい。

20201013_アウトプット(JavaScript)

アプトプット画像

学んだこと(1時間30分)

JavaScriptとは

JavaScriptプログラミング言語の一つで主にクライアントサイドにおいて力を発揮。「ブラウザ上でのアプリケーションの使いやすさ」「リクエストの送り方の工夫」を担う。

役割 内容
主な役割① ページの遷移なしで、画面の切り替えをすることが出来る
主な役割② 画面を更新せずに、サーバーと通信できる

Javascriptが実行できるツール(デベロッパーツール)

  • JavaScriptの実行はConsoleパネルにて行うことができる。

  • Google Chrome(ブラウザ)を立ち上げ後、⌘+option+Cあるいは、ファンクションキーを有効にしている場合にはF12で検証ツールを開く。

  • リロードすれば、定義していたものがいったん消える。

  • 2行目以降を書きたい時は、shift+Enterを押すと良い!(Enterだけだと実行されてしまう)

  • console.logブラウザのコンソールにテキストを表示させるメソッド。引数として情報を渡している。
console.log("Hello")

変数定義

constとletを使い分けることで、自分もしくは他の人が見た時に理解できるコードを実装できる。

変数定義 使うとき どういうことが分かる?
let 値が変わる変数を定義 この先、代入されている値が変わると分かる
const 値が変わらない変数を定義 変更を加えてはいけないと分かる
var 原則使用しない 視覚的にコードの内容を理解できないため

文字列の中に変数を含める方法

  • 「+で連結」か「テンプレートリテラル」の2つの方法がある。

  • テンプレートリテラルの方が、①変数を埋め込むことができる、②改行を入れることができる、③HTMLの要素を作成することができる、の3つの利点がある。

const name = "Tom"
const age = 25
const introduction = `私の名前は${name}、${age}歳です`
console.log(introduction)
// => 私の名前はTom、25歳です と出力される

条件分岐

Rubyと違うところ。

  • 条件式は()で括る。

  • 条件式の後に続く処理は{}で括る。

  • elsif使えない。(else ifになる。)



積み残し(復習したいこと)

  • devise rollback方法

  • カラム追加の方法

  • Rails勉強会



感想

  • 食事後お腹いっぱいで眠くなるが、その時に仮眠を取るのではなく、筋トレをすることが集中力アップと、眠気覚ましに繋がった。

  • 筋トレはやるまでは面倒くさいと感じるが、やってみると頭がすっきりして睡眠の質もアップするので生産性をあげるために取り入れていきたい。

  • デブサミの続きを見たいので今日は早めに切り上げる。

20201012_アウトプット(Rails勉強会復習)

アプトプット画像

学んだこと

  • エラーに向き合う

(1)新規投稿ページにアクセスできない

エラー画像1

3ステップ 詳細
現状把握 ●現状:新規投稿ボタンをクリックしたら、エラーが発生した
●ゴール:新規ツイートの投稿フォームが表示される
エラー文を解読 ●Tweetsコントローラーのnewアクションが動いたが、テンプレートが見つからない
仮説を立てる ●ビューファイルが表示されないため、ビューファイルが存在するか確認する
●今回は「new.html.erb」が対象

【結果】ファイル名のスペルミスだった。コントローラーのアクション名とビューファイルの名前は同じ。
【ポイント】No templateのエラーはビューファイルが存在しないことを意味する。




(2)新規投稿するとエラーが生じる

エラー画像2

3ステップ 詳細
現状把握 ●現状:ツイートを投稿したところ、Routing Errorが発生する
●ゴール:ツイートの投稿ができ、「投稿が完了しました」と表示される
エラー文を解読 ●HTTPメソッドPOST、URIパターン”/tweets”に一致するものがない
(ルーティングエラーの場合、rails routesの結果が表示されるためそれを活用する)
仮説を立てる ●ツイートを投稿した時に動くアクションがルーティングに定義されていない
●ツイートを投稿した時に動くアクションはcreateアクション
●routes.rbをみて設定を確認する

【結果】ルーティングファイルのresourcesにおける「create」アクションが抜けていた。
【ポイント】createアクションを追加することにより、7つのアクションが全て揃う。そのため、onlyを消して、「resources :tweets do」となる。

resources
7つのアクション
HTTPメソッド 機能
index GET 一覧表示
new GET 新規投稿ページへ遷移
create POST 登録(新規追加してDBへ保存)
edit GET 編集ページへ遷移
show GET 詳細表示
update PUT/PATCH 更新(更新してDBへ保存)
destroy DELETE 削除

補足:PUTは丸ごと置換する、PATCHは一部を変えたり付け足したりする。




(3)投稿した内容が表示されない

【エラー文:なし】

3ステップ 詳細
現状把握 ●現状:投稿した内容が表示されない。DBへも保存されていない。
●ゴール:投稿した内容がDBへ保存され、表示される。
エラー文を解読 ●なし
仮説を立てる MVCの流れに沿って一つずつ確認していく。

【結果】プライベートメソッドに定義していたpermitのkeyが「text」が「test」になっていた。よってデータベースに保存されていなかった。
【ポイント】

  • モデルはDB側なのでDBにうまく保存されていない場合にはモデルに原因があるとは考えにくい。

  • 情報が間違えている→コントローラーが原因。

  • そもそも情報がない→リクエストを送ったビュー側に問題あり。(binding.pryでparamsみてもスカスカな時)

  • エラー文がない時はMVCの流れに沿って仮設検証を実施する。

  • binding.pryを使うと中身をみることができる。

  • binding.pryの流れについて
    ①コントローラーの処理をとめたい直前にbinding.pryをいれる。
    ②ページで投稿してみる(画面固まる)
    ③ターミナルに行って送られた情報を確認する
    (コントローラーで設定しているパラムス名tweet_paramsと入力して中身確認)
    ④ターミナルでexitと押す。
    ⑤コントロール+cでサーバー停止。
    ⑥サーバー立ち上げ。
    binding.pryの記載消す。

  • 投稿したデータはparamasという箱(ハッシュ)に入る。

  • paramsの箱の中に:tweetの箱が入っている。:tweetの箱の中に:imagetextが入っている。(コントローラーに設定しているpermitにおいて、:imagetextが許可されたものか照合し、OKであればDBに保存される)

  • :text:imageは「キー」の役割を果たしている。こちらの「キー」をもとに、今回で言えば、ビューファイルのform_withから入力された内容を、保存されたDBへ「バリュー」をとりに行っている。




(4)投稿の詳細ページでアクセスできない

エラー画像4

3ステップ 詳細
現状把握 ●現状:「詳細」ボタンをクリックするとNoMethodErrorが発生する。
●ゴール:ツイートの詳細画面を見ることができる。
エラー文を解読 ●①「NoMethodError in TweetsController#show」
→Tweetsコントローラーのshowアクションに定義されていないメソッドがある。
●②「Did you mean? comments」
→'comment'は定義されていない。'comments'と書きたかったのでは?
仮説を立てる ●エラー文で言われいている通り、コントローラーのshowアクションにある'comment'を'comments'に直してみる。
  • なぜそもそも複数形にしないといけなかったの?
    →モデルに書いてあるアソシエーションが関係している
    (今回は一つのユーザーに対して複数のコメントが紐づく「1対多」の関係だった)

  • Did you mean? はヒントなので参考にしてみる

  • アソシエーションはモデルに記載する




(5)マイページにアクセスできない

エラー画像5

3ステップ 詳細
現状把握 ●現状:マイページにアクセスするとNoMethodErrorが発生する
●ゴール:マイページをみることができる。
エラー文を解読 ●①「NoMethodError in UsersController#show」
●Usersコントローラーのshowアクションに定義されていないメソッドがある。
●'tweets'は定義されていない。
仮説を立てる ●このtweetsはuserが持っているtweetsを意味する。
●userは複数のツイートを持つ
●Useモデルのアソシエーションを確認する。
  • アソシエーションのスペルミスだった。(モデル)

  • did you mean?が変な綴りの時は、それに関連している他の部分がおかしい。(今回で言えば、「コントローラーの綴り誤っている?」とエラーが出たが、紐解いてみると「モデル」の誤りだった。)




(6)検索するとエラーが生じる

エラー画像6

3ステップ 詳細
現状把握 ●現状:検索するとRoutingErrorが発生する
●ゴール:検索でき、検索結果が表示される。
エラー文を解読 ●Routing Error / No route matches [POST]"/tweets/search"
●ルーティングエラーが発生している。
●POSTとルーティングが合わない。
仮説を立てる ●リクエストがHTTPメソッドPOSTで飛んでいる。
●ルーティングのファイルをチェックする。
form_withがあるapp>views>tweets>index.html.erb
  • ついHTPPメソッドが違うと、ルーティングかな?と思ったが、そもそもユーザーに入力してもらったものを、ビューファイルで受け取り、コントローラーへ渡しているform_withの指定HTTPメソッド誤りであった。

  • エラーとは関係ないが、ルーティングで「7つのアクション」以外を定義する場合にはcollectionを使用して設定する(今回はsearchアクション)

HTTPメソッド 役割
GET 情報を取得する
POST 情報を投稿する
PUT 情報の全体を修正する
PATCH 情報を部分修正する
DELETE 情報を削除する




感想

  • いつも夕食後、眠くなってしまう。休み明けで朝1時間のみの勉強だったこともあり、夜も勉強もう少しやりたかった。結果、筋トレをしたら目が覚めて集中できた。

20201011_今週の振り返り

今週の振り返り

現在の学習戦略(2ヶ月2週間目)

  • 観点は(HOWよりも)WHYを大事にする

  • 作業時間を確保する(原則、平日4時間、休日10時間)
     ただし、 睡眠時間の0時〜6時を守ること。週35時間以上の勉強時間を確保できれば良しとする。

  • 優先順位を決めて行う(約60%がテックキャンプのカリキュラムを進めること・仲間とのアウトプット、約20%がプロゲートで知識補う、約20%がブログでアウトプット)



達成具合

観点:OK
作業時間:34時間
優先順位:カリキュラム+ブログのみ(プロゲートまで手が回らなかった)



良かったこと

  • 今週学んでいたクラスの継承やインスタンス変数、テストコードなどについて「なぜ」大事にして進めていたら後半役割が繋がってきたこと。

  • 応用カリキュラムが今日終わったこと。

  • ブログを書いていると、意外と覚えていないところが明白になること。(その都度思い出せなくてカリキュラムに戻ることが理解につながっていること)

  • 10月7日に会社で参加した講座から2つ学んだことがあった。1つ目は、強み弱みを含めて、自分の特性をきちんと把握すること。2つ目は、自分を労る時間(リフレッシュする時間)を大切にすること。

  • その学びを得た夜に「やりたいこと」と「夢のために身に付けたいこと」を紙に書き出した。今までは「やりたいこと」をゼロにして、「夢のために身に付けたいこと」が100%になっていた。そのせいでだんだん「義務感」に駆られていることに気がついたので、どちらかを捨てるのではなく、両方実現できる方法はないか考えた。

  • なので、10月8日からは基本的に朝を勉強する時間とし、夜はリフレッシュする時間(やりたいこと)にした。そのおかげでメリハリがつき、睡眠の質が上がったり、プログラミングが楽しいと再び思えるようになった。



悪かったこと

  • 日々進めるのに精一杯で、今日の夕礼に出た時に今週学んだことは何だったかすぐに出てこなくて、ハッとした。
    復習にもブログ使えるため、隙間時間に見ようと思った。

  • 振り返りと言いつつ、どうやったら自分にあった方法でプログラミングを身につけられるか(これからの方法)ばかりに目を向けすぎていたので来週は学んだことを思い出せるように週の途中でブログを見返すようにする。



環境を通して学んだこと(個人面談・夕礼)と、今後の課題

  • コードを読めることと書けることには大きな差がある。2ヶ月たち、「読める」ようにはなった。次は「書ける」ようになる!

  • すぐ出来ることとして模写を継続しつつ、発展カリキュラムを終わらせたらアプリケーションを作って実践を積み重ねる。コードを沢山書いて、感覚で覚える。(現状はメソッドや引数やif関数など少しずつ書き慣れてきたものの、文章をコードに1から書き起こすのがまだ出来ない。工程を分解できる目線を持つ。)

  • ぐぐり力を鍛える。

  • 毎日1分でもいいので瞑想する。(生産性をあげるために、集中力を鍛える)

  • とにかく時間をかけるよりも、本質はどこかを見極めながら進める。本質を見つけることが出来たら、必要以上に時間をかける必要はないため。今はまだ基礎全体をみている感じがする。あとは、とにかく楽しみながらプログラミングやる。

  • まずは行動してみる。1歩進んでみて失敗したらそこから学べば良い。うまくいけば2歩目以降もを進んでみればいい。



学習戦略の見直し

  • 観点は(HOWよりも)WHYを大事にする

  • 作業時間を確保する(原則、平日3時間、休日10時間)
     ただし、 睡眠時間として6時間を守ること。
     基本的には朝学習。夜はリフレッシュの時間とする。(ちゃんと自分を労る)

  • 優先順位を決めて行う(第一優先がカリキュラム。学んだところはブログでアウトプット。必要に応じて、プロゲートで基礎おさらい。)

  • 毎日学習前に1分瞑想。

20201011_アウトプット(オブジェクト指向)

アプトプット画像

学んだこと

オブジェクト指向を踏まえたクラスの扱いについて

  • クラスに含まれる値や処理のまとまり(=オブジェクト)を意識しながら、実装することを「オブジェクト指向」という。あくまで設計思想の1つなので「これ」という一つの正解はない。実装のしやすさ・改変のしやすさを考えて意識して設計していくことが大事。

  • 反対に、オブジェクト指向を意識しないがために分かりづらいコードのことを「スパゲッティコード」という。
    ●オブジェクト内に様々な役割が入り組んでいて、どこに何があるのかわからない。
    ●1つの機能を変えた途端、その変更とは関係ないはずの機能が動かなくなる。
    というような問題がある。

  • 単一責任の原則とは、それぞれのクラスに明確な役割が1つだけ与えられることを指す。 (例えば、自動販売機のマシーンを作るのであれば、①販売する飲み物の種類のクラス、②自販機のクラス、③購入する人のクラス、④スロットマシーンのクラスといったように分ける。)

メソッド 役割 備考
ゲッター ローカル変数を他のクラスでも使えるようにインスタンス変数として定義する時に使う イニシャライズメソッドの下に続けて書くことが多い
セッター ゲッターで定義したインスタンス変数の中身の値をを更新する時に使う 「def インスタンス変数名=」となる(=が名前に含まれているのがポイント)

自分なりの覚え方:他のクラスでも受け取れるようにするのがゲッター、それをセットし直すのがセッター

なるほどと思ったこと
  • 書き換えられたくない時に、プライベートメソッドに書くのかなと思ったけれど、プライベートメソッドは「いよいよデータベースにインスタンス変数の中身を保存するよ、内容を確定させるよ」の意味合いが強いことをメンターさんに学ぶ。

  • なので、インスタンス変数の中身を書き換えられたくないときは、プライベートメソッドに書くというよりも、ローカル変数のままにしたり、フリーズさせたりする方が適している。(もちろん、更新の意味を持つセッターは使わないことになる。)

  • 全体の理解として、
    インスタンス変数とは‥戻り値に個性があること(色・重さ)
    ●クラス変数とは‥戻り値がクラス全体の共通事項であること(乗る・走る)
    それを踏まえて、
    ●他のクラスでもインスタンス変数を使いたい場合にはゲッターを設ける
    ●ゲッターのインスタンス変数を更新したい場合にはセッターを設ける
    インスタンス変数の戻り値の結果を使って、クラス全体の振る舞いを定義したい時は、selfをつけたクラスメソッドを使う(赤い車に乗る)
    インスタンス変数の戻り値を使わない場合や、そのメソッド内でしか使わない場合はローカル変数を使う
    と頭の中を整理できた。

読み込む時に使う「require」について

読み込み方について頭を整理できていなかったため、まとめる。

# その1:ライブラリを読み込む時👉ライブラリ名だけでOK!
require 'ライブラリ名'
# その2:自作のRubyファイルを読み込む時👉ファイルまでの相対パスが必要!
# 補足:「./」はカレントディレクトリを示している。 
require './slot_game.rb'

# 拡張子は省略可能
require './slot_game'

★requireは、Rubyを実行しているディレクトリがパスの起点になる。


その他(load)

読み込むメソッドには「require」の他に「load」もある。
違いは、
①読み込むファイル元に変更があった場合に、それが反映されること。(反対に言えば、requireの場合には、1回しか読み込まない。)
②その分、読み込みに時間はかかる。
③拡張子は省略できない。

load './slot_game.rb'


その他(require_relative)

★require_relativeは、自分のファイルが存在する(呼び出したい側の)ディレクトリが起点となり、探したいファイルを指定しにいく。



「==」と「&&」について

  • 「==」は、左辺と右辺が等しいか見る演算子。そのため比較できるのは2つとなる。

  • 「&&」は、左側にある条件と右側にある条件が「かつ」となっているか見る演算子

if result[0] == result[1] && result[0] == result[2]
  • 「==」と「&&」を組み合わせて、a=b 、a=c、つまりb=cという状況を作り出しているのが上記コードとなる。(3つ以上のものが等しいか見る時に使える。)



積み残し(復習したいところ)

  • devise rollback方法

  • カラム追加の方法

  • Rails勉強会



感想

  • プログラミング勉強を初めて約2ヶ月が経ったが、パズルに例えると全体像(Rubyの大枠)ついては理解が深まった。

  • まだまだ足りないところとしては「どこまで分解していけばメソッド等を作れるか」と細かいピースの組み合わせを想像できるレベルには到達していないということ。

  • 例えば、今回の課題図書で、「スロットを作ろう」というのがあった。なんとなく配列を使いそうだなと想像したものの、細かく分解する工程が浮かばなかった。

  • 上記回答例としては、①配列という箱を作る。②timeメソッドとrandメソッドを使いその箱に3回のランダムな数字をいれる。③その配列の箱に入れた数字を横並びにするためにjoinメソッドを使う。④if文を使い一致しているか否かでメッセージを設定するといった工程に分解してコードを書いた。

def play_slot
    result = []
    3.times do 
      result << rand(0..9)
    end
    puts "スロットゲームの結果は#{result.join}です!"
    if result[0] == result[1] && result[0] == result[2]
      puts "おめでとうございます!"
    else
      puts "残念でした〜"
    end 
  end
  • 細かいピースの組み合わせを浮かぶようにするために「抽象化⇆具体化」の視点を意識しながら学ぶ。