• #vue
  • #nuxt-content
  • #ui
  • #documentation
  • #設計
開発完了

ブログカレンダーの分類機能

概要

ブログ一覧のカレンダー表示で、記事の内容に応じてカードを分類・色分けする機能。

背景・目的

  • 全ての記事が同じオレンジ色で表示されていた
  • TODO/計画系の記事と、単なるログを視覚的に区別したい
  • 後で見返す必要がある記事を強調表示したい

設計の経緯

旧設計(highlightフィールド単体)

当初は highlight フィールド1つで管理していた。

highlight: "todo" | "personal" | "feature" | "done"

問題点:

  • 「状態」と「種類」が混在していた
  • TODOが完了したときの遷移が不明確
  • 「やらないと決めた」という状態が表現できなかった

新設計(category + todo の2フィールド)

「種類」と「状態」を別軸で管理する設計に変更。

仕様

フィールド定義

category: null | "personal" | "dev"
todo: null | "active" | "done" | "canceled" | "memo"

categoryフィールド(種類)

記事が何についてのものかを表す。

用途
null(未設定)通常のログ・記事
"personal"個人的な感想、自分への戒め、読書メモなど
"dev"開発に関するメモ、機能実装ログなど

todoフィールド(状態)

記事のTODO状態を表す。

用途
null(未設定)未分類(まだ設定していない)
"active"進行中のTODO
"done"完了したTODO
"canceled"やらないと決めたTODO
"memo"単なるメモ/ログ(TODOではない)

組み合わせマトリクス

              │ category                           │
              │ null(log) │ personal │ dev         │
──────────────┼───────────┼──────────┼─────────────┤
todo: null    │ 未分類    │ 未分類   │ 未分類      │
todo: memo    │ 普通ログ  │ 個人メモ │ 開発ログ    │
todo: active  │ 雑TODO    │ 個人TODO │ 開発TODO    │
todo: done    │ 雑完了    │ 個人完了 │ 開発完了    │
todo: canceled│ 雑取消    │ 個人取消 │ 開発取消    │

TODOのライフサイクル

記事作成
    │
    ├── todo: null(未分類)
    │       │
    │       ├──→ todo: "memo"(単なるメモと判断)
    │       │
    │       └──→ todo: "active"(TODOと判断)
    │
    └── todo: "active"(TODOとして作成)
              │
              ├──→ todo: "done"(完了した)
              │
              └──→ todo: "canceled"(やらないと決めた)

色分けルール

todocategory背景色表示
null任意白/無色未分類
memonull薄いオレンジ通常ログ
memopersonal薄いブルー個人メモ
memodev薄いグリーン開発ログ
active任意オレンジTODO(進行中)
done任意グレー完了
canceled任意薄いグレーキャンセル

使用例

開発系のTODO(進行中)

---
title: "機能A実装計画"
category: "dev"
todo: "active"
tags: ["development"]
publishedAt: "2026-01-05"
---

完了したTODO

---
title: "機能A実装計画"
category: "dev"
todo: "done"
tags: ["development"]
publishedAt: "2026-01-05"
updatedAt: "2026-01-10"
---

個人的なメモ(TODOではない)

---
title: "読書メモ: DIE WITH ZERO"
category: "personal"
todo: "memo"
tags: ["読書", "マインドセット"]
publishedAt: "2026-01-02"
---

通常のログ(明示的にメモと指定)

---
title: "作業ログ 2026-01-05"
todo: "memo"
tags: ["log"]
publishedAt: "2026-01-05"
---

未分類の記事

---
title: "新しい記事"
tags: ["misc"]
publishedAt: "2026-01-05"
---

(category, todoともに省略した場合は「未分類」扱い)

関連ファイル

ファイル変更内容
content.config.tscategory, todoフィールドをスキーマに追加
BlogCalendar.vue分類ロジック・色分け・フィルタ機能
blog/index.vueArticle型にcategory, todo追加

旧フィールドからの移行

highlight フィールドは廃止し、以下のルールで移行する。

旧 highlight新フィールド
"todo"todo: "active"
"done"todo: "done"
"working"todo: "active"
"personal"category: "personal"
"feature"category: "dev"