Compnet

仕事とか遊びとか、日々折々

2016-11-22(火)

Pelican の設定を変えてみる

Posted by Nakane, R. in technical   

ここまでは、Pelican を実行する作業場所作成するために pelican-quickstart コマンドを実行したときの設定のままで、Web サイトを作りました。 それでも問題無いのですが、テーマを変えるなどの変更をしたいこともありまし、便利なプラグインを使いたくなることもあります。 また、利用するテーマによっては、そのテーマ独自の設定を使うこともあります。 それ以外にも細かな箇所を自分好みにするために、設定を変えることもあるでしょう。

まずは、pelican-quickstart コマンドを実行しただけのときの設定がどうなっているかを見てみます。 pelican-quickstart コマンドで作られる設定は、pelicanconf.py、publishconf.py、fabfile.py、Maikefile の四つのファイルに分けて保存されています。 これらのファイルの内容は、pelican-quickstart コマンドの質問にどう答えたかに依って異なります。

Web サイトの表題や URL プレフィックス、その他、著者名や既定の言語などは pelicanconf.py と publishconf.py の二つのファイルで設定されています。 残りの fabfile.py と Makefile の二つのファイルは、pelican-quickstart コマンドの質問Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n):Y で答えたときに作成され、N で答えたときは、これらの二つのファイルは作成されません。 この fabfile.py と Makefile の二つのファイルは、Web サイト生成のときのコマンド (pelican コマンド) を簡単に実行したり、生成された Web サイトを公開するときに Web サーバーへのアップロードを簡単に実行するためのものです。

細かな内容は pelican-quickstart コマンドの質問にどう答えたかにも依って異なりますが、当サイトの pelicanconf.py と publishconf.py ファイルはこんな感じです。 まずは pelicanconf.py ファイルです。

#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals

AUTHOR = 'Nakane, R.'
SITENAME = 'Compnet'
SITEURL = ''

PATH = 'content'

TIMEZONE = 'Asia/Tokyo'

DEFAULT_LANG = 'ja'

# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None

# Blogroll
LINKS = (('Pelican', 'http://getpelican.com/'),
         ('Python.org', 'http://python.org/'),
         ('Jinja2', 'http://jinja.pocoo.org/'),
         ('You can modify those links in your config file', '#'),)

# Social widget
SOCIAL = (('You can add links in your config file', '#'),
          ('Another social link', '#'),)

DEFAULT_PAGINATION = 10

# Uncomment following line if you want document-relative URLs when developing
#RELATIVE_URLS = True

次は publishconf.py ファイルです。

#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals

# This file is only used if you use `make publish` or
# explicitly specify it as your config file.

import os
import sys
sys.path.append(os.curdir)
from pelicanconf import *

SITEURL = 'https://www.compnet.jp'
RELATIVE_URLS = False

FEED_ALL_ATOM = 'feeds/all.atom.xml'
CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'

DELETE_OUTPUT_DIRECTORY = True

# Following items are often useful when publishing

#DISQUS_SITENAME = ""
#GOOGLE_ANALYTICS = ""

拡張子からも予想できますが、pelicanconf.py と publishconf.py ファイルの一行目にあるように、どちらも Python 言語で書かれたスクリプト ファイルです。 また、内容を修正したときは文字コードが UTF-8 になるように保存してください。 もしも UTF-8 ではなく Shift-JIS や EUC-jp で保存したいときは、それぞれのファイルの 2行目に描かれている 「utf-8」を、保存するときの文字コードに合わせた「sjis」や「eucjp」に書き替えてください。 この文字コードは Python の標準エンコーディングの表を参照してください。

繰り返しになりますが、これらのファイルは Python スクリプトそのものです。 このため、設定に日本語を使うとき、例えばサイト名 (SITENAME) に日本語を使うときに、ユニコードを意味する u リテラルとして SITENAME=u"コンプネット" のようにしたくなります。 しかし、pelicanconf.py や publishconf.py ファイルには、 どちらも 3 行目に from __future__ import unicode_literals と書かれています。 これによって Python のバージョンが 2 であっても、文字列の扱いはバージョン 3 と同じになります。 つまり、u リテラルにせず SITENAME="コンプネット" と書けます。

Pelican の設定ファイルには pelicanconf.py ファイルと publishconf.py ファイルの二つがあります。 この他に fabfile.py と Maikefile ファイルがありますが、とりあえずここでは触れません。

