Communitygithub.com

byteTuto/website

bytetuto.comの全ページをモバイルファーストでレスポンシブ(320px〜1920px、水平スクロールなし)にするためのルールです。

website とは?

このスキルは、bytetuto.comウェブサイトの全ページを常にレスポンシブにするための厳格なルールを定義しています。モバイルファーストのアプローチに基づき、320pxから1440pxまでの6つの基準画面幅(320px、375px、414px、768px、1024px、1440px)でテストを実施します。各テストでは、水平スクロール、画面からのはみ出し、タッチターゲットのサイズ(最小24px、推奨44px)、および16px未満のフォントサイズがないことを確認します。CSSの推奨事項には、clamp()を使用した流動的なタイポグラフィ、最小高さに100svhを使用、固定幅を避けるためのmin(max-width: 100%)、グリッドレイアウトのためのrepeat(auto-fill, minmax())などが含まれます。イメージは常にHTMLのwidthとheight属性を持ち、適切なフォーマット(SVG、WebP、AVIF)と属性(loading="lazy"、fetchpriority="high")を使用します。このスキルは主にClaude Codeや他のAIエージェントで使用することを想定しており、CIパイプラインの一部としてcheck_responsive.pyスクリプトで検証できます。開発者がPRを作成する前にこのスクリプトを実行することで、レスポンシブデザインを壊す変更がデプロイされるのを防ぎます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/byteTuto/website/tree/HEAD/.claude/skills/site-responsive

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

常にレスポンシブなサイト

ページは、python3 scripts/check_responsive.py を通過して初めて完成とみなされます(水平スクロールなし、画面からはみ出す要素なし、タッチターゲットが十分な大きさであること)。 このチェックはCIでも実行されます。レスポンシブ対応を壊すPRはデプロイできません。

基準となるビューポート幅(すべてテストすること)

幅ケース
320 px小型Android、iPhone SE(ズーム時)
375 px標準的なiPhone(ターゲットその1:視聴者はTikTokから来る)
414 px大型スマートフォン
768 pxタブレット(縦向き)
1024 pxタブレット(横向き)/ 小型ノートPC
1440 pxデスクトップ

スクリプトでテストされるサイズ: 320×640, 375×667, 414×896, 768×1024, 1024×600(低画面), 1440×900。

CSSルール

  1. モバイルファースト: 基本スタイルは320px用、その後 @media (min-width: …) で拡大。ブレークポイント: 600px, 900px, 1200px(それ以外のマジックナンバーは不可。コンポーネントでは @container を使用可)。
  2. 固定幅は280pxを超えない(min() / max-width: 100% なしの場合): width: min(520px, 100%)。
  3. 可変タイポグラフィ には clamp() を使用: 見出しは clamp(32px, 7vw, 72px)、本文テキストは 最低16px(モバイルでそれ以下にしないこと。そうしないとiOSの入力フィールドでズームが発生する)。
  4. 高さ: min-height: 100svh(モバイルのアドレスバーの下に隠れる 100vh は使用しない)。テキストブロックに固定の height を指定しない。
  5. サイドマージン: モバイルでは16pxのガター(space-4)+ノッチ付き画面用に env(safe-area-inset-left/right)(ビューポートには既に viewport-fit=cover が設定されている)。
  6. 長いテキスト: URL、コマンド、ファイル名には overflow-wrap: anywhere。コードブロックは ブロック内で overflow-x: auto、ページ全体には適用しない。
  7. グリッド: チュートリアルカードには grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr))。
  8. はみ出す装飾要素(byte/spark ブロック、canvas): position: fixed または親要素を overflow: clip にし、サイズは min(vw, px) で指定。
  9. タッチ: 独立したボタンとリンクは 44×44 px 以上(スクリプトの最低ブロックサイズは24px、WCAG 2.2)、2つのターゲット間の間隔は最低8px。ホバー (:hover) のみで利用可能な情報は禁止。focus-visible とタッチ状態を必ず用意すること。
  10. 動画とiframe(YouTube): aspect-ratio: 16 / 9; width: 100%; height: auto; — TikTok動画は 9 / 16 で max-width: 360px。

画像

  • HTMLには常に width と height を指定(レイアウトシフト=CLSを防止)し、CSSでは max-width: 100%; height: auto を設定。
  • フォーマット: ロゴとアイコンはSVG、スクリーンショットはWebP/AVIF。srcset + sizes を使用(例: 480w, 960w, 1600w)。
  • スクロールせずに見える範囲より下の画像には loading="lazy" と decoding="async" を設定。メイン画像(LCP)には絶対に設定しない。メイン画像には fetchpriority="high" を設定する。
  • チュートリアルのサムネイル: aspect-ratio: 16 / 9; object-fit: cover。

ビューポート(既に設定済み。削除しないこと)

<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">

禁止: maximum-scale=1, user-scalable=no(ズームをブロックし、アクセシビリティに悪影響)。

アニメーションとモバイルパフォーマンス

  • prefers-reduced-motion を尊重する(プロジェクトのルール)。
  • Canvas: devicePixelRatio を2に制限し、600px未満では密度を下げる(app.js で既に実施済み。この原則を維持すること)。
  • モバイルでは重い backdrop-filter を重ねない。

確認方法

# check-site コンテナを :8088 で起動している場合、または引数なし(ローカルサーバーが site/ 上で動作)
python3 scripts/check_responsive.py                 # site/ 内の全ページ
python3 scripts/check_responsive.py --shots /tmp/rs # + 幅ごとのPNGキャプチャ

スクリプトは以下の場合に失敗します: scrollWidth > 幅、表示されている要素が端からはみ出している、タッチターゲットが24px未満(文内のリンクは除外)、または本文テキストが16px未満。プッシュする前に320pxと375pxでのキャプチャを確認してください。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

関連スキル