ファイル名にクリックしたいアプリケーション名+メニュー名を書いておくと、そのメニューをクリックする「Piyo Menu Clicker for Stream Deck」のベータ版の配布を開始しました。
→ 配布ページ(@BOOTH)
β版のため2021/5/31までの試用期限を設けています。
旧称Dynamic Menu Clickerの機能強化版で、クリック先をファイル名から取得。メニュー項目の指定にワイルドカードが使えるなど、トグル式のメニュー項目にも対応しています。
ファイル名にクリックしたいアプリケーション名+メニュー名を書いておくと、そのメニューをクリックする「Piyo Menu Clicker for Stream Deck」のベータ版の配布を開始しました。
→ 配布ページ(@BOOTH)
β版のため2021/5/31までの試用期限を設けています。
旧称Dynamic Menu Clickerの機能強化版で、クリック先をファイル名から取得。メニュー項目の指定にワイルドカードが使えるなど、トグル式のメニュー項目にも対応しています。
eSeminor: Cocoa Scripting Course Volume #3 NSDictionary

Cocoa Scripting本「Cocoa Scripting Course #3 NSDictionary」の販売を開始しました(通称:Cocoa本3)。今回は、ちょっと凝った背景イメージを敷いていただけなのに、初回PDF書き出し時に1Gバイトを超える容量になって焦りました。最終的には100MBをちょっと超えるぐらいで収まっています。
ページ数:251ページ(うち、Vol.3独立部分 101ページ 2021/4/23現在)
フォーマット:PDF+Zipアーカイブ(通常AppleScript 664ファイル、Xcode based AppleScript 442 Project)
# 添付サンプルだけで、137MB分もあります
特別特典:
Script Debuggerの15%割引購入コード入り
購入後3か月まで、本書の内容で理解できない箇所について3か所まで補足説明
理解度確認テストで合格した方に修了証明書を発行
→ Cocoa Scripting Course #3
→ Cocoa Scripting Course #3 (お試し版)
内容:
macOSのAPIであるCocoaをAppleScriptから利用し、macOSの持つ強力な機能をアプリケーションの補助なしに直接呼び出せる「Cocoa Scripting」は、日々の業務やデータ処理に、たいへん強力な武器になります。
この、Cocoa Scriptingについてはとくに日本語の書籍が存在しておらず、これまでは「Xcodeの使い方、GUIの作り方、各メソッドの使い方….」といった、体系がまったく異なるObjective-Cの入門書で断片的に情報を得ることしかできませんでした。
Vol.3では、NSDictionary/NSMutableDictionaryを解説。AppleScriptのrecord型変数に該当するオブジェクトですが、高度な各種APIに対してのパラメータとして使われることが多く、XMLやplist、JSONやYAML、HTMLなど幅広いデータとの相互変換などが行えます。
さらに、NSArrayよりもソートが高速。さまざまな抽出機能を持っているため、データベースを併用していたような機能が、Cocoa Scriptingの導入で他のデータベースの手助けなしに実現できます。
基礎的なサンプルから高度な使い方までていねいに解説。実際に各種ソート処理の処理時間を計測しグラフ化して比較しています。
本書は「AppleScriptの穴」掲載AppleScriptのカテゴリ別アーカイブ集ともなっており、本書にはNSDictionaryなどレコード処理を行うサンプルScriptをはじめ有用なAppleScriptのファイルを大量に添付しています。とくに、XcodeベースのAppleScript Projectを多数収録。他に類を見ない充実度を見せています。
続刊予定:
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 System hardware & software Information

