この記事の3行要約
- Power Automateのconcat関数は、公式リファレンス上「結果の長さは104,857,600文字以下」とされているが、実際の挙動は不明な点が多い
- シングルバイト・マルチバイト・サロゲートペアという3種類の文字パターンで、実際にエラーが発生する境界値を実機検証
- length()関数のカウント差異にも触れながら、業務フロー設計時の注意点を解説
今回のようにPower Automateの関数仕様や文字数の上限を検証しながら業務フローを設計するのは、想像以上に手間がかかる作業です。フロー設計や運用でお困りのことがあれば、以下のサービスもご参考ください。
こんにちは、みやみやです。
みやみや
🖊みやみやさんのブログ一覧はこちらビジュアル系プログラマー、ビジュアル系 PM を自称して 20 年近くが経ちました
弊社 MaaS 製品全般で、開発・運用側のマネジメントをしながら、時々開発もしています
普段は MaaS 事業のシステム開発や運用周りのマネジメントをしているのですが、部署の業務改善で Power Platform も利用しています
今日はconcat 関数の公式リファレンスをみていて、「この結果の長さは 104,857,600 文字以下にする必要があります。」と記載があり、気になったので、実際には何文字までいけるのかを検証してみました
検証方法
検証は下記のパターンで試します
検証用でフローを作りました

考え方ですが、まず、104,857,600 を 2 で割っていき、割り切れる回数の 22 回をループカウンター、割り切れる数字の 25 を基底となる数字として利用します

104,857,600 手前まで元気よく文字を結合していき、そこから 1 文字づつ結合して検証しました
検証1. シングルバイトのみのとき
ここでは、シングルバイトは半角文字とします

シングルバイト 25 文字として0123456789012345678901234を、変数Variable1にセットしています
項目数はlength()を使って確認しています
結論としては、シングルバイトのみで104,857,599文字に達するとエラーが発生しました
検証2. マルチバイトのみのとき

マルチバイトで 25 文字として0123456789012345678901234を、変数Variable1にセットしています
シングルバイトと同じく、マルチバイトのみで104,857,599文字に達するとエラーが発生しました
検証3. サロゲートペアのみのとき
サロゲートペアについての詳しい説明は他のサイトにお任せして、ここでは「2 バイトの定義で収まらなかった文字を、拡張領域として 4 バイトで表すようにした文字」と捉えます

サロゲートペアで 25 文字として `𦀗𦀗𦀗𦀗𦀗𦀗𦀗𦀗𦀗𦀗𥿻𥿻𥿻𥿻𥿻𥿻𥿻𥿻𥿻𥿻𦀌𦀌𦀌𦀌𦀌`を、変数Variable1にセットしました
上記 25 文字をlength()でカウントすると、50と返ってきます
つまり、2023/02/21 現在、PowerAutomate のlength()では、シングルバイトやマルチバイトは 1 文字は1として返し、サロゲートペアでは2と返します[1]
そのことから、ループカウントを他の検証と違い21として、検証を行いましたが、大方の予想通り、サロゲートペアのみでは、52,428,799 文字に達するとエラーが発生しました
考察
文字数制限に引っかかることはないと思いますが、制限があるということ、全角と半角に差はないこと、サロゲートペアが含まれるときに文字数カウントが変わることを抑えておきたいです
参考
Azure Logic Apps および Power Automate のワークフロー式関数のリファレンス ガイド – concat
今回のような検証を積み重ねながら、自社でPower Automateを使いこなせる体制を整えていきたい場合は、以下のサービスも選択肢の一つとして参考にしていただけます。
