#!/usr/bin/env bash # ═══════════════════════════════════════════════════════════════ # Posimai New App Generator # 使い方: bash scripts/new-app.sh "<表示名>" "<説明>" # 例: bash scripts/new-app.sh posimai-timer "Posimai Timer" "シンプルなタイマーアプリ" # ═══════════════════════════════════════════════════════════════ set -e # エラーで即停止 # ── 引数チェック ────────────────────────────────────────────── APP_ID="${1}" APP_NAME="${2}" APP_DESC="${3:-Posimai App}" if [[ -z "$APP_ID" || -z "$APP_NAME" ]]; then echo "使い方: bash scripts/new-app.sh \"<表示名>\" \"<説明>\"" echo "例: bash scripts/new-app.sh posimai-timer \"Posimai Timer\" \"シンプルなタイマーアプリ\"" exit 1 fi # ── 設定 ────────────────────────────────────────────────────── BASE_DIR="$(cd "$(dirname "$0")/.." && pwd)" TEMPLATE_DIR="$BASE_DIR/_template" APP_DIR="$BASE_DIR/$APP_ID" GITEA_URL="http://100.76.7.3:3000" GITEA_USER="mai" GITEA_PASS=$(printf "protocol=http\nhost=100.76.7.3\n" | git credential fill 2>/dev/null | grep ^password | cut -d= -f2) GITHUB_ORG="posimai" # ── 既存チェック ────────────────────────────────────────────── if [[ -d "$APP_DIR" ]]; then echo "エラー: $APP_DIR はすでに存在します" exit 1 fi echo "" echo "═══════════════════════════════════════" echo " 新アプリ作成: $APP_NAME" echo " ID: $APP_ID" echo "═══════════════════════════════════════" # ── Step 1: テンプレートをコピー ────────────────────────────── echo "" echo "[ 1/6 ] テンプレートをコピー中..." cp -r "$TEMPLATE_DIR" "$APP_DIR" # プレースホルダーを置換(全ファイル対象) find "$APP_DIR" -type f \( -name "*.html" -o -name "*.json" -o -name "*.js" -o -name "*.md" \) | while read f; do sed -i "s/APP_NAME/$APP_NAME/g; s/APP_ID/$APP_ID/g; s/APP_DESCRIPTION/$APP_DESC/g" "$f" done echo " 完了: $APP_DIR" # ── Step 2: Git 初期化 ───────────────────────────────────────── echo "" echo "[ 2/6 ] Git 初期化..." cd "$APP_DIR" git init -b main git add . git commit -m "init: $APP_NAME" echo " 完了" # ── Step 3: Gitea リポジトリ作成 ───────────────────────────── echo "" echo "[ 3/6 ] Gitea にリポジトリ作成中..." HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ -X POST "$GITEA_URL/api/v1/user/repos" \ -H "Content-Type: application/json" \ -u "$GITEA_USER:$GITEA_PASS" \ -d "{\"name\":\"$APP_ID\",\"private\":true,\"auto_init\":false}") if [[ "$HTTP_STATUS" == "201" ]]; then echo " 完了: $GITEA_URL/$GITEA_USER/$APP_ID" else echo " 警告: Gitea API status=$HTTP_STATUS (既存または接続不可)" fi git remote add gitea "$GITEA_URL/$GITEA_USER/$APP_ID.git" git push gitea main echo " Push 完了" # ── Step 4: GitHub リポジトリ作成 ──────────────────────────── echo "" echo "[ 4/6 ] GitHub にリポジトリ作成中..." gh repo create "$GITHUB_ORG/$APP_ID" --private --description "$APP_DESC" 2>&1 git remote add github "https://github.com/$GITHUB_ORG/$APP_ID.git" git push github main echo " 完了: https://github.com/$GITHUB_ORG/$APP_ID" # ── Step 5: Vercel 接続 ─────────────────────────────────────── echo "" echo "[ 5/6 ] Vercel に接続中..." # github リモートを選択するため "2" を入力(gitea=1, github=2) printf "2\n" | vercel git connect "https://github.com/$GITHUB_ORG/$APP_ID.git" --yes 2>&1 || true echo " 完了" # ── Step 6: git hooks インストール ─────────────────────────── echo "" echo "[ 6/6 ] Git フック設定..." cat > "$APP_DIR/.git/hooks/post-commit" << 'HOOK' #!/bin/sh echo "" echo "📦 コミット完了。デプロイするには:" echo " npm run deploy" echo " (Gitea + GitHub → Vercel 自動デプロイ)" echo "" HOOK chmod +x "$APP_DIR/.git/hooks/post-commit" echo " 完了" # ── 完了メッセージ ──────────────────────────────────────────── echo "" echo "═══════════════════════════════════════" echo " $APP_NAME — セットアップ完了!" echo "═══════════════════════════════════════" echo "" echo " ディレクトリ : $APP_DIR" echo " Gitea : $GITEA_URL/$GITEA_USER/$APP_ID" echo " GitHub : https://github.com/$GITHUB_ORG/$APP_ID" echo " Vercel : https://$APP_ID.vercel.app (初回デプロイ後)" echo "" echo " 次のコマンドで開発開始:" echo " cd $APP_ID" echo " # コードを編集して..." echo " git add . && git commit -m \"feat: ...\"" echo " npm run deploy" echo ""