eSeminor: Cocoa Scripting Course Volume #5 NSImage (image conversion and filtering)
eSeminor: Cocoa Scripting Course Volume #6 NSAttributedString (Attributed string and HTMLs)
eSeminor: Cocoa Scripting Course Volume #7 NSFileManager (File processing)
eSeminor: Cocoa Scripting Course Volume #8 NSURL (Cloud API Scripting)
eSeminor: Cocoa Scripting Course Volume #9 PDFKit (PDF Processing)
eSeminor: Cocoa Scripting Course Volume #10 Webkit (WebView Scripting)
Pagesの最前面の書類中のテキストアイテム(ボックス)中のテキストと、本文テキスト(body text)で文字サイズが最大のものを取得するAppleScriptです。Pagesで書いた書類からタイトルらしきものを抽出するために書いたものです。
まず、前提条件を書いておかなければなりません。
一般的なDTPアプリケーション(InDesignとか)やワープロであれば、書式スタイルが「タイトル」のテキストを求めるといった処理になりますが、Pagesにはその機能がありません。正確にいえば、PagesのAppleScript用語辞書にはその機能がありません。そこで、「各文書のタイトルには文章中で最大の文字サイズを設定しておく」というルールを自分に課して、文字サイズが最大のものを取得すればタイトル文字列が取得できるように決めておきました。
テキストアイテム中の最大サイズの文字を抽出し、そのあとで本文テキスト(body text)の最大サイズの文字を抽出、両者の間で最大サイズのものを求めて返します。
目下、実際に本を書き出すのに「指定フォルダ以下のPages、Markdown、Word Document、PDFをすべてPDF化してファイル名順でソートして結合」するAppleScriptを作って利用しているのですが、これにTOCつきPDFを書き出す機能を結合できるといいなーと思って書いています。
Keynote書類からTOCつきPDFを書き出すAppleScriptは実戦レベルのものを作って運用しており、これを用いて電子書籍を作っています(逆をいえば、このAppleScriptの開発に成功したのでバカスカ電子書籍を作れているわけで)。
TOCつきPDFをPagesなどの書類群から書き出せるようになれば、PagesやMarkdownで書いた書籍も自動でTOCつきPDFを生成できるわけで、PagesやMarkdown系の書類で作った書籍も手軽に生成できるようになるはずです。
| AppleScript名:pagesTitleLib.scptd |
| — – Created by: Takaaki Naganoya – Created on: 2020/06/12 – Modified on: 2021/04/10 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions property NSString : a reference to current application’s NSString property NSCharacterSet : a reference to current application’s NSCharacterSet property NSMutableArray : a reference to current application’s NSMutableArray set aRes to pagesTitleGetter() of me –> "商標、著作権について" on pagesTitleGetter() set tiList to getLargestTextItem() of me –Text Item set bList to getLargestBodyText() of me –Body Text if tiList = {} and bList = {} then return "" if tiList = {} and bList ≠ {} then set allList to bList if tiList ≠ {} and bList = {} then set allList to tiList set allList to tiList & bList –> {{10.0, "Macrovector – jp.freepik.com によって作成された business ベクトル"}, {16.0, "商標、著作権について"}} set allRes to returnMaxItem(allList, 1, 2) of me set bRes to repChar(allRes, string id 10, "") of me set bRes to repChar(bRes, string id 13, "") of me return bRes end pagesTitleGetter –2D Listのうち、指定アイテム目の最大値をもとめ、その指定アイテムを返す on returnMaxItem(aList, seekItemNum, retItemNum) script spd property aList : {} end script set (aList of spd) to aList set tmpMax to 0 set tmpItem to 0 set aCount to 1 repeat with i in (aList of spd) set tmpV to item seekItemNum of i if tmpV > tmpMax then copy tmpV to tmpMax set tmpItem to aCount end if set aCount to aCount + 1 end repeat return item retItemNum of item tmpItem of (aList of spd) end returnMaxItem –Pagesの最大文字サイズのText Item中の最大テキストを返す on getLargestTextItem() set rList to {} tell application "Pages" if not running then return {} if every document = {} then return {} tell front document set tmpList to every text item if length of tmpList = 0 then return –テキストアイテムがない場合には処理終了 set szList to size of object text of every text item if szList is not equal to {} then set aMaxPoint to calcMax(szList) of me –最大の文字サイズを取得 –文字サイズが最大のテキストアイテムを抽出 –set resList to object text of every text item whose size of object text is aMaxPoint set resList to every text item whose size of object text is aMaxPoint repeat with ii in resList –指定のtet item内の文字のサイズをすべて取得 set cList to size of every character of object text of ii –文字サイズのうち最大のものを取得 set cMax to calcMax(cList) of me –最大サイズの文字のみ抽出 set cRes to (every character of object text of ii whose size = cMax) set cText to cRes as string –取得したテキストの前後の改行などを削除してクリーンアップ set c2Text to cleanUpTextFromHEadAndTail(cText) of me set c2Text to repChar(c2Text, string id 10, "") of me set c2Text to repChar(c2Text, string id 13, "") of me –何か結果が得られていたら、リストに加える if c2Text is not equal to "" then set the end of rList to {cMax, c2Text} end if end repeat end if end tell end tell return rList –> {{10.0, "Macrovector – jp.freepik.com によって作成された business ベクトル"}} end getLargestTextItem on getLargestBodyText() set esList to {} tell application "Pages" if not running then return {} if every document = {} then return {} tell front document set sCount to count every section repeat with i from 1 to sCount tell section sCount set sList to size of every character of body text if sList is not equal to {} then set cMax to calcMax(sList) of me –最大サイズの文字のみ抽出 set cRes to (every character of body text of it whose size = cMax) set cText to cRes as string –取得したテキストの前後の改行などを削除してクリーンアップ set c2Text to cleanUpTextFromHEadAndTail(cText) of me set c2Text to repChar(c2Text, string id 10, "") of me set c2Text to repChar(c2Text, string id 13, "") of me set tmpList to {cMax, c2Text} set the end of esList to tmpList end if end tell end repeat end tell end tell return esList end getLargestBodyText on repChar(origText as string, targStr as string, repStr as string) set {txdl, AppleScript’s text item delimiters} to {AppleScript’s text item delimiters, targStr} set temp to text items of origText set AppleScript’s text item delimiters to repStr set res to temp as text set AppleScript’s text item delimiters to txdl return res end repChar on calcMax(aList as list) set nArray to (NSMutableArray’s arrayWithArray:aList) set maxRes to (nArray’s valueForKeyPath:"@max.self")’s doubleValue() return maxRes end calcMax on cleanUpTextFromHEadAndTail(aStr) set aString to NSString’s stringWithString:aStr set bStr to (aString’s stringByTrimmingCharactersInSet:(NSCharacterSet’s whitespaceAndNewlineCharacterSet())) return bStr as string end cleanUpTextFromHEadAndTail |
以前に作った、Pagesのページ中のテキストアイテムのうち最大文字サイズのものを抽出するAppleScriptの強化版です。その最大文字サイズの文字を含むテキストアイテムの中から、さらに最大文字サイズのテキストを取り出します。
タイトル部分(と思われるテキストアイテム)から、さらに最大文字サイズのものだけを抽出。
用途は、Blog新アーカイブ本の作成時に書類からタイトルを取り出す処理を行えないか実験してみたものです。このページだけ、この例外のデータだったのですが、あとから考えれば文字サイズの小さなサブタイトル的なものは別のテキストアイテム(ボックス)に分ければよかっただろうかと。
| AppleScript名:最前面の書類中のテキストアイテムの文字サイズが最大のものの中に入っている最大のテキストを求める.scptd |
| — – Created by: Takaaki Naganoya – Created on: 2020/06/12 – Modified on: 2021/04/10 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions property NSString : a reference to current application’s NSString property NSCharacterSet : a reference to current application’s NSCharacterSet property NSMutableArray : a reference to current application’s NSMutableArray set rList to {} tell application "Pages" tell front document set tmpList to every text item if length of tmpList = 0 then return –テキストアイテムがない場合には処理終了 set szList to size of object text of every text item set aMaxPoint to calcMax(szList) of me –最大の文字サイズを取得 –文字サイズが最大のテキストアイテムを抽出 –set resList to object text of every text item whose size of object text is aMaxPoint set resList to every text item whose size of object text is aMaxPoint repeat with ii in resList –指定のtet item内の文字のサイズをすべて取得 set cList to size of every character of object text of ii –文字サイズのうち最大のものを取得 set cMax to calcMax(cList) of me –最大サイズの文字のみ抽出 set cRes to (every character of object text of ii whose size = cMax) set cText to cRes as string –取得したテキストの前後の改行などを削除してクリーンアップ set c2Text to cleanUpTextFromHEadAndTail(cText) of me –何か結果が得られていたら、リストに加える if c2Text is not equal to "" then set the end of rList to c2Text end if end repeat end tell end tell return rList –> {"Shane StanleyのScript Toolの変遷"} on calcMax(aList as list) set nArray to (NSMutableArray’s arrayWithArray:aList) set maxRes to (nArray’s valueForKeyPath:"@max.self")’s doubleValue() return maxRes end calcMax on cleanUpTextFromHEadAndTail(aStr) set aString to NSString’s stringWithString:aStr set bStr to (aString’s stringByTrimmingCharactersInSet:(NSCharacterSet’s whitespaceAndNewlineCharacterSet())) return bStr as string end cleanUpTextFromHEadAndTail |
もはや「本」といえば「勝手に書いて勝手にオンラインストアで売るもの」という存在で、他人の本を最近そんなに読んだ覚えがありません。そんな自分の本棚にも何冊かAppleScript系の書籍が転がっています。
一番存在感があるはずの「AppleScriptリファレンス」は、どこかに転がっていて見つかりません。自分たちで書いた、しかも800ページぐらいある本ですが、なくても大丈夫なように支援Script(コンテクストメニューから入力できる)を整備しまくったので、あの手のリファレンス本が手元にある必要がなくなってしまいました。
全般的に、AppleScript系の日本語の書籍で「こりゃすごい!」というものにお目にかかったことがなくて、面白くないしわくわくしないし、知識的にもたいして参考になるものがないしで、不満ばかり抱えていました。ここに出ていない本は「論外」のさらに外のものばかりです。
1990年代当時流行っていた「Tao(道)」をタイトルに冠した本の日本語訳。書店に並んで割とすぐ購入した記憶があります。同梱フロッピーに入っていた「スクリプト対応エディタ」をAppleScriptからコントロールして、画面の隅を直線的に移動させるスクリプトが印象的。当時からこの直線的な動きが気に入らなくて、のちに三角関数で軌道計算して楕円移動させるScriptを書く原動力になりました。
最初に本書付録Scriptを動かして「勝手にアプリケーションが操作されて怖い!」と感じた記憶があります。勝手にコンピュータのアプリケーションを動かされると、最初はちょっと怖いですよねー。
AppleScriptに対しての第一印象は「コ難しそうな見た目の割に、大したことができないもの」というものでした。
本書も、ちょっと読んですぐに本棚に放り込んでおいた記憶があります。いま読むと、筆者がいろいろ頑張って書いてはいるものの、リストとか配列とか、そういう用語が使われていないので、いまひとつピンと来ない内容に感じます。書いている方もそういう感じだったんでしょう。
あと、絶望的にScriptが書きこなれていないとか、わかりやすく書かれていないとか。センスの欠如を感じるものであります(世界でほぼ最初に出た本なので、それは無理)。この、クラシカルな書き方をひきずっているScripterの集団をみかけたことがあって、Scriptを読んだだけでめまいがしました。どことは言いませんが……。
自分が本格的にAppleScriptを使うようになったのは、部署を月刊誌の編集部からWeb系の運営チームに移ってからです。メールを登録者に一斉送信しなくちゃいけないとか、データベースに入力した製品カタログをHTMLに書き出してCD-ROMに焼いて配布しないといけないとか、ちょっと手の込んだWebコンテンツを自動で作りたいとか、アンケートのCGIをフォームから自動で作りたいとか、そういうニーズを満たすために1週間ぐらいで覚えました。Script Debuggerを購入してアホみたいにステップ実行で動作を確認していました。
# Script Debuggerこそ初心者に使ってもらうべきツール。あれがあるだけでAppleScriptの理解が3億倍ぐらい深まる
後にも先にもこれ1冊、Apple ComputerによるAppleScript公式解説書。ただ、これをほとんど読んだ記憶がありません。1990年代、日本国内のScripter同士が話をすることがほとんどなくて、自分は海外のMailing Listで情報をやりとりするだけでした。逆に日本国内のScripter同士で会話が通じなくて、そのためにこの本で用語を調べた記憶があります。aeteリソースを日本語でどう発音するのかで議論になったりしました(「えーいーてぃーいー」派と「えいと」派がいました。著しくどうでもいい話ですが、日本人同士でコトバが通じなくて困っていました)。
サンプルも大量に書かれていて、とてもいい本なのですが、1ページ以上続けて読むことに抵抗をおぼえます。辞書とか教科書みたいな本で、味付けがほとんどありません。
こういう本は1冊あるべきだと思うものの、つまんねー本の代表みたいな本でした。フォントの使い方とかで「見せる」努力をほとんどしておらず、「正しさ」で出来上がっている本とでもいうのでしょうか。でも、必要な本だと思います。
たまに本棚から取り出して眺めてみると、けっこう知らないことが書かれていて焦ります。知らなくて済むということは、ほぼ「実用的ではないこと」なのですが、案外それが他人に説明するときに必要な言葉や概念だったりして焦ります。
古今東西、これしか存在しないだろうという奇書中の奇書。「日本語AppleScript」について書かれた本で、サンプルもすべて日本語AppleScriptで書かれています。
当時からの海外のアプリケーションしか使っていなかったので(EudoraもFetchも日本語版なんてずいぶん後に出てきました)、海外のScripterと話が通じない「日本語AppleScript」(Japanese Dialect)なんて悪い冗談だと思っていましたし、自分自身、実際に日本語AppleScriptのプログラムリストを読んで、理解できる感じがしませんでした(「ぴゅう太」の日本語Basicみたいでした)。
日本のコミュニティの中でケンカしながら質問するよりも、海外のMLで情報収集していたほうがはるかに効率的だったので、日本のコミュニティの中にいる意義がほとんどなく、この日本語AppleScriptも海外のScripterと話が通じなくなるのなら覚える必要もないし、すぐに廃れてなくなるだろうと思っていました。
日本語は同義語や類義語が多いので、ちょっとした言葉遣いを間違えるとエラーになるという仕様については実用性を感じませんでした。本書もきれいなまま本棚で干物になっていました。たぶん、通しで読んだことは一度もありません。
こうした傾向は後日AutomatorのActionを検索するキーワードでも痛感しました。
「こっちのActionでは写真といい、別のActionではイメージといい、はたまた別のActionでは画像と言う」
という支離滅裂さで再現されることになります。Automator Ver.1.0が出た瞬間に「検索キーワードに同義語や類義語を通すようにしないと使い物にならんよ」と意見しておきましたが……。
AppleScript Studioの本です。524ページもあって、とても内容が充実していました。とても堅実かつ誠実に作られているのですが、残念ながらこれも通しで読んだことはありません。読後感がよろしくなくて、読むと眠くなります。「プログラムリストを白黒で掲載されると眠くなる」と当時は思っていました。
悪い本ではないのですが、用例がとてもつまらないというか、初心者向けにはそういう単純な用例のほうがためになるはずなんですが、読むと絶望的に眠くなる本でした。レイアウトデザインに問題があるのではないかと思います。デザイナーがページデザインを頑張りすぎている、とか。
あまり奇抜なデザインにせず、デザイン的には棒組みに近い形態のほうがいいように思います。雑誌のセンスでそのまま書籍を作るとこんな感じになるのだろーか、という見本でもあります。
あとは、説明が強引すぎて納得できない箇所が多すぎるとか、強引に説明している割に書籍で説明している最終到達点が低いので興醒めだとか、そういうポイントも多々あります。
でも、Xcodeの使い方はだいたいこの本で覚えました。自由自在にプログラムを組めるようにはなりませんでしたが、Xcode(Project Builder+Interface Builder)を使えるようにはなりました。
AppleScript系の本で、はじめて眠くならなかった画期的な本です。
わかりやすくて、サンプルが実用的で、うだうだ説明しないという、商品設計の勝利みたいな本でもあります。
「AppleScript Programming for Mac OS X」をベースにしながらも、内容をけずって文字の情報量を減らしているのですが、それが大変にわかりやすく、この本の存在は画期的でした。
文字通り穴が開くまで読み返し、マーカーで線を引き、大量の付箋を貼って読み返しました。これまでに日本国内で発行されたAppleScript関連書籍で自分的にいちばん面白かった本です。
Blogのアーカイブ本は、以前の消失したBlogをサルベージしたものを6冊ほど出しています。
現行のBlogについては、WordPressおよび構成部品のアップデートをまめに行うことで、どこぞの極悪非道なWebホスティング会社がいきなりDBサーバーをシャットダウンするような暴挙に遭遇しないように……したいですね。
Webホスティング会社は単なる上位ホスティング会社のリセーラーでありながら、肝心のサポート能力がほぼ皆無で日本語で正しく意思疎通を行うことが困難です。信頼感はまったくありません。以前は知り合いにすすめていたのですが、あの暴挙を経てまったくおすすめできない状況です。
インターネットプロバイダとWebホスティング業者は、事前の話どおりなのか実際に試してみないとさっぱりわからないので(しかも、利用している間に状況が変わったりする)、乗り換えコストがひじょーに大きいサービスであり、実際に利用しているユーザーの口コミしか信用できません。
一方で、過去記事をアーカイブ本の形でまとめておけば、Blogが吹き飛んでも記事の内容を参照できるし、Blogの形でWebブラウザ上で読むよりも読みやすいという声があります。
Blogが吹き飛んだといった緊急事態に対処する性質のものではないので、現行のBlogのアーカイブ本については緊急度はありません(たぶん)。
Piyomaru Softwareが刊行可能な本をまとめると、このように(↑)なり、「できることしかできない」ので、可能なものを順次出しているところですが、新Blogアーカイブを検討すると、
のような内容になりそうです。
Blogアーカイブ本については「発行する手間」と「世間一般的に期待される値付け」×「予想販売数」を比較すると、どうしても手間のほうが大きいところ。つまり、手間がかかる割に実入りが少ない本の典型例なので、そこが難しいところです。
これです。この、東京都西多摩地方で発生したとされる「ヤバい」という言葉。「危険」という意味から転じて「すごくいい」などの意味でも用いられている、現代日本語を代表する「ちょっと何言ってるのかよくわかんない」言葉です。
# 英語で言うと「Bad」?
バブル期に氾濫していた「かわいい」もそうですね。ちょっと前だと「ワンチャン」という、運用がとても難しい言葉があり、頭を悩ませました。
この「ヤバイ」という言葉が多義的であり情緒的であり曖昧であることを利用。「わけがわからんが、なんかスゲエ」というニュアンスというよりも「危険」「ひどい」と思わせて意識誘導しておきながら、その後の記事の積み重ねにより「すげえ」という感想にコペルニクス的転回をさせるような、そうした爽快な読後感をもたらすような本にしたいと考えております。
まだ企画段階であり、あーでもないこーでもない、と企画をこねくり回しているところですが、それほど分厚い本にする予定もないので、60ページ程度の「うっすい本」になることでしょう。
20冊を記念するようなもっと崇高で壮大な本にしようという案もあったのですが、すでに崇高(Book 2とか)や壮大(Book 1とかCocoa Scripting Courseとか)なものは作ってしまっていたので、「下世話」(に一見見える)な方向に振ってみたという….。
# などと企画を練っている間に、後発のBlog新アーカイブ本に追い抜かされたりして、、、
## さらに後続のCocoa Scripting本に抜かされてしまいました。意外と手間取っています、、、
いまからはじめるプログラミング②を書いていていろいろ新情報を見つけてしまいました。
すでにご存知の方もいるかもしれないので、「この俺がぁぁぁぁ、世界でぇぇぇぇ、一番に見つけたァァァァァァ!!!」と主張するわけではありません。「そういえばそうだよね」ぐらいの印象のものです。
誰もがファイル情報の確認時に雑に使っているStandardAdditions.osax中の「info for」コマンド。長年「deprecated」扱いになっていました。
そんなにdeprecated感はなかったのですが、macOS 11上で使ってみるとその遅さにめまいがしました。
System Eventsでfileのpropertyを取得したほうがはるかに高速で、さすがにもうinfo forを用例で引き合いに出すのは無理があるなと感じました(②巻のリリース直前に気づいて書き直した次第です)。
ファイル処理は完全にCocoa系の機能を使ったほうが速くて強力なので、最近はまじめに深掘りしていなかったのですが、入門者向け本を書いてみて気になりました。入門者向け本にCocoaのコードはさすがに書けません、、、、
Finderからまとめてfileを取得する際に、「as alias list」という用語が使えます。通常はfileなりdocumentなりのオブジェクトをlistで返してくるFinderですが、aliasで結果がほしい(ファイルパス情報だけほしい)というケースが多々あります。
それに応えるかたちで「as alias list」が、たしかMac OS X 10.4あたりで新設されました(selectionからファイルをとってくる処理が、えっらく簡単になった記憶があります)。
その後、Mac OS X 10.6あたりで(?)System Eventsにファイル関連のSuitesが新設され、「あー、こりゃFinderのないOS環境、ワンチャンくるかも?」と怯えていたのですが、さすがにFinderを廃止すると反発が大きいという判断をしたのでしょうか、「FinderレスMac OS X環境」という世界観はやってきませんでした(iOSあたりはそういう感じですけれども)。
で、System Eventsにファイル関連のSuitesができても「これ本気で使わせたり移行させたりするつもりがあるんか?」という雰囲気で、Finder上で行っていたファイル処理をそのまま移し替えられる様子ではなく、速度面でも腰が抜けるほど速いわけでもなく、Appleのエンジニアリングチームが何を考えているのか意図を測りかねていました。
指定フォルダ内のfile一覧をaliasで取得しようとして、
set aFol to choose folder tell application "Finder" set aRes to every file of aFol end tell
という処理を、
set aFol to choose folder tell application "System Events" set aRes to every file of aFol end tell
と、書き換えて、ふとaliasで欲しいと思って、
set aFol to choose folder tell application "System Events" set aRes to every file of aFol as alias list end tell
などと書いてみてもエラーに(知ってたけど)。そこで、冗談半分に、
set aFol to choose folder tell application "System Events" set aRes to every alias of aFol end tell
と、書いてみたら………期待どおりの動作に。aliasのlistで結果が返ってきます。
ログ(履歴)出力用のlogコマンド、そのログ出力を許可/禁止するlog on/log offコマンドがClassic Mac OSの時代には存在していま……
魔が差して、Classic Mac OSエミュレータ「SheepShaver」を起動してClassic Mac OS 8.6上で確認してみたら……
あっれえええええ???
log on/log offコマンドが存在していないよ?
現行のmacOSで確認されている(でも、AppleScript Language Guideに書かれていない)「start log」「stop log」を書いてみたら……通りますね。
当時流通していた何かのOSAXで提供されていたコマンドだったのか、ちょっとショックです。
駄目押しで、1999年に作成された「AppleScript Language Guide」で「logコマンド」まわりを確認してみたら「start log」「stop log」がある!!!
自分の「薄い資料集」を書き換える必要がありますね。
まー、気づいたのでヨシ!(よくない)
われながら、よくもまあこれだけド派手に間違ったもので。修正方法もいろいろ考えなくてはなりませんね。
なんといいますか、現在では現役ではないプラットフォーム(Classic MacOS)に関する言及の部分なので、しれっと「そんなことはなかったよ」という顔をして修正するのもアリなんですが、個人的にショックです(FileMaker選手権で落ちたときよりは大きくないですが)。
しばし放置しつつ、様子を見てみましょう、、、、
→ 相談したら、「誰も気にしてないので直せばいい」とのこと。直しておきました。すでに購入された方は再度購入ページからダウンロードしてください。
Piyomaru Softwareがはじめて刊行した入門者向け本「Macとアップルスクリプトで学ぶ いまからはじめるプログラミング」の続刊である「同 ②」を刊行しました(全34ページ)。期間限定で156ページほどの最新版のAppleScriptコマンドリファレンスその他いろいろなんやかんやの「薄い本」がつきます。
→ 販売ページ
# 既刊本の①巻のおまけもv1.1からv1.2にアップデートしておきました。オマケにエラーコード表を追加しています。お買い上げの方は購入ページからダウンロード可能です
ほかに、新規企画で「ヤバイAppleScript ベスト10」という本の企画が立ち上がりました。まだ企画段階ですが、企画が固まれば出せることでしょう(気楽で安全でためになる読み物本です)。
ほかにも、「泣けるAppleScriptベスト10」という企画も出たものの、こちらはさすがに無理だという結論になりました。泣かされたことならあるのですが、さすがに泣かせるようなものは無理です。
Piyomaru Softwareがはじめて刊行した入門者向け本「Macとアップルスクリプトで学ぶ いまからはじめるプログラミング①」(全30ページ)ですが、これには期間限定で150ページほどの最新版のAppleScriptコマンドリファレンスその他いろいろなんやかんやがつきます。
ほんの、150ページほどの薄い本です。期間限定です(いつまでとは言いませんが)。「こっちが本体だろ?!」という指摘はしてはいけないことになっています。
macOS 11.xの状況などを反映させた最新の状況を反映させたコマンドリファレンスですが、一部に体裁上の問題があったので、近日中にアップデートを行います。表の行の高さが狭かったとか、いろいろです。
→ じっくり読み直してチェックしたら、いろいろよくない点や足りない表記があったので、書き換えています。
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」を購入された方は、購入コンテンツのダウンロードページからダウンロードしてください。未購入の方は、同書籍をお買い上げいただくとオマケとしてダウンロードできます。単体での販売は行っておりません(さすがに、優勝していないのでそういう価値はないでしょう)。
大きな数字同士の平均値を求めるAppleScriptです。大きい数字というのは、桁数が(大きい方に)多いものと、小数点以下の桁数が多いものを指しています。
AppleScriptの数値は10桁ぐらいで指数表示になってしまう、一種のウィークポイントですが、数値を文字で保持することでこのように計算できます。
テキストで書いた数値をリストに入れて計算しますが、ヌル要素が入っていると問題になるのであらかじめヌル要素は削除するようにしています。
ちょうど、書籍の原稿で巨大な配列要素を追加するベンチマークを実施したさいに、5回実行してその平均値を求めるために書いたものです。
| AppleScript名:大きな数値同士の平均値を求める |
| — – Created by: Takaaki Naganoya – Created on: 2021/03/26 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set aList to {"", "0.4345240592956544", "0.3104130029678344192", "0.3132869005203247104", "0.2978630065917968384", "0.3173710107803344896"} set c to aveLargeNumber(aList) of me –AppleScriptの範囲外の精度の数値テキストの平均を計算する on aveLargeNumber(aNumList as list) –ヌル要素の削除 set bNumList to listSweep1D(aNumList) of me set aCount to count every item of bNumList set aNumStr to retDelimedText(bNumList, " + ") of me set aCMD to "echo \" scale=10; (" & aNumStr & ") / " & (aCount as string) & " \" | bc" set aRes to do shell script aCMD if aRes begins with "." then set aRes to "0" & aRes return aRes end aveLargeNumber on retDelimedText(aList as list, aDelim) set aText to "" set curDelim to AppleScript’s text item delimiters set AppleScript’s text item delimiters to aDelim set aText to aList as string set AppleScript’s text item delimiters to curDelim return aText end retDelimedText –1Dリスト項目のうち、ヌルの項目はリストから除去する on listSweep1D(aList as list) set bList to {} repeat with i in aList set j to contents of i if j is not equal to "" then set the end of bList to j end if end repeat return bList end listSweep1D |
Pixelmator Proの機能「ML Super Resolution」をAppleScriptから呼び出して、指定フォルダ内の画像をすべて超解像処理を行って、機械学習モデルをもとに解像度2倍化を行った画像を別フォルダに書き出すAppleScriptです。
超解像処理を行う対象は、別に画面のスナップショット画像でなくてもよいのですが、効果がわかりやすい用途です。
Keynoteに画面スナップショット画像を貼り付けていたときに、拡大倍率が上がると解像度が足りずに荒くなってしまいました。Retina環境で画面のスナップショットを取ると、けっこう綺麗に拡大できるのですが、等倍表示しかできない(&画面表示解像度を落とすことで2x Retina解像度で画面キャプチャ可能)環境なので、ちょっと困りました。
![]()
▲macOS 11.0、見た目の悪さで使う気が失せるはじめてのmacOS。12.0ではもう少しなんとかしてほしい。とくに、このダイアログ。ダイアログと見分けのつかないウィンドウ。ファイル保存ダイアログとかも
そこで、Pixelmator Proで画像のML Super Resolution機能(超解像機能)を用いてソフトウェアの力で画面スナップショット画像を高解像度化してみました。これが予想を超えていい感じだったので、指定フォルダ以下の画像をすべて処理するようにAppleScriptで処理してみました。
–> Download pixelmatorMLSuperResol(Script Bundle with libraries)
ML Super Resolution処理は自分の使っているIntel Mac(MacBook Pro 10,1)には荷の重い処理でささいな画像でも数秒かかりますが、おそらくApple Silicon搭載Macだと瞬殺でしょう。Core MLの処理が段違いに速いので。

