‘Applescript’ タグのついている投稿

ChatGPT3.5でのスクリプティングを試してみた

2023/04/12

 話題の生成系AI、OpenAIのChatGPTでのスクリプトコード作成を遅ればせながら簡単に試してみました。2023年4月現在、無料で使えるのはChatGPT3.5ですのでそちらでのテストになります。なお、Bing Chatはまだ順番待ち状態なので素のChatGPTです。試した言語はAppleScriptとPerlになります。

AppleScript

 まずAppleScriptです。DTP作業で多用する処理を試しました。

・Photoshopの画像のカラーモードをグレースケールに

 結果:×
概要:「convert mode」ではなく「change mode to」にしないとエラーになる。

・Photoshopの画像の解像度を350dpiに

 結果:×
概要:「set resolution to」ではなく「resize image resolution」にしないとエラーになる。

・InDesignドキュメント内のJIS X 0213外の文字だけを赤くする

 結果:×
概要:文法がおかしいらしくスクリプトエディタでの保存自体ができない。JIS X 0213外の文字の判別式もこんなに短いわけがない。

Perl

 次にPerlのテストです。なお何も指定せずにコードを生成させたら内部文字列UTF-16のコードを出してきたので内部文字列UTF-8を指定して再生成しました。条件をちゃんと指定するのは大事ですね。また、動作チェック時に「use utf8;」の指定を書き足しています。

・与えられた文字列内にJIS X 0213外の文字が含まれているかどうかのチェック

 結果:×
概要:JIS X 0213はラテンアルファベットを含んでいるので(参考)、説明自体がおかしい。まあJIS規格は著作物扱いのはずなのでここですんなり出てきてしまったらむしろ問題かもしれない。

・与えられた文字列内にcp932の機種依存文字が含まれているかどうかのチェック

 結果:×
概要:判定ルーチン自体は正しいように見えるのだが、判定のリストがおかしいらしくよく問題になる丸数字やローマ数字が引っかからない。そこを書き換えられれば実用範囲か。

・与えられた文字列内にUnicodeのBMP(基本多言語面)外の文字が含まれているかどうかのチェック

 結果:○
概要:これは問題なかった。


 どうもChatGPT3.5の時点では、AppleScriptのような比較的マイナーな言語やJIS X 0213など日本のローカル規格の学習は足りていないのかもしれません。文法自体はパーツとしては使えそうに見えるのでその辺を割り切って使うなら許容範囲でしょうか。つまり元々コードが書ける人が時短目的で使うのなら有用かもしれないですね。いずれバージョンが進めば今回問題になったような「学習が足りない」ことが原因の間違いは減っていきそうですが、「AIにどういった問いを与えるのか」はおそらく相当先まで人間が考えるしかないので、そこをやれる人が効率化のために使うツールという位置づけになるのかなと思った次第です。

(2023.4.12)

macOS12.3でスクリプトが動かなくなったので修正した

2022/06/14

 先日、macOS12.3へのアップデートを実施したところ、これまで動いていたいくつかのスクリプトが動かなくなりました。調べてみたところどうやらPython2.x系のランタイム環境が削除された影響だったようです。今後のために対処した方法を置いておきます。

VivliostyleをローカルPC内サーバーで展開するコードの修正

 以前、こちらに書いたものを社内でもずっと使っているのですが、こちらでローカルWebサーバ起動処理にPython2系を使っていたために動かなくなりました。これは単純にPython3を使ってサーバを起動すればよいので、

に書き換えて終了。以下に一応全文を置いておきます。

PDFのページ数の取得

 PDFのページ数を取得して全ページPhotoshopで画像変換する処理をAppleScriptで自動化していましたが、ページ数取得にPython2系を使っていたため動かなくなりました。

 従来のコードはこちらの記事を参照にしたものです。これはPyObjCというものを通じて処理をしているようなので単純なPython3への置き換えではうまくいきそうにありません(無理でした)。ただ、この場合PDFのページ数が取れればよいので手段は何もPythonに限らずともよいはずです。ちょっと調べてみたところシェルでPDFのページ数を取得するためのかなりの手段が見つかりました
 このうち、とりあえず追加インストールが必要なさそうな「mdls」を使用する形で書き換えました(市川せうぞー師匠アドバイスありがとうございます)。Spotlight検索用のメタデータを使用するため信頼性は低いとのことなのですが、ユースケース的には支給されたPDFを画像変換し、変換後の画像は目視で確認しますのでまあうちの場合はこれで大丈夫でしょう。コード的には以下のような形です。

 何か問題が出るようであればexiftoolあたりを使う形に置き換えてもよいかなと思っています。

