レシピ集シリーズRuby コードレシピ集

[表紙]Ruby コードレシピ集

紙版発売

A5判/672ページ

定価3,740円(本体3,400円+税10%)

ISBN 978-4-297-14403-6

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

最新Ruby 3.3に対応。Rubyでやりたいことがすぐにわかる,逆引きレシピ集の決定版。

Rubyの基礎知識や実践ですぐに役立つテクニックを,目的別にまとめた逆引きレシピ集です。文法/データ操作/正規表現/文字列操作/テスト/エラー処理といったRubyの基本から,RubyGems/データベース操作/データ処理といった実践的な開発に役立つテクニックまで,やりたいことをすぐに逆引きできるように整理しました。繰り返し参照しやすい形式で構文やコードをわかりやすく掲載。駆け出しエンジニア,Web開発者,ホビープログラマー,Rubyを使うすべての方にお届けします。Ruby 3.3に対応。

こんな方におすすめ

  • Rubyの初~中級者で,Rubyの基礎を理解し,これから実際に使いこなそうとしている方
  • Rubyでできることを手っ取り早く調べたい方
  • Rubyを使う駆け出しITエンジニア,Web開発者,ホビープログラマー

目次

Chapter 1 Rubyの基礎

  • 001 Rubyスクリプトを実行したい
  • 002 標準出力に文字列を出力したい
  • 003 コメントを書きたい
  • 004 ローカル変数を使いたい
  • 005 整数を使いたい
  • 006 算術演算をしたい
  • 007 比較演算をしたい
  • 008 配列を使いたい
  • 009 ハッシュを使いたい
  • 010 メソッドを定義したい
  • 011 条件分岐を利用したい
  • 012 Rubyスクリプトに引数を渡したい
  • 013 Rubyスクリプトを実行可能ファイルにしたい
  • 014 Rubyをワンライナーで実行したい
  • 015 Rubyを対話形式で実行したい
  • 016 Rubyの標準添付ライブラリを使いたい
  • 017 複数のバージョンのRubyを管理したい

Chapter 2 データとメソッドを扱う

  • 018 浮動小数点数を使いたい
  • 019 有理数(分数)を使いたい
  • 020 小数を誤差なく計算したい(BigDecimal)
  • 021 数値の端数処理(切り上げ・切り捨て・四捨五入)を行いたい
  • 022 2進数/8進数/16進数を使いたい
  • 023 10進数を基数変換したい
  • 024 文字列を使いたい
  • 025 ヒアドキュメントで文字列を書きたい
  • 026 シンボルを使いたい
  • 027 真偽値を使いたい
  • 028 値を真偽値に変換したい
  • 029 論理演算をしたい
  • 030 変数に値がないことを表したい(nil)
  • 031 定数を使いたい
  • 032 変数にデフォルト値を代入したい
  • 033 代入で複数の変数を使いたい
  • 034 変数に演算結果を入れ直したい
  • 035 範囲を表すデータを使いたい
  • 036 構造体を作りたい
  • 037 イミュータブルな構造体を使いたい(Data)
  • 038 メソッドを呼び出したい
  • 039 キーワード引数を使いたい
  • 040 ブロックを受け取るメソッドを定義したい
  • 041 1行でメソッドを定義したい
  • 042 メソッドに渡す引数の数を可変にしたい
  • 043 メソッドに渡すキーワード引数の数を可変にしたい
  • 044 メソッドを連続して呼び出したい(メソッドチェーン)
  • 045 メソッドチェーンの途中に処理を挟みたい
  • 046 メソッドをパイプライン形式で連続して呼び出したい
  • 047 nilの可能性があるオブジェクトに対してメソッドを安全に呼び出したい
  • 048 オブジェクトをコピーしたい
  • 049 オブジェクトの意図しない書き換えを防止したい
  • 050 システムのコマンドを実行したい

