💻 システム開発

SCALE_全システム標準モジュール

最終更新 2026年05月04日 / 31_システム開発部/_SCALE_全システム標準モジュール.md

SCALE 全システム標準モジュール

新規システム開発時、これらは "言われなくても全部入れる" 標準モジュール。
毎回大串から依頼される工数をゼロにする。

---

30秒で全体像

観点 一言
核心 新規システム開発時、これらは "言われなくても全部入れる" 標準モジュール。
キーワード このドキュメントの位置づけ / 標準モジュール一覧10モジュール / 新規システム開発 チェックリスト / 関連ドキュメント
使う人 開発者 / PM / 経営者
読了目安 5-8分

このドキュメントの位置づけ

新規システム開発 / 大規模リニューアル時、これらは全部組み込む

  • システム開発書( SCALE システム開発書)と併読
  • 「最初に依頼してきたら全部入っている」を実現
  • このページのモジュールが デフォルト搭載、依頼があれば追加機能

標準モジュール一覧(10モジュール)

# モジュール 必須度 概要
1 更新履歴ページ ★★★ システム内に変更履歴を表示
2 ログイン認証 ★★★ パスワード認証 + メンバー管理
3 ロゴ・favicon・OGP ★★★ ブラウザタブ・SNSシェア対応
4 📐 メタタグ・SEO基礎 ★★ description / viewport / canonical
5 Slack 通知連携 ★★ 主要イベントの自動通知
6 エラーハンドリング ★★ 404 / 500 / ローディング表示
7 💾 バックアップ機構 ★★★ デプロイ前後の自動 tar.gz
8 アクセス解析 ★★ GA4 / Cloudflare Analytics
9 ダークモード対応 視認性・好みに応じ
10 📱 レスポンシブ ★★★ モバイル・タブレット・PC

1️⃣ 更新履歴ページ(必須)

仕様

項目
📍 URL /changelog または /updates
🧭 ナビ位置 サイドバー > 全体 / システム > 更新履歴
閲覧権限 全メンバー
追記タイミング 1行修正でも必ず

データ構造(標準)

type ChangelogEntry = {
  id: string;                   // 一意ID
  date: string;                 // YYYY-MM-DD
  time: string;                 // HH:MM
  title: string;                // 短い見出し(20-30字)
  category: 'feature' | 'improve' | 'fix' | 'ui' | 'infra' | 'security';
  scope?: string;               // 該当機能・セクション
  summary: string;              // 2-3文 何を・どう・なぜ
  details?: string[];           // 詳細リスト
  files?: string[];             // 変更ファイル
  snapshotTs?: string;          // バックアップタイムスタンプ
  href?: string;                // 該当画面URL
  hrefLabel?: string;           // ボタンラベル(例: '作業中画面')
  backup?: string;              // 対応バックアップファイル名
};

UI 要素

  • 日付グルーピング表示
  • カテゴリ別フィルタ
  • 検索(タイトル・summary)
  • 🔘 「→ 該当箇所」ジャンプボタン(href 設定時)
  • 💾 バックアップファイル名表示(復元元が一目で分かる)

2️⃣ ログイン認証(必須)

標準パターン(DEFAULT_MEMBERS型)

// core.js または lib/auth.ts
const DEFAULT_MEMBERS = [
  {
    email: 'y-ogushi@scale-group.co.jp',
    name: '大串勇輝',
    role: 'admin',  // admin / pm / member / viewer
    pass●●●●●●: '●●●●●●'  // 全員共通固定
  },
  // ...
];

仕様

項目
デフォルトPW ●●●●●●(全員共通固定)
ユーザー識別 メールアドレス
権限階層 admin > pm > member > viewer
💾 保存先 localStorage sb_members または KV
PW強度 全員共通なのでこだわらない(プライベート用途)

必須機能

  • ✅ ログイン画面(メアド + PW)
  • ✅ 「ログアウトして確認」ボタン(更新履歴等)
  • ✅ メンバー管理画面(admin限定で追加・編集・削除)
  • ✅ 権限別UI制御(getSectionPerm() 等)
  • ✅ セッション継続(ブラウザ閉じても再ログイン不要)

注意点

全員共通PW固定の理由
SCALEグループ内ツールのため、複雑な権限管理より使いやすさ優先。
メアドのみ個別、PWは全員 ●●●●●●


3️⃣ ロゴ・favicon・OGP(必須)

必須ファイル

