block_given?

ジャングル ブロック ナイ アルノハ jump ダケ。CC-BY-SA 3.0

青空文庫APIサーバーをつくった

いわゆる勝手APIである。

エンドポイントは2つしかない。

元となるデータは以下からリンクが張ってある「「公開中 作家別作品一覧:全て(CSV形式、 zip圧縮)」をダウンロード」から入手した。

青空文庫 [licensed for non-commercial use only] /  データベースからの情報提供(青空文庫API)

くふうしたところ

便利ボタンと便利おじさん

travis-ciを使ってデプロイ自動化と、Herokuボタンをつけた。

へんてこAPI

書き出しが取れる変わったエンドポイントがある。

CSVリポジトリに保管せずHerokuのslug compile timeにダウンロードさせる

リポジトリにファイルは含みたくないけどHerokuのDynoには含まれていてほしいときに便利。 assets:precompileする前にCSVをダウンロードするとよい。 ダウンロードしたファイルをpublic/assets/に置きたい場合はconfig.assets.precompileに追加しておくとよい。

Rakeで特定のタスクの前にタスクを差し込むやり方はhsbtさんのブログを参考にした。

Rake::Task['assets:precompile'].enhance(['aozora:download'])

モデルの中からasset_pathを使う

ActionController::Base.helpers.asset_pathを呼べばよい。

今後やりたいこと

明らかに重いので性能向上したい。

毎回CSVをパースしないようにCSVの作品をDBに取り込むのと、htmlをスクレイピングした結果を保存するのはやっておきたい。 あとはminitest系列のテストの書き方を勉強するため、テストを書きたい。

まとめ

仕事Railsであまりやらないような機能を試すために趣味Railsするの、いいですね。

Rakeタスクの前後にタスクを差し込む方法や、asset_pathの呼び方や、ここには書いていないがDBを使わないRailsアプリのセットアップや、ジェネレータの無効化など、書こうとすればするほど知らないことが出てくるので。