静的サイトジェネレータ Hexo で生成したブログを github pages で公開するまでの手順のメモ

はじめに 見出しへのリンク

.md.py といったテキストファイルから、静的なドキュメントやブログ(つまり html/css/js)を生成するツールを 静的サイトジェネレータ (static site generator; SSG) と呼びます。SSG を使うと、例えば、markdown でブログを書くことが出来て、しかもそのソースコードをバージョン管理できます。 世の中にはたくさんの SSG があり、次のようなページで簡潔にまとめられています。

この記事では、Hexo と呼ばれる Javascript 製の SSG について注目します。 Hexo の一般的な使い方は次のようなサイト等にまとめられていますが、ここで自分の使いやすい環境を構築することに専念して、その手順を完結に示したいと思います。

インストール 見出しへのリンク

本体 見出しへのリンク

npm install hexo-cli -g

# cd working-dirctory
hexo init <blog-name>

設定 _config.yml の大まかな設定方法

title: タイトル
slug: hexo-blog
subtitle: サブタイトル
description: ブログの説明
keywords:
  - キーワード1
  - キーワード2
author: OpenJNY
language: ja
timezone: Asia/Tokyo

url: https://openjny.github.io/
root: /
permalink: :year/:month/:day/:title/
permalink_defaults:

new_post_name: :year-:month-:day-:title.md # File name of new posts
default_layout: post
titlecase: true # Transform title into titlecase
filename_case: 1 # lower-case
external_link: true # Open external links in new tab
render_drafts: false
post_asset_folder: false
relative_link: false
future: true

レンダリング 見出しへのリンク

数式や GHF な md を書くために render エンジンを pandoc へ変更する。

npm uninstall hexo-renderer-marked
npm i hexo-renderer-pandoc --save

katex で数式をレンダリングするために hexo-katex-macros を導入する。

npm i hexo-katex-macros --save

そのままでも使えるが、マクロを設定したければ、ソースコードを管理してるリポジトリにサンプルがあるのでそれを参考にしながら _config.yml に記述。1

# _config.yml
katex:
  macros:
    "\\set": "\\left\\{ #1 \\right\\}"

デプロイ 見出しへのリンク

サイトの生成からデプロイまでを自動化する為に hexo-deployer-git を追加する。 使い方は hexo deploy g みたいな感じ。

npm i hexo-deployer-git --save

設定は _config.yml を次のようにする。

deploy:
  type: git
  repo: git@github.com:OpenJNY/openjny.github.io.git
  branch: master
  message: "[update] Site updated: {{ now('YYYY-MM-DD HH:mm:ss') }}"

なお、gh-pages 以外のホスティングサービスを使うときは、それに応じて適当なものインストールするか、CI/CD 機能を使ってデプロイを行うと良い。

テーマ 見出しへのリンク

hexo-theme-next という名前の素晴らしいテーマがあるので、それをフォークしたものを使う。 自分用にカスタマイズした設定をフォーク先のレポジトリで管理することで、複数のブログを作るときに使いやすくする狙いがある。 ちなみにこれがそう。

こいつを themes に配置する。

git submodule add git@github.com:OpenJNY/hexo-theme-next.git themes/next

その他 見出しへのリンク

VS Code による執筆 見出しへのリンク

vs code には hexo の記事を書くときに色々嬉しいことがあります。 markdown の preview だとか textlint だとかは、割とどのエディタでも使えるものですが、特に vs code ならではの利点は Paste Image。

Paste Image は画像を扱う vs code のプラグインで、こいつはかなりの優れもの。 クリップボードにコピーされている画像を markdown に埋め込みつつ、いい感じに実体化してくれます。

例えば、.vscode/settings.json を次のように設定すれば、source/images/{article-name}/{datetime}.png として自動的に実体化し、そのパスを makrdown に埋め込んでくれる。

"pasteImage.defaultName": "Y-MM-DD-HH-mm-ss",
"pasteImage.insertPattern": "![](${imageFilePath})",
"pasteImage.path": "${projectRoot}/source/images/${currentFileNameWithoutExt}",
"pasteImage.basePath": "${projectRoot}/source",
"pasteImage.forceUnixStyleSeparator": true,
"pasteImage.prefix": "/"

普段でもかなり重宝しているので、hexo に関係なくインストールすることをオススメしたい。

Git によるソースコード管理 見出しへのリンク

この手順で作成したブログを GitHub で公開してます。

src ブランチでソースコードを管理し、master に生成した html たちを配置して公開する運用をとっています。 「その他」までで示した手順を踏んだ後、次のようなことをすれば、同じような結果になると思います。

git init
git commit -a -m ":tada: initial commit"
git remote add origin awesome-repository
git push -u origin master:src
hexo deploy

このような環境では、新たな記事が次のような流れで執筆できます。

# create a new post
hexo new post "Awesome article"

# edit it
code $(find source/_posts -maxdepth 1 -type f -print0 | xargs -0 ls -drt | tail -n 1)

# deploy and backup
git commit -am "perfect commit"
git push origin HEAD:src # or simply $ git push
hexo clean && hexo deploy

また、新しいPC等で再度環境を整えるには、次の手順を踏むだけでOKです。

git clone --recurse-submodules -b src git@github.com:OpenJNY/openjny.github.io.git blog
cd blog
npm install

何かの参考になれば幸いです。