Chapter 3 分岐と繰り返しで処理を制御する

  • 051 特定の条件に当てはまらないときだけ処理を実行したい(unless)
  • 052 複数の条件分岐を順番に実行したい(if-elsif-else)
  • 053 ガード節を書きたい
  • 054 三項演算子を使いたい
  • 055 if式を使って条件に応じた値を取得したい
  • 056 式の値に応じて複数の条件に分岐したい(case-when)
  • 057 パターンマッチを使いたい(case-in)
  • 058 指定した回数繰り返しを実行したい
  • 059 配列の要素を繰り返し処理したい
  • 060 配列の要素をインデックスとともに繰り返し処理したい
  • 061 無限ループしたい
  • 062 条件を満たしている間繰り返しを実行したい
  • 063 特定の範囲の整数を数え上げながら繰り返しを実行したい
  • 064 特定の条件のとき繰り返しを中断したい
  • 065 特定の条件のとき繰り返しの処理をスキップしたい
  • 066 ブロックの実行を中断したい

Chapter 4 配列やハッシュとしてデータを扱う

  • 067 配列から値を取得したい
  • 068 配列の長さを調べたい
  • 069 配列に値を挿入したい
  • 070 配列から値を削除したい
  • 071 配列から重複する項目を取り除きたい
  • 072 配列からnilを取り除きたい
  • 073 配列を整列したい
  • 074 任意の値から配列を生成したい
  • 075 配列の各要素を変換して新しい配列を作りたい
  • 076 文字列やシンボルの配列を簡潔に記述したい
  • 077 配列の要素を連結して文字列にしたい
  • 078 配列から条件に合う要素だけを取り出したい
  • 079 配列から条件に合う要素を取り除きたい
  • 080 配列のすべての要素について条件が成立するか確認したい
  • 081 配列の少なくとも1つの要素について条件が成立するか確認したい
  • 082 特定の条件が成り立つ要素を変換して新しい配列を作りたい
  • 083 配列の全要素を集計して1つの値を得たい
  • 084 配列をもとにした新しいハッシュを作りたい
  • 085 配列をバイナリ文字列に変換したい/バイナリ文字列をデータに変換したい
  • 086 ハッシュから複数の値を取得したい
  • 087 ハッシュにキーと値を挿入したい
  • 088 ハッシュからキーと値を削除したい
  • 089 ハッシュを簡潔に記述したい(Shorthand Syntax)
  • 090 ハッシュのキーの数を調べたい
  • 091 ハッシュがどのようなキーを持つか調べたい
  • 092 ハッシュのキーと値に対して繰り返し処理したい
  • 093 ハッシュのデフォルト値を設定したい
  • 094 集合を扱いたい
  • 095 集合に特定の要素が含まれているか確認したい
  • 096 集合の要素を追加・削除したい
  • 097 集合演算を実行したい

Chapter 5 文字列を操作する

  • 098 文字列を連結したい
  • 099 文字列に含まれる文字の数を知りたい
  • 100 文字列に式の返り値を埋め込みたい
  • 101 フォーマットを指定して数値を文字列にしたい
  • 102 文字列を置換したい
  • 103 文字列内に特定の文字列が含まれるか判定したい
  • 104 文字列の一部を取り出したい
  • 105 文字列の前後の不要な空白文字を削除したい
  • 106 文字列の大文字/小文字を変換したい
  • 107 文字列を左詰め/右詰め/中央揃えにしたい
  • 108 文字列を数値に変換したい
  • 109 改行を含む文字列を1行ずつ処理したい
  • 110 文字列から空白行だけを削除したい
  • 111 全角文字と半角文字を相互に変換したい
  • 112 文字コードを判定したい
  • 113 文字列とBase64文字列を相互に変換したい
  • 114 ハッシュ値を計算したい

