Microsoft Power Fx の概要

注意

Microsoft Power Fx は、キャンバス アプリ用の数式言語の新しい名前です。 この概要と関連記事は、キャンバス アプリから言語を抽出し、その他の Microsoft Power Platform 製品と統合して、オープン ソースとして利用できるようにするために進行中の作業です。 早速言語について学び体験するには、Power Apps の数式を使用する で使用を開始し、無料の Power Apps 試用版 にサインアップしましょう。

Power Fx は、Microsoft Power Platform 間で使用されるローコード言語です。 汎用、厳密な型指定、宣言型、そして関数型のプログラミング言語です。

Power Fxは、人間に優しいテキストで表されます。 作成者が Excel のような数式バーまたは Visual Studio Code のテキスト ウィンドウで直接操作できるローコード言語です。 ローコードの「ロー」は、言語の簡潔でシンプルな性質によるものであり、一般的なプログラミング タスクを作成者と開発者の両方にとって容易にします。 これにより、プログラミング経験のない人向けのコードなしから経験豊富な専門家向けの「プロコード」まであらゆる開発が実現し、新たに学ぶことや書き直しの必要がないので、さまざまなチームが協力して時間と費用を節約できます。

注意

この記事では、プログラミング スキルのスペクトラムの最後で使用される機能について説明する場合、作成者 を参照します。 機能がより高度で、一般的な Excel ユーザーの範囲を超えている場合、開発者 としてユーザーを参照します。

Power Fx は、宣言型のスプレッドシートのような数式でオブジェクトをバインドします。 たとえば、その他のコントロールのプロパティに基づいて値を計算する関連式を使用して、UI コントロールの 表示 プロパティを Excel ワークシートのセルとして考えます。 計算式のロジックは、スプレッドシートと同様に値を自動的に再計算しますが、これはコントロールの表示方法に影響します。

また、Power Fx は、必要に応じて命令型ロジックを提供します。 通常、ワークシートにはデータベースに変更を送信できるボタンはありませんが、アプリにはよくあります。 宣言型ロジックと命令型ロジックの両方に同じ式言語が使用されます。

Power Fx は、オープンソース ソフトウェアとして利用可能になります。 現在はキャンバス アプリに統合されており、今体験することができます。 その他の Microsoft Power Platform 製品で、またオープンソースとして使用するために、Power Apps から抽出するプロセスを実行中です。 詳細については、GitHub 上での Microsoft Power Fx を参照してください

この記事は、言語とそのデザイン原則の概要です。 Power Fx の詳細については、次の記事を参照してください。

スプレッドシートで考えてみる

Excel でワークシートを作成するのと同じくらい簡単にアプリを作成できるとしたらどうでしょうか?

既存のスプレッドシートの知識を活用できるとしたらどうでしょうか?

こういったアイデアが、Power Apps や Power Fx の作成に影響を与えました。 毎日、数億のユーザーが Excel でワークシートを作成しています。既に知っている Excel の概念を使用した簡単なアプリの作成を提供しましょう。 Power Apps から Power Fx を分割することによって、自動化のビルド、Virtual Agent、またはその他のドメインに関するこれらの質問に答えます。

Power Fx を含むすべてのプログラミング言語には、数値、文字列、またはその他のデータ型での計算を表す方法である があります。 例えば、ほどんどの言語の mass * acceleration は、massacceleration の乗算を表します。 式の結果は、変数に配置したり、プロシージャの引数として使用したり、大きな式にネストしたりできます。

Power Fx を使用すると、さらに便利になります。 式自体は、計算内容については何も述べません。 それを変数に入れるか、関数に渡すかは作成者次第です。 Power Fx では、特定の意味を持たない式だけを記述する代わりに、式を識別子にバインドした 計算式 を記述します。 force を計算するために、計算式として force = mass * acceleration と入力します。 mass または acceleration が変更されると、force は自動的に新しい値に更新されます。 式は計算を記述し、計算式はその計算に名前を付け、レシピとして使用されます。 Power Fx が 数式言語 と呼ばれるのはこのためです。

たとえば、この スタック オーバーフローからの計算式 は文字列を逆の順序で検索します。 Excel では、次の画像のように見えます。

