Power AppsPower Apps 初心者講座コンポーネント保守運用変数

【Power Apps】変数を使う上で知っておきたい3つのこと

Power Apps

Power Appsで変数を使う上で知っておきたいこと3つをまとめました。

気ままに勉強会での登壇資料はこちら↓

変数は適当に宣言しない

個人利用のアプリであっても、valやtempなどを変数に命名することは避けましょう。

この記事はこの本の内容からいくつか引用しているので、普遍的なよりよいコーディング手法を学びたければぜひ読んでみてください。(PR)

具体的な名前を付ける

変数がどのような役割を持ち、どのように利用されるかを誰でもイメージできるように、"size"や"data"のような抽象的な名前を付けないようにしましょう。

例えばsizeは高さであればheightですし、文字列長であればlengthです。

命名規則に従う

_やgbl,locなどの接頭辞を付けるのが一般的です

Power Appsではコントロール/変数/コレクション間での名前の重複が許可されていることもあり、それぞれが同じような名前で命名されていると可読性が低下してしまいます。

これを避けるために会社やPJ内で命名規則を定め、これに従いましょう

管理コスト最小化のために変数は可能な限り減らす

変数が増えれば増えるほどアプリの保守性やコードの可読性はどうしても落ちてしまいます。
以下のアプローチでまずは変数の数を減らしましょう。

レコード型の変数やコレクションを作成する

このように同時に変更されるような変数はレコード型で宣言することで変数を一つにまとめることができます。

コントロールの出力プロパティを知る

編集フォームやそのデータカードなどのコントロールの出力プロパティを使用すれば不要となる変数を作成しているケースをよく見ます。

特にForm.LastSubmit、Form.Mode、DataCard.UpdateやDropdown.Selectedなどは知っておくべきです。

コントロールの出力値を参照する

上記にも関連していますが、Power Appsではコントロールの出力値を参照することができます。
詳しくは後述します。

使い分け

Power Appsで使用できる変数とユーザー定義関数を、使用できる範囲と値が動的に変化するか、静的に変化するかで分類しました。

個人的な使い分けなので、ぜひコメントでみなさんの使い分けを教えてください。

変数名使用範囲(スコープ)動的・静的用途
コントロールアプリ全体動的基本的な値の参照方法
Formulasアプリ全体動的ユーザー定義関数
コンポーネントアプリ全体動的ユーザー定義関数+共通部品
With関数プロパティ内静的使用範囲がプロパティ内の変数
グローバル変数アプリ全体静的使用範囲がアプリ全体の変数
コンテキスト変数画面内静的使用範囲が画面内のみの変数
コレクションアプリ全体静的テーブル型の変数

Power Appsはコントロールの出力プロパティの値を変数のように扱えるため、他のプログラミング言語と比較して変数の利用頻度は低いと思います。

また変数は基本的には使用範囲(スコープ順)が狭いものを優先的に利用しましょう。

コントロールの出力プロパティの値

Power Appsでは、コントロールの出力プロパティの値を変数のように扱うことができます。

コントロールの出力プロパティを使用するメリット

コントロールは実体がある分、変数よりも値の変更を追いやすく管理もしやすいです。
また変数は増えれば増えるほど管理が大変になりますが、アプリの構成上コントロールは必要な要素ですので参照したところで管理コストは変数ほど増えません。

コントロールの出力プロパティを使用しないケース

コントロールの値は動的に変化するため、特定の時点での静的な値を取得したい場合は通常通り変数を使用しましょう。

また少なくとも参照されるコントロールには適切な名前をつけるようにしましょう。

複数の箇所で利用したり、複雑な数式はユーザー定義関数(App.Formulas)を使用する

他画面のコントロールを参照するとパフォーマンスが落ちる場合があるので注意です。場合によってはユーザー定義関数の使用を検討しましょう。

ヒントとベスト プラクティスを使用して、キャンバス アプリのパフォーマンスを向上させる - Power Apps | Microsoft Learn

ユーザー定義関数に複雑な数式を書いておいてそれを参照することで、数式の可読性が向上します。

With関数

With関数第一引数をレコードとして入力することで、プロパティ内でのみ使用できる変数を定義することができます。

プロパティ内でのみしか利用できないため汎用性はない反面、使用範囲が小さいかつプロパティ内でも範囲を絞れるため非常に有用です。

グローバル関数

アプリ上のどこからでも参照できる変数です。App.OnStartでよく使用します。

コントロールの出力プロパティとの使い分け

前述の通り値を静的に使用したい場合、使用する値がコントロールの形式ではマッチしない場合に使用します。

グローバル変数はどこでも使用できる分非常に扱いやすいですが、乱用してしまうと意図せぬ値の更新がされてしまう場合があります。

コンテキスト変数との使い分け

基本的にアプリ全体で使用する場合はグローバル変数、特定の画面内のみで使用する場合はコンテキスト変数と、使用範囲に応じて使い分けます。

ただしアプリ全体ではなく2,3個の画面で使用する変数については、どちらを使用すべきか検討が必要です。

コンテキスト変数はNavigate関数で値を渡せるため複数画面でも使用できますが、本来のスコープである定義された画面の外で使用されるため可読性が落ちることがあります。

ただグローバル変数を使用してもスコープがアプリ全体であるため、前述の通り意図せぬ値の更新がされてしまう場合があります。

画面数が2,3個と少ない場合などは変数の使い分けは不要だと思います。

コンテキスト変数

宣言した画面内でのみ使用できる変数です。グローバル変数と値の宣言方法が全く違うのが地味にストレスです。

グローバル変数とは違い、一つの関数で複数の変数を宣言することができます。

グローバル変数との使い分けは前章を見てください。

コレクション

テーブル形式の変数を格納します。

Power Appsの仕様上一度に2000行までしか格納出来ないこと、初心者が扱いづらいことであまり有効活用されていない気がします。

しかし理解するとアプリの保守性や数式の可読性がかなり高くなるためぜひ理解して欲しいです。

ユーザー定義関数(App.Formulas)とコンポーネント

コントロールの出力値のように動的な値を出力する数式を開発者側で定義できる機能です。
以下の記事をご確認ください。

コメント

タイトルとURLをコピーしました