chore: _template-minimal 現行化 + create-app.sh ダッシュボード自動更新

- _template-minimal/sw.js: skipWaiting() 追加(デプロイ後の旧キャッシュ残留防止)
- _template-minimal/index.html: JWT token handoff 追加(ダッシュボードからのSSO対応)
- create-app.sh: コピー元を _template → _template-minimal に変更
- create-app.sh: Step 8 追加 — projects.json / timeline / roadmap を自動更新してデプロイまで完結

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
posimai 2026-04-11 11:44:15 +09:00
parent ee7b3053e2
commit 5538cde753
3 changed files with 103 additions and 9 deletions

View File

@ -5,10 +5,21 @@
<meta name="robots" content="noindex, nofollow"> <meta name="robots" content="noindex, nofollow">
<script> <script>
(function () { (function () {
// Theme
var t = localStorage.getItem('APP_ID-theme') || 'system'; var t = localStorage.getItem('APP_ID-theme') || 'system';
var dark = t === 'dark' || (t === 'system' && matchMedia('(prefers-color-scheme:dark)').matches); var dark = t === 'dark' || (t === 'system' && matchMedia('(prefers-color-scheme:dark)').matches);
document.documentElement.setAttribute('data-theme', dark ? 'dark' : 'light'); document.documentElement.setAttribute('data-theme', dark ? 'dark' : 'light');
document.documentElement.setAttribute('data-theme-pref', t); document.documentElement.setAttribute('data-theme-pref', t);
// JWT token handoff (cross-domain login from posimai-dashboard)
var p = new URLSearchParams(location.search);
var tk = p.get('token');
if (tk) {
localStorage.setItem('posimai_token', tk);
p.delete('token');
var u = location.pathname + (p.toString() ? '?' + p.toString() : '') + location.hash;
history.replaceState({}, '', u);
}
})(); })();
</script> </script>
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">

View File

