geekfujiwara/codeappsdevelopmentstandard/power-pages
Claude Code and agent skill by geekfujiwara/codeappsdevelopmentstandard
- community
- ext:[{"type":"hook","description":"Pre/post lifecycle hooks"}]
Checking that the SKILL.md file is still in the repository.
Power Pages Code Site (SPA) の開発・ビルド・デプロイ。pac pages upload-code-site でサイト作成からデプロイまで完結する。
Install
npx vskill@latest install geekfujiwara/codeappsdevelopmentstandard/power-pagesSemi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard
SKILL.md
Power Pages Code Site (SPA) 開発・デプロイスキル
サブリファレンス(必要に応じて参照)
| リファレンス | 内容 | |
|---|---|---|
| upstream 優先構成ガイド | microsoft/power-platform-skills 基準での責務分離・実行順序・刷新方針 | |
| Dataverse クライアント実装 | powerPagesFetch/powerPagesFetchResponse・WebApiErrorCode・OData ヘルパー・ページネーション・サービスレイヤーパターン・Code Apps との対比 | |
| 認証実装 | SSO・サインアウト・ログインボタン・認証ガード・UI フローの実コード一式・サーバー側 IdP/サイト設定・Code Apps との対比 | |
| 認証・認可・テーブル権限(詳細) | EDM 2.0 Code Site の認証/認可/テーブル権限・Web API 共有クライアント・SSO+プロフィール編集・Web ロール管理・テーブル Web API 有効化・site-settings 永続化 | |
| Enhanced Data Model テーブル権限 | EDM 2.0 のテーブル権限設定・3 レイヤー権限・N:N バグ・ワークアラウンド | |
| 運用と落とし穴 | ビルド・デプロイ・サイト再起動・よくあるエラーと解決策 | |
| トラブルシューティング | エラーコード早見表・デバッグ用 Site Settings・既知の無害な警告 | |
| レガシー参照用チェックリスト | 旧構成の参照用チェックリスト | |
| デザインシステム | UI コンポーネント・テーマ・レイアウトの指針 | |
| デザインテンプレート集 | 5 種類の配色テンプレート定義。設計時に提案→選択→適用 | |
| アクセススコープ設計(Self / Account) | Self / Account の比較・scope 値・権限マトリクス・管理者への依頼テンプレート・セキュリティ根拠 | |
| 紐づけ依頼メールフロー | 未紐づけユーザーから管理者への依頼テーブル設計・Power Automate フロー定義 | |
| 管理者用紐づけ画面 | contact ↔ account を管理者が割り当てる Code Apps 画面の仕様(実装は code-apps/templates/account-link-admin) |
Dataverse 接続と認証の実装方法はこのファイルで概要を説明し、完全なサンプルコードは上記 References にまとめている。
刷新版の構成原則(upstream 優先)
このスキルは microsoft/power-platform-skills/plugins/power-pages の以下 4 スキルを優先参照して構成する。
| 領域 | upstream スキル | このスキル内の着地 | |
|---|---|---|---|
| 認証・認可 | setup-auth | references/authentication.md | |
| Web ロール | create-webroles | references/enhanced-data-model-permissions.md | |
| Dataverse CRUD | integrate-webapi | references/dataverse-client.md | |
| 権限監査 | audit-permissions | reviews/* + scripts/review_pre_deploy.py |
標準実行順序(刷新後)
- デプロイ基盤準備(
.powerpages-site作成) - Web ロール整備
- 認証導線(SSO/ログイン/ログアウト)整備
- Dataverse Web API CRUD 実装
- 権限監査(ロール・テーブル権限整合)
⚠️ デプロイ後の必須ステップ:pac pages upload-code-siteでテーブル権限 YAML をデプロイしても、type=18 の content JSON 内adx_entitypermission_webroleが空のまま残り、Web ロール紐付けが効かない。デプロイ直後にpython scripts/setup_permissions.pyを実行して content のadx_entitypermission_webroleを書き込み、review_pre_deploy.pyのチェック 3.7 が ✅ になることを確認する(さもないと管理者を含む全ユーザーが 403)。詳細は教訓 14。
詳細な責務分離と判断基準は upstream 優先構成ガイド を正本として扱う。
microsoft/power-platform-skills 比較(認証・認可 vs Dataverse CRUD)
| 観点 | ユーザー認証・Webロール認可 | Dataverse Web API 連携 CRUD | |
|---|---|---|---|
| 上流スキル | setup-auth + create-webroles | integrate-webapi | |
| 主目的 | ログイン/ログアウト、認証状態判定、ロールベース UI 制御 | /_api 経由の読み書き(powerPagesFetch/powerPagesFetchResponse、OData ヘルパー) | |
| 主な成果物 | authService.ts(AUTH_PROVIDERS 配列)・use-auth.ts・ログイン UI・Web ロール YAML(.powerpages-site/web-roles/) | powerPagesApi.ts、テーブル別 service/hooks、CRUD 画面 | |
| サーバー側必須設定 | IdP site settings、Web ロール、テーブル権限へのロール紐付け | テーブル権限(type=18 + adx_entitypermission_webrole)、必要時のみ Webapi 設定 | |
| 失敗時の代表症状 | ログインループ、/profile 強制遷移、未認証判定ミス | 401(90040107) / 403 / 404(9004010C, 9004010D) | |
| 依存関係 | 先に認証導線を整える(ユーザー実体: contact) | 認証済みセッション Cookie 前提で CRUD を実行 |
推奨適用順:
setup-authで認証導線を整備create-webrolesでロールを確定integrate-webapiで CRUD 実装audit-permissionsで権限妥当性を最終監査
核心原則
- `pac pages upload-code-site` がサイト作成とデプロイの両方を行う — API でサイトを事前作成する必要はない
- 初回は Inactive Sites に作成される → PP API (
2022-03-01-preview) でactivate_site.pyを使ってアクティブ化 - デプロイは upload-code-site → relink → restart の3ステップ —
upload-code-siteは既存テーブル権限の Web ロール紐付けを消すため、毎回scripts/relink_table_permissions.py(または統合のscripts/deploy_site.py)で再付与する(教訓 15)。`npm run deploy`(build && upload-code-site だけ)で終わらせない - Post-Upload Fix は不要 —
upload-code-siteが header/footer/page を正しく構成する - `.powerpages-site/` は upload-code-site が自動管理する — ただし
site-settings/YAML は手動追加して永続化できる(下記参照) - `adx_website` レコードは絶対に削除しない — EDM 2.0 でもランタイムが起動時に参照する
- 環境のクリーンアップ時は PP API のサイト一覧と照合してから削除する — 誤削除で 500 エラー
- `credentials: "same-origin"` を使う —
"include"ではない(same-site Cookie 認証) - powerpagecomponent type=18 には `powerpagesitelanguageid` が必須 — 未設定だと 404 になる
- 報告者・作成者は Contact Lookup で追跡する — Power Pages では
createdbyはアプリケーションユーザーになるため使えない。ログインユーザーの Contact 情報を自動取得し入力不要にする(教訓 19) - デザイン系の変更は必ず `npm run dev`(localhost)で見た目を確認してから本番デプロイする — 本番デプロイ → ブラウザ確認 → 再デプロイのループは 1 サイクルあたり数十秒〜数分かかり非効率。レイアウト・配色・レスポンシブ崩れは localhost で先に潰し、本番デプロイは最終確認のみに留める(教訓 20)。ただし Power Pages 本体のテーマ CSS(Bootstrap 既定の見出し色など)はローカルには存在せず本番でのみ衝突しうるため、色指定は見出し要素に明示的な
colorを必ず設定し、デプロイ後の最終確認も省略しない(詳細は トラブルシューティング) - 取引先企業(`account`)配下の「業務テーブル」は Account スコープ(`756150002`)で権限を切る — 全件公開になるグローバルアクセスで逃げない。子テーブル権限(
accountrelationship+ create)を作り、POST 時に account Lookup を@odata.bindする。readは通るのにcreateだけ 403 になる典型パターンの原因(教訓 21) - `account` テーブル自身に Account スコープを設定してはいけない — Web API が 500(
9004010A)を返し、会社名の参照も子レコードの bind も一切できなくなる。正解は Contact スコープ(`756150001`)+ `contact_customer_accounts`。これで「自分のparentcustomeridが指す 1 件」だけが返る(実機検証済み) - Lookup バインドには参照する側・される側「両方」の 追加(Append)と 追加先(AppendTo)が要る — 片側だけでは 403。
You don't have permission to associate or disassociate table X to Yが出たら、まず不足している側の権限を疑う(実機で 4 通りの真理値表を検証済み) - account Lookup を省いた POST は 403 ではなく 201 で通ってしまう — できるのは誰にも見えない孤立レコード。テーブル権限では防げないため、クライアント側で account 未取得なら作成 UI を出さない+サーバー側(フロー等)で
nullを検知する二段構えにする(実機検証済み)
ワークフロー
⚠️ `PAGES_SITE_NAME` を `.env` に必ず設定する。未設定だと最終更新のサイトが暗黙で選ばれ、別サイトに権限を書き込む事故が起きる。
⚠️ **npm run build && pac pages upload-code-siteだけで終わらせると、既存テーブル権限のWeb ロール紐付けが消えて全件 403 になる**(教訓 15)。relink_table_permissions.pyを毎回実行するか、deploy_site.pyで一括実行すること。両スクリプトともハードコードなし・すべて.env管理(DATAVERSE_URL/ENV_ID/PAGES_WEBSITE_ID/PP_SUBDOMAIN/RELINK_WEBROLE_NAMES/PORTAL_DIR)。
アクティベーション詳細
初回の pac pages upload-code-site はサイトを Inactive Sites に作成する。 アクティブ化は Power Platform API (api-version=2022-03-01-preview) で行う。
| パラメータ | 取得方法 | |
|---|---|---|
ENV_ID | .env | |
PAGES_SITE_NAME | .env / powerpages.config.json の siteName | |
PAGES_SUBDOMAIN | .env / ユーザー指定 | |
dataverseOrganizationId | GET /api/data/v9.2/organizations?$select=organizationid | |
websiteRecordId | GET /api/data/v9.2/powerpagesites から name で検索 |
⚠️ API バージョン注意: 2022-03-01-preview を使用すること。2024-10-01 ではアクティベーションが正しく動作しない。
前提条件・事前確認(会話の最初に 1 回だけ)
作業開始前に、standard の共通契約に加え、 1 回の AskUserQuestion で次をまとめて確認する。
| # | 質問 | 合格条件 | |
|---|---|---|---|
| 1 | 対象環境、サイト名、subdomain、サイト種別は何か | 新規 / 更新、公開 URL、開発・テスト・本番の対象が確定している | |
| 2 | Power Pages のライセンス / capacity は利用可能か | 認証ユーザー / 匿名ユーザーの想定数と課金方式を確認している | |
| 3 | 認証方式とアクセス scope は何か | anonymous / authenticated、Self / Account、IdP、Web role、table permission を承認済みである | |
| 4 | サイトと Dataverse を変更する担当者は誰か | Code Site の upload、site settings、Web role、table permission を変更できる担当者を記録している | |
| 5 | 公開データとセキュリティ検証は何か | 公開列、PII、未認証時の期待値、403 / 200 のテスト担当者を確定している | |
| 6 | デプロイ後の relink / restart を実施できるか | deploy_site.py または upload → relink → restart の一連を実行することで合意している |
環境全体の System Administrator を既定にせず、サイト管理と対象 Dataverse 構成に必要な 権限を持つ担当者を使用する。認証、scope、Web role、table permission のいずれかが未確定なら 外部公開へ進まない。
| ツール | バージョン | 用途 | |
|---|---|---|---|
pac (Power Platform CLI) | 1.44+ | サイト作成・アップロード | |
node + npm | 18+ | SPA ビルド | |
| Python 3 | 3.10+ | デプロイスクリプト(任意) |
pac CLI 注意: サブコマンドはpac pages(例:pac pages list,pac pages upload-code-site)。pac power-pagesは無効。pac pages helpでコマンド一覧を確認できる。
.env パラメータ
プロジェクト構造(公式準拠 / upstream 推奨)
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking.github/skills/power-pages/SKILL.md
Popularity
- Repository stars
- 60
- Repository forks
- 20
- 7-day trend score
- 21
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 2 Sep 2026, 2 months ago.
Extension points
hookPre/post lifecycle hooks
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/geekfujiwara/codeappsdevelopmentstandard/power-pages)