書籍概要

Software Design plus

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで

著者
発売日
更新日

概要

Rubyの文法をサンプルコードで学び,例題でプログラミングの流れを体験できる解説書です。
ほかのプログラミング言語で開発経験のある人が,Rubyを学ぶ際に効率的に学べる内容を詰め込みました。
プログラミング未経験者向けの「変数とは」「配列とは」といったプログラミング基礎知識の説明は最小限にし,そのぶんRubyの特徴(他プログラミング言語との違い),Rubyにおけるリファクタリングの要点,テスト駆動開発やデバッグのやり方など開発現場で必要になる知識を解説しています。
本書の内容を理解すれば,開発の現場で必要とされるRuby関連の知識を一通り習得できます。そして,「今まで呪文のようにしか見えなかった不思議な構文」や「実はあまりよくわからないまま,見よう見まねで書いているコード」も自信をもって読み書きできるようになるはずです。
本書はRuby 2.4をベースに解説します。Ruby 2.2や2.3など,少し前のバージョンで動きが異なる場合は,適宜注釈を入れています。

こんな方におすすめ

  • Rubyのプログラミングを学びたい人
  • Rubyのテスト駆動開発やデバッグ技法を学びたい人
  • Railsを学ぶにあたりまずはRubyを学びたい人

本書のサンプル

本書の一部ページを,PDFで確認することができます。

補足情報

以下のURLから本書著者が開設したサポートページに移動できます。このサポートページでは,本書で使用しているサンプルコードやRuby 2.5以降の変更点などを載せています。

目次

第1章 本書を読み進める前に

  • 1.1 イントロダクション
  • 1.2 本書の概要
  • 1.3 Rubyについて
  • 1.4 Rubyのインストール
  • 1.5 エディタ/ IDEについて
  • 1.6 Rubyを動かしてみる
  • 1.7 本書のサンプルコードがうまく動かない場合
  • 1.8 この章のまとめ

第2章 Rubyの基礎を理解する

  • 2.1 イントロダクション
  • 2.2 Rubyに関する基礎知識
  • 2.3 文字列
  • 2.4 数値
  • 2.5 真偽値と条件分岐
  • 2.6 メソッドの定義
  • 2.7 例題:FizzBuzzプログラムを作成する
  • 2.8 文字列についてもっと詳しく
  • 2.9 数値についてもっと詳しく
  • 2.10 真偽値と条件分岐についてもっと詳しく
  • 2.11 メソッド定義についてもっと詳しく
  • 2.12 その他の基礎知識
  • 2.13 この章のまとめ

第3章 テストを自動化する

  • 3.1 イントロダクション
  • 3.2 Minitestの基本
  • 3.3 FizzBuzzプログラムのテスト自動化
  • 3.4 この章のまとめ

第4章 配列や繰り返し処理を理解する

  • 4.1 イントロダクション
  • 4.2 配列
  • 4.3 ブロック
  • 4.4 ブロックを使う配列のメソッド
  • 4.5 範囲(Range)
  • 4.6 例題:RGB変換プログラムを作成する
  • 4.7 配列についてもっと詳しく
  • 4.8 ブロックについてもっと詳しく
  • 4.9 さまざまな繰り返し処理
  • 4.10 繰り返し処理用の制御構造
  • 4.11 この章のまとめ

第5章 ハッシュやシンボルを理解する

  • 5.1 イントロダクション
  • 5.2 ハッシュ
  • 5.3 シンボル
  • 5.4 続・ハッシュについて
  • 5.5 例題:長さの単位変換プログラムを作成する
  • 5.6 ハッシュについてもっと詳しく
  • 5.7 シンボルについてもっと詳しく
  • 5.8 この章のまとめ

第6章 正規表現を理解する

  • 6.1 イントロダクション
  • 6.2 正規表現って何?
  • 6.3 Rubyにおける正規表現オブジェクト
  • 6.4 例題:Rubyのハッシュ記法を変換する
  • 6.5 正規表現オブジェクトについてもっと詳しく
  • 6.6 この章のまとめ

