/update-store
ストア情報の更新自動化 — スクリーンショット撮影(シミュレーター × モック画面 × Marionette MCP)とメタデータテキスト更新。ストア更新、スクショ更新、App Store / Google Play のメタデータ更新、リリースノート作成の際に使用すること。
$ npx -y skills add K9i-0/ccpocket --skill update-store --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/update-store
Context preview
The summary Claude sees to decide when to auto-load this skill.
ストア情報の更新自動化 — スクリーンショット撮影(シミュレーター × モック画面 × Marionette MCP)とメタデータテキスト更新。ストア更新、スクショ更新、App Store / Google Play のメタデータ更新、リリースノート作成の際に使用すること。
SKILL.md
update-store.SKILL.mdname: update-store
description: ストア情報の更新自動化 — スクリーンショット撮影(シミュレーター × モック画面 × Marionette MCP)とメタデータテキスト更新。ストア更新、スクショ更新、App Store / Google Play のメタデータ更新、リリースノート作成の際に使用すること。
Update Store
ストアスクリーンショットの自動撮影・合成と、メタデータテキスト(description, release_notes等)の更新を行う。
前提
- デバッグモードのアプリにはストアスクショ用のカスタムエクステンション(`ccpocket.navigateToStoreScenario`)が登録済み
- Marionette MCPの`call_custom_extension`が使用可能
- ImageMagickがインストール済み(`compose.sh`で使用)
- **sim-tap.swift**: 同梱のSwiftスクリプト(`scripts/sim-tap.swift`)。macOSアクセシビリティAPIでSimulatorのネイティブダイアログ(通知許可等)をラベル指定でタップできる
ワークフロー
Step 1: バージョン確認 & 変更分析
# 最新リリースタグ
git tag -l 'ios/v*' --sort=-v:refname | head -1
# 現在のバージョン
grep '^version:' apps/mobile/pubspec.yaml
# 前回リリースからの変更コミット
git log $(git tag -l 'ios/v*' --sort=-v:refname | head -1)..HEAD --oneline -- apps/mobile/
CHANGELOGの最新セクションも確認:
head -80 CHANGELOG.md
変更内容を分析し、UI変更があったかどうかを判断する。
Step 2: 更新対象の選択
AskUserQuestion(multiSelect)で更新対象を確認する。 変更分析結果に基づいて推奨をdescriptionに含める。
**iPhone スクリーンショット(8シナリオ):**
| Key | シナリオ名 | 内容 | テーマ | |-----|-----------|------|--------| | `01_session_list` | Session List (Recent) | ホーム画面(名前付きセッション) | ライト | | `02_approval_list` | Session List | 承認待ち一覧(3セッション) | ライト | | `03_multi_question` | Multi-Question Approval | 質問UI(3問) | ライト | | `04_markdown_input` | Markdown Input | Markdown箇条書き入力 | ライト | | `05_image_attach` | Image Attach | 画像添付UI | ライト | | `06_git_diff` | Git Diff | Diff表示画面 | ライト | | `07_new_session` | New Session | 新規セッションシート | ライト | | `08_dark_theme` | Session List | 承認待ち一覧(ダークモード訴求) | ダーク |
**iPad スクリーンショット(5シナリオ):**
| Key | シナリオ名 | 内容 | テーマ | |-----|-----------|------|--------| | `01_workspace_overview` | Workspace Overview | 左一覧 + 中央チャット + 右Git | ライト | | `02_workspace_explorer` | Workspace Explorer | 左一覧 + 中央チャット + 右Explorer | ライト | | `03_approval_context` | Approval In Context | 左一覧 + 中央承認UI | ライト | | `04_approval_queue` | Approval Queue | 複数の承認待ちセッションを同時に確認 | ライト | | `05_dark_workspace` | Dark Workspace | 3-pane ワークスペースのダークテーマ訴求 | ダーク |
**メタデータテキスト:**
| ファイル | 対象 | |---------|------| | `fastlane/metadata/en-US/release_notes.txt` | iOS リリースノート (EN) | | `fastlane/metadata/ja/release_notes.txt` | iOS リリースノート (JA) | | `fastlane/metadata/en-US/description.txt` | App Store 説明文 (EN) | | `fastlane/metadata/ja/description.txt` | App Store 説明文 (JA) | | `fastlane/metadata/en-US/promotional_text.txt` | プロモーションテキスト (EN) | | `fastlane/metadata/android/en-US/full_description.txt` | Play Store 説明文 (EN) | | `fastlane/metadata/android/ja-JP/full_description.txt` | Play Store 説明文 (JA) | | `fastlane/metadata/android/en-US/changelogs/default.txt` | Play Store リリースノート (EN) | | `fastlane/metadata/android/ja-JP/changelogs/default.txt` | Play Store リリースノート (JA) |
上記のファイルパスは `apps/mobile/` からの相対パス。
Step 3: メタデータテキスト更新(選択された場合)
CHANGELOGの内容をベースに:
- **release_notes** — CHANGELOG最新セクションを簡潔にまとめる
- **description** — 新機能に応じて追記・修正
- **promotional_text** — キャッチコピーを更新
更新後、AskUserQuestionで内容確認を挟む。
Step 4: iPhone スクリーンショット撮影(選択された場合)
4-1. デバイス確認 & シミュレーター起動
xcrun simctl list devices available | grep -E "iPhone 17|iPad Pro.*13"
**ソフトウェアキーボードを無効化**(全デバイス共通、セッション冒頭で1回実行):
defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool true
これによりソフトウェアキーボードが表示されなくなり、日本語キーボードがスクショに映り込む問題を防止する。
iPhone / iPad ともに **既存シミュレーターを再利用するのがデフォルト**。毎回 `erase` すると通知・音声認識・マイク等のネイティブダイアログが再出現し、スクショフローが不安定になる。通常はアプリの再起動と向き調整だけで十分。
iPhone 17 Proシミュレーターを起動し、ライトモードに設定:
xcrun simctl boot "iPhone 17 Pro" 2>/dev/null || true
xcrun simctl ui booted appearance light
**英語ロケール設定**(ストアスクショは en-US 基準のため):
# iPhone・iPad の両デバイスIDで実行
for ID in <iPhone_ID> <iPad_ID>; do
xcrun simctl spawn $ID defaults write -g AppleLanguages "(en-US)"
xcrun simctl spawn $ID defaults write -g AppleLocale "en_US"
done
# 反映には再起動が必要
for ID in <iPhone_ID> <iPad_ID>; do
xcrun simctl shutdown $ID
done
sleep 2
for ID in <iPhone_ID> <iPad_ID>; do
xcrun simctl boot $ID
done
これによりアプリ内の標準コンポーネント(DatePicker、システムダイアログ等)も英語化される。 アプリ内文言はカスタムエクステンション `ccpocket.setLocale` で別途 `en` に切り替える。
**ステータスバーを Apple 純正風に固定**(9:41 / WiFi / 100% 充電 / キャリア非表示):
for ID in <iPhone_ID> <iPad_ID>; do
xcrun simctl status_bar $ID override \
--time "9:41" \
--dataNetwork wifi \
--wifiMode active \
--wifiBars 3 \
--cellularMode notSupported \
--batteryState charged \
--batteryLevel 100
done**iPad の日付について(既知の制限)**: iPad のステータスバーには時刻に加えて日付(例: `Tue Apr 21`)が表示されるが、`xcrun simctl status_bar --time` は **時刻部分のみ反映**で日付は変更不可(Xcode 26.1 時点で ISO 日付を渡してもエラーになる)。
Apple 純正アプリのスクショは `Apr 1` 等になっているが、現状はシミュレーターのシステム日付がそのまま出る。完全一致が必要な場合のみ、シミュレーター内 `Settings > General > Date & Time > Set Automatically OFF` で手動設定する。通常は許容して進める。
参考:
- [Apple Developer Forums - Can't change time in Xcode Simulator](https://developer.apple.com/forums/thread/720610)
- [ControlRoom Issue #205](https://github.com/twostraws/ControlRoom/issues/205)
4-2. アプリ起動 & Marionette接続
dart-mcp `launch_app` でアプリを起動:
root: /Users/k9i-mini/Workspace/ccpocket/apps/mobile
device: <iPhone 17 Pro の device ID>
起動後、dart-mcp `list_running_apps` でDTD URIを取得し、`connect_dart_tooling_daemon` で接続。
dart-mcp `get_app_logs` でVM Service URIを取得し、marionette `connect` で接続。
4-3. 各シナリオのスクショ撮影
**テーマ設定**: アプリ起動後、カスタムエクステンションでテーマを切り替える(01〜07はライトテーマ):
- marionette `call_custom_extension`: `ccpocket.setTheme` / `{ "theme": "light" }`
- 値: `light`, `dark`, `system`
**言語設定**: 必要に応じてカスタムエクステンションで言語を切り替える:
- marionette `call_custom_extension`: `ccpocket.setLocale` / `{ "locale": "en" }`
- 値: `en`, `ja`, `zh`, `""` (システムデフォルト)
選択された各シナリオに対して:
1. **遷移**: marionette `call_custom_extension`
- extension: `ccpocket.navigateToStoreScenario`
- params: `{ "scenario": "<シナリオ名>" }`
2. **待機**: 2-3秒(描画完了を待つ。New SessionやImage Attachなど複雑なUIは3秒推奨)
3. **撮影**:
xcrun simctl io booted screenshot apps/mobile/fastlane/screenshots/en-US/<key>.png
4. **戻る**: marionette `
Read more
name: update-store description: ストア情報の更新自動化 — スクリーンショット撮影(シミュレーター × モック画面 × Marionette MCP)とメタデータテキスト更新。ストア更新、スクショ更新、App Store / Google Play のメタデータ更新、リリースノート作成の際に使用すること。
Update Store
ストアスクリーンショットの自動撮影・合成と、メタデータテキスト(description, release_notes等)の更新を行う。
前提
- デバッグモードのアプリにはストアスクショ用のカスタムエクステンション(`ccpocket.navigateToStoreScenario`)が登録済み
- Marionette MCPの`call_custom_extension`が使用可能
- ImageMagickがインストール済み(`compose.sh`で使用)
- **sim-tap.swift**: 同梱のSwiftスクリプト(`scripts/sim-tap.swift`)。macOSアクセシビリティAPIでSimulatorのネイティブダイアログ(通知許可等)をラベル指定でタップできる
ワークフロー
Step 1: バージョン確認 & 変更分析
# 最新リリースタグ git tag -l 'ios/v*' --sort=-v:refname | head -1 # 現在のバージョン grep '^version:' apps/mobile/pubspec.yaml # 前回リリースからの変更コミット git log $(git tag -l 'ios/v*' --sort=-v:refname | head -1)..HEAD --oneline -- apps/mobile/
CHANGELOGの最新セクションも確認:
head -80 CHANGELOG.md
変更内容を分析し、UI変更があったかどうかを判断する。
Step 2: 更新対象の選択
AskUserQuestion(multiSelect)で更新対象を確認する。 変更分析結果に基づいて推奨をdescriptionに含める。
**iPhone スクリーンショット(8シナリオ):**
| Key | シナリオ名 | 内容 | テーマ | |-----|-----------|------|--------| | `01_session_list` | Session List (Recent) | ホーム画面(名前付きセッション) | ライト | | `02_approval_list` | Session List | 承認待ち一覧(3セッション) | ライト | | `03_multi_question` | Multi-Question Approval | 質問UI(3問) | ライト | | `04_markdown_input` | Markdown Input | Markdown箇条書き入力 | ライト | | `05_image_attach` | Image Attach | 画像添付UI | ライト | | `06_git_diff` | Git Diff | Diff表示画面 | ライト | | `07_new_session` | New Session | 新規セッションシート | ライト | | `08_dark_theme` | Session List | 承認待ち一覧(ダークモード訴求) | ダーク |
**iPad スクリーンショット(5シナリオ):**
| Key | シナリオ名 | 内容 | テーマ | |-----|-----------|------|--------| | `01_workspace_overview` | Workspace Overview | 左一覧 + 中央チャット + 右Git | ライト | | `02_workspace_explorer` | Workspace Explorer | 左一覧 + 中央チャット + 右Explorer | ライト | | `03_approval_context` | Approval In Context | 左一覧 + 中央承認UI | ライト | | `04_approval_queue` | Approval Queue | 複数の承認待ちセッションを同時に確認 | ライト | | `05_dark_workspace` | Dark Workspace | 3-pane ワークスペースのダークテーマ訴求 | ダーク |
**メタデータテキスト:**
| ファイル | 対象 | |---------|------| | `fastlane/metadata/en-US/release_notes.txt` | iOS リリースノート (EN) | | `fastlane/metadata/ja/release_notes.txt` | iOS リリースノート (JA) | | `fastlane/metadata/en-US/description.txt` | App Store 説明文 (EN) | | `fastlane/metadata/ja/description.txt` | App Store 説明文 (JA) | | `fastlane/metadata/en-US/promotional_text.txt` | プロモーションテキスト (EN) | | `fastlane/metadata/android/en-US/full_description.txt` | Play Store 説明文 (EN) | | `fastlane/metadata/android/ja-JP/full_description.txt` | Play Store 説明文 (JA) | | `fastlane/metadata/android/en-US/changelogs/default.txt` | Play Store リリースノート (EN) | | `fastlane/metadata/android/ja-JP/changelogs/default.txt` | Play Store リリースノート (JA) |
上記のファイルパスは `apps/mobile/` からの相対パス。
Step 3: メタデータテキスト更新(選択された場合)
CHANGELOGの内容をベースに:
- **release_notes** — CHANGELOG最新セクションを簡潔にまとめる
- **description** — 新機能に応じて追記・修正
- **promotional_text** — キャッチコピーを更新
更新後、AskUserQuestionで内容確認を挟む。
Step 4: iPhone スクリーンショット撮影(選択された場合)
4-1. デバイス確認 & シミュレーター起動
xcrun simctl list devices available | grep -E "iPhone 17|iPad Pro.*13"
**ソフトウェアキーボードを無効化**(全デバイス共通、セッション冒頭で1回実行):
defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool true
これによりソフトウェアキーボードが表示されなくなり、日本語キーボードがスクショに映り込む問題を防止する。
iPhone / iPad ともに **既存シミュレーターを再利用するのがデフォルト**。毎回 `erase` すると通知・音声認識・マイク等のネイティブダイアログが再出現し、スクショフローが不安定になる。通常はアプリの再起動と向き調整だけで十分。
iPhone 17 Proシミュレーターを起動し、ライトモードに設定:
xcrun simctl boot "iPhone 17 Pro" 2>/dev/null || true xcrun simctl ui booted appearance light
**英語ロケール設定**(ストアスクショは en-US 基準のため):
# iPhone・iPad の両デバイスIDで実行 for ID in <iPhone_ID> <iPad_ID>; do xcrun simctl spawn $ID defaults write -g AppleLanguages "(en-US)" xcrun simctl spawn $ID defaults write -g AppleLocale "en_US" done # 反映には再起動が必要 for ID in <iPhone_ID> <iPad_ID>; do xcrun simctl shutdown $ID done sleep 2 for ID in <iPhone_ID> <iPad_ID>; do xcrun simctl boot $ID done
これによりアプリ内の標準コンポーネント(DatePicker、システムダイアログ等)も英語化される。 アプリ内文言はカスタムエクステンション `ccpocket.setLocale` で別途 `en` に切り替える。
**ステータスバーを Apple 純正風に固定**(9:41 / WiFi / 100% 充電 / キャリア非表示):
for ID in <iPhone_ID> <iPad_ID>; do
xcrun simctl status_bar $ID override \
--time "9:41" \
--dataNetwork wifi \
--wifiMode active \
--wifiBars 3 \
--cellularMode notSupported \
--batteryState charged \
--batteryLevel 100
done**iPad の日付について(既知の制限)**: iPad のステータスバーには時刻に加えて日付(例: `Tue Apr 21`)が表示されるが、`xcrun simctl status_bar --time` は **時刻部分のみ反映**で日付は変更不可(Xcode 26.1 時点で ISO 日付を渡してもエラーになる)。
Apple 純正アプリのスクショは `Apr 1` 等になっているが、現状はシミュレーターのシステム日付がそのまま出る。完全一致が必要な場合のみ、シミュレーター内 `Settings > General > Date & Time > Set Automatically OFF` で手動設定する。通常は許容して進める。
参考:
- [Apple Developer Forums - Can't change time in Xcode Simulator](https://developer.apple.com/forums/thread/720610)
- [ControlRoom Issue #205](https://github.com/twostraws/ControlRoom/issues/205)
4-2. アプリ起動 & Marionette接続
dart-mcp `launch_app` でアプリを起動:
root: /Users/k9i-mini/Workspace/ccpocket/apps/mobile device: <iPhone 17 Pro の device ID>
起動後、dart-mcp `list_running_apps` でDTD URIを取得し、`connect_dart_tooling_daemon` で接続。
dart-mcp `get_app_logs` でVM Service URIを取得し、marionette `connect` で接続。
4-3. 各シナリオのスクショ撮影
**テーマ設定**: アプリ起動後、カスタムエクステンションでテーマを切り替える(01〜07はライトテーマ):
- marionette `call_custom_extension`: `ccpocket.setTheme` / `{ "theme": "light" }`
- 値: `light`, `dark`, `system`
**言語設定**: 必要に応じてカスタムエクステンションで言語を切り替える:
- marionette `call_custom_extension`: `ccpocket.setLocale` / `{ "locale": "en" }`
- 値: `en`, `ja`, `zh`, `""` (システムデフォルト)
選択された各シナリオに対して:
1. **遷移**: marionette `call_custom_extension`
- extension: `ccpocket.navigateToStoreScenario`
- params: `{ "scenario": "<シナリオ名>" }`
2. **待機**: 2-3秒(描画完了を待つ。New SessionやImage Attachなど複雑なUIは3秒推奨)
3. **撮影**:
xcrun simctl io booted screenshot apps/mobile/fastlane/screenshots/en-US/<key>.png
4. **戻る**: marionette `
CC Pocket is a mobile and desktop app for controlling Codex and Claude coding-agent sessions.
Other skills on ccpocket.
- /codex-guide
Codex の使い方、CLI/app/IDE、rules・hooks・AGENTS.md・skills・subagents・config などを案内する。Codex や OpenAI 製品の仕様を答える前に必ず公式ドキュメントを確認し、rules/approval は `codex execpolicy check` で実検証すること。
Open skill - /flutter-ui-design
Flutter UI実装のアーキテクチャ規約・コンポーネント分割・状態管理ガイド(Bloc/Cubit版)
Open skill - /flutter-upgrade
Flutter SDKバージョンアップグレード対応。新バージョンのリリースノート・Breaking Changes調査、コードベース影響分析、mise/CI/Shorebird含むプロジェクト全体の対応タスクリスト作成と実行。「Flutterアップグレード」「Flutter X.Y.Zがリリースされた」「Flutter最新化」「Flutter更新」と言われたとき、またはFlutterの新バージョンについて言及されたときに使用する。
Open skill - /merge
ブランチをメインにマージしてお掃除する
Open skill - /mobile-automation
MCP (dart-mcp + Marionette) を使ったFlutterアプリのE2E自動化・UI検証ガイド。シミュレーターでのUI動作確認、モックプレビュー検証、Bridge経由のE2Eテスト、スクリーンショット撮影など、アプリの動作検証が必要なときに使う。「動作確認して」「UIを検証して」「E2Eテスト」「シミュレーターで確認」「モックで確認」と言われたときや、UI変更後の検証フェーズで使用すること。
Open skill - /playwright-cli
Automates browser interactions for web testing, form filling, screenshots, and data extraction. Use when the user needs to navigate websites, interact with web pages, fill forms, take screenshots, test web applications, or extract information from web pages.
Open skill

