Adobe UXP v6.3 fileSystem触ってみた。
今年も大幅アップデートの季節が来ました。皆さん各種アプリケーションの新機能を触っていますが私はそっちの新機能そっちのけでUXP Scriptばかり触っています。ただ現状IllustratorでCEPが使えなくなるとかなりの不都合があるので当分IllustratorのCEPが廃止されないように祈るだけです。
それでIllustratorは置いといてUXPですが今回のアップデートでついにローカルファイルへのアクセスがダイアログ無しでできるようになりました。Node.jsチックなファイルシステムが大幅に追加されたので触ってみます。まず実際に触る前にmanifestの設定をローカルアクセスできるように設定します。以下実際のサンプルです。
今回のポイントはlocalFileSystemです。この項目をfullAccessにします。
前バージョンでは基本requestでしたがファイルアクセス緩和をするにはfullAccessが必要になります
未確認ですがドキュメントによるとfullAccessの場合実際のプラグインをインストール前にエンドユーザーに対してローカルアクセスの許可を事前に求めるらしいです。
実際に使ってみる
肝心のアクセスですがまんまNode.jsです。(ただし同じものではない)
まずfsモジュールを使ってアクセスしてみましょう。
今回使用するfsモジュールはNode.jsのfsモジュールと似たようなもので(ただし少し異なる)また前バージョンより実装されているuxpモジュールのstorage.localFileSystemとも異なります。
ドキュメントはこちらにあります。ドキュメントを見るといかにもuxpモジュールからアクセスするような書き方をしていますが実際は以下のようにfsモジュールからアクセスします。
ご覧のようにEntry型のオブジェクトを渡す必要も無いのでダイアログを通してファイルパスを読み込む必要もありません。
見た目はまんまNode.jsですね。しかしNode.jsと違いコールバックを省略すればそのままPromiseを返してくれます。(Node.jsはfs.promisesからPromiseを返す)こういうちょっとした仕様の違いが色々あるので必ずドキュメントは読む必要があります。その他各メソッドに同期、非同期の二種類があるのもNode.jsと同じです。ちなみにコールバックは以下のようになります。
その他Node.jsなシステム
グローバルオブジェクトprocessでUXPシステムの情報を取得できます。
osモジュールではNode.js同様コンピューターのオペレーターシステム関係の情報が取得できます。
ただしpathモジュールは現状path.basenameメソッドしか使えなさそうです。
もしかしたら他にpath関係のモジュールか何かあるのかもしれませんが。
ダイアログを出さずにデスクトップのファイルを取得する
折角なのでダイアログを呼び出さずにデスクトップのファイルの一覧を読み込んでみましょう。
実際デスクトップにあるファイルの読み込み、もしくはファイルを保存といった処理はそこそこ実装することがあると思います。
osモジュールのhomedirメソッドによってユーザーフォルダーにアクセスできます。そこからデスクトップにアクセスします。
また重ねて言いますがNode.jsのようなシステムですが決して同じものでは無いのでNode.jsにどれだけ慣れていても必ずドキュメントに目を通してください。