▲オリジナル画像と超解像処理を行なった画像のファイルサイズの違い
本リストは実際にAppleScriptで開発を行う際に記述するコード量そのものを示したものです。本リストには2つのライブラリを利用していますが、ふだんはプログラムリストの再現性(実行できること)を優先して、ライブラリ部分もScript本体に一緒に展開しています。使い回ししている分も同じリストに展開しているので、「たくさん書かないといけない」と思われているようです。
実際には、共通部分はほとんど書いていないので、本処理もこんな(↓)ぐらいの記述量です。リアルな記述量を感じられるような掲載の仕方を考えなくてはいけないのかもしれません。本リストはその試みの第一歩です。
まー、超解像処理を行って72dpiの画面スナップショット画像を144dpiに上げているだけなんで、Retina Display環境で処理すれば不要なんですが、ソフトウェアだけで実現できるのはロマンを感じますし、無駄に2x Retina環境のスクリーンショットを処理して288dpiの高解像度画像に上げてみるとか。
ただ、WWDCのビデオなどを見ていると、画面のスナップショットそのものをベクターグラフィックで取るような仕組みも考えていそうな気配がします。当てずっぽうですが、そういう何かを考えていそうな….
| AppleScript名:画面スナップショット超解像バッチ処理 v1 |
| — – Created by: Takaaki Naganoya – Created on: 2021/03/25 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions use cPathLib : script "choosePathLib" use imgPicker : script "imgPickerLib" –掃除 tell application "Pixelmator Pro" to close every document without saving –必要なパス情報をユーザーに問い合わせる set {inFol, outFol} to choose multiple path with titles {"Img Folder", "Output Folder"} set outFolStr to outFol as string –画像フォルダから画像のパス一覧を取得 set f1List to getFilepathListByUTI(POSIX path of inFol, "public.image", "alias") of imgPicker –取得した画像を超解像処理して repeat with i in f1List tell application "Pixelmator Pro" open i tell front document with timeout of 3000 seconds super resolution end timeout end tell end tell –新規保存ファイルパスの作成 set pathStr to POSIX path of i set filenameStr to (current application’s NSString’s stringWithString:(pathStr))’s lastPathComponent() as string set savePath to outFolStr & filenameStr tell application "Pixelmator Pro" save front document in file savePath as PNG tell front document close without saving end tell end tell end repeat |
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特有の問題に悩まされました。
iWork Apps(Keynote、Numbers、Pages)がバージョン11.0にアップデートされました。
3アプリ共通でAppleScriptから書類のパスワード設定確認、パスワード設定の機能が追加されています。
また、Keynote v10.3.5、v10.3.8とmovie書き出し時のCodec指定オプションに「h.264」とAppleScriptの処理系ではエラーになる記号を含む予約語が入っていたのですが、これがv11.0で「h264」と修正されました。
# 記号を含む予約語は禁止されています。「C++」とか(Fine Reader OCR Proに入っていますわー)
実際に動作確認してみないとまともに動くかどうかは不明ですが、用語辞書上では修正されています。報告して半年以内で修正されたので、修正も何もされないよりはマシでしょう。正直なところ、こんな程度の低いバグは事前にチェックして解消してほしいところではあります(Mac App Storeに一般開発者が出したらリジェクトされるレベル?)。
ちょいちょいAppleScriptの瑣末な機能を追加していただけるのはありがたいのですが、ページ内の選択中のオブジェクトへのアクセス(selected itemsとか)を用意してほしいところです。現状ではselectionで取れるのはページ(slide)単位だけです。
また、text itemの縦書き(Vertical)属性にもアクセス(Read/Write)できてほしい気がします。Keynote書類上にWord Cloudを作成するときにScriptから素直にオブジェクト回転ができずに困ります(GUI Scriptingで強引にやってるんですけれども)。

