2011年5月1日

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

「エキスパート Python プログラミング」を読みました。 購入したのは昨年でしたが、しばらく積読状態になっていました。 よくある感想ですが「なんでもっと早くに読んでおかなかったのか...」ということが悔やまれます。 とはいえ、読まないよりは読んだ方が良いですし、Python に限らずソフトウェアエンジニアは 9 章と 10 章は読むべきだと思いました。

全体を通じて、ツールの使い方に関する説明がとても丁寧でした。 最初のインタープリタの導入から始まり、 IPythonsetuptools および distribute 、 ターゲットシステムには Windows も含まれており、 MinGW の設定もあります。 また、エディタの設定や選択基準も説明されていました。

書籍の 2 章から 4 章ではベストプラクティスが紹介されており、 イテレータ、ジェネレータ、デコレータ、クラスの書き方、命名方法などが説明されます。 関連する PEP (Python Enhancement Proposal) も付記されており、どうしてその構文が導入されたのか?という経緯を辿ることもできます。 着目している事柄が全体の中でどのような位置づけなのかを知ることにより、バージョンごとの違いへの理解も深まるのではないでしょうか (例: with 文)。

5 章からは実際のソフトウェアライフサイクルを意識しながらツールの説明が進みます。 どうやってパッケージを作成し、それらを簡単に組み合わせるためにはどうするか。 ソースコードはもとより、テストやドキュメントをどのように管理し、継続的インテグレーションを軌道に乗せるためには何ができるか。 これらのトピックを個別に扱う書籍は多いですが、全てがまとまっている点が嬉しいですね。

たくさんのツール

最近はどのプログラミング言語でも多くのツールが開発/改善されていますので、Python でなければならない理由は少ないと思います。 しかし、Python だと少なくとも次のツールセットを利用できますので、選択肢のひとつとしては良い候補だと思います。

  • Pylint - とても柔軟性の高いソースコードアナライザ。 (4章)
  • CloneDigger - 重複コードの検出ツール。 (4章)
  • pep8 - PEP-8 のスタイルガイドをチェックするツール。 (4章)
  • Python Paste - 生成的プログラミングの補助ツール。 (5章)
  • virtualenv - 独立した Python 環境を作成するツール。 (6章)
  • zc.buildout - 環境構築ツール。 (7章)
  • Mercurial - 分散バージョン管理システム。 (8章)
  • Trac - トラッキングシステム。 (8章)
  • buildbot - コンパイルとテストのサイクルを自動化するソフトウェア。 (8章)
  • Sphinx (日本語) - ドキュメント作成ツール。 (10章)

新しいツールを導入すると学習コストがかかる懸念はありますが、たいがいの場合は杞憂だと思いますし、 むしろ、古い方法論を使い続けて生産性が上がらないことの方が問題だったりします。 超短期間のスプリント開発を除けば、上記のツールに該当するものを導入していないプロジェクトは改善の余地があるのかな、と考えられます。 Mercurial / Trac / buildbot / Sphinx は、プログラミング言語とは無関係に外部ツールとして利用できる点も良いですね。

Pythonic な構文

63ページより引用:

Pythonic な構文とは、小さなコードパターンに対して、もっとも効率的なイディオムを使用した構文です。 この呼び方はライブラリのような高レベルな機能にも適用されます。 そのライブラリが、Pythonic なイディオムで使用できるように考慮されている場合に、Pythonic とみなされます。 この用語は、コードを分類するために、ときおり、Python のコミュニティで使用されます。 暫定的な意味の定義は以下のブログで紹介されています。

http://faassen.n--tree.net/blog/view/weblog/2005/08/06/0

要するにこの書籍の中核を成す考え方です。 小さなコードパターンだけでなく、もう少し大きなアプリケーションを構成する場合には ZCA (Zope Component Architecture) が参考になるとのことです。 (A Comprehensive Guide to Zope Component Architecture)

Python はダックタイピングですから、オブジェクトを受け渡すときに厳密な型を意識しないことが多いと思います。 とはいえ、何が渡されるのか分からない (API がすっきりしていない) 場合は、必要以上に慎重になってしまうかもしれません。 377ページの一文が行き過ぎたチェックへの警句と言えますが、この辺の兼ね合いが Pythonic かどうかの試金石とも考えられます。

それはアヒルだと言ったのに……DNAまでチェックする必要ないでしょ!

終わりに

積読本を消化しました。 効率的 な Python の書き方も説明されていますが、開発サイクルに沿った流れがとても分かりやすい書籍でした。

個人的には、zc.buildout を使って Trac をセットアップできる (255ページ) ことに驚きました。 確かに言われてみれば当然ですが、このような仕組みを流用していくと、ソフトウェアのデプロイが簡単になっていくので嬉しいですね。

コメントを投稿