「退屈なことはPythonにやらせよう」を読んで実際に自動化してみてプログラミングがまた好きになった【書評】

この記事は約12分で読めます。

最近Pythonを始めまして、いくつか実用的なプログラムを書いています。

とはいっても、これまでプログラミングを避ける人生を歩んできた我が身としては、何があるか分からないものだな、と感慨深いです。

今回はこんな匠を日曜プログラマにしてくれてしまった書籍について紹介させてもらいます。

誰か同じめに遭ってしまえばいいと思います。

スポンサーリンク

書籍「退屈なことはPythonにやらせよう」とは?

この本は、ご存知オライリー・ジャパンによる書籍で、一冊で基礎から実用するまで完結できます。さすがはオライリー様!

ただその代わり、それなり文書量があるので、前半戦で脱落したくなってしまうこと受け合いです。学生時代に何度挫折したことやら。。。

ちなみに、下記にサンプルコードが転がっていますね。ほんとにありがたい。

GitHub - oreilly-japan/automatestuff-ja: 『退屈なことはPythonにやらせよう』のリポジトリ

「退屈なことはPythonにやらせよう」の良いところ

この本を読めばPythonを使えるようになるのではない

え?じゃ、何?って?

Pythonで色んな処理を自動化したくなるのです。

読んでるとだんだんウズウズしてくるんですよね。あれができるんじゃ?これができるんじゃ?って。

以下では少し退屈に感じる「第1部 Pythonプログラミング基礎」を我慢して読みたくなる、第2部以降の実用的な箇所をご紹介します。

サンプルコード例)Webから情報を持ってくる

「11章 Webスクレイピング」では、PythonプログラムによってWEBサイトから様々な情報を機械的に取得してくる方法を記載してくれています。一見、ハードルが高そうですが、ステップバイステップで実行できる Python のコマンドラインを使って説明してくれます。

例えば、P264「11.2.1 requests.get()関数を用いてWebページを ダウンロードする」では

>>> import requests
>>> res = requests.get('https://automatetheboringstuff.com/files/rj.txt')  # ❶
>>> type(res)
<class 'requests.models.Response'>
>>> res.status_code == requests.codes.ok # ❷
True
>>> len(res.text) 174130 >>> print(res.text[:250])

❶のURLは、本書のサイトで提供している 『ロメオとジュリエット』 の戯曲全文を掲載したテキストのページを示しています。このWebページをリクエストが成功したかどうかは、Responseオブジェクトのstatus_code属性を調べればわかります。もしこの値が requests.codes.okであれば (❷)成功です

非常にわかりやすく丁寧です。そして、URLだけ差し替えればすぐ使えてしまいそうです。定期的 or ダウンロード対象が多い場合に便利そうですよね。

また、サンプルプログラムだけではなく、そこに至るプログラミング以外の部分の手順もわかりやすく解説してくれています。例えば、このWEBページから特定の情報を取得するには、HTMLタグのどういう情報を取ってくるかを知る必要があるのですが、これを下記の章で解説してくれています。

11.3.4 ブラウザの開発者ツールを開く
Webページのソースを見るだけでなく、開発者ツールを使ってHTMLを解析してみ ましょう。WindowsのChromeやInternet Explorer、Edgeには、開発者ツールが内蔵されていて、F12キーを押すと表示されます (図11-4) 。もう一度F12キーを押すと、 開発者ツールは消えます。 Chromeでは、 [メニュー]→ [その他のツール]→ [デベロッ パーツール] でも開発者ツールを表示することができます。Macでは、⌘-Option-Iに よってChromeの開発者ツールが開きます。

ちゃんと画像付きで知らない人でも分かるように教えてくれます。さすがはオライリー様!

そんなわけで、匠はこの章は早めに完読したことを付け加えておきます。

11章 Webスクレイピング ………………………………………………………………259
11.1 プロジェクト:webbrowserモジュールを用いたmapIt.py
11.2 requestsモジュールを用いてWebサイトからファイルをダウンロードする
11.3 HTML
11.4 BeautifulSoupモジュールを用いてHTMLを解析する
11.5 プロジェクト:Google検索 “I’m Feeling Lucky”
11.6 プロジェクト:すべてのXKCDコミックをダウンロードする
11.7 seleniumモジュールを用いてブラウザを制御する
11.8 まとめ

なお、演習問題なども充実しているので、すぐに作りたいスクリプトがない人でも実践的に勉強できます!

11.9 演習問題
11.10 演習プロジェクト
11.10.1 コマンドライン電子メーラー
11.10.2 画像サイトのダウンローダー
11.10.3 2048
11.10.4 リンクの検査

実用例)ファイル操作を自動化する

次に代表的な退屈な作業といえば、ファイル操作ですが、こちらも充実しています。

8章 ファイルの読み書き …………………………………………………………………..185
8.1 ファイルとファイルパス
8.2 os.pathモジュール
8.3 ファイルの読み書きの方法
8.4 shelveモジュールを用いて変数を保存する
8.5 pprint.pformat()関数を用いて変数を保存する
8.6 プロジェクト:ランダムな問題集ファイルを作成する
8.7 プロジェクト:マルチクリップボード
8.8 まとめ

