13.1K Views
May 25, 24
スライド概要
https://powerplatformnikki.com/formulasvsonstart/
このプレゼンテーションでは、Power Appsを使用する際に意識すべき保守性にフォーカスし、コードやロジックの抽象化について解説しています。また、App.OnStartとApp.Formulasの使い分けについても解説しています。さらに、パフォーマンス比較についても言及しており、Power Appsの使い方について幅広く紹介しています。
名前付き計算式やグローバル変数などの使い分けを意識しましょう。
App.OnStartとApp.Formulas の使い分け ビリビリ☆Power Apps 同好会 登壇大会#1 2024/5/25 PPログ
PPログ X(Twitter) : https://twitter.com/PowerPlatform4 Blog : https://powerplatformnikki.com/ 2
Content • 保守性を意識したコード・ロジックの抽象化 (再放送) • 名前付き計算式(App.Formulas) • App.FormulasとApp.OnStartの使い分け • パフォーマンス比較 3
保守性を意識したコード
保守性・可読性の高いコードを書くために意識していること 1.変数・コントロールの命名規則を定め、順守する 2.適当に命名しない 3.スコープを理解し、適切に使い分ける 4. 要素(変数・コントロール)の数は最小限にする 5. 特殊な処理にはコメントを書き、秩序を持って空白や改行を入れる 5
基本的にはスコープの小さい方から使うが、まずはそれぞれの 要素を減らせないかを考えるべき アプリ グローバル変数 コレクション 画面 コンテキスト変数 コントロール ユーザー定義関数 コンポーネント プロパティ With関数 6
グローバル変数vsコンテキスト変数 グローバル変数 • スコープがアプリ全体なので値がどこでも使える • 意図せぬ値の更新が起きてしまうリスクがある コンテキスト変数 • スコープが宣言した画面のみなので意図せぬ値の更新によるバグを未然に防げる • Navigate関数で他画面に渡す手間があり、どこから来た値なのかを遡る必要がある 7
意図せぬ値の更新は、初期化処理の入れ忘れが主な原因 変数の数を減らすか、スコープを区切ることでバグを防ぐ ▼OnStart グローバル 変数 ▼更新&画面遷移 ▼画面遷移 AAA AAA グローバル 変数 AAA AAA コンテキスト 変数 いいい 画面A コンテキスト 変数 画面B IsBlankでバグる△ 8
意図せぬ値の更新は、初期化処理の入れ忘れが主な原因 変数の数を減らすか、スコープを区切ることでバグを防ぐ ▼OnStart グローバル 変数 ▼更新&画面遷移 ▼初期化&画面遷移 AAA 画面A コンテキスト 変数 グローバル 変数 AAA コンテキスト 変数 いいい 画面B IsBlankでバグらない△ 9
値が動的(数式や関数)であるか、静的(変数)であるかも考慮する 10
ロジックの抽象化
ロジックの抽象化(≒関数化)の例 x+1 (x+1)2 x2-1 (x+1)(x-1)2 12
抽象化できれば、ロジックの処理の過程を理解することなく実装 できる f(a, b) = (x+1)a × (x-1)b f(1, 0) = x+1 f(2, 0) = (x+1)2 f(1, 1) = x2-1 f(1, 2) = (x+1)(x-1)2 ※抽象化する範囲を広げすぎるとロジックが複雑になるので注意 13
ロジックを抽象化することで、コードの再利用性が高くなります ユーザー定義関数 メリット: コードが短くなり可読性が向上する 実際の数式 ロジックの中身を毎回思い出さずに済む メンテナンスやテストの工数削減 14
コンポーネントとユーザー定義関数の比較 名前付き計算式 コンポーネント 概要 アプリ全体で再利用できる数式を 作成する機能 複数アプリで横断的に利用できる 共通部品・ロジックを作成する機能 利用目的 ロジックの抽象化 OnStartで定義していた定数の代替 ロジックの抽象化 共通部品(コントロールのまとまり) の作成 試験段階でできること 引数ありの関数が作れる 使えるプロパティの型を増やせる 共有 ロジックのコピペのみ(個別要件向き) コンポーネントライブラリ (共通要件向き) その他 動作の数式は作れない レコード型、テーブル型が使えない 中級者以上でないと扱うのが難しい 15
抽象化対象の選定基準として、アプリ内またはアプリ間で重複す るロジックや複雑なロジックが挙げられます アプリA アプリB アプリC 16
重複している単純なロジック→コンポーネント 出現回数の多い複雑なロジック→名前付き計算式 複雑 アプリA 単純 複雑 アプリB アプリC 複雑 17
ロジックを抽象化するための考え方 https://qiita.com/namakoRice/items/2a488b4554372277c153 18
(注意)Power Appsでのロジックの抽象化は一部が試験段階です https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/working-with-experimental-preview 19
名前付き計算式(App.Formulas)
名前付き計算式(App.Formulas)は、アプリ全体で再利用できる数式を作 成する機能です 引数なし(GA済み) • 出力のみの関数を作成する機能 • App.OnStartの代替 引数あり(試験段階の機能) • 入出力をもつ関数を作成する機能(=ユーザー定義関数) • コンポーネントのロジックのみver 21
名前付き計算式(引数なし)の使用例: リレーション先テーブルの取得 親テーブルギャラリーを選択した時 22
名前付き計算式(引数なし)の使用例: 検索結果件数表示 23
名前付き計算式(引数あり)の使用例: アプリURLの取得 用途: 開くレコードを指定するリンクの作成 別のアプリを開くリンク メリット: 環境移行時やアプリID変更時の改修コスト削減 長いURLの短縮による可読性の向上 24
App.FormulasとApp.OnStartの違い と使い分け
App.OnStartとApp.Formulasの違い 1.値が動的であるか、静的であるか 2.値の更新タイミング 3.コードを書く場所や記述方法 26
App.OnStartで定義するのはグローバル変数 App.Formulasで定義するのは名前付き計算式 27
名前付き計算式とグローバル変数の比較 名前付き計算式 グローバル変数 概要 アプリ全体で利用できる開発者が定義 した数式 アプリ全体で利用できる変数 動的or静的 動的 静的 更新タイミング 数式として呼び出されたとき Set関数での更新時 定義するプロパティ AppオブジェクトのFormulasプロパ ティ 動作プロパティ 数式の書き方 他の関数等と異なる独特の書き方 通常の関数と同様Set関数のフォー マットに従う 28
グローバル変数は動作プロパティでの更新時に値が最新化され、名前付き 計算式は数式で呼び出されたときに値が最新化されます。 tick関数 1 2 ▼OnStart グローバル 変数 ユーザー 定義関数 3 4 ▼OnVisible 6 7 3 2 3 8 9 ▼OnSelect 1 1 5 4 6 5 6 7 8 9 グローバル変数:3 名前付き計算式:4 29
OnStartはOnVisibleを待たないため、OnStartに長い処理は極力書かな いようにしましょう。 OnStart OnVisible OnStartで定義した変数をOnVisible で参照するとバグる可能性がある 30
グローバル変数と名前付き計算式の記述や定義の差異 グローバル変数:動作プロパティで値を更新可能 名前付き計算式:Appオブジェクトで定義した数式 31
App.OnStartとApp.Formulasの使い分け ・App.OnStart(=グローバル変数) 用途:特定の時点での値を呼び出す回数が多い場合 使用例:定数、ユーザー情報の格納 ・App.Formulas(=名前付き計算式) 用途:最新の値を呼び出す回数が多い場合 使用例:検索件数の取得、リレーション先の値 32
App.OnStartとApp.Formulasで同様の処理をしたときのパフォーマン スをデータソースごとに比較してみました。 33
OnStartやOnVisibleは起動に時間がかかる一方、処理時間はほぼかかっ ていない 参照なしの場合は誤差レベル 34
Formulasは呼び出すたびに処理時間がかかってしまうため、定数の呼び 出しには向いていない 35
Formulasは一度目の呼び出しに時間がかかり、その後はOnStart、 OnVisibleでの処理と同様の時間しかかからない 23ms 24ms 27ms ※一定時間処理結果が保持されるのは他の数式でも同様の挙動 36
OnStartの計測方法と結果のイメージ ▼起動開始 OnStart ▼起動終了 起動時間 OnVisible ▼処理開始 OnSelect ▼処理終了 処理時間 37
OnVisibleの計測方法と結果のイメージ ▼起動開始 OnStart ▼画面遷移 ▼起動終了 OnVisible 起動時間 ▼処理開始 OnSelect ▼処理終了 処理時間 38
Formulasの計測方法と結果のイメージ ▼起動開始 ▼起動終了 OnStart OnVisible ▼処理開始 OnSelect ▼処理終了 処理時間 39
計測方法 40
まとめ 1.保守性・可読性はめっちゃ大事 2.ロジックの抽象化を行い保守性や可読性を向上させま しょう 3.名前付き計算式とグローバル変数の違いを理解して使 い分けましょう 41
ありがとうございました!
今回話した内容に関連する記事 • 【Power Apps】App.OnStartとApp.Formulasの使い分け • 【Power Apps】変数を使う上で知っておきたい3つのこと • 【Power Apps】ユーザー定義関数(App.Formulas)とコンポーネント • 【Power Apps】保守性の高いアプリを作るためのガイドライン • 【Power Apps】プロパティの型ごとのコンポーネントの使い方 • 【JPPGB #9】Power Appsで2048を作ってみた 43