はじめに
左腕のこれが、仲間の印だ1🙋♂️❌ nikkieです。
Python Boot Camp(a.k.a. pycamp)のライディングページをSphinxで作って得た知見をアウトプットするシリーズです(まだまだ続きますよ〜)。
SphinxでビルドしたHTMLには数々のテーマがありますが、その中のAlabaster2について共有します。
目次
- はじめに
- 目次
- SphinxのAlabasterテーマ
- ランディングページのユースケース:Alabasterテーマのデフォルトのフォントを変えたい
- AlabasterテーマはCSSを置くだけでスタイルをカスタマイズできる
- 終わりに
SphinxのAlabasterテーマ
Sphinxは テーマ を使って出力したHTMLの見た目を変更する機能をサポートしています。
テーマというのは、HTMLのテンプレート、スタイルシート、およびその他の静的なファイル類を集めたものです。
ドキュメント変換ツールSphinxが出力するHTMLの見た目に関わるテーマ。
色々なテーマがあり、以下のサイトのようなギャラリーも存在します。
Alabasterはデフォルトと言っても過言ではないテーマです。
sphinx-quickstart
でプロジェクトを始めると、Alabasterがconf.py
のhtml_theme
3に選択されています4。
Alabasterのリポジトリを覗くと、以下のように謳っています。
Alabaster is a visually (c)lean, responsive, configurable theme for the Sphinx documentation system.
この記事でフォーカスするのはconfigurable(訳すなら「設定できる」)という点です。
ランディングページのユースケース:Alabasterテーマのデフォルトのフォントを変えたい
上のリンクを再掲するのでぜひ見ていただきたいのですが、Alabasterテーマには存在感があります。
フォントやリンクのスタイルから、ドキュメンテーションを見て「これ、Alabasterだな」とすぐに分かります。
pycampのランディングページはSphinxで作りましたが、「ひと目でAlabasterとは分からないように設定したい」という個人的なこだわりがありました。
ここでAlabasterのconfigurableが遺憾なく発揮されます!
Sphinxのconf.py
にはhtml_theme_options
という変数5があります。
選択したテーマのルックアンドフィールの設定を行うためのオプションのための辞書です。
どのようなオプションがあるかは、テーマごとに異なります。
このhtml_theme_options
(辞書を指す変数)を使って、設定値を上書きできます!
ランディングページでの設定値です8。
html_theme_options = { "font_family": "sans-serif", "link": "#4EBBE2", }
この設定で「ひと目でAlabasterとは分からない」が達成できたんじゃないかなーと感じています。
html_theme_options
でAlabasterテーマが設定できる仕組み
※隅から隅まで見たわけではないので、ソースコードを追い間違えていたら、教えていただけると嬉しいです。
デフォルト値は https://github.com/bitprophet/alabaster/blob/0.7.12/alabaster/theme.conf にあります。
font_family = Georgia, serif
html_theme_options
の設定で、デフォルト値を上書きしているようです(このあたりはSphinxのテーマの仕組みをもっと理解できると確信を持てそうです)。
デフォルト値や上書きした値を使ってCSSのテンプレート9が埋められます。
body { font-family: {{ theme_font_family }}; }
ビルドしたHTMLはこのCSSを読み込むので、(カスタマイズされた)Alabasterテーマが当たるというわけですね!
AlabasterテーマはCSSを置くだけでスタイルをカスタマイズできる
もう一つ「configurableじゃん!」と思った例をご紹介。
既存のクラスにカスタマイズしたスタイルを当てたいとき、CSSを置くだけでOKなんです!
「Custom stylesheet」セクションにあるのですが
Create a file named custom.css anywhere you prefer
custom.cssという名前でCSSを配置すればOK。
慣例により_static/custom.css
とすることが多いみたいです。
細かいことを言うと(※ドキュメントに続いています)
なのですが、CSSファイルを置くだけでスタイルをカスタマイズ可能というのは簡単すぎます!
custom.css
はビルドされたHTML一式が置かれるフォルダにコピーされますし、HTMLにも読み込むタグが追加されます。
この仕組みの存在に気づいたきっかけ
custom.css
を置いていないとき、ビルドしたファイル群の中にcustom.css
というファイルができていたんです!12
/* This file intentionally left blank. */
「コメントだけのこのファイル、設定した覚えがないけれど、いったいどこからやってきたんだろう?」と調べていくうちに、custom.css
を置いてスタイルをカスタマイズできることを発見しました!
実際、空のcustom.css
を置くと、ビルドでできたファイル群の中のcustom.css
は空になります。
終わりに
pycampランディングページ作成で知った、「デフォルトテーマのAlabasterはめっちゃconfigurableだぞおおお!」という2点を紹介しました。
html_theme_options
を使って、フォントやリンクの色など簡単に細かく変えられる!custom.css
を置くだけでAlabasterのスタイルをカスタマイズできる!
SphinxでHTMLに出力しようと思ってsphinx-quickstart
をしていたら、すでにテーマにAlabasterが選ばれています。
この記事で紹介したtipsで1人でも多くの方がAlabasterテーマのconfigurableの力を、お手元のSphinxプロジェクトで解き放っていただけたら嬉しいです。
簡単にカスタマイズして、enjoy documentation!!
- アオハルかよおおお! ↩
- Alabaster=雪花石膏。ONE PIECEのアラバスタ(Arabasta)とはちょっと綴りが違います。あれ、スター?🤩(アスタリスク好きの血が騒ぐ)↩
- テーマの設定に使う変数です。 ref: https://www.sphinx-doc.org/ja/master/usage/configuration.html#confval-html_theme↩
- https://github.com/sphinx-doc/sphinx/blob/v5.3.0/sphinx/templates/quickstart/conf.py_t#L56↩
- https://www.sphinx-doc.org/ja/master/usage/configuration.html#confval-html_theme_options↩
- https://alabaster.readthedocs.io/en/latest/customization.html#fonts↩
- https://alabaster.readthedocs.io/en/latest/customization.html#style-colors↩
- https://github.com/pyconjp/pycamp.landing_page/blob/4b57021eb2a3d1d50b6d9a924050c1545a461f39/source/conf.py#L62-L64↩
- https://github.com/bitprophet/alabaster/blob/0.7.12/alabaster/static/alabaster.css_t#L61 を例としました↩
- 元のファイル(テンプレート)が https://github.com/bitprophet/alabaster/blob/0.7.12/alabaster/static/alabaster.css_t と認識しています↩
- https://www.sphinx-doc.org/ja/master/usage/configuration.html#confval-html_static_path↩
- 元はこちらだと思います:https://github.com/bitprophet/alabaster/blob/0.7.12/alabaster/static/custom.css↩