静的サイトジェネレーターを自作してブログ作成システムを作成
この度新規に技術ブログを作成しようと思い、静的サイトジェネレーター(static site generator)をいろいろと調べていました。
JekyllやHugoなど、魅力的なものはあったのですが、この際勉強を兼ねて静的サイトジェネレーターを自作しました。
このブログも今回自作したシステムで作成しています。(amp html
にも対応しています。)
以下、gulp
で静的サイトジェネレーターを自作したときの作業メモです。
ブログに必要な機能
作成するにあたって、ブログに必要な機能を洗い出しました。
ウィジェット
最新記事、関連記事など、ブログのメインの記事以外の、サイドバーなどに表示される全ページ共通の機能です。
ブログパーツやガジェットなどと呼ぶこともありますが、ここではウィジェットと呼ぶことにします。
このブログを見ていただけるとわかるように、以下のウィジェットを実装しました。
- 最新記事
- カテゴリー一覧
- 関連記事
- 古い記事、新しい記事
カテゴリーは記事の大分類となる項目で、1記事に1つのみ指定可能としました。
動的に生成するページ
記事のページやトップページなどは自分で作成した分だけ生成すれば良いのですが、カテゴリー一覧はページ制御を考慮すると、記事の数に応じて動的に生成する必要があります。
以下のページを動的生成するページとしました。
- カテゴリー一覧
- 記事に設定されたカテゴリーの数生成
- 同一カテゴリーで10件以上ある場合はページ制御をして、2ページ目、3ページ目...と生成する
- サイトマップ(xml)
- rss(xml)
実装方法
ブログ作成に必要な機能が洗い出せたので、実装方法を考えます。
nodejs
npm
を使用gulp
でコンパイルなどのタスク管理babel
を使ってES2015で実装
- 記事は
markdown
で記述title
description
などファイルごとの設定はfront-matter
を使用front-matter
の情報をjson
ファイルでまとめて管理
- ウィジェットや
html
ファイル作成のテンプレートエンジンはnunjucks
を使用 - cssは拡張言語の
less
で実装 amp html
に対応するためJavaScriptは未使用
記事の情報はjson
ファイルにまとめてデータベースのように管理すると、最新記事や関連記事などの実装がとても簡単になります。