ファイル 用途 サイズ
favicon.ico ブラウザタブアイコン 32x32 / 16x16
favicon.png 高解像度ファビコン 512x512
apple-touch-icon.png iOSホーム画面 180x180
og-image.png Twitter/Facebook OGP 1200x630
logo.svg ヘッダーロゴ(推奨) ベクター
logo-dark.svg ダークモード用 ベクター

HTML テンプレート

<!-- ブラウザタブ -->
<link rel="icon" href="/favicon.ico">
<link rel="icon" type="image/png" sizes="512x512" href="/favicon.png">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">

<!-- OGP -->
<meta property="og:title" content="<システム名>">
<meta property="og:description" content="<システム説明>">
<meta property="og:image" content="https://<domain>/og-image.png">
<meta property="og:type" content="website">
<meta property="og:url" content="https://<domain>/">

<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="<システム名>">
<meta name="twitter:description" content="<システム説明>">
<meta name="twitter:image" content="https://<domain>/og-image.png">

ブランディング基準

項目 SCALE標準
メインカラー ロゴカラーに揃える(要確認)
ロゴ表示 ヘッダー左 + ファビコン
ドメイン scale-group.co.jp 系 / pages.dev

ロゴ・OGP画像の保管場所
共通アセット: ~/Library/CloudStorage/.../scale-assets/ を作成して全システムで共有予定(要整備)


4️⃣ メタタグ・SEO基礎(必須)

HTML テンプレート

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title><システム名> | SCALE</title>
  <meta name="description" content="<160字以内の説明>">
  <meta name="theme-color" content="#000000">  <!-- ブラウザ上部の色 -->

  <!-- canonical(重要)-->
  <link rel="canonical" href="https://<domain>/">

  <!-- 検索エンジン制御 -->
  <meta name="robots" content="noindex,nofollow">  <!-- 社内ツールは noindex -->
</head>

注意点

社内ツールは robots: noindex,nofollow
SCALE CRM, SCALE Base 等の業務システムは検索結果に出てはいけない。

公開HP(TERASU等)は逆に SEO 強化
index,follow + sitemap.xml + structured data


5️⃣ Slack 通知連携(推奨)

標準通知タイプ

イベント チャンネル 通知タイミング
✅ 主要成果(受注・アポ獲得) #成果報告 即時
失注・離脱 #成果報告 即時
異常検知(リスト枯渇等) #alert-system 即時
日次バッチ #daily-report 21:00
リマインド(資料送付前日等) 該当チャンネル 9:00
デプロイ完了 #dev-log デプロイ後

実装ルール

Bot Token 経由必須(MCP直接禁止)

# slack_post.sh
#!/bin/bash
TOKEN="<bot-token>"
CHANNEL="<channel-id>"
TEXT="$1"

curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{
    \"channel\": \"$CHANNEL\",
    \"text\": \"$TEXT\",
    \"username\": \"<エージェント名>\",
    \"icon_url\": \"<アイコンURL>\"
  }"

メッセージフォーマット

タイトル: 【<種別>】<対象> <件数>(YYYY-MM-DD)
本文:
- 内容(具体的に・曖昧表現NG)
- 確認URL(本番)
- 改修内容のサマリ

スレッド末尾:
<@大串> + 該当部署マネージャー

6️⃣ エラーハンドリング(必須)

必須実装

状況 表示
404 カスタム404ページ(戻るボタン付き)
💥 500 カスタム500ページ(再読込・問合せ導線)
ローディング スケルトン or スピナー
📭 空状態 「データがありません」+ 行動を促す導線
オフライン 「ネットワーク接続を確認してください」
権限エラー 「この機能へのアクセス権限がありません」

コード例(React/Next.js)

// ローディング状態
{isLoading ? <Skeleton /> : <Content />}

// 空状態
{items.length === 0 ? (
  <EmptyState
    title="まだデータがありません"
    actionLabel="新規追加"
    onAction={handleAdd}
  />
) : (
  <ItemList items={items} />
)}

// エラー状態
<ErrorBoundary
  fallback={<ErrorPage onRetry={handleRetry} />}
>
  <App />
</ErrorBoundary>

7️⃣ バックアップ機構(必須)

SCALE CRM 標準フロー

# pre-deploy
cd "株式会社SCALE/hp"
TS=$(date +%Y-%m-%d_%H%M%S)
tar czf "../../scale-lead-backups/scale-lead_${TS}_pre-deploy.tar.gz" base/

