問題
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.js と SanpaiGrass.vue の名前衝突でビルドごとにWARN、ranking.vue だけ小文字
- props宣言が不正な箇所:
ranking.vue の props: { pagenation: false, max: 100 } は実行時に毎回 Vue warn(Invalid prop type)。pagenation はタイポでもある
- コンテンツ幅がインラインstyleで散在: 600px / 640px / 700px / 420px がページごとにバラバラ
- 見出しが
fs-1〜fs-6 の直指定でページ間の階層感が不一致(h1 があるのはおみくじページ程度)
対応案(チェックリスト)
1. デザイントークンの導入(基盤)
2. ボタン規約の統一
3. アイコン体系の統一
4. ローディング/エラー表現の統一
5. コンポーネント衛生
6. タイポグラフィ/構造
決めたいこと
- アクセントカラーの方針(現状の Bootstrap 青のままか、鳥居の朱色系をアクセントに立てるか)
- 絵文字装飾(⛩️🎉等)を意匠として残すか
- 一括PRか、基盤(トークン)→各表現の順で同一Issue内を複数PRに分けるか
問題
UIの実装がページ・コンポーネントごとに場当たり的で、色・ボタン・アイコン・ローディング・エラー表示などの表現が不均一。現状実装の調査で以下が確認できた。
color.cssの.text-twitter〜.text-connpassは使用箇所ゼロのdead code。.text-hatenaが Twitter色(#1da1f2)のままなどコピペの痕跡。.bg-line.bg-hatenaも未使用btn-primary(青)だったりbtn-danger(おみくじ)だったり、エラーページの「トップに戻る」はbtn-success(緑)static/brandlogo/*.svg(ほぼ未使用)Loadingコンポーネント(props もmessage単数とmessages配列で揺れ)とspinner-border直書き(omikuji)layouts/error.vue(500ページ)/alert-warning(omikuji)/ 狐のセリフ形式(sanpai)sanpaiGrass.jsとSanpaiGrass.vueの名前衝突でビルドごとにWARN、ranking.vueだけ小文字ranking.vueのprops: { pagenation: false, max: 100 }は実行時に毎回 Vue warn(Invalid prop type)。pagenationはタイポでもあるfs-1〜fs-6の直指定でページ間の階層感が不一致(h1があるのはおみくじページ程度)対応案(チェックリスト)
1. デザイントークンの導入(基盤)
color.cssを:rootのCSS変数に再編(背景/サーフェス/文字/muted/アクセント/SNSブランド色).text-*SNSクラス・.bg-line・.bg-hatena・未使用brandlogo svgを削除--width-content: 600px)を導入しインラインmax-widthを排除2. ボタン規約の統一
3. アイコン体系の統一
Icon*.vue(インラインSVG)に統一4. ローディング/エラー表現の統一
Loadingコンポーネントに一本化(spinner-border直書きを置換、props APIを統一)5. コンポーネント衛生
sanpaiGrass.jsをリネームしてSanpaiGrass.vueとの名前衝突WARNを解消ranking.vue→Ranking.vue(PascalCase統一){ type, default })に統一(pagenationタイポ修正含む)6. タイポグラフィ/構造
fs-*直指定を見出し規約+ユーティリティに整理決めたいこと