ローコード開発のリファクタリング Power Apps 編
個人で単純なキャンバス アプリを作成するのは簡単ですが、アプリが複雑になり複数の人の手がはいるにつれ、コードの書き方にばらつきが生じて不要な処理が残ってしまい品質が下がってしまいます。整理 (リファクタリング) することで、複数の人が関わる開発プロジェクトでも他の人が見ても理解しやすくなります。これにより、効率的に改修作業を進めることができ、一貫性があり、パフォーマンスが高く、保守しやすいアプリを開発する事ができるようになります。
ローコード開発の方針
ローコード開発は、迅速にアプリを構築できる一方で、できることとできないことが明確に分かれています。そのため、フルスクラッチ開発と比較して、事前の確認と基本設計が特に重要です。これにより、プロジェクトの成功率を高めることができます。これを怠ると、目的とズレたなんだか使いにくいアプリが出来上がってしまいます。
-
実現性の確認:
- ローコード開発では、使用するプラットフォームの機能や制約を事前に把握し、プロジェクトの要件がその範囲内で実現可能かどうかを確認する必要があります。
- 具体的な要件を洗い出し、それがローコードツールで対応可能かを評価します。
- 対応不可能な場合、その機能自体を諦めるか、代替案で妥協してもらうか事前に相談します。
-
基本設計の重要性:
- ローコード開発では、要件に沿った基本設計をしっかりと行うことが成功の鍵となります。
- 基本設計には、データモデルの設計、ユーザーインターフェースの設計、ビジネスロジックの設計などが含まれます。
- 設計段階での詳細な計画が、後の開発プロセスをスムーズに進めるために重要です。
-
継続的な評価と調整:
- 開発中も継続的に評価を行い、必要に応じて設計や要件を調整します。
- ローコードツールのアップデートや新機能の追加に対応するため、柔軟なアプローチが求められます。
- 柔軟な改修に対応できるように、余計な作り込みはせずに既存の機能で実現するようにします。
コーディングの規約を定める
命名規則
Microsoft 公式の標準コーディング規約があります。キャンバスアプリを開発する際には一度目を通しておくべき重要なドキュメントなのですが、命名規則ついては自動命名機能の利便性を損なう場合があります。
Power Apps でコントロール生成した際、コントロール名は自動で命名されます。公式のコーディング規約とは異なったルールで名前がつけられますので、命名規則を徹底しようとするとかなり大変です。
公式の標準コーディング規約を遵守することが目的ではないので、参考にしたうえで開発中に扱いやすい命名規則を決めておきます。
例:【Power Apps】命名規則について
変数の使い分け
変数の種類と使用範囲を理解して整理することで、定義するタイミングや参照されるタイミングを明確にします。改修時に変数の影響範囲による思わぬバグの発生を軽減する事ができます。
この変数は本当に必要なのか?を整理して、可能な限り変数の定義を減らすことで、保守性や可読性があがります。
変数の種類
以下のような変数の種類があります。
名前 | スコープ | 定義関数 | 用途 |
---|---|---|---|
グローバル変数 | アプリ全体 | Set | アプリ全体でどこからでも使用可能な変数 |
コンテキスト変数 | 画面内 | UpdateContext | 一つの画面内のみで参照可能な変数 |
コレクション | アプリ全体 | ClearCollect | テーブル型の配列 |
グローバル変数
アプリ全体のスコープで使えるので、深く考えずに App.OnStart イベントで定義して使用するような、旧来の使い方をしてしまうケースが多い。影響範囲が広すぎるため、意図せぬ更新が起こりバグを生み出すリスクとなる。
- グローバル変数を乱用しない。アプリ全体で使われるような変数は最小限に留める。
コンテキスト変数
一つの画面のみのスコープで使用するため、他の画面で意図せぬ更新をしてしまうようなバグを防げる。
- 画面に配置しているコントロールのプロパティにはグローバル変数ではなくこちらを使用する。
- 他の画面に値を渡したい場合は、Navigate 関数で遷移先画面のコンテキスト変数として受け渡します。
コレクション
コレクションに関しては、グローバル変数同様にアプリ全体のスコープで使えるので、意図せぬ更新によるバグに注意する。
OnStart イベントを OFF にする
App.OnStart イベントを使わないでも動くように設計することで、起動時のパフォーマンス低下を防げます。
一昔前までは、App.OnStart でグローバル変数を定義したり、初期画面に遷移するなどの処理をするような使い方しかできませんでしたが、起動時のパフォーマンス低下などの理由から、使用することを推奨されていません。設定で OFF にすることができますので、使用しない方法を検討してください。
App.OnStart を使用すると、アプリの読み込み時にパフォーマンスの問題を引き起こすことがあります。OnStart での Navigate 関数の使用は廃止されました。
StartScreen プロパティを使用する
アプリの起動を簡素化し、アプリのパフォーマンスを向上させることができるため、App.StartScreen プロパティの使用が推奨されています。起動時に最初に表示されるスクリーン(画面)を指定し、その画面の Screen.OnVisible イベントでコンテキスト変数の初期設定などの処理を行います。
Formulas プロパティを使用する
定数的な使い方をする値は、App.Formulas プロパティ内で、名前付き計算式として定義します。
2025/03 現在、App.Formulas でのユーザー定義関数は現在実験段階です。
その他のタイミングでの定義
with 関数を使用する
局所的にローカルな変数を使用したい場合、with 関数の試用を検討します。