@ -6,9 +6,8 @@ const STATIC = ['/', '/index.html', '/manifest.json', '/logo.png'];
self.addEventListener('install', e => { self.addEventListener('install', e => {
e.waitUntil( e.waitUntil(
caches.open(CACHE).then(c => c.addAll(STATIC)) caches.open(CACHE).then(c => c.addAll(STATIC))
// skipWaiting() は意図的に呼ばない
// → updatefound イベントで UI 側からユーザーに通知する方式を採用
); );
self.skipWaiting();
}); });
self.addEventListener('activate', e => { self.addEventListener('activate', e => {

View File

@ -38,7 +38,7 @@ echo ""
# --- Step 1: テンプレートコピー & 置換 --- # --- Step 1: テンプレートコピー & 置換 ---
echo "Step 1: テンプレートをコピーして置換..." echo "Step 1: テンプレートをコピーして置換..."
cp -r "$SCRIPT_DIR/_template" "$TARGET_DIR" cp -r "$SCRIPT_DIR/_template-minimal" "$TARGET_DIR"
# sed で 3 変数を一括置換macOS / Linux / Git Bash 対応) # sed で 3 変数を一括置換macOS / Linux / Git Bash 対応)
find "$TARGET_DIR" -type f \( -name "*.html" -o -name "*.json" -o -name "*.js" -o -name "*.md" \) | while IFS= read -r f; do find "$TARGET_DIR" -type f \( -name "*.html" -o -name "*.json" -o -name "*.js" -o -name "*.md" \) | while IFS= read -r f; do
@ -107,6 +107,86 @@ echo "Step 7: 初回本番デプロイをトリガー..."
git commit --allow-empty -m "ci: trigger initial Vercel deployment" git commit --allow-empty -m "ci: trigger initial Vercel deployment"
npm run deploy npm run deploy
# --- Step 8: Dashboard 自動更新 ---
echo ""
echo "Step 8: Dashboard を自動更新..."
DASHBOARD_DIR="$SCRIPT_DIR/posimai-dashboard"
ROADMAP_DIR="$SCRIPT_DIR/posimai-roadmap"
TODAY=$(date +%Y-%m-%d)
# projects.json に追加
node -e "
const fs = require('fs');
const f = '$DASHBOARD_DIR/src/data/projects.json';
const d = JSON.parse(fs.readFileSync(f, 'utf8'));
const already = d.projects.some(p => p.id === '$APP_ID');
if (!already) {
d.projects.unshift({
id: '$APP_ID',
name: '$APP_NAME',
category: 'micro',
status: 'beta',
description: '$APP_DESC',
techStack: ['HTML', 'CSS', 'JavaScript', 'PWA'],
links: { github: 'https://github.com/$GITHUB_ORG/$APP_ID' },
pwa: true,
themeColor: '#0D0D0D',
accentColor: '#6EE7B7'
});
d.lastUpdated = '$TODAY';
fs.writeFileSync(f, JSON.stringify(d, null, 4));
console.log(' projects.json: 追加完了');
} else {
console.log(' projects.json: 既存エントリあり、スキップ');
}
" || echo " [WARN] projects.json の更新に失敗しました"
# timeline/page.tsx に launch エントリを追加
TIMELINE_FILE="$DASHBOARD_DIR/src/app/timeline/page.tsx"
if grep -q "\"$APP_ID\"" "$TIMELINE_FILE" 2>/dev/null; then
echo " timeline/page.tsx: 既存エントリあり、スキップ"
else
# "const EVENTS: TimelineEvent[] = [" の直後に挿入
sed -i "s/const EVENTS: TimelineEvent\[\] = \[/const EVENTS: TimelineEvent[] = [\n { date: \"$TODAY\", type: \"launch\", app: \"$APP_ID\", title: \"$APP_NAME リリース\", desc: \"$APP_DESC\" },/" \
"$TIMELINE_FILE" \
&& echo " timeline/page.tsx: 追加完了" \
|| echo " [WARN] timeline/page.tsx の更新に失敗しました"
fi
# roadmap.json に追加
node -e "
const fs = require('fs');
const f = '$ROADMAP_DIR/roadmap.json';
const d = JSON.parse(fs.readFileSync(f, 'utf8'));
if (!d.apps) d.apps = [];
const already = d.apps.some(a => a.id === '$APP_ID');
if (!already) {
d.apps.push({ id: '$APP_ID', tasks: [] });
fs.writeFileSync(f, JSON.stringify(d, null, 2));
console.log(' roadmap.json: 追加完了');
} else {
console.log(' roadmap.json: 既存エントリあり、スキップ');
}
" || echo " [WARN] roadmap.json の更新に失敗しました"
# Dashboard と Roadmap をデプロイ
echo ""
echo " Dashboard をデプロイ中..."
cd "$DASHBOARD_DIR"
git add src/data/projects.json src/app/timeline/page.tsx && \
git commit -m "feat: $APP_NAME をダッシュボードに追加" && \
npm run deploy && \
echo " Dashboard デプロイ完了" || echo " [WARN] Dashboard デプロイに失敗しました"
echo ""
echo " Roadmap をデプロイ中..."
cd "$ROADMAP_DIR"
git add roadmap.json && \
git commit -m "feat: $APP_NAME を roadmap に追加" && \
npm run deploy && \
echo " Roadmap デプロイ完了" || echo " [WARN] Roadmap デプロイに失敗しました"
echo "" echo ""
echo "========================================" echo "========================================"
echo " 完了! $APP_NAME" echo " 完了! $APP_NAME"
@ -116,10 +196,14 @@ echo " ディレクトリ : $TARGET_DIR"
echo " Gitea : http://100.76.7.3:3000/mai/$APP_ID" echo " Gitea : http://100.76.7.3:3000/mai/$APP_ID"
echo " GitHub : https://github.com/$GITHUB_ORG/$APP_ID" echo " GitHub : https://github.com/$GITHUB_ORG/$APP_ID"
echo "" echo ""
echo " 次の必須作業Dashboard 更新):" echo " 自動完了済み:"
echo " 1. posimai-dashboard/src/data/projects.json にカードを追加" echo " - projects.json にカード追加"
echo " 2. ecosystem/page.tsx の NODES / EDGES に追加" echo " - timeline/page.tsx に launch エントリ追加"
echo " 3. timeline/page.tsx の EVENTS に追加" echo " - roadmap.json に追加"
echo " 4. access/page.tsx の APPS に追加" echo " - Dashboard / Roadmap デプロイ"
echo " 5. Dashboard をデプロイ: cd posimai-dashboard && npm run deploy" echo ""
echo " 手動で追加が必要なもの:"
echo " 1. apps/page.tsx の projectIds に追加(カテゴリ判断が必要)"
echo " 2. ecosystem/page.tsx の NODES / EDGES に追加(接続関係の判断が必要)"
echo " 3. logo.png を配置後: cd $TARGET_DIR && git add logo.png && git commit -m 'feat: logo 追加' && npm run deploy"
echo "" echo ""