第7章 クラスの作成を理解する

  • 7.1 イントロダクション
  • 7.2 オブジェクト指向プログラミングの基礎知識
  • 7.3 クラスの定義
  • 7.4 例題:改札機プログラムの作成
  • 7.5 selfキーワード
  • 7.6 クラスの継承
  • 7.7 メソッドの公開レベル
  • 7.8 定数についてもっと詳しく
  • 7.9 さまざまな種類の変数
  • 7.10 クラス定義やRubyの言語仕様に関する高度な話題
  • 7.11 この章のまとめ

第8章 モジュールを理解する

  • 8.1 イントロダクション
  • 8.2 モジュールの概要
  • 8.3 モジュールのミックスイン(includeとextend)
  • 8.4 例題:deep_freezeメソッドの作成
  • 8.5 ミックスインについてもっと詳しく
  • 8.6 モジュールを利用した名前空間の作成
  • 8.7 関数や定数を提供するモジュールの作成
  • 8.8 状態を保持するモジュールの作成
  • 8.9 モジュールに関する高度な話題
  • 8.10 この章のまとめ

第9章 例外処理を理解する

  • 9.1 イントロダクション
  • 9.2 例外の捕捉
  • 9.3 意図的に例外を発生させる
  • 9.4 例外処理のベストプラクティス
  • 9.5 例題:正規表現チェッカープログラムの作成
  • 9.6 例外処理についてもっと詳しく
  • 9.7 この章のまとめ

第10章 yieldとProcを理解する

  • 10.1 イントロダクション
  • 10.2 ブロックを利用するメソッドの定義とyield
  • 10.3 Procオブジェクト
  • 10.4 例題:ワードシンセサイザーの作成
  • 10.5 Procオブジェクトについてもっと詳しく
  • 10.6 この章のまとめ

第11章 Rubyのデバッグ技法を身につける

  • 11.1 イントロダクション
  • 11.2 バックトレースの読み方
  • 11.3 よく発生する例外クラスとその原因
  • 11.4 プログラムの途中経過を確認する
  • 11.5 汎用的なトラブルシューティング方法
  • 11.6 この章のまとめ

第12章 Rubyに関するその他のトピック

  • 12.1 イントロダクション
  • 12.2 日付や時刻の扱い
  • 12.3 ファイルやディレクトリの扱い
  • 12.4 特定の形式のファイルを読み書きする
  • 12.5 環境変数や起動時引数の取得
  • 12.6 eval,バッククオートリテラル,sendメソッド
  • 12.7 Rake
  • 12.8 gemとBundler
  • 12.9 この章のまとめ

付録 Ruby on Railsの習得に向けた予備知識

  • A.1 イントロダクション
  • A.2 Railsの独自拡張になっている機能を理解する
  • A.3 フレームワークの変化の速さに追従する
  • A.4 アプリケーション設計に関する知識
  • A.5 Web技術に関する知識
  • A.6 データベースに関する知識
  • A.7 セキュリティに関する知識
  • A.8 テストの自動化に関する知識
  • A.9 GitやGitHubに関する知識
  • A.10 サーバや運用に関する知識
  • A.11 gemに関する知識と定期的なアップデート

サポート

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2021年9月29日最終更新)

P.109,下から10行目

to_intsメソッドの実装で必要な手順は大きくは分けて次の2つです。
to_intsメソッドの実装で必要な手順は大きく分けて次の2つです。

(以下2021年9月9日更新)

P.398,10行目

gate.rb の 26 行目( exit メソッド)呼ばれた。
gate.rb の 26 行目( exit メソッド)呼ばれた。

(以下2021年7月1日更新)

P.139,上から2つめのサンプルコード


# nunmbersのループは脱出するが、fruitsのループは継続する

# numbersのループは脱出するが、fruitsのループは継続する

(以下2021年6月15日更新)

P.116 4.7.2 節の最初のサンプルコード

a = [1, 2, 3]
a[-3] = -10 #=> [-10, 2, 3]
a = [1, 2, 3]
a[-3] = -10
a #=> [-10, 2, 3]