(2022.6.14)

AppleScriptやXojoからシェルに処理を投げると通らない場合の対処

2022/04/01

 少し前に仕事マシンがM1 MBAに切り替わったワケですが、OSがmacOS 12 Montereyになったことで(以前からあるにはあったけどなんとかなってた)AppleScriptやXojoなどの別環境内からシェルに処理を投げた際に「ターミナルでは通っていた一部の処理が通らなくなる」現象が顕在化し、だいぶ頑張って解決したので数年後に同じことで困らないように記録を残しておきます。

そもそもなんでそういう現象が起きるのか

 Macの「ターミナル」はbashやzshといった「シェル」を使うためのアプリです。Windowsで言うところのコマンドプロンプトですね。で、例えばOSに元々入っているバージョンとは違うPerlやPythonを使いたいとか、非標準モジュールを入れて使いたいといったような場合にはmacの場合はパッケージマネージャーのHomebrewMacPortsをまず入れてその後それを使ってさまざまな必要なものを入れていって環境を構築するわけですが、入れたものを有効にするために「パスを通す」作業が度々発生します。これは作業手順自体は検索すればいくらでもWebで見つかるのですが、要はシェル(bashやzsh)の環境設定ファイルである「.bash_profile」や「.zshrc」にシェルの起動時に自動実行する設定(環境変数の設定など)を記述しておく作業です。これをやることでいちいち実行ファイルのあるディレクトリに移動してからコマンドを実行するようなことをしないでも良くなるわけです。

設定が読み込まれなかったためエラーが発生

設定が読み込まれなかったためエラーが発生

 ただ、「.bash_profile」や「.zshrc」への記述は、あくまでターミナルでシェルを起動した際に読み込まれる設定であるため、AppleScriptやXojo内からシェルに処理を投げた場合には適用されません。このため、ターミナルでは通っていた処理が通らなくなったりします。

シェルに処理を投げる際に設定を読ませれば処理は通る

 ではどうすればよいのかと言うと、例えばApplescriptの場合なら以下のように

 命令文の前に環境設定の記述をセミコロンで繋げて実行してやれば処理が通ります(この場合サンプルとしてHomebrewのバージョンを表示させている)。環境設定の記述はターミナルで処理が通っているのなら現在有効にしているシェルの設定ファイルのどこかに記述があるはず。

bashやzshの環境設定を読み込んで実行するようにした

 ただ、上記の方法だとApplescript等のコード自体に各環境に依存する表記を追記することになるため、違うマシンにスクリプトを持って行くとたちまち動かなくなるといったような話になりそうです。それはできれば避けたいため、シェルの環境設定ファイル自体を読み込むperlスクリプトを作ってみました。

 exportもしくはevalで始まる行を抽出してセミコロンで繋げたものを返すので、あとはそれを実際に実行する処理の前に連結してシェルに処理を投げればOKです。

Applescriptに組み込んだ

Applescriptに組み込んだ


Applescriptに組み込んだ場合は以下のような感じ。上のperlスクリプトをshellconfigexec.plの名称でスクリプトバンドル形式ファイル内のContents/Resourcesフォルダに保存して実行しています(macOS 12 Montereyではアプリ形式で保存しようとするとエラーが出て保存できなかったりするため、スクリプトバンドル形式で保存してスクリプトメニューから実行)。

 シェルの設定ファイルの処理を全部引っこ抜いて実行が乱暴すぎるという場合は読み込みファイルを独自定義してルートディレクトリに置いておき、それを指定して読み込ませればよいです。

(2022.4.4)

プロフィール
Jun Tajima

こちらにて、電子書籍&Web制作を担当しています。
このブログは、EPUB3をはじめとした電子書籍制作担当オペレータからの、「電子書籍の制作時にたとえばこんな問題が出てきていますよ」的な「現地レポート」です。少しでも早い段階で快適な電子書籍閲覧・制作環境が整うことを願って、現場からの声を発信していこうと目論んでおります。

当ブログ内の記事・資料は、私の所属しております組織の許諾を得て掲載していますが、内容は私個人の見解に基づくものであり、所属する組織の見解を代表するものではありません。また、本ブログの情報・ツールを利用したことにより、直接的あるいは間接的に損害や債務が発生した場合でも、私および私の所属する組織は一切の責任を負いかねます。