shirotamaki
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # 【第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)のセクション6:変数 - @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 - 参照の概念についてはもう少し深堀りしたい - わからないまま使うとこわい - 久しぶりに2サイクルやった - @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`は1回しか読み込まない。`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_relative`の具体的な使い分けってある? - 自分はライブラリを読み込む `require` 、自分が作ったコードファイルは`require_relative` を使ってることが多い - 自前で書いたファイルを`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_relative`の使い分けしれたのはよかった!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) - 最初の1文字を大文字にする`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_`で始まらなければならない - 失敗とエラーの2種類あることあまり意識してなかった - プログラマのとかじゃなくて普通に怠惰 - @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 - 途中で抜けてしまったが、皆さんコードを実行してテストしていくのはめちゃくちゃ勉強になる! - ドライバー緊張しそう…。

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully