ワンクリックで
code-apps
Power Apps Code Apps(コードファースト)の初期化・Dataverse 接続・UI 設計・開発・デプロイ。TypeScript + React + Tailwind CSS で開発する。CSP 構成・メール送信パターンも含む。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Power Apps Code Apps(コードファースト)の初期化・Dataverse 接続・UI 設計・開発・デプロイ。TypeScript + React + Tailwind CSS で開発する。CSP 構成・メール送信パターンも含む。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Dataverse テーブル設計・構築・デモデータ投入・セキュリティロール作成。ソリューション作成からテーブル・リレーション・ローカライズ・権限設定まで Python スクリプトで一括構築する。
Power Platform 包括開発標準。共通認証(auth_helper.py)・.env パラメータ・ソリューション運用など全スキル共通の開発基盤を提供する。アイコン生成・HTML メールは横断参照用の共有ユーティリティとして保持。
Copilot Studio の「全く新しいアーキテクチャ」(cliagent テンプレート)エージェントを Dataverse Web API だけで完全自動構築する。UI 手動作成不要。Bot 作成・Instructions/モデル/メモリ設定・フラット Python スキル添付・アイコン登録・公開までスクリプトで完結。MCP サーバー(Dataverse / Work IQ 等)のツール追加は Copilot Studio UI での手動作業とする。
Azure 上のリファレンスアーキテクチャを選定し、テナントのセキュリティガバナンスに準拠した構成で構築・デプロイ・検証する。組織ポリシー(公衆ネットワークアクセス禁止・共有キー禁止・MFA 必須等)の下でも動作する構成を、Private Link / Managed Identity / VNet 統合を用いて実装する。
Power Pages Code Site (SPA) の開発・ビルド・デプロイ。pac pages upload-code-site でサイト作成からデプロイまで完結する。
Power Platform ソリューションの全体アーキテクチャを設計する。Copilot Studio / Power Automate / Code Apps / Power Pages / AI Builder の使い分け判断、コンポーネント選定、統合パターンを決定する。
| name | code-apps |
| description | Power Apps Code Apps(コードファースト)の初期化・Dataverse 接続・UI 設計・開発・デプロイ。TypeScript + React + Tailwind CSS で開発する。CSP 構成・メール送信パターンも含む。 |
| category | ui |
| triggers | ["Code Apps","power-apps init","power-apps push","add-data-source","DataverseService","Tailwind","shadcn","React","TypeScript","Vite","Code Apps デプロイ","nameUtils パッチ","日本語サニタイズ","Code Apps デザイン","UI 設計","コンポーネント選定","画面レイアウト","ギャラリー","テーブル","カンバン","ガントチャート","ダッシュボード","フォーム","デザイン例","iframe","embed","埋め込み","CSP","Content Security Policy","frame-src","connect-src","メール送信","PDF添付","PDF生成","htmlToPdfBase64","ContentBytes","base64","html2canvas","jsPDF","日本地図","地図","マップ","JapanMap","add-flow","list-flows","フロー呼び出し","フロー連携","AI Builder","詳細画面","詳細ページ","detail page","RecordListPanel","レコード一覧パネル","インライン編集","executeAsync","dataSourcesInfo","Copilot Studio コネクタ","Copilot Studio 直接","ExecuteCopilotAsyncV2","shared_microsoftcopilotstudio","エージェント呼び出し","会話継続","conversationId","デプロイして","プッシュして","ディープリンク","deep link","queryParams","パラメータ渡し","URL パラメータ"] |
Power Apps Code Apps(コードファースト)を TypeScript + React + Tailwind CSS で開発する。 UI 設計・CSP 構成・メール送信パターンまで Code Apps 開発の全領域をカバーする統合スキル。
[!NOTE] Microsoft Learn の現行概要では、Code Apps は React / Vue などの SPA を Power Apps 上でホストする仕組み とされている。 この開発標準はその中でも React ベース実装に標準化したガイドであり、他フレームワーク一般論ではなく、このリポジトリのテンプレートと運用実績に基づく推奨事項をまとめている。
Code Apps 開発は 設計 → 初回デプロイ → データソース接続 → 改善デプロイ の順に進む。
[!NOTE] サブエージェント並行実行パターン:
architectureスキルで Code Apps が確定し、dataverseスキルで スキーマが承認されたタイミングで、このスキルがサブエージェントとして起動される。 Dataverse 構築(--skip-localizeフェーズ)と Code Apps 開発(scaffold → deploy → add-data-source)は 並行して進める。Dataverse 構築が先に終わったら--localize-onlyでローカライズ&デモデータ投入。
[設計] ① デザインテンプレートを選ばせる(6種・プレビュー付き)
② 画面設計(design-pattern)→ ユーザー承認
│
[§2 初回デプロイ]
<<<<<<< HEAD
③ テンプレート scaffold + npm install
=======
③ テンプレート scaffold + npm install(Dataverse 構築 Phase 2 と並行して即着手/VS Code では Code Apps サブエージェントとして起動)
>>>>>>> origin/main
④ pac code init(power.config.json 生成)
⑤ vite.config.ts 必須設定の確認 / .env 設定
⑥ npm run deploy(build + pac code push)→ Dataverse 接続確立
│
[§3 データソース接続]
⑦ pac code add-data-source(toggle_table_lang.py で日本語回避)
⑧ dataSourcesInfo は re-export / getClient(dataSourcesInfo)
│
[§4 改善デプロイ]
⑨ src/ 実装 → npm run build → pac code push(反復)
| 章 | 内容 |
|---|---|
| §1 概要(本章) | 標準ワークフロー全体像・大前提・設計フェーズ(デザインテンプレート選択) |
| §2 初回デプロイ | 環境前提・scaffold・init・初回 build & push |
| §3 データソース接続 | add-data-source・dataSourcesInfo・Lookup 名前解決 |
| §4 改善デプロイ | 開発時の必須ルール・再デプロイ・プレデプロイレビュー |
| §5 リファレンス | 全リファレンス索引・技術スタック・.env |
[!NOTE] 本スキル内のコード例は
{prefix}_tablename等のプレースホルダーで汎用化されています。 実際のテーブル名・型名は、あなたのプロジェクトのエンティティに読み替えてください。 パターン(Lookup 名前解決、SDK ラッパー、useMemo マップ等)はそのまま適用できます。
コードを書く前に、デザインテンプレートの選択と UI 設計を行い、ユーザーの承認を得ること。 手順:
ThemeProvider + ModeToggle)。.github/ISSUE_TEMPLATE/ にコピーして Issue を作成する。styles/index.pcss に適用してから実装する(変数一式・適用手順は デザインテンプレート集)。CRUD 画面は CRUD UI 標準パターン に必ず従う: 一覧は行/カード全体をクリックして詳細を開く(目アイコン等の小さなクリック領域は使わない)、詳細の編集はモーダルではなくインライン編集モード、行内の削除・クイック操作は
e.stopPropagation()、削除確認はブラウザのconfirm()ではなくモーダル(useConfirm()/ AlertDialog)。指示がなくても、テーブルごとに「一覧・詳細(インライン編集)・作成・削除」を標準実装すること。
設計で提示する内容: 選択テンプレート、画面一覧(ページ名・ルート)、各画面のコンポーネント構成、カラム定義、Lookup 名前解決方法(
_xxx_value+useMemoMap)、ナビゲーション構造。
大前提(ソリューション運用): Dataverse テーブル・Code Apps・Power Automate・Copilot Studio は同一ソリューション内に開発し、
.envのSOLUTION_NAME/PUBLISHER_PREFIXを全フェーズで統一する。詳細はstandardスキル。
1. Power Platform 管理センターで「コード アプリを許可する」がオン
→ オフの場合: CodeAppOperationNotAllowedInEnvironment (403) エラー
2. PAC CLI 認証プロファイルが対象環境用に作成済み
pac auth create --name {profile-name} --environment {ENVIRONMENT_ID}
pac auth list # * が付いているのがアクティブ
3. power.config.json は pac code init で生成する
→ テンプレートから手動コピーしない
→ 別環境の appId が残っていると: AppLeaseMissing (409) エラー
→ 新規環境では必ず pac code init で新規生成
| 生成元 | 主な生成物 |
|---|---|
| ① テンプレート scaffold | vite.config.ts / plugins/ / styles/ / src/ / tsconfig* / package.json 一式 |
② pac code init | power.config.json(+ .power/)。vite.config.ts や plugins/ は生成しない |
③ pac code add-data-source | .power/schemas/appschemas/dataSourcesInfo.ts / src/generated/ |
どのファイルを誰が生成し、何をカスタマイズしてよいかの一覧は ビルドリファレンス。SDK 管理ファイル(
power.config.json/dataSourcesInfo.ts/src/generated/)は手動編集禁止。
テンプレートのデモメニューには template: true フラグが付いている。このフラグが残ったまま npm run predeploy を実行するとエラーになるため、削除忘れを防げる。
// template: true が付いた行はデプロイ前に削除 or テーマ用に書き換える
{ label: "顧客", path: "customers", iconKey: "customers", template: true },
// テーマ固有のメニュー(template フラグなし)
{ label: "ダッシュボード", path: "dashboard", iconKey: "dashboard" },
デプロイ前は npm run predeploy(.env・power.config.json を自動検証)→ npm run deploy(predeploy + build + push を一括実行)。
上から順に実行すれば動く正常系フロー。各 Step の詳細・必須設定・型定義は ビルドリファレンス を参照。
# Step 0: テンプレート scaffold(標準では @GeekPowerCode が scaffold)
<<<<<<< HEAD
=======
# Code Apps 採用が決まった時点(設計承認後)で、Dataverse 構築(Phase 2)と並行して着手する
# (npm install はネットワーク待ちのみで Dataverse 構築をブロックしないため、待たずに並行実行する)。
# VS Code では本トラック全体を「Code Apps サブエージェント」として並行起動できる。
# 先行工程(scaffold / init / 初回 build & push)はテーブル不要。以下は Dataverse 構築の完了を待つ同期点:
# ★同期①: pac code add-data-source は Dataverse Phase 2(テーブル作成)完了後に実行
# ★同期②: pac code add-flow は Power Automate Phase 5(フロー実装)完了後に実行
# 詳細は standard §8「開発フロー全体図」を参照。
>>>>>>> origin/main
cp -n .github/skills/standard/references/gitignore-template .gitignore # .gitignore がなければコピー
npm install --no-audit --no-fund
# Step 1: 初期化 — power.config.json を生成(PAC CLI 認証でテナント不一致なし)
pac code init -env {ENVIRONMENT_ID} -n "AppName"
# Step 2: vite.config.ts 必須設定を確認(base: "./" / external に @microsoft/power-apps を含めない)
# → references/build-reference.md Step 2
# Step 3: .env.example を .env にコピーしてテーマ固有の値を設定
# Step 4: 初回ビルド&デプロイ → Dataverse 接続が確立
npm run build
pac code push -env {ENVIRONMENT_ID} -s {SOLUTION_NAME}
# Step 5: データソース追加(日本語表示名は toggle_table_lang.py で英語に切替)
python scripts/toggle_table_lang.py en
pac code add-data-source -a dataverse -t ${PUBLISHER_PREFIX}_{table_basename} # 全テーブルに繰り返す
python scripts/toggle_table_lang.py jp
# Step 6: src/ を実装 → 再ビルド&デプロイ(反復)
npm run build
pac code push -env {ENVIRONMENT_ID} -s {SOLUTION_NAME}
インポート/getClient の必須パターン:
@microsoft/power-apps/data等のサブパスからインポートし、getClient(dataSourcesInfo)のようにdataSourcesInfoを必ず渡す。よくある失敗(base未設定で 404・external指定でモジュール解決エラー・getClient()引数なし・vite-env.d.tsの手動型宣言等)は トラブルシューティング と ビルドリファレンス にまとめている。
| コマンド | 認証基盤 | テナント問題 | 推奨度 |
|---|---|---|---|
pac code init -env {ID} -n "Name" | PAC CLI プロファイル | なし | ✅ 標準 |
pac code push -env {ID} -s {SOL} | PAC CLI プロファイル | なし | ✅ 標準 |
pac code add-data-source -a dataverse -t {table} | PAC CLI プロファイル | なし | ✅ 標準 |
npm run deploy | PAC CLI プロファイル | なし | ✅ 推奨(predeploy チェック付き) |
Dataverse テーブルの追加は 常に pac code add-data-source を使う(npx power-apps add-data-source は使わない)。npx power-apps は PAC CLI と独立した認証トークンキャッシュを持つため、正しいテナントで pac auth create 済みでも別テナント扱いとなり 403 エラーになる事故がある(トラブルシューティング #12)。systemuser 等のシステムテーブルも同じコマンドで追加できる。
テーブルごとに pac code add-data-source -a dataverse -t {table} を実行すると、.power/schemas/appschemas/dataSourcesInfo.ts が自動更新される(systemuser・bot 等のシステムテーブルも同じ)。src/lib/dataSourcesInfo.ts はこの生成ファイルを re-export するだけ(手書き追記はコネクタ等 add-data-source で追加できないものに限る)。
python scripts/toggle_table_lang.py en # 日本語表示名エラーを回避(英語に切替)
pac code add-data-source -a dataverse -t ${PUBLISHER_PREFIX}_{table_basename}
python scripts/toggle_table_lang.py jp # 日本語に復元
日本語 DisplayName で
Failed to sanitize stringエラーが出る場合、およびnpx power-apps add-data-sourceをフォールバックで使う場合(patch-nameutils.cjs適用)の判断フロー・詳細手順は 日本語サニタイズリファレンス を参照。
Power Apps ランタイムはデフォルトで connect-src 'none'。外部 API への fetch はブロックされる。
Dataverse SDK(getClient(dataSourcesInfo))経由のデータアクセスのみ CSP 安全。
→ 詳細: CSP 構成
SDK getContext().user.objectId(Entra AAD Object ID)を取得し、systemuser テーブルの
azureactivedirectoryobjectid でマッピングして systemuserid を解決する。
Xrm・fetch・executeAsync は CSP でブロックされるため使用不可。
→ 詳細: ユーザー識別リファレンス
SDK の getContext().app.queryParams で親ウィンドウの URL パラメータを取得する(cross-origin iframe のため window.location.search は不可)。
→ 詳細: ディープリンクリファレンス
新規作成・編集・削除はすべてモーダル(Dialog / AlertDialog)で操作する。 サイドバー z-40 / Dialog z-[300]/z-[400] で重なり問題を回避。
フロー連携時は統合 dataSourcesInfo が必須(getClient(dataSourcesInfo) はシングルトンのため、最初の呼び出しで全データソースを含める必要がある)。
→ 詳細: データソースパターン
SDK 生成サービスは Lookup 名フィールド(createdbyname 等)を返さない。
_xxx_value(GUID)+ useMemo マップで名前解決する。
データソース未登録テーブルの場合は OData FormattedValue アノテーションを使う。
所有者(「誰のレコードか」)の表示は _owninguser_value + systemusers Map で解決する(取得 hook の $select に _owninguser_value を含めること)。
→ 詳細: Lookup 名前解決リファレンス
営業系の一覧は名称検索だけで終わらせず、所有者列・金額列などの重要項目を表示し、ステータス/所有者で絞り込み・横断検索できる構成を標準とする。所有者フィルターは実データに存在する所有者のみを列挙し、絞り込み結果の件数・合計をツールバーに表示する。
→ 詳細: CRUD UI 標準パターン の「一覧の検索・フィルター・重要列」
商談ステージ・リードステータス等、順序を持つ OptionSet を Salesforce 風の矢羽(シェブロン)で表示する。onSelect でその場ステージ変更(patch)も可能。失注・不認定など否定的終端は negativeValue で赤表示。
→ 詳細: ステージ矢羽パターン
外部 API 呼び出しを含むデモページ(design-examples.tsx / use-learn-catalog.ts / learn-client.ts 等)は CSP 違反になるため、業務テーマに不要なものは最初から生成しない。標準コンポーネント(form-modal.tsx / list-table.tsx / inline-edit-table.tsx / sidebar*.tsx / ui/ 等)は残す。
→ 含める/含めないファイルの完全な一覧は 新規テーマ開始チェックリスト。
詳細な構築手順(初期化・Dataverse 接続・ビルド・デプロイ)は 構築リファレンス を参照。
自前 DataverseService を React Query で包むパターン(useRecords / useCreateRecord 等)は データソースパターン を参照。
「デプロイして」「プッシュして」が指示されたとき、ビルド前に必ずレビューを実行する。
dataSourcesInfo 整合性・インポート元・ルーター種別(createHashRouter 必須)・サイドバー fixed レイアウト等を確認。
→ 詳細: プレデプロイレビューリファレンス
noUnusedLocals: true のため未使用 import は即削除npm run build 2>&1 の後にテキストを付けない(Vite が入力パスと誤解)→ 詳細: ビルドリファレンス
フロー追加は npx power-apps add-flow --flow-id {id} を使う(add-data-source --api-id logicflows は旧方式)。
Copilot Studio 応答は JSON 配列文字列で返るため JSON.parse() → 配列の最初の要素を取得する。
502 タイムアウト対策としてローカル検索へのフォールバックを必ず実装する。
→ 詳細: フロー連携リファレンス
正常系の流れは本ファイル(§1〜§4)に集約し、異常系・詳細手順・トラブルシューティングは references/ に逃がしている。各トピックの詳細は以下を参照。
| リファレンス | 内容 |
|---|---|
| デザインテンプレート集 | 設計時に選択する配色テンプレート 6 種(プレビュー HTML・CSS Variables 一式・light/dark 対応) |
| デザインシステム | Tailwind CSS v4 のコンポーネント選定・画面設計パターン |
| コンポーネントカタログ | 全コンポーネントの詳細仕様・使用例 |
| ステージ矢羽パターン | OptionSet(ステージ/ステータス)を Salesforce 風の矢羽で可視化・クリックで変更 |
| 月間カレンダーパターン | 日付を持つレコードを月間グリッドで俯瞰(date-fns のみ・依存追加なし・イベントチップ・今日ハイライト) |
| ウィザードフォームパターン | 入力項目の多いフォームを複数ステップに分割(ステップインジケーター・ステップ別バリデーション・確認画面) |
| CSV エクスポートパターン | フィルター適用後の一覧を UTF-8 BOM 付き CSV でダウンロード(Excel 日本語対応・OptionSet ラベル変換) |
| パレート図パターン | 不良分析・ABC 分析などの分類別集計を降順棒 + 累積構成比折れ線 + 80% 基準線で可視化(重点対策対象の強調色) |
| チェックリスト採点パターン | 点検・監査系業務の判定トグル・スコア自動計算(対象外を分母から除外)・テンプレート一括生成・親レコードへのスコア同期 |
| クロス集計マトリクスパターン | 2 軸の組み合わせ件数をヒート色付きピボット表で俯瞰(行列自動生成・合計行/列・追加依存なし) |
| 縦タイムライン/ステッパーパターン | 順序を持つ項目の進行状態を縦に可視化(done/current/problem/pending・行ごとに操作ボタン差込可・追加依存なし) |
| 構築リファレンス | ビルド・デプロイの詳細手順・vite.config.ts 必須設定・TypeScript エラー対処 |
| データソースパターン | SDK 生成サービス・dataSourcesInfo・getClient(dataSourcesInfo)・TanStack React Query |
| Lookup 名前解決 | クライアントサイド名前解決・OData FormattedValue パターン・所有者(Owner)列の表示 |
| 日本語サニタイズ | 日本語 DisplayName エラーの回避(toggle_table_lang.py / patch-nameutils.cjs) |
| CSP 構成 | iframe 埋め込み・外部 API 接続時の CSP 設定・CSP 安全な SDK メソッド一覧 |
| ユーザー識別 | ログインユーザーの systemuserid 取得パターン(CSP 安全) |
| ディープリンク | MDA / Power Automate から特定ページへパラメータ付き遷移 |
| フロー連携 | Power Automate フロー呼び出し・Copilot Studio 応答パース・エラーハンドリング |
| Copilot Studio コネクタ | Copilot Studio エージェント直接呼び出し・会話継続・レスポンス解析 |
| コネクタリファレンス | Code Apps で利用する主要コネクタの追加方法・使用例 |
| メール・PDF 送信 | HTML→PDF 変換・Power Automate 経由メール添付送信パターン |
| 日本地図パターン | SVG 都道府県地図の実装パターン |
| 高度な実装パターン | マルチ環境・オフライン・i18n・パフォーマンス最適化パターン |
| プレデプロイレビュー | 「デプロイして」「プッシュして」時の自動チェック手順 |
| 新規テーマ開始チェックリスト | 前テーマの残骸がないクリーン開始の確認手順・scaffold 時に含めないファイル |
| トラブルシューティング | 頻出エラーと対処法(GUID フィルタ・.toLowerCase() 統一・テンプレート削除時の use-theme 巻き添え 等) |
| サンプル作成ガイド | 公開リポジトリ向けサンプルのセキュリティ要件・環境変数ルール・feature flag 命名規則 |