Keynote、Pages、NumbersのiWorkアプリがバージョン14にアップデートされました。
本バージョンはmacOS 13以降に対応しています。
各アプリのAppleScript用語辞書に変更はありません。Pagesで見られている、ウィンドウで表示されていないページ上のオブジェクトからの情報取得ができない(正確にいえば、表示中の見開き+2見開き分まで取得可能)という挙動は変わっていません。どうも処理速度向上のための仕様のようなので、この部分はこのままだと思います。
Keynote、Pages、NumbersのiWorkアプリがバージョン14にアップデートされました。
本バージョンはmacOS 13以降に対応しています。
各アプリのAppleScript用語辞書に変更はありません。Pagesで見られている、ウィンドウで表示されていないページ上のオブジェクトからの情報取得ができない(正確にいえば、表示中の見開き+2見開き分まで取得可能)という挙動は変わっていません。どうも処理速度向上のための仕様のようなので、この部分はこのままだと思います。
電子書籍「Cocoa Scripting Course」の第7巻、NSColorを刊行しました。PDF 478ページです。
→ 販売ページ
本書は、Cocoa Scripting本の第7弾。色関連の処理をAppleScriptで行いたい人向けの解説書です。画像処理やRTF処理などで避けては通れない「色」に関する内容です。
色についての処理は割と概念が独特で、色空間、色の扱い、色差(ΔE)、明度計算などなど、知っていれば「そんなもんか」という程度のものですが、知らないとさっぱり分かりません。
ささいなOS上の色設定の情報をplistから読み取って処理するような場合にも、「普通、RGB値の色しか設定しないよね」と誰もが思っていたスクリプトエディタの構文色分け設定に、CMYK色やGrayscale色を設定しているユーザーがいて、慌てていろいろ対応する羽目になったりと、いい思い出がたくさんあります。
Adobe Swatch Exchangeファイル書き出しや、頻出色のリストアップ、近似色の計算や色差ΔEの計算など、今日明日からすぐに役立つ内容を多く含んでいます。
1章 入門編
Cocoa Scriptingの概要
Cocoa Scriptingってどういうもの?
Cocoa Scriptingの実際
Cocoa Scriptingの威力
Cocoa Scriptingのメリット
Cocoa Scriptingに必要なもの
Cocoa Scriptingまとめ
Cocoa Scripting9つの誓い
Cocoa Scriptingに適したmacOSについて
Cocoa Scripting環境の進化の歴史
Cocoa Scriptable macOS
参考資料:AppleScriptランタイム環境情報
Cocoa Scripting環境ごとの挙動の違い
SIP解除の是非
プログラミングスタイル
開発・実行環境のちがい
処理手順の違い
メインスレッド実行が必須な機能のScripting
delegation, notification
実行スタイルの違いによる書き換え
AppleScriptでCocoaオブジェクトを呼び出すと…
サブルーチン記述
オブジェクト階層を示すmyとme
クラス拡張
高速なCocoa Scriptを書くためには
アプリケーションとのやりとり
暗黙の型変換
一部のコマンドで書き換えが必要
計算の優先順位を示すカッコを修正
オブジェクトの数え方
情報の調べ方
Cocoa Scriptingを行う際の調べ方
Appleのオンラインドキュメント
Xcodeでヘッダーファイルを「素早く開く」
ヘッダーファイルの歩き方
ヘッダーファイルの構成要素
Deprecatedな機能に遭遇した場合
Enum(定数)の記載パターン
AppleScriptの数値表現幅を超えるEnum(定数)
2章 実践編
Cocoa Scriptを実際に動かす
Script Editor/Script Debuggerを起動
Cocoa Scriptを実行
Cocoa Objectのログを表示
Cocoa Scriptの書類を保存
Cocoa Scriptのエクスポート形式
Objective-CのCocoa呼び出し記述をAppleScript記述に翻訳する
Cocoa Script(AppleScriptObjC)の構成
Objective-Cの各種データ表記書き換え(1/3)
Objective-Cの各種データ表記書き換え(2/3)
Objective-Cの各種データ表記書き換え(3/3)
Cocoaメソッド名の大文字小文字指定
Cocoaメソッド名の変換(1/3)
Cocoaメソッド名の変換(2/3)
Cocoaメソッド名の変換(3/3)
基礎的なCocoaオブジェクト解説
メソッド呼び出し時のパラメータ
NSString(文字列)
NSArray(配列)
NSDictionary(辞書)
Number(数値)
Enum(定数)
nil
NSObject
Cocoa Scriptingの特徴的な動き
AppleScriptとCocoa間の
オブジェクト変換
AppleScriptオブジェクトに対応するCocoaクラス
配列関連のCocoaクラス
レコード関連のCocoaクラス
文字列関連のCocoaクラス
日付関連のCocoaクラス
File Path関連オブジェクト
File Path関連オブジェクト変換方法
画像関連Cocoaオブジェクト
ファイルパス文字列(NSString)関連(1/2)
ファイルパス文字列(NSString)関連(2/2)
URL関連
Remote URL文字列関連(1/2)
Remote URL文字列関連(2/2)
Local File URL文字列関連
配列関連
Dictionary関連
NSString文字エンコーディング関連
Color関連
HTML関連
Cocoa Object同士の変換、生成
NSData
Styled String(1/2)
Styled String(2/2)
2次元座標データ
1次元座標系データ
言語、Locale系データ
有用なCocoaオブジェクト(抜粋)
3章 NSColor編
Colorデータの位置付けと役割
NSColor Basic Samples
NSColorList Basic Samples
NSColorSpace Basic Samples
4章 Color処理 基礎編
choose colorコマンドで表示されるカラーピッカーの使い方
choose colorコマンドで指定したRGB色でNSColorを作成
Numbers書類上に記入したRGB値を色プレビュー
NSColorからRGBAの各要素を取得
RGB色からHSBA色に変換
NSColorからHSBAの各要素を取得
NSColorから色空間名を取得
鉛筆(クレヨン)ピッカーに登録されている色名を取得
5章 Color処理 上級編
色から明度情報を取得
画像の指定座標のピクセルの色情報を取得
AppleScriptの構文色分け設定の書式情報読み取り
HTML色コードの取り扱い
CIColorを作成してCoreImageフィルタを実行
ざっくりとした色判定(カラードメイン処理)
色差(ΔE)を計算する
色名を推定(dbColNamesKit)
色のポスタライズ
頻出色の抽出(ColorCube)
2つの色の合成
輝度をMAXにした色を取得(Colours)
Adobe Swatch Exchangeファイル作成
画像の空白判定
添付サンプルScript紹介
資料編
Cocoa Scripting関連のAppleScript命令
Cocoa ScriptingとScript Object
AppleScript Droplet
サードパーティ製FrameworkやAppleScript Librariesを呼ぶ
AppleScript mini reference
AppleScript 各種ランタイム環境および関連ツール
AppleScript予約語一覧
エラーコード表
理解度確認テスト
あとがき、奥付
macOS 13.6.5アップデート(13.6.5(22G605))が配信されましたが、AppleScript系のバグは直っていません。
Appleのエンジニアは、「会社から給料をもらって日々新しいバグを作るのが仕事」という状況です。新しい機能よりも、新しいバグの方が多いというのは、もはやメーカーではなくてクラッシャーと名乗るべきなのでは?
・スクリプトエディタ上のテンプレートから選択するCocoa-AppleScript Appletランタイムが動作しなくなった
・スクリプトエディタ上でscpt形式のAppleScript書類に書いた「説明」が白地に白文字で表示されて見えなくなる
・日本語環境で、特定のTTSキャラクタ名(Bells、Hysterical、Organ、Princess、Trinoids、Whisper)が指定できない
2023年に使用していたmacOS:macOS 13
毎年行なっている、Piyomaru Softwareが書いたAppleScriptの1年を振り返る記事の2023年版です。10年ほど続けてきた旧「AppleScriptの穴」Blogが2018年の年初にホスティング会社との行き違いでシャットダウンされ、再構築したのがこの現行の「AppleScriptの穴」Blogです。
→ 2018年に書いた価値あるAppleScript
→ 2019年に書いた価値あるAppleScript
→ 2020年に書いた価値あるAppleScript
→ 2021年に書いた価値あるAppleScript
→ 2022年に書いた価値あるAppleScript
旧「AppleScriptの穴」Blogの内容については、データベースから抜き出したデータをもとに再構成した「Blogアーカイブ本」にまとめています。
AppleScriptの穴Blogアーカイブvol.1
AppleScriptの穴Blogアーカイブvol.2
AppleScriptの穴Blogアーカイブvol.3
AppleScriptの穴Blogアーカイブvol.4
AppleScriptの穴Blogアーカイブvol.5
AppleScriptの穴Blogアーカイブvol.6
本Blogは、機械翻訳で翻訳しやすいように、平易な日本語で記述してある点がチャームポイントです。それはもう、小学生の日記ぐらいの難易度で。もともとは、2000年代初頭に開発していた「人工知能インタフェース Newt On」のソースコード部品バラバラにして掲載し、用いた部品を個別にメンテナンスすることを「隠れた目的」としていました。また、Scripter間のノウハウの共有を推進することも目的としています。
AppleScript以外の一般的なテーマの記事については、こちらにいろいろ投稿しています。
2023年的な状況といいますか、昨今のMac環境をとりまく状況として新バージョンのmacOSとしてmacOS 14がありつつも、Appleがマイナーアップデートで新たなバグを盛り込んでくるため、macOS 14に付き合うこと自体がリスクです。β版で確認を行なっても、Release版で安定度が激下がりして、その後にバグ改修と新機能追加が行われるため、つねにどこかにド派手な不具合を抱えているという状況です。
2023年にはそれほど発表できるようなAppleScriptを書いていない(=自分の作業を効率化するものしか書いていないので外部に発表のしようがない)のと、それほど技術レベルや解決策のレベルが上がったような内容のものはありません。
さまざまな技術的な内容をまとめた記事については、電子書籍に掲載したり、付録Scriptとして添付しています。年間19冊出しています。
ポケコンサークル「LL」会誌Vol.19復刻版(282ページ)
AppleScript基礎テクニック集(29)セキュリティ機能解除(36ページ)
AppleScript+Xcodeで作るMacアプリ(484ページ)
ChatGPTにAppleScriptを書かせてみた!(76ページ)
AppleScript基礎テクニック(30)コンテクストメニューScriptの作り方(41ページ)
AppleScript基礎テクニック(30)コンテクストメニューScriptの作り方 英語版(41ページ)
AppleScript基礎テクニック(31)スクリプトバンドルの活用(34ページ)
AppleScript 7つの宝珠(3)(35ページ)
Cocoa Scripting Course #5 NSImage(473ページ)
ゆっくりAppleScript解説(1)(45ページ)
ゆっくりAppleScript解説(2)(45ページ)
つたわる資料のつくりかた(66ページ)
Keynote Scripting Book With AppleScript(434ページ)
Cocoa Scripting Course #6 PDFKit(560ページ)
ゆっくりAppleScript解説(3)(42ページ)
AppleScript最新リファレンス v2.8(1008ページ)
AppleScript最新リファレンス v2.8英語版(223ページ)
戦場の絆〜僕らの15年戦争〜v2(394ページ)
Piyomaru Software電子書籍カタログ 2024冬(100ページ)
2023年に書いたものは、例年どおりの「価値あるAppleScript」と言うほどのものではなく、「2023年に書いた記事の中で注目すべきもの」をリストアップするという程度の内容になりそうです。
住所ジオコーディング(住所→緯度経度情報)/逆住所ジオコーディング(緯度経度情報→住所)は、AppleScriptで普通に実行できてほしい処理のひとつです。こうしてObjective-C/Swiftで書いたプログラムをFrameworkとして呼び出せるようにして呼び出すとか、いろいろ方法があるわけで……少なくとも、ローカルで処理が完結する解決策は用意しておきたいところです。
AppleScriptからのChatGPTのREST API呼び出しは、かなり早期からできていました。処理したい内容のScriptをChatGPTに書かせて実行するといった「なげやり」な方法であれば、こうしたScriptの延長線上で可能ですが、あらかじめきちんと動くことを保証したScriptのパラメータ部分だけをLLMから取得するとか、複数のScriptを組み合わせて処理を実行させるといった内容を実現する方法を見つけたいところです。
Keynoteはいいアプリケーションだと思うものの、あまりバージョンアップしても機能が追加されないというか、実際に使っている人間からのフィードバックがさっぱりないというか、ユーザーと開発現場の距離が離れてしまっている感じがします。
他形式の3DデータをUSDZデータに変換するあたりのツールが充実する必要があるというか、Keynote側の読み込み機能がもう少し強化されてもよさそうな気もします。
この本は、発行するのに30冊以上も本を出す必要があり、数年かけて計画を実行して、ようやくアップデートにこぎつけました。最初の「AppleScript最新リファレンス」から7年が経過していることに驚かされます。
Microsoft Excelは依然としてAppleScript用語辞書が大きなアプリケーションではあるのですが、Excelの機能が強力すぎる(表現力が豊かすぎる)ために、目的の処理を行うためにはなかなか一筋縄では行かないようです。
PowerPointにかぎらず、Microsoft OfficeアプリのAppleScript用語辞書が、より詳細な記述を行なっているところに懸念をおぼえます。こんなに細かく書かないとダメなのだろうかと。敷居が高くなりすぎていないかと。あと、Script MenuにPowerPointを操作するAppleScriptを入れて実行すると動かないというのは、ランタイム環境が強く限定され、こんにちのmacOS環境の中で標準レベルといえるScript Menuで動かないのは、よくないと考えます。
macOS 12.xのマイナーバージョンアップ時に機能が損なわれた箇所です。そして、Appleにバグレポートしても治らない。こんな根本的な部分で不具合を起こされても困るのですが……。
「システム環境設定」が「システム設定」に変わったときに、各設定Paneを表示するためのAppleScript用語辞書が機能しない、空白の期間が発生していました。macOS 14βで本機能が復旧されたのと同じタイミングで、macOS 13.xにもさかのぼって同じ機能が実装されました。
ただ、システム設定の各Paneへの表示切り替えが行えるだけで、たとえばオーディオ入出力デバイスの切り替え機能が提供されているわけではないため、それについては別途実装したものを呼び出すという解決方法が必要になります。
Piyomaru Softwareの電子書籍カタログ(2024年冬版)を刊行しました(フリー配布)。PDF 100ページです。
数年前は「AppleScriptの書籍がぜんぜんない」と言われていましたが、いまでは「多すぎて選べない」と言われる状況に。いろいろな角度から、ぴったり合う本が選べることでしょう。
macOS 13.6.3betaが出てきました。通常のmacOSでは、マイナーアップデートが.6台で終了することが多く、.7台まで行くことは「まれ」です。
誰もが目を覆いたくなるような大失敗だった「macOS 10.13」「macOS 10.15」(はじめてBlogに登場記事の掲載を拒否)といった、歴史に残る失敗OSバージョンでも、マイナーバージョン6ないし7で打ち止めです。
# 歴史に残る失敗バージョンのmacOSには、Apple Siliconで不具合出まくりのmacOS 11(永遠のβ)とか、Release後にバグが出まくるmacOS 12、13もあるわけで、いい加減にしていただきたいところです
早速、Cocoa-AppleScript Applet(通常環境ではない、Script Editorのテンプレートから作成する特殊なCocoa AppleScript環境)が動作するのかどうか確認してみたところ、相変わらず動きません。
Cocoa-AppleScript Appletが動かない問題が、macOS 13.x台で改修されるのかは、果てしなく怪しい雰囲気になってきました。
●Mac OS X v10.0 (Cheetah)~10.0.4 (2001年6月22日)
2001年3月24日
●Mac OS X v10.1 (Puma)~10.1.5 (2002年6月6日)
2001年9月25日
●Mac OS X v10.2 (Jaguar)~10.2.8 (2003年10月3日)
2002年8月24日
●Mac OS X v10.3 (Panther)~10.3.9 (2005年4月15日)
2003年10月24日
●Mac OS X v10.4 (Tiger)~10.4.11 (2007年11月14日)
2005年4月29日
●Mac OS X v10.5 (Leopard)~10.5.8 (2009年8月5日)
2007年10月26日
●Mac OS X v10.6 (Snow Leopard)~10.6.8 v1.1 (2011年7月25日)
2009年8月28日
●OS X v10.7 (Lion)~10.7.5 (2012年9月19日)
2011年7月20日
●OS X v10.8 (Mountain Lion)~10.8.5 (12F45) (2013年10月3日)
2012年7月25日
●OS X v10.9 (Mavericks)~10.9.5 (13F34) (2014年9月17日)
2013年10月22日
●OS X v10.10 (Yosemite)~10.10.5
2014年10月17日
●OS X v10.11 (El Capitan)~10.11.6
2015年09月31日
●macOS v10.12 (Sierra)~10.12.6
2016年10月21日
●macOS v10.13 (High Sierra)~10.13.6
2017年10月21日
●macOS v10.14 (Mojave)~10.14.6
2018年09月26日
●macOS v10.15 (Catalina)~10.15.7
2019年10月8日
●macOS v11 (Big Sur)~11.7.3
2020年11月13日
●macOS v12 (Monterey)~12.6.3
2021年10月22日
●macOS v13 (Ventura)~13.6.3?
2022年10月24日
●macOS v14 (Sonoma)~14.0
2023年09月27日
macOS 13.xで、アプリケーション組み込み型のAppleScript実行環境(内蔵Script Menu装備)において、ホームディレクトリ下のAppleScriptライブラリを読み込んで実行することが「できなかった」ものを、「できる」ように改修されたようです。
実際に確認を行ったのは、macOS 13.xとCotEditorの組み合わせにおいてです。macOS 13の早期バージョンにおいてはライブラリ呼び出しが行えなかったものが、macOS 13.6.2においては呼び出せるように変わっています。なお、CotEditor側ではAppleScript実行機能まわりに改修を行なっていないことを確認しています。
CotEditorのAppleScript実行機能の実装はosascriptコマンドを呼び出すというものであり、手間をかけていない割に.scpt形式も.scptd形式も実行できるため、「妥当な実装」といったところでしょう。
自分は、各AppleScriptランタイム環境においてAppleScriptライブラリの読み込みと実行が行えるかをチェックしており、現時点でこれが行えない環境は……
・Automatorおよび書き出したアプレット(古すぎる。廃止予定)
・スクリプトエディタの内蔵コンテクストメニュー(セキュリティ的に無理そう)
・フォルダアクション(セキュリティ的に無理そう)
・Switch Control(パレットごと配布することを考えると、やらないほうが安心?)
・FileMaker Pro(構造が違いすぎて対応が難しい?)
・Hammerspoon(applescriptFromFile)(できてもおかしくないが……)
と認識しています。もしかしたら、Hammerspoonは再確認したら動くかもしれません。
なお、もっと巨大で深刻なバグ(AppleScriptドロップレットにドラッグ&ドロップしたファイルが正しく処理されない問題)はmacOS 10.12から相変わらず放置されています。
電子書籍「AppleScript最新リファレンスv2.8対応」の英訳プロジェクトを開始しました。
同書は、1,000ページを超えるボリウムを持つ大規模書籍であるため、いきなりすべてを翻訳することはできません(間違いなく挫折します)。そこで、おおよそ250ページごとに分けた4分冊にする方向で作業を進めることにしました。
まずは、スクリプトエディタ内のローカリゼーションファイルから情報をClaris FileMaker Proに書き出して、検索できるようにしてみました。
実際にAppleScriptを書いてスクリプトエディタ内のloctableファイルを読み込んで言語ごとに分け(macOSは39言語にローカライズされている)、Claris FileMaker Proにデータを順次格納してみたら、1万レコードを超えてもまだ処理が続きそうだったので、強制停止。
enと「en_GB」、それと「ja」のローカライズ情報のみに限定して書き出しておいたほうがよさそうです。
あとは、macOS/AppleScriptの専門用語について日本語と英語の対訳データベースを作っておきたいところです。
AppleScript名:Script Editor内部のloctable情報を抽出.scpt |
use AppleScript version "2.4" use scripting additions use framework "Foundation" script spdB property urlList : {} end script property NSPredicate : a reference to current application’s NSPredicate property NSArray : a reference to current application’s NSArray –Script Editorのバンドル内のResourceから「.loctable」で終わるファイル名のパスを抽出 tell application "Finder" set defPath to application file id "com.apple.ScriptEditor2" end tell set defPath to (POSIX path of (defPath as alias)) & "Contents/Resources" –Cocoa流のPOSIX path set fList to getFilesIn(defPath) of me set anArray to NSArray’s arrayWithArray:fList set aPred to NSPredicate’s predicateWithFormat:"SELF ENDSWITH ’.loctable’" set locRes to (anArray’s filteredArrayUsingPredicate:aPred) as list –.loctableファイルでループ repeat with i in locRes set j to contents of i set (urlList of spdB) to (my readPlistAt:(j)) set langKeys to ((urlList of spdB)’s allKeys()) as list –Language Codeでループ repeat with ii in langKeys set jj to contents of ii set aLangDat to ((urlList of spdB)’s valueForKey:jj) —plist(=loctable)のlabelでループ set allLangKeys to (aLangDat’s allKeys()) as list repeat with iii in allLangKeys set jjj to contents of iii set aVal to (aLangDat’s valueForKey:(jjj)) copy {j, jj, jjj, aVal as string} to tmpList createFMRec(tmpList) of me end repeat end repeat end repeat on createFMRec(aList) copy aList to {f1, f2, f3, f4} tell application "FileMaker Pro" tell database 1 set curRec to create new record tell curRec set cell "FilePath" to f1 set cell "LangID" to f2 set cell "LabelName" to f3 set cell "stringVal" to f4 end tell end tell end tell end createFMRec –Read Plist on readPlistAt:thePath set thePath to current application’s NSString’s stringWithString:thePath set thePath to thePath’s stringByExpandingTildeInPath() set theDict to current application’s NSDictionary’s dictionaryWithContentsOfFile:thePath return theDict end readPlistAt: –指定フォルダ内のファイルのフルパス一覧を返す on getFilesIn(posixPath) script spd property allItems : {} end script set allItems of spd to {} — make URL set theNSURL to current application’s |NSURL|’s fileURLWithPath:posixPath — make file manager set theNSFileManager to current application’s NSFileManager’s new() — get URL enumerator set theNSFileEnumerator to theNSFileManager’s enumeratorAtURL:theNSURL includingPropertiesForKeys:{current application’s NSURLIsDirectoryKey, current application’s NSURLIsPackageKey} options:((current application’s NSDirectoryEnumerationSkipsPackageDescendants) + (current application’s NSDirectoryEnumerationSkipsHiddenFiles as integer)) errorHandler:(missing value) — get all items from enumerator set (allItems of spd) to theNSFileEnumerator’s allObjects() set theFolders to {} — to store folders — loop through repeat with i from 1 to count of (allItems of spd) — is it a directory? set {theResult, isDirectory} to ((item i of (allItems of spd))’s getResourceValue:(reference) forKey:(current application’s NSURLIsDirectoryKey) |error|:(missing value)) if isDirectory as boolean = false then set {theResult, isPackage} to ((item i of (allItems of spd))’s getResourceValue:(reference) forKey:(current application’s NSURLIsPackageKey) |error|:(missing value)) — is it not a package? if not isPackage as boolean then set end of theFolders to (item i of (allItems of spd))’s |path|() as string –«class furl» end if end if end repeat return theFolders end getFilesIn |
macOS 13.6.2アップデートが配信されました。Cocoa-AppleScript AppletがmacOS 13.xの途中で動かなくなり、macOS 13.6.x台で修正されるのではないか? などと思っていましたが、そういう状態にはなっていないようです。
ちなみに、macOS 13.xよりももっと古いOSで「Cocoa-AppleScript Applet」のアプレットを作成し、そこから実行バイナリ部分(/Contents/MacOS/CocoaApplet)を抜き出して、macOS 13.x上で作ったCocoa-AppleScript Appletの同一バイナリを削除して入れ替えると動く、という検証報告も入っています。
正直、Cocoa-AppleScript Appletは登場以来、「こんなので使えるか!?」という存在でした。その後OS X 10.10で一般のAppleScript実行環境でCocoa呼び出しが許可されてから、Scripter側にCocoa活用のノウハウが蓄積され、「標準環境よりもできることが多い」とのことで再評価されたものでもあります。
ようやく完成しました。最初の「AppleScript最新リファレンス macOS 10.11対応」の刊行から7年。完全刷新のアップデート版を刊行しました。PDF 974ページです。
→ 販売ページ
現行のAppleScript v2.8環境に合わせ、macOS 12/13/14を対象としたアップデートを行いました。可能なかぎり、macOS 10.13あたりからの各アプリケーションの用語辞書の変化などを追いかけ、それぞれのAppleScript実行プログラムのセキュリティ上の制約について、ベンチマークScriptを用いて評価も行なっています。
最初の「AppleScript最新リファレンス」(483ページ)から大幅にページを増やして974ページ。その分、解説範囲を広げています。
また、解説内容の難易度や想定ユーザーのレベルに分けた章構成を採用しています。
Script入門者向けに有用な情報(入門編)、Script利用者向けに有用な情報(利用編)、実際にScriptを書くユーザー向けに有用な情報(実践編)、困ったときに調べると便利な情報(資料編)など。
本書の付録は、スクリプトエディタのコンテクストメニューから呼び出すSnipet Scriptの「Piyomaru Context Menu Assistant」最新版、スクリプトエディタのテンプレートとして呼び出せる「Piyomaru Script Templates」、そしてGUI Scriptingの強力な助っ人「Dynamic Menu Clicker」などで構成されます(これからまとめて添付します。ちょっと手直しも必要なので)。
これからScriptに手を出そうかなという人にも、すでに使っているという人にも有用と思われる情報をわかりやすくまとめた1冊です。
■特集
AppleScriptv2.8の全貌
Shortcuts Events
OSAXなき時代のAppleScript命令拡張
各種セキュリティ制限を解除する
各種支援プログラムの現状
macOS標準装備&Apple純正アプリのAppleScript対応度解説
Finder/Automator/カレンダー/連絡先/メール/マップ/メッセージ/ミュージック/メモ/写真/システム設定/プレビュー/QuickTime Player/リマインダー/Safari/スクリプトエディタ/ショートカット/ターミナル/テキストエディット/tv/VoiceOver/画面共有/コンソール/System Information/Keynote/Pages/Numbers/Claris FileMaker Pro/Xcode/Apple Configurator/Garageband/iMovie/Instruments
■入門編
AppleScriptの世界を形作るもの
macOS標準搭載アプリケーションで AppleScript対応機能を持つもの
AppleScriptを実行できる、 さまざまなmacOS標準搭載ツール
AppleScriptを実行できる、 サードパーティのハード&ソフト
AppleScriptってなんだろう?
スクリプトエディタの使い方
「構文確認」時に行われること
Scriptを書く前に準備しておくこと
AppleScript最速マスター
文法編
AppleScript予約語一覧
AppleScript最新リファレンス
tellブロック/アクション/ダイアログ表示/コマンド/他の言語呼び出し/序数/制御構文/文字列操作/システム日付/データ型/定数/変数・プロパティ宣言/関数/演算子/パス関連/ファイル入出力/ローカライズ関連/テキスト要約/Webサービス呼び出し/フィルタ参照/サブルーチン宣言/無意味語/クリップボード制御/音量制御/スクリプトオブジェクト/その他
アプリケーションへの命令パターン
Script Debuggerとは?
Finder用語辞書攻略ガイド
Finderを使った定型処理
コラム GUIアプリの操作に影響を与えるFinder設定項目
■利用編
Script Menuの使い方
FastScripts 3
アプリケーションごとのScript Menu
フォルダアクション解説
Terminalから使うAppleScript
各種プラグインAppleScript
PDF Workflow Script解説
Mail Plugin Script解説
コンテクストメニューから呼び出す
廃止されたプラグインAppleScript
その他のAppleScriptランチャー〜スイッチコントロール/Automator/ショートカット/音声コントロール/Adobe Illustrator 2023/Adobe InDesign 2023/Keyboard Maestro/Hammerspoon/Service Station/Dropzone 4/Visual Studio Code/CotEditor+PowerPack/Xojo 2023/Live Code/Elgato Stream Deck
制限つきユーザーアカウント&制限つきマシン環境下のAppleScript
ペアレンタルコントロールとAppleScript
MDMによる制限環境下のAppleScript
■実践編
OSバージョン番号確認
ランタイム環境を知る
ハードウェア情報
GUI Scriptingの概要
AppleScriptからネット上の機能を手軽に活用
REST API呼び出し
CDN上のJavaScriptライブラリ呼び出し
ドロップレットを作らなくても大丈夫なScript運用術
Cocoa Scripting入門
対応Framework一覧(macOS 13/14)
Mac App StoreでAppleScriptで作ったアプリを販売
Piyomaru コンテクストメニューアシスタント
Piyomaru Script Templates
■資料編
AppleScriptと相性のよくない技術
各アプリケーションにおけるさまざまな座標系
独自マクロ言語内に記述するAppleScript〜Microsoft Office VBA/Claris FileMaker Pro Script Step
iOSデバイスとの連携
下準備
iOSデバイスからAppleScriptを実行する
iOSデバイス上の情報を更新する
AppleScriptで電話をかける
AppleScriptでSMSを送信する
iPhone/iPadとFaceTimeで通話する
リソースリファレンス〜Predicate文/UTI/アイコン/ディスクイメージ
AppleScriptの歴史
macOSとAppleScriptの要素技術史
AppleScriptの歴史 macOS編
AppleScriptの歴史 Classic MacOS編
AppleScript FAQs
エラー番号とエラーメッセージ
AppleScriptのエラー・コード表
キーコード表
キー入力シミュレーション用キーコード
あとがき
macOS 14の英語環境だけで発生している現象ですが、12時間制の時刻表記設定にしてdateオブジェクトから文字列に変換すると、
時刻と「AM」「PM」の間にUTF-8で202Fのキャラクタ「Narrow No-Break Space」を入れてくるようになったもよう。これを入れるとどういう「いいこと」があるのかは、自分にはわかりません。
macOS 10.12あたりで日本語IMからFinder上のファイル名を入力した際に不可視文字を突っ込まれるという「大惨劇」が起こって、こっそり「なかったこと」にされたようですが、あの時にはリネームできないわファイル名を指定すると一致しないわ、既存の不可視文字入りファイルを修正してもそのままでは保存ができないわで、ひどい目に遭いました。現在日時をそのままファイル名に指定すると大惨劇が起こりそうです。
まぁ、でもAppleに報告してもどうせ真面目に取り合わないでしょうし、日本語環境でこの惨劇は発生しないので、英語圏の誰かが報告すればいいんじゃないでしょうか。
なお、Sonomaの日本語環境で12時間制の時刻表記設定にしてdateオブジェクトから文字列を取り出しても、「午前」「午後」といった12時間表記にともなう表記文字と時刻情報との間に、このような不可視キャラクタが混入することは確認できませんでした。
macOS 13.6.1アップデートがβ段階を経由せずに配信されました。セキュリティ上の問題を解消するためのもの、とのことです。
念のために試してみましたが、macOS 13.x上で実行ができなくなっているCocoa-AppleScript Appletランタイムは、依然として実行できません。彼らがこれを直す気があるのかどうか、まったくわかりません。
macOS 14上で、恒例の「辞書」アプリ用にOSに収録している辞書について調査を行いました。スクリプトエディタ上で手軽にCocoa Scriptingを使えるようになったmacOS 10.10以降、AppleScriptからこれらの辞書にアクセスして検索ができるようになり「これは便利!」だと痛感。この機能が失われたら大問題だと感じたためです。
辞書データに対して検索を行う場合には、「どの辞書で検索するか」といった指定を文字列で行う必要があるので、正式な名前について知っておく必要があります。
以来、すべてのバージョンで辞書の名称一覧を取得して記録を行なっています。
理由は、macOSのメジャーアップデートごとに辞書の名前が微妙に細かく変わっているからです。
それらの名称変更には、理由がよくわからないものもあれば、なんとなくわかるものもあります。
これは、見て確認して腰を抜かしました。辞書の名前が変わるというのは「おおごと」だと思っており、このようにコロコロ変えていいものではないと考えています。Appleの命名ルールがコロコロ変わるということを思い知らされた事件でした。
これは…名前を変える必要があったものと見ています。
この「Oxford American Writer’s Thesaurus」の変更箇所は、「’」です。macOS 10.13で全角のアポストロフィ文字に変更され、以後そのまま継続しています。
よくよく考えると、これはPredicates文で抽出するさいに「’」が半角で入っていると処理系の都合で問題になるので全角文字に置き換えたというパターンなんでしょう。
ちなみに、macOS 14で追加になったのは….
NE Nationalencyklopedin AB Professional English-Swedish / Svensk-Engelska
Stavropoulos Oxford Greek-English Learners Dictionary
Kamus Komprehensif Bahasa Melayu – Malay Monolingual Dictionary, Oxford Fajar
Kamus Dwibahasa Melayu/Inggeris – English/Malay Bilingual Dictionary, Oxford Fajar
Larousse Editorial Diccionario General de la Lengua Española
Тълковен речник на съвременния български език
Λεξικό της κοινής νεοελληνικής
Larousse Editorial Diccionari Manual de la llengua catalana
Uniwersalny słownik języka polskiego
Dicţionarul explicativ al limbii române
Oxford Punjabi Dictionaries – ਪੰਜਾਬੀ ਅੰਗਰੇਜ਼ੀ ਕੋਸ਼ • پنجابی انگریزی لغت
で、削除されたのは、
Diccionario General de la Lengua Española Vox
です。Google翻訳すると「スペイン語の一般辞書vox」とのこと。あまり大きくない辞書だったのかも?
iWork……という言葉は最近はあまり使われないようなので、Keynote、Pages、Numbersと呼びますが……これらのアップデート版v13.2が公開されました。AppleScript用語辞書の修正、追加はありません(作成できるグラフ形式が増えているのですが、ASから作成できるようにはなっていません)。
メジャーアップデートのv14.0などではないので、本バージョンは堅実で小刻みな機能アップデート版といえるでしょう。
3Dオブジェクトを格納するUSDZファイルをデータとして挿入できたりアニメーション表示(Keynote)できたり、新しいテーマが追加されたり、その他SVG画像を素材として利用できるようになったもようです。
USDZ形式のファイルを扱えるのは、いまのところ手元のアプリケーションではXcodeとPreview.appのみ。
SVGについては、いろいろ増えてきています。
こうした各種書類形式をキーにして、さまざまなアプリケーションを連携させられるという情報を提供する件をAppleのWWDRに提案したことがありましたが、どこのチームも興味を持たなかったとのこと。
USDZ形式データについては、数年前からこの形式データの利用を広めたいという「意図」が見えたので、いろいろ情報収集はすすめてきました。iWork Appsでサポートするということで、1段階利用が広がったというところですが、たとえばKeynoteで3Dを前提としたアニメーションやトランジッションが実装される、という機能が整備されるまでは単なる素材が1つ増えたぐらいでしょう。
Keynoteに3Dトランジッションや3Dアニメーションを追加するぐらいのことは、とっくの昔から検討されていたと思われますが、おそらく実装してみると「思ったよりも効果的ではない」という結論になったのでしょう。Vision ProのようなxRデバイスで閲覧するという「ブラウズ環境」を整備できたことにより、USDZ形式のデータを広くサポートする「価値」が生まれると踏んだのでしょう。
Vision Proが成功を収めるか、誰もが記憶から追い出したくなるような失敗として記録されるかは不明ですが、USDZ形式の利用が広くサポートされれば、それは多くの人々に役立つものとなることでしょう。
macOS 14RCをさわって「システム設定」をAppleScriptから操作し、目的のPaneをIDで指定して表示できることを確認しました。
macOS 13に戻ってきて資料を作成(macOS 14を信用していないので)。「macOS 13でも動いてみたりして?」と、冗談半分にmacOS 14用のScriptを走らせたら……動いてしまいました。
各PaneのIDやnameを取得でき、指定IDのPaneを表示でき、現在表示中のPaneの情報を取得できます。
厳密に「いつから」この状態になっていたのかは不明ですが、macOS 13.5あたりでしょうか? 自分の環境はmacOS 13.6betaなので、13.5/13.5.1の状況は確認のしようがありませんが、OSのマイナーバージョンアップ時にこうしたまともな改修を行うなんて、前代未聞です。よほど、全世界的に文句を言われたのでしょう。
name | ID |
(ユーザーの名前) | com.apple.systempreferences.AppleIDSettings*AppleIDSettings |
ファミリー | com.apple.Family-Settings.extension*Family |
Wi‑Fi | com.apple.wifi-settings-extension |
Bluetooth | com.apple.BluetoothSettings |
ネットワーク | com.apple.Network-Settings.extension |
VPN | com.apple.NetworkExtensionSettingsUI.NESettingsUIExtension |
通知 | com.apple.Notifications-Settings.extension |
サウンド | com.apple.Sound-Settings.extension |
集中モード | com.apple.Focus-Settings.extension |
スクリーンタイム | com.apple.Screen-Time-Settings.extension |
一般 | com.apple.systempreferences.GeneralSettings |
外観 | com.apple.Appearance-Settings.extension |
アクセシビリティ | com.apple.Accessibility-Settings.extension |
コントロールセンター | com.apple.ControlCenter-Settings.extension |
SiriとSpotlight | com.apple.Siri-Settings.extension |
プライバシーとセキュリティ | com.apple.settings.PrivacySecurity.extension |
デスクトップとDock | com.apple.Desktop-Settings.extension |
ディスプレイ | com.apple.Displays-Settings.extension |
壁紙 | com.apple.Wallpaper-Settings.extension |
スクリーンセーバ | com.apple.ScreenSaver-Settings.extension |
省エネルギー | com.apple.Battery-Settings.extension*EnergySaverPreferences |
ロック画面 | com.apple.Lock-Screen-Settings.extension |
ログインパスワード | com.apple.Touch-ID-Settings.extension*TouchIDPasswordPrefs |
ユーザとグループ | com.apple.Users-Groups-Settings.extension |
パスワード | com.apple.Passwords-Settings.extension |
インターネットアカウント | com.apple.Internet-Accounts-Settings.extension |
Game Center | com.apple.Game-Center-Settings.extension |
キーボード | com.apple.Keyboard-Settings.extension |
マウス | com.apple.Mouse-Settings.extension |
ゲームコントローラ | com.apple.Game-Controller-Settings.extension |
プリンタとスキャナ | com.apple.Print-Scan-Settings.extension |
AppleScript名:すべてのPaneの情報を取得.scpt |
tell application "System Settings" set aList to properties of every pane –> {{class:pane, name:"外観", id:"com.apple.Appearance-Settings.extension"}, {class:pane, name:"ロック画面", id:"com.apple.Lock-Screen-Settings.extension"}, {class:pane, name:"キーボード", id:"com.apple.Keyboard-Settings.extension"}, {class:pane, name:"ファミリー", id:"com.apple.Family-Settings.extension*Family"}, {class:pane, name:"Wi‑Fi", id:"com.apple.wifi-settings-extension"}, {class:pane, name:"デスクトップとDock", id:"com.apple.Desktop-Settings.extension"}, {class:pane, name:"Bluetooth", id:"com.apple.BluetoothSettings"}, {class:pane, name:"壁紙", id:"com.apple.Wallpaper-Settings.extension"}, {class:pane, name:"SiriとSpotlight", id:"com.apple.Siri-Settings.extension"}, {class:pane, name:"マウス", id:"com.apple.Mouse-Settings.extension"}, {class:pane, name:"プライバシーとセキュリティ", id:"com.apple.settings.PrivacySecurity.extension"}, {class:pane, name:"機能拡張", id:"com.apple.ExtensionsPreferences"}, {class:pane, name:"プロファイル", id:"com.apple.Profiles-Settings.extension"}, {class:pane, name:"省エネルギー", id:"com.apple.Battery-Settings.extension*EnergySaverPreferences"}, {class:pane, name:"一般", id:"com.apple.systempreferences.GeneralSettings"}, {class:pane, name:"情報", id:"com.apple.SystemProfiler.AboutExtension"}, {class:pane, name:"ソフトウェアアップデート", id:"com.apple.Software-Update-Settings.extension"}, {class:pane, name:"ストレージ", id:"com.apple.settings.Storage"}, {class:pane, name:"AirDropとHandoff", id:"com.apple.AirDrop-Handoff-Settings.extension"}, {class:pane, name:"ログイン項目", id:"com.apple.LoginItems-Settings.extension"}, {class:pane, name:"言語と地域", id:"com.apple.Localization-Settings.extension"}, {class:pane, name:"日付と時刻", id:"com.apple.Date-Time-Settings.extension"}, {class:pane, name:"共有", id:"com.apple.Sharing-Settings.extension"}, {class:pane, name:"Time Machine", id:"com.apple.Time-Machine-Settings.extension"}, {class:pane, name:"転送またはリセット", id:"com.apple.Transfer-Reset-Settings.extension"}, {class:pane, name:"起動ディスク", id:"com.apple.Startup-Disk-Settings.extension"}, {class:pane, name:"集中モード", id:"com.apple.Focus-Settings.extension"}, {class:pane, name:"ゲームコントローラ", id:"com.apple.Game-Controller-Settings.extension"}, {class:pane, name:"スクリーンタイム", id:"com.apple.Screen-Time-Settings.extension"}, {class:pane, name:"長野谷隆昌", id:"com.apple.systempreferences.AppleIDSettings*AppleIDSettings"}, {class:pane, name:"VPN", id:"com.apple.NetworkExtensionSettingsUI.NESettingsUIExtension"}, {class:pane, name:"ディスプレイ", id:"com.apple.Displays-Settings.extension"}, {class:pane, name:"プリンタとスキャナ", id:"com.apple.Print-Scan-Settings.extension"}, {class:pane, name:"Game Center", id:"com.apple.Game-Center-Settings.extension"}, {class:pane, name:"インターネットアカウント", id:"com.apple.Internet-Accounts-Settings.extension"}, {class:pane, name:"コントロールセンター", id:"com.apple.ControlCenter-Settings.extension"}, {class:pane, name:"ネットワーク", id:"com.apple.Network-Settings.extension"}, {class:pane, name:"スクリーンセーバ", id:"com.apple.ScreenSaver-Settings.extension"}, {class:pane, name:"アクセシビリティ", id:"com.apple.Accessibility-Settings.extension"}, {class:pane, name:"サウンド", id:"com.apple.Sound-Settings.extension"}, {class:pane, name:"ユーザとグループ", id:"com.apple.Users-Groups-Settings.extension"}, {class:pane, name:"パスワード", id:"com.apple.Passwords-Settings.extension"}, {class:pane, name:"通知", id:"com.apple.Notifications-Settings.extension"}, {class:pane, name:"ログインパスワード", id:"com.apple.Touch-ID-Settings.extension*TouchIDPasswordPrefs"}, {class:pane, name:"SwiftDefaultApps", id:"cl.fail.lordkamina.SwiftDefaultApps"}, {class:pane, name:"SwitchResX", id:"fr.madrau.switchresx.prefpane"}} end tell |
AppleScript名:現在表示中のPaneの情報を取得.scpt |
tell application "System Settings" set aList to properties of current pane –> {class:pane, name:"外観", id:"com.apple.Appearance-Settings.extension"} end tell |
AppleScript名:WiFiのPaneを表示.scpt |
tell application "System Settings" reveal pane id "com.apple.wifi-settings-extension" end tell |
目下、電子書籍「AppleScript最新リファレンスv2.8対応」の絶賛仕上げ中です。70%程度の完成度でしょうか。9月中に終わらせたいところですが、まだまだ油断できません。今日、ページを数えてみたら800ページを超えていました。せめて、900ページに達しないようにしたいところです。
この作業が終わるまでは、制作環境を変えるのは危険です。昨今のmacOSのリリース版の出来の悪さを思えば、PDF出力ができなくなったり、日本語入力に問題が生じるぐらいは当然のようにあり得る話でしょう。
そのため、この作業が終わるまではしばらくmacOS 14へのアップデートは見送ります。β版でCocoa Scriptingの機能呼び出しでまばらに機能低下が報告されていますが、1台のマシンで外付けドライブからの切り替え起動が行えない現行環境を考えると、速度差を計測するベンチマークを行うためには、ほぼ同スペックのマシンを複数台用意する必要が生じます。
これは、さすがにコストに見合わないため、できない話です。せめて、こうしたテストに協力してくれるところがあればよいのですが、なかなか価値を共有できるユニットが見当たりません。
先日のAppleEventでmacOS 14の9月27日に正式リリースという話が発表されました。
…..本気?(^ー^;;
外付けSSDに別バージョンのOSをインストールしておいて、β版の評価時には外付けSSDで起動する……という運用がmacOS 12あたりからできなくなってきています。そのため、業務用のMacとβテスティング用のMacを別に用意できず、macOS 14, Sonomaのβテストについては「完全無視」という今日このごろです。
書籍などで、β版OSでスクリーンショットを撮るわけにもいきませんので、当然な状況です。また、β版で気合いを入れてチェックしても、Release版でβ版以下のクオリティのOS(バグだらけ)になってしまうことが続いており、βテストの意義そのものを疑っています。
そんな中で、Sonomaのβテスターから漏れ伝わってくる「SonomaのCocoa Scriptingが遅い」という噂。
すべてのテスターから詳細な情報を聞けていないものの、何か特定の機能で10倍ぐらい速度が遅くなっている領域があるようです。よくある、Permutation(いくつかの要素の全パターンの組み合わせを計算出力)における速度低下とかいう「処理データ数がふえると遅くなる」という話ではなく、どうも遅くなる箇所が偏在しているようです。
いわく、
–InDesignの組版でCocoa Scriptingを利用しており、10倍ぐらい遅くなった
–GamePlayKit.frameworkの機能を呼び出して配列のシャッフルを行ったら10倍ぐらい遅くなった
などなど。
テスターが自分のマシンが何なのかを書かないので、どの程度深刻なのかが見えてきませんが、OSをアップデートしたら最新のマシン(の特定の処理)が10分の1の速度になったら嫌ですよね?
OS自体の機能はたいして機能アップしないのに、バグとか不具合ばかりが増えるというのは残念なことです。
macOS 13.x上でも日本語入力の速度の極端な低下が見られたりと、SoCの高パフォーマンス・コアと省エネ・コアの振り分けに失敗している疑惑があるものの、macOS 14βの問題がこれによって発生しているのかどうかは不明です。
macOS 10.15の際にもCocoa Scriptingの速度低下が見られ、macOS 12まで修正されませんでした(macOS 11で自分がレポートして修正)。
毎度毎度、目がさめるような不具合やトラブルを起こして、Release版でさらに巨大な不具合を作り込むとは、もはや職人芸としか言いようがありません。某社の組織の運営とか管理方法に大きな問題があるとしか思えません。
Piymaru Softwareによる電子書籍の84冊目、「ゆっくりAppleScript解説(3)」を発売しました。PDF42ページで構成されています。
第7章:デフォルト色のまま使うのはヤバいんだぜ!
第8章:tellを閉じるのに「end tell」と書くのは無駄無駄無駄無駄無駄ァ! なんだぜ!
第9章:「遅い」という文句は、残念なヤツの自己紹介なんだぜ