Chapter 6 正規表現で文字列を扱う

  • 115 正規表現を使いたい
  • 116 正規表現で文字クラスを使いたい
  • 117 正規表現で特別な意味を持つ文字をパターンとして使いたい
  • 118 正規表現で文字列に意図しない文字が含まれていないことを確認したい
  • 119 繰り返しの正規表現で最小の範囲にマッチさせたい
  • 120 正規表現で前後に特定のパターンが存在する場合にのみマッチさせたい
  • 121 正規表現で複数行にまたがってマッチさせたい
  • 122 正規表現でひらがなとカタカナにマッチさせたい
  • 123 正規表現でパーセント記法/式展開/パターンの連結を利用したい
  • 124 正規表現にマッチする箇所のインデックスを取得したい
  • 125 正規表現にマッチする箇所をすべて取得したい
  • 126 正規表現にマッチする最初の箇所を置換したい
  • 127 正規表現にマッチする箇所をすべて置換したい
  • 128 正規表現で文字列を分割したい
  • 129 正規表現にマッチした文字列の一部を参照したい
  • 130 正規表現にマッチした箇所の前後を調べたい

Chapter 7 クラスとモジュールの機能を利用する

  • 131 クラスを定義したい
  • 132 インスタンス変数を定義したい
  • 133 クラス変数を定義したい
  • 134 クラスインスタンス変数を定義したい
  • 135 インスタンスメソッドを定義したい
  • 136 クラスメソッドを定義したい
  • 137 privateなクラスメソッドを定義したい
  • 138 特定のオブジェクトのみにメソッドを定義したい
  • 139 メソッドの公開範囲を設定したい
  • 140 インスタンス変数へのゲッター/セッターメソッドを簡単に定義したい
  • 141 別のクラスを継承したい
  • 142 モジュールを定義したい
  • 143 モジュールのメソッドをインスタンスメソッドとして追加したい
  • 144 モジュールのメソッドをクラスメソッドとして追加したい
  • 145 モジュール関数を定義したい
  • 146 クラス/モジュールに名前空間を作りたい
  • 147 クラスが持つメソッドをリスト化したい
  • 148 クラスの継承関係を調べたい
  • 149 オブジェクトが属するクラスを調べたい
  • 150 オブジェクトが指定されたクラスのインスタンスかどうか調べたい

Chapter 8 動的なプログラミング言語の機能を利用する

  • 151 メソッドを上書きしたい
  • 152 限られた箇所だけでメソッドを上書きしたい
  • 153 プログラム全体で上書きしたメソッドを使いたい
  • 154 既存のクラスに新しいメソッドを追加したい
  • 155 メソッドを動的に定義したい
  • 156 存在しないメソッドを呼び出して動的に扱いたい
  • 157 存在しないメソッドが動的に呼び出せることを確認したい
  • 158 呼び出すメソッドを動的に決定したい

Chapter 9 時刻と日付のデータを扱う

  • 159 時刻のデータを扱いたい
  • 160 日付のデータを扱いたい
  • 161 現在の日付や時刻を取得したい
  • 162 指定した日付の曜日を取得したい
  • 163 日付が特定の曜日であるか判定したい
  • 164 うるう年かどうか判定したい
  • 165 過去/未来の時刻を取得したい
  • 166 年/月/日の単位で過去/未来の時刻を取得したい
  • 167 月末の日付を取得したい
  • 168 ある日付が月末かどうか判定したい
  • 169 文字列から日付/時刻を作成したい
  • 170 日付/時刻の文字列を作成したい
  • 171 時刻を標準規格の形式の文字列に変換したい
  • 172 時刻のタイムゾーンを変更したい
  • 173 日付を時刻に変換したい/時刻を日付に変換したい
  • 174 メソッドのデフォルト引数として現在時刻を利用したい
  • 175 テストのために現在時刻を固定/変更したい

Chapter 10 数学的な機能を利用する

  • 176 絶対値を求めたい
  • 177 最大値,最小値を求めたい
  • 178 合計値を求めたい
  • 179 平方根を求めたい
  • 180 複素数を使いたい
  • 181 三角関数を使いたい
  • 182 指数関数を使いたい
  • 183 対数関数を使いたい
  • 184 数学に関する定数を使いたい
  • 185 乱数を使いたい
  • 186 安全な乱数を使いたい
  • 187 順列/組合せを求めたい

