目次
第1章 本書を読み進める前に
- 1.1 イントロダクション
- 1.1.1 この章で説明すること
- 1.2 本書の概要
- 1.2.1 対象となる読者
- 1.2.2 本書で説明する内容と説明しない内容
- 1.2.3 Railsアプリの開発にも本書は役に立つか?
- 1.2.4 本書の特徴と効果的な学習方法
- 1.2.5 対象となるRubyのバージョン
- 1.3 Rubyについて
- 1.3.1 Rubyってどんなプログラミング言語?
- 1.3.2 Rubyの処理系
- 1.3.3 Rubyのライセンス
- 1.3.4 Ruby 3.0について
- 1.4 Rubyのインストール
- 1.4.1 macOS/Linuxの場合
- 1.4.2 Windowsの場合
- 1.4.3 その他の方法
- 1.4.4 サンプルコードの動作確認環境について
- 1.5 エディタ/IDEについて
- 1.5.1 エディタやIDEで不可欠な機能や設定
- 1.6 Rubyを動かしてみる
- 1.6.1 本書のサンプルコードとその表示例について
- 1.6.2 ファイルに保存したRubyプログラムを実行する
- 1.7 本書のサンプルコードについて
- 1.7.1 サンプルコードがうまく動かない場合
- 1.8 Rubyの公式リファレンスについて
- 1.9 この章のまとめ
第2章 Rubyの基礎を理解する
- 2.1 イントロダクション
- 2.1.1 この章の例題:FizzBuzzプログラム
- 2.1.2 FizzBuzzプログラムの実行例
- 2.1.3 この章で学ぶこと
- 2.2 Rubyに関する基礎知識
- 2.2.1 すべてがオブジェクト
- 2.2.2 メソッド呼び出し
- 2.2.3 文の区切り
- 2.2.4 コメント
- 2.2.5 識別子と予約語
- 2.2.6 空白文字
- 2.2.7 リテラル
- 2.2.8 変数(ローカル変数)の宣言と代入
- 2.3 文字列
- 2.3.1 シングルクオートとダブルクオート
- 2.3.2 文字列の比較
- 2.4 数値
- 2.4.1 演算子による値の比較
- 2.4.2 演算子の優先順位
- 2.4.3 変数に格納された数値の増減
- 2.5 真偽値と条件分岐
- 2.5.1 Rubyの真偽値
- 2.5.2 論理演算子
- 2.5.3 if文
- 2.6 メソッドの定義
- 2.6.1 メソッドの戻り値
- 2.6.2 メソッド定義における引数の( )
- 2.7 例題:FizzBuzzプログラムを作成する
- 2.7.1 作業用のディレクトリとファイルを準備する
- 2.7.2 一番簡単なプログラムで動作確認する
- 2.7.3 fizz_buzzメソッドを作成する
- 2.8 文字列についてもっと詳しく
- 2.8.1 文字列はStringクラスのオブジェクト
- 2.8.2 %記法で文字列を作る
- 2.8.3 ヒアドキュメント(行指向文字列リテラル)
- 2.8.4 フォーマットを指定して文字列を作成する
- 2.8.5 その他,文字列作成のいろいろ
- 2.8.6 文字と文字列の違いはない
- 2.9 数値についてもっと詳しく
- 2.9.1 基数指示子を用いた整数リテラル
- 2.9.2 ビット演算
- 2.9.3 指数表現
- 2.9.4 数値クラスのあれこれ
- 2.10 真偽値と条件分岐についてもっと詳しく
- 2.10.1 &&や||の戻り値と評価を終了するタイミング
- 2.10.2 優先順位が低いand,or,not
- 2.10.3 unless文
- 2.10.4 case文
- 2.10.5 条件演算子(三項演算子)
- 2.11 メソッド定義についてもっと詳しく
- 2.11.1 デフォルト値付きの引数
- 2.11.2 ?で終わるメソッド
- 2.11.3 !で終わるメソッド
- 2.11.4 エンドレスメソッド定義(1行メソッド定義)
- 2.12 その他の基礎知識
- 2.12.1 ガベージコレクション(GC)
- 2.12.2 エイリアスメソッド
- 2.12.3 式(Expression)と文(Statement)
- 2.12.4 擬似変数
- 2.12.5 参照の概念を理解する
- 2.12.6 組み込みライブラリ,標準ライブラリ,gem
- 2.12.7 requireとrequire_relative
- 2.12.8 putsメソッド,printメソッド,pメソッド,ppメソッド
- 2.13 この章のまとめ
第3章 テストを自動化する
- 3.1 イントロダクション
- 3.1.1 この章で学ぶこと
- 3.1.2 「プログラマの三大美徳」
- 3.2 Minitestの基本
- 3.2.1 テストコードのひな形
- 3.2.2 本書で使用するMinitestの検証メソッド
- 3.2.3 テストコードの実行と結果の確認
- 3.2.4 テストが失敗した場合の実行結果
- 3.2.5 実行中にエラーが発生した場合の実行結果
- 3.3 FizzBuzzプログラムのテスト自動化
- 3.3.1 putsメソッドをテストコードに置き換える
- 3.3.2 プログラム本体とテストコードを分離する
- 3.4 この章のまとめ
第4章 配列や繰り返し処理を理解する
- 4.1 イントロダクション
- 4.1.1 この章の例題:RGBカラー変換プログラム
- 4.1.2 RGBカラー変換プログラムの実行例
- 4.1.3 この章で学ぶこと
- 4.2 配列
- 4.2.1 要素の変更,追加,削除
- 4.2.2 配列を使った多重代入
- 4.3 ブロック
- 4.3.1 参考:JavaScriptの繰り返し処理
- 4.3.2 Rubyの繰り返し処理
- 4.3.3 配列の要素を削除する条件を自由に指定する
- 4.3.4 ブロックパラメータとブロック内の変数
- 4.3.5 do ... end と {}
- 4.4 ブロックを使う配列のメソッド
- 4.4.1 map/collect
- 4.4.2 select/find_all/reject
- 4.4.3 find/detect
- 4.4.4 sum
- 4.4.5 &とシンボルを使ってもっと簡潔に書く
- 4.5 範囲(Range)
- 4.5.1 配列や文字列の一部を抜き出す
- 4.5.2 n以上m以下,n以上m未満の判定をする
- 4.5.3 case文で使う
- 4.5.4 値が連続する配列を作成する
- 4.5.5 繰り返し処理を行う
- 4.6 例題:RGB変換プログラムを作成する
- 4.6.1 to_hexメソッドを作成する
- 4.6.2 to_hexメソッドをリファクタリングする
- 4.6.3 to_intsメソッドを作成する
- 4.6.4 to_intsメソッドをリファクタリングする
- 4.6.5 to_intsメソッドをリファクタリングする(上級編)
- 4.7 配列についてもっと詳しく
- 4.7.1 さまざまな要素の取得方法
- 4.7.2 さまざまな要素の変更方法
- 4.7.3 配列の連結
- 4.7.4 配列の和集合,差集合,積集合
- 4.7.5 多重代入で残りの全要素を配列として受け取る,または無視する
- 4.7.6 1つの配列を複数の引数やwhen節の条件として展開する
- 4.7.7 メソッドの可変長引数
- 4.7.8 *で配列同士を非破壊的に連結する
- 4.7.9 ==で等しい配列かどうか判断する
- 4.7.10 %記法で文字列の配列を簡潔に作る
- 4.7.11 文字列を配列に変換する
- 4.7.12 配列にデフォルト値を設定する
- 4.7.13 配列にデフォルト値を設定する場合の注意点
- 4.7.14 ミュータブル? イミュータブル?
- 4.8 ブロックについてもっと詳しく
- 4.8.1 添え字付きの繰り返し処理
- 4.8.2 with_indexメソッドを使った添え字付きの繰り返し処理
- 4.8.3 添え字を0以外の数値から開始させる
- 4.8.4 配列がブロックパラメータに渡される場合
- 4.8.5 番号指定パラメータ
- 4.8.6 ブロックローカル変数
- 4.8.7 繰り返し処理以外でも使用されるブロック
- 4.8.8 do...endと{}の結合度の違い
- 4.8.9 ブロックを使うメソッドを定義する
- 4.9 範囲(Range)についてもっと詳しく
- 4.9.1 終端や始端を持たない範囲オブジェクト
- 4.10 さまざまな繰り返し処理
- 4.10.1 timesメソッド
- 4.10.2 uptoメソッドとdowntoメソッド
- 4.10.3 stepメソッド
- 4.10.4 while文とuntil文
- 4.10.5 for文
- 4.10.6 loopメソッド
- 4.10.7 再帰呼び出し
- 4.11 繰り返し処理用の制御構造
- 4.11.1 break
- 4.11.2 throwとcatchを使った大域脱出
- 4.11.3 繰り返し処理で使うbreakとreturnの違い
- 4.11.4 next
- 4.11.5 redo
- 4.12 この章のまとめ
第5章 ハッシュやシンボルを理解する
- 5.1 イントロダクション
- 5.1.1 この章の例題:長さの単位変換プログラム
- 5.1.2 長さの単位変換プログラムの実行例
- 5.1.3 この章で学ぶこと
- 5.2 ハッシュ
- 5.2.1 要素の追加,変更,取得
- 5.2.2 ハッシュを使った繰り返し処理
- 5.2.3 ハッシュの同値比較,要素数の取得,要素の削除
- 5.3 シンボル
- 5.3.1 シンボルと文字列の違い
- 5.3.2 シンボルの特徴とおもな用途
- 5.4 続・ハッシュについて
- 5.4.1 ハッシュのキーにシンボルを使う
- 5.4.2 キーや値に異なるデータ型を混在させる
- 5.4.3 メソッドのキーワード引数とハッシュ
- 5.5 例題:長さの単位変換プログラムを作成する
- 5.5.1 テストコードを準備する
- 5.5.2 いろんな単位を変換できるようにする
- 5.5.3 convert_lengthメソッドを改善する
- 5.6 ハッシュとキーワード引数についてもっと詳しく
- 5.6.1 ハッシュで使用頻度の高いメソッド
- 5.6.2 **でハッシュを展開させる
- 5.6.3 ハッシュを使った擬似キーワード引数
- 5.6.4 任意のキーワードを受け付ける**引数
- 5.6.5 ハッシュを明示的にキーワード引数に変換する**
- 5.6.6 メソッド呼び出し時の{}の省略
- 5.6.7 ハッシュリテラルの{}とブロックの{}
- 5.6.8 ハッシュから配列へ,配列からハッシュへ
- 5.6.9 ハッシュのデフォルト値を理解する
- 5.6.10 その他,キーワード引数に関する高度な話題
- 5.7 シンボルについてもっと詳しく
- 5.7.1 シンボルを作成するさまざまな方法
- 5.7.2 %記法でシンボルやシンボルの配列を作成する
- 5.7.3 シンボルと文字列の関係
- 5.8 この章のまとめ
第6章 正規表現を理解する
- 6.1 イントロダクション
- 6.1.1 この章の例題:ハッシュ記法変換プログラム
- 6.1.2 ハッシュ記法変換プログラムの実行例
- 6.1.3 この章で学ぶこと
- 6.2 正規表現って何?
- 6.2.1 正規表現の便利さを知る
- 6.2.2 正規表現をゼロから学習するための参考資料
- 6.3 Rubyにおける正規表現オブジェクト
- 6.3.1 Rubularで視覚的にマッチする文字列を確認する
- 6.3.2 正規表現のキャプチャを利用する
- 6.3.3 キャプチャに名前を付ける
- 6.3.4 組み込み変数でマッチの結果を取得する
- 6.3.5 正規表現と組み合わせると便利なStringクラスのメソッド
- 6.4 例題:Rubyのハッシュ記法を変換する
- 6.4.1 テストコードを準備する
- 6.4.2 ハッシュ記法変換プログラムを実装する
- 6.5 正規表現オブジェクトについてもっと詳しく
- 6.5.1 正規表現オブジェクトを作成するさまざまな方法
- 6.5.2 case文で正規表現を使う
- 6.5.3 正規表現オブジェクト作成時のオプション
- 6.5.4 Regexp.last_matchでマッチの結果を取得する
- 6.5.5 組み込み変数を書き換えないmatch?メソッド
- 6.6 この章のまとめ
第7章 クラスの作成を理解する
- 7.1 イントロダクション
- 7.1.1 この章の例題:改札機プログラム
- 7.1.2 この章で学ぶこと
- 7.2 オブジェクト指向プログラミングの基礎知識
- 7.2.1 クラスを使う場合と使わない場合の比較
- 7.2.2 オブジェクト指向プログラミング関連の用語
- 7.3 クラスの定義
- 7.3.1 オブジェクトの作成とinitializeメソッド
- 7.3.2 インスタンスメソッドの定義
- 7.3.3 インスタンス変数とアクセサメソッド
- 7.3.4 クラスメソッドの定義
- 7.3.5 定数
- 7.4 例題:改札機プログラムの作成
- 7.4.1 テストコードを準備する
- 7.4.2 必要なメソッドやクラスを仮実装する
- 7.4.3 運賃が足りているかどうかを判別する
- 7.4.4 テストコードのリファクタリング
- 7.4.5 残りのテストケースをテストする
- 7.5 selfキーワード
- 7.5.1 selfの付け忘れで不具合が発生するケース
- 7.5.2 クラスメソッドの内部やクラス構文直下のself
- 7.5.3 クラスメソッドをインスタンスメソッドで呼び出す
- 7.6 クラスの継承
- 7.6.1 標準ライブラリの継承関係
- 7.6.2 デフォルトで継承されるObjectクラス
- 7.6.3 オブジェクトのクラスを確認する
- 7.6.4 ほかのクラスを継承したクラスを作る
- 7.6.5 superでスーパークラスのメソッドを呼び出す
- 7.6.6 メソッドのオーバーライド
- 7.6.7 クラスメソッドの継承
- 7.7 メソッドの可視性
- 7.7.1 publicメソッド
- 7.7.2 privateメソッド
- 7.7.3 privateメソッドから先に定義する場合
- 7.7.4 privateメソッドはサブクラスでも呼び出せる
- 7.7.5 クラスメソッドをprivateにしたい場合
- 7.7.6 メソッドの可視性を変える方法あれこれ
- 7.7.7 protectedメソッド
- 7.8 定数についてもっと詳しく
- 7.8.1 定数と再代入
- 7.8.2 定数はミュータブルなオブジェクトに注意する
- 7.9 さまざまな種類の変数
- 7.9.1 クラスインスタンス変数
- 7.9.2 クラス変数
- 7.9.3 グローバル変数と組み込み変数
- 7.10 クラス定義やRubyの言語仕様に関する高度な話題
- 7.10.1 エイリアスメソッドの定義
- 7.10.2 メソッドの削除
- 7.10.3 入れ子になったクラスの定義
- 7.10.4 演算子の挙動を独自に再定義する
- 7.10.5 等値を判断するメソッドや演算子を理解する
- 7.10.6 オープンクラスとモンキーパッチ
- 7.10.7 特異メソッド
- 7.10.8 クラスメソッドは特異メソッドの一種
- 7.10.9 ダックタイピング
- 7.11 この章のまとめ
第8章 モジュールを理解する
- 8.1 イントロダクション
- 8.1.1 この章の例題:rainbowメソッド
- 8.1.2 この章で学ぶこと
- 8.2 モジュールの概要
- 8.2.1 モジュールの用途
- 8.2.2 モジュールの定義
- 8.3 モジュールを利用したメソッド定義(includeとextend)
- 8.3.1 モジュールをクラスにincludeする
- 8.3.2 include先のメソッドを使うモジュール
- 8.3.3 モジュールをextendする
- 8.4 例題:rainbowメソッドの作成
- 8.4.1 実装の方針を検討する
- 8.4.2 テストコードを準備する
- 8.4.3 rainbowメソッドを実装する
- 8.4.4 rainbowメソッドのリファクタリング
- 8.4.5 あらゆるオブジェクトでrainbowメソッドを使えるようにする
- 8.5 モジュールを利用したメソッド定義についてもっと詳しく
- 8.5.1 includeされたモジュールの有無を確認する
- 8.5.2 Enumerableモジュール
- 8.5.3 Comparableモジュールと<=>演算子
- 8.5.4 Kernelモジュール
- 8.5.5 トップレベルはmainという名前のObject
- 8.5.6 クラスやモジュール自身もオブジェクト
- 8.5.7 モジュールとインスタンス変数
- 8.5.8 クラス以外のオブジェクトにextendする
- 8.6 モジュールを利用した名前空間の作成
- 8.6.1 名前空間を分けて名前の衝突を防ぐ
- 8.6.2 名前空間でグループやカテゴリを分ける
- 8.6.3 入れ子なしで名前空間付きのクラスを定義する
- 8.6.4 トップレベルの同名クラスを参照する
- 8.6.5 入れ子の有無によって参照されるクラスが異なるケース
- 8.7 関数や定数を提供するモジュールの作成
- 8.7.1 モジュールに特異メソッドを定義する
- 8.7.2 module_functionメソッド
- 8.7.3 モジュールに定数を定義する
- 8.7.4 モジュール関数や定数を持つモジュールの例
- 8.8 状態を保持するモジュールの作成
- 8.9 モジュールに関する高度な話題
- 8.9.1 メソッド探索のルールを理解する
- 8.9.2 モジュールにほかのモジュールをincludeする
- 8.9.3 prependでモジュールをミックスインする
- 8.9.4 prependで既存メソッドを置き換える
- 8.9.5 有効範囲を限定できるrefinements
- 8.10 この章のまとめ
第9章 例外処理を理解する
- 9.1 イントロダクション
- 9.1.1 この章の例題:正規表現チェッカープログラム
- 9.1.2 正規表現チェッカーの実行例
- 9.1.3 この章で学ぶこと
- 9.2 例外の捕捉
- 9.2.1 発生した例外を捕捉しない場合
- 9.2.2 例外を捕捉して処理を続行する場合
- 9.2.3 例外処理の流れ
- 9.2.4 例外オブジェクトから情報を取得する
- 9.2.5 クラスを指定して捕捉する例外を限定する
- 9.2.6 例外クラスの継承関係を理解する
- 9.2.7 継承関係とrescue節の順番に注意する
- 9.2.8 例外発生時にもう一度処理をやりなおすretry
- 9.3 意図的に例外を発生させる
- 9.4 例外処理のベストプラクティス
- 9.4.1 安易にrescueを使わない
- 9.4.2 rescueしたら情報を残す
- 9.4.3 例外処理の対象範囲と対象クラスを極力絞り込む
- 9.4.4 例外処理よりも条件分岐を使う
- 9.4.5 予期しない条件は異常終了させる
- 9.4.6 例外処理も手を抜かずにテストする
- 9.5 例題:正規表現チェッカープログラムの作成
- 9.5.1 テスト駆動開発をするかどうか
- 9.5.2 実装のフローチャートを考える
- 9.5.3 文字入力を受け付けるgetsメソッド
- 9.5.4 実装を開始する
- 9.5.5 例外処理を組み込む
- 9.6 例外処理についてもっと詳しく
- 9.6.1 ensure
- 9.6.2 ensureの代わりにブロックを使う
- 9.6.3 例外処理のelse
- 9.6.4 例外処理と戻り値
- 9.6.5 begin/endを省略するrescue修飾子
- 9.6.6 $!と$@に格納される例外情報
- 9.6.7 例外処理のbegin/endを省略できるケース
- 9.6.8 rescueした例外を再度発生させる
- 9.6.9 独自の例外クラスを定義する
- 9.7 この章のまとめ
第10章 yieldとProcを理解する
- 10.1 イントロダクション
- 10.1.1 この章の例題:ワードシンセサイザー
- 10.1.2 この章で学ぶこと
- 10.2 ブロックを利用するメソッドの定義とyield
- 10.2.1 yieldを使ってブロックの処理を呼び出す
- 10.2.2 ブロックを引数として明示的に受け取る
- 10.3 Procオブジェクト
- 10.3.1 Procオブジェクトの基礎
- 10.3.2 Procオブジェクトをブロックの代わりに渡す
- 10.3.3 Procオブジェクトを普通の引数として渡す
- 10.3.4 Proc.newとラムダの違い
- 10.3.5 Proc.newかラムダかを判断するlambda?メソッド
- 10.4 例題:ワードシンセサイザーの作成
- 10.4.1 エフェクトの実装方法を検討する
- 10.4.2 テストコードも2つに分ける
- 10.4.3 テストコードを準備する
- 10.4.4 リバースエフェクトを実装する
- 10.4.5 エコーエフェクトを実装する
- 10.4.6 ラウドエフェクトを実装する
- 10.4.7 WordSynthクラスの実装とテスト
- 10.5 Procオブジェクトについてもっと詳しく
- 10.5.1 Procオブジェクトを実行するさまざまな方法
- 10.5.2 &とto_procメソッド
- 10.5.3 Procオブジェクトとクロージャ
- 10.6 この章のまとめ
第11章 パターンマッチを理解する
- 11.1 イントロダクション
- 11.1.1 この章の例題:ログフォーマッタープログラム
- 11.1.2 この章で学ぶこと
- 11.2 パターンマッチの基本
- 11.2.1 ハッシュをパターンマッチさせる
- 11.3 パターンマッチの利用パターン
- 11.3.1 valueパターン
- 11.3.2 variableパターン
- 11.3.3 arrayパターン
- 11.3.4 hashパターン
- 11.3.5 asパターン
- 11.3.6 alternativeパターン
- 11.3.7 findパターン
- 11.4 例題:ログフォーマッターの作成
- 11.4.1 入力データの取得
- 11.4.2 “OK”のログに対応する
- 11.4.3 404エラーのログに対応する
- 11.4.4 “WARN”のログに対応する
- 11.4.5 500エラーのログに対応する
- 11.4.6 参考:パターンマッチを使わない場合
- 11.5 パターンマッチについてもっと詳しく
- 11.5.1 ガード式
- 11.5.2 1行パターンマッチ
- 11.5.3 変数のスコープに関する注意点
- 11.5.4 自作クラスをパターンマッチに対応させる
- 11.6 この章のまとめ
第12章 Rubyのデバッグ技法を身につける
- 12.1 イントロダクション
- 12.1.1 この章で学ぶこと
- 12.2 バックトレースの読み方
- 12.2.1 実行環境によって変化するバックトレースの表示形式
- 12.3 よく発生する例外クラスとその原因
- 12.3.1 NameError
- 12.3.2 NoMethodError
- 12.3.3 TypeError
- 12.3.4 ArgumentError
- 12.3.5 ZeroDivisionError
- 12.3.6 SystemStackError
- 12.3.7 LoadError
- 12.3.8 SyntaxError(syntax error)
- 12.3.9 組み込みライブラリに定義されている上記以外の例外クラス
- 12.3.10 Rubyの標準ライブラリに含まれない例外クラス
- 12.4 プログラムの途中経過を確認する
- 12.4.1 printデバッグ
- 12.4.2 tapメソッドでメソッドチェーンをデバッグする
- 12.4.3 ログにデバッグ情報を出力する
- 12.4.4 デバッガ(debug.gem)を使う
- 12.5 汎用的なトラブルシューティング方法
- 12.5.1 irb上で簡単なコードを動かしてみる
- 12.5.2 ログを調べる
- 12.5.3 公式ドキュメントや公式リファレンスを読む
- 12.5.4 issueを検索する
- 12.5.5 ライブラリのコードを読む
- 12.5.6 テストコードを書く
- 12.5.7 “警戒しながら”ネットの情報を参考にする
- 12.5.8 パソコンの前から離れる
- 12.5.9 誰かに聞く
- 12.6 この章のまとめ
第13章 Rubyに関するその他のトピック
- 13.1 イントロダクション
- 13.1.1 この章で学ぶこと
- 13.2 日付や時刻の扱い
- 13.3 ファイルやディレクトリの扱い
- 13.4 特定の形式のファイルを読み書きする
- 13.4.1 CSV
- 13.4.2 JSON
- 13.4.3 YAML
- 13.5 環境変数や起動時引数の取得
- 13.5.1 組み込み定数
- 13.6 非推奨機能を使ったときに警告を出力する
- 13.7 eval,バッククオートリテラル,sendメソッド
- 13.8 Rake
- 13.8.1 Rakeの基本的な使い方
- 13.8.2 Rakeを使ったテストの一括実行
- 13.9 gemとBundler
- 13.9.1 gemのインストールと利用方法
- 13.9.2 Bundlerでプロジェクト内で使用するgemを一括管理する
- 13.9.3 Gemfile.lockの役割
- 13.9.4 Gemfileでgemのバージョンを指定する記号の意味
- 13.10 Rubyにおける型情報の定義と型検査(RBS,TypeProf,Steep)
- 13.10.1 typeprofコマンドで型情報を自動生成する
- 13.10.2 Steepで型検査を行う
- 13.10.3 RBSとRubyの未来
- 13.11 「Railsの中のRuby」と「素のRuby」の違い
- 13.11.1 requireやrequire_relativeを書く機会がほとんどない
- 13.11.2 名前空間として使われるモジュールが自動生成される
- 13.11.3 標準ライブラリのクラスやMinitestが独自に拡張されている
- 13.11.4 Rubyの構文や言語機能がまったく別の用途で使われているケースがある
- 13.12 この章のまとめ