![見出し画像](https://assets.st-note.com/production/uploads/images/171852364/rectangle_large_type_2_8453186bc65b9f5dc307c9b2d54a4524.jpeg?width=1200)
スクリプトエディタをAppleScriptから操作するハウツー本
macOS標準搭載の、AppleScriptを記述・実行・各種形式で書き出す「スクリプトエディタ」。これ自体、AppleScriptからの操作が行えるようになっています。このやり方について基礎から超上級の内容まで解説する電子書籍を刊行しました。
スクリプトエディタの動かし方
あらためてご説明。
本書は、AppleScriptを記述・実行するmacOS標準装備のアプリ「スクリプトエディタ」をAppleScriptから操作する方法について、基礎から超上級の内容までわかりやすく解説している電子書籍です(PDF 全570ページ、付録ScriptZipアーカイブ添付)。
https://piyomarusoft.booth.pm/items/6521562
今回も、例によってすべてのページをMac上でPagesで作っています。
「スクリプトエディタ」をAppleScriptから操作する、という言葉が予想以上に通じないので、困ってしまうところです。
なんでそんなものが必要なの?
AppleScriptを大量に書いていると、AppleScript自体をAppleScriptで解析する必要が出てきます。解析して、書き換えてフォーマット(冒頭のコメント部分)を整えるとか、呼び出されているハンドラ名の一覧をリスト化したいとか、使われている変数名を別のものに一括で書き換えるとか。
プログラムの内容を単純に文字置換してしまったら、コメントやメッセージ、文字定数など「置き換えてしまってはいけない内容」まで置き換えてしまいます。AppleScriptの各種構文要素を区別して、変数名だけ置換するとか、ハンドラ名だけを置換するといった操作は絶対に必要です。
本書には掲載していませんが、AppleScriptでAppleScriptのプログラムを解析して、どのようなハンドラの呼び出し関係になっているかとか、そういうマップを自動で生成するAppleScriptも書いて、他人の書いた長いScriptを分析するのに便利に使っていました。
そういう処理を2000年代初頭から行なってきて、そのノウハウが膨大な量になっていました。また、自分ひとりで1つの系列の技術を作ってきて、自分のためにだけ役立ててきました。Blogにタダで掲載するのは嫌ですが、電子書籍で対価を得られるのであれば問題ないでしょう。
内容ご紹介
いきなりハイエンドな内容を展開してしまうとついてきていただけないので、地道にスクリプトエディタの使い方から紹介をはじめます。
AppleScript書類のファイルオープン、内容の取り出し方などを説明しつつ、テキストでAppleScriptを組み立て、構文確認やコンパイル(中間言語への変換)なども行います。macOS 10.14で「execute」コマンドが廃止されたので、他の方法を用いてAppleScriptから他のAppleScript書類を実行する方法をご紹介します。
![](https://assets.st-note.com/img/1737958388-wFePI23zrxW8h0QtM4GbpJTO.jpg?width=1200)
ついで、AppleScript書類の文法要素ごとの区分けや要素のピックアップ方法について、技術レベルが高くない方法(昔使っていた)から、Cocoaを呼び出して処理する方法までそれぞれ具体的なScriptを掲載・収録しています。
![](https://assets.st-note.com/img/1737958418-5ipMVyRFAXSxvumqIw4o2fK3.jpg?width=1200)
![](https://assets.st-note.com/img/1737958440-Hkdqc702NtjMxi1p9mOlGWfz.jpg?width=1200)
アプリのAppleScript用語辞書を解析して、コマンドやオブジェクトの有無を取得したり、用語辞書に掲載されている用例のScriptを個別のHTMLとして書き出すScriptなども紹介。
![](https://assets.st-note.com/img/1737958473-1udFknmMJxs9cA6z0Clr32gi.jpg?width=1200)
![](https://assets.st-note.com/img/1737958508-M4QLuNqj0icwK9lTRb8CDSkJ.jpg?width=1200)
スクリプトエディタの機能を拡張するスクリプトアシスタントの書き方や、最初から用意されているScriptテンプレートについて、ひととおり解説を加えます。
対象読者
本書の内容を苦もなく読みこなせたら「名人」といってよいレベルだと思いますが、そこまで行かなくても内容を利用してよりMacの環境を便利に使うことであれば、そこそこのレベルのユーザーでも可能なことでしょう。
![](https://assets.st-note.com/img/1737958885-UkM1HOnyW64YIGfzhbRgNlAB.jpg?width=1200)
![](https://assets.st-note.com/img/1737958917-7n4w5Rp8KSgbfDzmsyl29he0.jpg?width=1200)
ただし、本書では「AppleScriptは何か?」「AppleScriptをどのように書けばよいか?」というレベルの解説は一切行っていないため、そのあたりはすでにクリアされているか、内容がどうであってもただ呼び出して実行するだけだろうと気にしない方が対象になることでしょう。
目次
1章 スクリプトエディタの使い方
AppleScript関連開発ツール一覧
スクリプトエディタの使い方
スクリプトエディタの場所
スクリプトエディタのメインウィンドウ表示
おおまかなスクリプトエディタの使い方
スクリプトエディタの各種ボタンについて
設定(一般)
設定(一般>スクリプトメニュー)
設定(編集中>コードの補完)
設定(編集中>行の折り返し)
設定(編集中>フォーマット)
設定(フォーマット)
スクリプトアシスタント
ファイル>新規
ファイル>用語説明を開く...
ファイル>保存
ファイル>書き出す...
編集>検索
表示
スクリプト
その他
ヘルプ
2章 スクリプトエディタのScripting概要
スクリプトエディタのバージョンアップ履歴
機能ごとに見るスクリプトエディタの用語辞書
AppleScript用語辞書を処理
例 AppleScriptで用語辞書を処理して表にした「Skim」アプリの Commandの変遷
スクリプトエディタのScriptingを行う道具
applicationオブジェクトのScripting
3章 documentオブジェクトのスクリプティング
documentオブジェクトのスクリプティング
documentのオープン
documentのクローズ
documentをカウント
documentの各種属性値を取得
documentの存在確認
documentの新規作成
documentの印刷
documentの保存
documentの構文確認とコンパイル
windowオブジェクトのスクリプティング
windowというオブジェクトの特徴
windowでアクセスできるスクリプトエディタ上の要素
4章 textオブジェクトのScripting
行単位の分解を行うparagraphs
単語単位の分解を行うwords
文字単位の分解を行うcharacters
選択範囲を取得する際にtext classを活用
AppleScript書類から文字書式を取得
5章 AppleScriptの作成とコンパイル(構文確認)
AppleScript自動作成の歴史
ステップ1 文字列としてScriptを組み立てる
ステップ2 新規AppleScript書類を作成し、本文を指定して入れる
ステップ3 作成したdocumentの構文チェックとコンパイルを実行
ステップ4 パスとタイプを指定してAppleScript書類を保存
AppleScriptの実行
方法1:GUI Scripting経由でメニュー操作して実行
方法2:スクリプトエディタに最前面の書類のパスを問い合わせてload script+runコマンドで実行
方法3:スクリプトエディタに最前面の書類のパスを問い合わせてCocoaの機能を用いて実行
AppleScriptアプレットの生成
コラム アプレット自動生成とコード署名
AppleScriptアプレットのサンドボックス化
本サンドボックス化Scriptにおける許可/禁止指定項目
6章 スクリプトアシスタントの活用と作成
スクリプトアシスタントの活用と作成
スクリプトアシスタントはスクリプトエディタ操作の主要な用途
タイプ1 現在のカーソル位置にテキストを挿入
タイプ2:カーソル位置に呼び出しコードと呼び出すハンドラを挿入
タイプ3:選択範囲のテキストを解析して変更し、選択範囲に書き戻す
スクリプトアシスタントを自分で作る
7章 スクリプトメニュー
メニューから呼び出すAppleScript実行専用プログラム
3種類のScriptフォルダ
スクリプトメニューのこまかいノウハウ
サブメニューを表示する方法
実行するAppleScriptにファイルを受け渡す方法
スクリプトメニューのAppleScript実行に使われるプログラム
スクリプトメニューから呼び出したAppleScriptの停止方法
アプリケーション独自で実装しているスクリプトメニューとの相違点
スクリプトメニューの特殊なショートカットキー
スクリプトメニューと他のアプリ内蔵メニューにおける利用可能技術のちがい
8章 スクリプトエディタのURL Events
スクリプトエディタのURLスキームapplescript://
ローカルでもアプリ内でURL Eventsを利用
インターネット上のコンテンツとスクリプトエディタ間の通信
9章 AppleScript用語辞書の処理
指定したバンドルIDのアプリのSDEFを指定フォルダに書き出す
バンドルIDで指定したアプリ内部のsdefファイルからコマンドを抽出
Bundle IDで指定したアプリ内部のsdefファイルからオブジェクトを抽出
アプリから書き出したsdefファイルをxincludeを考慮しつつ読み込み
アプリから書き出したsdefファイルから用例を個別のHTMLに書き出す
10章 AppleScript構文要素の文字書式による判別
スクリプトエディタの書式つきテキスト機能を用いた要素判別
スクリプトエディタを操作して、AppleScript構文色分け設定情報を取得
Cocoaの機能を用いた構文要素情報の読み込みと判定
plistファイルからAppleScript構文色分け設定情報を取得
com.apple.applescript.plistファイルから書式情報を取得
指定のAppleScriptのソースコードからコメント部分のみを取得
指定のAppleScriptのソースコードからProperty部分のみを取得
指定のAppleScriptのソースコードからCocoa Property部分のみを取得
指定のAppleScriptのソースコードからハンドラ名のみを取得
指定のAppleScriptのソースコードから変数名のみを取得
指定のAppleScriptのソースコードからアプリ名のみを取得
指定のAppleScriptのソースコードからscript object名のみを取得
指定のAppleScriptのソースコードからCocoaメソッド名のみを取得
指定のAppleScriptのソースコードからアプリ名のみを取得
最前面のAppleScriptの選択範囲からコメント部分のみを取得
最前面のAppleScriptの選択範囲から変数名のみを取得
指定フォルダ以下のAppleScriptの冒頭のコメントをさしかえ
スクリプトエディタで選択中の範囲を画面上の描画幅でソートして書き戻す
スクリプトエディタで選択中の範囲の変数名を置換
指定したAppleScript書類中の変数名を置換して新規書類に
スクリプトエディタの最前面の書類で選択範囲に対して、書式情報にもとづき変数名を置換して書き戻す
11章 Cocoa系サンプルAppleScript
ASを扱うOSAScript.Framework
指定のAppleScript書類がCocoa ScriptかVanila Scriptかを判定
指定のAppleScript書類の記述OSA言語名を取得
指定のAppleScript書類を実行する
指定のAppleScript書類を実行して実行結果をプレーンテキストで取得
指定のスクリプトバンドル書類を同階層にスクリプト形式で再保存
指定のスクリプト書類を同階層にスクリプトバンドル形式で再保存
AppleScript書類のソースコードをRTF形式で書き出す
AppleScript書類のソースコードをHTML形式で書き出す
AppleScript書類のソースコードをPDF形式で書き出す
デフォルトのOSA言語名を取得
指定の AppleScript書類がコンパイル(構文確認+中間言語化)ずみかどうかを取得
指定のAppleScript書類のソースコードのテキストを取得
指定のAppleScript書類をアプリ(アプレット)形式で保存
指定のAppleScript書類を常駐型アプリ(アプレット)形式で保存
指定のAppleScript書類をアプリ(アプレット)形式で保存。スタートアップスクリーン(「説明」欄の内容)を表示
12章 Scriptテンプレート解説
唯一価値のあるテンプレートCocoa-AppleScript Applet
Cocoa-AppleScript Appletが実現できること
macOS 12.6以降のCocoa-AppleScript AppletはRosetta環境でのみ稼働
13章 AppleScript予約語一覧
tellブロック
アクション
ダイアログ
コマンド
他の言語呼び出し
序数
制御構文
文字列操作
システム日付
データ型
定数
変数
関数
演算子
パス関連
ファイル
ローカライズ
Web関連
フィルタ参照
サブルーチン
無意味語
クリップボード
音量制御
スクリプトオブジェクト
その他
あとがき