(以下2021年6月3日更新)

P.102,下から5行目

# 1から10まで2つ飛ばしで繰り返し処理を行う
# 1から10まで2回ごとに繰り返し処理を行う

P.274,30行目

クラスメソッドが特異メソッドあることを
クラスメソッドが特異メソッドあることを

P.341,下から3行目

次のように第1引数に例外を、
次のように第1引数に例外クラスを、

(以下2021年5月31日更新)

P.99,下から5行目

include?メソッドを使うと引数の値に含まれるかどうかを判定できるので、
include?メソッドを使うと引数の値が範囲に含まれるかどうかを判定できるので、

(以下2021年3月16日更新)

P.193 真ん中あたりのテストの実行結果の最終行


1 runs, 2 assertions, 1 failures, 0 errors, 0 skips

1 runs, 1 assertions, 1 failures, 0 errors, 0 skips

P.196 1つ目のテストの実行結果の最終行


1 runs, 2 assertions, 0 failures, 0 errors, 0 skips

1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

(以下2020年9月2日更新)

P.374,21行目

前の節では「引数のblockはメソッド実行時に紐付けられたブロックである」と説明しました。
上のコードに出てきた引数のblockはgreetingメソッドを実行した際に紐付けられるブロックです。

(以下2020年3月27日更新)

P.12,「1.6.1 本書のサンプルコードとその表示例について」の最初の実行例(6行目)


=> "Hello, world"


=> "Hello, world!"

(以下2020年1月29日更新)

P.404,28行目

コードを挟み込みんでください。
コードを挟み込んでください。

(以下2019年9月17日更新)

P.153,一番下のサンプルコード


# 文字列のキーとハッシュのキーを混在させる


# 文字列のキーとシンボルのキーを混在させる

(以下2019年6月11日更新)

P.32,一番下のサンプルコード


# &&は||よりも優先度が高いので、次のようなルールで評価される


# &&は||よりも優先順位が高いので、次のようなルールで評価される

(以下2018年6月22日更新)

P.347,下から2行目

例題の解説が終わったら再び例題処理に関する応用的なトピックを説明していきます。
例題の解説が終わったら再び例処理に関する応用的なトピックを説明していきます。

P.352,下から2行目

では、再び例題処理に関する応用的なトピックを説明していきます。
では、再び例処理に関する応用的なトピックを説明していきます。

(以下2018年4月5日更新)

P.404 4行目

さらにprint文を追加する → プログラムを追加する → さらにほかにも……
さらにprint文を追加する → プログラムを実行する → さらにほかにも……

(以下2018年1月15日更新)

P.269 真ん中あたり

/\A\d{3}-\d{4}\z/ === text

/\A\d{4}\/\d{1,2}\/\d{1,2}\z/ === text
/^\d{3}-\d{4}$/ === text

/^\d{4}\/\d{1,2}\/\d{1,2}$/ === text

(以下2017年12月1日更新)

P.37 1つ目のサンプルコード

# 変数名をひらがなにする(一般的ではない)
# メソッド名をひらがなにする(一般的ではない)

(以下2017年11月21日更新)

P.33,4つ目のサンプルコード


!(t1 && f2) #=> true


!(t1 && f1) #=> true


(以下,2017年11月20日更新)

P.159,真ん中あたりのサンプルコード


assert_equal 100, convert_length(1, 'm', 'cm')
assert_equal 0.01, convert_length(1, 'cm', 'm')


assert_equal 39.37, convert_length(1, 'm', 'in')
assert_equal 0.38, convert_length(15, 'in', 'm')

P.160,下から8行目

あと、convert_length(1, :m, :cm)だと引数の意味が若干わかりにくい気がします。convert_length(1, from: :m, to: :cm)のようにキーワード引数を使うと、
あと、convert_length(1, :m, :in)だと引数の意味が若干わかりにくい気がします。convert_length(1, from: :m, to: :in)のようにキーワード引数を使うと、

商品一覧