Pelican で Web サイトを生成するための設定は、pelicanconf.py ファイルに全てを記述するのが基本です。 では publishconf.py ファイルはどのように使うかというと、評価環境と本番環境とで異なる設定にしたいときにここに記述します。 例えば評価環境と本番環境で URL が違うような場合、pelicanconf.py ファイルには SITEURL = "http://www.compnet.local と書き、publishconf.py ファイルには SITEURL = "https://www.compnet.jp と書きます。 その他にも、Google アナリティクスを使ったアクセス分析をするようなときに、publishconf.py ファイルだけに GOOGLE_ANALYTICS = "UA-********-*" と書いたりもします。 なお、Google アナリティクスで分析できるかどうかは、テーマが対応しているかどうかに依ります。 また、テーマによっては GOOGLE_ANALYTICS ではなく、別の名前かもしれません。

pelicanconf.py ファイルに THEME = "theme/voidy-bootstrap" と書けば、theme/voidy-bootstrap ディレクトリのテーマを使うようになります。 Pelican のテーマは GitHub で数多く公開されています。 同様に GitHub で公開されているプラグインを使うときは、pelicanconf.py ファイルに以下のように書きます。

PLUGIN_PATHS = ['plugins']
PLUGINS = [
    'code_include',
    'feed_summary',
    'series',
    'summary',
    'tag_cloud',
    ]

これは、plugins ディレクトリ置いた code_include、feed_summary などのプラグインを利用するという設定です。 プラグインはテーマと異なり、同時にいくつも利用できます。 また、GitHub で公開されているプラグイン以外に自作のプラグインを使うこともあります。 このため、プラグインを利用するときは、プラグインを置くディレクトリの一覧と、それらのディレクトリに置いたプラグインの一覧の組で設定します。

他にも多くの設定項目がありますが、詳しくは Pelican の公式ドキュメント を参照してください。 参考までに本サイトの現時点の設定を以下に晒しておくことにします。 セキュリティ的に不安な箇所は省略したり伏せ字にしたりしてあります。 まずは本サイトの現時点の pelicanconf.py ファイルです。

#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals

AUTHOR = 'Nakane, R.'
SITENAME = 'Compnet'
SITETAG = SITESUBTITLE = '仕事とか遊びとか、日々折々'

SITEURL = SITEURL_ABS = 'http://localhost'
RELATIVE_URLS = True

ARTICLE_URL = 'posts/{date:%Y}-{date:%m}-{date:%d}T{date:%H}{date:%M}_{slug}.html'
ARTICLE_SAVE_AS = 'posts/{date:%Y}-{date:%m}-{date:%d}T{date:%H}{date:%M}_{slug}.html'
ARTICLE_LANG_URL = 'posts/{date:%Y}-{date:%m}-{date:%d}T{date:%H}{date:%M}_{slug}-{lang}.html'
ARTICLE_LANG_SAVE_AS = 'posts/{date:%Y}-{date:%m}-{date:%d}T{date:%H}{date:%M}_{slug}-{lang}.html'
DRAFT_URL = 'drafts/{date:%Y}-{date:%m}-{date:%d}T{date:%H}{date:%M}_{slug}.html'
DRAFT_SAVE_AS = 'drafts/{date:%Y}-{date:%m}-{date:%d}T{date:%H}{date:%M}_{slug}.html'
DRAFT_LANG_URL = 'drafts/{date:%Y}-{date:%m}-{date:%d}T{date:%H}{date:%M}_{slug}-{lang}.html'
DRAFT_LANG_SAVE_AS  = 'drafts/{date:%Y}-{date:%m}-{date:%d}T{date:%H}{date:%M}_{slug}-{lang}.html'

PATH = 'content'
THEME = 'theme/voidy-bootstrap'
STYLESHEET_FILES = (
    'voidybootstrap.css',
    'addition/pygment.css',
    'addition/style.css',
    'addition/image.css',
    'addition/admonition.css',
    )

PAGE_EXCLUDES = ['pages/pelican',]

FILENAME_METADATA = r'(?P<date>\d{4}-\d{1,2}-\d{1,2}(?:T\d{1,2}(?::?\d{1,2})?)?)_(?:\d+_)?(?P<slug>.*)'
DEFAULT_METADATA = {
    'status': 'draft',
    }

USE_FOLDER_AS_CATEGORY = True
DEFAULT_CATEGORY = 'misc'

STATIC_PATHS = (
    'images',
    'css/pygment.css',
    'css/admonition.css',
    )
