Book description
Pythonはシンプルな構文で読みやすいプログラミング言語ですが、コードをロバストにする機能も備わっています。本書では、Python 3.5から導入された型ヒントを使って、ロバストなPythonコードを記述する方法にアプローチします。全4部構成のうち、Ⅰ部とⅡ部ではPythonにおける型ヒントの位置づけや組み込み型について基本的な事柄をしっかりおさえ、ユーザ定義型を使う方法、部分型、プロトコル、pydanticによる実行時型チェックなど、Pythonの型システムを最大限に活用する方法を詳しく説明します。Ⅲ部は依存関係や設計手法について、Ⅳ部はセーフティネットとして高度なテスト手法を扱います。本書の内容を理解すれば、クリーンで保守しやすいPythonコードが書けるようになります。
Table of contents
- 大扉
- 原書大扉
- クレジット
- 監訳者まえがき
- はじめに
- 1章 ロバストPython入門
- 1.1 ロバストネスとは
- クリーンコードの重要性
- 1.1.1 ロバストネスはなぜ大切なのか
- 1.2 あなたの意図は何か
- 1.2.1 非同期コミュニケーション
- 自己文書化(self-documenting)コード
- 1.3 意図を伝えるための手法
- 1.3.1 コレクション
- 動的インデックスと静的インデックス
- 1.3.2 イテレーション
- 1.3.3 驚き最小の原則
- 1.4 まとめ
- 第Ⅰ部 型アノテーション
- 2章 Pythonデータ型入門
- 2.1 データ型には何が含まれているか
- 2.1.1 機械的な表現
- 2.1.2 意味論的な表現
- 2.2 型システム
- 2.2.1 強い型付けと弱い型付け
- 2.2.2 動的型付けと静的型付け
- 2.2.3 ダックタイピング
- 2.3 まとめ
- 3章 型アノテーション
- 3.1 型アノテーションとは何か
- 3.5よりも前のPythonで使える型アノテーション
- 3.2 型アノテーションの利点
- 3.2.1 自動補完
- 3.2.2 型チェッカ
- 3.2.3 演習:バグ探し
- 3.3 いつ型アノテーションを使うべきか
- 3.4 まとめ
- 4章 型制約
- 4.1 Optional型
- 例外
- 4.2 Union型
- 4.2.1 データ型の積と和
- 4.3 Literal型
- 4.4 Annotated型
- 4.5 NewType型
- 型エイリアス
- 4.6 Final型
- 4.7 まとめ
- 5章 コレクション型
- 5.1 コレクションの型アノテーション
- 5.2 同種コレクションと異種コレクション
- 5.3 TypedDict
- 5.4 新しいコレクション型の作成
- 5.4.1 ジェネリクス
- ジェネリクスのその他の用途
- 5.4.2 既存のデータ型の変更
- 5.4.3 簡単に使えるABC
- 5.5 まとめ
- 6章 型チェッカのカスタマイズ
- 6.1 型チェッカの設定
- 6.1.1 mypyの設定
- 6.1.2 mypyのレポート
- 6.1.3 mypyの高速化
- 6.2 mypy以外の型チェッカ
- 6.2.1 Pyre
- 6.2.2 Pyright
- 6.3 まとめ
- 7章 実践的な型チェックの導入
- 7.1 トレードオフ
- 7.2 早く付加価値を手に入れる方法
- 7.2.1 ペインポイントを特定する
- 7.2.2 対象コードの戦略的な選択
- 7.2.3 ツールの活用
- 7.3 まとめ
- 第Ⅱ部 ユーザ定義型
- 8章 列挙型
- 8.1 ユーザ定義型
- 8.2 列挙型
- 8.2.1 Enum
- 8.2.2 列挙型を使うべきではない場合
- 8.3 高度な使い方
- 8.3.1 auto()
- EnumかLiteralか
- 8.3.2 Flag
- 8.3.3 整数への変換
- 8.3.4 unique
- 8.4 まとめ
- 9章 データクラス
- 9.1 データクラスの実際
- 9.2 使い方
- 9.2.1 文字列への変換
- 9.2.2 等価比較
- 9.2.3 比較
- 9.2.4 イミュータブル
- 9.3 他のデータ型との比較
- 9.3.1 データクラスと辞書
- 9.3.2 データクラスとTypedDict
- 9.3.3 データクラスと名前付きタプル
- 9.4 まとめ
- 10章 クラス
- 10.1 クラスの解剖
- 10.1.1 オブジェクトの初期化
- 10.2 不変式
- アサーションか例外か
- 10.2.1 不変式を維持する方法
- 例外を使いたくない場合はどうするか
- 10.2.2 不変式が有益な理由
- SOLID原則
- 10.2.3 不変式の伝え方
- 10.2.4 クラスの利用者への伝え方
- 10.2.5 メンテナへの伝え方
- 不変式チェックをすると遅くなるか
- 10.3 不変式のカプセル化と保守
- 10.3.1 カプセル化とは何か
- 10.3.2 データアクセス保護
- すべてのプライベートメンバにゲッターやセッターを用意すべきか
- 10.3.3 操作、演算
- @staticmethodと@classmethodはどうするか
- 10.4 まとめ
- 11章 インタフェースの定義
- 11.1 自然に使えるインタフェースの設計方法
- 11.1.1 利用者のように考える
- 11.2 自然なインタラクション
- 11.2.1 自然なインタフェースの実現
- 11.2.2 特殊メソッド
- 11.2.3 コンテキストマネージャ
- 11.3 まとめ
- 12章 部分型
- 12.1 継承
- 多重継承
- 12.2 置換可能性
- 12.3 設計で考慮すべきこと
- 12.3.1 コンポジション
- 継承以外の部分型
- 12.4 まとめ
- 13章 プロトコル
- 13.1 2つの型システムの間の緊張関係
- 13.1.1 データ型を指定しないかAnyを使う
- 13.1.2 Unionを使う
- 13.1.3 継承を使う
- 13.2 プロトコル
- 13.2.1 プロトコルの定義
- プロトコルは継承を不要にするか
- 13.3 高度な用法
- 13.3.1 複合プロトコル
- 13.3.2 実行時チェックできるプロトコル
- 13.3.3 プロトコルを満たすモジュール
- 13.4 まとめ
- 14章 pydanticによる実行時型チェック
- 14.1 動的な設定
- 14.2 pydantic
- 14.2.1 バリデータ
- 14.2.2 バリデーションとパースの違い
- 14.3 まとめ
- 第Ⅲ部 大規模な変更への対応
- 15章 拡張性
- 15.1 拡張性とは何か
- 15.1.1 設計のやり直し
- 15.2 開放閉鎖の原則
- 15.2.1 OCP違反の見つけ方
- 15.2.2 欠点
- 15.3 まとめ
- 16章 依存関係
- 16.1 関係
- ピン留めすべきかせざるべきか
- 16.2 依存関係のタイプ
- 16.2.1 物理的依存関係
- DRYしすぎたコード
- 16.2.2 論理的依存関係
- 16.2.3 時間的依存関係
- 16.3 依存関係の可視化
- 16.3.1 パッケージの可視化
- 16.3.2 インポートの可視化
- 16.3.3 関数呼び出しの可視化
- 16.4 まとめ
- 17章 コンポーザビリティ
- 17.1 コンポーザビリティとは何か
- 17.2 ポリシーとメカニズム
- 現場におけるコンポーザビリティ
- 17.3 小規模な部品のコンポーザビリティ
- 17.3.1 コンポーザブルな関数
- 17.3.2 コンポーザブルなアルゴリズム
- 17.4 まとめ
- 18章 イベント駆動アーキテクチャ
- 18.1 仕組み
- 18.1.1 欠点
- 18.2 単純イベント
- 18.2.1 メッセージブローカーを使う
- 18.2.2 Observerパターン
- クラスなしのパターン
- 18.3 ストリーミングイベント
- 18.4 まとめ
- 19章 プラガブルPython
- 19.1 Template Methodパターン
- 原典におけるTemplate Methodパターン
- 19.2 Strategyパターン
- 19.3 プラグインアーキテクチャ
- 19.4 まとめ
- 第Ⅳ部 セーフティネットの構築
- 20章 静的解析
- 20.1 リンター
- エラーをシフトレフトせよ
- 20.1.1 独自のPylintプラグインの開発
- 20.1.2 プラグインの仕組み
- 20.2 その他の静的解析ツール
- 20.2.1 複雑度チェッカ
- 20.2.2 セキュリティ解析
- 20.3 まとめ
- 21章 テスト戦略
- 21.1 テスト戦略の立て方
- 21.1.1 テストとは何か
- 手動テストについて
- 21.2 テストにかかるコストの削減方法
- pytestの使い方
- 21.2.1 AAAテスト
- 21.3 まとめ
- 22章 受け入れテスト
- 22.1 振る舞い駆動開発
- 22.1.1 Gherkin
- 22.1.2 実行可能な仕様
- 22.2 behaveのその他の機能
- 22.2.1 ステップのパラメータ化
- 22.2.2 テーブル駆動の要件
- 22.2.3 ステップマッチャー
- 22.2.4 テストのライフサイクルのカスタマイズ
- 22.2.5 タグを使ったテストの選択的な実行
- 22.2.6 レポートの生成
- 22.3 まとめ
- 23章 プロパティベーステスト
- 23.1 Hypothesisによるプロパティベーステスト
- Hypothesisデータベース
- 23.1.1 Hypothesisの魔術
- 23.1.2 従来のテストとの違い
- 23.2 Hypothesisのフル活用
- 23.2.1 Hypothesisストラテジ
- 23.2.2 生成アルゴリズム
- 23.3 まとめ
- 24章 ミューテーションテスト
- 24.1 ミューテーションテストとは何か
- 24.2 mutmutによるミューテーションテスト
- 24.2.1 ミュータントテストで見つかったテストの穴の修復
- 24.2.2 ミューテーションテストレポート
- 24.3 ミューテーションテスト導入の難点
- 24.3.1 カバレッジ(およびその他の指標)の嘘
- 24.4 まとめ
- 著者紹介
- 奥付
Product information
- Title: ロバストPython ―クリーンで保守しやすいコードを書く
- Author(s):
- Release date: March 2023
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784814400171
You might also like
book
サイトリライアビリティワークブック ―SREの実践方法
『SRE サイトリライアビリティエンジニアリング』で、サイトリライアビリティエンジニアリング(SRE)はプロダクションサービスの稼働と信頼性の維持がサービス設計の基本であるとし、行動の基礎となる原則と理論を述べました。その実践編であり副読本でもある本書は、SREを組織やプロジェクトで導入するにあたり、必要となる具体的な方法や手順を解説します。またこれまでGoogle内部で得た技術的ノウハウを解説し、さらにEvernote、The Home Depot、New York Timesなどさまざまな企業での事例を紹介します。
book
エンジニアのためのマネジメントキャリアパス ―テックリードからCTOまでマネジメントスキル向上ガイド
本書は、技術系マネージャーとそれを目指すエンジニアに向けて、IT業界の管理職に求められるスキルを解説する書籍です。テックリードからCTOになった経験を持つ著者が、管理職についたエンジニアが歩むキャリアパスについて段階をおって紹介します。インターンのメンターから始まり、テックリード、チームをまとめるエンジニアリングリード、複数のチームを管理する技術部長、経営にかかわるCTOやVPと立場が変わることによって求められる役割について、それぞれの職務を定義しながらくわしく説明します。さらに管理職の採用や評価、機能不全に陥ったチームの立て直し、管理職についてからの技術力の維持など、様々なハードルを乗り越えるための考え方やテクニックを多数紹介。
book
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
Pythonの機械学習用ライブラリの定番、scikit-learnのリリースマネージャを務めるなど開発に深く関わる著者が、scikit-learnを使った機械学習の方法を、ステップバイステップで解説します。ニューラルネットを学ぶ前に習得しておきたい機械学習の基礎をおさえるとともに、優れた機械学習システムを実装し精度の高い予測モデルを構築する上で重要となる「特徴量エンジニアリング」と「モデルの評価と改善」について多くのページを割くなど、従来の機械学習の解説書にはない特長を備えています。
book
Pythonからはじめるアルゴリズムトレード ―自動売買の基礎と機械学習の本格導入に向けたPythonプログラミング
『Pythonによるファイナンス 第2版』の著者が、アルゴリズムトレードを始める上で必要な自動売買の基礎と、機械学習を本格的に導入するために必要なPythonの知識について解説します。具体的には、アルゴリズムトレード用の適切なPython環境の設定、データの取得、NumPy/pandasを使ったデータ分析、トレード戦略のバックテスト、市場予測、ストリーミングのリアルタイム処理等、アルゴリズムトレードのさまざまな側面にPythonを適用するさまざまな手法を紹介し、自動トレード戦略を効率よく構築、デプロイするために、どのような選択肢があるのかを提示します。本書で利用したサンプルコードはGitHubから利用可能です。