コンテンツにスキップ

プラグインを自作してみよう

ここでは、MkDocs のプラグインを自分で作る手順を説明します。ものすごく簡単なサンプルプラグインを作って、自分のサイトに反映されるところまでを見ていきます。

プラグイン用のファイルを作ろう

MkDocs のプラグインは、Python で書きます。また、ただ書くだけではなく、パッケージ化をする必要もあります。順番に手順を見ていきます。

プラグインの本体ファイルを作ろう

まずは、プラグインの本体部分を作りましょう。次のようなファイル構成だとしましょう。

plugin
└── my_first_plugin
    └── sample.py

この sample.py に、次のように書いていきます。

from mkdocs.plugins import BasePlugin

class SamplePlugin(BasePlugin):
    def on_pre_build(self, config):
        print('Hello World!')

まず、プラグインは、mkdocs.plugins.BasePlugin クラスを継承して、サブクラスを作ります。ここでは、SamplePlugin クラスを作りました。

このクラスには、「どのタイミングで何をするか」を書いていきます。ここでは、on_pre_build 、つまり、ビルドを行う直前のタイミングで処理を行う、と指定しています。このタイミングで Hello World! と表示することにしました。

どのイベントで、どういう引数を受け取って、何を返すか、というのは、公式サイト にまとめられています。

これで、プラグインの本体の設定は一旦おしまいです。

パッケージの情報を書こう

プラグインを使うには、パッケージ化をする必要があります。そのために、次のようにファイルを2つ追加します。

plugin
├── my_first_plugin
│   ├── __init__.py
│   └── sample.py
└── setup.py

setup.py は、パッケージ化を行うための設定などを書いたファイルで、__init__.py は、このフォルダがパッケージ化に使う特殊なフォルダだよ、と示すためのもの、と考えておけばいいでしょう。

__init__.py は、空ファイルでかまいません。setup.py には、次のように書きます。

from setuptools import setup

setup(
    name='xxxxx',
    packages=['my_first_plugin'],
    entry_points={
        'mkdocs.plugins': [
            'my_plugin = my_first_plugin.sample:SamplePlugin',
        ]
    },
)

必要最低限の設定だけ行っています。name は、pip list で表示される名前です。packages は、プラグインのファイルが入っているフォルダです。これらは、Python での一般的な設定です。

entry_points では、MkDocs でプラグインを認識するための設定を記載します。mkdocs.plugins と書いた後に、

プラグイン名 = プラグインへのパス:クラス名

と書きます。上の設定では my_first_plugin.sample:SamplePlugin としていますが。これは、my_first_plugin フォルダにある、sample.py ファイルの中にある SamplePlugin クラス、を指定していることになります。プラグイン名は、mkdocs.yml で指定するときに使う名前です。

これで、パッケージ情報の設定が終了です。

プラグインの動作確認を使用

さて、では実際にプラグインを使えるように指定みましょう。

まず、setup.py のあるフォルダで、以下を実行してみましょう。

> python setup.py develop

これは、開発用にインストールする、という命令です。これを実行すれば、次のようなファイルができた、とメッセージが出てきます。人によって、場所は違うでしょう。

C:\users\user.conda\envs\mkdocs\lib\site-packages\xxxxx.egg-link

ここで、pip list を実行すると、setup.py で設定した名前が見つかるはずです。

ここの site-packages フォルダを見に行くと、pip でインストールしたものがたくさん見つかるでしょう。 mkdocs フォルダも見つかるはずです。しかし、setup.py で設定した名前のフォルダは作成されていません。

実は、これは先ほど develop をつけて setup.py を実行したからです。これをつけて実行すると、例えば sample.py 内のファイルの中身を変えた場合、すぐにこのプラグインを使っているサイトにも反映されます。

もし develop をつけずにインストールしたら、プラグインの中身を変えるたびにインストールをしなおさないといけないので、面倒です。自分でプラグインを作る場合は、開発用オプション develop をつけて実行するようにしましょう。

さて、これで、もうプラグインは使えるようになっています。mkdocs.yml ファイルで次のように設定しましょう。

plugins:
    - search
    - my_plugin

ここで設定する名前は、setup.pyentry_points 内で指定した名前です。こうして mkdocs serve を実行すれば、ターミナル上に Hello World! と表示されるはずです。また、sample.py を修正して mkdocs serve を再度実行すれば、すぐに反映されているはずです。

ちなみに、アンインストールしたい場合は、次を実行します。

> python setup.py develop -u

おわりに

ここでは、MkDocs のプラグインを作って、実際に自分のサイトに反映させる方法を見てきました。プラグインを自分で作るのは大変ですが、Python が書けるならぜひ挑戦してみましょう。