Rのつく財団入り口

ITエンジニア関連の様々な話題を書いているはずのブログです。

【感想】Pythonエンジニア ファーストブック

Pythonエンジニア養成読本』の改訂最新版

 2017/9/22に出たばかりの新刊です。入り口としてPython周りの諸々を説明していた養成読本は2015年6月刊行、Python2.7でしたが、これがPython3.6対応になって最新の状況に対応されています。

サイズも以前はムックの雑誌サイズでしたが300ページ台のしっかりした本になっていますね。以下、各章ごとに軽く紹介を。

第1章 Pythonの動向

 Pythonの特徴、カルチャー、2と3の違い、歴史やコミュニティの紹介など。このへんは養成読本とだいたい同じですが最新の状況に合わせてあちこち変わっています。あるプログラミング言語まわりの文化や歴史、コミュニティというのは載ってない本も多いので、このへんはありがたいですね。

第2章 最低限知っておきたいPython言語の基本

 Ubuntu/Linux/Windowsでのインストール方法、言語としての書き方、データ型などなど。Python3.6に合わせて更新されています。
これからPythonでコードを書いてみる人がイメージを掴むにはよいでしょうが、まあ詳しくは言語仕様をちゃんと書いてある解説書を別に読もうということになるでしょうね。標準ライブラリ、サードパーティ製パッケージが参考になります。

第3章 開発環境とチーム開発

 『Pythonプロフェッショナルプログラミング』ではバージョン管理の話がMercurialだったのですが、さすがにそこがGitとGitHubの話になっています。Python3から標準になったvenv、docstring、unittest、coverage、flake8、ドキュメント作成のSphinxも入り口のさわり程度を解説しています。
 IDEについてはPyCharmが解説されています。やっていることはド定番の必殺Hello Worldなんですが、キャプチャ豊富でイメージが湧きやすいですね。他言語でIDEメインでやってきた人はとりあえずPyCharmを選べばいいんじゃないかなと思いました。

第4章 スクレイピング

 スクレイピングと聞くと何やら難しそうですが、要はWebページからデータを引っこ抜いてまとめて集計したりすることなんですね。ここでのデータ収集元の例は「技評ねこ部通信」というゆるい題材を使っていて分かりやすいです。
 スクレイピングにはサードパーティ製パッケージを使用し、まずは簡単な例ということでRequests、Beautiful Soup 4パッケージを使っています。このBeautiful Soup(美しいスープ?美味しいスープ?)、名前が既に面白いですね。Python自体もモンティ・パイソンから取ってるそうですが、Python界隈はパッケージ名もけっこうみな遊び心が入っているようです。

 そして入門の後は本格的なスクレイピング用のフレームワークを使おうということで、Scrapy(読み方はスクレイパイ?スクラピー?)がじっくり解説されています。ここもデータ収集元の題材がレゴ情報サイトで分かりやすいですね。
 Scrapyは立派なアーキテクチャを備えていますが、要はプロジェクトを作り、scrapy gensipiderコマンドでSpider継承クラスが生成され、そのparseメソッドの引数に収集データが入っているのでメソッドの中身を実装すればよいという流れになっています。
 メソッドは様々あり、Python独特のyield文で繰り返し処理の中から取り出せたりします。ページング(海外だとページネーション)を使っているWebサイトで次ページの分も取れたり、機能が豊富です。スクレイピングといえばScrapyなんだなということで、だいぶイメージが湧きました。

2017/10/17追記:著者陣の@takanoryさんご本人から情報をいただきました。Scrapyは「スクレイピー」がどうも正式らしいです。ありがとうございました。
Scrapy - Wikipedia

第5章 PyData入門ガイド

 Python+DataでPyData。狭義にはデータ分析コミュニティ、広義ではデータ分析周りのパッケージやツールの総称で使われています。
 最近専門本が1冊出たJupyter Notebookの使い方や、実践例としてまたレゴサイトを題材にしたデータ分析、データの読み込みパッケージであるpandas、グラフを作ってくれるMatplotlib、科学計算用のSciPyなどの話。
 本筋と関係ないですがちらっと出てくる機械学習用ライブラリのTensorFlow、読みはテンソルフローが正しいんですね。(脳内でずっと「テンサーフロー」って読んでた……汗)

 pandas独特のデータ構造、DataFrameについては本章を読んで非常にイメージが湧きました。Excel上の巨大な表データ全体が入った変数みたいなものなんですね。特定列だけを絞り込んだり、欠損行を直したり、describe()一発で最大値や最小値や標準偏差などなど諸々がすっと出たり、scatter_matrix()メソッドで16個ぐらいグラフが一発でささっと出せたり、データ分析周りの便利な機能が色々揃ってるんだなというのがよく分かります。
 『みんなのPython 第4版』でも環境の題材に使われていましたが、Anacondaを使うとPyData関連パッケージが一式そろった状態で作業を始められるんですね。

 そして最後の「PyDataパッケージガイド」には 主要なパッケージやよく名前を聞く参考書籍が一式載っており、役に立ちます。

