UXP開発者にとって存在する三つのfs

UXP

UXPのドキュメントを読んでいくとfsというモジュールらしきものがちらほら出てきます。
これはfileSystemの頭文字をとってfsなのでしょうが厄介なのがこのfsという似て非なるものが三つも存在する事です。
ネタのような話でわりかし精通していない開発者の壁となりやすい箇所なので解説します。

Node.jsのfs

一般的にJavaScriptでfsと言ったらNode.jsのネイティブモジュールのfsです。
ファイルシステム関係のモジュールでローカルのファイルにアクセスします。公式ドキュメントはこちら。
グーグル先生に尋ねると大体これ関係の記事がヒットするのでここであまり語ることもありませんが一つだけサンプルコードを。

uxpモジュールlocalFileSystem

次はuxpモジュールのlocalFileSystem。UXPにおいてmanifestがローカルファイルへのpermissionがrequestでも使える基本のファイルシステムです。ただ通常のファイルシステムと違ってエンドユーザーの許可が無い限りアクセスできないようになっています。具体的には一々ファイルの読み込み先、保存先をダイアログで呼び出さないといけないのでローカルの特定の場所にフォルダーを作成するみたいな処理も最低一度はダイアログでユーザーにファイルパスを選ばせる必要があります。この時に使われるファイルパスは既存のファイルシステムと違ってstring型のパスではなくEntry型のSymbolの値を渡さなければなりません。UXPはセキュリティの安全なシステムを目指しているそうでこのような仕様にしたみたいです。
詳しくは記事UXPにおけるローカルファイルへのアクセスを参照。

UXPのファイルシステムfsモジュール

最後にUXPのfsモジュールになります。これは前述のNode.jsのfsモジュールと同じようなシステムです。(ただし全く同じではない)
UXP v6.3 つまりPhotoshop2023からローカルシステムへのアクセスが緩和されてこのfsモジュールでアクセスできるようになりました。詳細は記事Adobe UXP v6.3 fileSystem触ってみた。を参照。

何が厄介なのか

公式のドキュメントはAPIの説明と共にサンプルコードが載っています。しかしこのfsというモジュールらしき文字列が何度もサンプルに出てきます。しかも参照元がuxpのlocalFileSystemなのかNode.jsチックなUXPのfsモジュールなのか判別ができなくなる事が出てきます。さらによくわからなくグーグルで調べるとNode.jsのfsシステムがたくさん引っ掛かります。しかも見た目はまんま同じなのに仕様が微妙に違うのがより事情を複雑にしています。特に初心者がいきなりUXPの開発を挑むと混乱は必須です。勿論今後公式のサンプルコードも今後見分けがつくように多少はfsという名称の使い方を変えるとは思いますが当分離れられない問題となるでしょう。

Beer 寄付してサイトを応援する。