AutomateにおいてダウンロードされたプログラムにおいてもURIによる同一プログラム内のFlow起動を可能に

Automateロゴ

Automateロゴ

Android用オートメーションソフトウェアAutomateのユーザにだけ意味のある話。

Automateにおいて,通常のプログラミングシステムではプログラムと呼ぶものを “flow” と呼ぶ。しかし大変紛らわしいことに,その中には1つ以上の “flow” が含まれており,こちらの “flow” はそれぞれエントリーポイントを持った一連の処理を指す。Automateにおいて,ユーザが手動で処理を開始したり停止したりするのは後者の flow 単位で行われる。本稿では誤解を避けるため前者の “flow” を「プログラム」と呼ぶことにする。なお,”fiber” というの語も使われるが,それはflowを実行するスレッドと理解すればよい(ただし,必ずしもfiberはスレッドとして実装されているわけではないらしい)。 “Flow ⋅ Automate ⋅ LlamaLab” 参照。

さて,Automateはフローチャート型のビジュアルプログラミングパラダイムを採用しており,それぞれが一つの処理を表すブロックを組み合わせることでプログラムを作成する。Flow startFlow stopというflowを開始する・停止するブロックが用意されているが,対象となるflowはそのURIで指定する。

プログラムの起点となるのはFlow beginningブロックであるが,それを同定するURIはAutomateシステムにより自動的に割り振られる。問題は,このURIがそれぞれのAutomateインスタンスにより異なり,値が一定ではないこと。自分が作成したプログラムを一台のAndroid端末内のAutomateだけで使うのであればこれは問題にならないが,同じプログラムを他端末のAutomateにインポートしたりすると,同じはずのFlow beginningブロックのURIがオリジナルの端末上での値と異なり,そのflowをFlow startFlow stopで開始・停止することができなくなる。

Flow startのドキュメントでは, Flow beginning pickブロックを利用し,プログラム実行時にユーザに手動で正しいflowを選びさせるように指示しているが,それはいくらなんでも非現実的だ。何かいい回避策がないか調べると, “Starting internal flows dynamically : AutomateUser” に回避策があった。それは相対URIを使うこと。

Flow URIは

content://com.llamalab.automate.provider/flows/25/statements/3

のような形式だが,これを単に “statements/3” として呼び出すことで,他端末に移しても引き続き動作するようなプログラムにできる。

他プログラムのフローを呼び出すのは残念ながらそう簡単には行かない。上記URI中の flows の後の数字で,特定のAutomateインスタンス内でのflowを特定するようだ。他プログラムをライブラリー的に利用したいのであれば,一つの手はスマートな方法は諦めてユーザに手動で指定させるのが,ベストではないにしろ現実的。

もっと込み入ったことをしたければ,プログラム・マネージャーのようなものを用意するしかない。このプログラム・マネジャーはそれが動くAutomateの全てのプログラムを管理し,どのプログラム(ないしはその下位flow単位で)がどういった機能を提供するかを知っている(provide <feature> 相当)。さらに機能のリクエストがあったときに(require <feature> 相当)それを実現するflowを教えて,それを呼び出せることを可能にしてやる。ただ,こういった機能を利用できるには最低限各プログラムで,プログラム・マネージャーのflowを知る必要はある。

プログラムをGoogle Driveを利用するなどして同期させるような機能も合わせて持たせられれば理想的。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください