さようなら、静的サイトジェネレータ

さよなら……

ここ最近、CSSを殺した世界で生きています。長大なサイドバーやら記事リストが本文の前に表れ、スクロールバーの80%以上を占める、そんな世界です。

そんな世界に身を置いてきたせいか、記事一覧やらなんやらが全て滑稽な物に思えてくるようになりました。もはや、そんな滑稽な物をgenerateするために構築した、CI環境やらなんやらも、全てゴミにしか見えません。

という訳で、全てを捨てました。これぞ断捨離。

手元に残ったのはmarkdownで記述してきた記事。HTMLに変換するのも手間なので、そのまま公開するようにしました。markdownは「書きやすくて読みやすいプレーンテキスト」なんでね、問題無い。

デプロイの方法も単純で自由、gitやらレポジトリやらに縛られる事も無い。これが桃源郷なんですね……

でも記事一覧はやっぱり必要

ApacheにはDirectory Listingの機能があり、ファイルを最終更新日でソートできたりもする。この時点で、下手なCMSが吐き出す記事一覧よりも便利で最高。さらに、ヘッダ(HeaderName directive)やフッタ(ReadmeName directive)も設定できる。皆魅力に気づけ。

これまでの記事を再アップロードする際に、最終更新日が異常になってしまうという問題があるという方も居るかもしれません。これは、markdownファイルに記載されている(hugoに強制されていた)お陰で、スクリプトで問題解決で最の高です。

#!/bin/sh
set -ue
umask 0027
export PATH='/bin:/usr/bin'

# deps: gnu coreutils, ftp, wget

FTP_HOST=example.sakura.ne.jp
FTP_USER=example
FTP_PASS=example
DOMAIN=kamikakushi.net
printf -- '--- %s ---\nHOST: %s\nUSER: %s\nPASS: %s\n\n' \
	"${DOMAIN}" "${FTP_HOST}" "${FTP_USER}" "${FTP_PASS}"

phpscript=$(mktemp XXXXXXXX.php)
readonly phpscript
trap "rm -f ${phpscript}" EXIT INT TRAP TERM

prepare_touching () {
	printf 'if (file_exists("%s")) { touch("%s", %d, %d); }' \
		"$1" "$1" "$2" "$2" >> "${phpscript}"
}

printf '<?php\n' >> "${phpscript}"
for f in $(find -type f -name '*.md'); do
	raw_date=$(fgrep 'date:' "${f}" | cut -d: -f2- | tr -d ' ')
	[ -z "${raw_date}" ] && continue

	datetime=$(date --date "${raw_date}" --utc +%s)

	parent_dir=$(find -type d -name $(basename ${f%.md}))
	if [ -z "${parent_dir}" ]; then
		prepare_touching "${f}" ${datetime}
	else
		prepare_touching "${parent_dir}" ${datetime}
		for f in $(find "${parent_dir}" -type f); do
			prepare_touching "${f}" ${datetime}
		done
	fi
done

ftp -nvp ${FTP_HOST} <<- _EOF
	user ${FTP_USER} ${FTP_PASS}
	cd /home/${FTP_USER}/www/${DOMAIN}/
	ascii
	put ${phpscript}
	chmod 755 ${phpscript}
	bye
_EOF

wget -q -O - "http://${DOMAIN}/${phpscript}" || true

ftp -nvp ${FTP_HOST} <<- _EOF
	user ${FTP_USER} ${FTP_PASS}
	cd /home/${FTP_USER}/www/${DOMAIN}/
	delete ${phpscript}
	bye
_EOF

さくらのレンタルサーバの最安プランでは、FTPのMDTMすら対応していないようなので、phpスクリプトを力技で生成してアレをコレしてハッピーとなります。

最後に

このリニューアルで、見た目は古いわ、画面はアニメーションしないわと、UX最悪のサイトになりました。

ですが、このページを見て、ファンが唸りだす事はありません。スクロールが不自然な位置で止まる事も無いですし、画面の黒い部分には必ず情報が記されています。

また、ツールチェインの情報を追いかけたり、サイトのデプロイが成功したかどうかを気にかける必要も無くなりました。

このサイトは文章を書き捨てするための場所でしかないので、必要十分だと私は思います。

追記 (2017/09/04)

諸事情あって混沌の時代に逆戻りしました。若気の至り……