Ablog

以前、ブログのツールに Tinkerer を使っていたのだが、 しばらくブログを書かずにいたら、いつの間にか開発が止まっていた。

そこで Tinkerer と同様の、つまり Python + Sphinx ベースで軽いブログツールを 探したところ、Ablog というのが見つかったので、使ってみることにした。

使ってみると、悪くない。 悪くはないが、しかしそれにしても、情報が少ない。 と言うか、google で "Ablog" と検索してみると、 a-blog cms という別のソフトウェアのページが大量に出てくる。大変紛らわしい。 マイナーソフトあるあるである。

以下の記述は Ablog 0.11.11 時点のもの。

Ablog のインストール

インストールは Python の作法通り pip で行えばよい。 venv 環境に隔離する方が何かと便利で安心なので、それも実行する。

python3 -m venv (venv-dir)
source (venv-dir)/bin/activate  # bash系の場合
pip install ablog

プロジェクト作成

ablog start を実行すると、Sphinx の quickstart のような感じで 必要事項の入力を要求される。 入力するとテンプレートファイルが作成される。

mkdir (ablog-dir); cd (ablog-dir)
ablog start

conf.py 修正

基本設定は Sphinx と同様、conf.py で指示するようになっているので、 conf.py を自分の目的に合わせて修正する。

以下の項目はやや分かりにくいので注意を要する。

  • 日付の書式

    日付の書式はデフォルトで欧米式になっているので修正する方がいい。 特段の理由が無ければ ISO 8601 (YYYY-MM-DD) にするべきである。

    post_date_format_short (サイドバーの Recent Posts 欄の日付の書式指定) は、初期状態では conf.py に含まれていないので注意が必要。 手動で追加する。

  • 投稿一覧ページのレイアウト

    投稿一覧などのページで、個々の記事の抜粋(excerpt)を何行表示するか、 を post_auto_excerpt で指定できるようになっている。 デフォルトでは先頭の1行分を抜粋文として表示するようになっているが、 抜粋文が表示されると一覧性が低くなるので、抜粋無しにすることにした。

    blog_archive_titles はアーカイブページの投稿一覧のレイアウトを制御する。 True にすると、表示が投稿のタイトルのみになり、とても見やすい。

  • サイドバー

    html_sidebars に、デフォルトでは navigation.html が含まれているが、 これはデフォルトテーマ alabaster のファイルであるため、 テーマを変更するとエラーが出る。

    テーマを変更した場合は navigation.html を削除する。

  • builder の変更

    デフォルトでは、Ablog は内部的に Sphinx を dirhtml モードで実行する。 このモードでは、filename.rst というソースファイルを、 filename.html ではなく、filename/index.html というパスに出力するのだが、 一方で、サイト内の別ページへのリンクを、index.html を省略した filename/ という URI で生成するため、ブラウザで出力結果を直接確認しようとすると、 リンクをクリックした時にページ遷移しない(わたしは MacOS を使っているので Finder のウィンドウが出てくる)ので不便極まりない。

    Ablog には、簡易httpサーバとして動作する ablog serve コマンドがあるが、 いちいちサーバを立てるのも面倒なので、最初からビルドモードを Sphinx 標準の html にする方が良い。

    ablog build -b html のようにコマンドラインで指定する方法もあるが、 conf.py に ablog_builder = "html" を追加する方が楽である。

ソースコード修正

ablog post コマンドで空ファイルを作成する時の日付フォーマットは (venv-dir)/lib/python3.xx/site-packages/ablog/commands.py の 312行目 にハードコーディングされていて、conf.py を参照しない。

なので、ソースコードを直接修正する。

--- commands.py.orig        2024-10-15 22:33:47.000000000 +0900
+++ commands.py     2024-10-18 00:45:59.000000000 +0900
@@ -312 +312 @@
-    today = today.strftime("%b %d, %Y")
+    today = today.strftime("%Y-%m-%d")

日本語メッセージ作成

Ablog にはデフォルトで日本語ロケールのメッセージファイルが入っていない。

(venv-dir)/lib/python3.xx/site-packages/ablog/locales/sphinx.pot に pot ファイルがあるので、これを元にして日本語用 mo ファイルを作成する。 ツールは何を使っても構わないが、Ablog をインストールした時に pybabel もインストールされているはずなので、それを使うのが良いか。

作成した mo ファイルは、venv-dir 以下だけでなく、 ablog-dir 以下に置いても読んでくれるようだ。 複数の Ablog プロジェクトを動かすならば venv-dir に置くのも便利かも知れないが、 データのバックアップを考えると ablog-dir 以下に置いとく方が便利だろう。

翻訳は自分の好きにすればいいのだが、欧文と和文の語順の違いが いつもながら悩ましい。

一部、ソースコードにハードコーディングされている語句がある。

--- blog.py.orig    2024-10-15 22:33:47.000000000 +0900
+++ blog.py 2024-10-20 22:19:34.000000000 +0900
@@ -201 +201 @@
-        self.posts = self.blog["post"] = Collection(self.blog, "post", "Posts", path=self.blog_path)
+        self.posts = self.blog["post"] = Collection(self.blog, "post", "投稿", path=self.blog_path)

更新日 2024-10-20

ablog_builer について文章を追加。 ハードコーディング部分の翻訳について追加。