第6章 Webアプリケーション開発

 個人的には一番知りたかったところです。簡単なBottleやFlaskフレームワークではなく、Pythonの中で一番多機能で本格的なWebアプリケーションフレームワークDjangoを使った開発方法がじっくり解説されています。
題材はここでも、レゴデータ管理と欲しいものリストを備えた簡単なWebアプリとなっています。

コマンド群

 Railsと同じで、コードを書いてすぐ動かすためのサーバが付属してるのが便利でした。コマンドも色々用意してあります。
 謎だったのはひとつのWebアプリとして開発を始めた後、startapp アプリケーション名でその中に分割してまたアプリケーションを作っていく、「アプリケーション」というDjango独自の単位があること。これは画面単位とかテーブルのモデル単位には見えないし……1つのシステムを分割するサブシステムとかを想定しているんでしょうか? あまり使い道がないような気がします。例に使われているWebアプリもbricset_appプロジェクトの下にitemアプリケーションが1つあるだけなので、ふつう1つで済むんでしょうか。

URLルーティング

 この辺は他のフレームワークとだいたい同じで、URL上の記述と対応するビューの関数を紐づけてREST形式にできたりします。

ビュー

 ここも他のFWのビュー層とかコントローラ層のクラス実装と同じ。面白いのはDjangoだとビューはクラスではなく、純粋な関数として実装するんですね。

テンプレート

 ここも他のFWと同じで、HTTPレスポンスに入れたいHTMLを書き、ビューから値を渡したいところを{{}}のように書きます。

モデル

 models.pyというスクリプトにテーブルの数だけクラスを作成、項目やリレーションを書いていきます。ここがコマンド実行じゃなくコードを書くのがRailsと違うような。
マイグレーションの機能でテーブル自体やレコードも作っていけます。モデルのクラスを使ったSQLを書かなくていいDBアクセスの実装方式は、Active Recordパターンの他のFWとほぼ同じです。

 解説が最後まで進むと全体でログイン画面、itemの一覧、itemの更新、ほしいものリストの4画面からなる本格的Webアプリの出来上がりです。
 Djangoの全体アーキテクチャの基本部分の感想としては、予想以上にRuby言語のRails、そしてRailsリスペクトで作られたPHPフレームワーク群やASP.NET MVCに似てるなぁというかだいたい同じですね。モダンなWebフレームワークだとだいたいこうなるんですね。本書の先はDjangoの公式ドキュメントへという流れです。

 そして一番最後には次のステップとして、Python関連の書籍やWebサイトの紹介が詳しく乗っています。僕は自分で調べたのでだいたい知っている内容でもありWebを探せば出てくる情報ではありますが、これから知識を広げていく人には有用でしょう。

まとめ:Python活用のファーストステップと最新情報が詰まった一冊

Pythonプロフェッショナルプログラミング 第2版』の技術キーワードの数的な網羅度には敵いませんが、スクレイピングとPyData、DjangoによるWebアプリの話についてはより詳しく載っており、実物がイメージしやすい解説になっています。そして全体の情報も2017年の最新にアップグレードされています。入門本としては十分な濃密さです。
 チーム開発でいきなり高度なチケット駆動やテスト駆動の開発だー継続的インテグレーションだーとまで行かない人、まず基礎を固めたい若手の人にはこちらの『Pythonエンジニア ファーストブック』の方が向いているのではないでしょうか。特に大学とかでデータ分析やスクレイピングをやるような、研究ライクな目的にはフィットするのではと思います。
Pythonプロフェッショナルプログラミング 第2版』と両方合わせて読むと、Python界隈の技術キーワードがより確実に一通り網羅できそうです。

 自分的には両方読んでPython入門の土台部分はだいぶ確実に固められた気がします。後はPyQも進めないとなー。

本書が取り上げられている記事: massa142.hatenablog.com http://blog.iktakahiro.sh/entry/2017/09/25/103000blog.iktakahiro.sh blog.hirokiky.org