...

AppleScript - PiyoCast v3.0

by user

on
Category: Documents
134

views

Report

Comments

Transcript

AppleScript - PiyoCast v3.0
リファレンス本です。OSの最新事情や最新技術に
ついては、別途「最新事情がわかる AppleScript
AppleScript
「AppleScriptの穴」Presents
10大最新技術」をお買いお求めください。
最新リファレンス
長野谷隆昌@Piyomaru Software 著
AppleScriptってなんだろう?
スクリプトエディタの使い方
最速AppleScriptマスター
コンテクストメニュー・アシスタント対応
理解しやすい(読みやすい)AppleScriptの書き方
ダイアログ表示
文字入力
文法編
ノウハウ編
AppleScriptにおけるデバッグ
完全日本語化
エラー番号表
スクリプトエディタでAppleScriptを保存できなく
なったときの対処
プログラムを途中で止める
データのファイル入出力
「Finder用語辞書」攻略ガイド
独自マクロ言語内に記述する
AppleScript Office 2011, 2016/ FileMaker Pro
各アプリケーションにおける
AS Holeに掲載されているAppleScriptの使い方
特殊記号の入力方法(不等号など)
コマンドリファレンス
「えっ?! こんなに違ってるの??」
OS X 10.11, El Capitan 対応
座標系
与太話編∼「戦場の絆」とAppleScript
&「戦場の絆ポータブル」とAppleScript
iOSデバイスとの連携
iOSデバイスからAppleScriptを実行する
iOSデバイス上の情報をAppleScriptから更新する
AppleScriptでiPhone経由で電話をかける
AppleScriptでiPhone経由でSMSを送信する
iOSデバイスにFacetime経由でアクセスする
iOSデバイスを安定した外付けモニターに
DeskConnectで連携させる
フォルダアクションで連携させる
ファイル名/フォルダ名の変更
実行環境から情報を取得する(マシン環境編)
実行環境から情報を取得する(ユーザー環境編)
テキストの置き換え、全角半角変換
テキストのバイト数をかぞえる
ターミナルからAppleScriptを呼び出す
リスト(配列)処理
ソーティング
タイマー割り込み
GUI Scripting
未知のアプリケーションを操作する
勝手に質疑応答 FAQ48
あまり使われていないが便利な技術たち
AppleScriptと相性のよくない技術たち
Piyomaru Software Books
#001
Version 2.0
商標について
Mac、Macintosh、Mac OS X、OS X、macOS、AppleScript、Objective-C、Time Machineは米国Apple社
の登録商標です
「機動戦士ガンダム 戦場の絆」「機動戦士ガンダム」「戦場の絆」「戦場の絆ポータブル」は、
©SOTSU・SUNRISE, ©BANDAI NAMCO Entertainment Incの登録商標です。
Adobe、Adobe ロゴ、Acrobat、Adobe InDesign、Adobe Illustrator、Adobe PhotoshopはAdobe Systems
Incorporated(アドビシステムズ社)の商標です。本製品はAdobe InDesign、Adobe Illustrator、Adobe
Photoshopの開発元であるアドビシステムズ社が推奨もしくはスポンサーしているものではありません。
MicrosoftおよびMicrosoft Officeは米国Microsoft Corporationおよびその関連会社の商標です。
FileMaker、ファイルメーカーは、米国およびその他の国におけるFileMaker, Inc.の登録商標です。
ぴよまるソフトウェアでは、2002年に「人の言葉を理解してMac上のアプリケーションを操
作するアプリケーション「Newt On」をAppleScriptで開発。
Siriの登場10年前には同様の機能をMac上で実現していました(同等ではありませんが)。
日本語を解析する能力はMicrosoft Word v.Xから、スケジュール管理能力はEntourageから、
インターネット接続能力はURL Access Scriptingから借り、まったく異なる機能のアプリケー
ションをAppleScriptで作り上げました。
さらに、こうした技術を転用してさまざまな業務用システムをAppleScriptで開発。24時間動
き続け、問題があったりユーザーに知らせる必要のある情報はTwitter経由で通知するなど、ロー
カルのアプリケーションとネット上のサービスを手軽に組み合わせられるAppleScriptの環境
は、Macの強みを最大限に引き出せるものです。
広告
ぴよまるソフトウェア
本書をご覧になるために
本書は8インチのiPad miniを縦方向
に持って快適に読めるよう情報密度
を調整して(詰め込みすぎないよう)
作成してあります。
PDFのため、Macから他のデバイス
に転送して読めますが、カラー表示
ができないデバイスでの閲覧は考慮
していません。
また、見開き表示については考慮し
ていません。
Mac上で読むときには、Mac OS X
標準装備の「プレビュー」では各
AppleScriptのリストに用意してあ
るURLリンク(クリックするとスク
リプトエディタに内容が転送される)
が効きません。
著名なPDFリーダーにAdobeのAcrobat Readerがありますが、URLリンク
の長さが一定長を超えるとスクリプトエディタに転送されるスクリプトが途中
で切られるという症状が確認されています。おすすめは、オープンソースのPDF
リーダー「Skim」です。
http://skim-app.sourceforge.net
プレビュー
Adobe Acrobat
Skim
「AppleScript最新リファレンス」
目次
種類
読み物
OS X 10.11, El Capitan 対応
Table Of Contents
記事名称
本書をお読みになるために
この本の方向性について
先行研究との比較
まえがき
入門記事
AppleScriptってなんだろう?
AppleScriptの世界を形作るもの
Mac OS X標準搭載アプリケーションでAppleScriptに特化し
た機能を持つもの
AppleScriptってなんだろう?
AppleScriptを擬人化すると
数値の有効桁数:実数部9桁
リスト(配列)で処理するデータ件数のめやす
AppleScriptとアプリケーションとの間の通信について
マルチコアCPUとAppleScript
AppleScriptから見たMac OS X
ローカライズド・ファイルシステムが隠している「本当の名前」
起動中のプログラム一覧の確認方法
最前面のプログラムの確認方法
種類
記事名称
AppleScriptから見た「プロセス」
AppleScriptから見た「ファイルシステム」
入門記事
スクリプトエディタの使い方
AppleScript関連ツール一覧
スクリプトエディタ
スクリプトエディタのメインウィンドウ表示
環境設定
環境設定/フォーマット
ファイル
ファイル保存形式
編集
表示
スクリプト
その他
ヘルプ
入門記事
「構文確認」時に注意すべきこと
ifブロック、repeatブロックなどのend補足
英語大文字小文字の修正および記号の前後のスペース調整
コマンドに対するオプションを3つ以上列挙するさいの英語ラ
イクな列挙表記に変更
種類
記事名称
一部の記号の置き換え
Booleanを記述するコマンドオプションの表現変更
【超重要】演算の優先順位などを明示するためのカッコ("(",
")")の補足
正しいアプリケーション名の確認
フレームワークやライブラリの確認
it'sをitsに置き換え(OS X 10.10以降)
入門記事
Scriptを書く前に準備しておくこと
ディスク(HDD/SSD)のチェック【重要】
無線LANやイーサネット(有線LAN)に接続
コンピュータのテキスト読み上げ音声をインストール
iCloudアカウントの設定確認
MacにiPhoneをひもづけておく(iPhoneをお持ちの場合)
Macに外部モニタをつないでおく
MacにTime Machineバックアップ用HDDをつないでおく
Appleの開発者アカウントを購入しておく
マウスにはマウスパッドを用意
使いやすいキーボードを用意
日本語入力プログラムの「ライブ変換」をオフに
Macの本体、画面、キーボードなどを清掃しておく
コラム
Macはフランカーのようなコンピュータかも
種類
入門記事
記事名称
最速AppleScriptマスター
実行
Hello World
コメント(注釈)の記述スタイル
数値
文字列
その他のデータ型
型変換
変数の宣言
表示
四則計算
数値のインクリメント/デクリメント
リスト
レコード
条件式
繰り返し(ループ処理)
関数=サブルーチン
スクリプト・オブジェクト
ファイル入出力
種類
リファレンス
記事名称
コマンドリファレンス
tellブロック
アクション
ダイアログ表示
コマンド
他の言語呼び出し
序数
制御構文
文字列操作
システム日付
データ型
定数
変数・プロパティ宣言
関数
演算子
Webサービス呼び出し
フィルタ参照
サブルーチン宣言
サブルーチン記述時の装飾用の無意味句
無意味語
種類
リファレンス
記事名称
クリップボード 制御
音量制御
スクリプトオブジェクト関連
その他の予約語
入門記事
アプリケーションへの命令パターン
入門記事
Finder用語辞書 攻略ガイド
主要アプリケーションのAppleScript用語辞書の大きさ
AppleScript用語辞書とは?
iBooks Authorにはにせものの(使えない)AppleScript用語辞
書が入っている
AppleScript用語辞書に書いてある記号
FinderのAppleScript用語辞書をながめてみよう
FinderのAppleScript用語辞書を区分
Finderの実際の機能から用語同士の組み合わせを「推測」する
Finderを使った定型処理
種類
読み物
記事名称
AppleScriptと相性のよくない技術
あまり使われていないが便利な技術
AppleScript用語辞書に見られる高度な用語
Appleのメーリングリストに参加しよう
各アプリケーションにおける座標系
入門記事
独自マクロ言語内に記述する
AppleScript
Microsoft Excel 2011でVBAにAppleScriptを記述する
Microsoft Excel 2016でVBAからAppleScriptを呼び出す
FileMaker Proでfilemakerスクリプト・ステップに
AppleScriptを記述する
種類
ノウハウ集
記事名称
ノウハウ集
AS Hole掲載のサンプルScriptの使い方
理解しやすい(読みやすい)AppleScriptの書き方
ダイアログ表示
文字入力
特殊記号の入力方法(不等号など)
AppleScriptにおけるデバッグ
スクリプトエディタでAppleScriptを保存できなくなったと
きの対処
プログラムを途中で止める
データのファイル入出力
ファイル名/フォルダ名の変更
実行環境から情報を取得する(マシン環境編)
実行環境から情報を取得する(ユーザー環境編)
テキストの置き換え、全角半角変換
テキストのバイト数をかぞえる
プリンタの情報を取得する
ターミナルからAppleScriptを呼び出す
リスト(配列)処理
ソーティング
タイマー割り込み
GUI Scripting
種類
ノウハウ集
記事名称
GUI Scriptingを有効にする設定方法
Safari 9.1.1で加わった制限設定の解除方法
未知のアプリケーションを操作する
与太話編
戦場の絆とAppleScript
戦場の絆ポータブルとAppleScript
活用記事
iOSデバイスとの連携
下準備
iOSデバイスからAppleScriptを実行する
iOSデバイス上の情報をAppleScriptから更新する
AppleScriptでiPhone経由で電話をかける
AppleScriptでiPhone経由でSMSを送信する
AppleScriptでiPhoneにFaceTimeでアクセスする
OSデバイスをMacの外付けモニター化する「Duet Display」
のクラッシュを見張る
iOSデバイスとMacをDeskConnectで連携させる
iOSデバイスとMacをフォルダアクションで連携させる
参考資料
Q&A
周辺機器とAppleScript
FAQ48∼Twitter上で答えた質問集
種類
参考資料
記事名称
エラー番号とエラーメッセージ
AppleScriptのエラーコード表
AppleScript Errors
Mac OS Errors
AppleEvent Errors
OSA Errors
AppleScriptでエラーコード表を作る
参考資料
SPECIFICATION
初版あとがき
第2版あとがき
奥付
SPECIFICATION
AppleScriptとは?
項目
内容
対象OS
OS X(当初は、Classic Mac OSに搭載)
対象プラッ
トフォーム
実行形式
Mac
インタプリタ(逐次解釈実行)型。AppleScriptエディタの画面上にある「コンパイ
ル」というのは、内部コードへの解釈確認を行うことであって、一般的な意味での
「直接CPUが実行可能なバイナリに変換すること」とは異なります。
English(昔は、Japanese、Frenchが存在していました)英文に似た文法で記述。極
記述方式
力、記号を用いずに英文でプログラムを記述します。プログラミング構文のキーワー
ドが「単語」ではなく「連語」(be going to∼のような)を採用しているという特徴
があります。
AppleScriptエディタ(OS標準添付)、Xcode(Mac AppStoreより無償配布)、テキ
記述プログ
ラム
ストエディタ(記述時に構文チェック機能は利用できず)、Script Debugger(カナダ
Late Night Softwareより販売されているAppleScript統合開発環境)、Shane Stanleyの
ASObjc Explorer 4(AppleScriptからCocoaの機能を利用するASOCの記述に特化した
開発環境)、その他、サードパーティのAppleScript記述環境あり
AppleScript
AppleScriptエディタ上で動作するプログラム、Script Menuから呼び出すプログラム、
で作れるも
アプレット、ドロップレット、通常GUIアプリケーション(AppleScriptObjCにて記
の
述)
本書について
項目
内容
想定年
高校生以上(英語やコンピュータの知識があれば、とくに小学生でも幼稚園児でも大丈
読者の
AppleScriptは英語に極力似せて書けるプログラミング言語です。英語に対してアレルギ
注意点
ーを持つ方にはおすすめできません
力を入
実戦において役に立つ知識を中心に、入門者に配慮。これまでの進化の経緯をふまえた
齢層
れた点
夫。単なる目安です)
うえで、最新のOS Xに対応
筆者について
項目
内容
性別
男性
Twitter
@Piyomaru
人工知能風インタフェース「Newt On」、日本語音声コマンドインタフェース「こと
AppleScript
で作ったプ
ログラム
だま」「符令韻投句」、オンラインキーワード対戦ゲーム「FM Battler」、オンライ
ン情報処理資格試験模試サービス「合格Helper」、全国規模のクライアント/サーバー
型PDF配信出力システム、近似画像検出プログラム ほか多数をすべてAppleScriptで
開発
この本の方向性について
本を書くというのは、筆者の価値観に基づいて情報を整理・吟味して1つの価値体系を組み立て、読者の
皆様に「料理としてご提供する」ことであります。こうした「味付け」がないと読みにくいため、味がつ
くことについてはもう、ご容赦いただきたいとしかいいようがありません。
たとえば「カレーライス」の本を書くとしても、もしも辛党の人が書けば「辛さ」の度合いや香辛料に着
目した辛さ至上主義的な話になるでしょうし、お子様が書けば「カレーの王子様」至上主義的な話になる
でしょう。インドカレー愛好者が書けば「インド国内におけるインドカレーの定義と他地域のインドカレ
ー類似食品との相違点」といった本になるかもしれません。
つまり、筆者がAppleScriptをどう見ているか、どう扱っているかということによって内容は変わってきま
すし、あらかじめ説明しておかないと、この本における方向性が見えてきません。
AppleScriptを書く人=Scripterを分析すると、おおまかに分けて2つの方向性があります。
(1)オブジェクト指向派
(2)手続き指向派
筆者は典型的な(2)です。可能なかぎり単純にAppleScriptをとらえています。
AppleScriptで作成するものについて、
(A)コマンド作成派
(B)ロボット作成派
キーボードショートカットからAppleScriptを呼び出すような用途に使っている人は(A)で、筆者は(B) で
す。
AppleScriptの情報源について、
(a)日本国内
(b)海外
でいうと、(b)になります。逆に、日本国内で参考にしているサイトはASH Planningぐらいで、それ以外は
海外のWebサイトやフォーラム、メーリングリストなどで情報収集しています。Appleの開発者向けメーリ
ングリストに可能なかぎりすべて入っているため(政府系MLや学校系MLは追い出されました)、100個以
上の海外のMLから情報を得ています。メーリングリスト内の話題は情報整理用のAppleScriptで頻出単語を
抽出し、すべてフォルダ分けを自動で行っています。
最近のAppleScriptの技術について、
(あ)AppleScriptObjC不使用
(い)AppleScriptObjC積極利用
筆者は(い)に該当し、Cocoaの機能を積極的に利用しています。これはすなわち、「新しいOSにどんど
ん移行する」ということを意味しており、古いMac OS Xを使いつづけるというスタンスではありません。
まとめると、
項目
内容
方向性
(2)手続き指向派
作成物
(B)ロボット作成派
情報源
(b)海外
新技術への取り組み
(い)AppleScriptObjC積極利用
ということになります。
先行研究との比較
本書は「AppleScript最新リファレンス OS X 10.11対応」と銘打っています。この名前は1999年にソフトバ
ンク・パブリッシング(現・ソフトバンク・クリエイティブ)から刊行された「AppleScriptリファレン
ス」(こばやしゆたか・著)にちなんだものです。
「AppleScriptリファレンス」の刊行前、筆者は当の出版元であるソフトバンク・パブリッシング(現・ソ
フトバンク・クリエイティブ)に勤務しておりました。その前身である「AppleScriptミニミニリファレン
ス」(こばやしゆたか・著)の存在は風の
で知っていたものの、当時すでに絶版となっており所有して
いませんでした。編集部でも資料用として1・2冊あったぐらいです。
そのため、担当者の先輩に「最新版出しましょうよ∼」としつこく陳情し「AppleScriptリファレンス」が
実現したという経緯があります。
ただ、同書籍は完成までに1年以上を要し、10数名にのぼる超豪華な執筆陣も「原稿料は期待しない。本
が実現すればいい」程度のスタンス。ほぼ採算度外視で「重箱の隅の隅」までつつき尽くして刊行され
た、同人誌的な性格の強い本だったのです。
筆者も「AppleScriptリファレンス」の企画や執筆まで参加していましたが、すべてを担当していたわけで
はありません。ごく一部です。
対して、2016年5月初旬から執筆を開始し、ほぼ1か月程度で1人の人間が執筆した(1人月?)本書
は、「重箱の隅の隅」までつつき尽くすような真似はとてもできません。とくに、利用頻度の少ない項目
や筆者が興味を持っていない項目については言及すらしていません。
「AppleScriptリファレンス」を見て書く、「写経」というアプローチもないこともありませんが、さすが
に物書きのはしくれとしてそういう真似は避けたいところです。
このため、筆者が更新しているBlog・AppleScriptの穴では説明し切れない部分を体系的に説明する、とい
うのが本書の基本的な方針となりました。
AppleScriptの穴には2,000本にのぼるサンプルScriptを掲載しており、その分量については「AppleScriptリ
ファレンス」掲載のサンプルプログラムの本数とは比較になりません。また、日々更新されているため、
最新の技術や情報が反映され続けています。
注1:本書の名称について、オリジナル版の原著者であるこばやしゆたか様(@adelie)、ならびに出版
元であるソフトバンク・クリエイティブ様に事前に確認を行い、使用許諾をいただいています。こばやし
ゆたか様ならびにソフトバンク・クリエイティブ様に深く感謝申し上げる次第です。
注2:AppleScriptのエラー番号とメッセージの対応表については、Appleの開発者向け資料をもとに、
「AppleScriptリファレンス」ならびに「AppleScript言語ガイド」(アップル・コンピュータ著、アジソン
ウェイスレイ・パブリッシャーズ・ジャパン刊、1997年)を確認のため参照しています。
まえがき
AppleScriptは日々仕事を片付けるためのツールであり、自分にとってはMacをMacたらしめている理由そ
のものです。MacTreeのリレーエッセイ「林檎いとしや」に2003年に書いた内容は今日もその通りであり
続けています。
http://itoshiya.mactree.net/2003/09/01/vol-75/
アプリケーション同士を連携させ、自分の思い通りの新たな道具を作り上げ、日々利用し、遠く離れたデ
ータセンターなどで24時間365日稼働させています。
10数人の共著で執筆した「AppleScriptリファレンス」(ソフトバンク・パブリッシング=現ソフトバン
ク・クリエィテリブ)の刊行が1999年といいますから、それから17年もの歳月が経過したことになりま
す。
1999年当時、AppleScriptで1000万回単純ループを実行すると、30∼45秒程度。いま実行すると、もはや
そんなお気軽な処理に1秒もかかりません。コンマ数秒の世界です(キャッシュが効いているとの
も)。
ただ、昨今ではCPU自体の性能向上も穏やかなものとなりました。1∼2年待っていれば勝手に何倍にも
性能が上がったのは昔の話。パーソナルコンピュータの性能向上も、もはやこのあたりが限界ではないか
という「踊り場感」あふれる昨今です。
ただ待っていても性能は上がらず……生産性を向上させるためには、「別の一手」を打つことが必要に。
さらに、人が辞めてもなかなか補充されない。慢性的な人手不足といった過酷な現場環境を考えますと、
これはもう作業効率の向上・自動化・効率化を推進するほかないだろうと思うのです。日常的に利用して
いる道具を使って、いま行っている作業の自動化を。
このような時代に、MacとAppleScriptの組み合わせはぴったりです。
巨費を投じてクラウド環境上にシステムを構築するのもひとつの方法ですが、身の周りの雑多でめんどく
さい作業を自動化し、単純作業や手作業から現場が解放されないかぎり、明るい未来どころか週末の休日
さえ危うくなりがちです。
一方、Twitter上ではAppleScriptについて、どこで聞きかじったのか間違った知識を開陳する人々の姿が観
測され、
きっと、この世界のどこかに、古くて間違った情報ばかり発信している悪質情報サイトが存在してい
るにちがいない
と思っていたのですが、偶然それを発見。Wikipedia、おまえだったのか!
すぐさまWikipediaの内容を更新。最新の情報を惜しみなく叩き込み、英語版のページよりも有用な情報を
大量に投入。ネット上の有用なサイトをことごとくリンクし、最新のツールを紹介する項目を増設。
……もはや、修正前とは別物に。
ああそうか。Wikipediaのこのページを自分の本の第1章と位置付けよう。書籍であーだこーだ言って「こ
う勉強しろ」とか「こうしろ」と書かなくても、Wikipediaのこのページを見てもらえばいいじゃないか。
書籍の方は割と雑多な内容をポンポン放り込んで、好きに選んで読んでもらえばいいじゃないか。リファ
レンス的に。
そんなわけで、この本が出来上がった次第です。
長野谷隆昌
AppleScriptってなんだろう?
AppleScriptの世界を形作るもの
Mac OS X標準搭載アプリケーションでAppleScriptに特化した機能を持つもの
AppleScriptってなんだろう?
AppleScriptを擬人化すると……
リスト(配列)で処理するデータ件数のめやす
AppleScriptとアプリケーションとの間の通信について
マルチコアCPUとAppleScript
AppleScriptから見たMac OS X
ローカライズド・ファイルシステムが隠している「本当の名前」
起動中のプログラム一覧の確認方法
最前面のプログラムの確認方法
AppleScriptから見た「プロセス」
AppleScriptから見た「ファイルシステム」
Mac OS X上の「ドメイン」
AppleScriptの世界を形作るもの:
System Events
AppleScriptから見たプログラム名一覧の情報は、System Eventsを通し
てレコード形式で取得したものになります。プロセス情報はすべてSystem
Eventsを経由することになります。
また、アプリケーションをGUI経由で外側からコントロールする「GUI
Scripting」の機能もSystem Eventsが提供しており、今日のAppleScript
の世界観はSystem Eventsが提供しているといっても過言ではありません。
Finder
ごぞんじ、Mac OS X上でユーザーがファイルを操作するためのアプリケー
ションです。しかし、各国語向けユーザーのための「ローカライズファイル
システム」のため、「本当のファイル名/フォルダ名」が見えません。
ターミナル(Terminal.app)
AppleScriptを書く際に併用することの多いツールです。
フォルダの場所や本当の名前などを調べる際に利用します。
また、AppleScriptからシェルのツールを呼び出す際に、その処理内容を確
認することも可能です。
アクティビティモニタ
AppleScriptを書く際に併用することの多いツールです。
各アプリケーションの動作状況、プロセス名称やCPU負荷率などを調査す
る際に利用します。
システム環境設定
GUI Scriptingのオン/オフの機能を提供しています。
「ユニバーサルアクセス」の「補助装置にアクセスできるようにする」とい
うチェックボックスをオンにするとGUI Scriptingがオンになります。
UNIX
Mac OS Xの下地を形成しているのがUNIXです。
AppleScriptは生のMac OS Xにアクセスするため、UNIXの機能(シェル
コマンドの機能)をも利用することができます。
Mac OS X標準搭載アプリケーションでAppleScriptに特化した機能を持つもの:
連絡先
AppleScriptでプラグインを作成可能に
なっており、アドレスブック中の各項目
を選んだ際に表示されるポップアップメ
ニューにプラグインの名称を表示し、呼
び出せます。
メール
メール受信時に実行するアクションを
AppleScriptで記述できるようになってお
り、メール受信ルールで選択可能です。
メッセージ
各種チャット受信時などに実行できる
AppleScriptを指定できるようになって
おり、標準でチャット/ファイル転送自
動受け付けなどのサンプルAppleScript
が付いています。
OS標準Printダイアログ
印刷時にPDF書き出しを行うアクショ
ンメニューがあり、この中から
AppleScriptを呼び出せるようになっ
ています。
AppleScriptってなんだろう?
AppleScriptは、アプリケーションやOSの機能を部分的に呼び出したり、アプリケーショ
ンの挙動をカスタマイズするためのプログラミング言語です。
プログラミング言語のうち、AppleScriptが属するのは「スクリプト言語」とよばれる
ジャンルです。プログラミング言語には、コンピュータに理解されやすく人間に理解しに
くい言語(マシン・コードなどの低級言語)から、コンピュータが理解しにくく人間が理
解しやすい言語(高級言語)があります。スクリプト言語は後者に属します。
AppleScriptは、人間の言語(英語)にきわめて近い記法をするスクリプト言語であり、
プログラムを作れない人でもAppleScriptのプログラムを見ればだいたいは何が書かれて
いるか分かるほどです。高級言語の中でも一番高級なグループのひとつです。
その反面、コンピュータが実行や解釈を行うためには、かなり苦労して実行することにな
ります。
実際、1993年のAppleScript登場時の処理速度は速いとはいえないものでした。Mac
OS 8.5になって処理系が68KからPowerPCネイティブに書き換えられ実行速度が大幅に
向上。さらにMac OS Xへの移行にともなって圧倒的な安定性を獲得。2005年のIntelプ
ロセッサへの移行によって、速度面でも長足の進歩を遂げました。
いまでは、新機種が出るたびにAppleScriptの実行速度も向上し、店頭でスピード確認を
行うと驚かされるばかりです。
さて、AppleScript自体の話に話を戻しましょう。
AppleScriptそのものには、命令や機能はきわめて少なく、Mac OS Xの機能やアプリケー
ションの機能を呼び出すことでさまざまな処理を行います。
ひとことに、「OSやアプリケーションの機能を呼び出す」といっても、そんなことが実
際にできるのかと不思議に思われるかもしれません。
Mac OS Xの内部では、OSとアプリケーション間の通信、アプリケーションとアプリケー
ションの間の通信に「AppleEvents」と呼ばれる通信手順を採用しています。この
AppleEventsを利用すると、アプリケーション間で相互に値を取得したり機能を実行す
ることが可能です。
AppleScriptはこのAppleEventsを記述するための言語なのです。
対象にAppleEventsを送ることで、さまざまなアプリケーションの機能を呼び出した
り、特定のデータを取得したり書き込んだりして、ユーザーの思い通りに作業を実行させ
るのです。
さらに、アプリケーションやOSから取得した情報にもとづいて、処理内容を変更させる
ことも可能です。
AppleScript自体のきめごとや機能はそれほど多くはないのですが、各アプリケーション
がAppleScriptに対して解放している機能の内容や見せ方、キーワード(呪文?)が多種
多様であるために、アプリケーションの機能の呼び出し方は、「ノウハウの塊」であると
もいえます。
このAppleScriptをマスターできれば、Macとの付きあい方は確実に変わってくることで
しょう。それはまさに、「コンピュータを使いこなす」「コンピュータをこき使う」とい
う表現にぴったりです。
もしも、仕事が100倍降ってきたとしても、夜通し処理しなくてはならなくなっても、そ
の仕事をAppleScriptで自動化してあれば、怖いものなどありません。
Macの能力を文字通り100%引き出すための最後のピース、それがAppleScriptなのです。
スクリプトエディタの使い方
スクリプトエディタの場所
スクリプトエディタのメインウィンドウ表示
環境設定
環境設定/フォーマット
ファイル
ファイル保存形式
編集
便利な編集中のキーワード補完機能
表示
スクリプト
その他
ヘルプ
AppleScript関連ツール一覧:
スクリプトエディタ
AppleScriptを書き、保存し、実行するためのアプリケーション。
AppleScriptを使う上で最重要のアプリケーションです。
本アプリ自身もAppleScriptからコントロール可能です。
/Applications/Utilities/Script Editor.app
Script Menu
AppleScriptをメニューバーから呼び出せるようにする機能。
Mac OS X 10.5までは別ツールでしたが、Mac OS X 10.6でスクリプトエ
ディタの機能に統合されました。
OSAX(Script Additions)各種
AppleScriptの命令を追加するためのプラグイン。
/System/Library/ScriptingAdditions/
/Library/ScriptingAdditions/
/Library/ScriptingAdditions/
フォルダに入れて使用します。
Script Debugger(カナダ LateNight Software社)
AppleScriptを書き、保存し、実行し、デバッグ(間違い探し)をするため
の、サードパーティのアプリケーション。どうしても見つけられないバグ(間
違い)を探すためのプロ必携ツールです(99 USドル)。
ターミナル(Terminal.app)
AppleScriptを書く際に併用することの多いツールです。
フォルダの場所や本当の名前などを調べる際に利用します。
また、AppleScriptからシェルのツールを呼び出す際に、その処理内容を確
認するためにも使用します。
アクティビティモニタ
AppleScriptを書く際に併用することの多いツールです。
各アプリケーションの動作状況、プロセス名称やCPU負荷率などを調査す
ることができます。
System Events
AppleScriptのさまざまな命令をFinderから移管されているアプリケーション
です。ファイル関連、プロセス関連、電源制御関連、GUI Scripting関連の命令
を本アプリケーションのAppleScript用語辞書内に持っています。
Database Events
AppleScriptのフィルタ参照を利用してデータの絞り込みなどを行う、SQLite
に対するAppleScript処理系独自のデータベースフロントエンドです。
Image Events
AppleScriptから画像ファイルにアクセスする際に利用する補助アプリケーショ
ンです。さまざまな画像フォーマットの変換などが可能です。同様の機能が
System Eventsにも存在しています。
フォルダアクション設定
フォルダアクションの設定を行うGUIアプリケーションです。本アプリケーショ
ンは設定を行うだけであり、実際の処理はFolder Actions Dispatcherが行いま
す。
スクリプトエディタの場所
「アプリケーション」フォルダ中の「ユーティリティ」フォルダに
「スクリプトエディタ」が入っています。
スクリプトエディタのメインウィンドウ表示
AppleScriptを記述・実行するスクリプトペディタですが、ふつうのテキストエディタと似たような見た目をしていま
す。
ここにAppleScriptを入力します
実行結果がここに表示されます
おおまかなスクリプトエディタの使い方(AppleScriptを書いて、確認して、実行する)
スクリプトエディタ
コンパイル(構文確認)ボ
入力したScriptの内容の色が
力
Command-K
がないか、どのように書き換
にAppleScriptを入
タンをクリック。もしくは
「結果」欄に実行結果(最終行が返してきた値、あるいは明示
変わったらOKです。エラー
えられたかを確認
的に返してきた値)が表示されます。エラーが発生した場合には、
エラーメッセージが表示されます。
実行ボタンをクリック。
もしくはCommand-R
環境設定
スクリプトメニュー
アプリケーション
ごとのScript
ユーザーScript
コンピュータScript
「構文確認」時に行われること
ifブロック、repeatブロックなどのend補足
英語大文字小文字の修正および記号の前後のスペース調整
コマンドに対するオプションを3つ以上列挙するさいの
英語ライクな列挙表記に変更
一部の記号の置き換え
Booleanを記述するコマンドオプションの表現変更
【超重要】演算の優先順位などを明示するためのカッコ("(", ")")の補足
正しいアプリケーション名の確認
フレームワークやライブラリの確認
it'sをitsに置き換え(OS X 10.10以降)
「構文確認」時に行われること
スクリプトエディタのコンパイル(構文確認)は単に、書かれたScriptを構文解釈して、中間コードに置き
換える動作だけではありません。以下のようなさまざまなチェックや書き直しが行われます。初心者の方
には「構文確認をなるべくこまめに」と指導しています。構文確認時に書き換えられた内容を確認し、そ
の書き換えられた内容が妥当であるかの判断が必要になります(とくに、計算優先順位を示すカッコ)。
ifブロック、repeatブロックなどのend補足
省略されていたtellブロック、ifブロック、repeatブロックなどの「end tell」「end if」「end repeat」など
の補足。および自動インデント。
tellapp"Finder"
end
↓ 構文確認を実行すると……
tellapplication"Finder"
endtell
多段ループであっても、
repeatwithifrom1to10
repeatwithiifrom2to200
repeatwithiiifrom1to3
end
end
end
↓ 構文確認を実行すると……
repeatwithifrom1to10
repeatwithiifrom2to200
repeatwithiiifrom1to3
endrepeat
endrepeat
endrepeat
英語大文字小文字の修正および記号の前後のスペース調整
以下のように記号の前後にスペースがなくても適宜挿入してくれます。
tellapp"finder"tosettheListto{1,2,3}
このようにカッコやダブルクォートの前後にスペースがない場合にも、
tellapplication"Finder"tosettheListto{1,2,3}
自動で調整される。ただし、変数名やコマンド名の間にスペースがない場合にはまとめて変数名として認
識されたりエラーになったりするため、このスペース調整がいつも動作することを期待してはいけませ
ん。
コマンドに対するオプションを3つ以上列挙するさいの英語ライクな列挙表記に変更
オプションが「A and B and C」と並んでいる場合に「A, B and C」と書き換えます。
ignoringcaseandhyphensandwhitespace
--処理をここに記述
endignoring
↓ 構文確認を実行すると……
ignoringcase,hyphensandwhitespace
--処理をここに記述
endignoring
一部の記号の置き換え
不等号などの一部の記号を置き換えます。
<=,>=,/=
↓ 構文確認を実行すると……
≤,≥,≠
ただし、これらの記号類はMac OS X 10.4以前(10.4を含む)の日本語環境ではエラーになるため、古い
バージョンのMac OS Xでは使用しないよう注意が必要です。
AppleScript最速マスター
実行
Hello World
コメント(注釈)の記述スタイル
数値
文字列
その他のデータ型
型変換
変数の宣言
表示
四則計算
数値のインクリメント/デクリメント
リスト
レコード
条件式
繰り返し(ループ処理)
関数=サブルーチン
スクリプト・オブジェクト
ファイル入出力
AppleScript最速マスター
他のプログラミング言語の知識をお持ちの方向けに、AppleScriptの基礎文法を手っ取り早く知っていただ
くとか、久しぶりにAppleScriptを使うような場合に思い出すことを目的に作成したものです。
この部分だけ文体を変更していますが、簡潔に記述することが目的であり、他意はありません。
説明の範囲はPure AppleScript(Cocoaの機能を使わない)の範囲とします(最後にAppleScriptObjCのサ
ンプルがやむなく出てきます)。
実行
/Applications/Utilitiesフォルダに入っている「スクリプトエディタ」を使ってAppleScriptを記述・実行・保
存を行う。 → 「スクリプトエディタの使い方」
スクリプトエディタの「実行」ボタンを押すか、Command-Rを入力する。「中止」ボタンが赤くなって
いる間は実行中。中止ボタンをクリックすると中止できる(アプリケーションの操作が終了しない場合に
は終了しないこともある)。
中止ボタンを押しても止まらず、強制終了したい場合には、Command-「.」(ピリオド)だが、スクリプ
トエディタが応答しなくなるケースもあるので、その場合には普通のアプリケーションと同様にスクリプ
トエディタを強制終了する。
Hello World
スクリプトエディタはスタイル付きテキストのエディタ+実行環境。スクリプトをエディタに記入し、コ
ンパイル(構文確認)を行い、実行するスタイル。大量に打ち込んで構文確認を行うのではなく、数行打
ち込んでは構文確認を行うとよい。
最初の儀式として「Hello World」メッセージを出してみる。
displaydialog"HelloWorld"
の1行を書いてコンパイル(構文確認)、実行を行う。ダイアログ表示される。
コメント(注釈)の記述スタイル
--行の先頭に「-」(マイナス)が2個付くと、そこから行末まではコメントとして扱われる。
#行頭に「#」(シャープ)を書くと、そこから行末まではコメントとして扱われる。
(*
複数行のコメントを記述する際には、「(*」で始まり、「*)」で終わるように文字を囲むようにする。
複数行のコメントを記述する際には、「(*」で始まり、「*)」で終わるように文字を囲むようにする。
複数行のコメントを記述する際には、「(*」で始まり、「*)」で終わるように文字を囲むようにする。
*)
数値
一般の数値(number)、整数(integer)、実数(real)が使える。「as 型」で型を指定して代入すること
も可能。ただし、数値表現の有効桁数が(いまとなっては)かなり小さく、10E10程度で指数表示になっ
てしまうので注意が必要。
setato1
setbto1.234
setbtobasinteger
–>1
setatoaasreal
–>1.0
setato“123″
setbtoaasnumber
–>123
文字列
AppleScriptの文字列はダブルクォートで囲む。文字列中の式展開は用意されていない。
タブやリターンは「\t」、「\r」などの特殊文字を使うこともできる。ダブルクォートを文字列に入れたい
場合には、エスケープ用文字のバックスラッシュ(Command-\)を直前に入れる。
setato"ぴよまる\"ソフトウェア\""
文字列同士の連結は「&」で行う。
setato"ぴよまる"
setbto"ソフトウェア"
setctoa&b
-->"ぴよまるソフトウェア"
文字列の長さをlength ofで求められる。
setatolengthof“ABCDE”
–>5
setatolengthof“あいうえお”
–>5
テキストの一部を取り出す場合には、text x ofで取り出せる。
setato"ぴよまるソフトウェア"
setbtotext2ofa
-->"よ"
テキストの一部を連続して取り出す場合にはtext x thru y ofで取り出せる。
setato"ぴよまるソフトウェア"
setbtotext1thru2ofa
-->"ぴよ"
テキストの一部を取り出す場合に、マイナスの数値を指定すると末尾からの相対位置として解釈する。末
尾は-1で表現する。
setato"ぴよまるソフトウェア"
setctotext-3thru-1ofa
-->"ウェア"
テキストを文字ごとに分解してリストに入れるためには、characters ofを使う。
setato"ぴよまるソフトウェア"
setbtocharactersofa
-->{"ぴ","よ","ま","る","ソ","フ","ト","ウ","ェ","ア"}
文字のコードを求めるにはidを使う。
setato"a"
setbtoidofa--文字コードを取得する
-->97
setato"あ"
setbtoidofa--文字コードを取得する
-->12354
数値で文字コードを指定して文字を求めるには、string idを使う。
setatostringid12354
-->"あ"
かつては、「ASCII number of 変数」で文字コードを求め、「ASCII number 数値」で文字を求めていた
が、これはあくまでもASCIIの範囲(0∼255)でしか処理できなかった。現在はid/string idの使用が推奨さ
れている。
その他のデータ型
・真偽値(boolean)
setatotrue
setbtofalse
setctonota
-->false
・未初期値(明示的に何も初期化されていないことを示す)
setatomissingvalue
・ヌルの値(値もクラスも取得できない値)
setatonull
AppleScriptで扱う「ヌル」には、長さゼロのヌル文字列("")や、要素数ゼロのヌルリスト({})などもあ
り、これらはclassを求められる。
型変換
・数値→文字列
setato1
setbtoaasstring
-->"1"
・数値→真偽値
setato1
setbtoaasboolean
-->true
・数値→リスト
setato1
setbtoaaslist
-->{1}
・文字列→真偽値
setato"true"
setbtoaasboolean
-->true
・複数の型を指定して、いずれかの該当する型に変換(OS X 10.10から)
setato1.0
setbtoaas{string,number}
-->1.0
文法編
AppleScript基本予約語一覧
コマンドリファレンス
アプリケーションへの命令パターン
AppleScript基本予約語一覧
基本的な用語についてのコマンドリファレンスを記載します。分類については、初版のものをベースにし
つつ、「コンテクストメニュー・アシスタント」のメニュー構成を考慮した内容となっています。
AppleScriptの基本用語+StandardAdditionsをおさえています。
種別
予約語
tellブロック
tell∼end tell
アクション
with timeout of, ignoring application responses, with transaction
display dialog, display notification, choose file, choose folder, choose color,
ダイアログ表示
choose URL, choose file name, choose from list, choose application, choose
remote application, say
コマンド
他の言語呼び出
copy, count, delay, get, run, set, tell, end, beep, return, log
し
do shell script, run script in
序数
first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, last, middle,
some
repeat with x in y∼end repeat,
repeat with x from a to b by c∼end repeat,
repeat∼end repeat,
制御構文
repeat∼while,
repeat∼until,
if∼then∼else∼end if,
try∼on error∼end try
文字列操作
string id, id of, offset, considering, ignoring
システム日付
time to GMT, current date(現在の日時)--ここを処理中
データ型
string, number, integer, real, list, record, true, false, date
定数
pi, return, text item delimiters, space, tab, return, seconds, hours, minutes, years
変数・プロパテ
ィ宣言
property, local, global, as
関数
random number(乱数), round
演算子
Webサービス呼
div, equal, equals, not, contain, contains, in, mod, or, and
び出し
call soap, call xmlrpc
フィルタ参照
that, whose, where, every
サブルーチン宣
言
on, to, given
サブルーチン記
about, above, against, apart from, around, aside from, at, below, beneath, beside,
無意味句
も可), under
述時の装飾用の
between, by, for, from, instead of, into, on, onto, out of, over, since, thru (through
無意味語
the
クリップボード
制御
set the clipboard, the clipboard, clipboared info
音量制御
set volume, get volume settings
スクリプトオブ
ジェクト関連
script, load script, store script
その他の予約語
continue, does, error, front, it, its, me, my, of, reference, timeout, with, without
tell
項目
内容
読み方
テル
はたらき
命令対象のアプリケーションやオブジェクトを指定します
■記述例
tellapplication“アプリケーション名”
tellオブジェクト1
tellオブジェクト2
--tell文のネスティングで階層を表現する場合
endtell
endtell
endtell
tellapplication“アプリケーション名”
tellオブジェクト2ofオブジェクト1
--「of」で階層を下から上に表現する場合
endtell
endtell
tellapplication“アプリケーション名”
tellオブジェクト1’sオブジェクト2
--「's」で階層を上から下に表現する場合
endtell
endtell
tellapplication"アプリケーション名"ofmachine"eppc://user:[email protected]"
---LAN上の他のMac上のアプリケーション(AppleScriptアプレット)の制御
endtell
tellapplication"http://yubin.senmon.net/service/xmlrpc/"
---Web上のサービス(XML-RPC)の呼び出し
endtell
tell application "Calendar"
tell calendar "ホーム"
tell every event
properties
end tell
end tell
end tell
★Click Here to Open This Script tell application "Calendar"
tell every event of calendar "ホーム"
properties
end tell
end tell
★Click Here to Open This Script timeout
項
目
読
み
方
内容
タイムアウト
AppleScriptがアプリケーションへのコマンド実行や問い合わせを行ったときに、デフォルトで
は180秒以内に結果が返ってこない場合にはタイムアウトエラーになります(AppleEvent Time
Out)。このタイムアウトを延長したり、短縮するために「with timeout of xxx seconds」と指
定できます。
は
AppleScriptの実行環境(Mac)が遅い場合には180秒よりも時間がかかる処理が発生するかもし
ら
「エラー回避」の場合には、タイムアウト時間を大きくします(3600秒とか、86400秒と
た
れません(最近は滅多にありませんが)。180秒よりも時間がかかるが、エラーにしたくはない
き
か)。想定外に遅いWiFiのネットワークにつながった、規格外に遅いNASへの巨大なファイル
のコピーなどが考えられます。
逆に、180秒よりも短く設定するのは、「処理が本当にできるかどうか分からないが、ダメなら
打ち切って別の処理を行うのですぐに見極めを行いたい」というケースです(180秒もいらな
い、10秒ぐらいでいいとか)。
--アクセスに時間のかかる(応答が遅い)外付けメディア上でのファイルの移動とイジェクト
with timeout of 3600 seconds
記
述
例
tell application "Finder"
move repList to nnFol
eject aDisk ---イジェクトする
end tell
end timeout
★Click Here to Open This Script Finder用語辞書攻略ガイド
主要アプリケーションのAppleScript用語辞書の大きさ
AppleScript用語辞書とは?
iBooks Authorにはにせものの(使えない)AppleScript用語辞書が
入っている
AppleScript用語辞書に書いてある記号
FinderのAppleScript用語辞書をながめてみよう
FinderのAppleScript用語辞書を区分
Finderの実際の機能から、用語同士の組み合わせを「推測」する
Finderを使った定型処理
①選択中のファイル/フォルダを取得する
②ファイル処理を行う
③処理結果を明示的に表示する
ファイルの存在を確認する
ファイルのラベルを変更する
ファイルの名前を変更する
処理結果が入っているフォルダを
フォルダを作成する
ファイルを削除する
ファイルを移動する
ファイルを別のフォルダにコピーする
Windowで表示する
処理結果ファイルが入っているフォル
ダをWindowで表示し、結果ファイル
を選択状態にしておく
Finder用語辞書 攻略ガイド
AppleScriptの用語辞書の参照の仕方について、どのアプリケーションを例に出すべきかいろいろ身近なス
クリプター(Scripter, AppleScriptを書く人のこと)に聞いてみたところ、真っ先に出てきたのは
「Finder」でした。
Finderの操作は、実は難易度が高く……いきなり初心者がFinderに挑むと、間違いなく討ち死にします。初
心者だったころの筆者は、Finderの用語辞書の雑多で混沌とした内容から「これはあとで手をつけた方が
いいかもしれない」と判断し、Finderをあとまわしにしました(ラッキーでした)。
そして、ふたたびここにFinderの用語辞書に立ち向かうものです。いえ、全部をなめるように完全網羅す
るのは時間の都合でできないため、どのように攻略したらよいかをご指南しましょう。
主要アプリケーションのAppleScript用語辞書の大きさ
各主要アプリケーションのAppleScript用語辞書ファイル(.sdef)の容量を比較してみましょう。
アプリケーション
容量
大きさのめやす(10KB=@)
iTunes v12.4.1
34KB
@@@
Safari v9.1.1
16KB
@
Numbers v3.6.2
21KB
@@
Pages v5.6.2
44KB
@@@@
Keynote v6.6.2
23KB
@@
QuickTime Player v10.4.0
12KB
@
Mail v8.0.0
57KB
@@@@@
Finder v10.11.4
40KB
@@@@
AppleScript用語辞書のファイル容量が大きいということは、それだけ多くの予約語が登録されていること
を意味します。つまり、用語辞書の容量が大きい=複雑で高度な機能がAppleScriptに対して開放されてい
ることになります。
Finder用語辞書の難易度については、「SafariやiTunesより複雑で、Pagesと同じぐらい。Mail.appよりは
簡単かな」という表現ができることでしょう。
そして、Finderの用語辞書が「わかりにくい」とよく言われる理由は、用語辞書の規模ではなく「パッチ
ワークのように複数の方向性の辞書が組み合わさっている」ところにあります。
①ファイルやフォルダを扱う機能
②Finderのウィンドウやアイコンの位置などを扱う機能
③未実装、レガシー系機能
この3つが入り組んでいるために、理解しにくいのです。
さらに、Classic Mac OSのFinderから引き継いだものの、時間が経過して他のヘルパーアプリケーション
(System Events)に移管されたり、命令体型の中で必要性がなくなって廃止対象になっているものや、未
実装命令(NOT AVAILABLE YET)まであります。未実装命令は、作りかけで実際には実装されていませ
ん。
Finder上のアイコンの並びをいじくったり、Windowを等間隔で敷き詰めたり、Windowを時計回りに回転
させるなどの処理は、たしかにAppleScriptでできますが……単なる遊びであり、ユーザーが本当に行いた
い処理ではないと思います。実際の利用頻度を考慮すると、①をメインに用いて、補助的に②を利用する
ぐらいです。
AppleScript用語辞書とは?
AppleScript用語辞書には、対象となるアプリケーションがAppleScriptに対して解放している機能が記載し
てあります。これは、アプリケーションの実装と関係なく書かれている「説明書」などでは決してなく、
この用語辞書自体がオブジェクトとプログラム内部機能の橋渡しを行う変換定義データです。
Twitter上で、
「用語辞書なんて関係ない、オレはオレの書きたいように書くんだ!」
と叫んでいた「ふっといユーザー」も見かけましたが、それは大きな間違いです。AppleScript用語辞書を
見ないと、初心者だろうがプロだろうが、きちんと動作するAppleScriptを書くことなど不可能です(本
当)。
そしてここが大事なところなのですが、AppleScriptや他のいかなるOSA言語でも、対象となるアプリケー
ションに対して用語辞書以上のことは記述できません。アプリケーション自体においしい機能があったと
しても、用語辞書に書いていなければAppleScriptからアクセスすることはできません。
後述する「GUI Scripting」を用いれば、メニューを強制操作したり、ボタンを押したり、画面上の文字を
読み取ったりすることはできます(普通にAppleScriptで辞書を使ったScriptingを行うよりも数十∼数百倍
遅くなります。信頼性もありません)。
でも、アプリケーションのプロパティ値を求めるとか、内部状態を取得するとか、データ内容にアクセス
するといったことはGUI Scriptingではできません。あくまでもこの、用語辞書に書いてある範囲でScriptを
記述するのが、スクリプターの腕の見せ所です。
独自マクロ言語内に記述する
AppleScript
Microsoft Excel 2011でVBAにAppleScriptを記述する
Microsoft Excel 2016でVBAからAppleScriptを呼び出す
FileMaker Proでfilemakerスクリプト・ステップに
AppleScriptを記述する
独自マクロ言語内に記述するAppleScript
各種サードパーティのアプリケーションでは、アプリケーション独自のマクロの中にAppleScriptを記述で
きるものがあります。 現時点で筆者が認識しているのはMicrosoft Office(Microsoft Excel、Microsoft
PowerPoint、Microsoft Word)とFileMaker Proです。
Microsoft Officeでは上記3つアプリケーションのうち、最もVBAによる処理が必要なMicrosoft Excelの具
体例をご紹介します。
AS
アプリ
ケーシ
Ver
ョン名
Excel
2008
Excel
2011
種別
発売
時OS
X
埋
め
込
ASOC
JXA
対応
対応
×
×
備考
み
12.x
14.x
32ビッ
ト
32ビッ
ト
10.5
×
本バージョンのみVBAの処理系
そのものが存在しません
Pure AppleScriptは呼び出せま
10.7
⃝
×
×
すが、ASOCを書くとエラーに
なります
新設されたAppleScriptTaskコマ
Excel
2016
15.x
32→64
ビット
10.10
×
⃝
×
ンドによる呼び出しにVBAのマ
クロを書き換える必要がありま
す
AS
アプリケ
ーション
Ver
名
種
別
発売
時OS
X
埋
め
込
ASOC
JXA
対応
対応
備考
み
32
FileMaker
Pro
11.x
ビ
ッ
10.6
⃝
×
×
ASOC使用不可
10.7
⃝
×
×
ASOC使用不可
ト
32
FileMaker
Pro
12.x
ビ
ッ
ト
OS X 10.10以降でASOC使用可。
32
FileMaker
Pro
13.x
ビ
ッ
10.9
⃝
⃝
ただしアプリケーション自体が32
×
ビットでビルドされているため、
64ビットのみのフレームワークは
ト
呼べません
64
FileMaker
Pro
14.x
ビ
ッ
10.10
⃝
⃝
×
10.11
⃝
⃝
×
普通にASOCが使えます。OS X
10.11以降推奨
ト
64
FileMaker
Pro
15.x
ビ
ッ
ト
普通にASOCが使えます。OS X
10.11以降推奨
ノウハウ集
AS Holeに掲載されているAppleScriptの使い方
理解しやすい(読みやすい)AppleScriptの書き方
ダイアログ表示
文字入力
特殊記号の入力方法(不等号など)
AppleScriptにおけるデバッグ
スクリプトエディタでAppleScriptを保存できなくなったときの対処
プログラムを途中で止める
データのファイル入出力
ファイル名/フォルダ名の変更
実行環境から情報を取得する(マシン環境編)
実行環境から情報を取得する(ユーザー環境編)
テキストの置き換え、全角半角変換
テキストのバイト数をかぞえる
ターミナルからAppleScriptを呼び出す
リスト(配列)処理
ソーティング
タイマー割り込み
GUI Scripting
未知のアプリケーションを操作する
AS Hole掲載のサンプルScriptの使い方
2008年3月9日に「AppleScriptの穴」(略称、AS Hole=エイエスホール)を立ち上げ、以来、開発した
プログラムの部品を掲載してきました。掲載サンプルScript数は2,000本に達する勢いです。
検索エンジンにAppleScript関連のキーワードを入れて検索すると、たいへんよくヒットします。
そんな「AppleScriptの穴」には、私のMac上の構文色分けを反映させたプログラムリストを多数掲載して
います。Blog立ち上げ時から「すぐに使えるサンプルを掲載」を標榜して、構文色分けを反映させたリス
ト+ワンクリックでスクリプトエディタに内容を転送できるリンクをつけています。
この、
ワンクリックでスクリプトエディタに内容が転送されるリンク
の存在をごぞんじない方が多数いるようなので、最初に説明しておきます。
サンプルの転送方法
例:
AppleScript名:sample
display dialog "こんにちは" buttons {"OK"} default button 1 with icon 1
★Click Here to Open This Script
「AppleScriptの穴」では、このように(↑)サンプルを掲載しています。
このリストの一番下にある「★Click Here to Open This Script」のリンクをクリックすると、その内容が
そのままスクリプトエディタに転送されるようにしてあります。
この操作はMac OS X上でのみ有効で、Safari以外のWebブラウザでも同様の動作を行います。一方、iOS
やWindowsなどの他のOS上ではエラーになります。
はじめてこのリンク(URLスキームが「applescript://」)をクリックすると、本当に転送してよいか確認
するためのダイアログが表示されます。
転送を許可すると、スクリプトエディタ上にテキストの状態で(未コンパイルの状態で)転送されます。
④自動処理の実例を考えてみる
ここまでの①∼③をふまえたうえで、このアプリケーション(MacDown)でどのような処理が可能か、ど
のような処理を行うべきなのかを検討してみます。
まず、このMacDownはユーザーが執筆用に使う<素朴な>アプリケーションなので、AppleScriptから利用
できる機能も<とても少ない>ものになっています。必要最低限ギリギリといったところです。
他のアプリケーションの書類……たとえば、PagesのドキュメントやWordのドキュメント、InDesignのド
キュメントなどを、このMacDownの書類に変換できなくはないですが、この素朴な機能のエディタ用に変
換する意味がどのぐらいあるのかは不明です。
また、selectionがないため、編集中の箇所に対してデータを付け加えるという処理も行いにくいところで
す。一応、クリップボード経由で選択範囲に対して書き換えを(コピー&ペーストで)行うという方法が
存在していないわけではありません(このあたり、GUI Scriprtingを使うかも)。
実際にMacDownを使っていて不満に思ったのは、表データのインポートです。Keynote、Pages、
Numbers上の表オブジェクトのインポート、もちろんExcelのデータについても。ありものの表を利用した
くても、機能がなさすぎて大変です。
ただ、あまり大きな表を本文中に入れられなさそうなので、最初に元データのチェックを行い、想定最大
カラム数を超えていた場合にはエラーにすることも考えたほうがよさそうです。
また、実際に使っていてとても不満があるのが画面図の本文内への挿入です。自分はDropbox上の所定の
フォルダにアップロードして、共有リンクを作成し、そのリンクURLにタグをつけて本文内にペーストし
ていますが……これは、とても面倒な作業です。
こうした実際に使ってみた上で有用性の高い自動処理を検討してみたところ……
【A例】 指定の画像をDropboxの指定フォルダにアップロードして、共有リンクを作成。リンクパラメー
タをDirect Downloadするように書き換え、クリップボードに転送
【B例】 MacDownの書類(.md)が単なるテキストなので、画像リンクの箇所をピックアップし、
Dropbox上を指し示しているURLが指定されていれば、リンク先の画像をローカルにダウンロードし、手
元の画像フォルダ(プログラム内で指定)に画像を移動させたあと、MacDown書類内のリンクを書き換
え。以下、すべてのリンクを処理
【C例】 MacDownの書類(.md)をテンポラリフォルダ内にHTML形式で書き出しして、さらにPDFに変
換。このとき、ページ分けせずに1枚ものの長いPDFにする(MacDown内蔵機能でPDF書き出ししたとき
にページ分けされるのが不満)。仲間内でチェックのため回し読みする際には、HTMLよりもPDFの方が
便利なため
【D例】 他のMarkdownエディタと細かいところで互換性がないことがわかりました。とくに、
MacDownは本文内にHTMLのタグを直接入力して部分的に装飾することが可能(本稿のプログラムリスト
部分)ですが、他のMarkdownエディタではこれをサポートしていません。HTML部分をPDFに書き出し
て、画像への参照リンクに書き出すように書き換え
【E例】 Markdownエディタの簡易タグからHTML→PDFを生成。データベースのフィールド入力時に
Markdown方式で記述しておいて、フィールドの内容をそのままHTML化してPDFに書き出し
【F例】 MacDownの書類をフォルダ分けしておくと、書類内の単語を切り出して、相互リンクを作成
【G例】 MacDownの書類をフォルダ分けしておくと、書類内の単語を切り出して、索引を自動で
(Markdown書類で)作成
【H例】 MacDownの書類内のAppleScriptのプログラムリスト部分を選択しておくと、選択部分をコピー
して(このあたり、GUI Scriptingを使用)、スクリプトエディタで構文確認し、エラーが発生しなかった
らスクリプトの内容をHTMLに変換して結果をクリップボードに転送し、MacDown書類内の選択範囲にペ
ースト
などなど、ちょっと考えただけでもこのぐらい出てきました。別の人が同じ道具(MacDown)を使ってみ
ると、また別の視点から「こういう機能があったらいいのに」と道具に不満を感じることでしょう。
さすがに、「勝手に原稿の内容を考えてくれ」とか「空を飛んでほしい」といった無茶なことは言いませ
んが、道具を使って仕事をしていると、道具に足りないところや、自分の作業のために修正したいところ
が出てきます。
そうしたときに、「道具そのもの」に手を加えることなく、道具のありようを変えてしまえる補助器具の
ようなものがAppleScriptの立ち位置なんだと思います。
与太話編
「戦場の絆」とAppleScript
「戦場の絆ポータブル」とAppleScript
戦場の絆とAppleScript
戦場の絆デビュー
「機動戦士ガンダムのモビルスーツに乗れる!」そんなアーケードゲーム「機動戦士ガンダム 戦場の
絆」が全国のゲームセンターに配備されたのは、2006年のことでした。
当時はMac業界はIntel Macでもり上がって全世界的に「お祭り騒ぎ」状態で、ゲームセンターにそんなど
えらいものが入っていたとは、まったく知りませんでした。高さ2メートル6cm、幅187cm、奥行き
173cm、重量380kg、消費電力700Wという巨大な筐体がゲームセンターに並び、2プレイ500円(当時の
価格。執筆時現在は200∼300円)もしたゲームにプレイ待ち時間が2時間以上とかいう大騒ぎになってい
たなんて!
このゲームを知ったのは、ずっと後になってこのゲームを題材とした バラエティー番組「第07板倉小隊」
を見たのがきっかけです。たまたま見つけて、サッカーの試合を見るみたいに「スゲースゲー」とただた
だ見とれるばかり。当時、すでに「戦場の絆」は稼働7年を超えたにもかかわらず大人気を博していまし
た。
やがて、そんなゲームも稼働8年を越し、さすがに「いまプレイしておかないと、もう二度とプレイでき
ないかも?」という雰囲気に。だいたい、10年間も同じゲームが稼働しているなんて話は聞いたことがな
かったからです。
実際に乗ってみると、本物のコクピットにいるような180度ドームスクリーンの大迫力の映像と音響効
果。こんな臨場感は味わったことがない、というぐらいの出来。子供の頃に「将来はこんなゲームができ
ていたらいいなぁ」と想像したままの出来栄えに、ひたすら感動しました。
■筆者の出撃の様子を写したムービー(2015年4月26日撮影、主に練習風景)
https://www.youtube.com/watch?v=85Fui9kXO5c
iOSデバイスとの連携
iOSデバイスからAppleScriptを実行する
iOSデバイス上の情報をAppleScriptから更新する
AppleScriptでiPhone経由で電話をかける
AppleScriptでiPhone経由でSMSを送信する
AppleScriptでiOSデバイスにFacetime/FacetimeAudioでアクセスする
OSデバイスをMacの外付けモニター化する
「Duet Display」のクラッシュを見張る
iOSデバイスとMacをDeskConnectで連携させる
iOSデバイスとMacをフォルダアクションで連携させる
下準備:MacとiOSデバイスをひもづけする
本章では、MacとiOSデバイス(主にiPhone)の連携を説明します。そのための「下準備」をまずはご説明
します。
Appleのサポートページに掲載されている記事「OS X Yosemite: Mac を使って電話を受ける/かける」 の
内容をご確認ください。
MacとiPhoneで同一のiCloudのアカウントを設定してあり、iPhoneにかかってきた通話をMacで受け取っ
て話ができるようになっていることを確認してください。MacとiPhoneが同一WiFiネットワーク内にいる
ことが前提条件です。
Mac側はMacBook ProのLidClosed Mode(外部モニタと外部キーボード、マウスをつないで、本体を閉じ
ている状態)では、マイクがふさがってしまいます。他の音声入力デバイスを接続するか、LidClosed
Modeを解除して本体を開くなどしてください。
Mac miniやMac Pro(Late 2013)などの音声入力デバイスが本体に用意されていないマシンの場合にも、
音声入力デバイスを本体に接続してください。とりあえず、iPhone添付のリモコン付きヘッドホンをその
ままこれらのMacにつなぐと、音声入力可能なヘッドセットとして認識されるため(→ MacでのApple
Earphone with Remote and Micの使い方)、これを使うのが手軽でいいでしょう。古いマシンではイヤホ
ン兼マイクとして認識されるかどうかは、実機で試してみないとわかりません。
筆者の手元では、MacBook Pro Retina 2012、MacBook Air 2011、Mac mini 2014で利用できることを確認
しています。
(以下、Appleのサイトより引用)
電話をかけたり受けたりしたいときに、iPhone を手に取る必要はありません。Mac を使用できま
す。電話がかかってくると Mac に通知が表示され、電話に出ることができます。
Mac では、FaceTime、「連絡先」、「Safari」、「メール」、「マップ」、Spotlight などの多くの
アプリケーションから通話を始めることができます。
Note: Mac で電話をかけたり受けたりするときは、携帯電話の通話分数が使われます。携帯電話料金
が適用される場合もあります。
Mac で電話をかけたり受けたりするには、以下のことを確認してください:
iPhone に iOS 8 がインストールされている。
Mac と iPhone が同じ Wi-Fi ネットワークに接続されている。詳しくは、Wi-Fi ネットワークに接続
するを参照してください。
Mac と iPhone が同じ Apple ID を使って iCloud と FaceTime にサインインしている。詳しくは、
Mac で iCloud を設定するおよびFaceTime にサインインするを参照してください。
Mac と iPhone の「iPhone セルラー通話」が入になっている。
Mac で iPhone セルラー通話の入/切を切り替える
「FaceTime」を開いて、「FaceTime」>「環境設定」と選択します。
「iPhone セルラー通話」を選択します。
「iPhone セルラー通話」オプションが表示されない場合は、上の要件をすべて満たしていることを
確認してから、もう一度「FaceTime」環境設定を開いてください。
通話を切にするには、「iPhone セルラー通話」の選択を解除します。
iPhone で iPhone セルラー通話の入/切を切り替える
「設定」をタップし、「FaceTime」をタップしてから、「iPhone での通話」の入/切を切り替えま
す。
このオプションが切になっていても、iPhone では引き続き電話をかけたり受けたりできます。
電話をかける
FaceTime から:「オーディオ」をクリックして過去の通話を表示するか、検索フィールドに電話番
号を入力してから「オーディオ」ボタン をクリックします。
「連絡先」から:連絡先を選択し、ポインタを電話番号の上に移動してから、「電話」ボタン をク
リックします。
「Safari」から:Web ページで電話番号を選択し、ポップアップメニュー をクリックして、電話をか
けるために使用したい iPhone を選択します。
「メール」から:メール内の電話番号の上にポインタを置いて、ポップアップメニュー をクリック
して、電話をかけるために使用したい iPhone を選択します。
「マップ」から:対象の場所を探すときに、その場所をクリックし、「情報」ボタン をクリック
し、ポインタを電話番号の上に置いて、「電話」ボタン をクリックします。
Spotlight から:Spotlight 検索フィールドに人または場所の名前を入力して、一致する検索結果を選
択します。ポインタを電話番号の上に移動してから、「電話」ボタン をクリックします。
Q&A
FAQ48∼Twitter上で答えた質問集
FAQ48∼Twitter上で答えた質問集
Twitter上では、@Piyomaruアカウントで、極力私情をはさまずにAppleScriptについて間違っている内容に
ついては「違ってますよ」とコメントし、質問については答えています(好きとか嫌いといった感想につ
いてはスルー)。そんな地道な活動により、積もりに積もったQ&Aを一挙ご紹介。
Q. Windows上でAppleScriptが動かない!
A. Windows上ではAppleScriptは動きません。
Q. 日本語で書けるAppleScriptはありますか?
A. いまはありません。Classic Mac OS 8(1997年)でAppleScriptの日本語表現は廃止になりました。
Wikipediaにいまだに日本語形式の話が掲載されており、廃止になったという情報が記載されていなかった
ため、このような話がよく出ていました(この直後、Wikipediaを大々的に書き換えてアップデートしまし
た)。
Q. Office 2008のExcelにVBAがない。すべてのVBAをAppleScriptに書き換える必要があるのか?
A. Office 2008だけVBAがないので、Office 2011や2016などの後継製品を購入するとよいでしょう。
Q. AutomatorとAppleScriptの違いがわからない
A. おもちゃでたとえると……
Automator:木で作られた幼児用ブロック
AppleScript:レゴブロック
ぐらいちがいます。
Q. AppleScriptがコンパイル言語なのに遅い!
A. AppleScriptはコンパイル型の言語ではありません。逐次解釈・実行を行う「インタプリタ型」の言語で
す。スクリプトエディタに「コンパイル」(本当の内容は構文確認+中間言語への解釈)と書いてあるの
で、こうした誤解がたまにあるようです。
Q. AppleScriptが初心者向きではないように感じる
A. AppleScriptの登場した1994年(20年前!)に想定された「初心者」のレベルと、いまの「初心者」の
エラー番号とエラーメッセージ
AppleScriptのエラーコード表
AppleScript Errors
Mac OS Errors
AppleEvent Errors
OSA Errors
AppleScriptでエラーコード表を作る
AppleScriptのエラーコード表
AppleScriptのエラーメッセージは、今日では極力「エラー番号ではなく、メッセージで」表示されるよう
になったため、エラーコード(番号)に直面することは少なくなってきました。
それでも、エラーコードが表示されるケースは皆無とはいえません。そんな時にエラーコード表を調べる
ことになりますが、それを見ても問題解決することの方が少ないため、エラーコード表の存在意義につい
て筆者は懐疑的な立場です。
とはいうものの、エラーコード表がおおやけに日本語に翻訳されたのは、
『AppleScript言語ガイド 英語表現形式』, アップルコンピュータ株式会社・著, 1997年, アジソン・ウ
ェイスレイ・パブリッシャーズ・ジャパン
『AppleScriptリファレンス』, こばやしゆたか/AppleScriptリファレンス制作委員会・著, 1999年, ソフ
トバンク・クリエイティブ
ぐらいのもので、非公式には、
『mytrans マニュアル等の個人的な翻訳』∼AppleScript 言語ガイド(2008年版 2016年改訂)​> ​3. リフ
ァレンス​> ​Error Numbers and Error Messages
https://sites.google.com/site/zzaatrans/home/applescriptlangguide/reference/aslr_error_codeshtml#//apple_ref/doc/uid/TP40000983-CH220-SW5
が個人ベースで公開されている程度です(そして最新のものでもあります)。このため、エラーコード表
自体の実用性には疑問を持ちつつも、資料としての価値は一定程度は存在するものと判断し、翻訳してみ
ました。
作成にあたっては、Appleの英語による掲載資料をもとに、これら3つを参照・比較・検証したことをここ
に明記し、各著者諸氏に感謝申し上げる次第です。
AppleScript Errors
エラ
ー番
Error message
エラーメッセージ(日本語訳)
-2700
Unknown error.
未知のエラー
-2701
Can't divide by zero.
<数> をゼロで割ることはできません
The result of a numeric
数値計算の結果が大きすぎます(整数値、あるいは実数値
号
-2702
-2703
-2704
-2705
operation was too large.
の限界を超えました)
can't be launched because it
アプリケーションではないため、<参照> は起動できませ
is not an application.
ん
isn't scriptable.
<参照> はスクリプトに対応していません
The application has a
アプリケーションの用語説明が壊れています
corrupted dictionary.
-2706
Stack overflow.
スタックオーバーフロー
-2707
Internal table overflow.
内部の表があふれました
Attempt to create a value
-2708
larger than the allowable
許容されている大きさよりも大きな値を作ろうとしました
size.
-2709
-2720
-2721
-2729
-2740
Can't get the event
dictionary.
Can't both consider and
ignore .
Can't perform operation on
text longer than 32K bytes.
Message size too large for
the 7.0 Finder.
A can't go after this .
イベントの用語説明を取得できません
考慮と無視は同時にできません。<属性>を考慮するか無視
するかどちらかにしてください
32 キロバイトを超えるテキストの処理はできません (注:現在のOSとApplerScriptでは発生しないものと思わ
れる)
バージョン 7.0 の Finder にとってはメッセージが長すぎま
す (注:Classic Mac OSのFinderのことと思われる)
この <言語要素> の後に <言語要素> を書くことはできま
せん
サポートページ
http://piyocast.com/as/asinyaye/books/
AppleScript最新リファレンス OS X 10.11対応
2016年8月15日 第1回改定(v2.0)
2016年6月25日 初版発行
著 者:長野谷隆昌(ながのやたかあき)@Piyomaru Software(Twitter:@Piyomaru)
発行者:Piyomaru Software
内容に関するご連絡先:[email protected]
カバーデザイン:長野谷隆昌
本文デザイン :長野谷隆昌
ぴよウルフイラスト:長野谷満喜子(画伯、管理栄養士)
査 読:岡本俊介(Twitter:@badcharan)、高森昭安@Piyomaru Software
作成アプリケーション:MacDown v0.6、Pages v5.6.2
作成用AppleScript:「指定フォルダ以下にあるMDとPagesをソートしてPDFに書き出す」、「ASOC
で複数ファイルのPDFを連結」、「選択した画像をDropboxにアップロードして、共有URLをクリップ
ボードに転送」、「Excelの選択範囲を取得してMarkdown書式の表に変換する」、「指定フォルダ以
下にあるMDとPagesをソートしてPDFに書き出して連結 v3(連続複数出力可能、末尾空白ページ削
除)」ほか
Fly UP