STATIC_EXCLUDES = ['images/bank']
EXTRA_PATH_METADATA = {
    'css/pygment.css': {
        'path': 'theme/css/addition/pygment.css',
        },
    'css/admonition.css': {
        'path': 'theme/css/addition/admonition.css',
        },
    }

TIMEZONE = 'Asia/Tokyo'
DATE_FORMATS = {
    'en': '%a, %d %b %Y',
    'ja': '%Y-%m-%d(%a)',
}
DEFAULT_LANG = 'ja'

# Plugins
PLUGIN_PATHS = ['plugins']
PLUGINS = [
    'code_include',
    'feed_summary',
    'series',
    'summary',
    'tag_cloud',
    ]

# Feed generation is usually not desired when developing
FEED_MAX_ITEMS = 7
FEED_USE_SUMMARY = True
FEED_ALL_ATOM = 'feeds/all.atom.xml'
FEED_ALL_RSS  = 'feeds/all.rss.rdf'
CATEGORY_FEED_ATOM    = CATEGORY_FEED_RSS    = None
TAG_FEED_ATOM         = TAG_FEED_RSS         = None
AUTHOR_FEED_ATOM      = AUTHOR_FEED_RSS      = None
TRANSLATION_FEED_ATOM = TRANSLATION_FEED_RSS = None

DEFAULT_PAGINATION = 5

# Default sidebar template. Omit this setting for single column mode without sidebar.
SIDEBAR = "sidebar.html"
SIDEBAR_SIZE = 2

SOCIAL_SHARE_BUTTONS = (
    'hatebu',
    'twitter',
    'facebook',
    'line',
    'pocket',
    'googleplus',
    )

CUSTOM_ARTICLE_HEADERS = (
    'addition/article-pager.html',
    'article_header.html',
    'addition/social-tools.html',
    )
CUSTOM_ARTICLE_FOOTERS = (
    'addition/social-tools.html',
    'addition/article-pager.html',
    )

CUSTOM_CONTAINER_TOP_INDEX    = CUSTOM_CONTAINER_BOTTOM_INDEX   = 'addition/google-adsense.html'
CUSTOM_CONTAINER_TOP_ARTICLE  = CUSTOM_CONTAINER_BOTTOM_ARTICLE  = 'addition/google-adsense.html'
CUSTOM_CONTAINER_TOP_PAGE     = CUSTOM_CONTAINER_BOTTOM_PAGE     = 'addition/google-adsense.html'
CUSTOM_CONTAINER_TOP_CATEGORY = CUSTOM_CONTAINER_BOTTOM_CATEGORY = 'addition/google-adsense.html'
CUSTOM_CONTAINER_TOP_TAG      = CUSTOM_CONTAINER_BOTTOM_TAG      = 'addition/google-adsense.html'
CUSTOM_CONTAINER_TOP_AUTHOR   = CUSTOM_CONTAINER_BOTTOM_AUTHOR   = 'addition/google-adsense.html'
CUSTOM_CONTAINER_TOP_ARCHIVES = CUSTOM_CONTAINER_BOTTOM_ARCHIVES = 'addition/google-adsense.html'

CUSTOM_SIDEBAR_BOTTOM = 'addition/to-oldsite-and-amazon-associate.html'

CUSTOM_FOOTER = 'addition/footer.html'
SKIP_COLOPHON = True

次に、本サイトの現時点の publishconf.py ファイルです。

#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals

# This file is only used if you use `make publish` or
# explicitly specify it as your config file.

import os
import sys
sys.path.append(os.curdir)
from pelicanconf import *

SITEURL = SITEURL_ABS = 'https://www.compnet.jp'
RELATIVE_URLS = True

DELETE_OUTPUT_DIRECTORY = True

# Plugins

PLUGINS += [
    'touch',
    ]

# Following items are often useful when publishing

DISQUS_SITENAME = "********"
GOOGLE_ANALYTICS = "UA-********-*"
GOOGLE_ANALYTICS_SITEID = "auto"
OPEN_GRAPH = TWITTER_CARD = True
TWITTER_USERNAME = "********"

GOOGLE_ADSENSE_CLIENT = "ca-pub-****************"
GOOGLE_ADSENSE_SLOT = "**********"
AMAZON_ASSOCIATE_TRACKING_ID = '********'

なお、publishconf.py ファイルを利用して評価環境と本番環境で設定を変えたときは、pelican コマンドで生成される Web サイトは評価環境のものになります。 本番環境として生成したいときは、pelican -s publishconf.py コマンドを使います。

Comments