はじめに
「みんな、ウタだよ!」、nikkieです。
先日、愛用しているsphinx.ext.githubpages
を紹介しました。
今回はsphinx-revealjs
とsphinx.ext.githubpages
の組合せについて紹介します。
目次
- はじめに
- 目次
- 本記事の立ち位置
- 結論:sphinx.ext.githubpagesも使ったsphinx-revealjs製スライドのデプロイ
- 仕組み:sphinx.ext.githubpagesはなぜsphinx-revealjsでも動くのか?
- 終わりに
本記事の立ち位置
ここでアウトプットするネタは以下のツイートの詳細版です。
#pyconjp スプリントプチ成果!@attakei さんによるsphinx-revealjsで作ったスライドをGitHub Pagesとして公開するときに置きたい .nojekyll 、
— nikkie にっきー 🎤10/1 XP祭り 10/14-15 PyCon JP (@ftnext) 2022年10月16日
これはtouchしなくてもsphinx.ext.githubpagesを有効にするだけで自動で作られることがわかりました(自作しないで済んだ🙌)https://t.co/e9X3JhtNMZ
また、この記事自体は、以下の記事のアップデート版となります。
sphinx.ext.githubpages
を使うと何ができて嬉しいのかは、冒頭で示した先日のアウトプットを参照ください。
結論:sphinx.ext.githubpages
も使ったsphinx-revealjs製スライドのデプロイ
Sphinxプロジェクトのconf.py
のextensions
は以下のようになります。
extensions = [ "sphinx_revealjs", "sphinx.ext.githubpages", ]
この設定でmake revealjs
すると.nojekyll
が作られます🙌
私は、GitHub Pages用のブランチにスライドのHTML一式をpushするGitHub Actionを使っています。
仕組み:sphinx.ext.githubpages
はなぜsphinx-revealjs
でも動くのか?
sphinx.ext.githubpages
の実装
https://github.com/sphinx-doc/sphinx/blob/v5.3.0/sphinx/ext/githubpages.py#L13-L14
if app.builder.format == 'html': open(os.path.join(app.builder.outdir, '.nojekyll'), 'wb').close()
sphinx.ext.githubpages
はビルダーのformat
が"html"
のときに処理をするように実装されています。
Sphinxのビルダー
以下のドキュメントに一覧になっています:
例として、一番上にあるStandaloneHTMLBuilder
を見てみましょう。
name
属性がビルダーの名前です。
name = 'html'
ビルドコマンドmake html
はsphinx-build
コマンドをラップしていると理解していますが、これはname
属性が"html"
のStandaloneHTMLBuilder
を指定しているのですね!
format
属性はビルダーのアウトプット形式です。
format = 'html'
ここからsphinx.ext.githubpages
はビルダーのアウトプット形式がHTMLのときに処理をすると分かります。
sphinx-revealjs
のビルダー
では、sphinx-revealjs
のビルダーはどうなっているのでしょうか?
実装を見てみましょう。
https://github.com/attakei/sphinx-revealjs/blob/v2.4.1/sphinx_revealjs/builders.py#L23
class RevealjsHTMLBuilder(StandaloneHTMLBuilder):
RevealjsHTMLBuilder
は(上で見た)StandaloneHTMLBuilder
を継承しています!
format
属性を変更するコードは見つからないので、ベースクラスのStandaloneHTMLBuilder
と同様にformat
属性は"html"
ですね。
つまり、ビルダーのアウトプット形式がHTMLなので、sphinx.ext.githubpages
は処理をします!
これが「sphinx.ext.githubpages
はなぜsphinx-revealjs
でも動くのか?」の答えです。
また、RevealjsHTMLBuilder
はname
属性の値が"revealjs"
ですね。
この実装によりmake revealjs
コマンドが動くわけですね。
終わりに
sphinx-revealjs
とsphinx.ext.githubpages
を組合せて使えることを紹介しました。
conf.py
でsphinx.ext.githubpages
を有効にするだけで、.nojekyll
が作られます!(sphinx-revealjsを使っているなら依存するSphinxはインストール済みで、sphinx.ext.githubpages
はSphinxにバッテリーインクルードされています!)
「いいな🤗」と思った方は、ぜひお手元のsphinx-revealjs
プロジェクトで試してみてください。
今回はビルダーのドキュメントと合わせて実装を部分的に見に行ってみました。
その中で分かったことの1つですが、make html
やmake revealjs
と渡す引数はビルダーの名なのですね。
小さな秘密が一つ明かされましたー