nikkie-ftnextの日記

イベントレポートや読書メモを発信

SphinxでビルドしたHTMLの中のコードブロックにコピーボタンを追加するsphinx-copybutton拡張

はじめに

香織先輩 & ドラえもんさん、お誕生日おめでとうございます! nikkieです。

気になっていたSphinx拡張を試しました。

目次

sphinx-copybutton

ドキュメンテーションツールSphinxで、ビルドしたHTML中のコードブロックをボタン一発でコピー可能にする拡張です。

画像右上にご注目

使い方は、インストールして有効にするだけ

$ pip install sphinx-copybutton
# conf.py
extensions = [
    "sphinx_copybutton",
]

How easy!!🍰

設定例

自分のドキュメント1に設定した例です。

上記の画像もこちらからです。
ボタンワンクリックでコードをコピー、とっても便利に思います

実は出会っていたsphinx-copybutton

過去に自作Sphinx拡張のissue対応の中で存在を知りました。
sphinx-new-tab-linkのIssue対応をする中で存在を知った、便利そうなSphinx拡張たち - nikkie-ftnextの日記

直近読んだPython Monthly Topicsで再び出会いました。
Python製静的サイトジェネレーターSphinxでWebサイトを構築して公開 | gihyo.jp

今回試してみた次第です。

実装を少しだけ

Pythonでどうやってるんだろう」と興味を持ち、実装を見てみました🔍
結論としては、コピーボタンの実装はJavaScriptで実現していました

https://github.com/executablebooks/sphinx-copybutton/blob/v0.5.2/sphinx_copybutton/__init__.py

ビルドプロセスの中で_staticディレクトリにあるファイルがコピーされ、同時にHTMLにも書かれるので、コピーボタンが動作するという理解です

<!-- ビルドされたHTMLには追加されていました(一部だけ抜粋) -->
<script src="_static/copybutton.js?v=f281be69"></script>

終わりに

SphinxでビルドしたHTMLの中のコードブロックにコピーボタンを設けるsphinx-copybuttonを試しました。
簡単に設定できる点が素晴らしいと思います!
JavaScriptを書いてもSphinx拡張を実現できるという気づきもありました。


  1. 小さなテクニカルプラクティスのワークショップで使いました。