2021年の3月にマイクロソフトはPower Fx を発表しました。発表から多くの興味と感心を持っていただけました。ありがとうございます。マイクロソフトの内外関わらず、様々な人がこのExcelライクな関数をどのように自分たちの製品へ組み込めるかを問い合わせいただいてます。

3月にも発表した通り、Power Fx によってExcel に近しい形でより多くの作成者が利用可能となる素晴らしい言語で、ノーコードからプロのコードまで幅多くのシナリオに対応します。本日発表したもう一つの機能、GPT-3やPROSEなどのAI機能により、今までノーコードだった開発者はPower Fxをより簡単に書くことが可能になります。

マイクロソフトではPower Fx を様々な製品に組み込めるように頑張ってきました

  • モデル駆動型アプリのコマンドバー:もう、自分のコマンドを作るためにJavaScriptを覚える必要はありません!キャンバスアプリと同じPower Fx の関数を利用するだけで、Dataverseのデータを取り扱うことができます。
  • Dataverse 計算列:Power Fx の関数を Dataverse のロールアップ列と計算列で利用できるようになり、よりモダンでパワフルな方法で設定できます。
  • Acumatica:Power Platform、マイクロソフト以外でも採用頂きました。Acumatica社のサービスでは Power Fx をフォームの計算列などで採用し、関連するテーブルや他の関連する項目を参照できます。

モデル駆動型アプリのコマンド

Build でマイクロソフトは初めて、モデル駆動型アプリに対して Power Fx を利用し、Excel ライクな関数バーを用いて独自のコマンドを作ることができます。これにより市民開発者にとってより簡単にカスタマイズが可能となり、従来のようにJavaScriptのコードを書く必要はありません。プロ開発者としてもより少ない時間でコマンドの作成やメンテナンスが可能です。

以下のアニメーションでは、新しいコマンドデザイナーを用いて新しいコマンドが作成されています。このコマンドでは現在の取引先に対して関連するタスクを登録できるボタンを追加しています。この新しいデザイナーにはPower Fx 関数バーが搭載されており、IntelliSenseとエラー検出機能も搭載してます。キャンバスアプリでボタンに関数を設定するのと同じように、ここでもOnSelectに対して関数を設定し、Patch関数が呼び出されて、新しいデータが作成されていることがわかります。

モデル駆動型アプリ用のPower Fx 機能は6月末にパブリックプレビュー予定です。

Dataverse 計算列

Dataverse にはすでに計算列が用意されていることをご存じかもしれませんが、あまり使いやすくありません。ポップアップ画面が表示され、あまり複雑な設定も現行のものでは出来ませんでした。例えばTrimLeft関数という独自のものなども存在し、学習も必要でした。

今回の Build では、Power Fx を用いたアップグレードを発表します。関数バーは以下のように(一時的に説明列になってますが)関数バーが組み込まれる予定です。今までロールアップ列か選択する必要がありましたが、これは統合されます。これによりすでにキャンバスアプリに搭載されたDataverse の関連列へのサポートが可能となります。

計算列への Power Fx 対応は6月末にパブリックプレビュー予定です。

Acumatica

Power Fx を発表した後、Acumatica 社も自分たちの製品・サービスにローコード機能を搭載させたいと思い、マイクロソフトへ連絡しました。彼らの製品チームとコラボレーションし、Power Fx を組み込みました。この連携による経験は、マイクロソフトにとってもオープンソースな言語として誰でも使えるようにするためには貴重なものでした。

以下のデモではPower Fxを用いて計算列が追加されています。同じExcel ライクな関数で設定することができ、Sum関数とAverage関数を用いて関連するテーブルを集計しており、割引額を更新すると、自動で計算されていく流れが見えます。

初期段階でのアーキテクチャ

上記の体験により、アーキテクチャをより良いものへと改善することができました。以下の図はマイクロソフトが考えている案を示したものです。関数バーと分析(コンパイル機能)が密に連携していることがわかります。

また、様々なランタイム環境で必要だということがわかりました。:

  • JavaScript: キャンバスアプリとモデル駆動型アプリ
  • C#: Acumatica社の製品はC#で書かれていました。Power Virtual Agentsや、将来的な連携についてもC#をサーバーで実行します。現在、コンパイラーのバックエンドではなく、インタープリターとして利用しています。
  • T-SQL: Dataverseの計算列はクエリの一部として実行する必要はあります。

今後の方向性

現時点ではまだオープンソースのコードやNuGetのパッケージとしてリリースできる段階ではありませんが、確実にそのゴールに向けて進んでいます。上記のような例はPower Apps から独立したパッケージで動いており、非常に大きな進捗となりました。