皆さんは Power Apps のキャンバスアプリを編集しようとした際に、他の人が使っていたためにこのような画面が表示されたことはありませんか?

ああああ、また誰かが開いている…その人がアプリの編集を終えるまで、閉じて待つしかないな…二人同時に編集したり、いや、もっとたくさんの人と同時に編集できれば、より生産性が上がるのに…

開発チームではこのようなフィードバックを耳が痛くなるほど、いただきました。そして共同編集機能について開発を取り組んできました。

まず、解決に向けての初めの1歩として、新しい試験的機能を公開し、上記のような画面をなくすことにしました。複数の人はキャンバスアプリを同時に開くことが可能となり、それぞれ変更を加え、自動でその変更はマージ(統合)することができます。マージはアプリの構造を自動で認識し、綺麗な形で統合されます。

今後開発チームが目指しているのは、Excel や Word などと同じようなリアルタイムな共同編集です。今回の機能公開はその一歩目であり、まずはマージできる仕組みと利用者の体験を向上させるものです。変更内容は非同期的に統合され、バージョン管理へは自動で同期します。

以下のアニメーションでは、エミリーさんとジョンさんが一緒にアプリを開いているアニメーションです。各変更内容はお互いに共有されていることがわかります。仕組みの裏側では、Azure DevOps が Git のプロバイダーとして利用されており、Git を利用してバージョン管理が行われ、Power Fx の YAML ファイル形式にてどの変更内容が誰によって行われたかが Azure DevOps のBlame機能を利用して特定されているのです。

作成者はあくまでも Power Apps Studio (キャンバスアプリ編集画面)で作業しているだけでして、他のアプリ同様、アプリの編集や変更などの操作には違いがなく、通常のアプリの編集と同じ操作を行っていますので、プロの開発者が普段行うような Git レポジトリや、マージについて(Git へのログイン以外は)全く意識する必要がありません。これによりフュージョンチームをより実現しやすくなり、プロの開発者はアプリの初期設定と管理を行いつつ、市民開発者は中の編集を共同で Power Apps Studio 内から行うことが可能になったのです。

この機能は本日発表しましたが、実際の利用は12月上旬からよ予定しています。 

試験的機能について

そして詳細についてお話する前に、試験的機能について触れたいと思います。機能によっては概ね開発できたもの、方向性が明確なものがリリースされていますが、ものによってはその名の通り試験的であり、皆さんからのフィードバックを基に大きく仕様が変わることもあります。

今回発表する機能は、後者の方であり、真の試験的な機能です。そのため、既定では無効化された状態となり、もし利用されたい場合は有効化する必要が出ます。ですのでもし不満に思われた場合はまた無効化することができますが、ぜひ実際に機能が配信されたら一度はお試しいただければと思います。

特に、Git に対する活用は日々進化しており、Dataverse の開発チームはより包括的なバージョン管理機能の開発を進めています。より深い連携を今後進めていくことで、例えばパーソナルアクセストークンの利用も実現できるようになります。

セマンティックマージ

この機能を実現するにあたって必要なのは、「いい感じにマージ」してくれるという点で、皆さんのフィードバックは必要不可欠なものとなります。マージはなるべく自動的に行われるようにし、ユーザーによる明示的なマージを最小限に抑えようと努力しています。現時点では競合が発生した場合の対処方法が画面上には実装されていません。

例えばですが、二人の作成者が同じアプリを同時に編集していたとします。二人ともラベルとしてLabel1と命名したとしましょう。これは意識をしていなければ既定の設定なのでよくあることかと思います。

セマンティックマージにより、実際には1つのラベルではなく2つのラベルが追加されたということがわかるのです。よって追加されたラベルの1つはLabel2として名前が変更され、Label2へ実際に依存していた関係も自動的に修正されます。これによりアプリをマージした際はどちらのラベルも表示できます。

もしセマンティックマージがなかった場合、システムは同じラベルが追加されたと認識してしまい、ユーザーにより明示的に競合を修正してもらう必要性が出てきてしまい、結果として1つのラベルのみが表示されることになってしまうのです。