【投稿者】カタツムリ
こんにちは。今年度入社したカタツムリです。配属先研修の一環として、PowerAppsで業務アプリを開発しました。今回開発したのは、社員の行き先がどこか一覧で見たり、行き先を変更することができるアプリです。Teamsとの連携もできるということでPowerAppsで開発をすることにしました。現在のライセンスでどこまでできるのか、何をすればどのくらい費用が掛かるかなども調べながら開発を進めました。PowerAppsはローコードではありますが取得したデータの編集などはコードを書く必要がありました。コードは独自の言語が使用されており、調べながらの作業が多かったです。また、処理が重くなりすぎてしまっていたので少しでも軽い処理を意識して開発しました。そこで今回は、アプリの処理を少しでも軽くするために工夫したポイントを紹介します。
アプリの行き先一覧

アプリのユーザー情報はMicrosoft365の情報を使っており、そこから取得した社員名をアプリの行き先一覧に表示しようと考えていました。しかし取得した社員名には「san_」が付いていました。そのため 「san_」 を消して表示しようと処理を書きました。
【処理1】
If(
StartsWith(userInfomation.userName, "san_"),//条件(userNameがsan_で始まっているか)
Right(userInfomation.userName, Len(userInfomation.userName) - 4),//True(左の4文字を削除)
userInfomation.userName//False(そのまま)
),
【処理2】
Substitute(userInfomation.userName, "san_", "")//userNameからsan_という文字列を探して空文字と置き換える
今回は処理1を使いました。社員名は一律で先頭に「san_」が付くため毎回全文字列を参照する処理2よりも処理1の方が軽いようです。ただし、名前程度の短い文字列だと処理速度の違いはほとんど感じませんでした…。文字列が長く、規則性のあるものならば比較的軽量な処理1を選んでもいいかなと思いました。
②コレクションへのデータ追加社員情報や行き先情報をまとめるためにcolUsersを作成しました。
【処理1】
ClearCollect(
colUsers, // colUsersというコレクションを初期化・作成
AddColumns(
destinationManagementTRN As d, // 元データのテーブル
userInfomation, // 追加する列の名前
LookUp(colUserMaster, Text(userID) = Text(d.userID)) // userIDに対応するユーザー情報を検索して追加
)
);
【処理2】
Clear(colUsers); // colUsersを初期化
ForAll(
destinationManagementTRN, // 元データの各行に対して繰り返し
Collect(
colUsers, // colUsersに追加
Patch(
Defaults(colUsers),// 新しい行の初期値
// ユーザー情報を検索して追加
{d: ThisRecord,userInfomation: LookUp(colUserMaster, Text(userID) = Text(ThisRecord.userID))})
)
)
結果は処理1の方が軽量です。初めは繰り返し処理を調べデータを追加しましたが、処理がとても重かったです。そこで効率的にデータを格納できないか調べていくとAddColumnsというものを見つけました。内部で最適化されているのでForAllよりも処理が軽量とのことでした。これは少しですが処理速度の違いを感じることが出来ました。
※PowerAppsでは、アプリ内でデータをまとめて扱うために コレクション という仕組みを使います。コレクションは一時的にデータをアプリ内に保存する箱のようなもので、例えば社員名や行き先情報をまとめて保持して、画面間で使い回すことができます。リストの値を毎回参照するより、一度コレクションに格納して使う方が軽く、画面の動作もスムーズになります。今回も社員名や行き先情報はコレクションにまとめてから操作するようにしました。
まとめ今回の経験から、PowerAppsはローコードとはいえ 処理の仕組みや関数の選び方によってアプリの動きやすさが変わる ことを学びました。しかし、まだ起動や画面遷移時に重さを感じる部分もあるので今後より良い方法を見つけたら改善していきたいと思います。また、軽い処理を意識することは、PowerAppsに限らず他の開発でも大切なことだと感じたので、これからも意識して開発していきたいです。









