Microsoft Power Fx がオープンソースとしてプレビュー公開されました。MITライセンスにて提供されており、誰でもこの Excel のようなローコードを自分のプロジェクトへ組み込むことが可能です。

3月のMicrosoft Ignite では、Power Fx について発表しました。そして、この新しい言語への関心は、予想をはるかに上回るものでした。

今日、ソースコードの公開の準備ができました。このバージョンはプレビューであることからバージョン0として位置づけられます。皆さんのフィードバックを基に、どのように言語を形成していくか、どのようにAPIをホストしていくかなどの仕様を決めていきました。まだ、すべての関数が準備できたわけではなく、関数バーもまだ完成していません。まだまだ皆さんが聞きたい質問が多くあると思いますが、これから時を経て、進めていくことを楽しみにしています。

GitHub のレポジトリ https://github.com/microsoft/power-fx から今後の更新内容を発表し、皆さんはフィードバックをこのレポジトリから行っていただけます。

ローコードをみんなに

Power Fx はみんなのためのローコード言語です。何百万人も利用しているExcel でのロジックの組み方を活用しています。GPT-3などの自然言語サポートや、ノーコードツール/ウィザードにより、Power Fx の関数を利用するハードルが更に下がります。

プロの開発者にとっても Power Fx はお気に入りの言語となるはずです。その理由として、開発時間を大幅に削減することが可能だからです。宣言型の、厳密に型指定された、機能的な言語ベースを持ちます。インクリメンタル コンパイル、Intellisense、インスタント エラー報告、およびオーサリング中の実行は、優れたオーサリング エクスペリエンスを提供します。 VS Code や Git などの既存のツールとワークフローを採用し、GitHub、Azure Dev Ops、またはその他の Git プロバイダーを介して Power Apps Studio の実験的な共同編集サポートを発表します。差分ビルド、Intellisense、リアルタイムなエラー表示、そして作成途中に実行可能な素晴らしい開発体験を提供します。Visual Studio Code や Git などの既存のツールやワークフローを採用しており、本日の発表では、GitHub、Azure DevOps またはその他の Git プロバイダー上での同時開発対応を試験的に公開します。

最も素晴らしいのが、これらの対応は非常にシームレスに作られており、すべて Power Fx が共通言語として利用されているのです。フュージョンチーム(市民開発者とプロの開発者の共同開発をするチーム)は、幅広いスキルセットと専門性をもった人材が一緒に効果的にソリューションの作成を可能にします。

ローコードをどこでも

今年の3月をはじめに、プライベートプレビューとして2つの連携を Power Platform で提供してきました。1つはモデル駆動型アプリのコマンドバーをPower Fx でカスタマイズできるようになったことにより、JavaScriptによる開発が不要となり、よりシンプルにカスタマイズできるようになりました:

2つ目は、Dataverse での計算列への対応です。Power Fx を用いて簡単かつパワフルな関数を列に対して設定することができます:

これらの機能はまた氷山の一角にすぎず、これからも色々と新しくPower Fx を用いたものを提供していきます。 Power Virtual Agents と Power Automate Desktop への連携が来年には予定されており、開発が進んでいます。

Power Fx のメリットは明確です:Power Fx を一つの製品で学べばその知識は別の製品でも活用できます。すでに数百万人が利用している Excel の利用者がそのまま活用できるようにという思いを込めて Power Fx が誕生した背景でもあります。

でもそこだけでは終わりません。ナレッジが業界を跨いで活用できればどれだけ素晴らしいだろう?成功しているプログラミング言語は、独立したものではありません。多くは想定していない利用用途でも活用されています。言語が成長するには、アクティブなコミュニティと利用者が必要なのです。なので Power Fx はオープンソースで提供されます。ローコードを誰でも、どこでもという思いを込めて。

Acumatica 社はこの流れに最初から私たちと共に歩んできてくれました。我々のチームと連携し、様々な貴重なフィードバックをもらえました。副代表のAjoy Krishnamoorthy 氏により、Power Fx の活用は Acumatica 社の今年の夏のカンファレンスでも発表されました。

素晴らしいのはマイクロソフト自身の製品も同じようにオープンソースであり、NuGetパッケージを提供している点です。これによりオープンソースコミュニティからの貢献により品質が改善されていき、Power Fx を活用した社内外の製品がその恩恵を受けられることになります。

皆さんの番です!

それでは実際に Power Fx を利用して、シンプルな例として Read-Eval-Print-Loop (REPL) のコンソールアプリケーションを作り、関数を定義し、変数を扱い、結果を見てみましょう。

試すには無料の Visual Studio Community Edition を利用して手順を解説していきますが、GitHub 上に C#のソースコードも NuGet も用意しているので、お好きな開発プラットフォームを利用していただいてもできます。

  1. まず、まだインストールされていない方は Visual Studio 2019 かそれ以降で、最低限 Community Edition が必要です。
  2. Visual Studio を起動し、画面右側のレポジトリを複製を選択します。
  3. https://github.com/microsoft/power-fx-host-samples をレポジトリに指定し、複製をクリックします。必要なPower Fx のNuGetパッケージは自動的にダウンロードされ、インストールされます。
  4. ソリューションエクスプローラーから ConsoleREPL を選択します。
  5. ビルドメニューから、ソリューションをビルドを選択します。
  6. デバッグメニューからデバッグを開始を選択します。コンソール画面が表示されます。
  7. Power Fx が動いています!実際にExcelの関数をいくつか試してみてください。

ではステップ毎に解説してきます。

  • 関数を評価するには、単純に入力するだけで試せます。例えば、2+2 と乳りょおくすると、自動で計算エンジンが実行されます。Power Fx により文字列の式は自動で認識されたのです。
  • 次に 名前=式 と関数を宣言してみましょう。1つ目の例では、円周率を指定したいと思います(Pi関数というものはまだ存在しません)固定値で宣言すると、自動で不変定数になったのです。実際には裏では engine.SetFormula が呼び出されました。
  • Set関数で変数を指定します。例えば Set( Radius, 10 )としましょう。そうすると、裏では engine.UpdateVariable が実行されています。
  • 次に別の式を指定します。今回は Area = 3.14 * Radius * Radius にしてみます。この関数はほかの関数や変数への依存関係があるため、依存するものが変更すると、自動でこの関数は再計算されます。例えば Radius を400としましょう Set( Radius, 400 )そうするとAreaの値が変わったことがわかります。
  • 次に Circumference を追加してみたいと思います。Radius を80にすると今度はAreaもCircumference も自動で再計算されたことがわかります。Excelの表で行うものと全く同じように動作しますよね。
  • Help() を実行することで、REPLの詳細情報が確認できます。Help関数はPower Fxの言語の一部ではありませんが、このホストアプリケーションのものです。これはホストアプリ独自のものと混在する良い例です。engine.AddFunction を利用して追加登録されているのです。

コンソールアプリREPL は https://github.com/microsoft/power-fx-host-samples/blob/main/Samples/ConsoleREPL/ConsoleREPL.cs からご覧いただけます。

円を使った例もいいですが、今度はテーブルを用いた例で説明しましょう。Power Apps のキャンバスアプリと同様にフィルター、ソート、集計などが利用できることがわかります。

より深く解説すると…

今回のリリースでは、C# を用いたPower Fxの例を紹介しました。お客様やパートナーなどと話し、 C# をサーバー環境で行うことが一番興味を持ってもらえたからです。実際には Power Apps はJavaScriptのコードジェネレーターを利用しており、Dataverse の計算列では SQL コードジェネレーターが採用されており、今後それらも公開していく予定です。コードジェネレーターとは別に、すべての連携は同じコンパイラをフロントエンドでは採用しています。

今回は Power Apps や Excel の関数にある、60個の関数を実装しました。今後関数は増やしていく予定です。

数式バーはオープンソースのMonacoを用いて開発しており、Visual Studio Code と同じエンジンでもあります。こちらに関してもオープンソースとして公開し、NuGetパッケージを公開します。数式バーは全体的な体験の一部であり、作成者が数式を書く際の関数の提案や注意、警告などを提供しています。今回の発表には間に合いませんでしたが、今後数か月後に公開する予定です。

ソースコードの公開場所

GitHub には二つのレポジトリでソースコードを今回公開しました:

  • https://github.com/microsoft/power-fx はコアなコンパイラ、ランタイムとドキュメントを格納しています。ここにはNuGetパッケージのソースもあります。
  • https://github.com/microsoft/power-fx-host-samples は上記のコアを利用したサンプルを格納しています。ホストのエンジンをAPI経由でどのように呼び出したりしているかがわかる、素晴らしい例があります。

コアの方を複製し、ビルドする必要はありません。代わりにNuGetパッケージで、以下の2つのパッケージをインストールするだけでも利用できます:

  • Microsoft.PowerFx.Core
  • Microsoft.PowerFx.Interpreter

次のステップ

今回のバージョンはバージョン0と思ってもらえればと思います。まだプレビューで、今後変更していくこともあります。どのように言語を実装するか、皆さんと一緒に作っていくための最初の一歩です。   https://github.com/microsoft/power-fx 上で今後活動していきます!