Rails Guidesを整形してPDF化するワンライナー(Mac)

※完成後のPDFはこちらにアップ済み。

いつまでたっても読み終わらないRails Guides。オフラインでも読めるといいんだが、トップページからダウンロードできるKindle用のmobiファイルはスタイルがきちんと効いておらず読みにくい。

という訳でPDF化してみた。
まずは、wkhtmltopdfというWebKitでHTMLからPDFに変換するツールをインストールする。

このツールが非常に便利で、以下のようにURLと保存先ファイル名を指定するだけでPDFが作成される。

以上。と言いたい所だが、作成されたPDFを確認すると、ページ上部のメニューが邪魔でこれを削除したいと思った。そのため、この部分のHTMLをNokogiriか何かで削除しようと考えていたところ妙案がひらめいた。元データはHTMLなのでsedを利用して不要なdivタグに"display: none"を追加すればいい!

なお、Mac標準のsedはBSD sedで使いづらいため、GNU sedを利用している。GNU sedのインストールは以下の通り。

で、肝心のRails GuidesをPDF化するコマンドがこちら。
※変数"URL"にはPDF化する対象のRails GuidesのページのURLを指定する。

これでめでたく上部のメニューは表示されなくなった。
※画像やCSSの読み込みにはbaseタグを利用している。baseタグは知らない人が多いので、知っておくと便利だと思う。

では、何十ページもあるRails Guides全ページをPDF化するにはどうすればいいのか?というと、これもまたsedを利用してRails Guidesのトップページよりリンク一覧を摘出し、それをfor文でループして処理する。for文の中身は先ほどのワンライナーと同じ。
※for文自体を無理やりワンライナーにすることもできるが、見にくくなるため複数行に分けた。

これらのPDFをさらに1ファイルにまとめるにはPDFtkというツールが便利だった。まずは、PDFtkをここからインストールする。PDFtkで複数のPDFを1ファイルにまとめるには以下のようにする。

Rails Guidesの全てのページがPDF化されたら、最後に以下のコマンドを叩く。

すると、1ファイルにまとめられたRailsGuides.pdfが完成する。完成したPDFはページ数が700ページ以上もあって驚いた。そりゃなかなか読み終わらないわけだ。