rack-capture

rack-captureというGemをつくった。

概要

RackアプリとURLを与えると、レスポンスボディを静的ファイルとして書き出してくれる、というもの。

背景

このサイトの設計 2020年版でも書いたように、このサイトのベースはRackアプリとして実装されている。手元でプレビューするときも、rackupを使って動作確認している。GitHub Pagesでホスティングするために、その時点での全ページのスナップショットを静的ファイルとして書き出す必要がある訳だが、そのためにこの実装を用意していた。今回はその仕組みを整えて、Gemとして切り出した。

%w[
  https://r7kamura.com/
  https://r7kamura.com/articles
  https://r7kamura.com/articles/2020-10-30.html
  https://r7kamura.com/articles/2020-10-29.html
  https://r7kamura.com/articles/2020-10-28.html
  https://r7kamura.com/feed.xml
  https://r7kamura.com/sitemap.txt
].each do |url|
  Rack::Capture.call(
    app: my_rack_application,
    url: url
  )
end

このサイトの場合は、こういう感じのものが呼び出されることになる。実際には、articlesディレクトリとstaticディレクトリの中身を見ながらもう少し動的にURL群を用意しているが、大体こんな感じ。


後日譚

これをつくっている最中で、Bundlerが生成するREADMEに無駄な空行が含まれているのが気になり、結局BundlerにPull Requestを出すことになった。後日Mergeされたので、次バージョンのBundlerからは生成されるREADMEがより簡潔なものになるはず。