Skip to content

UI全体の不均一性を排除するリプレイス(デザイントークン導入と表現の統一) #166

Description

@ShinoharaTa

問題

UIの実装がページ・コンポーネントごとに場当たり的で、色・ボタン・アイコン・ローディング・エラー表示などの表現が不均一。現状実装の調査で以下が確認できた。

  • 色はVueファイル内に20種類以上のHEX直書き(#9a9a9a, #f08c3e, #402b1e …)。CSS変数はfont-familyのみでカラートークンが無い
  • color.css.text-twitter.text-connpass使用箇所ゼロのdead code。.text-hatena が Twitter色(#1da1f2)のままなどコピペの痕跡。.bg-line .bg-hatena も未使用
  • ボタン色に意味の一貫性が無い: 主要CTAが btn-primary(青)だったり btn-danger(おみくじ)だったり、エラーページの「トップに戻る」は btn-success(緑)
  • アイコン体系が4系統混在: FontAwesome 5(kit)/インラインSVG(IconX・IconBluesky)/絵文字(⛩️📋)/static/brandlogo/*.svg(ほぼ未使用)
  • ローディング表現が2系統: Loading コンポーネント(props も message 単数と messages 配列で揺れ)と spinner-border 直書き(omikuji)
  • エラー表示が3系統: layouts/error.vue(500ページ)/ alert-warning(omikuji)/ 狐のセリフ形式(sanpai)
  • コンポーネント命名の乱れ: sanpaiGrass.jsSanpaiGrass.vue の名前衝突でビルドごとにWARNranking.vue だけ小文字
  • props宣言が不正な箇所: ranking.vueprops: { pagenation: false, max: 100 }実行時に毎回 Vue warn(Invalid prop type)。pagenation はタイポでもある
  • コンテンツ幅がインラインstyleで散在: 600px / 640px / 700px / 420px がページごとにバラバラ
  • 見出しが fs-1fs-6 の直指定でページ間の階層感が不一致(h1 があるのはおみくじページ程度)

対応案(チェックリスト)

1. デザイントークンの導入(基盤)

  • color.css:root のCSS変数に再編(背景/サーフェス/文字/muted/アクセント/SNSブランド色)
  • Vueファイル内のHEX直書きをトークン参照へ置換
  • 未使用の .text-* SNSクラス・.bg-line.bg-hatena・未使用brandlogo svgを削除
  • コンテンツ幅トークン(例: --width-content: 600px)を導入しインラインmax-widthを排除

2. ボタン規約の統一

  • 主要CTA / 副次 / 外部リンク(SNS) / 危険操作 の4種に整理し全ページ適用
  • エラーページの緑ボタン等、規約から外れた色を是正

3. アイコン体系の統一

  • FontAwesomeを基本とし、ブランドアイコン(X/Bluesky等)のみ Icon*.vue(インラインSVG)に統一
  • 装飾絵文字の使用箇所を棚卸し(残す/置換の基準を決める)

4. ローディング/エラー表現の統一

  • Loading コンポーネントに一本化(spinner-border 直書きを置換、props APIを統一)
  • ページ内エラーの標準パターンを1つ定義(狐のセリフ形式に寄せる等)

5. コンポーネント衛生

  • sanpaiGrass.js をリネームして SanpaiGrass.vue との名前衝突WARNを解消
  • ranking.vueRanking.vue(PascalCase統一)
  • 全コンポーネントのprops宣言を正規形({ type, default })に統一(pagenation タイポ修正含む)

6. タイポグラフィ/構造

  • ページ=h1、セクション=h2 の見出し規約を適用
  • fs-* 直指定を見出し規約+ユーティリティに整理

決めたいこと

  • アクセントカラーの方針(現状の Bootstrap 青のままか、鳥居の朱色系をアクセントに立てるか)
  • 絵文字装飾(⛩️🎉等)を意匠として残すか
  • 一括PRか、基盤(トークン)→各表現の順で同一Issue内を複数PRに分けるか

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions