ワンステップ導入

2つのスクリプトは同じことをします:キットを ~/.claude(全プロジェクト共通)または現在のプロジェクトの .claude/ に書き込みます。既存のファイルは一切上書きせず、キット版は .kit-new として保存するので、比較と統合は自分で行います。

方法1:コマンド1行で入れる(軽量キット)

Mac / Linux

ターミナル
curl -fsSL https://workflow.maysuns.uk/ja/kit/install.sh -o install.sh && bash install.sh --dry-run
# 何をするか確認したら、--dry-run を外してもう一度実行:
bash install.sh              # ~/.claude に入れる
bash install.sh --project    # 現在のプロジェクトに入れる

Windows PowerShell

PowerShell
Invoke-WebRequest https://workflow.maysuns.uk/ja/kit/install.ps1 -OutFile install.ps1
.\install.ps1 -DryRun       # まず予行演習
.\install.ps1               # $HOME\.claude に入れる
.\install.ps1 -Project      # 現在のプロジェクトに入れる
「スクリプトの実行が無効です」と出たとき:powershell -ExecutionPolicy Bypass -File .\install.ps1。最初に --dry-run / -DryRun で確認することを強くお勧めします。スクリプトの画面表示は日本語ですが、コンソールの文字コードによっては文字化けする場合があります(動作には影響しません)。

方法2:zip をダウンロードして手でコピーする

軽量キットの zip をダウンロード 展開したら、.claude フォルダの中身を自分の ~/.claude かプロジェクトの .claude にコピーします。

スクリプトがすること/しないこと

することしないこと
zip をダウンロード(このサイトのこの1つのアドレスだけ)。一時フォルダに展開。存在しないファイルをコピー。既存のファイルは .kit-new として保存。参考用の settings.kit-example.json を作成既存のファイルの上書き。あなたの settings.json の変更。ファイルの削除。データのアップロード。zip の中のコードの実行

スクリプトの全内容(実行する前に自分で読んでください)

install.sh

install.sh ダウンロード
#!/usr/bin/env bash
# スターター・ワークフローキット インストールスクリプト(Mac / Linux / Windows Git Bash)
# 使い方:
#   bash install.sh                      # ユーザー用の ~/.claude(全プロジェクト共通)に入れる。軽量キットをダウンロード
#   bash install.sh --project            # 現在のディレクトリ(./CLAUDE.md と ./.claude/)に入れる
#   bash install.sh --zip kit.zip        # ローカルの zip を使う(完全版は先にブラウザでログインして zip をダウンロード)
#   bash install.sh --dry-run            # 何をするかだけ表示し、ファイルは書かない
#   bash install.sh --target /tmp/x      # インストール先を指定(先に一時フォルダで試すとき)
# ルール:既存のファイルは一切上書きしない。キット版は <ファイル名>.kit-new として保存し、比較と統合は自分で行う。
#       settings.json は決して書かない。参考用の settings.kit-example.json だけを作る。
set -euo pipefail

URL="https://workflow.maysuns.uk/ja/kit/workflow-starter-lite.zip"
MODE="user"; ZIP=""; DRY=0; TARGET=""
while [ $# -gt 0 ]; do
  case "$1" in
    --project) MODE="project" ;;
    --user) MODE="user" ;;
    --zip) ZIP="${2:?--zip にはパスが必要です}"; shift ;;
    --dry-run) DRY=1 ;;
    --target) TARGET="${2:?--target にはパスが必要です}"; shift ;;
    -h|--help) sed -n '2,10p' "$0"; exit 0 ;;
    *) echo "不明なオプション:$1"; exit 1 ;;
  esac
  shift
done

TMP="$(mktemp -d)"; trap 'rm -rf "$TMP"' EXIT
if [ -z "$ZIP" ]; then
  echo "キットをダウンロード中:$URL"
  curl -fsSL "$URL" -o "$TMP/kit.zip"
  ZIP="$TMP/kit.zip"
fi
command -v unzip >/dev/null || { echo "unzip コマンドが必要です"; exit 1; }
unzip -q "$ZIP" -d "$TMP/x"
ROOT="$(find "$TMP/x" -mindepth 1 -maxdepth 1 -type d | head -n1)"
[ -n "$ROOT" ] || { echo "zip にキットのフォルダがありません"; exit 1; }

if [ -n "$TARGET" ]; then MODE="target"; DEST="$TARGET"; CLAUDE_DIR="$TARGET"
elif [ "$MODE" = "project" ]; then DEST="$PWD"; CLAUDE_DIR="$DEST/.claude"; else DEST="$HOME/.claude"; CLAUDE_DIR="$DEST"; fi
DRYTXT=""; [ "$DRY" = 1 ] && DRYTXT="(ドライラン)"
echo "モード:$MODE インストール先:$DEST$DRYTXT"

new=0; skipped=0
put() {  # put 元ファイル 先ファイル
  local src="$1" dst="$2"
  if [ -e "$dst" ]; then
    echo "  スキップ(既存)$dst → キット版は $dst.kit-new として保存$DRYTXT"
    [ "$DRY" = 1 ] || cp "$src" "$dst.kit-new"
    skipped=$((skipped+1))
  else
    echo "  新規作成 $dst$DRYTXT"
    if [ "$DRY" != 1 ]; then mkdir -p "$(dirname "$dst")"; cp "$src" "$dst"; fi
    new=$((new+1))
  fi
}

# 1) .claude 配下の rules / commands / skills
while IFS= read -r f; do
  rel="${f#"$ROOT/.claude/"}"
  case "$rel" in
    settings.example.json) put "$f" "$CLAUDE_DIR/settings.kit-example.json" ;;  # settings.json には絶対に触れない
    *) put "$f" "$CLAUDE_DIR/$rel" ;;
  esac
