プログラミング初学者のブログです。主に Ruby on Rails を学んでいます。
TECH CAMP受講中。

8月18日:テストコードの書き方

こんばんは。

今日は2時間半勉強しました。

モデルの単体テストコードの書き方について。

 

早く寝ないとなので、今日は短く!

 

カリキュラムに沿ってこちょこちょやるだけじゃなくて、

やっぱり練習問題的な考えるタイミングがあった方が身に付く気がします。

 

Rubyのドリルで配列の問題があって、爆死しています。

全然理解できていなかったんだと痛感...

 

辛いので寝ます。おやすみなさい。

8月17日:FactoryBot、Faker

こんばんは。

最近サボり癖が・・

睡眠時間を優先するあまり、勉強が疎かになってしまってますね。

気を引き締めて、目的を持ってはじめよう。

 

今日は1時間勉強しました。テストコードを効率的に書こうのところです。

【FactoryBot】

  • インスタンスをまとめるGem。
  • テストコード書くときに、テスト用の入力値をセットするやつ。
  • FactoryBot用のファイルを用意して記述しておく。
  • テストコード内でFactoryBot.build(:user)みたいに書いて生成して使う。

【Faker】

  • ランダム値を生成するGem。
  • 名前とかメールとかパスワードとかいろいろなものを作れる。

Gemって、いろいろあってかわいいね。

8月15日:Git、GitHub、マークダウン記法

こんにちは。

今日は終戦記念日ですね。

起きてから5時間勉強しました。

この後飲み会なので夜は難しいと思うので今のうちに更新しておきます。

 

【Git】

GitHub

  • 簡単に複数人で開発できるようにするwebサービス
  •  Gitアプリでリポジトリを作成してローカルで履歴管理しているものを、GitHubにコミットすると他の人にも変更が共有できる。
  • 「プルリクエスト」機能で他の人にコードを確認してコメントしてもらうことができる。
  • 「LGTM」Looking Good To Me。いいと思う。

【マークダウン記法】

  • 強調:**文字列**
  • 斜体:*文字列*
  • 改行:文字列▫︎▫︎文字列(半角スペース2個)
  • 水平線:*** --- ___
  • 取消線:~~文字列~~
  • チェックボックス:-[] -[x]
  • 段落:文字列▫︎文字列(半角スペース1個)
  • 箇条書き:*文字列 *文字列
  • ナンバリング:1.文字列 2.文字列 3.文字列
  • 画像:![代替テキスト](URL)
  • リンク:[リンクテキスト](URL)
  • 引用:>文字列
  • テーブル:|文字列||文字列||文字列|

GitとかGitHubとか、よく耳にしていたけど初めて実態を知りました。勉強になりました。

なんか、LGTMとLGBTがごっちゃになる。

「いいと思います」じゃなだめなんですかね。

 

マークダウンは、ちょいちょい使えたり使えなかったりしますね。

slackでも使えるものあるけど、普通にボタン押して編集した方が楽ですね。

8月13日:開発手順

こんばんは。

今日は久々の出社日だったので学習時間があまりとれず1時間。

そして睡眠時間確保のためブログ更新は簡単に。。

【開発手順】

  • 企画:問題提起
  • 要件定義:必要な機能を洗い出し、詳細情報整理
  • 設計:基本設計(外部設計)、詳細設計(コード洗い出し)
  • デプロイ:公開・リリース
  • 保守・運用:リリース後の見守りサービス

要件定義が特に重要だと思います。

ここで機能が不足していると、ペルソナの問題解決ができず要件を満たせないアプリを作ることになってしまいますね。

ここの内容は実務に繋がるので大変勉強になりました。

 

そして読者第1号コナッチさんありがとうございます!

嬉しい。

 

おやすみなさい。

8月12日:ブロック、クラス

こんばんは。

今日は、誕生日でした。またひとつ歳をとりました。

 

なので今日は自分を甘やかしてます。

1時間勉強しました。

読み物コンテンツを読んだだけです。

 

【ブロック】

  • do〜endまでがブロック
  • メソッドの引数としてブロックを渡している
  • 「people.each do |person|」の「|person|」はブロック変数
  • 1行で記述もできる
people.each { |person| puts person }
  • 自分で定義したメソッドにもブロックを使うことができる
  • yieldを記述する

 

【クラス】

  • クラスの継承ができる
  • 親クラス(スーパークラス)、子クラス(サブクラス)
class Child < Parent
end

 

自分を甘やかしているのに仕事は容赦なく降りかかってくる...

8月11日:collectionとmember、whereメソッド、LIKE句

こんばんは。

今日は平日ですが、お盆休みがあるホワイトな企業さんは今週いっぱいお休みなんですかね。

私の務める会社はお盆も関係なくカレンダー通り。

特別休暇はないけど、普通に有給取れるだけいいと思ってます。

 

今日は2時間半勉強しました。

検索フォームを作りました。

 

【collectionとmember】

  • ルーティングに使う。
  • collectionはルーティングに「:id」がつかない。
  • memberはルーティングに「:id」がつく。
  • 検索フォームのルーティングでは特定のidの詳細ページに行く必要がないので「collection」でよし。

【whereメソッド】

  • モデル.where(条件)
  • 条件に一致したレコードのインスタンスを配列で取得

【LIKE句】

  • 曖昧検索するときに使用する。
  • 曖昧文字列「 % 」
    where ( 'title' LIKE(?)', "%a%" ) aを含む文字列
  • 任意の文字列「 _ 」
    where( 'title' LIKE(?)', "_b" ) bで終わる2文字の文字列

 

仕事は基本在宅勤務になってますが、「出社」「退社」というアクションがないので定時を過ぎてもズルズルと仕事を続けがちで、通勤時間がないぶん残業時間が増えたような気がします。

そして今勉強している内容は仕事で使わない。

8月10日:SQL、N+1問題、includesメソッド

こんばんは。

今日は山の日ですね。本来山の日は8月11日ですが、今年と来年はオリンピックの影響で日付を変えているらしいですね。へー。

 

今日はしょぼいですが夜2時間勉強しました。

 

SQL

【N+1問題】

  • アソシエーションしていると起きる、テーブルにアクセスしすぎ問題。
  • 1対多 の関係のデータをDBに問い合わせるとき、
    1:ユーザー
    多:コメント
    で、「特定のユーザーに紐づくコメントをとってくる」というときに、
    1回目:ユーザーテーブルから全ユーザーのデータをとってくる
    2回目:コメントテーブルから1人目のユーザーに紐づくデータをとってくる
    3回目:コメントテーブルから2人目のユーザーに紐づくデータをとってくる
    ・・・
    N回目:コメントテーブルからN人目のユーザーに紐づくデータをとってくる
  • こんな感じでユーザーテーブル1+コメントテーブルN回のSQLが発行され、データ量が多くなる程テーブルへの問い合わせ回数が増えて、動作が遅くなる。

【includesメソッド】

  • N+1問題を解決する救世主。
  • 引数にアソシエーションで定義した関連名を指定することで、1回で全ユーザーに紐づくデータをとってこれる。
@users = User.includes(:comment)

 

若干CSSをいじってみました。無駄にgooglefonts使ってみた。