Qman's Diary

キューマン・エノビクトのブログです。
メインのサイトはこちら: キューマンのコンテンツ置き場
Twitter: @QmanEnobikto

原始的な静的サイトジェネレータを自作してみた

この記事はQiitaにも投稿していますので、よかったら見ていってください。


以前から私のブログで使っていた自作の静的サイトジェネレータっぽい何かを大改造劇的ビフォーアフターして、原始的な静的サイトジェネレータ「blogen.py」を作りました。
リポジトリはこちら: blogen.py

なぜ作った?

世の中には様々な静的サイトジェネレータが存在します。GatsbyやらHexoやら。
洗練されているそれらを使わずにわざわざ車輪の再発明みたいなことをした理由は、いくつかあります。

  • 既存静的サイトジェネレータの使い方がよくわからなかった
  • 自分でサイトのデザインをしたかった
  • 余計なファイルも生成されそうでなんか嫌だった

これを作り始めた当時の自分はあまり学習のモチベーションが高くなかったため、新しくツールを使うのが面倒くさくて嫌でした。今もそうです
結局、乏しいPythonの知識でそれっぽいものを作るところまではできてしまいました。しかし当時はJinja2などのHTMLテンプレートエンジンの存在を知らず、予め用意しておいたHTMLファイルの切れ端を合成するというよくわからないものになってしまいました。
結局Jinja2を使うように書き直したのですが、こんなガバガバな設計にしていたせいで苦労しました。知識は大事。

機能

この記事を書いた時点で、blogen.pyには以下の機能が備わっています。

  • 記事・トップページの生成機能
  • ブログディレクトリの生成機能
  • Twitterでのお知らせツイート機能

逆に今現在備わっていない(実装したい)機能は以下の通りです。

  • Markdownによる記事の執筆
  • 記事のカテゴリ分け
  • トップページの記事をn個ごとにページ分けする機能
  • いいねボタン
  • コメント欄

実装した機能は本当にこれだけです。強いて挙げるならTwitterで記事を共有するリンクが記事の下に生成される機能もありますが(実際に確かめてみてください)、JavaScriptでさらっと実装しただけなのでblogen.pyの機能ではありません。
逆に言えば、こんなに少ない機能でも最低限ブログとして成立してしまう、ということです。
これは既存ツールを使用していたら得られなかった気づきでした。

メリット

blogen.pyを作って使ってみて、静的サイトジェネレータを自作する上でのメリットをいくつか見つけました。

使い方がわかりやすい

まあこれは自作な上に超低機能なツールなので当然です。

自分でブログをデザインできる

CSSを完全に自分で書いたため、デザインはほぼ完全に自由になりました。
これは当初目指していたことの一つだったので嬉しいです。

欲しい機能を自分で実装できる

もちろん、技術力があることが大前提です。

技術力が上がる

実装の際にめちゃくちゃググるので知識がついて実装力も上がる…と思います。
少なくとも「ちょっとしたツールが欲しい」と思ったときにさっと書く、といったことは可能です。

デメリット

もちろん良い点ばかりではありませんでした。

実装が面倒くさい

あらゆる機能は自分で実装しなければいけないため、すぐに使うことができません。面倒くさいです。
まあ、それも楽しいんですけどね。

ちゃんと実装しないと破綻する

例えば、トップページに表示する記事の数を調整できるようにしないと、理論上いつか大きすぎて読み込めなくなります。
他にも、カテゴリ分けの実装をした場合、すべての記事に手を加えなければいけなくなります。記事が十数個しかない今ならまだしも、何百個になってしまえば修正作業は非常に大変になります。

まとめ

「静的サイトジェネレータ 自作」でググってみると、意外と皆静的サイトジェネレータを自作しています。自作してないのはお前だけ。
しかし皆さんちゃんと作り込んでてすごいです。blogen.pyは「自分が使えればいっか~!w」的なノリで組んだものなので…
でも楽しいですよ、静的サイトジェネレータ自作。一度やってみませんか?


ツイート