理系学生日記

おまえはいつまで学生気分なのか

KindleでSRE本を無料で読めるようになるまで

SRE本をつくるツーライナー

Site Reliability Engineering をずっと読みたかったのですが、これ結構高くて、英語版でも日本語版でも 5,000 円を超えてしまいます。

一方で、この内容って Web 上に公開されているので、ここで読めば無料ってことになります。 ぼくは未だ奨学金を返還する義務を負っているのであって、なんとかして安くこの本を読みたい。

無料で読めるんだったらそれで良いんだけど、ぼくはこれを Kindle で読みたい。Kindle で読むためには、PDF 化する必要がある。これを楽に PDF 化したいってことで、ワンライナー作りたかったんですけど、あんましうまくいかなくて、ツーライナーになりました。

# 全チャプターを個別に PDF 化する
$ curl -s https://landing.google.com/sre/book/index.html \
  | pup 'div.content a[href] attr{href}' \
  | sed 's/\(\([^/]*\).html\)$/\1 \2.pdf/' \
  | sed 's|^|--disable-smart-shrinking --viewport-size 800x600 --zoom 3 --resolve-relative-links https://landing.google.com|' \
  | wkhtmltopdf --read-args-from-stdin

# 個々のチャプター PDF を結合する
/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output sre.pdf $(ls -tr *.pdf)

結構いろんなツールを使っているから、ワンライナーとか言うには若干卑怯感がありますね…。

だいたい 15 分くらい待てば、600 ページの SRE 本ができあがりです。 作成される PDF ファイルを Kindle に送れば、以下のように Kindle で SRE 本が読めるようになります。

f:id:kiririmode:20180429192343j:plain

必要なツール

pup

インストールは go get で。

$ go get github.com/ericchiang/pup

pup は jq の HTML 版みたいなもんで、HTML ファイルを受け取って CSS Selector でフィルタして返すってことをしてくれるツールです。 SRE 本のチャプターのリンクを抜き出すために使ってます。

$ curl -s https://landing.google.com/sre/book/index.html | pup 'div.content a[href] attr{href}' | head -3
/sre/book/index.html
/sre/book/chapters/foreword.html
/sre/book/chapters/preface.html

ホントは xmllint --xpath で抽出できれば良かったんですが、HTML がイケてなくてエラー吐かれた。

wkhtmltopdf

インストールは

$ brew install caskroom/cask/wkhtmltopdf

Google 謹製の HTML ファイルを PDF に変換してくれるツール。 JavaScript の実行とかもできてしまうっぽくて、かなり強そう。

このツール使って PDF 化すると、字がめっちゃ小さくなるので、かなり苦労しました。