ここまでは基礎的な作り方のお話。この目次でワクワクする人はいないと思います。ただし、ここからです。

8.9 演習問題
8.10 演習プロジェクト
8.10.1 マルチクリップボードを拡張する
8.10.2 作文ジェネレータ
8.10.3 正規表現検索
9章 ファイルの管理 ………………………………………………………………………….215
9.1 shutilモジュール
9.2 ディレクトリツリーを渡り歩く
9.3 プロジェクト:米国式日付を欧州式日付に変換する
9.4 プロジェクト:フォルダをZIPファイルにバックアップする
9.5 まとめ
9.6 演習問題
9.7 演習プロジェクト
9.7.1 選択コピー
9.7.2 巨大なファイルを探す
9.7.3 連番の飛びを埋める

いくつか「何?そういうの簡単にできるの?」なんて思う項がありますよね。

例えば、この演習プロジェクト。

9.7.2 巨大なファイルを探す
 ハードドライブ上で、数個の巨大なファイルやフォルダが多くのディスク容量を占有 していることは、めずらしくありません。ディスクに空きを作りたいなら、最も巨大で 不要なファイルを削除するのが、最も効果的です。けれども、まずそういうファイルを 探さなければなりません。
 そこで、ディレクトリツリーを渡り歩いて、とりわけ大きなファイルやフォルダ (例 えば100MBを超えるもの) を探し出すプログラムを書きなさい。ファイルのサイズは、osモジュールのos.path.getsize()を使えば取得できます。見つかったファイルは 絶対パスを画面に表示してください。

この章を読めば、こんなスクリプトを作れます。いや、意外と難しくないです。匠はできました。できなくても解答がついてるのでコピペして応用することもできます。

ちなみに、匠はこのスクリプトを作って、月に一回大きなファイル(10MB以上)を洗い出す処理を定期的に回して掃除する習慣となりました。便利便利!

実用例)Excelファイルへの作業を自動化する

今のプログラムって平気でExcelファイルなんかを処理できてしまうんですね!これは読むまで思いもよりませんでした。そうですよねー世の中進んでますもんねー。。。

12章 Excelシート …………………………………………………………………………..299
12.1 Excel文書
12.2 openpyxlモジュールをインストールする
12.3 Excel文書を読み込む
12.4 プロジェクト:スプレッドシートからデータを読み込む
12.5 Excel文書を書き出す
12.6 プロジェクト:スプレッドシートを更新する
12.7 セルのフォントスタイルを設定する
12.8 Fontオブジェクト
12.9 数式
12.10 行と列を調整する
12.11 グラフ
12.12 まとめ
12.13 演習問題
12.14 演習プロジェクト
12.14.1 掛け算の表を作成する
12.14.2 空行を挿入する
12.14.3 行と列の入れ替え
12.14.4 テキストファイルからスプレッドシートに変換する
12.14.5 スプレッドシートからテキストファイルに変換する

この章は片っ端から色んなことができそうなアイディアが湧いてきます。特に、Excel文書の書き出しとグラフの作成方法がわかった時には感激しましたね!

この本の良いところは絶妙に画像入りで説明してくれるところです。以下は P328 からの引用です。

