長年個人サイトを放置してて、昔のブログ記事もあちこちのサービスに散らばってたので、全部ここに集めることにしました。
いろんな静的サイトジェネレーターを転々とした末、HugoとNightfallテーマをカスタマイズして使うことに落ち着きました。革新的なことは何もしてないけど、ちょっとした遊び心と個人的なタッチを加えてみました。
追加した楽しい機能
コナミコマンドのイースターエッグ
どのページでも ↑↑↓↓←→←→BA を押してみてください(めんどくさい人はCtrl+Shift+TでもOK)。レトロなターミナルモードが起動しますよ〜:
- マトリックス風の緑文字に黒背景(グロー効果付き)
 - CRTスキャンライン効果で懐かしい感じに
 - ページタイトルをタイプライター風に表示
 - トースト通知でメッセージ表示
 - 開発者ツールを開くとコンソールにASCIIアート
 
実装はJavaScriptでステートマシンを作ってretro-modeクラスをトグルしてるだけ。レトロモードのスタイルは専用のSCSSファイルに分離して、スキャンラインとグロー効果はCSSアニメーションで実現してます。
カスタム404ページ
404ページをターミナル風にしてみました:
- アクセスしようとしたパスを
lsコマンド風に表示 - 
whoamiで「lost_user」を返すとか小ネタ満載 - 「システム診断」セクションでエラー分析っぽく
 - エラーテキストにグリッチ効果
 - ナビゲーションボタンで迷子救済
 
ページソースにASCIIアート
ソース表示するとASCIIアートとビルド情報が見えます。
Hugoのparamsでカスタムアートも設定可能。
コメントにイースターエッグも仕込んでます。地味に気に入ってる機能。
言語切り替えスイッチ(国旗付き)
ちゃんとした言語切り替えを実装:
- 国旗アイコン使用(絵文字じゃなくてSVGで統一感)
 - 言語切り替えても同じページを維持
 - アクティブな言語をハイライト
 - Hugoのi18nシステムと連携
 
flag-iconsの美しいSVG国旗に感謝!
シリーズナビゲーション
連載記事用のナビゲーションパーシャル追加:
- 同じシリーズの全記事を表示
 - 現在の記事には「(current)」ラベル
 - テーマカラーでスタイリング
 
ターミナル風アニメーション
ホームページの挨拶に点滅カーソル効果、ナビゲーションにアクティブページインジケーター。小さな演出だけど雰囲気出るよね。
タイポグラフィシステム改造
テーマのデフォルトじゃ物足りなかったので:
- Source Sans 3で可変フォントウェイト(200-900)
 - 言語別フォントスタック(フォールバック付き)
 - グローバルフォントスムージング
 - h2/h3にビジュアルマーカー追加
 
技術的なメモ
CSPヘッダーがイマイチ
コメントシステム動かすためにContent Security Policyが適当になってる:
<meta
  http-equiv="Content-Security-Policy"
  content="default-src 'self'; script-src 'self' 'unsafe-inline' https://cusdis.com"
/>
'unsafe-inline'使ってるのセキュリティ的にアレだよね。そのうち直さないと。
ちょっと便利だったパターン
ナビゲーションのアクティブ状態、多言語パスのせいでJavaScriptが必要になった。まあ現在のURLチェックしてクラス追加するだけの簡単なやつ。
日本語フォントスタックの使い回しにCSSカスタムプロパティが便利:
[lang="ja"] {
  --ja-font-stack: "M PLUS Rounded 1c", "M PLUS 1p", "Noto Sans JP", sans-serif;
  header,
  nav,
  h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    font-family: var(--ja-font-stack) !important;
  }
}
HugoのSCSSコンパイルは何も設定いらなくて楽。webpackとか要らないの最高。
日本語コンテンツでわかったこと:
- 
removePathAccentsはラテン文字のみ対応 - CJK URLには明示的なslugが必要
 - フォントごとにline-height調整が必要
 - 日本語のウェイト300は英語と全然違って見える
 
投稿ナビゲーションの配置には:has()セレクタが便利だった。JavaScript要らずで済む。
セットアップ
よくあるCI/CDパイプライン:
- GitHub - ソース管理(ブランチ保護ルール付き)
 - GitHub Actions - PR時にHugoビルドとチェック
 - Netlify - チェック通ったらmainブランチからデプロイ
 
こうしておけば変なのがデプロイされることもないし安心。
今後の予定
ちょっとした改善くらい:
- もっとイースターエッグ仕込む(作るの楽しいし)
 - ダーク/ライトモード切り替え
 - CSPヘッダーちゃんと直す
 - WebGL実験とかやってみたい
 
テーマの改造はオープンソースなので、使いたい人はどうぞ。それじゃ!
ちなみにオタクっぽくするため日本語翻訳をAIに頼りました
    
Top comments (0)