いまや巷には溢れるほどの静的サイトジェネレータがありますが、このブログは Hexo を使って書き、 GitHub Pages で公開しています。 個人的に今 Go 言語が好きなこともあって Hugo とどちらを使おうかかなり悩んだのですが、僕は(デザインセンスに自信がないので)格好いい出来合いのテーマを使いたかったので、テーマの種類が多い Hexo を選びました。
Hexo の導入自体は非常に簡単なのですが、 GitHub Pages と連携させる際のやり方が最近ちょっと変わったらしく、検索して出てきた情報がどれも古かったので、覚え書きも兼ねて書いてみます。
参考サイト
以下のサイトを参考にさせていただきました。
- 所要時間3分!? Github PagesとHEXOで爆速ブログ構築してみよう! | 株式会社LIG
- チームブログをGitHubとHexoではじめよう! | Tokyo Otaku Mode Blog
- Hexo と GitHub Pages でブログ環境を構築して公開する - Qiita
ただし注意点として、これらの記事はどれも Github Pages で公開する手順の設定情報が古いです。現在の正しい設定は下記「GitHub Pages で公開する」のセクションに書きました。
Hexo を導入する
まず Git と Node がインストールされていることが前提です。これらの導入方法については省略します。
Hexo の導入自体は公式サイトのトップページに載っている通りにコマンドを実行するだけです。が、 Hexo のリソース自体も GitHub などで管理したほうがいいので、先にリポジトリを作った上で、それをクローンしてきて、その中で Hexo の初期化を実行したほうが良いと思います。
以下は僕の例です。 skatsuta/blog-hexo という GitHub リポジトリを作った上で、以下を実行します。
1 | # Hexo をインストールする |
メッセージの通り http://localhost:4000/ にアクセスしてみて、無事にプレビューが表示されればとりあえずの構築は完了です。
ファイルの変更をブラウザに即時反映する
デフォルトでは記事を書き換えてもプレビューには即時反映されず、毎回サーバを再起動しなければなりません。 Markdown エディタで書けばだいたいの仕上がり具合はわかりますが、やはり実際に適用されるテーマとは違ってしまいます。
そこで BrowserSync を使い、プレビューへの即時反映の設定をしてみたいと思います。
まず Get started in 5 minutes の 2. に従い、 BrowserSync をインストールします。
1 | $ npm install -g browser-sync |
続いて、 hexo-browsersync プラグインをインストールします。 package.json
にも加えたいので、 --save
オプションを付けておきます。
1 | $ npm install hexo-browsersync --save |
これで導入は終わりです。再び Hexo サーバを立ち上げてから設定や記事を書き換えて保存すると、そのたびに以下のようなメッセージが出てブラウザがリロードされ、変更点がプレビューに即時に反映されるはずです。
1 | $ hexo server |
記事を書く
快適な執筆環境が整ったところで、早速記事を書いていきます。 Hexo で新しく記事を作るには以下のコマンドを実行します。たとえば Hello, World
というタイトルの記事を書く場合です。
1 | $ hexo new "Hello, World" |
生成された Markdown ファイルの中は次のようになっています。
source/_posts/Hello-World.md
1 | title: "Hello, World" |
あとは Markdown で好きなように記事を書いていきます。 BrowserSync を入れているとそのありがたみがわかりますよね?
注意点
日本語で書く場合たいていタイトルも日本語になると思うので、 hexo new "日本語タイトル"
というようにコマンド発行したいところです。しかしそうするとファイル名も日本語になってしまい、 Git での管理時にちょっと面倒なことが生じる場合が多いです。なので、ファイル名は英語で生成しておいて、 title:
部分を日本語に書き換えるほうが吉です。このあたりがちょっとした不満点ですね。
GitHub Pages で公開する
最後に GitHub Pages で公開します。
Hexo の Deployment のページにある通り、まず hexo-deployer-git プラグインをインストールします。これも package.json
に加えたいので、 --save
オプションを付けておきます。
1 | $ npm install hexo-deployer-git --save |
続いて _config.yml
の deploy
の項目に必要な設定を追記します。以下は僕の例です。
_config.yml
1 | deploy: |
GitHub Pages で公開する場合には、GitHub Pages のドキュメントにもある通り、 <username>.github.io
というリポジトリを作ります。そこにプッシュされたコンテンツが自動的に http://<username>.github.io/
で公開されるようになります。
最後に、 Hexo で以下のコマンドを使ってデプロイします。
1 | $ hexo deploy --generate |
上記のコマンドは以下と同じ意味になります。
1 | # 静的コンテンツを生成する |
実際には、デプロイの際にいったん既存の生成データをすべて削除した上で再生成したほうが良さそうなため、僕は次のようなシェルスクリプトを実行しています。 hexo clean
は生成コンテンツとキャッシュをすべて削除するコマンドです。
deploy.sh
1 |
|
以上が完了すると、 http://skatsuta.github.io/ にこのブログが公開されます。
ね、簡単でしょう?
Hexo は記事をすべて Markdown で書けるので簡単にバージョン管理ができますし、他の Markdown 対応静的サイトジェネレータに移行するのもハードルが低いです。
ちなみにこのブログのテーマには Landscape plus を少しカスタムして使っています。デフォルトで結構格好いいので気に入っています。
当分の間は Hexo をいろいろいじりながら使ってみようと思います。 Hugo がもう少し成熟したらそちらも使ってみたいですね。