前回に引き続きPowerAppsアプリのコラムとなりますが今回はランダムな文字列を生成する機能を開発することがありました。PowerApps内ではランダムな文字列を作成できるような便利な関数は用意されておらず、様々な関数を組み合わせることで実現が可能ですので紹介させていただきます。
■ランダム文字列作成機能の実装について
ランダム文字列作成のコードを紹介します。
Set(_StringLength,8);・・・・①
Set(_CharSet,”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+”);・・・・②
Set(_RandString,
Concat(・・・・⑤
ForAll(・・・・④
Sequence(_StringLength),
Mid(_CharSet, Rand() * Len(_CharSet) + 1, 1)・・・・③
),
Value
)
);
図1:ランダム文字列作成のコード
すぐに検証したい方は図1のコードをボタンコントロールのOnSelectプロパティに記載し、_RandString変数をラベルコントロールなどで表示させて確認いただけたらと思います。
以下は詳細にコードの解説を行います。
図1-①:ランダム文字列の長さを設定するための変数を定義しています。
図1-②:ランダム文字列として設定したい文字(英大文字、英小文字、数字、記号)を含めた文字列を定義しています。
図1-③:Rand()関数は 引数がない場合0以上1未満の乱数を生成します。Rand()関数とLen(CharSet)(CharSet文字列の長さ)を乗算することで以下の範囲の数値を取得することができMid関数内ではCharSet文字列から1文字取得するための開始位置を表すことができます。
1≦Rand() * Len(_CharSet) + 1≦Len(_CharSet)
図2:③Mid関数の文字列取得開始位置の範囲
Mid関数を使用し、_CharSetからランダムな1文字が取得できます。
図1-④:ForAll関数は繰り返し処理を行える関数であり第二引数で繰り返しの回数を指定します。第二引数にはSequence(_StringLength)が設定されておりSequence関数は引数に渡した数値の連番の単一テーブルを生成してくれる関数で_StringLengthでは8を定義しているので8行の単一テーブルが生成されます。ForAllの繰り返し回数は8となります。
図1-⑤:Concat関数でランダムに取得した8文字を結合することができます。

今回はPowerAppsだと工夫が必要なランダム文字列作成機能について紹介させていただきました。アプリからユーザー作成とパスワードを生成するといった機能を想定した場合パスワードの自動生成にランダム文字列作成機能が役に立つのではないかと思います。
参考にしていただければと思います。

技術とノウハウでデジタルシフトをサポート
中小企業の頼れるパートナー
執筆者: 村瀬 俊昭(株式会社クロスディーズ システム技術統括エンジニア)
前職では社内システムの運用、サーバーの監視、システム運用業務の構築、システム開発業務といった業務に幅広く携わる。2021年より株式会社佐々木総研にてロボットの設計・開発、社内SEとして従事している。釣りが趣味で、大のビール好き。