done < <(find "$ROOT/.claude" -type f | sort)

# 2) CLAUDE.md:プロジェクトモードではプロジェクトのルートへ。ユーザーモードではひな形としてだけ置き、グローバルの CLAUDE.md は使わない
if [ -f "$ROOT/CLAUDE.md" ]; then
  if [ "$MODE" = "project" ]; then put "$ROOT/CLAUDE.md" "$DEST/CLAUDE.md"; else put "$ROOT/CLAUDE.md" "$DEST/CLAUDE.kit-template.md"; fi
fi

echo "完了:新規作成 $new 件、スキップ $skipped 件(既存。キット版は .kit-new として保存)。"
echo "次へ:Claude Code を開いて /status を試し、CLAUDE.md のひな形の【】の部分を自分の内容に書き換えてください。"

install.ps1

install.ps1 ダウンロード
# スターター・ワークフローキット インストールスクリプト(Windows PowerShell 5.1 / PowerShell 7)
# 使い方:
#   .\install.ps1                       # ユーザー用の $HOME\.claude に入れる。軽量キットをダウンロード
#   .\install.ps1 -Project              # 現在のディレクトリ(.\CLAUDE.md と .\.claude\)に入れる
#   .\install.ps1 -ZipPath kit.zip      # ローカルの zip を使う(完全版は先にブラウザでログインして zip をダウンロード)
#   .\install.ps1 -DryRun               # 何をするかだけ表示し、ファイルは書かない
# ルール:既存のファイルは一切上書きしない。キット版は <ファイル名>.kit-new として保存し、比較と統合は自分で行う。
#       settings.json は決して書かない。参考用の settings.kit-example.json だけを作る。
#   .\install.ps1 -Target D:\x\.claude  # インストール先を指定(先に一時フォルダで試すとき)
param([switch]$Project, [string]$ZipPath = "", [switch]$DryRun, [string]$Target = "")
$ErrorActionPreference = "Stop"
$Url = "https://workflow.maysuns.uk/ja/kit/workflow-starter-lite.zip"
$Tmp = Join-Path ([System.IO.Path]::GetTempPath()) ("kit_" + [guid]::NewGuid().ToString("N"))
New-Item -ItemType Directory -Path $Tmp | Out-Null
try {
  if (-not $ZipPath) {
    Write-Host "キットをダウンロード中:$Url"
    $ZipPath = Join-Path $Tmp "kit.zip"
    Invoke-WebRequest -Uri $Url -OutFile $ZipPath -UseBasicParsing
  }
  Expand-Archive -Path $ZipPath -DestinationPath (Join-Path $Tmp "x") -Force
  $Root = Get-ChildItem (Join-Path $Tmp "x") -Directory | Select-Object -First 1
  if (-not $Root) { throw "zip にキットのフォルダがありません" }
  $RootPath = $Root.FullName
  if ($Target) { $Dest = $Target; $ClaudeDir = $Target; $Mode = "target" }
  elseif ($Project) { $Dest = (Get-Location).Path; $ClaudeDir = Join-Path $Dest ".claude"; $Mode = "project" }
  else { $Dest = Join-Path $HOME ".claude"; $ClaudeDir = $Dest; $Mode = "user" }
  $suffix = ""; if ($DryRun) { $suffix = "(ドライラン。ファイルは書きません)" }
  Write-Host "モード:$Mode インストール先:$Dest $suffix"
  $script:new = 0; $script:skipped = 0
  function Put([string]$src, [string]$dst) {
    if (Test-Path -LiteralPath $dst) {
      Write-Host "  スキップ(既存)$dst → キット版は $dst.kit-new として保存"
      if (-not $DryRun) { Copy-Item -LiteralPath $src -Destination "$dst.kit-new" -Force }
      $script:skipped++
    } else {
      Write-Host "  新規作成 $dst"
      if (-not $DryRun) {
        New-Item -ItemType Directory -Path (Split-Path $dst) -Force | Out-Null
        Copy-Item -LiteralPath $src -Destination $dst
      }
      $script:new++
    }
  }
  $dotClaude = Join-Path $RootPath ".claude"
  Get-ChildItem -LiteralPath $dotClaude -Recurse -File | Sort-Object FullName | ForEach-Object {
    $rel = $_.FullName.Substring($dotClaude.Length).TrimStart('\','/')
    if ($rel -eq "settings.example.json") { Put $_.FullName (Join-Path $ClaudeDir "settings.kit-example.json") }  # settings.json には絶対に触れない
    else { Put $_.FullName (Join-Path $ClaudeDir $rel) }
  }
  $cm = Join-Path $RootPath "CLAUDE.md"
  if (Test-Path -LiteralPath $cm) {
    if ($Project -and -not $Target) { Put $cm (Join-Path $Dest "CLAUDE.md") } else { Put $cm (Join-Path $Dest "CLAUDE.kit-template.md") }
  }
  Write-Host "完了:新規作成 $($script:new) 件、スキップ $($script:skipped) 件(既存。キット版は .kit-new として保存)。"
  Write-Host "次へ:Claude Code を開いて /status を試し、CLAUDE.md のひな形の【】の部分を自分の内容に書き換えてください。"
} finally {
  Remove-Item -LiteralPath $Tmp -Recurse -Force -ErrorAction SilentlyContinue
}

入れたあとの確認

  1. ユーザー用:ls ~/.claude/commands(Windows:dir $HOME\.claude\commands)で status.md などが見えるはずです。
  2. Claude Code を開いて / と入力すると、一覧に status、estimate、session-end が出ます。
  3. /status と入力して、正常に出力されるか確認します。