standard · git:20260908.1717580 · 2026-09-08 · sha256 45e633c6554a1677

standard git:20260908.1717580A

Immutable. This exact content is served forever at /api/v1/blob/45e633c6554a1677.

---
name: standard
description: "Power Platform 包括開発標準。共通認証(auth_helper.py)・.env パラメータ・ソリューション運用など全スキル共通の開発基盤を提供する。アイコン生成・HTML メールは横断参照用の共有ユーティリティとして保持。"
category: architecture
triggers:
  - "Power Platform 開発"
  - "Code Apps"
  - "Power Automate"
  - "フロー作成"
  - "Copilot Studio"
  - "エージェント開発"
  - "ソリューション"
  - "デプロイ"
  - "トラブルシューティング"
  - "生成オーケストレーション"
  - "アイコン作成"
  - "アイコン生成"
  - "icon"
  - "PNG"
  - "SVG"
  - "Pillow"
  - "iconbase64"
  - "WebResource"
  - "テーブルアイコン"
  - "エージェントアイコン"
  - "アプリアイコン"
  - "HTML メール"
  - "メールテンプレート"
  - "HTMLメールデザイン"
  - "リッチメール"
  - "メール通知"
  - "ニュースレター"
  - "レポートメール"
  - "メールフォーマット"
---

# Power Platform 包括開発標準スキル