思わず、趣味のFXの勝ち負けのテキストデータをグラフ化してみて、軽く絶望したもんです。もう為替やらない。。。orz(定期

スポンサーリンク

Pythonにどんな退屈なことをやらせるか

さて、これまでご紹介してきた内容でPythonを学んでどうするのか?実際やることある?フリーソフトで十分じゃね?と思いますよね。思ってましたよ。

ただ、実際にこの本を読んで、匠はいくつかスクリプトを実際に作ってみました。そちらをご紹介しますので、やる気の一端を担っていただければと思いますよ。

(追記:2017/9/10)ちなみに、このツールが無ければここまでPythonスクリプトをガンガン書いたりしなかったかもしれません。
Pythonista 3
Pythonista 3
Developer: omz:software
Price: ¥1,200

このページと埋め込まれた動画を見て、なるほどー!と思って使い始めました。
http://hitoriblog.com/?p=42145
今では家族サービスの隙間(並び時間とか)に、コッソリとテストスクリプトなんか作って試してみたりするのにピッタリで、非常に重宝しています。

Mastodonユーザーが使うべきPython(サンプルコードほか)

一番やりたかったのはこれです。自動トゥートもやりたかったし、下記のような記事を書きたかったが故にめっちゃくちゃ格闘しました。良い戦いでしたよ、まったく。。。

マストドン インスタンス別アクティブユーザー調査結果
本ページの更新は2018/01/13分をもって終了しました。大手インスタンスの「活動ユーザー」に関する調査結果を掲載しています。最終更新日時:2018/01/13 00:01毎日0時頃に更新します。気になることがあればこちらま...
マストドン クライアントアプリ 利用ユーザー数ランキング
本ページの更新は2018/01/13分をもって終了しました。大手インスタンスで使われているクライアントアプリのユーザー数のトップ20を掲載しています。最終更新日時:2018/01/13 00:00毎日0時頃に更新します。気にな...

※今は役目を終えて停止しています。

これをやるためには別記事でも書きましたが、とにかくMastodon REST API と PostgreSQL ともがっつり格闘しました。いやぁ、夏休みがあって良かった!!

Build software better, together
GitHub is where people build software. More than 36 million people use GitHub to discover, fork, and contribute to over 100 million projects.

この辺の記事読むくらいで終われれば良かったのですが、そうもいかず。。。

mastodonをpythonからさわる API解説 - Qiita
# 2017/04/16更新 メディアファイルのトゥートするやり方が分かったので更新 コメント通りsuzuryuさんより Mastodon.pyを書き換える それぞれの環境によって異...

MastodonにTootするまで(Python) - Qiita
# Mastodon Twitterライクなサービスらしい。オープンソース。 とりあえずPythonでToot(TwitterでいうTweet)するまで。 # ライブラリ PythonとかRubyとかあるらしいので、とりあえずP...

その経緯を説明した別記事はこちら。

PythonとPostgreSQLで苦手だったプログラミングをはじめた話
どうも、匠です。マストドン(Mastodon)向けに色んなことをやりたくて、ついにOSSでのプログラミングに手を出してしまいました。元々はプログラミングが苦手だったのに。ホント遊ぶ欲って凄いですね。。。今回はこれからプログラムを作っ...

今もMastodon(マストドン)に関するスクリプトはちょこちょこ作っていますが、やればやるほど色んなことをやってみたくて面白いですね!

ちなみに、勢い余ってこんなページも書いてみました。

Mastodonで始めるPythonプログラミング!腕試しテスト50本ノック(初級編)
Mastodonで遊びたくて、苦手なプログラミングを克服して、Pythonを習得しました。この経験から Mastodonで練習するのはプログラミング学習に有効だと感じました。そこでPython初心者が Mastodonを楽しめるように、簡単な練習問題を50問ほど作ってみました。ぜひチャレンジしてみて下さい。

WordPressユーザーがやるべきPython

こちらは先ほど紹介した記事を毎日自動化するために勉強してみました。

WP REST API v2 Documentation
Documentation for version 2.0 of the WP REST API.

やってみてわかったのですが、Mastodonと違って結構複雑でどハマりしまくりです。単なるテキストの投稿から、テキストの更新に画像の更新えとせとら。。。でも、深ければ深いほど面白いなぁ、と感じるようになってしまいました。どうなってしまったんだ、匠。。。

Zaim.netユーザーがやるべきPython

こちらは作り始めたばかりです。下記の記事にも書いた通り、足りない機能がいくつもあるので、それを補うためのスクリプトを年末までに作りたいなと考えています。

家計簿アプリ「Zaim」で散財は無くせる!5年使い倒したノウハウを公開する話
家計簿アプリ「Zaim」を散財を撲滅するために&#12...

年末の締めに間に合えば!と思って、下記に手を出している最中です。

Zaim Developers Center
スポンサーリンク

「退屈なことはPythonにやらせよう」のサンプルコードの写経から始めよ

Python で実現できる処理は本当に幅が広いです!

PythonでGoogleやはてブを検索すると、大量に出てきて、読むだけでも今は面白く感じます。

ただ、やはりその楽しさをホントに感じられるのはサンプルコードを写経して、カスタマイズしてみるところからです。

それだけですぐに役立つものが作れてしまうのが、この「退屈なことはPythonにやらせよう」の良さと言えます。

また。「退屈なことはPythonにやらせよう」はあくまで「使い方の入り口」の書籍であって、「良い使い方」は書いていません。

それらを学ぶ入り口としては下記が良かったです。Amazon Unlimited なら無料ですしね。

この辺の講座も狙い目でしたね。

あと、今はもっと深みにハマってみようかと思って下記に手を出してみました。いやぁ、歯ごたえあり過ぎ(笑



そんなわけで、「プログラミング嫌い」の皆様が少しでも興味を持って、一緒にプログラミングのドツボにハマれば幸いでございます。


併せて、こちらの記事もご覧下さい。

Mastodonで始めるPythonプログラミング!腕試しテスト50本ノック(初級編)
Mastodonで遊びたくて、苦手なプログラミングを克服して、Pythonを習得しました。この経験から Mastodonで練習するのはプログラミング学習に有効だと感じました。そこでPython初心者が Mastodonを楽しめるように、簡単な練習問題を50問ほど作ってみました。ぜひチャレンジしてみて下さい。
PythonとPostgreSQLで苦手だったプログラミングをはじめた話
どうも、匠です。マストドン(Mastodon)向けに色んなことをやりたくて、ついにOSSでのプログラミングに手を出してしまいました。元々はプログラミングが苦手だったのに。ホント遊ぶ欲って凄いですね。。。今回はこれからプログラムを作っ...