Hexoで静的サイトを生成する
静的サイトはデータをそのまま配信するため,セキュリティと速度に優れます.
静的サイトジェネレータは記事となるファイルから静的サイトを生成するソフトウェアです.
多くのジェネレータは,執筆が簡単かつ記事の再利用が容易であるという特長があるMarkdown形式で執筆された記事からサイトを生成することができます.
このページでは,静的サイトジェネレータの1つであるHexoについて説明します.
目次
インストール
macOS 11の場合
Macでターミナルを開き,パッケージマネージャーのHomebrewを用意します.
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
Homebrewを用いて,Node.jsとgitをインストールします.
brew install nodebrew |
以上の準備ができたら,Hexoをインストールします.
npm install -g hexo-cli |
CentOS 8の場合
Node.jsとgitをインストールします.
dnf install nodejs |
準備ができたら,Hexoをインストールします.
npm install -g hexo-cli |
CentOS 7の場合
Node.jsとgitをインストールします.
yum -y remove npm |
準備ができたら,Hexoをインストールします.
npm install -g hexo-cli |
ブログ作成
hexo
コマンドのinit
サブコマンドでブログを作ることができます.
hexo init "ブログ名" |
ブログを作成したら,このディレクトリに入って初期化してください.
cd "ブログ名" |
設定
設定ファイル
ディレクトリ内にある_config.yml
で各種設定を行えます.
各テーマ内にも_config.yml
があり,テーマごとの設定ができます.
生成時に.htaccessを含める
Hexoのブログのsource
フォルダに.htaccess
を置いていても,そのままではpublic
フォルダに生成されません.
そこで,_config.yml
のinclude
に次を書き足します.
include: |
記事作成
新規作成
固定ページ作成は
hexo new page "filename" |
で行います.
記事投稿は
hexo new post "filename" |
で行います.
固定ページはsource/
直下,記事はsource/_posts/
以下に作られます.
フロントマター
各記事ではフロントマター(YAMLヘッダ)においてタイトル等の情報を入れます.
|
上から順に ,以下の意味です.
- タイトル
- 作成日
- 更新日
- カテゴリー
- タグ
- 抜粋
テーマやプラグインによっては固有の項目を持つ場合もあります.
また,通常必須なのはタイトルと作成日のみです.
WordPressからHexoに記事を移行する場合
- WordPressの管理メニューにあるツールで記事をエクスポートします.(XMLファイルが手に入る.)
- ブログをカレントディレクトリにして,hexo-migrator-wordpressプラグインをインストールします.
npm install hexo-migrator-wordpress --save |
hexo migrate wordpress XMLファイルのパス |
ブログの生成
ブログ全体のフォルダをカレントディレクトリにした状態で,過去に生成したブログ(既存のpublicディレクトリ)を消すために,
hexo clean |
して,生成するために,
hexo g |
します.
デプロイも一緒に行うならhexo g -d
とします.
デプロイの挙動は「ディレクトリごと上書きする」です.
PCであれば,
hexo s |
とすることでローカルサーバーを立ち上げることができるので,ブラウザでブログの様子をすぐ確認できます.
終了はctrl + c
です.
デプロイ
SFTP
SFTPでデプロイするには,hexo-deployer-sftpが必要です.
このため,ブログのディレクトリで,
npm install hexo-deployer-sftp --save |
としてインストールします.
_config.yml
には次を追記します.
deploy: |
各項目は適宜設定してください.
設定が終われば,次の通常のデプロイのコマンド
hexo deploy |
で,SFTPによるデプロイができるようになります.
自サーバー
自サーバー内で出力する場合には,上のような設定は必要ありません.
_config.yml
の出力先フォルダpublic
を出力先の絶対パスにすることによりhexo deploy
コマンドで直接デプロイすることができます.
この場合にも,hexo clean
はhexo deploy
の出力先と同じ場所からサイトを削除します.
GitHub + Netlify
Netlifyでサイトを公開するにはまず,NetlifyからGitHub上にあるプロジェクトのリポジトリを選択します.
git push
されたとき自動でビルド・デプロイされるようになるが,そのビルドコマンドとしてはhexo generate
を指定し,サイト出力先フォルダは(_config.yml
で変更していない限り)public/
とします.
独自ドメインからサブドメインを利用したい場合,まずDomain Management > Custom Domains > Add domain aliasと進み,独自ドメインにおいて利用したいサブドメインを登録します.
そして,DNSサーバーにて,対象のサブドメインのCNAME
で値をNetlifyのサブドメインに設定します.
テーマ
Tranquilpeak
Tranquilpeakはサイドバー付きのレスポンシブ対応テーマです.
次のmarkdownファイルを作ると,それから生成されるhtmlがカテゴリー別の記事一覧となります.
|
同様にして,layout: "all-tags"
とすればタグ別の記事一覧,layout: "all-archives"
とすることでアーカイブページを作成できます.
記事で<!-- toc -->
と書いておくと,そこに目次を作ってくれます.
テーマのコンフィグファイルはテーマのディレクトリにある_config.yml
と,日本語設定に関するlanguages/ja.yml
の2つです.
記事作成時刻だけでなく更新時刻も表示したい場合は,テーマ内のlayout/_partial/post/meta.ejs
を加工します.
<time datetime= 中略 |
記事中では文章の強調に特殊なタグを用いることができます。
例えば、囲み文字の強調スタイルを使うなら、
{% alert danger %} |
とします.
info
・success
・warning
・danger
を使用可能です.
テキストにマーカーをつけるには
{% hl_text danger %} |
とします.
primary
・success
・warning
・danger
やいくつかの色名(例えば,green
)を使用可能です.
Book
Bookテーマを使用すると,本のようなデザインになります.
_post
ディレクトリにhome.md
とmenu.md
を入れてブログを生成します.
home.md
はindex.html
になり,menu.md
は左カラムになります.
テーマのコンフィグで指定すれば,home.md
やmenu.md
以外のファイル名も使用可能です.
menu.md
では,#
奇数個で始めた表示ありの見出し,偶数個の折り畳み見出し,*
等の箇条書きによって項目を列挙します.
たとえば,
# 大見出し1 |
です。
なお、右カラムには各記事ページの目次が自動生成されます。
メタディスクリプションを使用するため、テーマbook/layout/_partial/head.ejs
で、以下を追加します。
<% if (page.excerpt) { %> |
これにより,投稿記事のフロントマターでexcerpt
によって記述した内容がメタディスクリプションとなります.
プラグイン
サイトマップ生成
hexo-generator-sitemapでサイトマップを作ることができます.
プラグインのインストールは次で行います.
npm install hexo-generator-sitemap --save |
_config.yml
には次を加えます.
sitemap: |
上から順に,
- 出力されるサイトマップのファイルパス
- カスタムテンプレートの在処
- ヘッダーにrel-sitemapを含めるかどうか
- タグを含めるかどうか
- カテゴリーを含めるかどうか
です.
また,上述のリストはデフォルトの値の通りです.
特定の記事をサイトマップから除外したい場合,個別の記事のフロントマターに以下を加えます.
sitemap: false |
カテゴリーの自動分類
Hexoのカテゴリーを毎回書かなくても済むようにするために,ディレクトリによってカテゴリーが決まるプラグインhexo-directory-categoryをインストールするには,自分のブログのフォルダで
npm install --save hexo-directory-category |
とします.
_config.yml
には次を追記します.
auto_dir_categorize: |
forceオプションがtrue
なら,各記事でフロントマターに書かれている既存のカテゴリーを無視して,フォルダに従ってカテゴリーを付け直します.
hexo-auto-categoryというプラグインが記事原本のフロントマターを書き直してしまうのに対し,hexo-directory-categoryは生成されるファイルのみが書き換えられる点が優れています.
記法の拡張
hexo-renderer-markdown-itを使い,markdown-itによる記法拡張を行うことができます.
既存のレンダラーをアンインストールして,hexo-renderer-markdown-itをインストールするには,
npm un hexo-renderer-marked --save |
とします.
次は,github上のドキュメントに書かれた_config.yml
に書く内容の例です.
# Markdown-it config |
例えば,markdown-it-supとmarkdown-it-subプラグインは添字を有効にします.
テキスト^上付き添字^ |
markdown-it-footnoteプラグインは脚注を有効にします.
ただのテキスト[^ラベル] |
markdown-it-deflistプラグインは定義リストを有効にします.
専門用語 |
記事を隠す
古くなった記事を非表示かつnoindexするには,hexo-hide-postsプラグインを使用します.
インストールは
npm install hexo-hide-posts --save |
で行えます.
記事のフロントマターにhidden: true
を加えると,そのページにプラグインが適用されます.
プラグインが適用されると,カテゴリー,タグ,アーカイブ,サイトマップなどからページが隠され,デフォルトではnoindexメタタグも埋め込まれます.
ただし,ページのURLを直打ちすればアクセスすることができます.
_config.yml
の諸設定は以下のとおりです.
# hexo-hide-posts |
ブログ内でhexo hidden:list
とコマンドを打つと,隠した記事の一覧を取得することができます.