そろそろSSLでないとダメそうなのでCloudFrontとS3という最強コンビにホームページを移しました。
SSL証明書のメンテも必要なく無料で、そもそもそんなに転送もないのでCloudFrontを使っても高くつかないはず。
なんてことをしていたら副産物が2つ出来ました。静的サイトジェネレータ biisan と設定ファイルフレームワーク glueplate です。
biisan
今までは非公開の自作静的サイトジェネレータを使っていました。 rst2htmlに毛が生えたようなもので、次のような問題を抱えていました。
データがローカルのMySQLに保存されていた
docutilsのhtmlライターを使っていた
この機会にファイルベースでデータを持てて変なcssで苦しまない静的サイトジェネレータに書きかえようと車輪を再発明して biisan を作りました。
いきおいあまってReStructuredTextを捨ててMarkdownの軍門にくだろうと最初は思ったのですが、機能が少なすぎて秘伝のエントリを移すのが面倒くさすぎて今回もReStructuredTextです。
逆に、ReStructuredTextは機能が多すぎるので、自分が必要なディレクティブにしか対応していません。ディレクティブごとに処理する関数をわけているため、対応するのは簡単なはずです。勝手に付け足して使うのも簡単ですが、せっかくなのでPullRequestしてもらえれば良いと思いますよ。
さらに、docutils標準でないディレクティブも同じように追加しやすくなっています。これはそもそもReStructuredTextがそういうものなのですが、ちょいとむずいので仕組化してあります。
さらにさらに、出力のHTMLも細かくテンプレートが分かれていて、必要なテンプレートを上書きできるようになっています。
気が向いたらテストとドキュメントを書こう。
あ、エントリを処理するところはmultiprocessingなので 無駄にCPU使い切れ ます。
glueplate
特徴
基本設定はフレームワークやライブラリに持つ
実体側で必要な部分だけ上書きできる
利用時、ドットシンタックスで辿れる
dictを上書きした際もきちんと再帰マージされる
リストの前か後ろに追加も仕組で用意
ライブラリやフレームワークを書くとき、利用時点での上書きを期待する設定項目とそのデフォルト値を定義したいことがあります。
設定されていなければコード上のデフォルト値を使うという風にしてしまうと、設定項目が2箇所に分かれてしまうので常に設定ファイルから読み込みたいみたいなことってありますよね。そんな感じのよく書くコードをライブラリにしたものです。
biisan では、ベースが biisanの設定ファイル で、 上書きしたりしてるのは このホームページの設定ファイル です。
両方見ると biisan がどんなものかも、おおよそわかることでしょう。
気が向いたらテストとドキュメントを書こう。
気が向いたら両方ともPyPIにあげよう。