2026.05.26 (火)

✨ GPT-5.5の要約  

ブログ再開直後にsidebarへ投稿カレンダーとカテゴリ活動統計を付け、現在の記事基準の月表示と月別archive探索まで作った記録。

ブログ再開の記事を整理し終えると、すぐ次の問題が見えた。

記事はまた書き始めた。けれどブログがもう一度生き返った感じは、まだ足りなかった。カテゴリ一覧だけでは、このブログがいつ動いたのか、どの日に記録が積まれたのか、最近どんな流れがあるのかがよく見えなかった。

Daily Reviewをもう一度書くには、日付感覚が重要だ。

このブログは結局、「どの日に何を残したのか」が中心だ。けれどGitHub Pagesブログには、Naver Blogのように自然に見える日付探索がない。静的ブログなので、なおさら自分で作る必要があった。

だから今夜付けた機能は、単なる飾りではなかった。

sidebarを記事リストの補助装飾ではなく、日付と活動の流れを見せる探索ツールへ変える作業だった。

最初に付けたのは小さく直接的なカレンダーだった

最初のコミットはf6971fcだった。

f6971fc  feat: add sidebar activity widgets

このとき新しく作ったファイルは二つだ。

_includes/sidebar-calendar.html
_includes/sidebar-nav-stats.html

sidebar.htmlにはカレンダーincludeを付けた。


{% include sidebar-calendar.html %}

最初のカレンダーはJavaScriptなしで、Liquidだけで作った。

site.postsから非表示記事を除外し、現在月の最初の曜日と最終日を計算した。2月のうるう年計算までLiquidの中で処理した。


{% assign calendar_posts = site.posts | where_exp: "post", "post.hidden != true" %}
{% assign calendar_year = site.time | date: "%Y" %}
{% assign calendar_month = site.time | date: "%m" %}

月の中で記事がある日はリンクになり、記事がない日は数字のまま残る。最初の基準はsite.timeだった。つまりこの時点のカレンダーは、「現在月の投稿状況」を見せるsidebar widgetだった。

この程度でも、効果はすぐにあった。

ブログがまた動いている感じが出た。記事タイトルの一覧だけを見るのとは違って、カレンダーは記録の密度を見せてくれる。どの日に記事が集中したのか、どの日が空いたのか、今日がどこなのかが一目で入ってくる。

カテゴリにも活動情報を付けた

カレンダーだけを付けると日付の流れは見えるが、カテゴリ別の流れはまだ鈍かった。

そこでsidebar-nav-stats.htmlも一緒に作った。

このincludeはsidebar項目のURLをカテゴリパスと見なし、そのカテゴリに属する記事をもう一度フィルタリングする。


{% assign stat_posts = site.posts | where_exp: "post", "post.hidden != true" %}
{% assign stat_categories = include.url | remove_first: "/" | split: "/" %}

たとえば/daily-reviewならdaily-reviewカテゴリの記事数を見せ、/diary/aiならdiaryaiの両方を含む記事だけを残す。

出力は単純だ。

記事数 · 最新記事日付

これがよかった理由は、sidebarが単なる目次から抜け出したからだ。

今日一日はが何本あるのか、人工知能の記事が最近いつ上がったのか、GitHub Pages Blogが実際に運用中なのかが見える。ブログが死んでいるのか生きているのかは、記事数より最新日付のほうによく出る。

モバイル密度からすぐ調整した

カレンダーを付けるとすぐ、モバイル密度が問題になった。

sidebarはデスクトップでは余裕があるが、モバイルでは本文の下へ降りたり、メニューと混ざったりする。カレンダーのセルが大きい、あるいは記事数ラベルが長いと、widget一つが画面を大きく食ってしまう。

そこで17d074db401d8bで、sidebar活動ラベルとカレンダー密度をすぐ縮めた。

17d074d  fix: tighten sidebar activity labels
b401d8b  [Fix] | Sidebar calendar: Improve mobile density

SCSSでは日付セルをaspect-ratio: 1で固定し、小さなフォントと4px radiusを使った。カテゴリ活動情報は一行の中で小さく見えるようにした。

ここで重要なのは、カレンダーを「主役」にしないことだった。

カレンダーはブログ探索を助ける装置だ。本文より大きくなってはいけない。特に記録ブログでは、sidebarは情報を与えつつ、記事を読むことを邪魔してはいけない。

現在の記事基準の月へ変えた

すぐに、もっと重要な問題が見えた。

カレンダーがsite.time基準なら、2025年の記事を読んでいるときも2026年5月のカレンダーが出る。これではカレンダーが現在の記事の文脈を説明できない。

そこでccb58d5で基準日を変えた。