# (コード変更 + デプロイ)

# post-deploy(タグ付き)
TS=$(date +%Y-%m-%d_%H%M%S)
tar czf "../../scale-lead-backups/scale-lead_${TS}_post-deploy__<タグ>.tar.gz" base/

SCALE Base 標準フロー(snapshot.sh)

# scripts/deploy.sh が pre-deploy snapshot を自動取得
bash scripts/deploy.sh

# snapshot 一覧
bash scripts/snapshot.sh --list

# snapshot 復元
bash scripts/snapshot.sh --restore <snapshot-id>

復元可能性の保証

過去の安定版は全部 scale-lead-backups/ scale-base-snapshots/ に残す
容量問題が出るまで削除禁止。


8️⃣ アクセス解析(推奨)

標準実装

<!-- Cloudflare Web Analytics(無料・軽量)-->
<script defer
  src='https://static.cloudflareinsights.com/beacon.min.js'
  data-cf-beacon='{"token": "<token>"}'>
</script>

<!-- GA4(必要に応じて)-->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-<ID>"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-<ID>');
</script>

計測項目

  • ページビュー
  • ボタンクリック(主要CV)
  • フォーム送信
  • スクロール深度
  • 離脱率

社内ツールは Cloudflare Analytics で十分
GA4 は公開サイト(TERASU等)のみ


9️⃣ ダークモード対応(推奨)

CSS Variables 設計

:root {
  --bg: #ffffff;
  --text: #000000;
  --primary: #0066ff;
  --border: #e0e0e0;
}

[data-theme="dark"] {
  --bg: #1a1a1a;
  --text: #ffffff;
  --primary: #4d8cff;
  --border: #333333;
}

body {
  background: var(--bg);
  color: var(--text);
}

切替スクリプト

// localStorage で記憶
const theme = localStorage.getItem('theme') || 'light';
document.documentElement.setAttribute('data-theme', theme);

// 切替ボタン
function toggleTheme() {
  const current = document.documentElement.getAttribute('data-theme');
  const next = current === 'dark' ? 'light' : 'dark';
  document.documentElement.setAttribute('data-theme', next);
  localStorage.setItem('theme', next);
}

🔟 レスポンシブ(必須)

ブレークポイント標準

/* モバイル: ~ 768px */
@media (max-width: 768px) {
  /* スマホ向け */
}

/* タブレット: 768px ~ 1024px */
@media (min-width: 768px) and (max-width: 1024px) {
  /* タブレット向け */
}

/* PC: 1024px ~ */
@media (min-width: 1024px) {
  /* PC向け */
}

必須対応

  • ✅ ハンバーガーメニュー(モバイル)
  • ✅ タッチエリア最小 44x44px
  • ✅ フォントサイズ最小 14px(モバイル)
  • ✅ 横スクロール禁止(意図的でない限り)
  • ✅ 画像は max-width: 100%

新規システム開発 チェックリスト

新規システムを依頼されたら、上から全部実装する

Phase 1: 基盤

  • [ ] 1️⃣ 更新履歴ページ(/changelog
  • [ ] 2️⃣ ログイン認証(DEFAULT_MEMBERS)
  • [ ] 3️⃣ ロゴ・favicon・OGP
  • [ ] 4️⃣ メタタグ・SEO基礎(社内ツールは noindex)
  • [ ] 6️⃣ エラーハンドリング(404/500/ローディング/空状態)
  • [ ] 🔟 レスポンシブ(ブレークポイント設定)

Phase 2: 連携・解析

  • [ ] 5️⃣ Slack 通知連携(Bot Token + slack_post.sh)
  • [ ] 8️⃣ アクセス解析(Cloudflare Analytics)
  • [ ] 7️⃣ バックアップ機構(pre/post-deploy)

Phase 3: 拡張

  • [ ] 9️⃣ ダークモード対応
  • [ ] 個別機能(依頼ベース)

関連ドキュメント

必読

システム別


このドキュメントの更新ルール

「毎回どのシステムでも依頼してる」ものが見えたら必ずこのページに追記

更新タイミング:
- 大串から「これも入れて」と言われた共通モジュールが新規発覚
- 過去に何度も依頼してきたパターンが見えてきた
- 新しいベストプラクティスが定着した


このドキュメントが育てば、初期アウトプットで "言われる前に全部入っている" 状態になる。
大串の依頼工数ゼロを実現。