CUBE SUGAR CONTAINER

技術系のこと書きます。

「スマートPythonプログラミング」という本を書きました

表題の通り Python の本を書いたので、そのご紹介です!

どんな本なの?

ひと言で表すと、自信を持って Python を書けるようになるための本です。 スマートPythonプログラミングなので、略してスマパイって呼んでください。

こんな人におすすめ

  • なんとなく書いてなんとなく動いているコードに不安を覚えている方
  • 入門書は読み終わったけど次に何をして良いか分からない方
  • Python の初心者から中級者にステップアップしたい方
  • ベストプラクティスとかアンチパターンって言葉が好きな方

上記に当てはまる方には、本書が少しでも参考になると思います。

どんなことが書いてあるの?

自分が Python を学び始めた頃に知りたかったな〜と思う内容を詰め込みました!

本は 6 つの章に分かれています。 どんなことが書かれているか簡単に紹介します。

  • 「開発環境を整えよう」では Python の開発環境について学びます。

    • pyenv で任意のバージョンの Python をインストールします
    • virtualenv & virtualenvwrapper で独立した実行環境を作ります
    • pip でサードパーティ製のパッケージをインストールします
    • IPython を使ってスニペットの動作確認をしてみます
    • pudb でソースコードをデバッグします
  • 「読みやすいコードを書く」 では Python で読みやすいソースコードを書く方法について学びます。

    • 標準的なコーディング規約 PEP8 と、それをチェックするツールの pep8/autopep8/flake8 を使います
    • PEP8 の命名規則と、名前を使ったアクセスレベルの表現方法について知ります
    • docstring を使ったドキュメンテーションについて知ります
  • 「落とし穴を避ける」では Python でやってしまいがちな誤りについて学びます。

    • Pylint を使ってコードを静的解析して落とし穴を見つけます
    • 新旧スタイルクラスの違いとか非推奨なモジュールがあることなんかを知ります
    • ※ この章にかぎらず「ここに注意!」みたいなのをこの本にはいっぱい書いてます
  • 「Python らしく書く」では Python らしいソースコードを書く方法について学びます。

    • イテレータ
    • ジェネレータ
    • 内包表記 (リスト内包、集合内包、辞書内包、ジェネレータ式)
    • デコレータ
    • コンテキストマネージャ
    • 抽象基底クラス (abc)
    • 特殊メソッド
  • 「テストを書く」では Python のソースコードをテストする方法について学びます。

    • FizzBuzz に標準ライブラリの unittest でテストを書きます
    • テストしにくいところを unittest.mock でモックに入れ替えます
    • coverage でテストのカバレッジ (網羅率) を調べます
    • テストランナー (nose) とデバッガ (pudb) を連携させます
  • 「使いやすいコードを書く」では Python で保守しやすいソースコードを書く方法について学びます。

    • setuptools で自作パッケージをパッケージングする方法を知ります
    • Python 2.x と 3.x の違いと、両方で動作するコードの書き方について知ります
    • 何気に一番ここが濃いかもしれません

この本で使う環境

登場するソースコードは Python 3.5 & 2.7 対応です。 OS には Ubuntu 14.04 LTS を使うことを想定しています。 ※ 付録に仮想マシンを使ったセットアップ方法を載せています

執筆のきっかけ

Python を良い感じに書くための知見が一通り揃っている本が書きたいなーと思ったのがきっかけです。 個人的には「エキスパートPythonプログラミング」をすごくリスペクトしています。 この本は Pythonista になりたいなら絶対に読んでおいた方が良いと思える本です。 ただ、ちょっと難易度が高いのと、発売から日が経って内容が古くなりつつありました。 そんなとき、ちょうど Kindle で電子書籍を出版できることを知ったのもあって書き始めました。

エキスパートPythonプログラミング

エキスパートPythonプログラミング

  • 作者: Tarek Ziade,稲田直哉,渋川よしき,清水川貴之,森本哲也
  • 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
  • 発売日: 2010/05/28
  • メディア: 大型本
  • 購入: 33人 クリック: 791回
  • この商品を含むブログ (90件) を見る

話がちょっと脱線しますけど本書に近い性格を持った本として「Effective Python」の和訳が最近出ました。 こちらは、より純粋に Python の細かな書き方にフォーカスしている感じです。 それに比べると、本書はツールとかを含めた Python の開発全般について書いています。

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

技術的な側面について

この本はすべて Python 製のドキュメンテーションツールの Sphinx を使って書きました。 そこで得られた経験は SphinxCon JP 2015 で発表したりもしてます。

speakerdeck.com

謝辞

Sphinx で書いた本を KDP で販売するという面では @r_rudi さんの「入門Ansible」という先駆者がありました。 これは色々な面で参考にさせて頂きました。

そして、本の表紙を書いてくれた Asano Sonoko さんと本書のレビューをして下さったかわたろ先輩 (@kawatarolab) には感謝してもしきれません。

おわりに

空き時間にチマチマと書き進めていたら 1 年半くらいかかってしまいました。 その分だけ内容は詰められたんじゃないかと思います。 含める内容については何度か見直しを入れて、本当に必要そうなものだけに絞りました。 そういう意味では、何を書くかよりも何を書かないかを重要視した本かもしれません。

スマパイをよろしくお願いします!

追記: ありがとうございます

Python コミュニティで有名な @shimizukawa さんに読んで頂けました! 一点ご指摘頂いた箇所についても、現在は修正した版になっています。 むしろ、それ以外に気になる点が無かったというところにすごく安心しました…。

ありがたいことに id:methane さんのブログで紹介して頂きました! 例として他のプログラミング言語を使ったことのある人が Python のオンラインチュートリアルと本書を組み合わせて学習することをおすすめされています。 これは私の中で他のプログラミング言語に慣れ親しんだ方を読者イメージとして持っていたので、仰る通りだと思います。 そういった方に、業務に耐えるレベルのソースコードを書くための近道を作れたら良いなと考えています。

methane.hatenablog.jp