Keynoteがv11.0からv11.0.1にアップデートされました。
AppleScript用語辞書(sdef)の差分をとって確認してみたところ、とくに変更点は見つかりません。
eSeminor: Cocoa Scripting Course Volume #2 NSArray
Cocoa Scripting本「Cocoa Scripting Course #2 NSArray」の販売を開始しました(通称:Cocoa本2)。
ページ数:245ページ(うち、Vol.2独立部分 94ページ 2021/3/30現在)
フォーマット:PDF+Zipアーカイブ(791ファイル)
特別特典:
Script Debuggerの15%割引購入コード入り
購入後3か月まで、本書の内容で理解できない箇所について3か所まで補足説明
理解度確認テストで合格した方に修了証明書を発行
→ Cocoa Scripting Course #2
→ Cocoa Scripting Course #2 (お試し版)
内容:
macOSのAPIであるCocoaをAppleScriptから利用し、macOSの持つ強力な機能をアプリケーションの補助なしに直接呼び出せる「Cocoa Scripting」は、日々の業務やデータ処理に、たいへん強力な武器になります。
この、Cocoa Scriptingについてはとくに日本語の書籍が存在しておらず、これまでは「Xcodeの使い方、GUIの作り方、各メソッドの使い方….」といった、体系がまったく異なるObjective-Cの入門書で断片的に情報を得ることしかできませんでした。
Vol.2では、NSArray/NSMutableArrayを解説。AppleScriptのlist型変数に該当するオブジェクトですが、ソート能力が強力で高速。さまざまな抽出機能を持っているため、いままで巨大な配列を扱うためだけにデータベースを併用していたような機能が、Cocoa Scriptingの導入で他のデータベースの手助けなしに実現できます。基礎的なサンプルから高度な使い方までていねいに解説。実際に巨大な配列をlist型変数とNSArrayで作成して作成時間やメモリ消費サイズなどを計測したうえでグラフ化して比較しています。
また、本書は「AppleScriptの穴」掲載AppleScriptのカテゴリ別アーカイブ集ともなっており、本書にはNSArrayなど配列処理を行うサンプルScriptをはじめ有用なAppleScriptのファイルを大量に添付しています。
続刊予定:
eSeminor: Cocoa Scripting Course Volume #1 NSString (Basic object to know Cocoa API)
eSeminor: Cocoa Scripting Course Volume #2 NSArray(Most valuable API to use Cocoa with AppleScript to sort data)
eSeminor: Cocoa Scripting Course Volume #3 NSDictionary (Key object to access various other APIs)
eSeminor: Cocoa Scripting Course Volume #4 NSURL (Cloud API Scripting)
eSeminor: Cocoa Scripting Course Volume #5 NSImage (image conversion and filtering)
eSeminor: Cocoa Scripting Course Volume #6 PDFKit (PDF Processing)
eSeminor: Cocoa Scripting Course Volume #7 NSAttributedString (Attributed string and HTMLs)
eSeminor: Cocoa Scripting Course Volume #8 NSFileManager (File processing)
eSeminor: Cocoa Scripting Course Volume #9 Webkit (WebView Scripting)
eSeminor: Cocoa Scripting Course Volume #10 System hardware & software Information
入門者向け本はかねてからのPiyomaru Softwareの懸案事項でした。「AppleScriptえほんシリーズ」を出してはいますが、AppleScriptそのものの入門書というのは出していませんでした。
入門書というのは、いざ書いてみると上級者向けの本より難しいと感じます。例え話でたとえても嘘が多く入ってしまいますし、「変数という箱があって….」という説明も、実際に読んでみると「なんのことやらわからない」ことに。
なので、ある操作を行いたいんだけど、どうやったらいいのか分からない…というストーリーを作って、それに基づいてじょじょにレベルアップしていくという流れで説明しています。
ページ数30ページ、価格1,000円。いまなら期間限定で150ページほどの薄いコマンドリファレンスなどの別冊資料集がついてきます。発売です。
電子ブック「FileMaker Pro Scripting Book with AppleScript」の購入者様向けに追加ダウンロードコンテンツをご用意しました。
先日のFileMaker作品コンテスト「FileMaker選手権2020」に3作品応募した過程を記録した「FileMaker選手権2020戦記」です(PDF形式、83ページ)。
レギュレーションを検討してどのような作品を作ろうかと検討した過程や、チーム内で議論された内容、初期仕様やその後の仕様の変化、チーム内で記録された開発日誌、結果公開後の各方面からのコメントに筆者の総括コメントなど、生々しすぎて結果発表後すぐには公開できなかったほどです。
「FileMaker Pro Scripting Book with AppleScript」を購入された方は、購入コンテンツのダウンロードページからダウンロードしてください。未購入の方は、同書籍をお買い上げいただくとオマケとしてダウンロードできます。単体での販売は行っておりません(さすがに、優勝していないのでそういう価値はないでしょう)。
20周年だそうで。自分がQ&A系SNS「Quora」に投稿した内容を一部書き換えて掲載してみます。自分で書いたものなので、とくに問題はないでしょう。
「Windowsの各バージョンを家に例えると……という話があるが、Mac OS Xではどうか?」 という質問に答えたものです。
新宿・髙島屋で販売されたので「髙島屋記念」品と呼ばれる。Unicode対応で「髙島屋」という文字を入力・表示できるようになった。ヒラギノフォントの美しさに住人が魅了された。ただし、電源コンセント(Appleロゴマーク)が部屋(画面上部)中央にある。実用性を拒否したオールガラス製のモデルハウス。「住めない家」「いつかは新築を」と眺める程度の完成度。DOSを思わせるメンテ用の工具(Terminal.app)が標準装備されてショックを受ける住人多数。
土台と柱しかない。かろうじて美しいガラス窓がついているが、雨風をしのげない。ただし、土台だけは地下3階分あってやたらと豪華。太陽の光を必要としない地下住民(Unix民)にはウケた。
むぎわらの屋根がついた。でも、ドアがついていない。生活に必要なものがそろっていないので、食事したり寝るのに前のあばら屋に帰る必要があった。
はじめて、普通に生活できるようにひととおりの装備が加わった。ただし、家具が入らなかったり居心地が悪かったりしたが、外見はやたらと豪華になった。
はじめて、引越し前のあばら屋(Classic Mac OS)に帰る必要を感じなくなった。ただし、ドアの建てつけが悪かったり、うまく動かない家電製品が散見された。
かなりよくなった。しかし、土台部分で以前からあった不具合がそのままだったので、過渡期感がすごかった。ガス(PowerPC)からオール電化(Intel)に切り替えたので、不具合がありつつも快適さが当社比2.5倍という謎仕様。工具(Xcode)の整備がすすみ、快適さをアップさせるためにはメーカー謹製のオール家電専用工具を使うことが必須となった。
土台の修正が行われた。細かい不具合はあったが、とても快適になった。その一方で、無理のしすぎで、家を建てるのに参加していた棟梁(アビー・テバニアン)が辞めてしまった。また、昔のあばら家から持ってきた家具をそのまま使うことができなくなった。引越し前のあばら家は解約された。
家の完成度が増して、人によっては「過去最高」の完成度。ここから先に進むことを拒む住人が散見された。自動販売機が家の中に設置された最初のバージョン。前バージョンの不具合点の修正に全力で取り組むというCEOの公開土下座が評価された。
電源規格が100Vから200Vに変更され、家具の買い替えが必要になったりした。無料配布されはじめ、土地があれば無料で家を建ててくれるようになった。趣味で仕事をしていた変態CEOが健康問題で一線を退き、その後の内紛が感じられる出来。
微細な変更なので、変更されたことに住人は気づかなかった。部屋の名前や家具の名前が、犬小屋に合わせて変更された。
巨大化した犬小屋に母屋の仕様が変更されはじめた。ただし、時計が狂うというバカみたいな問題点があり、修正できないことに住人が呆れはじめた。
野心的な装備が多数備わった、意欲的な改修である一方、あらたな機能不全も出てきた。
10.10の不具合点の修正を全力で行なった。
セキュリティの強化が行われはじめた。機能が充実した名バージョン。しかし、セキュリティを実現するために階段が使えないなど、実用上問題のある機能がぼちぼち見られはじめた。
完成直前までは高い評価を得ていたが、引き渡し時に廃墟になっていた事故物件。毒の霧が吹き出していて中に住めない家。macOS史上最悪にして最低。なぜこれで眉毛担当者の首が飛ばなかったのかが理解できない。住民からの嫌われようからmacOS「Vista」と呼ばれた。また、家中にひび割れがあり、眉毛出てこいと激怒するもの多数。この毒の沼をパスする住人多数。これをリリースした眉毛担当者とCEOへのヘイトが高まった。
昔ながらの100V電源で動く家電を次のバージョンから家の中に置いておけなくなった。100Vの家電を動かすと警告を受けるようになった。初期はこまごまとした(無視できないレベルの)問題があったが、バージョン末期にはなんとかまとめられた。「偶数バージョンしかインストールしてはいけない。奇数バージョンは廃墟」との見方が強まった。
建築中に廃墟であることがわかった家。200V電源専用になったので、使えない家電は捨てるほかなかった。10.13で住人も慣れたもので「この家には住めない」ことが夏ごろにはわかっていた。使い勝手に目をつぶってセキュリティのために新聞受けをセメントで埋める(PDFViewのリンクに何かを埋め込まれた場合に備えて機能を大幅に制限した)など、やり方が乱暴(説明が一切ない)。リリース前からmacOS「Vista2」「毒の沼2号」と呼ばれていた。翌年にARM移行+11.0構想が発表されなかったら、かなりの住人がメーカーに直接文句を怒鳴り込んでいたことだろう。
このところ強化され続けた犬小屋と一体化されることが発表され、犬用のミニチュア家具が置けるようになるらしい家。犬でも使えるように犬用の取っ手や犬用のドアが新設されている。問題視されるような破滅的な機能が少ない一方で、見た目が犬用なのか人間用なのかはっきりしない。ただし、熱により不毛の荒野となりつつあった土地(Intel)から犬用の涼しい土地(Apple Silicon)に移し替えられることになった。でも油断はできない。最近は引き渡し時に事故を起こすパターンが増えているので、どんな事故が起こるかわからない。
とりあえず、v11.0は「偶数バージョン」(16.0)なので毒の沼になる可能性は低そうだが、v12.0(10.17)が毒の沼化しないことを祈る。
macOS 11.0の評価がとても難しい気がします。AppleScript系については、あまり問題が出ていない雰囲気なんですが、もっと下のレイヤー(ハードウェアに近いレイヤーとか)でいろいろ問題が散見されているので、v11.x台はお試し版みたいなものなんでしょう。
見た目もこなれていなくて、使い勝手が軽視されている印象があります。初期のβはデザイン面での出来がひどくて「見た目で使いたくなくなる初めてのmacOS」だと感じました。リリース版は幾分マシになりましたが、デザイン変更を強引に行いすぎて使い勝手を損ねています。ダイアログとウィンドウの区別がつきにくく、ツールバーアイコンの視認性が低い(iWork Apps)とかいう「これでどーしたいの?」という出来。ユーザーが文句を言いまくって12.0ではもう少しマイルドな仕上がりになってほしいところです。
自分自身はmacOS 10.14.6をメイン環境に据えつつ、10.15.7と11.3betaを並べて使っています。10.14.6もベストというわけではなく、Appleの度重なる改悪によってWebViewの動作がおかしくなっているし(バグレポートしても直せないし直らない)、メモリ管理は10.14.x台はわりとひどくて、アプリケーションで使用済みのメモリが解放されないなど、Kamenokoのアプリケーション開発時にmacOS 10.14特有の問題に悩まされました。
「Cocoa Scripting Course」シリーズは読者の方からの質問などに従って本文を随時更新していく方式を採用しています。続編で各巻共通部分に変更が加わった場合には既刊分についても共通部分を更新します。
「Cocoa Scripting Course Volume #1 NSString」について、質問により説明不足の箇所が判明したため、追記したり修正したりしています。以下、その修正箇所です。
1章「プログラミングスタイル」>「一部のコマンドで書き換えが必要」「計算の優先順位を示すカッコを修正」を追加。 「添付サンプルScript紹介」>「ディレクトリ構成と概要紹介」を修正。 筆者あとがきの誤字修正。 更新履歴ページを追加。 レイアウトを全体的に修正。 3章「NSString Basic Samples」のヘッダー引用部分の書式変更。 ほか微修正。
Cocoa Scripting本「Cocoa Scripting Course #1 NSString」の販売を開始しました(通称:Cocoa本)。
ページ数:247ページ
フォーマット:PDF+Zipアーカイブ(715ファイル)
特別特典:
Script Debuggerの15%割引購入コード入り
購入後3か月まで、本書の内容で理解できない箇所について3か所まで補足説明
理解度確認テストで合格した方に修了証明書を発行
→ Cocoa Scripting Course #1 (お試し版)
内容:
macOSのAPIであるCocoaをAppleScriptから利用し、macOSの持つ強力な機能をアプリケーションの補助なしに直接呼び出せる「Cocoa Scripting」は、日々の業務やデータ処理に、たいへん強力な武器になります。
この、Cocoa Scriptingについてはとくに日本語の書籍が存在しておらず、これまでは「Xcodeの使い方、GUIの作り方、各メソッドの使い方….」といった、体系がまったく異なるObjective-Cの入門書で断片的に情報を得ることしかできませんでした。
本書は、Cocoa APIの使い方をAppleScriptに合わせて解説。とくに、Objective-C/Swift入門書にある膨大な「Xcodeの使いこなし」部分は覚える必要はありません。図を中心に説明することで、難解な概念を理解しやすく解説します。
また、本書は「AppleScriptの穴」掲載AppleScriptのカテゴリ別アーカイブ集ともなっており、本書にはNSStringなど文字処理を行うサンプルScriptのファイルを添付しています。
Cocoa Scriptingの日本語による初めての解説本です。文章よりも図などを多めに用いて解説し、添付の大量のScript(715本)を実際に動かして試していただく種類の本です。
eSeminor: Cocoa Scripting Course Volume #1 NSString
eSeminor: Cocoa Scripting Course Volume #2 NSArray
eSeminor: Cocoa Scripting Course Volume #3 NSDictionary
eSeminor: Cocoa Scripting Course Volume #4 NSURL
eSeminor: Cocoa Scripting Course Volume #5 NSImage
eSeminor: Cocoa Scripting Course Volume #6 PDFKit
eSeminor: Cocoa Scripting Course Volume #7 NSAttributedString
eSeminor: Cocoa Scripting Course Volume #8 NSFileManager
eSeminor: Cocoa Scripting Course Volume #9 Webkit
eSeminor: Cocoa Scripting Course Volume #10 System hardware & software Information
▲こちらが構想です。PDFKit本にサードパーティのPDF Framework「PSPDF」に関する言及やサンプルを掲載するという構想もあります。ご意見やご要望は本記事へのコメント欄にお寄せください
Claris FileMaker Proの作品コンテストである「FileMaker選手権2020」に3作品応募し、3作品ともDropbox賞に入賞しました。当て馬とか引き立て役と本命作品が同じ賞ということで……電話で愚痴りまくっていますが気にしないでください。Piyomaru Software関係者だけで5つ賞を取っており、実績としてはなかなかのものです。
目標の金賞・銀賞ではなかったのでたいへんに残念でしたが、Dropboxの年間利用権が3年分チャージされました。もう、AppleScriptからREST API経由で叩きまくるしかありません。サーバーがちぎれるぐらい叩くしか!
製作期間3週間。10万例の類義語辞書をFileMaker Proにポーティングして検索キーワードを拡張する「スタークエリー」を実装。色セットと単語の組み合わせを1.4万例収録し、好きな言葉(+拡張された類義語群)で色セットを検索して「おきにいり」に保存。検索した色セットをSVGデータに着色シミュレーションし、Adobe Swatch Exchangeファイルに書き出してIllustratorやPhotoshopですぐに使えるシステムです(応募作品にはASE書き出しモジュールを含んでいません)。
対応プラットフォーム:macOS、Windows、iOS(フル機能はmacOSのみ。macOS 10.15以降推奨)
→ ダウンロード
製作期間3時間。「戦場の絆」の公式ホームページのMS画像から機械学習モデルを作成。データベース上にドロップされた画像を「連邦軍」「ジオン軍」のどちらの機体かを判定するものです。自転車や自動車など、まったく関係ないメカの写真を喰わせて「お前の自転車ジオン軍」などと遊ぶための他愛もない作品です。
対応プラットフォーム:macOS、iOS
→ ダウンロード
製作期間半日ぐらい。PDFの本文テキストをCocoaのサービスでメールアドレスやWeb URLなどに分解して、その要素ごとに抜き出してPDF本文の上にオーバーレイ表示・要素ごとに検索できるようにする作品です。また、各ページを画像認識して、認識結果のテキストも展開。「Volcano」で検索すると桜島の写真を見つけられます。
対応プラットフォーム:macOS、iOS
→ ダウンロード
(リンク先のファイルを差し替えました。作成途上のファイルをあげてしまっていたもよう)
これらの渾身の作品を出しても報われなかった、かわいそうな作者への応援のために、Word Color Palette開発時に使いまくった「FileMaker ProをAppleScriptから(Cocoaの機能を呼び出して)動かす」ノウハウについてまとめた、これらの(↓)電子書籍をお買い求めください。
現在作成中の「Cocoa Scripting Course #1」のお試し版を掲載いたしました。どういう内容の本かを手にとってご確認いただけます。完成にはもう少しかかりますが、掲載分についてはだいたい確定した内容によるものです。
→ Cocoa Scripting Course #1を販売開始
また、本書は「AppleScriptの穴」掲載AppleScriptのカテゴリ別アーカイブ集ともなっており、Vol.1にはNSStringなど文字処理を行うサンプルScriptのファイルを添付しています(現時点で636本)。内容の重複などもあり、純粋にこの本数すべてが別々のものになっているわけではありませんが、だいたいこのぐらいです。
すべてを網羅したわけではありませんが、地道に基礎的なサンプルを掲載したのが一番大変だったでしょうか。
Twitterで一時期さんざん騒がれていた(一部のアカウントが情報を拡散していた)、AppleScript Disasemblerについて調べてみました。
いわく、
「Macには5年前からウィルス(マイニングツール?)が出回っている。というのも、実行専用のAppleScript appletはAppleのウィルスチェックの対象から外れており、中身を確認できないからである。この脅威に対処するためのツールはXXに問い合わせるとよい。aevt disassemblerなどのツールを用意している」
という内容のものでした。分かりやすい恫喝です。「5年前からウィルスが」云々の是非は知りませんし、それにAppleScriptが使われているのかどうかなども知りません。見たことがないものについては、批評も判断も不可能です。
実行専用のAppleScript AppletだとAppleのチェックを免れる、という点については疑問が残ります。ただ、仮にそうしたものがあったとして、その実行内容をいちいちOS側がチェックしているとも考えにくいので、その可能性は否定できません。
そして、「aevt disassemblerなどのツール」という点、ここが問題です。本当にできるのか? 冗談ツールみたいなもの(特定条件では使えるが実用性がない)はあるのかもしれませんが、そんなに、現代の高度化しているAppleScriptのプログラムの内容を、実行専用バイナリから元ソース取り出しができるものなのか?????? これは、試してみないとなんとも言えません。
えーーー、AppleScriptはAppleEventのバイトコードに翻訳されて実行されます。
この、AppleEventのバイトコードから元のAppleScriptを戻せるかどうかについては、かなり初期から「イベントのコードと実際のAppleScriptの対処表を作れば、元のコードを取り出すことは原理上不可能ではないだろう」という推測が行われてきました。
ただ、その対処表を作るという手間がバカバカしく、苦労の割に得るものが少ないため誰も本気で取り組んでこなかったテーマでもあります。
とりあえず実行専用のAppleScriptでなければ「osadecompile」コマンドがOSに標準装備されているので、これでソースを取得することは可能です。
では、実行専用のAppleScriptやAppletからソースを取得できるのでしょうか?
Github上でそれらしきソフトウェアをみつけました。aevt_decompileとapplescript-disassemblerです。それぞれ実際に試してみました。
確認対象ファイルは、
①普通の(スクリプトエディタで)読める通常形式のAppleScript(.scpt)
②「実行専用」の通常形式のAppleScript(.scpt)
③「実行専用」のAppleScriptアプレット
④「実行専用」のAppleScriptアプレット(コード署名つき)
の4つです。主に、decompilerについて(確認もしないで)騒いでいる連中が槍玉に挙げているのは、③④のはずなので、①②はあくまで比較用です。
まず、aevt_decompileを実際にXcode上でビルドし、/usr/local/binにコピーしたうえでTerminal上から実行してみました。
Mac:bin me$ ./aevt_decompile /Users/me/Desktop/copy\ files\ to\ target\ folder.app 2021-01-23 20:39:21.622 aevt_decompile[10457:2398389] The file “copy files to target folder” couldn’t be opened because you don’t have permission to view it. Mac:bin me$ ./aevt_decompile /Users/me/Desktop/copy\ files\ to\ target\ folder.app/Contents/Resources/Scripts/main.scpt 2021-01-23 20:39:55.375 aevt_decompile[10469:2400520] The file “main.scpt” couldn’t be opened using text encoding Unicode (UTF-8). Mac:bin me$ ./aevt_decompile /Users/me/Desktop/copy\ files\ to\ target\ folder_no_sign.app/Contents/Resources/Scripts/main.scpt 2021-01-23 20:41:02.693 aevt_decompile[10482:2405472] The file “main.scpt” couldn’t be opened using text encoding Unicode (UTF-8). Mac:bin me$ ./aevt_decompile /Users/me/Desktop/copy\ files\ to\ target\ folder.scpt 2021-01-23 20:41:47.007 aevt_decompile[10488:2407982] The file “copy files to target folder.scpt” couldn’t be opened using text encoding Unicode (UTF-8).
結果は、ことごとく「couldn’t be opened」でデスクトップフォルダ上に置いた①〜④のScriptをオープンできませんでした。
Pythonで書かれたこのツールは実行権限を与えるだけで簡単に動きました。また、①〜④のファイルに対してアクセスすることができました。
こちらは結果が出てきました。かなり膨大な内容です。オリジナルのAppleScriptが、
set fileTexts to paragraphs of (the clipboard) set chkFol to choose folder with prompt "[From] Select Check folder" set moveTargFol to choose folder with prompt "[To] Select Copy Trget folder" repeat with i in fileTexts set j to contents of i set fromPath to (chkFol as string) & j try tell application "Finder" duplicate file fromPath to moveTargFol end tell end try end repeat
の程度のひじょうに簡単なものであったのですが、実際に出力されたのは、
# 注:HTMLタグと間違えられてしまう<>については全角記号に置き換えました
--Applet without Code Sign③
Mac:applescript-disassembler-master me$ ./disassembler.py /Users/me/Desktop/copy\ files\ to\ target\ folder_no_sign.app/Contents/Resources/Scripts/main.scpt
=== data offset 2 ===
Function name : <Value type=object value=<Value type=event_identifier value=b'aevt'-b'oapp'-b'null'-b'\x00\x00\x80\x00'-b'****'-b'\x00\x00\x90\x00'>>
Function arguments: <empty or unknown>
00000 PushIt
00001 Push0
00002 MessageSend 0 # <Value type=object value=<Value type=event_identifier value=b'Jons'-b'gClp'-b'****'-b'\x00\x00\x00\x00'-b'null'-b'\xff\xff\x80\x00'>>
00005 PushLiteral 1 # <Value type=object value=<Value type=constant value=0x63706172>>
00006 MakeObjectAlias 22 # GetEvery
00007 GetData
00008 PopGlobal b'fileTexts'
00009 StoreResult
0000a PushIt
0000b PushLiteral 3 # <Value type=object value=<Value type=constant value=0x70726d70>>
0000c PushLiteral 4 # [<Value type=special value=nil>, <Value type=string value=b'\x00[\x00F\x00r\x00o\x00m\x00]\x00 \x00S\x00e\x00l\x00e\x00c\x00t\x00 \x00C\x00h\x00e\x00c\x00k\x00 \x00f\x00o\x00l\x00d\x00e\x00r'>]
0000d Push2
0000e MessageSend 5 # <Value type=object value=<Value type=event_identifier value=b'syso'-b'stfl'-b'alis'-b'\x00\x00\x00\x00'-b'null'-b'\xff\xff\x80\x00'>>
00011 GetData
00012 PopGlobal b'chkFol'
00013 StoreResult
00014 PushIt
00015 PushLiteral 3 # <Value type=object value=<Value type=constant value=0x70726d70>>
00016 PushLiteral 7 # [<Value type=special value=nil>, <Value type=string value=b'\x00[\x00T\x00o\x00]\x00 \x00S\x00e\x00l\x00e\x00c\x00t\x00 \x00C\x00o\x00p\x00y\x00 \x00T\x00r\x00g\x00e\x00t\x00 \x00f\x00o\x00l\x00d\x00e\x00r'>]
00017 Push2
00018 MessageSend 5 # <Value type=object value=<Value type=event_identifier value=b'syso'-b'stfl'-b'alis'-b'\x00\x00\x00\x00'-b'null'-b'\xff\xff\x80\x00'>>
0001b GetData
0001c PopGlobal b'moveTargFol'
0001d StoreResult
0001e LinkRepeat 0x64
00021 PushGlobal b'fileTexts'
00022 Dup
00023 PushLiteral 9 # <Value type=object value=<Value type=constant value=0x6b6f636c>>
00024 PushLiteral 10 # <Value type=object value=<Value type=constant value=0x636f626a>>
00025 Push2
00026 MessageSend 11 # <Value type=object value=<Value type=event_identifier value=b'core'-b'cnte'-b'****'-b'\x00\x00\x00\x00'-b'****'-b'\x00\x00\x10\x00'>>
00029 Push1
0002a PushUndefined
0002b RepeatInCollection <disassembler not implemented>
0002c Equal
0002d Equal
0002e PushVariable [var_0]
0002f PushLiteral 12 # <Value type=object value=<Value type=constant value=0x70636e74>>
00030 MakeObjectAlias 21 # GetProperty
00031 GetData
00032 PopGlobal b'j'
00033 StoreResult
00034 PushGlobal b'chkFol'
00035 PushLiteral 14 # <Value type=object value=<Value type=constant value=0x54455854>>
00036 Coerce
00037 PushGlobal b'j'
00038 Concatenate
00039 GetData
0003a PopGlobal b'fromPath'
0003b StoreResult
0003c ErrorHandler 87
0003f PushLiteralExtended 16 # <Descriptor type=b'alis' content=b'\x00\x00\x00\x00\x014\x00\x02\x00\x01\x06Cherry\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00BD\x00\x01\xff\xff\xff\xff\nFinder.app\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\n cu\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cCoreServices\x00\x02\x00)/:System:Library:CoreServices:Finder.app/\x00\x00\x0e\x00\x16\x00\n\x00F\x00i\x00n\x00d\x00e\x00r\x00.\x00a\x00p\x00p\x00\x0f\x00\x0e\x00\x06\x00C\x00h\x00e\x00r\x00r\x00y\x00\x12\x00&System/Library/CoreServices/Finder.app\x00\x13\x00\x01/\x00\xff\xff\x00\x00'>
00042 Tell 16
00045 PushIt
00046 PushLiteralExtended 17 # <Value type=object value=<Value type=constant value=0x66696c65>>
00049 PushGlobal b'fromPath'
0004a MakeObjectAlias 24 # GetIndexed (item A of B)
0004b PushLiteralExtended 18 # <Value type=object value=<Value type=constant value=0x696e7368>>
0004e PushGlobal b'moveTargFol'
0004f Push2
00050 MessageSend 19 # <Value type=object value=<Value type=event_identifier value=b'core'-b'clon'-b'****'-b'\x00\x00\x00\x00'-b'****'-b'\x00\x00\x90\x00'>>
00053 EndTell
00054 EndErrorHandler 93
00057 HandleError 20 21
0005c PushUndefined
0005d Dup
0005e StoreResult
0005f Jump 0x2b
00062 Return
のような、膨大な内容です。まるで、アセンブラのニーモニックを読んでいるかのような感覚です。
10行程度のScriptから14倍の内容が出力されています。一応、一部の処理内容については(エラートラップ部分など)推測することは可能ですが、前半部分はさっぱりです。断片的に変数名などがわかったり、後半のインデント構造的なものが見えたりするあたりはソースのように見えなくもありませんが、この出力から元のAppleScriptの内容を理解できたりするのでしょうか?
もしかすると、Classic Mac OSの開発経験があるとこの内容を「読む」ことが可能なのかもしれませんが、この内容では自分にはさっぱり分かりません。
現状では、AppleEventを人間が読んでも理解できそうな命令語に置き換え、パラメータともども一覧表示しているというものに見えます。そのレベルの機能については間違いなく実現しているでしょう。ただ、そのAppleEventニーモニックの展開ができたからといって、元のAppleScriptのプログラムを復元できるようには見えません。
# じっと眺めていると「スタック操作を頻繁に行っている」ように見えますが、それでもそれ以上の情報は読み取れません
applescript-disassemblerの機能は同梱のドキュメントのとおりで、実行専用のアプレットから元のAppleScriptのプログラムソースが得られるといったものではありませんでした。その動作内容についても確認できましたし、処理レベルも確認できました。
自分が行った検証のかぎりでは(検証前からおぼろげにわかっていましたが)、一部の人間が他の多くのユーザーの警戒心を煽っているような状況では「ない」と思います。おそらく、その解決ツールという名目でそれらしい動作を行うツールを(AppleScriptを読めない顧客に)売りつけ、お金を巻き上げようという魂胆なのでしょう。
追記(2025/10/27)
aevt_decompileについては、applescript-disassemblerの出力結果を整形して読みやすくするツールであり、これらはセットで使うべきものであることを再確認しました。これらのツールを用いて、すべての予約語を含む個別の実行専用のAppleScriptを作成し、解析した結果を電子書籍にまとめています。
Script Debuggerのv8のPublic Betaが出たので、早速試していますが……まだ日本語環境で作ったAppleScript書類の表示に問題を抱えています。
今回のv8ではApple Silliconへの対応のほか、待望のDark Mode対応なども行われ……普通にAppleScriptを表示するうえにScript Debugger側で設定したDark Themeで表示するなど表示情報が多層化されているようです。
そのために、Roman Language以外のCJK環境のフォント表示で問題を抱えているもよう。とはいっても、LateNight SoftwareはこのジャンルではMac界最強の開発チームであるため、対応は行われることでしょう。
それが今日明日のうちに実現されるかと言われれば、まだ時間が必要といった印象を受けています。
なお、さまざまな仕様の多くはSD7に準じているもようです。
「as anything」は「as any」と解釈されます。これは、macOS 10.13までは「as list or list of string」という謎の解釈を行なっていた(any型は内部的に存在していたが予約語がなかったもよう)ものが、macOS 10.14でスクリプトエディタ側は「as anything」と解釈し、Script Debugger側では「as any」と解釈するようになりました。
自分が「as anything」を発見した顛末は、
にまとめたとおりです。欠点もありますが、自分はこの「any型cast」は言語仕様上必要だと思います。スクリプトエディタとScript Debuggerでこの解釈が統一されていないのは問題であると考えます。
あるいは、スクリプトエディタやScript Debugger以外の「何か」があったほうがよいのかもしれません。Apple側は機能については追加する考えはないようですし(削るばっかり)、Script Debuggerも生産性の向上にはさほど寄与しません(ないと困る道具ではあるものの、あったからといってものすごく効率が上がるわけでもありません。クラッシュ回数多すぎです)。
生産性を維持するために自分がやっていることは、いままでに組んだScriptを部品化して再利用すること、部品を探しやすくすること、スニペット(断片的なプログラム記述入力)を充実させることです。Script Debuggerのスニペットで高度なことができるわけではない(Script Debugger側が想定している範囲を超えられない)ので、本当に必要な時以外はインテリジェントなスニペット(Piyomaru Script Assistant)で魔改造しまくってあるスクリプトエディタを使っています。
Script Debuggerが提供しているデバッグ機能は、ブレークポイントの設定やステップ実行、トレースなどのまっとうで高度な機能ですが、正直なところそれって「入門者レベルに有用」なものばかり(初心者にScript Debuggerは有用)。普通に書いているScripterがそれを必要としているかといえば、ちょっとニーズがズレてしまっていると感じます。数千行クラスの大規模なScriptのデバッグでステップ実行みたいな悠長なことはしませんよね? モジュール単位で再テストしやすくするための仕組みのほうが大事ですよね?
正直なところ、自分はスクリプトエディタにもScript Debuggerにも満足できていないので、第3の選択肢はあるべきだと考えます。
2020年:macOS 11(自分はmacOS 10.14を使用)
毎年書いている記事であり、いろいろ準備していました。コロナ禍の影響もあり、踏んだり蹴ったりの1年といってよいでしょう。
→ 2019年に書いた価値あるAppleScript
→ ぴよまるソフトウェアが選ぶ、2018年に書いた「価値あるScript」
本Blogにおいては、1つの大きな方針転換を行なっています。自分は高性能な部品を適度に提供しておけば、AppleScriptの有用性は主張できると思っていたのですが、部品だと価値がわからない人がとても多いという結論に至りました。
つまり、おいしい野菜やお肉を提供していても、みんなが調理できないので「料理」として提供しないと理解されないということなんですね。なので、「料理」としてのMac App Storeアプリケーションを作って売ることに重点を移しました。フルコース料理を出してみたら意外とウケなかったので、その引き立て用の小皿料理を増やしているという状況です。
今年1年を通じて一番「会心の一撃」だったのは「Kamenoko」。最も多くの人にリーチしたのは「Uni Detector」でしょう。どちらもAppleScriptで開発して、Mac App Storeから提供しています。
そうしたアプリケーションを作る中で育てられた機能も多く、1年を通じて画期的なScriptが登場してきたと感じます。今年1年だけで相当の進歩が達成されています。
ではさっそく、振り返ってみましょう。
2020年1月は、「各月で2本」という選定基準を遵守できないほど画期的なScriptが多数出てきました。この月に登場したScriptは重要なものばかりです。
とくに、AppleScriptのランタイム環境の名称がAppleScript側から取得できるようになったことの意義は大きく、ランタイム環境ごとに挙動を変化させるといった処理が可能になりました。この情報はかなり前(それこそMac OS X 10.1ぐらいの時期)から調べていたものですが、別の用途のために作ったものが使えてしまい、実は5年前にはその方法を明らかにするScriptを書けていた(のに気づかなかった)ことに驚きを禁じえません。
GUI Scriptingでコンテクストメニューのキャプチャを取得
AppleScriptを実行中のランタイムプログラム名を取得する
display drop dialog Script Library
Kamenokoの部品として作った「common elements Lib」が登場しています。まだKamenokoにフィードバックできていませんが、個人的にこんな演算ができたことに驚いています。
Wikipedia経由で2つの単語の共通要素を計算するcommon elements Lib Script Library
このあたりもKamenokoの部品です。
AppleScriptで作ったSandboxアプリケーションでファイル保存の処理を行うときに必須の「ファイル保存ダイアログ」Script。アプリケーション内でREST APIを呼び出すための部品もキャッシュが有効になるなど高度な進化を遂げました。今年、JavaScriptのライブラリを呼び出して異次元の処理ができるようになったScript群の先鞭をつけたScriptも4月に登場しています。
NSURLSessionでREST API呼び出しv4.4.2a
アラートダイアログ上にWkWebViewでGoogle Chartsを表示 v2
このあたりも、Kamenokoのために作った部品ですね。
ダブルクリックとコンテクストメニュー表示をサポートするボタン
今年の一番のScriptが登場。WebView上でインタラクティブな表示を行い、選択表示ができる部品に昇華しています。この時点ではただ表示するだけでしたが、指定した内容を表示して、選択したアイテムを取得できるように使いこなせています。
アラートダイアログ上にWebViewで3Dコンテンツを表示(WebGL+three.js)
アラートダイアログ上にd3-cloudを用いてワードクラウドを表示
このあたりも地味ですが、非常に良作です。macOSの新たに作られたUTI系のFrameworkで、実際に使いこなした記事が存在するのが本Blogのみという状況が長く続いていました。
このScriptは、そもそもOS側にそうした機能が存在していないにもかかわらず、実際に機能を提供できてしまうというものです。
PDFにパスワードが設定されている場合には、そのパーミッション情報を取得する
本Scriptはいろいろ重要なものです。PhotoshopデータであるPSD形式の書類を作成できることはとても重要です。Mac App Storeにアプリケーションに、他のアプリケーション(Photoshop)の存在を前提としたものは提出できません。AppleScriptで作ったアプリケーションであったとしても、Photoshop形式のデータを自力でオープンできたり、自力で保存できる必要があります。
なぜかAppleScriptでゲームを作りました。
AppleScriptでリアルタイムキースキャンを行いCotEditor書類上にカーソル描画
Pixelmator Pro AppleScriptコンテストで優勝
これも、各種アプリケーションで利用するために作成したものです。
実際にいま作っているコンテスト用の作品に向けて書いたものです。
macOS 10.15はBetaの頃から出来が悪くて、とても「これは常用できない」としてメインマシンにはインストールせず、専用のマシンに入れて様子を見ていました。10.15については「こんなもんリリースすんな」という印象。10.13については、担当者の首が飛ばない理由が分からない出来でした。
そんなmacOS 10.15で、ご無体な変更がSystem Eventsに見られました。
10.13、10.14、10.15、11.0とSystem Eventsのバージョン番号は同じ「1.3.6」ですが、AppleScript用語辞書の内容が大幅に変更されています。
これまでにもAppleのエンジニアの失敗やバグにいろいろ酷い目に遭わされてきましたが、「内容に大幅に変更があってもバージョン番号を変えない」という新たな失敗が記録されることになりました。これは、斬新な手口ですね!
今後も、バージョン番号を変更せずに機能の変更を行なってくることが予想されます。できれば、ちゃんとバージョン番号を変更することも覚えてほしいですよね。
(1)Disk-Folder-File Suiteから、指定のOSA言語のScriptを実行する「do script」コマンドが削除されました。同機能は標準命令の中にも重複して存在しており、とくに影響はありません。
(1)desktop picture settingsに「dynamic style」という属性値が新設されました。指定できる値は「auto」「dynamic」「light」「dark」「unknown」。
(2)Audio File Suiteが削除された
どこまで行っても実装が微妙だったAudio File Suiteが削除されました。32bitコードだったのでしょうか。
(3)Movie File Suiteが削除された
同じく、微妙な出来だったMovie File Suitesが削除されました。理由はAudio File Suiteと同じなのでしょう。
(3)QuickTime File Suiteが削除された
同上。
(4)key up/key downコマンドが強化された
文字コードでしか指定できなかったkey up/key downコマンドが強化され、integerでキーコードを指定する従来どおりの指定方法のほか、textでキーボードの文字を指定できるようになりました。
(1)dock preferences objectに属性値が新設された
autohide menu bar:システムメニューバーの自動非表示機能のオン/オフ
double click behavior:ウィンドウのタイトルバーをダブルクリックしたときの挙動の切り替え
minimize into application:ウィンドウのタイトルバーをダブルクリックしたときにDock上のアプリケーションアイコンに向けて最小化?
show indicators:Dock上のアプリケーションアイコンに起動中のインジケータ表示を行う/行わない設定
show recents:最近使ったアプリケーションのグループを表示する設定
こうした調査は、AppleScript用語辞書ファイル(sdef)そのものや、それをHTMLに書き出したデータを比較することで検討しているわけですが、一回それを電子書籍のオマケにすることを検討したものの、他のScripterに「そういうものに興味はないか?」と聞いてみたところ、まったく関心を持っていないようでした。
ある意味、最重要書類というか「秘伝のタレ」に近い情報ではあったものの、コピペだけでコードを書いているレベルのScripterは、そういう「一次情報」(死活問題になる)に関心がないんだなーということが分かっただけでした。
■表 System Eventsの用語辞書の変遷(「最新事情がわかるAppleScript 10大最新技術」より引用してアップデート)
| macOS Version 10.x | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 11.0 |
| Standard Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| System Events Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| Accounts Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| Appearance Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | |||
| CD and DVD Preferences Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | |||
| Desktop Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | |||
| Dock Preferences Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | |||
| Login Items Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| Network Preferences Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ||||
| Screen Saver Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ||||
| Audio File Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ||
| Security Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | |||
| Disk-Folder-File Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| Folder Actions Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| Movie File Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ||
| Power Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| Processes Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| Property List Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| QuickTime File Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ||
| XML Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| Type Definitions | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ |
| Scripting Definition Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ||||||||
| Text Suite | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ||||||||
| Expose Preferences Suite | ■ | ■ | ■ | ■ |
久しぶりに震えました。Amazon AWS(EC2)がMacのインスタンスをサポートしました(Amazon EC2 Mac instances)。
New – Use Amazon EC2 Mac Instances to Build & Test macOS, iOS, ipadOS, tvOS, and watchOS Apps
Amazon EC2 Mac InstancesDevelop, build, test, and sign Apple apps on Amazon EC2
このMacインスタンスは、通常のAWSとは異なりMac1台をまるまる占有するタイプのようです。ハードウェアはMac mini(Core i7 3.2GHz)でメモリ32GB。10Gbit Ethernet搭載モデルとのこと。
Amazon EC2 Mac InstancesがサポートするOSはmacOS 10.14と10.15、2021年にはM1 Mac miniの投入を検討しているのだとか。こちらはmacOS 11.x以降での運用になることでしょう。
利用者はTerminal上でSSHで接続するか、VNC Remote Desktop経由で接続することになるとのこと。XcodeでiOSなどのアプリケーションをビルドするための需要を見込んでいるようです。
「仮想マシンの1インスタンス時間貸し」というAWSのサービスイメージと大きく異なり、1台まるごと貸し出しサービスです。仮想化技術を用いて大量のインスタンスを同時実行する方向では、ライセンスの問題を解決できないことは明らかでしたが、逆に「こういう方法があったのか」というコロンブスの卵的な解決策ではあります。クラウドというよりは、時間貸しのコロケーションサービスともいえます。
最近のmacOSでは滅多にありませんが(のぞく、macOS 10.13と10.15)、OSごとまるごとクラッシュして再起動が必要になるとか、リセットが必要になるケースもないことはないでしょう。また、セキュリティ設定をユーザーが好き勝手にいじくれるかどうかも見所です(SIP解除して運用できるのかどうか、これは切実な問題です)。
Amazon EC2 Mac Instancesのサービス提供リージョンは、US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), and Asia Pacific (Singapore) とのことで、Tokyoは現段階ではありません。今後増えていくような書き方はされていますが、正直わかりません。
EC2というと、あらかじめディスクイメージを用意しておいて、インスタンスの起動をディスクイメージで実行、サービス運用と終了の必要な期間がきわめて短くて済むことを売りにしている印象があるものの、このAmazon EC2 Mac Instancesで運用するとどーなるのか。
利用料金をまだ確認できていないので、コロケーションサービス(初期費用が必要)に比べてどうなのかとか、実機まるごと買ったほうが安いんじゃないかとか、疑問はいろいろあるわけですが、REST APIのインタフェースだけ作ってしまえばクラウド上でAppleScriptによってサービスを作って提供できるわけで、ずいぶん悩ましい存在です。
AppleScript on the cloud的なサービスもできるし、仲間内で冗談でしか出てこなかった「Adobe Creative Grid」(時間貸しで大量のマシンによりAdobeアプリケーションのデータを高速かつ並列に処理する)みたいなサービスも作れてしまう(Adobe Createve Cloud税が高いのでむやみに実験はできないんですけれども)わけで、ずいぶん楽しい感じになってきました。
OS X 10.10で通常のAppleScriptからCocoaの機能が利用できるようになり、Cloud系のサービスを利用できるようになりました。機械学習系の機能も利用できています。
AppleScriptで大規模データとか超大量のデータ処理を行うさいの物理的な制約がなくなってきたわけで、数万人のユーザーへの一括メール送信とかいう無茶な処理も、外部のCloud(SendGrridなど)の機能を活用してできるようになりました(そこまで大量の送信は実際にはやっていないので、理論上最大値ということで)。
一方で、AppleScriptを使ってWebサービスそのものを作って運用するという方向には、ほとんど手が伸びていなかった状態です。外部でそのような需要が発生するか否かについては不明ですが、自分で作って自分で運営するサービスでは、柔軟に規模の拡大・縮小が行えることは重要です。
そうしたときに、外部とのI/FをRemote AppleEventで行うわけにはいかないでしょうし(AWSのデータセンターでポート3031へのリクエストが通るんだろか?)、一般的なREST APIでリクエストを受け付けてJSONで返すみたいな構造にする必要はあるでしょう。
あとは、並列処理技術。これまで、「Mac App Store向けのアプリケーションでは仕様上実装しづらい」ことから、それほど活躍の場がなかったAppleScriptによる並列処理技術ですが、外部からのリクエストを処理する場合には、とても必要になってくることでしょう。
やはり、実際にさわってみないとなんとも言えないですね。
Amazon Web Services ブログ 新登場 – Amazon EC2 Mac インスタンスを使用した macOS、iOS、ipadOS、tvOS、watchOS アプリの構築とテスト
もともとの記事の日本語版。サービス開始に向けた担当者の思いはわかるものの、費用とかmacOS環境でどのあたりがカスタマイズされているのか(ソフトウェア的に)とか、実際に使うとどの程度の差があるのかといった情報はない。Macユーザーに対して「Amazonは敵じゃないんだよー」と訴えている以上の情報はない
Amazon EC2 Mac Instance を早速使ってみました
EC2の使い方がわかる記事。これを読まないと接続までの手順がわかりづらいものの、これを読んだからといってMac Instanceの実情がわかるというほどの情報量はない
macOSがクラウドで利用可能に――、AWSがMac Miniベースの「Amazon EC2 Mac Instances」を一般提供開始
文章書きのプロがいい感じにまとめている。「よくわからない人」向けにまとめた記事
AWSにMacインスタンスが追加。6コアCore i7搭載Mac miniをクラウドで利用可能に
ニュースリリースまとめただけ。書くのに30分もかけていない速報記事(たぶん)
AWSがMac miniのクラウド化を発表、Apple Silicon Mac miniの導入は2021年初頭か
サービス料金面では一番詳細な記事。Amazon EC2 Mac Instancesは秒単位で課金されるが、最低利用ラインが「24時間」になっているため、24時間を過ぎたら秒単位で課金計算されるということが明記されている
Uni Detectorのアイコンを変更します。ウニ(Sea Urchin)のアイコンには個人的に思い入れも深く、この現行のアイコンも随分前に奥方様と一緒に行った寿司屋でデジカメで撮影したものです(8年ぐらい昔?)。
つまり、「どうせPowerPCからIntelに移行したんだし、10年ぐらいたったら再びCPUの移行はあるだろう」と読んで、ものすごく時間をかけてアイコン候補の写真を撮影するような、凝ったことをしていたわけです。
ただ、いろいろダウンロード状況を分析するに、U.S.のユーザーが全然食いつかない(大統領選が終わっても変化なし)。不思議なぐらい食いつかない。無料のアプリケーションという「撒き餌」にまったく食いつかない。食い気が感じられない。
なぜだろう? と、首をひねっていたのですが、われわれには美味しい食材にしか見えない海鮮丼の写真が、海外のユーザーにはグロい写真で嫌がらせをしているようにしか見えないのでは? という仮説に至りました。
その仮説をもとにSNS上で意見を募ってみたところ、
「Dock上に置きたくないデザイン」
「ハイコンテクストすぎてApp Store向けアプリには不向き」
「そういうのは趣味でやれ」
という散々な結果に。
タイミングをねらって、必要な道具をピンポイントでリリース。ユーザーへの知名度の向上と、各種ソフトウェアの宣伝を意図した戦略的なソフトウェアが、アイコンというきわめて重要度の低い構成要素のために本来の役割を果たしていないものと判断。ここに、苦渋の決断をもってアイコンを無難なものに変更することといたしました。
ついにmacOS 11.0, Big Surが正式リリースされました。これほどリリースが待ち遠しく、リリースを恐れていたOSバージョンもありません。機能的にはいいのに、見た目がアレな、ある意味「次世代のmacOSのPublic Beta」みたいな位置付けです。バージョン0.xから始まるのも初めてですし。1.0未満だと受け取っておきましょう。
→ その後、マイナーアップデート版が「11.1」であることが判明し、今後は「12.x」「13.x」とiOSライクなナンバリングが施されることがうかがわれます。
ハードウェア面では「M1搭載のファンレスのMacBook AirがCore i9のCPUを蹂躙する図」が展開されているなど絶好調ですが、ソフトウェア面ではいろいろ(見た目に)問題があります。
macOS 11.0.1について、AppleScript的には大きな違いはありません。大きな違いというのは、macOS 10.15からの大きな違いということです。10.15のあまりの不具合の多さに、β段階で「毒の沼」認定してメイン環境で利用することを放棄したため、個人的には11.0にすぐ移行したいところです(検証用のMac mini 2014しか対応ハードウェアがない問題)。
macOS 11.0搭載のAppleScriptはあいかわらずバージョン2.7。スクリプトエディタもビルドが少し変わったぐらいでバージョンは同じです。
スクリプトエディタのヘルプが、macOS 10.13、10.14、10.15と毎回更新されていましたが、今回はその余裕がなかったのか10.15, Catalinaのままです(あとでオンライン更新されるのかも???)。
毎回、OSのアップデートがあるたびに書き換えの必要があるScriptが出てきます。すべてのScriptが必要というわけではないはずですが、理由は大きく分けると以下のとおりです。
(1)Script専用補助アプリケーションやOS標準装備のアプリケーションの機能に変化が生じたり、名前が変わったり、統廃合されたりした
(2)AppleScriptの言語処理系、標準装備のScripting Additionsや標準命令に新たなバグが発生した
(3)OS自体の仕様変更、未知のバグが発生した
(4)GUI ScriptingでメニューなどのGUI部品を指定している箇所が、GUI修正などの理由によりそのままでは動かなくなった
(5)Cocoaの仕様変更により動かなくなったり修正が必要になった
スクリプトエディタのsdefの差分をチェックしてみたところ、macOS 10.14/10.15から変化はありません。つまり、今回は(1)(2)由来の発生の可能性は低いことが期待されます。(4)は当然そうなるものなので(些細な変更で発生するものなので)、必要最低限の箇所に使うべきものです。(5)は、Cocoa自体の仕様変更は割とひんぱんに発生しているので、なんともいえませんが、Cocoa自体に仕様変更やバグがなくてもScripting Bridge定義ファイルのバグや理不尽な変更(主にmacOS 10.13で発生した件。一切説明なし)によって影響を受ける可能性はあります。
カレンダー.appのバンドル内に同梱された大量のAppleScriptもβ時からそのままです。
(何か発見があったら追記)
LateNight Software Blogに掲載された「BIG SUR: LOST PROPERTIES」をGoogle翻訳で読んでみました(ちょっと時間がないので)。
macOS 11.0, Big SurではスクリプトエディタでAppleScriptアプレット書き出しを行うと、
Arm 64/Intel 64のUniversal Binaryで書き出されます。
そして、アプレット書き出し時にCode Signが自動的に行われ(Run Localy)、Apple Developer IDを持っていなくても実行バイナリにCode Signされることになります(Notalizationはまた別)Code Signされるということは、アプレットの情報書き換えが保持されなくなるということであり、property文で設定値を維持しようとしても、実行ごとに内容がフラッシュされる(保持されない)ことになります。
このことはmacOS 10.10ごろから「そういう風になるんだろう」とわかっていたので、property文で設定値を保持するような書き方は一切してきませんでした。設定保存の必要があればUser Defaultsへ書き込み。
サードパーティのOSAX(Scripting Additions)が廃止されることはOS X 10.6の頃からわかっていましたし、OS X 10.10の頃からpropertyで値を保持してはいけないことはわかっていました。
最新の「兆し」は、PowerPC→Intel→Apple Siliconと3世代にわたってメンテナンスされてきた「AppleScript Studioランタイム」(Automatorアクションでこれを使っているものがある)が、いよいよdeprecated扱いになったことです。
もともと、OS X 10.6のときにXcode上から開発用のテンプレートが削除されたためにAutomator Action作成時に積極的にAppleScript Studioの機能を使おうとも思わないのですが、これまで維持され続けてきたというわけです。あれだけの規模のものを、OSのGUI部品が変更され続けていく中メンテナンスしてARM対応まで行なって破棄するとは……自分がその仕事に携わっているならやり切れないものがありますが、既定路線ではあります。
今後、macOS上で実行できるAutomator ActionはAppleScriptObjCベースのものに一本化される、ということです。
この話が出てきたのが何回目だか覚えていませんが、ファイル共有のプロトコル「afp」が使えないようになりました。「smb」のみです。
LAN上の他のマシンやファイルサーバー、NASのボリウムをマウントする処理は割とありふれたものですが、そのためのサーバーの指定方式がsmbに一本化されたという「変化」があったということです。
ファイルサーバーのマウント処理を記述してあるScriptについては、macOS 11.x以降では書き換えの必要があります。
なんなんでしょうね? これは、、、ミスなのか、意図があるのか。
これだけ機能が変わっていたらバージョン番号を変更してほしいところです。
→ 同じバージョン番号のまま大幅に機能が変更されたSystem Events
OSが起動して他のGUIアプリケーションを操作可能な状態になって久しい状態だというのに、System Eventsに対する操作を行おうとしたら、プロセスが起動していないといったエラーが表示されました(macOS 11.3 beta3)。
launchコマンドでSystem Eventsの起動を明示的に行うことで、問題なく操作できましたが、System Eventsに明示的にlaunch操作を行わなくてはならなくなったようです。リリースノートに記載すべきレベルの変更が加わっているように感じます。
こんな基礎的な箇所でバグを作られるとウンザリします。また、使っている箇所が多過ぎてウンザリします。このバグのせいで、Mac App Storeで配布しているUni DetectorのCPUアーキテクチャ別のグラフ表示機能を実行すると(macOS 11.x台、11.5より前では)クラッシュしていました。
–> macOS 11.5で修正されました。macOS 11.0〜11.4の間、この機能がまともに動いていなかったわけです。AppleScriptのプログラムは、macOS 11に対しては最新のバージョン以外はサポートしないということになるでしょう。
| AppleScript名:stringWithFormatのじっけん.scptd |
| — – Created by: Takaaki Naganoya – Created on: 2021/06/19 — – Copyright © 2021 Piyomaru Software, All Rights Reserved – 本Scriptを実行すると、Intel Mac/Apple Silicon Macの両方でクラッシュします use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set dTemp to "chart.data = [{ \"label\": \"Apple Silicon\", \"value\": %@, \"color\": chart.colors.next() }, { \"label\": \"Intel 64 bit\", \"value\": %@, \"color\": chart.colors.next() }, { \"label\": \"Intel 32 bit\", \"value\": %@, \"color\": chart.colors.next() }, { \"label\": \"PowerPC 64 bit\", \"value\": %@, \"color\": chart.colors.next() }, { \"label\": \"PowerPC 32 bit\", \"value\": %@, \"color\": chart.colors.next() }];" set ppc32Count to 1 set ppc64Count to 2 set intel32Count to 3 set intel64Count to 4 set arm64Count to 5 set aDataStr to current application’s NSString’s stringWithFormat_(dTemp, arm64Count, intel64Count, intel32Count, ppc64Count, ppc32Count) as string |
予告されていたとおり、Apple Silicon(M1)搭載のMacが紹介され、macOS 11.0.1 Big Surの正式リリースが11/13(日本時間)と発表されました。11.0.1 Release Candidate 2が開発者向けにリリースされています。
Apple SiliconのMac版である「M1」を搭載したMacBook Air(ファンレス)、MacBook Pro 13インチ(USB x2の下位モデル)、Mac miniです。見た目や名前は変更されていません。
これまでのCPU移行と異なり、MacBook Air/MacBook Pro 13インチ/Mac miniともにIntel版を併売。
メモリが8GB/16GBとなっており、これはRAMをCPUに内蔵して高速処理させる(Unified Memory)ためにある程度「大容量メモリは搭載できないだろう」と予想されてきました。逆に、Intel Macよりも搭載メモリーが少なめでも効率的に動作することも予想していました(実際に動かさないとわからないですが)。
今回発表されたモデルの中にMac miniが入ってきたことは驚きでしたが、ほかは事前のリーク情報どおりです。
M1搭載機種のスピードについては実際に試してみないとなんとも言えません。Appleに自信はあると思われますが、今回の機種については初心者やよくわかっていない人が手を出すと「こんなはずじゃなかった」ということに。
初物M1 Macの注意点は、プリンタドライバや周辺機器(オーディオインタフェースなど)のデバイスドライバです。現状でIntel Mac用のドライバしか公開されていないため、少し古めのプリンタを利用している場合には工夫が必要になります(LAN上にプリンタをつないだ別のMacを用意し、フォルダアクションを用いて他のApple Silicon Macから書類をドラッグ&ドロップして印刷実行)。
macOS 11.0 Big Surについて、自分が確認している範囲ではおかしな動作が若干あります。iOSアプリケーションが動作するはじめての世代のmacOSなので、Mac OS Xでいえば「Public Beta」同然です(OSバージョンが0.x台ではじまるのはこれが初?)。
macOS 11.0 Big Surは、よくいえばmacOS 10.15 Catalinaの機能継続版。悪くいえばCatalinaで「なにこれ?」というおかしな仕様(PDFViewでPDF内のURLリンク処理が厳密すぎて使い勝手が落ちるなど)がそのままということです。
macOS 11.0から、AppleScriptは「iOSアプリケーションをコントロールする」という新たな課題を抱えることになります。現状ではGUI Scripting経由でしか操作できないはずなので、そのmacOS上の「異物」をどのように操作するか、そのノウハウの蓄積が必要です。
CotEditor v3.9.7(macOS 10.1510.13以降対応)でAppleScript用語辞書にコマンドが追加されていました。
document中のselectionに対して処理を行うもので、英語のダブルクォート/シングルクォートをワープロ的なクォート開始文字とクォート終了文字に置き換えます。
| AppleScript名:smarten quotes |
| tell application "CotEditor" tell front document smarten quotes selection end tell end tell |
| AppleScript名:straighten quotes |
| tell application "CotEditor" tell front document straighten quotes selection end tell end tell |
Universal Binaryチェックツール「Uni Detector」をMac App Storeで無料リリースしました。macOS 10.13以降用です。私の作るものなので、すべてAppleScriptで記述してあります。
前作「うにばーさる」はPowerPCからIntelへの切り替え時に、AppleScript Studioで作りました。
「Uni Detector」はAppleScriptObjCで作成。いろいろこなれてきているのですが、商品にはなりそうにもなかったので(そんなにひんぱんにバイナリアーキテクチャを調べたい人はいない)宣伝用にフリー配布です。
# Macの販売店の店頭でデモするのには向いているかも?
バイナリ対応度を調べるだけのソフトウェアでは、一度試したらおしまいです。日常的にこのソフトウェアを使うと便利なよう、自分で使い込んでさまざまな機能を実装しました。アプリケーションのメタデータを読み込んで、しぼり込み検索してカテゴリごとのバイナリアーキテクチャ分布を調べられるようにしました。
また、Universalバイナリ対応のほかに「AppleScript対応度」の調査もこのアプリケーションの1つの大きなテーマにすえました。AppleScript対応度もカテゴリごとに調査できます。「Microsoft」や「Adobe」をキーワードに絞り込んで、アーキテクチャやAppleScript対応度を調査することも可能です。
Scriptableなアプリケーションの一覧を表示したり、選択中のアプリケーションのAppleScript用語辞書を表示させたり、とくに本Blog上のサンプルScriptを表示させる機能がよそには真似できないところでしょう。
一覧で選択したアプリケーション名をキーとして本Blogの記事を検索・表示させる「サンプルScript表示機能」。これだけのためにポップアップするミニWebブラウザを実装しています。
「Universal Binary」は、NeXT時代のMAB(Multi Architecture Binary)、FATバイナリを引き継いだもので、NEXTSTEP(正確には後継のOPENSTEP)時代にはx86(Intel)、68K(NeXT)、SPARC(Sun)、PA-RISC(HP)などの複数アーキテクチャ向けバイナリをまとめてパッケージ内に格納できていました。
当時は複数アーキテクチャ、複数環境をサポートするための技術と受け取っていましたが、Mac OS X上での使われ方は自社プラットフォームのCPU切り替えを円滑に行うためのもので……MAB/FATバイナリとはモノが同じでありながら運用の仕方が全然違いますね。
技術的には、ツールバー上のSegmented Controlで作ったボタンがmacOS 11.0上でどう見えるか、きちんと見えるのか、Betaのたびにコロコロ見え方が変わるので、そのあたりを回避したらどうなるのかとか、そういう実証試験を行なっています。
また、macOS 10.15以降でアプリケーションフォルダ(/Applications)の内容が、/Applicationsと/System/Applications/に分かれ、フォルダの内容をScriptから取得できないあたりで悩まされました。アプリケーションのアイコンをInfo.plist経由で取得できないケースも見られ(とくに、Apple純正アプリケーション)、そのあたりの対処も悩まされたところです(フリー配布なのに手間がかかりまくっていて大変です)。
Terminal.appのコントロールを行なったら一発リジェクトでしたが、スクリプトエディタのコントロールはいいんだ、へーという発見はありました(macOS 10.14で「execute」コマンドが削除されたので無害?)。アプリケーションのAppleScript用語辞書を表示させているだけなので、コントロールというレベルではありませんけれども。