全スキル共通の開発基盤。このスキルが扱うのは **認証 / .env / ソリューション運用** の 3 テーマのみ。
個別コンポーネントの設計・構築ルールは各専門スキルが持つ(→ [スキルカタログ README](https://github.com/geekfujiwara/CodeAppsDevelopmentStandard/blob/main/.github/skills/README.md))。

## サブリファレンス(必要に応じて参照)

| リファレンス | 内容 |
|---|---|
| [Power Platform 開発標準](references/power-platform-development-standard.md) | 設計原則・Phase 別手順・チェックリストをまとめた全体ガイド |
| [インタラクティブ環境セットアップ](references/interactive-setup.md) | PAC CLI + Dataverse API で `.env` を対話的に構成する手順(**プロジェクト開始時に最初に参照**) |
| [認証リファレンス](references/auth-patterns.md) | auth_helper.py の詳細実装・認証パターン(Dataverse / Flow / **ARM・Azure SQL・Graph・自前 API** のスコープ一覧を含む) |
| [.env サンプル](references/.env.example) | 全フェーズ共通の `.env` テンプレート(各テーマで `.env` にコピーして値を設定) |
| [コネクタ ID カタログ](references/connector-catalog.json) | コネクタの通称(SharePoint / Outlook / SQL 等)→ `shared_xxx` の対応表。`scripts/connector_catalog.py` で解決する |
| [DLP 事前チェック・環境チェック](../admin/SKILL.md) | **実装着手前**に環境が使える状態か(既定環境 / マネージド環境 / Code Apps / MCP / ロール)と、使用コネクタが DLP で使えるかを確認する(`admin` スキル) |
| [Dataverse MCP 登録](references/dataverse-mcp-setup.md) | VS Code / Copilot から Dataverse を直接操作する MCP サーバー登録手順(upsert_skill 等) |
| [ブラウザ自動化方針](references/browser-automation.md) | ブラウザ起動前に **AskUserQuestion で Edge プロファイルを確認**し、回答前は操作しない。ポータル操作は **VS Code 統合 Playwright ブラウザ**(`playwright-browser_navigate` / `playwright-browser_click` / `playwright-browser_type` / `playwright-browser_handle_dialog` 等)を使う。Playwright MCP サーバー・Playwright 単体ブラウザのインストール・起動は禁止 |

### 共有ユーティリティ(複数スキルから参照される横断リファレンス)

以下は単一の専門スキルに属さず複数スキルから参照されるため、共通基盤である standard/references に置いている。各スキルの SKILL.md からリンク済み。

| リファレンス | 主な参照元スキル |
|---|---|
| [アイコン作成](references/icon-creation.md) | dataverse / copilot-studio / model-driven-app / generative-page |
| [HTML メールテンプレート](references/html-email-template.md)・[テンプレートコンポーネント](references/template-components.md) | power-automate / copilot-studio |
| [デザイン言語(トークン/配色/UXパターン選定)](references/design-language.md) | code-apps / power-pages / azure |
| [デモ用 PDF 生成(reportlab / 日本語 CID フォント)](references/demo-pdf-generation.md) | dataverse / code-apps / mcp-server |

## 大前提: 一つのソリューション内に開発

Dataverse テーブル・Code Apps・Power Automate フロー・Copilot Studio エージェントは **すべて同一のソリューション内** に含める。
`.env` の `SOLUTION_NAME` と `PUBLISHER_PREFIX` を全フェーズで統一して使用する。

## 共通基盤: .env と認証

すべてのデプロイスクリプトは以下の **共通パラメータ** と **共通認証** を使用する。
各スキルから個別に認証を設定する必要はない。

### .env 共通パラメータ

**推奨: [インタラクティブセットアップ](references/interactive-setup.md)** で `pac` CLI から対話的に `.env` を構成する(PAC 認証 → 環境選択 → パブリッシャー/ソリューション選択を AskUserQuestion で進行)。

**PAC 認証プロファイルがない場合**(PAC CLI 未インストール・auth create 不可)は、**Power Apps ポータル > 設定(右上の⚙)> セッション詳細** から以下の値を取得して手動設定する(インタラクティブセットアップの Step 2 参照)。

```env
# === 必須(全フェーズ共通)===
DATAVERSE_URL=https://{org}.crm7.dynamics.com/   # セッション詳細: Instance URL
TENANT_ID={your-tenant-id}                       # セッション詳細: Tenant ID
SOLUTION_NAME={YourSolutionName}
PUBLISHER_PREFIX={prefix}

# === オプション ===
PAC_AUTH_PROFILE={YourProfileName}         # PAC CLI 認証プロファイル名
ADMIN_EMAIL=admin@example.com              # Power Automate 通知先
BOT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  # Copilot Studio Bot ID(URL でも可)
```

> **セッション詳細の Environment ID** は `pac auth create --environment {env-id}` でも使用する。

| パラメータ         | 用途                           | 使用フェーズ               |
| ------------------ | ------------------------------ | -------------------------- |
| `DATAVERSE_URL`    | Dataverse Web API のベース URL | 全フェーズ                 |
| `TENANT_ID`        | Azure AD テナント ID           | 全フェーズ                 |
| `ENV_ID`           | Power Platform 環境 ID         | 全フェーズ                           |
| `SOLUTION_NAME`    | ソリューション一意名           | 全フェーズ                 |
| `PUBLISHER_PREFIX` | テーブル・列のプレフィックス   | 全フェーズ                 |
| `PAC_AUTH_PROFILE` | PAC CLI の認証プロファイル名   | Phase 6 (Code Apps)        |
| `AUTH_MODE`        | 認証方式(`device_code` 既定 / `interactive`) | 全フェーズ(条件付きアクセスでデバイスコードがブロックされる場合) |
| `ADMIN_EMAIL`      | フロー通知先メール             | Phase 5 (Power Automate)   |
| `BOT_ID`           | Copilot Studio Bot ID or URL   | Phase 7 (Copilot Studio)   |

### 共通認証: auth_helper.py

`./auth_helper.py` が全デプロイスクリプトの認証を一元管理する。
**同一マシン上では、どのプロジェクトでもデバイスコード認証は最初の1回だけ**で済む 2 層キャッシュ構成。

```
層1: AuthenticationRecord (~/.power-platform-cli/auth_record_{TENANT_ID}.json)
  - アカウント情報(テナント・ユーザー ID)を保存
  - ホームディレクトリ配下の固定パスに永続化(プロジェクトフォルダに依存しない)
  - そのため、別プロジェクトを新規に開いても再度デバイスコード認証を求められない

層2: TokenCachePersistenceOptions (MSAL OS 資格情報ストア)
  - リフレッシュトークン・アクセストークンを永続化(同一マシンで共有)
  - サイレントリフレッシュでデバイスコード不要

初回(このマシンで最初の1回のみ): DeviceCodeCredential → ブラウザで認証 → グローバルキャッシュに保存
2回目以降(別プロジェクトでも): キャッシュから自動取得(認証プロンプトなし)
テナント/アカウント切替時のみ: ~/.power-platform-cli/auth_record.json を削除して再認証
```

条件付きアクセスポリシーでデバイスコード認証(AADSTS50199 等)がブロックされているテナントでは、
`.env` に `AUTH_MODE=interactive` を設定するとローカルブラウザでのインタラクティブ認証
(`InteractiveBrowserCredential`)に切り替わる(既定は `AUTH_MODE=device_code`)。
キャッシュの仕組みは共通のため、モードを切り替えても初回のみ再認証すればよい。

認証の公開 API・パターンの詳細実装は [認証リファレンス](references/auth-patterns.md) を参照。

## 設計・要件ヒアリングは architecture スキルへ

要件ヒアリング → コンポーネント選定 → 全体アーキテクチャ設計は **`architecture` スキル** が担当する。
Phase 1(設計)の最初に必ず `architecture` を参照し、IT に詳しくないユーザーから業務課題を引き出して設計提案・承認を得てから、各専門スキルでの構築に進む。

→ 詳細: [`architecture`](../architecture/SKILL.md) スキル

## 関連スキルと推奨開発フロー

各スキルの説明・カテゴリ・推奨開発フローは **スキルカタログ** に一元化している(standard には重複記載しない)。

→ [Power Platform Skills カタログ(README)](https://github.com/geekfujiwara/CodeAppsDevelopmentStandard/blob/main/.github/skills/README.md)

## クイックリファレンス: standard が扱うテーマ

このスキルが扱うのは以下の **共通基盤テーマのみ**。

| テーマ | 内容 |
|---|---|
| インタラクティブセットアップ | PAC CLI + Dataverse API で `.env` を対話的に構成。環境選択・パブリッシャー/ソリューション選択を AskUserQuestion で進行。詳細は [インタラクティブ環境セットアップ](references/interactive-setup.md) |
| 共通認証 | `auth_helper.py` による 2 層キャッシュ認証(デバイスコードを繰り返さない)。詳細は [認証リファレンス](references/auth-patterns.md) |
| 環境チェック・DLP 事前チェック | **設計確定後・実装着手前に必ず実行**。`admin` スキルの `check_environment.py`(既定環境 / マネージド環境 / Dataverse / Code Apps / MCP / セキュリティ ロール)と `check_dlp.py`(コネクタの利用可否)を実行する。詳細は [admin スキル](../admin/SKILL.md) |
| コネクタ ID の解決 | コネクタ ID(`shared_xxx`)を対話プロンプトで聞かずに確定させる。`scripts/connector_catalog.py --resolve sharepoint` で `shared_sharepointonline` を得る。Code Apps のデータソース追加は [`add_data_source.py`](../code-apps/scripts/add_data_source.py) がこれを使って非対話で完走する |
| Azure リソース操作 | `scripts/azure_helper.py`(ARM / Graph / Azure SQL / 自前 API)。**`az login` 前提の手順は書かない** — 対話が必要でテナント列挙のハングやセッション失効により非対話完走が崩れるため |
| `.env` パラメータ | 全フェーズ共通の環境変数(`DATAVERSE_URL` / `TENANT_ID` / `SOLUTION_NAME` / `PUBLISHER_PREFIX` 等)の一元管理 |
| ソリューション運用 | 全コンポーネントを同一ソリューションに含める。`SOLUTION_NAME` / `PUBLISHER_PREFIX` を全フェーズで統一 |

> **個別の構築ルール・トラブルシューティング**(Copilot Studio・Code Apps・Power Automate・Dataverse・Security Role・AI Builder・Model-Driven App 等)は **各専門スキルの SKILL.md / references** に記載している。standard には重複して持たない。
> どのスキルに何があるかは [スキルカタログ README](https://github.com/geekfujiwara/CodeAppsDevelopmentStandard/blob/main/.github/skills/README.md) を参照。