▲Keynote v11:documentに「password protected」属性(Read Only)と、「set password」コマンドが追加
Keynote v11.0上で動作確認ずみ。ただし、いったんパスワードを設定した書類は、GUI側からしかパスワード解除できない点に注意。また、AppleScriptからのKeynote書類オープン時にパスワードを指定してオープンすることもできないので、当該書類のパスワードをKeychainに保存しないと書類オープン時のパスワード入力をパスできない。こちらはちゃんと(h.264と違って)動作確認したらしい。でも、油断はできない。それがAppleクオリティ。

▲Numbers v11:documentに「password protected」属性(Read Only)と、「set password」コマンドが追加

▲Pages v11:documentに「password protected」属性(Read Only)と、「set password」コマンドが追加

▲Pages v11:exportコマンドのexport optionsに「include comments」属性と、「include annotations」属性が追加
電子書籍「Music Control With AppleScript」の企画を再始動させます。
→ 発売しました
iTunesからMusic.appに切り替わり、AppleScriptの解説書を出すならここしかない というタイミングでmacOS 10.15のPDFViewのセキュリティ制限の大幅強化(=できないことが増える)に直面。
気合いを入れてPDF本文中に「applescript://」URLリンクを埋め込んで、ワンクリックで埋め込んだAppleScriptの内容がスクリプトエディタに転送されるよう(本Blogと同じように)準備していたのですが、これが止められてしまいました。URLイベント系はセキュリティホール源としてAppleから目をつけられていた箇所でもあります(Help Bookまわりで一度大穴が開いていたことがあったので)。
URLリンクでAppleScript埋め込みが事実上許可されない(長いURLリンクが途中で切られる)という状況のもと、Appleに文句を送信しつつノーアンサー&ノーリアクションな日々。途中まで書きかけて完全に腐っておりました。
壁に貼ってあった表紙のハードコピーもむなしく、塩漬け状態の日々。そんなMusic.app本もコンセプトをやや変更して再始動。当初はiTunes本のScriptをすべてMusic.appに差し替えただけの内容を予定していましたが、ちょっと変わる感じです。とりあえず、表紙を作り直してみました。また、AppleScriptコマンドリファレンスの最新版を添付しています。いま着手した段階ですでに200ページぐらいですが、最終的には300ページ以上ぐらいいくかもしれません。すでに「えほん」ではありません。
従来の「えほんシリーズ」では「難しく見えそうな資料的コンテンツはつけないようにしよう」「ページ数が増えて紙メディア展開できなくなることは防ごう」というのがコンセプトでした。64ページぐらいの極小ページ数でまとめることと、難易度設定を厳密に管理すること、難しい内容を入れないことに心血を注いでいたわけですが、これらの制限を外して再編集しています。FileMaker Pro Scripting Bookに近い味付け(ひととおり解説)になると思います。
■表 既刊本タイトルとページ数(多い順にソート)
| タイトル | ページ数 |
| AppleScript最新リファレンス v2.0 | 483.0 |
| Blogアーカイブ本Vol.4 | 450.0 |
| Blogアーカイブ本Vol.5 | 429.0 |
| Blogアーカイブ本Vol.1 | 418.0 |
| Blogアーカイブ本Vol.3 | 404.0 |
| Blogアーカイブ本Vol.6 | 383.0 |
| Blogアーカイブ本Vol.2 | 367.0 |
| Music Scripting v3.0(再編集着手直後、作業中) | 261 |
| 質問サイトで元雑誌編集者が可能なかぎりいろいろ答えてみた | 258.0 |
| Cocoa Scripting Course #01_1.1a | 250.0 |
| FileMaker Pro Scripting Book_English | 158.0 |
| 最新事情がわかるAppleScript10大最新技術 v2.0 | 148.0 |
| FileMaker Pro Scripting Book v1.2 | 139.0 |
| iTunes Control | 48.0 |
| Keynote Control 1 | 47.0 |
| Keynote Control 2 | 45.0 |
途中、FileMaker Pro本を書いたおりに「URLリンククリックが使えないので、本とは別アーカイブとして提供すればいい」という割り切りを行い、これで「OSの制限がきつくなったけど、機能を損ねずに本+Scriptを提供可能」な状態になっていました。本人がURLリンクにこだわっていただけなんですけれども。