Chapter 11 ファイルシステムを操作する

  • 188 ファイルやディレクトリの名前の一覧を取得したい
  • 189 実行中のスクリプトが存在するディレクトリの名前を取得したい
  • 190 ファイルの拡張子を取得したい
  • 191 ファイルとディレクトリが存在するかどうか確認したい
  • 192 ディレクトリ名とファイル名を結合してパス文字列を作りたい
  • 193 特定のパターンにしたがうファイル名を取得したい
  • 194 相対パスを絶対パスに変換したい
  • 195 ファイルの移動やファイル名の変更を実行したい
  • 196 ファイルをコピーしたい
  • 197 ディレクトリとその中のファイルをコピーしたい
  • 198 ファイルを削除したい
  • 199 ディレクトリを削除したい
  • 200 ファイルを開きたい
  • 201 ファイルの文字コードを指定して開きたい
  • 202 テキストファイルを読み込みたい
  • 203 テキストファイルを1行ずつ読み込んで処理したい
  • 204 ファイルに文字列を書き込みたい
  • 205 カレントディレクトリを参照/移動したい
  • 206 ファイルやディレクトリが空かどうか判定したい
  • 207 実行中のスクリプトの名前とパスを取得したい
  • 208 スクリプトにテキストデータを埋め込みたい

Chapter 12 例外を用いてエラーを制御する

  • 209 例外を発生させたい
  • 210 発生した例外に対応したい
  • 211 独自の例外を作りたい
  • 212 例外の種類に応じて異なる対応をしたい
  • 213 1行で例外に対応したい
  • 214 例外が発生したときに処理をやり直したい
  • 215 例外の有無によらずに最後に同じ処理をしたい

Chapter 13 Rubyのプログラムをテストする

  • 216 Rubyのコードをテストしたい
  • 217 インスタンスメソッド/クラスメソッドの返り値をテストしたい
  • 218 例外が発生することをテストしたい
  • 219 メソッドが呼び出されたかどうかをテストしたい
  • 220 テスト実行前後に特定の処理を実行したい
  • 221 ネスト(入れ子に)したテストケースを書きたい
  • 222 外部へのHTTPリクエストをスタブしたい

Chapter 14 Rubyのプログラムをデバッグする

  • 223 デバッグのために変数の内容を出力したい
  • 224 プログラムの実行を途中で止めて処理を追いたい(IRB)
  • 225 高機能なデバッガを使いたい(debugライブラリ)
  • 226 プログラムの実行速度を計測したい
  • 227 ログを標準出力に出力したい
  • 228 ログをファイルに出力したい
  • 229 特定のレベル以上のログだけを出力したい

Chapter 15 RubyGemsを活用する

  • 230 gem を使いたい
  • 231 特定バージョンのgemを使いたい
  • 232 インストールされているgemを確認したい
  • 233 プログラムごとに必要なgemを管理したい(Bundler)
  • 234 Bundler で管理している gem を一括で読み込みたい
  • 235 開発時だけ特定の gem をインストールしたい
  • 236 Bundlerでgemをインストールする場所を変えたい
  • 237 Gemfile を使わずに gem を使うプログラムを書きたい

Chapter 16 テキストデータを扱う

  • 238 JSONを読み込んでRubyで扱いたい
  • 239 RubyのオブジェクトをJSON文字列に変換したい
  • 240 CSV を読み込んで2次元配列として扱いたい
  • 241 配列からCSVを組み立てたい
  • 242 YAML を読み込んでハッシュとして扱いたい
  • 243 Ruby オブジェクトを YAML にして出力したい
  • 244 TOMLファイルを読み込んでRubyで扱いたい
  • 245 MarkdownをHTMLに変換したい

