【Power Apps入門】With関数でコードの可読性とパフォーマンスを劇的に改善!AIコードの「なぜ」を理解する
はじめに
皆さん、こんにちは。株式会社メンバーズラピッドスケールカンパニーの大槻幸誠です。
私は現在、Power Appsを使ったローコード開発で、R社の業務効率化案件に携わっています。Power Appsは、Microsoft社が提供しているローコード開発向けのアプリケーションプラットフォームで、少ない工数でプロダクトを作成できる点が特徴です。
Power Appsは、Microsoft Power Platformという統合ローコードプラットフォームの一部であり、Power Platformには他にも業務フロー自動化の Power Automate
、データ分析の Power BI
、チャットボット作成の CopilotStudioなどのサービスが含まれます。
しかし、複雑なロジックではスクラッチ開発(コードを1から書く開発)と同様に「コードの可読性低下」や「アプリのパフォーマンス悪化」といった課題に直面します。
さらに、Power Platformは日本語の学習リソースが少ないため、AI(Copilotなど)と壁打ちしながら生成したコードを参考にすることも多くなります。
そんな中、先日同僚から「AIはWith関数を頻繁に使うが、なぜコンテキスト変数を使わずにWith関数を使うのか、その明確なメリットが分からない」と相談を受けました。
この相談を機に、With関数のメリットや注意点を改めて調査・整理しました。
With関数は、Power Appsコードの可読性とパフォーマンスを格段に上げてくれる強力な関数です。
「あまり使ってない」「何に使うの?」という方や、AIが生成したコードを正しく理解したいPower Platform開発者や学習者に向けて、「With関数」に焦点を当て、その具体的な使い方とメリットを解説します。
ぜひご一読ください。
1. With関数とは?
Power AppsにてWith関数は、ロジック内で一時的に名前付きのスコープを作成し、そのスコープ内で複雑な計算式やデータ操作などを実行するための関数です。
簡単に言えば、一時的な「変数」のように使える機能です。Power Appsには変数が他にもグローバル変数 (Set) やコンテキスト変数 (UpdateContext) がありますが、With関数はそれらと異なる以下の特徴を持っています。
- With関数の中で定義した値(変数)は、そのWith関数の中でしか使えない
- 非動作プロパティ(TextプロパティやItemsプロパティなど表示することが目的のプロパティ)で使用できる
公式ドキュメントでもグローバル変数やコンテキスト変数よりWith関数の使用が推奨されています。
> Withは自己完結型であり、理解しやすく、宣言型の数式コンテキストで使用できるため、コンテキストまたはグローバル変数よりも優先されます。 (“With 関数 - Power Platform”)
2. メリット・デメリット
前項で整理したそれぞれの特徴から、メリットを整理していきます。
スコープが限定されることによる可読性の向上
「スコープが限定される(そこでしか使えない)」という特徴が大きなメリットです。
例えば、コントロールのプロパティ(例: TextInput1.Text)やFilter関数の結果などを、同じ処理(例: Patch関数)の中で何度も呼び出したり、同じ計算を複数回記述したりしますよね。これは、コードの可読性を下げ、パフォーマンスにも影響を与える可能性があります。
かといって、その処理ブロックの中でしか使わない値のためにUpdateContextでコンテキスト変数(画面変数)を定義すると、変数の管理が煩雑になり、意図せず他の場所で使われてしまうリスクも生じます。
With関数を使えば、必要な計算結果や参照に一時的な名前を与え、Withのスコープ内でそれを利用することで、コードがスッキリとし、読みやすくなります。
2-1.例:Patch関数での利用
Patch関数はデータを更新するための関数です。
Before
// Button.OnSelect プロパティ
Patch(
Invoices,
Defaults(Invoices),
{
Title: "New Invoice",
定価列: Value(TextInput1.Text),
税列: Value(TextInput1.Text) * 0.1,
合計価格列: Value(TextInput1.Text) + Value(TextInput1.Text) * 0.1
// Value(TextInput1.Text) という記述が4回も登場し、冗長。
}
);After
// Button.OnSelect プロパティ
With(
{
// 呼び出しを一度にまとめ、計算結果にも分かりやすい名前を付ける
定価: Value(TextInput1.Text),
税: Value(TextInput1.Text) * 0.1
},
// --- Withスコープ内 ---
// ここでだけ「定価」と「税」が使える
Patch(
Invoices,
Defaults(Invoices),
{
Title: "New Invoice",
定価列: 定価, // 名前を参照するだけ
税列: 税, // 名前を参照するだけ
合計価格列: 定価 + 税 // 計算ロジックが明確
}
)
);非動作プロパティでロジックを完結できる
まず、Power Appsのプロパティには大きく2種類あります。
- 動作プロパティ (Behavioral Properties):
OnSelect(ボタンクリック時) やOnVisible(画面表示時) など、特定のイベント発生時に実行されるもの。UpdateContextやMapsなどの命令的な関数が使えます。 - 非動作プロパティ (Data Properties): Text (ラベルの表示文字) や
Items(ギャラリーのデータ) など、常に特定の値を返す(または保持する)もの。原則としてUpdateContextなどは使えません。
With関数は、この「非動作プロパティ」で使えます。
メリットは、「そのコントロールが最終的に何を表示・保持しているのか」という計算ロジックを、そのプロパティ内で完結させやすくなる点です。(Excelで特定のセルの値がどう計算されているか、そのセルの数式バーを見ればわかる感覚に近いです。)
- Before の例では、計算ロジックが
Button.OnSelect(動作プロパティ)にあり、Label.Text(非動作プロパティ)は計算結果の変数FinalPriceを参照しているだけです。これでは、「このラベルの金額はどうやって決まるのか?」を知るために、FinalPriceがどこで更新されているかを探し回る必要があります。 - After の例では、
Label.Textプロパティ内でWithを使い、必要なデータ取得(LookUp)や計算ロジックをその場で定義・実行し、最終的な表示テキストを生成しています。これにより、そのラベルを見れば、計算根拠がわかるようになります。
2-2.例:ラベルの表示テキスト
Before
// 1. Button.OnSelect プロパティ (動作プロパティ)
// データを取得し、計算結果を変数に「あらかじめ」格納
UpdateContext({
選択された製品: LookUp(Products, ID = varSelectedID),
割引率: 0.8
});
UpdateContext({
// 計算ロジックがここにある
最終価格: 選択された製品.Price 割引率 1.1
});
// 2. Label.Text プロパティ (非動作プロパティ)
// 計算結果の変数を「参照するだけ」
"合計金額: " & Text(最終価格, "[$-ja-JP]¥#,##0")After
// Label.Text プロパティ (非動作プロパティ)
// このプロパティ内で "UpdateContext" は使えない。
// しかし "With" は使える!
With(
{
// 動作プロパティでやるようなデータ取得や計算を「その場で」定義
選択された製品: LookUp(Products, ID = varSelectedID),
割引率: 0.8
},
// --- Withスコープ内 ---
// 取得した情報を使って、最終的な表示内容を「その場で」計算・整形
"合計金額: " &
Text(
選択された製品.Price 割引率 1.1,
"[$-ja-JP]¥#,##0"
)
)⚠️ パフォーマンスに関する注意点
ただし、この「非動作プロパティにロジックを集約する」方法には注意が必要です。
LookUpのようなデータ取得処理や、非常に複雑な計算を、多くのコントロール(例: ギャラリー内のラベル)の非動作プロパティに記述すると、画面が表示されるたび、または関連する値が変更されるたびにその重い処理が実行され、アプリのパフォーマンスを著しく低下させる原因にもなります。
また、一時変数(ローカルスコープ)であるため、UpdateContextやSetで定義した変数と異なり、Power Apps Studioの変数ビューで値を追跡できません。計算の途中の値を確認しにくいといった欠点もあります。
実装する際は、そのロジックが本当にここで実行されるべきか(OnVisibleで一度だけ変数に格納する方が効率的ではないかなど)を評価し、可読性とパフォーマンスのバランスを考慮してから実装してください。
3.まとめ
今回、With関数について改めて調査し、その使い方を整理しました。
With関数は、OnSelectのような動作プロパティはもちろん、Textプロパティのような非動作プロパティ内でも、コードの可読性を劇的に向上させるための非常に強力な機能です。
一方でWith関数は、あくまでコードを読みやすくするための道具です。 アプリのパフォーマンスを決定づけるのは、「どこで重い処理(LookUpやFilter)を実行するか」という設計思想です。可読性のためにWithを使いこなしつつも、ギャラリーなどの重い処理が予想される場面では、OnVisibleでAddColumnsやコレクションを使って事前処理を行う。このバランス感覚こそが、単に動作するアプリを作るだけでなく、実用的なPower Apps開発における必須スキルだと感じました。
関連記事
【2025年10月版】人気記事ランキング|スクラム・キャリア...BEMALab 編集部
10日間のインド出張!インドはカレーだけではない!感想と学ん...Nicolas Christopher
【2025年9月版】人気記事ランキング|スクラムイベント・X...BEMALab 編集部

What is BEMA!?
Be Engineer, More Agile
Advent Calendar!
Advent Calendar 2024