ccb58d5  [Fix] | Sidebar: Refine calendar behavior

核心はこの部分だ。


{% assign calendar_source_date = site.time %}
{% if page.date %}
  {% assign calendar_source_date = page.date %}
{% endif %}

ページにdateがあれば、その日付の月を見せる。日付がないページでは、従来どおりsite.timeを使う。

この修正で、カレンダーの性格が変わった。

最初のカレンダーは「今月のブログ状況」だった。今は「いま読んでいる記事が置かれた時間」を見せる。古いDaily Reviewを読めば、その月の記録の流れを見られ、同じ月にどんな記事があったのかも続けて探せる。

これは日付中心の記録ブログにはずっと合っている。

同じ日の複数記事はリストに展開した

同じコミットで、日付別記事リストも付けた。

一日に記事が一つだけなら、日付リンクをその記事へ送ればいい。けれど一日に記事が複数あると問題が起きる。再開初日だけ見ても、Daily ReviewとAI会話アーカイブが同じ日付にある。

だから記事が複数ある日付では、日付リンクがすぐ記事へ行かず、その日付の記事リストへ移動するようにした。

<section id="sidebar-calendar-2026-05-25-posts" class="sidebar-calendar__post-list">
  <h4 class="sidebar-calendar__post-list-title">5月25日の記事</h4>
  <ul>
    ...
  </ul>
</section>

この時点のルールは単純だった。

記事1本: その記事へ移動
記事2本以上: その日付の記事リストへ移動

完璧なルールというより、今すぐ同日複数記事の問題を解く方法だった。それでも重要なのは、問題を隠さなかった点だ。

一つの日付に複数の記事があるかもしれないという事実を、システムが認める必要がある。Daily Review、AI会話、開発記録が同じ日に出るブログなら、この処理が必要だ。

JavaScript enhancementも付けた

Liquidカレンダーだけでも現在月中心の探索はできるが、月をまたいで移動する探索は不便だ。

そこでb06b6d6でJavaScriptを付けた。

b06b6d6  [Feat] | Sidebar calendar: Add archive navigation

新しいファイルはこれだ。

assets/js/custom/sidebar-calendar.js

そして_config.ymlafter_footer_scriptsに登録した。

after_footer_scripts:
  - /assets/js/custom/dark-theme.js
  - /assets/js/custom/sidebar-calendar.js

Liquid側では投稿データをJSONで渡した。

<script type="application/json" data-calendar-posts>
[
  {
    "title": "...",
    "url": "...",
    "date": "2026-05-25"
  }
]
</script>

JavaScriptはこのデータを読み、postsByDatepostCountByMonthpostCountByYearlatestPostMonthByYearを作る。その次に前月・翌月ボタン、month input、年/月別の記事数ボタン、日付別の動的記事リストをレンダリングする。

この構造がよかった理由は、fallbackを捨てなかったことだ。

JavaScriptがあれば、月移動とarchive探索が便利になる。JavaScriptがなくても、Liquidが現在の記事基準の月と複数記事fallbackリストをすでにレンダリングしている。

静的ブログでは、このバランスが重要だ。

今日変わったこと

今日の夜から明け方まで続いた流れはこうだ。

f6971fc  sidebarカレンダーとカテゴリ活動統計を追加
17d074d  sidebar活動ラベル密度を調整
b401d8b  モバイルカレンダー密度を調整
ccb58d5  現在の記事基準の月と複数記事日付リストを処理
b06b6d6  月別archive探索用JavaScript enhancementを追加

核心ファイルはこうだ。

_includes/sidebar.html
_includes/sidebar-calendar.html
_includes/sidebar-nav-stats.html
assets/js/custom/sidebar-calendar.js
_sass/custom/customOverride.scss
_config.yml

一行で要約するとこうだ。

ブログのsidebarに、日付とカテゴリ活動の流れを見せる探索レイヤーを付けた。

結果

これでブログsidebarは単なるカテゴリ一覧ではない。

現在の記事が属する月を見せ、記事がある日付を表示し、同じ日に複数記事があればリストとして展開する。カテゴリ項目には記事数と最新記事の日付が付く。JavaScriptが有効なら、年と月を行き来しながらブログarchiveを眺められる。

ポートフォリオとして見ると、この作業のポイントはサーバーなしで探索性を上げたことにある。

別DBもなく、APIもない。Jekyllのsite.posts、Liquid、SCSS、小さなJavaScriptで、静的ブログの弱い部分を埋めた。記録には日付がある。その日付をUIに出すと、ブログは単なる記事の山ではなく、時間順に動くシステムのように見える。

今日付けたカレンダーは、その始まりだ。

コメントする