AfterEffects Script Mac (Apple Sillicon)で
system.callSystem() がフリーズする原因判明

やっとわかりました、、、てか既知のバグ、既知のエラーだそうで、しかもテストしてみたところ
継続して24までも修正されていない状態。Adobeさんはマジでふざけてますな 笑

※25に関しては全く別物な感じだと思うのでテストはしていません。

前出のエントリーにありますが、この段階でもう少し検証していればわかったのだろうと思います。
AE自体がレインボーカーソルでフリーズしてしまうのでとてもストレスフルで
検証の詰めが甘くなってしまった感はいなめません。

最初に結論 日本語が問題だった

結論からいうと、これはcallSystemにわたすコマンドに日本語の文字が含まれているからです。
つまり、おそらくですが2バイトコードがあるからってことでしょう。
フォーラムにも中国語でも同様だというコメントがありました。

ただ、callSystemにアラート的なテキストを渡すようなシーンはまずないとおもうので
基本的にはこのエラーが発生するのはファイルパスになる場合が多いのではないかと思います。

プロダクションに入ったばかりの25年近く前にファイルネームの半角英数の使用を徹底され
おそらく5年ほど前まではファイルパスに日本語を使用することはなかったのですが、、、
昨今、多くのプロダクションから日本語ファイル名でデータを受け取ります
半角英数を使い続けるのは染み付いていて全く苦ではないですが、
なんだか意固地になっているように思われるのもいやですし、
多くのファイル内から見つけやすく、名は体を表すということで内容をイメージしやすいので
日本語をつかい始めたのでした。

エラー回避の方策

ということでじゃースクリプトをどうするかってことですが
ファイルパスに日本語を含む環境を変更していくってのはちょっと色々しんどい。

要はcallSystemの役割はAE内部からターミナルを実行する
っていうことだと思うので少し迂回することでなんとかできる気がします。
内部処理に関してはどうなってるのかわかりませんが、
これまでの経験上挙動としてはインタラクティブまたはスクリプトを動作させる何かしらのシェル
それ自体はきっちりとした対応をしていれば日本語名の使用したファイルでも実行できていました
そしてこのシェルはネイティブなモノで変更する理由はありませんからこれまでどおりで走るだろうと想定します。
(むしろAdobeは何も変更しておらず、Macのアーキテクチャー変更に対応するような改修もしていないという想定)

一旦、ホームのようなピュアな半角英数オンリーのパスになるディレクトリに
一時的なバッチファイルを作成しその中に本来実行したい内容を書き込んで
callSysytemからは一時的なバッチを実行する。

ということであれば、callSystemに日本語を含むコマンドを渡す必要がないので
フリーズすることはないだろうと想定しました。

/Macintosh HD/<user directory>/_temp.command

を作成し、以下のようなコードを書き込んだり、またさらに別のバッチを実行したりという形で迂回します。

chmod 755 "/Macintosh HD/work/テスト/render.command"

手段を選ばない、スマートじゃない感じがするので
一時ファイルを作るというのはあまり好きじゃない
ですが
これよりもシンプルで良い方法が思いつかないので致し方ありません。
エラー対応が必要になるような複雑なコマンドを書くわけでもないのでよしとします。
所詮、消費されるコードです。

コード作成と実行テスト。実装。

サクッとCursorでaiに指示を出して書いてもらいました。
ステップバイステップで細かく指示をしたので、即実装レベルな感じになりテストもうまくいきました。

内容的にはレンダーバッチのパーミッションを変更するという単純なものですが
前述のエントリーはまさにこれがことの発端でした。
バッチファイルのパーミッションをスクリプトで変更しようとすると固まる。
こんなバカなことがあるのだろうか?Adobeはもう少し考えを改めよと言いたい。
いずれ近い将来に凋落するぞ。買い切りユーザーを切り捨てたMaxonみたいにな。
AIのテクノロジー進度への影響は凄まじいです。在野のサンデーエンジニアだって何かできる日は近いでしょう。

さて、あとはボチボチcallSystemをつかっているスクリプトの改修を
AIに指示するプランを作成していくことにします。
一括でやれるといいなと思いつつも、走らなくなってしまうのもこわいんで慎重に調整します 笑



コメントを書く