Chapter 17 さまざまな形式のデータを扱う

  • 246 tar.gzファイルを作成したい
  • 247 tar.gzファイルを展開したい
  • 248 zipファイルを作成したい
  • 249 zipファイルを展開したい
  • 250 画像を扱いたい
  • 251 画像をリサイズしたい
  • 252 画像を回転・反転したい
  • 253 画像のExifデータを参照/削除したい
  • 254 PDFを作成したい
  • 255 Microsoft ExcelのXLSXファイルを扱いたい

Chapter 18 使いやすいコマンドラインツールを作る

  • 256 コマンドラインオプションのあるプログラムを作りたい
  • 257 コマンドラインオプションの利用方法を表示したい
  • 258 サブコマンドを持つ CLI プログラムを作りたい
  • 259 Rakeでタスクを実行したい
  • 260 Rakeタスクを名前空間でまとめたい
  • 261 Rakeタスクの間で依存関係を作りたい

Chapter 19 さまざまなデータベースシステムを扱う

  • 262 SQLiteデータベースに接続したい
  • 263 SQLiteデータベースにレコードを書き込みたい
  • 264 SQLiteデータベースからレコードを取得したい
  • 265 MySQLデータベースに接続したい
  • 266 MySQLデータベースにレコードを書き込みたい
  • 267 MySQLデータベースからレコードを取得したい
  • 268 PostgreSQLデータベースに接続したい
  • 269 PostgreSQLデータベースにレコードを書き込みたい
  • 270 PostgreSQLデータベースからレコードを取得したい
  • 271 オブジェクトからデータベースを操作したい(Active Record)
  • 272 Redisを使いたい
  • 273 RedisにJSONを保存したい
  • 274 RedisにRubyオブジェクトを保存したい

Chapter 20 Webから情報を取得する

  • 275 WebサイトからHTMLを取得したい(スクレイピングしたい)
  • 276 WebサイトからRSSを取得したい
  • 277 HTML/XMLの特定のタグを取り出したい
  • 278 HTML/XMLのimgタグに指定されている画像をダウンロードしたい
  • 279 URL文字列を編集したい
  • 280 公開されているWeb APIを利用したい

Chapter 21 基本的なWebアプリケーションの機能を実現する

  • 281 簡単なWebアプリケーションを作りたい
  • 282 URLのクエリ文字列(URLパラメータ)を扱いたい
  • 283 HTTPレスポンスの生成を簡単に行いたい
  • 284 テンプレートを使ってレスポンスを返したい
  • 285 URLに応じた処理の切り替え(ルーティング)を設定したい
  • 286 Basic認証を使いたい
  • 287 ファイルをそのまま配信したい
  • 288 Rackアプリケーションのログ出力をフォーマットしたい
  • 289 条件に基づいてアクセス制限をしたい
  • 290 Rackミドルウェアを作成してリクエストやレスポンスを加工したい

著者プロフィール

山本浩平(やまもとこうへい)

ソフトウェアエンジニア。GMOペパボ株式会社を経て,現在は株式会社一休に所属。GMOペパボではRuby on Railsなどを用いたECサイト構築サービスの開発に携わった。ソフトウェア開発に関するブログ記事執筆にも取り組む。Web上ではkymmt(@kymmt90)として活動。


下重博資(しもじゅうひろし)

GMOペパボ株式会社に勤務するソフトウェアエンジニア。Ruby on Railsを用いたオリジナルグッズ作成サービスの開発に従事。Kaigi on RailsのオーガナイザーやRails Girlsのコーチとしてイベントの企画運営にも取り組む。Xアカウントは@shimoju_


板倉悠太(いたくらゆうた)

ソフトウェアエンジニア。2010年にRubyを仕事で使い始め,2015年からRuby on RailsによるWebアプリケーション開発に携わる。GMOペパボ株式会社を経てフリーランスとなり,2024年にTARAREBA株式会社を設立,同社代表取締役。ネット上のIDはyuta25。