逆検索。

=RIGHT(A1,LEN(A1)- FIND("|", SUBSTITUTE(A1," ","|", LEN(A1)-LEN(SUBSTITUTE(A1," ","")))) という計算式が入力されている Excel の数式バーのスクリーンショットです。セル A1 に含まれているテキストは次の通りです。「Hello, World! It is great to meet you!」 セル A2 には、「you!」というテキストが含まれています

Power Fx は、コントロールのプロパティ参照に置き換えられたセル参照を使用して、同じ数式で機能します。

Power Fx 逆検索。

Power Apps の Power Fx 数式バーのスクリーンショット。 =RIGHT(Input.Text,Len(Input.Text)- FIND("|", SUBSTITUTE(Input.text," ","|", Len(Input.Text)-Len(Substitute(Input.Text," ","")))) という計算式。下の数式の入力ボックスのテキストは次の通りです。「Hello, World! It is great to meet you!」 文字ごとに表示されます。 同時に、ラベル ボックスに、最後の単語の文字が表示されます。 入力ボックスに全文が表示されたら、「you!」という単語が ラベル ボックスに表示されます。

Input コントロール値が変更され、Label コントロールは自動的に数式を再計算し、新しい値を表示します。 その他の言語でよくあるような OnChange のイベント ハンドラーはここではありません。

スクリーンの Fill 色で必要な数式を使用する他の例。 赤、緑、青を制御するスライダーが変更されると、再計算されるときに背景色が自動的に変更されます。

カラー スライダー。

他の言語でよくあるような、スライダー コントロールに必要な OnChange のイベントはありません。 明示的に Fill プロパティを設定する方法はありません。 色が意図したとおりに機能しない場合、1 つの計算式を調べて、機能していない理由を理解する必要があります。 予期しないときにプロパティを設定するコードを見つけるためにアプリを検索する必要はありません。時間の要素はありません。 正しい計算式の値は常に保持されます。

スライダーが暗い色に設定されると、赤、緑、青のラベルが白に変わり、補正されます。 これは、各ラベル コントロールの Color プロパティ上の簡単な計算式によって行われます。

Power Fx カラー スライダー。

色の Fill に生じていることから分離されていることは素晴らしいことです。これらは、2 つのまったく異なる計算です。 大きなモノリシックな手順の代わりに、Power Fx ロジックは通常、独立した多くの小さな計算式で構成されています。 これにより、容易に理解することができ、既存のロジックに支障をきたすことなく拡張が可能になります。

Power Fx は、Excel と同様に、宣言型言語です。 作成者は動作を定義しますが、その実行方法とタイミングを決定し最適化するのはシステム次第です。 実用的にするために、ほとんどの作業は副作用のない純粋関数を介して行われ、Power Fx も (Excel と同じように) 関数型言語になります。

常にライブ

ワークシートの定義的な側面は、ワークシートが常にライブであり、変更が即座に反映されることです。 ワークシートにはコンパイル モードや実行モードはありません。 計算式が変更されるかまたは値が入力されると、ワークシートはすぐに再計算され、変更が反映されます。 検出されたエラーはすぐに表示され、残りのワークシートには干渉しません。

同じことが Power Fx にも実装されています。 インクリメンタル コンパイラを使用して、プログラムが操作中のデータとの同期を継続することができるようにします。 変更はプログラムのグラフを通じて自動的に伝播され、依存する計算の結果に影響を与えます。これにより、色や位置などのコントロールのプロパティを駆動させることがあります。 増分コンパイラでは、IntelliSense、提案、オートコンプリート、および型チェックを備えた豊富な数式編集エクスペリエンスも実現します。

下のアニメーションでは、スライダー コントロールによって決まるラベル コントロールに注文番号が表示されていますが、その下のラベルに 2 つのエラーがあります。 このアプリは常に新鮮で、インタラクティブです。 最初に .InvalidName と入力して数式の修正を試みると、すぐに赤い線が表示されてエラーが表示されますが、アプリは実行を続けます。

常にライブ。

.Employee が入力されると Data ウィンドウに Employees テーブルが追加され、このテーブルのためのメタデータの取得と、列の提案がすぐに行われます。 あるテーブルから別のテーブルへの関係をたどったところ、システムはアプリの参照に必要な調整を行いました。 .Customer を追加するときに同じことが起こります。

変更するたびに、スライダーは最後の値で続行し、変数はその値を保持します。 全体を通して、注文番号は本来のようにトップ ラベルに表示されます。 アプリは、ライブで実際のデータを処理し続けています。 Excel と同じように、保存してその場を離れたり、他の人が開いて使用したりでききます。 ビルドの手順もコンパイルもありません。公開の手順だけで、ユーザーが使用できるアプリのバージョンを決定することができます。

ロー コード

Power Fx は、ビジネス ロジックを簡潔でも強力な数式で表します。 ほとんどのロジックは、より複雑なニーズに対応するための表現力と制御を十分に持ち合わせた 1 行にまとめることができます。 目標は、作成者が理解する必要のある概念の数を最小限に保つことで、— 理想的には Excel ユーザーが既に知ってことを超えないことです。

たとえば、指示書について従業員の名を検索するには、次のアニメーションに示すように Power Fx を記述します。 ここで Excel の概念を超えて追加された唯一の概念は、この .Employee.'First Name' の場合のようにデータ構造を調べるためのドット "." です。 アニメーションは、Power Fx 計算式の各部分と、同等の JavaScript で明示的にコーディングする必要のある概念との間のマッピングを示しています。

ローコード JavaScript。

Power Fx を使用してできるすべてのことや、宣言型の数式がもたらす最適化された自由についてよく考えてみましょう。

  • 非同期: Power Fx のすべてのデータ操作は非同期です。 作成者はこれを指定する必要はなく、呼び出しが終了した後、作成者は操作を同期する必要もありません。 メーカーはこの概念を意識する必要はありません。Promise またはラムダ関数についての知識も必要ありません。

  • ローカルとリモート: Power Fx は、メモリ内にあるローカル データとデータベースまたはサービス内にあるリモート データに同じ構文と関数を使用します。 ユーザーはこの違いについて考える必要はありません。 Power Fx は、サーバーにできることを自動的に委任し、フィルターを処理して、より効率的に並べ替えます。

  • リレーショナル データ: Orders と Customers は異なる 2 つのテーブルであり、多対一のリレーションシップを持っています。 OData クエリには、SQLでの Join と同様に、外部キーの知識を持つ "$expand" が必要です。 この数式には存在しません。実際、データベース キーの概念もメーカーは知る必要がありません。 メーカーは、単一のドット表記を使用して、レコードからリレーションシップのグラフ全体にアクセスできます。

  • プロジェクション: クエリを記述するとき、多くの開発者は select * from table と記述し、データのすべての列を戻します。 Power Fx は、アプリ全体や数式の依存関係でさえ使用されるすべての列を分析します。 プロジェクションは自動的に最適化されます。作成者は「プロジェクション」の意味を知る必要はありません。

  • 必要な項目だけを取得する: この例では、LookUp 関数は 1 つのレコードのみを取得し、それだけを返すことを意味しています。 Filter 関数を使用してさらに多くのレコードを要求した場合、— 数千件のレコードが見込みありと評価されることもある — 一度に返されるデータは 1 ページ分のみで、ページあたり 100 レコードのオーダーです。 ユーザーは、さらにデータを表示するためにギャラリーまたはデータ テーブルを通して手ぶりをする必要があり、自動的に取り込まれます。 作成者は、データ要求を管理が可能な塊に制限することを考えることなく、大きなデータ セットについて考えることができます。

  • 必要な場合にのみ実行: ラベル コントロールの Text プロパティに計算式を定義します。 選択した変数が変わると、LookUp は自動的に再計算され、ラベルが更新されます。 作成者は、Selectionの OnChange ハンドラーを記述する必要はなく、このラベルがそれに依存していることを覚えておく必要もありませんでした。 先程も述べたように、これは宣言型プログラムです。メーカーはラベルに何を入れたいかを指定し、いつどのようにフェッチするかは指定しません。 表示されていない画面上にあるため、また Visible プロパティが false のためにこのラベルが表示されていない場合、ラベルが表示されるまでこの計算を延期することができ、ほとんど発生しない場合は効果的に排除することができます。

  • Excel 構文の翻訳: Excel は多くのユーザーによって使用されており、そのほとんどはアンパサンド (&) は文字列の連結に使用されます。 JavaScript はプラス記号 (+) を使用し、その他の言語はドット (.) を使用します。

  • 表示名とローカライズ: First Name は Power Fx の数式で使用され、nwind_firstname は JavaScript と同等のもので使用されます。 Microsoft Dataverse および SharePoint では、一意の論理名に加えて、列とテーブルのための表示名があります。 この場合のように、表示名は多くの場合ずっと使いやすいですが、ローカライズできるという別の重要な性質があります。 多言語のチームがある場合、各チームのメンバーは自分の言語でテーブル名とフィールド名を表示できます。 すべてのユース ケースで、Power Fx は自動的に正しい論理名がデータベースに送信されることを確認します。

コードなし

ロジックの表し始めるために Power Fx を読み取りと書き込みを行う必要はありません。 シンプルなスイッチや UI ビルダーで表現できるカスタマイズやロジックは数多くあります。 これらのコード不要のツールは、コード不要のツールが完全な言語の表現力すべてを提供することはないことを認めながら、Power Fx の読み取りと書き込みを行い、ユーザーがさらに活用するのに十分なヘッドルームを確保するためにビルドされています。 コード不要のビルダーで使用する場合でも、作成者に自分の代わりに何が行われているのかを教育し、Power Fx について学び始めることができるように、数式バーは Power Apps 前面中央にあります。

例をいくつか見てみましょう。 Power Apps で、プロパティ パネルには、コントロールのプロパティで使用するノーコード スイッチとノブがあります。 実際には、ほとんどのプロパティの値は静的です。 カラー ビルダーを使用して、Gallery の背景色を変更することができます。 数式バーにこの変更が反映され、数式が別の RGBA 呼び出しに更新されていることを確認します。 いつでも数式バーに移動して、これをさらに一歩進めることができます — この例では ColorFade を使用して色を調整します。 色のプロパティは引き続きプロパティ パネルに表示されますが、fx のアイコンはホバーしたときに表示され、数式バーに移動します。 これは 2 つの方法で完全に機能します。ColorFade 呼び出しを削除することによりプロパティ パネルが理解できるものに色を返し、それを再度使用して色を設定できます。

コード不要の色。

次の例はさらに複雑です。 ギャラリーには、Dataverse から従業員の一覧が表示されます。 Dataverse は、テーブル データのビューを提供します。 これらのビューの 1 つを選択すると、計算式が変更され、このビュー名で Filter 関数を使用します。 2 つのドロップダウン メニューを使用して、数式バーにタッチすることなく正しいテーブルでダイヤルと表示を行うことができます。 しかし、さらに並べ替えを追加したいとします。 数式バーで実行することができます。プロパティ パネルに再び fx アイコンが表示され、数式バーに変更を入力します。 また、式をプロパティパネルが読み書きできるように単純化すると、再び使用できるようになります。

コード不要の並べ替え。

これはシンプルな例です。 Power Fx はきっと、コード不要のやり取りを実現させる優れた言語になるでしょう。 Power Fx は簡潔で強力、そして解析が簡単で、「障壁のない」ローコードに必要なヘッドルームを提供します。

プロ コード

ローコードの作成者は、専門家の助けを必要とするものや、プロの開発者によって保守や拡張が行われるものをビルドすることがあります。 専門家はまた、ローコード開発は、専門的なツールを構築するよりも、簡単、迅速、低コストであることを高く評価しています。 すべての状況で Visual Studio のフル パワーが必要なわけではありません。

専門家は、生産性を最高にするために専門的なツールを使用したいと考えています。 Power Fx の計算式は、Visual Studio Code、Visual Studio、またはその他のテキスト エディターで簡単に編集することができ、Power Fx を GitHub 、Azure DevOps、またはその他のソース コード管理システムを使用したソース管理の下に置くことができる YAML ソース ファイル に保存されます。

プロコードの Visual Studio Code。

プロ コード GitHub。

Power Fx は、共有と再利用に必要な数式ベースのコンポーネントをサポートしています。 さらに機能が強化された純粋なユーザー定義関数を作成できるように、コンポーネント プロパティへのパラメーターのサポートを発表しました。

また、Power Fx は、専門家が構築したコンポーネントとサービスをつなぎ合わせるのに優れています。 すぐに使用できるコネクタは、数百のデータソースと Web サービスへのアクセスを提供し、カスタム コネクタは Power Fx が任意の REST Web サービスと通信できるようにし、コード コンポーネントは Power Fx がスクリーンとページで完全にカスタムの JavaScript と対話できるようにします。

デザイン原則

シンプル

Power Fx は、そのメンバーが開発者としてトレーニングされていない作成者を対象者のターゲットにして設計されています。 この対象ユーザーがすでに馴染みのある知識や、すぐに理解できる知識をできるだけ使用します。 成功するために必要な概念の数は最小限に抑えられています。

シンプルであることは、開発者にとっても都合の良いことです。 開発者対象ユーザーに役立つよう、ソリューションの構築に必要な時間を短縮するローコード言語を目指しています。

Excel 整合性

Microsoft Power Fx 言語は、Excel の数式言語から大きく借用しています。 Excel を使用する多くの作成者の Excel の知識と経験を活用します。 タイプ、演算子、および関数のセマンティクスは、可能な限り Excel に近いものにしています。

Excel に答えがない場合は、SQL を見てみます。 Excel の次に、SQL は最も一般的に使用される宣言型言語であり、Excel にはないデータ操作と厳密な型指定に関するガイダンスを提供することができます。

宣言型

作成者は、正確には どのように または いつ 行うかではなく、ロジックが を行うかを説明します。 これにより、コンパイラは、操作の並行実行、必要になるまでの延期、またキャッシュ データの事前にフェッチと再利用により、最適化を行うことができます。

たとえば、Excel ワークシートの場合、作成者はセル内でリレーションシップを定義しますが、Excel は数式を評価する時と順序を決定します。 同様に、アプリの計算式は、ユーザーのアクション、データベースの変更、またはタイマー イベントに基づいて、必要に応じて「再計算」すると考えることができます。

機能

副作用のない純粋な関数を優先します。 これにより、ロジックは理解しやすくなり、コンパイラは最も自由に最適化できるようになります。

Excel では、アプリはその性質上、状態を変化させます — たとえば、アプリにはデータベースのレコードへの変更を保存するボタンがあります。 したがって、実用的な範囲で制限しますが、一部の機能には副作用があります。

コンポジション

可能な場合、追加された機能は既存の機能と共に適切に作成されます。 強力な機能は、より簡単に独立して使用できる小さな部分に分解できます。

たとえば、ギャラリー コントロールには個別の Sort および Filter プロパティの機能がありません。 代わりに、SortFilter 機能は 1 つの Items プロパティに一緒に構成されます。 Sort および Filter 動作を表す UI は、このプロパティに双方向のエディターを使用することにより、Items プロパティの上に階層化されます。

厳密な型指定

すべての値の型は、コンパイル時に認識されます。 これにより、作成中のエラーや豊富な提案を早期に検出できます。

ポリモーフィックな型はサポートされていますが、使用する前にそれらの型を静的な型に固定し、コンパイル時はその型を認識している必要があります。 IsTypeAsType 関数は、型のテストとキャストのために提供されています。

型の推定

型は、宣言せずに使用することで派生します。 たとえば、変数を数値に設定すると、変数の型が数値として確立されます。

型の使用法が競合すると、コンパイル時エラーが発生します。

ロケールに依存する小数点

たとえば、世界の一部の地域ではドット (.) が、その他の地域ではコンマ (,) が小数点として使用されます。 これは Excel でも同じです。 これは、世界中のすべてのユーザーが小数点とする一般的な正規のドット (.) を使用するその他のプログラミング言語では実行されません。 すべてのレベルの作成者にとって可能な限りアクセスしやすいものであるために、3,14 が、その構文を生涯にわたって使用してきたフランスのユーザーにとって 10 進数であることは重要です。

小数点の選択は、関数呼び出し引数に使用される一覧の区切りとチェーン演算子に対して、カスケードの影響を及ぼします。

作成者の言語の小数点 Power Fx 小数点 Power Fx 一覧の区切り Power Fx チェーン演算子
. (ドット) . (ドット) , (コンマ) ; (セミコロン)
, (コンマ) , (コンマ) ; (セミコロン) ;; (二重セミコロン)

詳細については、グローバル サポート を参照してください

オブジェクト指向ではありません

Excel はオブジェクト指向ではなく、Power Fx もそうではありません。 たとえば、一部の言語では、文字列の長さは、"Hello World".length JavaScript のように文字列のプロパティとして表されます。 Excel と Power Fx は、関数の用語でこれを Len( "Hello World" ) のように表します。

プロパティとメソッドを持つコンポーネントはオブジェクト指向であり、Power Fx を使用すると簡単に操作できます。 しかし、可能なときは、機能的なアプローチを好みます。

Extensible

作成者は、Power Fx 自体を使用してコンポーネントと関数を作成できます。 開発者は、JavaScript を使用してコンポーネントと関数を作成できます。

開発者向け

メーカーが主なターゲットですが、可能な限り開発者が使いやすいように努めています。 前述の設計原則と競合が発生しない場合は、開発者の方法で行います。 たとえば、Excel にはコメントを追加する機能がないため、C のような行コメントとインライン コメントを使用します。

言語の発展

プログラミング言語を進化させることは必要であり、また注意も必要です。 すべてのユーザーは — 当然のことながら — どれほどよい意図があっても、変更が既存のコードを壊し、新しいパターンを学ぶことをユーザーに要求することがあることを心配しています。 Power Fx は下位互換性を真剣に受け止めていますが、最初から正しい互換性があるわけではないことも強く信じており、コミュニティとして何が最善かをまとめて学習します。 進化は常に必要で、Power Fx は最初から言語進化のサポートを設計していたのです。

保存されるすべての Power Fx ドキュメントには、言語バージョンのスタンプが含まれています。 互換性のない変更を加える場合は、次に編集するときに計算式を自動的に書き換える「下位互換性コンバーター」と呼ばれるものを記述します。 変更がユーザーに教育する必要のあるメジャーなものである場合は、ドキュメントへのリンクを含むメッセージも表示します。この機能を使用することにより、それから生じたすべての変更にもかかわらず Power Apps のプレビュー バージョンで何年も前にビルドされたアプリを引き続き読み込むことができます。

たとえば、赤いバックグラウンドのエラー バナーを表示する ShowError 関数を紹介しました。

エラーを表示する。

ユーザーは気に入ったようですが、成功バナー (緑色の背景) または情報バナー (青色の背景) の表示方法を質問するユーザーもいました。 通知の種類を 2 番目の引数とする、より汎用的な Notify 関数を考えました。 Notify を追加し、ShowError を現在のまま保持することもできましたが、代わりに ShowErrorNotify で置き換えました。 以前は運用されていた機能を削除し、他のものに置き換えました。 同じことを実行するのに 2 つの方法があったので — 特に新しいユーザーには — 混乱を引き起こし、最も重要なこととして複雑さが加わりました。 不満を持つ人はなく、誰もが変更に賛成し、次の通知機能に話を進めました。

Power Apps の最新バージョンに読み込まれたときに、同じアプリはこのように表示されます。 ユーザーがこの変換を実行するのにアクションは必要ではなく、アプリを開いたときに自動的に実行されました。

通知関数は ShowError を置き換えます。

この設備により、Power Fx はほとんどのプログラミング言語よりも高速で積極的に進化することができます。

未定義の値はありません

JavaScript などの一部の言語は、初期化されていない変数またはプロパティがない 未定義 の値の概念を使用しています。 簡単にするために、この概念は避けました。 その他の言語において、定義されていないインスタンスは、エラーまたは空白の値として扱われます。 たとえば、初期化前の状態に戻されたすべての変数は空白の値で始まります。 すべてのデータ型は空白の値で実行できます。

データ型
演算子と識別子
テーブル
変数
命令型ロジック
グローバル サポート
式の文法
YAML 式の文法
Power Apps の数式