---
# System prepended metadata

title: "【第2週】\U0001F352チェリー本輪読会 (2021\\-05\\-31\\~2021\\-06\\-04\\)"
tags: ["チェリー本\U0001F352"]

---

# 【第2週】🍒チェリー本輪読会 (2021\-05\-31\~2021\-06\-04\)
###### tags: `チェリー本🍒`

[チェリー本 輪読会ノートまとめ \- HackMD](https://hackmd.io/vDXm6tpgTdeHKByO1HK5_Q)

## 目次

> [TOC]

## 2021\-05\-31

### 参加者

- @isshi-hasegawa 
- @hosso
- @yatsuhashi
- @shirotamaki
- @yana-gi
- @eatplaynap

### 司会

```ruby
%w[eatplaynap isshi-hasegawa hosso yana-gi shirotamaki].sample
  ```
[タイマー](https://timer.onl.jp/)

### スタート地点

- 第2章 2.9から

### 疑問点・気づき

#### 第2章 2.10.5まで

- @shirotamaki 
    - ビット演算子　整数に鯛してビット単位で演算を行う演算子。要は2進数のこと？
    - 複素数…Complexクラス...
    - and or は条件分岐では使わずに、制御フローで使うようにする。
    - valid?　メソッド？　バリデーション制御?
        - [Active Record バリデーション \- Railsガイド](https://railsguides.jp/active_record_validations.html)
    
- @isshi-hasegawa 
    - &&や||の戻り値と評価を終了するタイミング、動きをちゃんと理解していなかったけど便利そう
    - and、or、notは優先順位が低い（復習）
    - andやorは制御フローを扱うのに向いている
    - 三項演算子好きだなあ（可読性さがらないよう注意）
    
- @eatplaynap
  - ビット演算のこと何もわからない…2進数のなにか？
    - [IPアドレス \- Wikipedia](https://ja.wikipedia.org/wiki/IP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)
    - [C \- Friends and Travel costs](https://atcoder.jp/contests/abc203/tasks/abc203_c)でbitについてなんか書いてある
  - 2．9のほとんどが何も分からないかも。
  - 式の評価を始めて最初に評価が終了した時点での値が戻り値になって返ってくる
  - `nil || false || 2 || 3`で2がかえるのは何故？
    - `||`の場合1つでもtrueになればtrueかえる、左から見ていって最初にtrueになった値が戻り値になる
```ruby
a ||= 1 # a が false か nil のときだけ a に 1 が代入される
a = a || 1 # 展開するとわかりやすい
```

- `&&`のほうが`||`より優先度高い(前やなぎさんが言ってたような)
  - `and`と`or`は制御フローを扱うのに向いている
    - だけどメソッド呼び出しの`()`があれば`&&`と`||`でも構文エラーにならないので、別に`&&`と`||`でよさそう
  - `unless`はボウリングのプログラムで使った気がする
    - `elsif`に対応するものはないので使い勝手はそんなによくないと思った
  - `when`にRangeオブジェクト渡せるんだ。書き方がわからん
    - [制御構造 \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html#case)
  - AtCoderのA問題は三項演算子で書けることが多いけど、慣れてないのでまだ書いたことがない。
    - ふきんさんの回答とかはめちゃ使ってる

- @hosso 
  - 先頭に`0`がきたら8進数。`0`だけだと分かり辛い…？
  - Rubyは左辺から式を評価して、真又は偽が確定すると評価値を返す。
  - `and`と`or`は優先度に違いはない。
  - `unless`あんまり使ったことないかも。ifの否定条件で書いてる。
      - 否定的な結果が返る場合に使いやすい？
  - 三項演算子ようやく使えるようになってきた。可読性に注意。
  
- @yatsuhashi
     - if文以外で`&&`や`||`を意図的に使うところがある
     - 三項演算子上手く使えるようになりたい

- @yana-gi
    - ビット演算、どういう時に使うんだろう……？
    - 最後に評価した式の値を返すのはRailsでよく使ったような
    - 条件で処理を変えたい場合、if文だけでなくunless文/case文/三項演算子など色々ある。処理に合わせて使い分けたい

### 振り返り(よかった点・次回に向けての改善点等)

- @isshi-hasegawa 
    - 司会しながらだと若干忙しかったです。
    - 「5分計ります」と言って実は6分くらい経ってることも…
    - case文でwhenにRangeオブジェクト渡す例このあとやってみます。
        - [制御構造 \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html#case)

- @hosso 
  - 真偽値、条件分岐はかなり大事なので、改めて皆さんと確認できてよかった。
  - ビット演算子周りは基本情報でただ憶えただけなので、もう少し用途や何のための技術なのかまで考えれるようしたい。それを踏まえてからRubyで活用できるなのかな？

- @eatplaynap 
  - 真偽値の評価について、明確な理解ができないまま進めていたので、今日教えていただけてよかった。
  - 数学的な箇所はきっと実務で使うから掲載されてると思うので、Q&Aに投稿して聞いてみようかな？
  - 皆三項演算子をかっこいいと思っていることが分かった。

- @yana-gi
    - 真偽値の評価がなんとなくの理解だったので今回確認できてよかった。
    - atcoderなどの競プロはコーディング力があがるだけじゃなくて具体的な用途が分かるなと思った

- @yatsuhashi 
    - そういえばこんなのあったな、あったんだ、みたいなものがたくさんある
    - 競プロ少し面白そうだと思った

- @shirotamaki 
    - ビット演算子、指数表現、複素数など、数学的な知識が必要な内容が2.9には多く難しかった。しかし、ビット演算子の使い所（IPアドレス）など、話しが聞けることで、イメージできるにようになれた。キタミ式で学習する。
    - &&や||の戻り値と評価のタイミングは、yatsuhashiさんの説明がわかりやすく腹落ちした。
    - 三項演算子を使えるようになりたい。かっこいいコードですね。と言われるように頑張る。
      - 言われてみたい 

## 2021\-06\-01

### 参加者

- @hosso 
- @eatplaynap 
- @yana-gi
- @shirotamaki
- @isshi-hasegawa
- @yatsuhashi 
- @obregonia1 

### 司会

```ruby
%w[eatplaynap isshi-hasegawa hosso yana-gi shirotamaki].sample
  ```
[タイマー](https://timer.onl.jp/)

### スタート地点

- 第2章 2.11

### 疑問点・気づき

#### 第2章 2.11.3まで

- @shirotamaki 
    - デフォルト付きの引数は使ったことないなー
    - `?` で終わるメソッドは慣習で真偽値を返すメソッド。自分で作る真偽値を返すメソッドであれば`?`で終わらせるようにした方がよい。`def multiple_of_three?(引数)`
    - `odd` `even` がいつも「どっちだっけ？」となる...
        - odd 3文字奇数、even 4文字偶数 で覚える。
    - 破壊的メソッド`!`  は使うときに注意

- @eatplaynap 
  - `def default_args(a,b,c = 0, d = 0)`は`a,b,c`に0が代入されてるのかと一瞬思ってしまった。デフォルト値のルールを知らないと誤読しそう。
      - メソッドのスコープ内で`a,b,c = 0`を行うのとしっかり区別しなきゃですねー。
  - `？`で終わるメソッドは真偽値を返す。自分で定義するときにつけてもOK。変数名にはつけられない。
    - 動詞で始めるメソッド名に`?`を付けるの何となく変な気もする。チェリー本の例に出てくるメソッド名も動詞ではない。(`multiple_of_three?`とか)
    - 真偽値が返ってくるメソッドの場合、動詞で始めるメソッド名を付ける必要は(必ずしも)ないのかも。
  - `！`がつくからと言って全て破壊的メソッドではない。破壊的メソッドでも`!`がつかないものもある。いずれにせよドキュメント読む。

- @yatsuhashi 
    - メソッドのデフォルト値は他のメソッドの戻り値や動的に変わる値も設定できる
    - 破壊的メソッドでない`!`を使うメソッドもある

- @hosso 
  - 引数の数合わなくなりがち。 
      - :aruaru:
  - デフォルト付き引数は非OOP版lsコマンドの伊藤さんの動画見つつ、自分のOOP版lsコマンドで使った。
  - 最後に`?`がつくメソッドは真偽値を返すメソッド(決まりではなく慣習)
  - `!`は`?`ほど慣習が明確ではない。`!`を見つけたらしっかりメソッドの中身もチェック。
  - 変数は`?`や`!`で終われない。

- @isshi-hasegawa 
    - 真偽値を返すメソッドは`?`で終わらせるとわかりやすい
    - ふと`save!`を思い出した
        - [Railsで感嘆符！を理解しよう（save, save\!） \- Qiita](https://qiita.com/ozin/items/5968971c9d2b3ab0a84d)
    - David Bowie – Space Oddity ついにOddを覚えた

- @yana-gi
    - !で終わるメソッド=破壊的メソッドだと勘違いしていた。そうでない場合もある。
    - `upcase`と`upcase!`のように!がついていない/ついているパターンがそれぞれ用意されてるメソッドがある。できるだけ破壊的なメソッドを使わない方がいいと思ってるけど、明確な使い分けが分かってない……

- @obregonia1 
    - デフォルト値付きの引数が複数ある場合はパッと見てわかりにくい
    - 変数名に!や?が使えないのは初めて知った

#### 第2章 2.12.5まで

- @eatplaynap 
  - エイリアスメソッドを自分で定義する意味とは？
  - 式と文の違い？
    - 値を返し、結果を変数に代入できるのが式
    - 値を返さず、変数に代入しようとすると構文エラーになるのが文
  - if文を変数に代入したことはない
  - 疑似変数、lsコマンドとかで使いそう(使ってない)
    - Rubyで書いたファイルの中で`p __FILE__`をするとファイル名が返ってくる
    - obregoniaさんが試してくれたコード↓
    ![](https://i.imgur.com/HzSzpq7.png)

  - 参照の概念わからん
    - 変数aを別の変数bに代入したり、メソッドの引数として渡すとaとbは同じオブジェクトを参照する
    - `object_id`メソッドでIDを見ると、aとbどちらも同じ値を返す(もしくは`equal?`メソッドでも確認できる)

- @yatsuhashi 
    - ガベージコレクション、基本情報技術者試験でやったなー
    - 「文のように見えるが式」という要素が多い（戻り値を活用できる）
    - オブジェクト参照、Linuxのハードリンクに似てる気がする

- @hosso 
   - 「エイリアスメソッドは自分で定義できる」知らなかった。自分で定義すると便利なのか？
   - `true`や`false`は擬似変数。
   -  参照難しい…破壊的メソッドを気を付ける。
   - 「メソッドの定義も実はシンボルを返してる」そうなのか。

森塚さんのコード例👇
```ruby=
irb(main):001:0> def foo
irb(main):002:1>   1
irb(main):003:1> end
=> :foo
```

- @isshi-hasegawa 
    - if文やメソッド定義は「式」！「文のように見えるが実は式」のものはやろうと思えば戻り値を活用できる
    - 疑似変数にこんなにお世話になるとは
    - オブジェクトの参照について [【JS】ガチで学びたい人のためのJavaScriptメカニズム \| Udemy](https://www.udemy.com/course/javascript-essence/learn/lecture/20840382?start=0#overview)のセクション６：変数

- @yana-gi
    - if文は変数に代入できる「式」。mapもそうかな？
        - [Rubyでif文やwhile文とか言っている入門は非推奨 \- Qiita](https://qiita.com/raccy/items/89a1fc77337cb9df8928)
        - [プログラム・文・式 \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/doc/spec=2fprogram.html)
        - [制御構造 \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html)
    - 文は具体的にどういうものだろう？
        - クラス定義やメソッド定義、変数代入などが文
        - [式と文、評価と実行、そして副作用 ―― プログラムはいかにして動くのか【前編】](https://magazine.rubyist.net/articles/0039/0039-ExpressionAndStatement.html)
    - メソッドの定義の戻り値はメソッド名のシンボルだったのか。
    - 変数の考え方難しい

- @shirotamaki 
    -  GC。Ruby以外はどうなのか？
    -  疑似変数がよく分からない。変数なので値が変わるのか？でも「代入しようとするとエラーになる」と、あるので違うのかな？ 特殊文字的な？

- @obregonia1 
    - `__ENCODING__`が謎
        - [多言語化 \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/doc/spec=2fm17n.html)
    - irbでメソッド定義してシンボルが返ってくる理由がわかった
    - 参照の概念なんとなく理解できた

### 振り返り(よかった点・次回に向けての改善点等)

- @eatplaynap 
  - 疑似変数、人のlsコマンドのコードで見て謎だと思っていたので、具体例が分かってスッキリした！
  - 参照の概念、まだ人に説明できるほど理解できていないが、何となく分かった気がするので適宜またこの章を読み直したい。
    - いっしーさんおすすめのUdemyの講座見てみる(セールのとき買う)
  - 昨日の[Q&A](https://bootcamp.fjord.jp/questions/923)に著者伊藤さんから回答をいただけたので満足感(？)がすごい。皆ももっと質問しよう！

- @shirotamaki 
    - 疑似変数が理解でき良かった。obregoniaさんの例が分かりやすかった。
    - `odd` `even`　は、もう間違えない。3文字、奇人で、`odd` 

- @obregonia1 
    - なんとなくわかったつもりで読んでいた部分も実は分かっていなかったりする
    - 頭の中で何となく分かっていることを言語化するのは難しい
    - メソッド名は基本的に動詞がいいが真偽地の判定のメソッドは例外かも

- @yana-gi
    - 変数や参照など、普段当たり前のように使っているものでも忘れていたり見落としていることが多いことに気づけた
    - 破壊的メソッドをなるべく使わない理由の1つを変数の概念のところで理解できた！

- @isshi-hasegawa
    - 参照の概念についてはもう少し深堀りしたい
    - わからないまま使うとこわい
    - 久しぶりに２サイクルやった

- @yatsuhashi 
    - 疑似変数の使用例、見れてよかったです
    - 本の著者から回答いただけるのは本当にありがたい
    - 破壊的メソッドは怖い（名前も

- @hosso 
  - メソッドの戻り値がシンボルになっていたのを理解できた！森塚さんありがとうございます！
  - 擬似変数理解できた！`__〇〇__`を見ても怯まなくなりそう！
  - 司会難しいけど楽しかったですー！
    - すっごい安定してました！ありがとうございます〜

## 2021\-06\-02

### 参加者

- @isshi-hasegawa 
- @eatplaynap 
- @shirotamaki 
- @hosso 
- @yana-gi
- @yatsuhashi 

### 司会

```ruby
%w[eatplaynap isshi-hasegawa hosso yana-gi shirotamaki yatsuhashi].sample
  ```
[タイマー](https://timer.onl.jp/)

### スタート地点

- 第2章 2.12.6

### 疑問点・気づき

#### 第2章 2.13まで

- @shirotamaki 
    - `require`は１回しか読み込まない。`load`を使うと毎回無条件に指定したファイルを読み込む。とあるが、このふたつの使い分けはどうしたらよいのかな？例えば、sinatraでは、'require'しているが、'load'では行けない理由は？
    - Rubyにはコーディングルールがない。とは？動くコードで、かつRubocopをパスすれば一応OKということ？
        - プロジェクトによって違う感じですね〜
- @eatplaynap
  - `Date`は標準ライブラリだけど組み込みライブラリではないから`require`が必要。
    - 組み込みライブラリの読み込みってAtCoderでできたっけ？
    - 出来た。昨日できないと思ったけどtypoしたかも。
  - `puts`ではオブジェクトは自動的に`to_s`されている？
    - 出力の際はそう。でも昨日の参照の話と同じで、レシーバ自身は破壊的には変更されない。
    ```ruby
    a = 1
    puts a # 1 と出力
    a.class # => Integer
    ```
    - 👇 森塚さんのTips
    ```ruby
    # 配列をputsすると各要素が改行されて出力される
    irb(main):002:0> puts [1,2,3]
    1
    2
    3
    => nil
    ```
  - `puts`がメソッドだということ、SinatraでJSONファイルに書き込むとき初めて知ったような気がする。

- @yana-gi
    - `require`と`require_relatiｖe`の具体的な使い分けってある？
        - 自分はライブラリを読み込む `require` 、自分が作ったコードファイルは`require_relatiｖe` を使ってることが多い
        - 自前で書いたファイルを`require`する場合は `require_relative`の方が安全
        - [requireとrequire\_relativeの使い分け \| FJORD BOOT CAMP（フィヨルドブートキャンプ）](https://bootcamp.fjord.jp/questions/824)
        - [require '\./file'とrequire\_relative 'file'の違い \- @znz blog](https://blog.n-z.jp/blog/2016-07-26-require-relative.html)
    - putsやprintメソッドは内部的に`to_s`を呼んでいる
    - pメソッドは内部的に`inspect`メソッドを呼んでいる
        - >オブジェクトを人間が読める形式に変換した文字列を返します。[Object\#inspect \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/method/Object/i/inspect.html)

- @hosso 
  - gem = 外部ライブラリ
  - `load`を使う場面はどんな場合だろう？
    - 自分で作った`rb`を修正して毎回読み込む時か。
  - `pメソッド`は引数で渡したオブジェクトが戻り値になる。改行文字もそのまま出力される。他2つの戻り値は`nil`。
  - `putsメソッド`と`printメソッド`は引数で渡されたオブジェクトを`to_s`している！
  - `pメソッド`は`inspectメソッド`を呼び出している。`inspectメソッド`初めて聞いた。
  - `pメソッド` `putsメソッド` `printメソッド` それぞれ中身みてみたい。Rubyの中身見た事ない。

- @isshi-hasegawa 
    - 標準ライブラリと組み込みライブラリの定義があやふやだった
    - `load` `'./sample.rb'`
        - 無条件に再読み込みできる
        - 拡張子`.rb`を省略できない
        - 使い所は？
    - `require_relative`はテスト書くときに使ったような
    - `inspect`は"検査する"

- @yatsuhashi 
    - 相対パス、絶対パスの使い分けってどんな感じだろう
    - `puts`メソッドは戻り値が`nil`になるが、`p`メソッドは引数で渡されたオブジェクトが戻り値になる

### 振り返り(よかった点・次回に向けての改善点等)

- @isshi-hasegawa 
    - `load`について深堀りしたい
    - `puts`メソッドの戻り値は`nil`
    - `p`メソッドの戻り値は引数で渡されたオブジェクト
    - フィヨルドブートキャンプのQ&AをChromeの検索エンジンに連携させたい

- @yana-gi
    - 過去にQ&Aをしてくれた方のおかげで`require`と`require_relative`（レラティブ）の使い分けがすぐ解決できた！
    - 自分もこの先他の受講生の疑問点がすぐ解決できるようにQ&Aに質問していきたい。
    - 今irbでrequireを試してみたところ、ファイルを変えたらちゃんとfalseになった。普段はIDEがよしなに再読み込みしてくれてるのかも？

- @hosso 
  - `require`と`require_relatiｖe`の使い分けしれたのはよかった！Q&Aは知見の宝庫。
  - `load`は要深掘り。
  - `pメソッド` `putsメソッド` `printメソッド`それぞれの特徴が再確認できた。
  - Rubyの中身は少しハードルが高いから、Kernelモジュールを見るのも良さそう。
    - [Ruby 3.0.0 リファレンスマニュアル Kernelモジュール](https://docs.ruby-lang.org/ja/latest/class/Kernel.html#M_P)


- @eatplaynap 
  - Rubyの中身を見るという発想がなかったけど、たしかにこうやって深堀りしていくと気になることが増えてくる。
  - 輪読会で話し合う→分からん→最終的にQ&Aに投稿して解決という流れがとてもいいと思った。
  - ライブラリの概念の理解が曖昧だったけど、gemがライブラリの一種だと思うとあまり怖くないというか、気軽に使えそう。

- @shirotamaki 
    - `puts` `print` `p` について曖昧な理解だったが、今回見直したことで理解が深まった。
    - `require` `load`の使い分けなど、輪読会のなかで解決できなかった問題について、Q&Aに流すフローができると、今後もよい知見がたまり他の受講生の助けにもなると思った。
    - チェリー本関連のQ&Aのリンクのまとめページが、HackMDとかにあってもいいかも。
    - レラティヴ、シーキューウェル

- @yatsuhashi 
    - Q＆Aの蓄積がすごい
    - カレンダープログラムで`date`ライブラリを読み込み忘れてあたふたしたのを思い出した
    - `irb`って便利だなぁと思いました

## 2021\-06\-03

### 参加者

- @hosso 
- @shirotamaki 
- @eatplaynap 
- @yana-gi

### 司会

```ruby
%w[eatplaynap isshi-hasegawa hosso yana-gi shirotamaki yatsuhashi].sample
  ```
[タイマー](https://timer.onl.jp/)

### スタート地点

- 第3章 3.1

### 疑問点・気づき

#### 第3章 3.2.5まで

- @eatplaynap 
  - プログラマの三大美徳、短気しか自分は当てはまらない
  - Minitest以外にもテスト用フレームワークがある
    - フレームワークってなんだっけ？
      👉 [ソフトウェアフレームワーク](https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF)
    - `require`で使える
  - Minitestは`test_`で始まるメソッドを探して実行する
  - `assert_equal`はMinitestが提供する検証用メソッド
  - Runningの下の.はテストされるメソッドの数？
    - `test_`で始まる、テストするメソッドの数
  - テストメソッドが複数ある中、1つのメソッドが失敗したら次のメソッドに移る
    - 「テストメソッド」は本の中では`test_sample`で定義されてるメソッド。`test_sam`
    - その場で強制終了とかかと思ってた
    - 複数メソッドでパスするものとしないものがあるときの表示がきになる

- @hosso 
  -  テストファイルのクラス名は`〇〇_Test`で終わる。(キャメルケースで書く)
  -  メソッド名は`test_〇〇`と書く！必須！
  -  検証メソッドはMinitest側で用意されたメソッド。
  -  `assert a`はaが真の時、`assert_not a`はaが偽であればパスする、これテスト課題で使った、`refute`との違いは？
     - ますやまさんがブログに書いていた！
     👉 [Ruby refute と assert_not の違いを調査](https://masuyama13.hatenablog.com/entry/2020/08/07/235138)
  -  最初の１文字を大文字にする`capitalize`メソッドなんてあるんだ、Rubyって本当にいろんなメソッドありますね。
  -  `Expected`は期待した結果、`Actual`は実際の結果。
  -  `Failure`と`Error`の違いに注意！

- @yana-gi
    - プログラマの3大美徳が怠惰しか当てはまらない
    - 目で確認しなくてもいいのでテスト好き。書けるようになりたい
    - Rubyのテストを検索するとRSpecの記事ばかりでてMinitestはあまり出てこない……
    - 検証メソッド（アサーション）の一覧
    　[module MiniTest::Assertions \(Ruby 1\.9\.3\)](https://docs.ruby-lang.org/ja/1.9.3/class/MiniTest=3a=3aAssertions.html)
    - テストの結果と期待値が合わなかったらFailure、実行中にエラーが起きたらError

- @yatsuhashi 
    - テストコードのクラス名はキャメルケース、ファイル名はスネークケース
    - テストメソッドは`test_`で始まらなければならない
    - 失敗とエラーの２種類あることあまり意識してなかった
    - プログラマのとかじゃなくて普通に怠惰

- @isshi-hasegawa 
    - `Minitest`は`test_`で始まるメソッドを探す
    - assert_equal 期待する結果, テスト対象となる値や式
    - [Minitest::Assersionsのassert系メソッドを全部試してみた \- Qiita](https://qiita.com/TomoProg/items/fe99e7dde5e901d0673f)
    - [RSpecとminitestのおおまかな違い \- Qiita](https://qiita.com/kenkenkengo-y/items/5fb3f3602dcf3826ce19)
    - [Everyday Rails… Aaron Sumner 著 et al\. \[Leanpub PDF/iPad/Kindle\]](https://leanpub.com/everydayrailsrspec-jp)

- @shirotamaki 
    - `minitest/autorun`　を `require`すると、Minitestが使えるようになる。
    - クラス名は、慣習として`Test`で終えるようにする。(キャメルケース)
    - ファイル名は、（スネークケース）を使い、クラス名に合わせる。
    - `test_`で始まるメソッドを探して実行。`test_sample` `test_equal` など。
    - テスト全般がよく分かっていない。テストコードを書いたことない（ある意味怠惰で傲慢)
    - テスコードの具体例を見て、どのような動きになるのか確認してみたい。

### 振り返り(よかった点・次回に向けての改善点等)

- @eatplaynap 
  - 勘違いしている点がたくさんあった。人に向けて説明しないとずっと勘違いしたままだったかも。
  - 実際書いてみたことがないから憶測でいろいろ変なことを言ってる気がする…
  - テストのコード、なんとなくむずかしそうで目が滑っていた。ちゃんと理解すればそうでもないかも
    - エラーもむずかしそうだけどよく読むと親切
    - テストを書くのは大事。AtCoderでも練習のためにテスト書いてみてもいいのかも？


- @isshi-hasegawa 
    - テストは大事や
        - 会社説明会でテストカバレッジ率をアピールする企業もあった
    - `ruby-book`ディレクトリに`fizz_buzz_test.rb`がまるまる残ってた
    - テストのプラクティスにはやく進みたい

- @yana-gi
    - テストの書き方自体も難しいけど、そもそもテストクラスの書き方にお作法が多いのが難しく感じる原因なのかな？と思った
    - 3.3からのFizzBuzzのサンプルコードはみんなで書いたり読んだりしてみたい
    - TDD好きな方が「テストと対話している感覚」と言っていたのが印象的だった。自分もそうなりたい

- @hosso 
  - 今はテストを書く恩恵より、テストを考えて書く大変さの方が上回っているので、今後書き慣れたら「テストあってよかったー！」となるのかな？
  - テスト課題めっちゃ面白かったので、テストがんがん書いていきたい！
  - 今後増えていきそうですが、新しい単語がたくさん出てきたらそれを整理するのが大変だなーと思った。
  - `assert_not`と`refute`の違いをますやまさんがブログに書いてた！エラーメッセージの違いまで検証していて、卒業生凄い。

- @yatsuhashi 
    - 絶対実際のコード見ながらやったほうがいいやつ
    - テストの恩恵をまだ感じづらいかも

- @shirotamaki 
    - テスト書けるようになりたい。
    - 一度読んだ時はかなりざっと読んだのでほぼ理解していなかったが、今回は内容自体は理解できた気がするので良かった。
    - 実際に自分で書いて使ってみることが一番理解の助けになると思った。

## 2021/06/04

### 参加者

- @hosso 
- @eatplaynap 
- @shirotamaki 
- @isshi-hasegawa 
- @obregonia1 
- @yana-gi
- @yatsuhashi 

### 司会

```ruby
%w[eatplaynap isshi-hasegawa hosso yana-gi shirotamaki yatsuhashi].sample
  ```
[タイマー](https://timer.onl.jp/)

### スタート地点

- 第3章 3.3 から

### 疑問点・気づき

- @hosso 
  - プログラム本体は`lib`ディレクトリ、テストコードは`test`ディレクトリ。`lib`はライブラリの略？
    - [チェリー本でのディレクトリ名の意図 \| FJORD BOOT CAMP（フィヨルドブートキャンプ）](https://bootcamp.fjord.jp/questions/699)
  - test-unitとminitestは非常に似ている。何で🍒本では何故minitestを選んだのか？
    - [test-unit vs. minitest](https://qiita.com/scivola/questions/dfc339b3639336649355) 

- @isshi-hasegawa 
    - test-unitとMinitestのテストコードはよく似ている

- @yana-gi
    - diffコマンドの読み方よく分かってないかも

- @eatplaynap 
  - プラクティスでテストコードを書いてる人は1つのファイルにテスト対象コードとテストを書いて提出してるんですかね？
    - そうです
  - FizzBuzzコマンドでもErrorの中身が結構複雑
  - テスト対象のコードはメソッド定義して書かないとテストの呼び出しできない？
    - 最低限mainメソッドを定義すればいける
    - [Rubyスクリプトにもmainメソッドを定義するといいかも、という話 \- Qiita](https://qiita.com/jnchito/items/4b4cae54170cc2f4377e)

- @obregonia1 
    - diffコマンド使ったことない
    - RSpecは便利みたいだけど書き方を覚える必要がある

- @yatsuhashi 
    - 皆さんと同じです

### 振り返り(よかった点・次回に向けての改善点等)

- @isshi-hasegawa 
    - `require`と`require_relative`の違いがよくわかった
        - `require`はRubyを実行しているディレクトリがパスの起点になる
        - `require_relative`はファイルパスが起点になる
        - 自前で作ったプログラムは`require_relative`が推奨
    - [Kernel\.\#load \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/method/Kernel/m/load.html)


- @eatplaynap 
  - 実際にコードを書いて、エラーを皆で読むとめちゃくちゃ理解が進んだ。
  - テスト結果をきちんと読んだことがなかったが、ひとつずつ読んでいくと意味が分かって、有益そうなことが書いてあると思った。
    - diffは分からん
  - `require_relative`への信頼が生まれた。
  - [【123】 チェリー本 \#11 \(第4章 \| FJORD BOOT CAMP（フィヨルドブートキャンプ）](https://bootcamp.fjord.jp/reports/14366)

- @yana-gi
    - みんなでコードが動くところを見ると理解がしやすい！コードを変えてみるとどうなる？と色々変えながら実行して理解していくのがよかった
    - 呪文のように見えていたテスト結果の項目が理解できるようになった
    - ディスコードの配信とHackMDとKindleを同時に開くと流石にMacが激重

- @obregonia1 
    - `require`と`require_relative`と`load`の違いを理解できた
    - やっぱりdiffがよくわからん
    - ドライバーやる人は大変そうだなと思った
    
- @shirotamaki 
    - 手元で実行しながら確認することで、テストの動きが見えわかりやすかった。
    - エラーコードについて、ひとりで読んでいた時はスルーしていた内容もみんなで見ながら確認することで理解できわかりやすかった。
    - `require`, `require_relative`, `load`　の動きを確認でき違いがわかった。

- @yatsuhashi 
    - あれやこれや言いながらコード見るの楽しい
    - ドライバーしてくださってありがとうございます

- @hosso 
  - 途中で抜けてしまったが、皆さんコードを実行してテストしていくのはめちゃくちゃ勉強になる！
  - ドライバー緊張しそう…。
