研鑽Rubyプログラミング ― 実践的なコードのための原則とトレードオフ(電子書籍のみ)

研鑽Rubyプログラミング ― 実践的なコードのための原則とトレードオフ(電子書籍のみ)

通常価格 ¥3,400(税込¥3,740) 特別価格

  • PDFのみの提供です
  • 紙書籍も必要な場合は、こちらからお得なセットをお求めください
  • 紙書籍のみを差額等でお求め頂くことはできません
  • こちらの商品は、現在公開されている研鑽Rubyプログラミング β版とは別の商品になります
  • 本商品をβ版の差額等でお求め頂くことはできません

原則を学んで腕を磨き、さらなる高みを目指すために

プログラミング言語の入門書では、前半でコアとなる文法が説明され、ライブラリをはじめとする周辺機能の紹介や開発手法の説明などが続きます。本書のスタート地点は、その先です。言語が備える基本的な機能(クラス、メソッド、変数など)の性能を実践で極限まで引き出すための思考、ライブラリやDSLを自分で設計するコツ、メタプログラミングやデザインパターンとの付き合い方、データベースやフレームワークに対する心構え、そしてセキュリティへの取り組み方などを扱います。

業務で毎日のようにRubyのコードを書いているというプログラマーはもちろん、ちょっとしたコードならRubyで書いたことがあるという他言語のプログラマーにとっても、プログラミングにおけるさまざまな原則とトレードオフについて繰り返し考え直すきっかけになる貴重な中級者向け解説書です。

本書の対象読者

  • 中級から上級のRubyプログラマー
  • 自分自身のプログラミングを改善するために原則とトレードオフを学ぶことに関心のある方

執筆者紹介

Jeremy Evans(著書)

Rubyのコミッター。Rubyのバグ修正に注力するのと同じぐらい、Rubyの実装の改善にも取り組んでおり、最速のウェブフレームワーク(Roda)や最速のデータベースライブラリ(Sequel)をはじめとした、いくつもの著名なRubyライブラリのメンテナーも務めている。彼のライブラリはその実行性能だけでなく、コードの品質、理解しやすさ、ドキュメンテーション、発見されたバグの修正の素早さでも知られている。Ruby とRuby コミュニティへの貢献が認められ、数々の賞も受賞。2020年には権威あるRubyPrize を受賞し、2015年にはRuby Heroに選出された。20以上のRuby カンファレンスでの講演実績もある。さらに彼はRubyの開発に加えて、OpenBSDのコミッターも務めている。

角谷信太郎(訳者)

個人事業主。一般社団法人日本Ruby の会理事。RubyKaigi Team Señor Organizer。(株)永和システムマネジメントフェロー。フィヨルドブートキャンプ顧問。 エクストリームプログラミングの理念である「新たな社会構造」のために自分がやれることをやっている。主な共訳・監訳書は『ユニコーン企業のひみつ―Spotify で学んだソフトウェアづくりと働き方』(オライリー・ジャパン)、『Clean Agile 基本に立ち戻れ』(アスキードワンゴ)、『なるほどUnix プロセス―Rubyで学ぶUnix の基礎』(達人出版会)、『RubyのしくみRuby Under a Microscope』『アジャイルサムライ―達人開発者への道』『アジャイルプラクティス―達人プログラマに学ぶ現場開発者の 習慣』(オーム社)、『アジャイルな見積りと計画づくり―価値あるソフトウェアを育てる概念と技法』(毎日コミュニケーションズ)など。

目次

本書に寄せて — まつもとゆきひろ

日本の読者の皆さんへ — Jeremy Evans

まえがき

第I部 Rubyプログラミングの基礎的な原則
第1章 組み込みクラスを最大限に活用する
 1.1 いつ組み込みクラスを使うべきか
 1.2 true、false、nilを活用する
 1.3 用途に応じて数値型を使い分ける
 1.4 シンボルと文字列の違いを理解する
 1.5 配列、ハッシュ、セット(集合)を使い分ける
 1.6 Structを活用する(Structはもっと評価されるべき)
 1.7 まとめ
 1.8 復習問題
 1.9 もっと詳しく学ぶには
第2章 役に立つ独自クラスを設計する
 2.1 いつ独自クラスを定義すべきか
 2.2 SOLID 原則のトレードオフ
 2.3 大きなクラスか、多くのクラスか
 2.4 独自データ構造の使いどころ
 2.5 まとめ
 2.6 復習問題
第3章 変数を適切に使う
 3.1 ローカル変数:Rubyで大活躍の変数
 3.2 インスタンス変数を活用する
 3.3 定数も単なる変数である
 3.4 クラス変数を置き換える
 3.5 基本的に、グローバル変数は避ける
 3.6 まとめ
 3.7 復習問題
 3.8 もっと詳しく学ぶには
