Illustrator ExtendScript app.openCloudLibraryAssetForEditing
今回の記事ですがCreative Cloud Libraries APIとは全くの別物ですので混合されないように。これに関しては昔の記事で触れているので素ければこちらもご参照ください。
*5月8日追加。今回の検証ですがこの方法でアセットを編集するとクラウド上のファイルとローカルで整合が取れなかったので実務などではこの方法でアセットを開いて編集しないでください。何か検証する場合も慎重に行ってください。また実際に使えるコードを探している場合は他を探すかCreative Cloud Libraries APIの使用を検討してください。
AdobeにはCCStorageと言うクラウド上にファイルを保存できるストレージとは別にAdobeのアプリケーション間でファイルの共有ができるCreativeCloudLibrariesもあります。
Illustratorにはapp.openCloudLibraryAssetForEditingというCloudLibraryAssetが開けそうなメソッドもあるのですが他に使っている方もいないので使い方は謎に包まれています。これが使えれば自分のアカウントのアセットは簡単に開けそうなのですがどうにかならないのでしょうか。僅かな情報としてはIllustratorに付属されているExtendScriptのDOMが記載されたxmlがこれに関して触れていました。
![メソッドの説明](https://kawano-shuji.com/justdiary/wp-content/uploads/2024/05/CCLibraryopenmethod.png)
shortdescにFor Internal use.と書いてあるのであまり公になっていないのかもしれません。ただ第一引数のassetURLと第二引数のthumbnailURLは何かアセットのデータのパスとサムネイルの画像のパスを指定するのはわかります。データタイプもFileなのでローカルの何かのファイルと考えて間違い無いでしょう。
CreativeCloudLibrariesの情報はローカルにもあるのか
ここからが重要なのですがCreativeCloudLibrariesの情報がもしかしたらローカルにあってそこからライブラリグループの情報も取得できるのでは?と思って調べてみました。するとAdobeのコミュニティで諸々調べている方がいたので参考にしました。
まずは大方のCreativeCloudLibraries関連のファイルは以下にあります。
“/Users/username/Library/Application Support/Adobe/Creative Cloud Libraries/LIBS/(userid)_AdobeID/creative_cloud/”
アセットファイルは以下に一時的に?ローカルにも以下のディレクトリに保存されています。
/Users/username/Library/Application Support/Adobe/Creative Cloud Libraries/LIBS/(userid)_AdobeID/creative_cloud/dcx/(アセット番号)/components/アセットファイル
アセット番号とアセットファイル名は16進数?の文字列でぱっと見よくわからない感じになっています。
そしてアセットファイルとは別にサムネイルとして表示するためのpngのサムネイルファイルも別途保存されています。
/Users/username/Library/Application Support/Adobe/Creative Cloud Libraries/LIBS/(userid)_AdobeID/creative_cloud/renditions/(アセット番号)/サムネイル番号.png
肝心のアセットファイルの存在もわかりました。しかしいまいちこれではまだScriptで操作するための情報が不足している感があります。実際グループやファイル名の文字列もよくわからないですし。
manifestファイル
実は各種CreativeCloudLibrariesのライブラリグループは/Users/username/Library/Application Support/Adobe/Creative Cloud Libraries/LIBS/(userid)_AdobeID/creative_cloud/dcx/以下のフォルダーにグループ毎に分けられています。念の為ここで復習ですがCreativeCloudLibrariesは全てのアセットが各グループ毎に別れていてグループから完全に独立したファイルは基本存在しません。
![CreativeCloudLibrariesのパネル](https://kawano-shuji.com/justdiary/wp-content/uploads/2024/05/CreativeCloudLibraryPanel.png)
グループ毎に分かれているのであとは簡単と思いきや前述のようにフォルダーはライブラリグループ名で無く16進数の文字列から構成されていて全く判別ができません。しかしこのフォルダー内にmanifestファイルがあります。
![manifestの場所](https://kawano-shuji.com/justdiary/wp-content/uploads/2024/05/manifestdirectory.png)
拡張子がありませんが中身はjsonだと思って間違いなさそうです。
![manifstの中身](https://kawano-shuji.com/justdiary/wp-content/uploads/2024/05/manifestContent_blur.png)
中身のidとか公開しても問題ないとは思ったのですが念の為ぼかしました。ともかくこのmanifestの中からライブラリグループ名、そこに保存されているアセットのファイル名など一通り記録されているのでここから情報を取得すればExtendScriptでも目的にファイルにたどり着けそうです。ただそのための取得のScriptは前述のAdobeのコミュニティで既にサンプルを書いておられる方がいましたのでいつくか引用したいと思います。
まず/Users/username/Library/Application Support/Adobe/Creative Cloud Libraries/LIBS/(userid)_AdobeID/までのファイルパスですが以下のコードで取得できます。
CarlosCanto氏とscottr12917177氏のコードの引用です。
AdobeIDのidの文字列はuserGUIDだったのがわかります。その他のmanifestとアセットファイルはcreative_cloud/dcx以下にあるのであとは問題ありません。ここでscottr12917177氏が一連の情報を元にmanifestから特定のアセットファイルを掘り出すコードを書いてくれているので使ってみました。ただ動かない箇所がいくつかあったので今回少しだけ修正しています。
getLibraryFiles関数の引数に探したい対象のライブラリグループを指定すればそこからIllustratorファイルを見つけてくれます。
実際にアセットをExtendScriptから開く
それでは当初のアセットを開く目的に戻ります。app.openCloudLibraryAssetForEditingメソッドはあるものの実はシンプルにapp.openからも開けます。アセットのファイルのパスを直接指定しても上記のコードから引っ張っても可です。Illustratorで編集して閉じた後に該当のアセットをXDで開いても編集が反映されていたので信じられませんがぱっと見問題なさそうか?と思ったのですがやはりこの方法で編集するとクラウド上とローカルで同じようにデータが反映されなかったのであまり使わない方がいいかもしれません。ちなみにapp.openCloudLibraryAssetForEditingで開く場合は以下のようになりますがこの方法でもクラウド上に反映されずだめでした。
二番目の引数のサムネイルは/Users/username/Library/Application Support/Adobe/Creative Cloud Libraries/LIBS/(userid)_AdobeID/creative_cloud/renditions以下にあるのですが(userid)_AdobeIDディレクトリまで前述のコードで取得できます。三番目の引数はファイルタイプ今回Illustratorなのでapplication/illustratorを指定しています。一見できているような動きはしますが前述のようにクラウド上とローカル上でデータがきちんと反映されなかったのでやり方が間違っているかもしれません。そもそもFor Internal useと宣言されている以上外部の開発者が使うべきではないのかもしれません。それに下手に触るとローカル上で不要な操作をすることにより悪い影響もあるかもしれません。
今回実務につかそうなコードはできませんでしたがローカル上でクラウドファイルの管理がどのようになっているか少しだけわかったこともあり勉強になる部分はありました。