Pelican+GitHub Pagesでブログ引っ越し

これまでFC2ブログにお世話になってきたが、

  • 技術系なネタが多いため、ソースコード等が書きやすいとうれしい
  • 自在なレイアウトができるとうれしい

などの理由からGitHub Pagesを使うことにした。 あんまり書かないかもしれないけど・・・。

ともあれ、Pelicanを使ってこのブログを構築したので、そのときのメモ。

Pelicanを使ったブログ構築作業

概要

このブログはPelicanを使って静的ページを構成している。 生成に使用したソースを公開するのは気が引けるので、生成したhtmlファイル群だけを公開することとした。 このためにちょっと特殊な使い方をしている。

前提

pythonやvirtualenv、makeなどは導入されているものとする。

構築

  1. ローカルマシンにpelican用の環境を構築。

    • 適当なディレクトリを作成。

      mkdir ~/blog
      cd !$
      
    • virtualenv環境でpelicanを導入。Markdownを使いたいので、Markdownも導入しておく。

      virtualenv --system-site-packages ./
      source bin/activate
      pip install pelican
      pip install Markdown
      
    • .gitignoreファイルを作成しておく。なお、.DS_Storeなどはグローバルに無視する設定をしているので除外してある。

      .Python
      bin/
      include/
      lib/
      man/
      local/
      output/
      pip-selfcheck.json
      cache/
      *.pyc
      
    • pelican-quickstartを実行して各種設定を施す。

      • 2015/04/27追記: 自分の場合はpelicanconf.pySITEURLがうまく設定できていなかった。この設定ができていないとCSSのURLがまずいことになり、うまく動かない場合がある。
    • ここでいったんcommitしておくと幸せになれるかも。
    • gitレポジトリを作成。git statusして出てきたファイルを追加してcommit。
      git init .
      git status
      git add Makefile .gitignore develop_server.sh ...
      git commit -m "Initial commit with pelican files."
      
  2. htmlファイル群の出力先であるoutputディレクトリが消えないようにする。

    • publishconf.pyを修正

      diff --git a/publishconf.py b/publishconf.py
      index 98162b2..dfb1731 100644
      --- a/publishconf.py
      +++ b/publishconf.py
      @@ -16,7 +16,7 @@ RELATIVE_URLS = False
       FEED_ALL_ATOM = 'feeds/all.atom.xml'
       CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'
      
      -DELETE_OUTPUT_DIRECTORY = True
      +DELETE_OUTPUT_DIRECTORY = False
      
       # Following items are often useful when publishing
      
    • Makefileも修正しておく。make cleanすると消えてしまうので。

      diff --git a/Makefile b/Makefile
      index dc640c3..35df450 100644
      --- a/Makefile
      +++ b/Makefile
      @@ -58,7 +58,7 @@ html:
              $(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
      
       clean:
      -   [ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
      +   [ ! -d $(OUTPUTDIR) ] || echo rm -rf $(OUTPUTDIR)
      
       regenerate:
              $(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
      
  3. ここで再びgit add & git commit。

  4. そのままのMarkdownではGitHubに慣れている人にはツライので、各種のライブラリ(?)を導入。

    • mdx_linkfyとmdx_del_insを導入。

      pip install mdx_linkify
      pip install mdx_del_ins
      
    • pelicanconf.pyに以下を追加する。

      MD_EXTENSIONS = ['del_ins', 'fenced_code', 'codehilite(css_class=highlight)', 'tables']
      

試しに記事を書いてみる

  1. 記事はcontentの下に配置する。

    • 管理を単純にするため、投稿日をファイル名とすることにした。

      touch content `date +%Y%m%d`.md
      open !$
      
    • 先頭に各種情報を書いておく。

      Title: Pelican+GitHub Pagesでブログ引っ越し
      Date: 2015-04-26 18:00
      Category: カテゴリ
      Tags: info, blog, python, pelican, github
      Slug: pelican-blog-github  ←permanent link。「この名前+html」ファイルが生成される。
      Author: pman0214
      Summary: この記事の要約。
      
  2. htmlファイル群を生成して表示してみる。

    • htmlファイル群を生成。

      make html
      
    • localでWebサーバを起動。

      make serve
      
    • あとはブラウザでhttp://localhost:8000を表示すればOK。

テーマの変更

デフォルトはブログっぽくないので変更する。

  1. テーマを検討する。Pelican Themesで確認できる。
  2. テーマ用レポジトリを取得する。

    • テーマのレポジトリをsubmoduleとして追加する。

      git submodule add git@github.com:getpelican/pelican-themes.git themes
      
    • 先ほどのテーマのディレクトリがsubmoduleであれば、それを取得する。この記事執筆時点ではblue-penguinを選択した。

      cd themes
      git submodule init blue-penguin
      git submodule update blue-penguin
      
  3. pelicanconf.pyに以下のように設定する。

    THEME = "pelican-themes/blue-penguin"
    
    • 2015/04/27追記: 間違ってます。正しくはこうです。
      THEME = "themes/blue-penguin"
      

公開用レポジトリの設定

  1. GitHubにblogという名前のレポジトリを作成。ここに公開用のhtmlファイル群をpushする。自分はhttps://github.com/pman0214/blogを作成した。
  2. outputの下をレポジトリにしてしまえばOK。ただし、レポジトリのGitHub Pageを使うため、gh-pagesブランチにcommit & pushする必要がある。

    • outputディレクトリをgitレポジトリにする。

      cd output
      git init ./
      
    • gh-pagesブランチに切り替え。

      git checkout -b gh-pages
      
    • 全ファイルをadd、そしてcommit。

      git add *
      git commit -m "Article `date +%Y%m%d`."
      
    • GitHubにpushできるようにする。自分の場合はこんな感じ。

      git remote add origin git@github.com:pman0214/blog.git
      git push origin gh-pages
      
  3. 公開されたページを確認する。

参考ページ