Power Fx は Microsoft Power Platform 全体で使用されるロー コード言語です。 汎用、厳密な型指定、宣言型、そして関数型のプログラミング言語です。
Power Fx は、人が使いやすいテキストで表現されています。 作成者が Excel のような数式バーまたは Visual Studio Code のテキスト ウィンドウで直接操作できるローコード言語です。 ローコードの「ロー」は、言語の簡潔でシンプルな性質によるものであり、一般的なプログラミング タスクを作成者と開発者の両方にとって容易にします。 これにより、プログラミング経験のない人向けのコードなしから経験豊富な専門家向けの「プロコード」まであらゆる開発が実現し、新たに学ぶことや書き直しの必要がないので、さまざまなチームが協力して時間と費用を節約できます。
注意
Microsoft Power Fx は、Power Apps のキャンバス アプリの数式言語の新しい名前です。 この概要と関連記事は、キャンバス アプリから言語を抽出し、その他の Microsoft Power Platform 製品と統合して、オープン ソースとして利用できるようにするために進行中の作業です。 今日の言語についてもっと学び、体験するには、Power Apps ドキュメントのキャンバス アプリで数式を使い始めるから開始し、Power Apps 無料試用版に無料でサインアップします。
Power Fx は、宣言型のスプレッドシートのような数式でオブジェクトをバインドします。 たとえば、その他のコントロールのプロパティに基づいて値を計算する関連式を使用して、UI コントロールの表示プロパティを Excel ワークシートのセルとして考えます。 計算式のロジックは、スプレッドシートと同様に値を自動的に再計算しますが、これはコントロールの表示方法に影響します。
また、Power Fx は必要に応じて命令論理を提供します。 通常、ワークシートにはデータベースに変更を送信できるボタンはありませんが、アプリにはよくあります。 宣言型ロジックと命令型ロジックの両方に同じ式言語が使用されます。
Power Fx は、オープンソース ソフトウェアとして利用できるようになります。 現在、キャンバス アプリに統合されており、他の Microsoft Power Platform 製品で、オープン ソースとして使用するために Power Apps から抽出するプロセスが進行中です。 詳細については、GitHub 上での Microsoft Power Fx を参照してください
この記事は、言語とそのデザイン原則の概要です。 Power Fx の詳細については、次の記事を参照してください。
これらは、Power Apps および Power Fx の作成に影響を与えた質問でした。 毎日、数億のユーザーが Excel でワークシートを作成しています。既に知っている Excel の概念を使用した簡単なアプリの作成を提供しましょう。 Power Apps から Power Fx を壊すことによって、ビルディング オートメーション、仮想エージェント、またはその他のドメインに関するこれらの質問に答えます。
Power Fx を含むすべてのプログラミング言語には、式 (数値、文字列、またはその他のデータ型の計算を表す方法) があります。 例えば、ほどんどの言語の mass * acceleration は、mass と acceleration の乗算を表します。 式の結果は、変数に配置したり、プロシージャの引数として使用したり、大きな式にネストしたりできます。
Power Fx は、これをさらに一歩進めます。 式自体は、計算内容については何も述べません。 それを変数に入れるか、関数に渡すかは作成者次第です。 Power Fx では、特定の意味を持たない式を書くだけでなく、式を識別子にバインドする数式を書きます。 force を計算するために、計算式として force = mass * acceleration と入力します。 mass または acceleration が変更されると、force は自動的に新しい値に更新されます。 式は計算を記述し、計算式はその計算に名前を付け、レシピとして使用されます。 これが私たちが Power Fx を式言語と呼ぶ理由です。
=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 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!」という単語がラベルボック氏に表示されます。
スライダーが暗い色に設定されると、赤、緑、青のラベルが白に変わり、補正されます。 これは、各ラベル コントロールの Color プロパティ上の簡単な計算式によって行われます。
色の Fill に生じていることから分離されていることは素晴らしいことです。これらは、2 つのまったく異なる計算です。 通常 Power Fx ロジックでは、大きなモノリシック プロシージャではなく、多数の独立した小さな式で構成されています。 これにより、容易に理解することができ、既存のロジックに支障をきたすことなく拡張が可能になります。
Power Fx は、Excel と同様に宣言型の言語です。 作成者は動作を定義しますが、その実行方法とタイミングを決定し最適化するのはシステム次第です。 実際には、ほとんどの処理が副作用が生じない純粋関数によって実行されるため、Power Fx は関数型の言語と言えます (Excel と同様)。
Power Fx と同じことが実装されています。 インクリメンタル コンパイラを使用して、プログラムが操作中のデータとの同期を継続することができるようにします。 変更はプログラムのグラフを通じて自動的に伝播され、依存する計算の結果に影響を与えます。これにより、色や位置などのコントロールのプロパティを駆動させることがあります。 増分コンパイラでは、IntelliSense、提案、オートコンプリート、および型チェックを備えた豊富な数式編集エクスペリエンスも実現します。
Power Fx は、簡潔でありながら強力な式でビジネスロジックを説明します。 ほとんどのロジックは、より複雑なニーズに対応するための表現力と制御を十分に持ち合わせた 1 行にまとめることができます。 目標は、作成者が理解する必要のある概念の数を最小限に抑えることです。理想は、Excel ユーザーがすでに把握している概念の数を超えないようにすることです。
たとえば、注文について従業員の名を検索するには、次のアニメーションに示すように Power Fx を記述します。 ここで Excel の概念を超えて追加された唯一の概念は、この .Employee.'First Name' の場合のようにデータ構造を調べるためのドット "." です。 アニメーションは、Power Fx の式の一部とそれと同等の JavaScript でのコーディングに必要な概念のマッピングを示しています。
Power Fx の機能や宣言型の式によってもたらされる最適化の自由度について、詳しく見てみましょう。
非同期: Power Fx 内のすべてのデータ操作は非同期です。 作成者はこれを指定する必要はなく、呼び出しが終了した後、作成者は操作を同期する必要もありません。 メーカーはこの概念を意識する必要はありません。Promise またはラムダ関数についての知識も必要ありません。
ローカルとリモート: Power Fx ローカルのメモリ内にあるデータと、リモートのデータベースまたはサービスにあるデータに対して同じ構文と関数を使用します。 ユーザーはこの違いについて考える必要はありません。 Power Fx は自動的にサーバーに委任し、フィルターやソートをより効率的に処理します。
投影: クエリを作成するときに、多くの開発者は、すべての列のデータを返す select * from tableを記述します。 Power Fx は、式の依存関係を越えて、アプリ全体で使用されているすべての列を解析します。 プロジェクションは自動的に最適化されます。作成者は「プロジェクション」の意味を知る必要はありません。
表示名とローカリゼーション: First Name は Power Fx 数式で使用され、 nwind_firstname はJavaScriptの同等物で使用されます。 Microsoft Dataverse および SharePoint では、一意の論理名に加えて、列とテーブルのための表示名があります。 この場合のように、表示名は多くの場合ずっと使いやすいですが、ローカライズできるという別の重要な性質があります。 多言語のチームがある場合、各チームのメンバーは自分の言語でテーブル名とフィールド名を表示できます。 すべてのユース ケースにおいて、Power Fx は自動的に正しい論理名をデータベースに送信します。
コードなし
Power Fx を読み書きしなくても、ロジックの記述を開始できます。 シンプルなスイッチや UI ビルダーで表現できるカスタマイズやロジックは数多くあります。 これらのノーコード ツールは、Power Fx の読み取りと書き込みを行うために構築されており、ノーコード ツールが完全な言語のすべての表現力を提供することは決してないことを認めながら、誰かがそれをさらに進めるための十分な余裕があることを保証します。 ノーコード ビルダーで使用する場合でも、数式バーは Power Apps の前面と中央にあり、開発者に代わって何ができるかを教育し、開発者が Power Fx について学び始めることができるようにします。
これはシンプルな例です。 Power Fx は、ノーコードの対話を記述するための優れた言語になると確信しています。 Power Fx は簡潔で強力、そして解析が簡単で、「障壁のない」ローコードに必要なヘッドルームを提供します。
プロ コード
ローコードの作成者は、専門家の助けを必要とするものや、プロの開発者によって保守や拡張が行われるものをビルドすることがあります。 専門家はまた、ローコード開発は、専門的なツールを構築するよりも、簡単、迅速、低コストであることを高く評価しています。 すべての状況で Visual Studio のフル パワーが必要なわけではありません。
専門家は、生産性を最高にするために専門的なツールを使用したいと考えています。 Power Fx 数式は YAML ソース ファイルに保存できます。これは、Visual Studio Code、Visual Studio またはその他のテキスト エディタで簡単に編集でき、Power Fx が GitHub、Azure DevOps、またはその他のソースコード管理システムでソース管理下に置かれるようにします。
Power Fx は、共有と再利用のための数式ベースのコンポーネントをサポートします。 さらに機能が強化された純粋なユーザー定義関数を作成できるように、コンポーネント プロパティへのパラメーターのサポートを発表しました。
また、Power Fx は専門家によって構築されたコンポーネントとサービスをつなぎ合わせるのに適しています。 すぐに使用できるコネクタは、何百ものデータソースと Web サービスへのアクセスを提供し、カスタム コネクタは Power Fx が任意の REST Web サービスと通信できるようにし、コード コンポーネントは Power Fx が画面とページで完全にカスタム化された JavaScript と対話できるようにします。
設計原則
シンプル
Power Fx は、メンバーが開発者としてトレーニングされていない開発者対象ユーザーをターゲットにするように設計されています。 この対象ユーザーがすでに馴染みのある知識や、すぐに理解できる知識をできるだけ使用します。 成功するために必要な概念の数は最小限に抑えられています。
Excel も Power Fx もオブジェクト指向ではありません。 たとえば、一部の言語では、文字列の長さは、"Hello World".length JavaScript のように文字列のプロパティとして表されます。 Excel と Power Fx は、代わりに関数に関しては Len( "Hello World" ) のように表します。
プロパティとメソッドを持つコンポーネントはオブジェクト指向であり、Power Fx は簡単に連携します。 しかし、可能なときは、関数を利用したアプローチを取る方がより適切です。
Extensible (拡張可能)
開発者は、Power Fx 自体を使用してコンポーネントと機能を作成できます。 開発者は、JavaScript を使用してコンポーネントと関数を作成できます。
プログラミング言語を進化させることは必要であり、また注意も必要です。 すべてのユーザーは、当然のことながら、どれほどよい意図があっても、変更が既存のコードを壊し、新しいパターンを学ぶことをユーザーに要求することがあることを心配しています。 Power Fx は下位互換性に真摯に取り組んでいますが、最初から常に正しくなるとは限らないことも強く信じており、コミュニティとして何が最善かをまとめて学習します。 私たちは進化しなければなりません、そして Power Fx は最初から言語進化のサポートを設計しました。
言語バージョンスタンプは保存されたすべての Power Fx ドキュメントに含まれています。 互換性のない変更を加える場合は、次に編集するときに計算式を自動的に書き換える「下位互換性コンバーター」と呼ばれるものを記述します。 変更がユーザーに教育する必要のあるメジャーなものである場合は、ドキュメントへのリンクを含むメッセージも表示します。この機能を使用することにより、それから生じたすべての変更にもかかわらず Power Apps のプレビュー バージョンで何年も前にビルドされたアプリを引き続き読み込むことができます。