第4章 メソッドと引数
 4.1 クラスメソッドはない。あるのはインスタンスメソッドだけ
 4.2 メソッドの命名
 4.3 メソッド引数を使いこなす
 4.4 メソッドの可視性は重要である
 4.5 委譲の扱い方
 4.6 まとめ
 4.7 復習問題
第5章 エラーに対処する
 5.1 戻り値によるエラー処理
 5.2 例外によるエラー処理
 5.3 一時的なエラーを再試行する
 5.4 例外クラス階層の設計
 5.5 まとめ
 5.6 復習問題
第6章 コードを読みやすくフォーマットする
 6.1 コードフォーマットにまつわる見解の違い
 6.2 構文の一貫性とメンテナンス容易性
 6.3 恣意的な制限の末路
 6.4 Ruby自体で基本的なコードフォーマットを検査する
 6.5 コードのフォーマットで本当に大切なこと
 6.6 まとめ
 6.7 復習問題

第II部 Rubyのライブラリプログラミングの原則
第7章 自分のライブラリを設計する
 7.1 ユーザーエクスペリエンスを重視する
 7.2 ライブラリの適切な規模を見極める
 7.3 メソッド設計の複雑性のトレードオフ
 7.4 まとめ
 7.5 復習問題
第8章 ライブラリを拡張可能にする
 8.1 Rubyが提供する拡張性関連の機能
 8.2 プラグインシステムを設計する
 8.3 「グローバルでは不変、ローカルでは可変」
 8.4 まとめ
 8.5 復習問題
第9章 時宜にかなったメタプログラミング
 9.1 抽象化の利点と欠点
 9.2 冗長なコードを削減する
 9.3 2つのメタプログラミング手法
 9.4 method_missingのわきまえ
 9.5 まとめ
 9.6 復習問題
第10章 役に立つドメイン特化言語を設計する
 10.1 独自のDSLを設計する
 10.2 独自のDSLを実装する
 10.3 DSLの使いどころ
 10.4 まとめ
 10.5 復習問題
第11章 きちんとコードが動くことをテストする
 11.1 なぜそんなにもRubyではテストが重要なのか
 11.2 さまざまなテスト手法
 11.3 テストをどこまで複雑にするか
 11.4 さまざまなレベルでのテスト
 11.5 カバレッジ100%に意味はない
 11.6 まとめ
 11.7 復習問題
第12章 変更に対処する
 12.1 リファクタリングする理由
 12.2 リファクタリングの進め方
 12.3 よく使われるRubyのリファクタリング技法
 12.4 機能追加のためのリファクタリング
 12.5 機能を適切に削除する
 12.6 まとめ
 12.7 復習問題
第13章 代表的なデザインパターンを使う
 13.1 Rubyに組み込まれているデザインパターン
 13.2 「1つだけあればよい」に対処する
 13.3 「何もない」を扱う
 13.4 Visitor パターン
 13.5 Adapter パターンとStrategy パターン
 13.6 まとめ
 13.7 復習問題
第14章 ライブラリを最適化する
 14.1 最適化の必要がなさそうなコードを把握する
 14.2 プロファイリングが先、最適化は後
 14.3 存在しないコードより速いコードは存在しない
 14.4 何もかもが遅い場合の対処法
 14.5 まとめ
 14.6 復習問題

第III部 Rubyのウェブプログラミングの原則
第15章 データベースが鍵を握る
 15.1 なぜそんなにもデータベース設計が重要なのか
 15.2 採用するデータベースを決める
 15.3 最も重要なデータベース設計の原則
 15.4 データベースは単なるデータ置き場ではない
 15.5 モデル層を選ぶ
 15.6 データベースとモデルのエラー処理
 15.7 まとめ
 15.8 もっと詳しく学ぶには
 15.9 復習問題
第16章 ウェブアプリケーション設計の原則
 16.1 クライアントサイド中心の設計とサーバーサイド中心の設計
 16.2 ウェブフレームワークの選定
 16.3 URLパスの設計
 16.4 モノリス、マイクロサービス、アイランドチェーン
 16.5 まとめ
 16.6 復習問題
第17章 堅牢なウェブアプリケーションのセキュリティ
 17.1 Ruby のウェブアプリケーションにおけるセキュリティ上の問題は、ほとんどが高レイヤのもの
 17.2 入力を信用してはならない
 17.3 可能な限りの高レイヤでアクセスを制御する
 17.4 インジェクション対策
 17.5 高いセキュリティが求められる環境に向けた取り組み
 17.6 まとめ
 17.7 復習問題

付録A 復習問題の回答例

訳者あとがき

索引