WebP、WebM、VP9などのデータフォーマットに対応したSafari v14がmacOS 10.14.x、10.15,x向けに配信されました。macOS標準のソフトウェアアップデート経由でアップデートできます。
AppleScript用語辞書(sdef)を前バージョンの13.1.3と比較してみたところ、とくに差異はみあたりません。
Mac App Storeで、Piyomaru SoftwareによるMac用アプリケーション「Double PDF」の新バージョンv2.0をリリースしました。100% AppleScriptで記述しています。
本バージョンは、macOS 10.13においてScripting Bridge経由でPDFViewを正しくアクセスできないバグが発生している症状を回避したものです。表示中のページ管理などをすべてアプリケーション側で行うことにより、機能の回復を実現しました(書いていて情けない)。
v1ではGPUImage.frameworkを利用して画像処理していましたが、これを取り外してすべてAppleScriptで処理するように変更しました。
■v2.0の追加機能
・ダークモード対応
・画像比較時のカラーモード追加(従来はグレースケールのみ)
・30言語に対応(English, Catalan, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Norwegian Bokmål, Polish, Portuguese, Romanian, Russian, Simplified Chinese, Slovak, Spanish, Swedish, Thai, Traditional Chinese, Turkish, Ukrainian, Vietnamese)
・Unicode文字の「Zero Width Space」削除機能を追加
■v2.0の修正機能
・順次Diffチェック時に、アプリケーションアイコン上に描画するプログレスバーの進捗度が間違っていたのを修正
ぴよまるソフトウェアの宣伝のために配布しているCotEditor PowerPackですが、アプリケーションに現代のAppleScriptのパワーを足すとヤバいことがいろいろできるという実例になっています。
ただし、「アプリケーション内蔵メニューから呼び出す」Scriptにはセキュリティ上の制約やアプリケーション側のポリシーによる制約が大きく、いろいろボツにしたものがあります。
一応、CotEditor内蔵のScript Menuからバンドル形式のScriptは呼べるのものの、Script Libraryを入れて呼ぶようなことはできません。そのため、Windowの回転Scriptなどはライブラリの三角関数を呼び出していたため、その部分だけ切り出してScript内からサブルーチンとして呼び出せるようにしておきました。地図表示のScript(ぴよまるソフトウェアの最寄駅表示)も、本来はchoose locationライブラリを用いていたものを、ライブラリ化しないでScript内に展開(内容をコピペ)しました。
アプレット形式(.app)のScriptの呼び出しが許可されていない(CotEditor側のポリシーの問題)ため、サードパーティのプログラムをCocoa Frameworkとしてビルドした外部Frameworkをバンドル内に入れて呼び出すことができません。この制約は割ときつくて、たいへんよく利用するBridgePlus Script LibraryのようにFrameworkをバンドル内に含むライブラリも呼べません。そのため、BridgePlusに依存している処理をAppleScriptのみで処理できるルーチンに差し替えたりしました(2次元配列のソートなど)。
辞書.appの辞書で慣用句をキーワード検索するなどのScriptや、HTMLを解析してデータを取り出すScriptは強力で役に立つのですが、Applet(.app)形式のScriptの実行が許可されないかぎりCotEditorのScript Menuからは呼べません。
Safari上の表オブジェクトをCSV化してCotEditor上に展開するScriptなどはたいへん実用性もあり、いいと思うものの、HTMLReader.frameworkなしには実現できないので、ボツになりました(個人的には使っています)。
ただし、Frameworkを含んだAppletも、OS標準装備のScript Menu側からは呼べるので、別途そういうものを企画してみてもよいのかもしれません。
これは、技術的な問題ではなく運用上の問題なのですが……REST APIを呼び出すようなものは収録を見送りました。たいていのREST APIは呼び出し用のキーが必要なわけですが、それをどーやって各ユーザーに取得してもらって、かつプログラムの中に記入してもらうかなど、説明し切れない(もうちょっとスマートに利用できないと説明がつらい)と判断して割愛しました。
文字コードがらみのものは難しいものがあります。1つは、選択中の文字列の16進ダンプScript。UnicodeのNormalizeの方式の違いにより㍿などの文字のデータの持ちかたが変わってくるので、個人的にはたまに使っていますが、CotEditorの文字コードまわりの命令が動いていないので(GUI側からは機能している)そのあたりをつつきたくなかったということはあります。あと、闇が深そうですし。
「こういうのがあったらデモとしても面白い」と、思ったものはいくつかありましたが、技術的に可能であっても、仕様を決めにくいものや公開しにくいものについてはボツにしました。
たとえば、選択中の文字を画像化してAirDropで近隣のマシンに転送するScriptを企画してみたのですが、文字数に応じてフォントサイズを可変とするなど、いろいろ実現のためのアイデアは持っていました。とはいえ、実際に作ろうとすると「ちょっとしたデモ」の範疇を超えるぐらいの手間がかかるため、ボツにしました。
opensslで選択中のテキストを暗号化するScriptも、かなり昔から使っているものがあるので、実用性で考えるとあったほうがいいものです。ですが、実際にPiyomaru Softwareのアプリケーション内部で利用しているものなので、そのものを単体で配布することはためらわれたため、ボツにしました。
普段使っていないアプリケーション(Google ChromeとかPowerPointとか)をコントロールするものも割愛しました。作ろうと思えば作れるものの、何か問題が起きて書き換えたほうがいいという話になっても、日常的にいじくっていないと問題点が把握しにくいところです(Keynote v9.1で表オブジェクトの作成に問題があるバグとか、日常的に使っていないと見つかりません)。
CotEditorの関連ScriptをまとめたScript Pack v1.2の配布を開始しました。無償、無保証、サポートなしで提供しています。CotEditor 3.8+macOS 10.14/10.15にて検証を行っています。
基礎的なサンプルScriptの「Basic Pack」、強力なユーティリティScriptの「PowerPack」から構成され、今回アップデートしたのはPowerPackです。
CotEditorのスクリプトメニューにインストールして使うためのScript群です。
アップデートしたものをご紹介いたします。
macOS 10.15で「ヒラギノ角ゴ W3」がバンドルされなくなった(ヒラギノ角ゴシック W0〜9に集約)ため、「ヒラギノ角ゴ W3」を指定していたScriptを「ヒラギノ角ゴシック」に変更しました。
Wikipedia検索、各種データ検出、各種データ変換、指定文字数で擬似要約 などを追加しています。
「指定範囲から電話番号を検出してiPhoneで電話をかける」「選択範囲をメモ(Notes.app)経由で転送」を収録しています。
電話発信時の「発信」ボタンはご自分でクリックしてください(AppleScriptから無理やりクリックできないこともないですが………)。
CotEditorのテキストで選択中の文字をキーにしてSpotlight検索を実行、結果はFinderで表示します。
「HTMLソースを読み込み」「本文テキストを読み込み」を追加しました。Safariでオープン中の最前面のウィンドウの内容を取得します。
「インデントを反映させてKeynote書類を新規作成」「選択範囲をインデントを反映させて現在のKeynote書類にスライド追加」を追加しました。CotEditor上のテキストをもとにKeynoteのプレゼンテーションを作成します。
指定のPDFから各種情報を読み込んで、CotEditorの新規ドキュメント上に情報を展開します。「指定ページの本文テキストを読み込む」「全ページの本文テキストを読み込む」「全ページのURLリンクを読み込む(http、https)」「全ページのURLリンクを読み込む(mailto)」「TOC(Table Of Contents)読み込み」を追加しました。
その他、ちょっとしたPiyomaru Softwareのおしらせ的なメニューを入れておきました。
CotEditorの関連ScriptをまとめたScript Pack v1.0の配布を開始しました。無償、無保証、サポートなしで提供しています。
2019/10/04 アップデートしてv1.01になりました(外部ライブラリを参照していたScriptが1本あったので、スクリプトバンドル化して、ライブラリをバンドル内に入れるように修正しました)
CotEditorのスクリプトメニューにインストールして使うためのScript群です。
Piyomaru Softwareが「こういう機能がテキストエディタに標準装備されていてほしい」と思ったものを、自分でAppleScriptで実装したものです。つまり、毎日実際に使っているものです。
・カウントレポート
テキストエディタ上で日本語の文章を書くときに重要な、漢字、ひらがな、カタカナ、特殊記号、英字などの文字種別ごとの使用比率の集計を行います。読みやすい文章を心がける人には、これらのバランスはたいへん重要な情報です。
ただし、ここで表示している原稿用紙換算の枚数計算は単純な目安であり、実際に原稿用紙に文字を記入して改行や禁則処理を考慮した詳細なシミュレーションは行っていません。厳密に計算する場合には同梱の「原稿用紙枚数シミュレーション」のScriptを使用してください。
・AppleScriptとして解釈
さまざまなテキストエディタが擬似的な書式色分けの機能を提供していますが、実際に構文確認を行ったり、結果を取得するような機能を提供しているものはありません。
本Script集のScriptはほぼスクリプトエディタと同様の構文確認(短縮表記の展開、エラー検出)、実行時の結果取得などの機能を提供します。Cocoaの機能を利用するAppleScriptObjCのプログラムも実行できます。
※ 実行のためには、CotEditorの対象ドキュメントのシンタックスカラーリングを「AppleScript」に設定しておく必要があります
▲構文確認して短縮表記や省略表記の展開、インデントやスペース挿入などを実行
▲スクリプトエディタと同等の結果出力(Cocoa Objectは結果出力に出してもスクリプトエディタ同様に読めません)
▲ウィンドウを生成してユーザーの操作を受け付けることもできます。Script Menuから実行するよりもなぜか高機能
・選択範囲を処理
選択範囲に対してさまざまな処理を行います。コメント/アンコメント(コメント解除)は、あらかじめ書類のシンタックスカラーリングをプログラミング言語のものにしておく必要があります(コメント記号が言語ごとに違うので)。
・音声読み上げシミュレーション
CotEditor上のテキストを実際に読み上げた場合の読み上げ時間の計算を行います。ゆっくり読み上げた場合と、速く読み上げた場合の時間をCotEditorコンソールに出力したりします。
・選択中の文字から花文字テキストを作成
選択中のテキストの先頭の1文字から花文字テキストを作成します。
・Flower Text From Selection
選択中の英単語から花文字テキストを作成します(Courierなどの等幅フォントで表示してください)。
・原稿用紙枚数シミュレーション
テキストの400字詰め原稿用紙換算の枚数シミュレーションを行います。
・Window回転
CotEditorのウィンドウを10回3回まわします。とくに意味はありません(新しいMacを買ったときに自己満足で回してみるとか?)。書き換えできるので心ゆくまで回してみてください。
→ Demo Movie
・青空文庫
青空文庫のテキストを処理するサンプルです。数百Kバイト級の比較的大きなテキストをAppleScriptで高速処理するサンプルです。
・文字種別を指定して加工、別ドキュメントへ出力
特定の文字だけ抽出したり削除したりするAppleScriptのサンプルです。
CotEditorの基礎的なScriptingの参考となるサンプルScriptです。40本以上のScriptをジャンルごとに区分けして、難易度順に番号を振ってあります。
macOS 10.13「macOS Vista」の出来がひどかったので、試験環境にのみ入れただけで、メイン環境には入れていませんでした。macOS 10.14は長らく開発環境にのみ入れて、メインマシンの環境はずっと10.12のまま。
ただ、時間の経過とともにmacOS 10.12はセキュリティー系のサポート(OSに穴があった場合にアップデート)が切れたので、やむなくOSのアップデートを行うことに。
問題はアップデート先のOSバージョン選定です。
macOS 10.13:史上最悪。天地がひっくり返ってもあり得ません
macOS 10.14:10.13の印象が悪すぎたおかげで好印象。ただし、10.13のように毎日問題を起こすような問題児ではないというだけで、開発に使わなかった機能は未検証
という評価。macOS 10.15Betaも隔離環境にインストールしてありますが、Beta 6あたりからおかしな挙動が増えてきて、「とても常用できない」という結論に。この期におよんで新機能の追加まで行って、どういうつもりなんだかよくわかりません。
というわけで、10.15も問題児のようなので、消去法で10.14に移行しました。最近のmacOSは一般リリースが公開βみたいな品質なので、最新OSを使うことがリスクになりつつあります。
メイン環境にのみ入れて使っているメールの整理を行うボットScript群は、もともとASObjcExtras.frameworkを呼び出していたのですが(もっと以前に書いたので)、BridgePlusを呼び出すように書き換えてScript DebuggerからExtendedアプレット書き出しして(アプレットに組み込んだFramework呼び出しができるのは、このExtendedアプレットとXcode上で作成したCocoa-AppleScriptアプリケーションのみ)動かしています。
macOS 10.13以上で動作するiWorkアプリケーションの最新版がアップデートしました。
Keynote v9.1、Pages v8.1、Numbers v6.1です。
AppleScript用語辞書を書き出して比較してみましたが、用語辞書に変更は一切ありません。
ただし、アプリケーション自体には大幅に機能追加が行われており、ちょっと前までの停滞しまくっていたiWorkアプリケーションとは思えないほどの強化ぶりです。
Photos.app以外でははじめて顔認識の機能が(Apple純正アプリでは)利用され、写真を配置する際に顔認識して配置するとか、ページ間リンクを張るさいにブックマークを挿入(他のアプリケーションで言うところの「アンカー」ですね)したりと、アプリケーションとしてまっとうな機能アップが行われたように感じられました。
Web上で各種自然言語処理/機械学習系REST APIを提供されてきた「Apitore」さんが、2019年5月31日をもってサービスを終了するとのことです。
機械学習系のサービスについては、1つのサービスを提供するために8GBのメモリ容量を持つインスタンスを占有して回し続けるなど、単なるBlogなどとは比較にならないほどサーバー側の資源が要求されることも実感できました(そんなの、クライアント側でそのまま実装は無理じゃん! ^ー^;)。
機械学習モデルを利用して演算(判定など)を行うことは、IoT機器ぐらいでもできるので、そんなに計算機資源は必要とされませんが、機械学習モデルを作る(学習する)局面においてはそのかぎりではないということを実感できました。
学習モデルのメンテナンスも割と頻繁に行いつつ、極性判定で得られる演算結果を検証したりと、「個人で片手間でやるには手間がかかりすぎる」と思っておりました。
ApitoreさんのサービスではじめてKuromojiによる形態素解析サービスを使ってみて、コマンド解析用にも使い勝手がよかったのが印象的です(Kuromoji使ったことなかったもんで)。極性判定やWord2Vecあたりは、正直なところ、学習データの傾向が自分の用途とは合わなかったりで実用性はいまひとつでしたが、実際にそうしたサービスに触れてクオリティのレベルを体感できたのはよかったと思っています(いまだとwordどころかphrase2vecとか出てきています。doc2vecとかもやってるんでしょうね、、、、 ^ー^;)。
運営のご苦労はいろいろ伺っており、インフラ系のサービスって個人で提供し続けるのは大変なんだなーということと、Twitterなど各種サービスやRSS系のフィードなど代わりのものがないので、困ってしまうところです(^ー^;;。
実際の仕事でもApitoreのREST APIをいくつか使用している案件があるので、どうするのかといったところですが、本Blogに掲載しているREST API呼び出しサンプルはそのまま掲載しておきます。
知り合いの本Blog愛読者の方々から「アーカイブ本まだ?」と言っていただいて幾星霜。ちょっと手が空いてしまったので、Blogアーカイブ本に着手しました。ここに、Blogアーカイブ本のVol.4(2011〜2012年)の発売をお知らせいたします。
本Blog「AppleScriptの穴」は、開設10年目を迎える直前の2018年1月末に、格安ホスティングサービス「Xserver」との間の手違いでDBがシャットダウンされ、そのままの形で公開し続けることができなくなってしまいました。
そこで、AppleScriptのプログラムによるFinder上のAppleScriptの自動HTML化、AppleScriptによるXML-RPC経由でのWordPressへの自動記事投入といったさまざまなソリューションを投下して、現在の登録記事数に復旧。自動記事投入による復旧を行なったために、当時の作業環境でオープンできない(OSバージョン依存、アプリケーション依存)Scriptについては掲載を見送っています。
旧AppleScriptの穴:2008〜2018年 Mac OS X 10.4〜10.5の時代に開設
現AppleScriptの穴:2018年〜 Cocoa APIを呼びまくる現在のスタイルが定着
自動投入可能なコンテンツを優先して掲載したため、旧Blogと現Blogでは掲載内容が大幅に変わっています。別物といってよいでしょう。
そのため、Cocoa APIを使用しない「オールドスタイルのAppleScript」については再掲載が難しく、このBlogアーカイブ本シリーズにしか情報をまとめていません。
旧Blogアーカイブ本シリーズも、1年ごとに区切って記事をPDF化して4冊目。この頃の記事投稿数が少なかったので、Vol.4は2011年1〜2012年12月の2年分の内容をまとめています。全450ページ、2,000円。ファイル形式はPDFで、キーワードによる全文検索や印刷が行えます。
また、OS X 10.8のAppleScriptに巨大なバグが存在しているため、巻頭にてその内容や回避策についての解説を行なっています。
もちろん、各プログラムリスト末尾にURLリンクをそなえ、ワンクリックでプログラム内容をスクリプトエディタに転送可能です。
ほとんどの掲載プログラムについてコメントを行い、現時点(2019年時点)で評価してどうか、ということを追記しています。
リスト同士のdiffをとる
日本の月呼称を返す
指定の月を1月分リスト化
指定日がその月の中で何週目かを求める
指定日がその月の中で何週目かを求めて、週リストを取得する
与えられたリストに、値がヌルの要素が入っているか判定し、フラグ、ブランク開始終了位置を返す v2
iCalで選択中のイベントのカレンダー情報を取得する
画面の解像度を取得するv3
画面の解像度を取得するv4
シェルソートでリストをソート
Numbersでtableの縦サイズをふやす
リストで与えられたデータの変動ベクトル方向を取得する
Photoshopでオープンしている画像から、選択部分のサイズをもとに画像分割を行う
フォルダ内の画像ファイルを順次Numbersのセルに貼り付ける
2行に別れているデータを1行分にまとめる
指定年のすべての日付をdateオブジェクトで取得する
指定のテキストをAppleScriptとしてコンパイルし、実行可能なアプレットとして出力する
サウンド入力元、出力先の名称をリストで取得する
サウンド入力元、出力先を設定する
サウンド入出力の選択中の項目名を取得
InDesign CS3でBookを作成するテスト
Mail.appでメールの送信(プレーンテキストへの変換つき)
分布リスト作成 v1
入れ子のリストをタブ区切りのテキストに
コードのチェック
数値リストを連続部分に分解する(アイテム番号を返す)
数値リストを連続部分に分解する(データを返す)
AppleScriptによる並列処理 v2
AppleScriptによる並列処理 v2〜実際に使ってみての評価
スリープ復帰日時を設定する
ファイルのファイル名を求める
AppleScriptによる並列処理v3a
QuickTimeムービーの縦横ドット数を取得する
iTunes 10.3β AppleScript用語辞書に変更なし
リスト中の値が連続する箇所をアイテム番号のリストで返す
FileMaker Proで書き出したTab区切りテキストファイルをExcelで読み込む
リスト中の値が連続する箇所をアイテム番号のリストで返す v2
Keynoteの各slideのtitleで、同じものが続く箇所に連番を振り直す
指定のデジカメ画像のExif情報から指定のプロパティを取得する
SIGMA Raw画像からメーカーと機種名を取り出す v2
子番号を考慮しつつ、新しいファイル名を返す
文字列末尾からスペースを削る
指定アイテム以降は指定アイテム目に改行で区切って連結する
指定矩形内に含まれるデータをアイテム番号で返す
数字の文字が入っているかどうかをテストする
文字列の先頭と末尾に指定文字が存在した場合にはトリミングして返す
Photoshopで指定座標のカラー値をRGB値で返す
Safari 5.1でWeb検索
OS X 10.7, Lionへの移行について
リスト同士の引き算、足し算
印刷可能なプリンタ一覧から選択してプリント実行 10.4〜10.7
1〜指定数までの乱数を返す、ただし別途指定の数(aException)を除く
指定フォルダ内のPDFの1ページ目のみ取り出して別フォルダに保存 v2
TextWranglerで連続置換を指定フォルダ内のhtmlファイルに対してすべて実行
Mail.appで添付ファイルを指定してメール送信
文字列中に指定文字が何個入っているかカウントする v2
Safari 5.1.1、iPhoto 9.2が登場。AppleScript用語辞書に変更なし
指定アプリの指定タグの文字列をアプリ内のLocalizableStringsから取得する
指定アプリの指定タグの文字列をアプリ内のLocalizableStringsから取得する v3
投稿も受け付けています
Excel 2011で表示中のワークブック内のすべてのシートの表示状態を変更する v2
XcodeのAppleScript用語辞書の変遷
Xcode 4.2.1、iTunes 10.5.1登場。AS用語辞書に変更なし
OmniGraffleで指定書類からURLつきの画像の情報を集める
OmniGraffleで指定文字を名前に含むドキュメントをオープンしているかチェック
指定名称のOmniGraffle書類中に、urlListで示した名称のCanvasが存在するかを取得する
指定名称のOmniGraffle書類中に、urlListで示した名称のCanvasが存在するかを取得する v2
与えられたリスト中のfalseの項目番号をリストで返す
OmniGraffleで指定ドキュメントのWindowを求める v2
OmniGraffleで表示中のCanvasを切り替えてループし、各Canvasの表示倍率を取得する
OmniGraffleで表示中のCanvasを切り替えてループし、各Canvasの表示倍率を設定する
OmniGraffleでcanvas名一覧を取得する
OmniGraffleで画面設計図のCanvas名称をクリーニングする
OmniGraffleで指定名称の書類の現在表示中のCanvas上から、URLつきの画像(Solid)の情報を集める
OmniGraffleで選択中のグラフィックのサイズを50%にする
Safari 5.1.2、AppleScript用語辞書に変更なし
OmniGraffleで各ページに用意したtitleから、目次を作成する
リストから指定のアイテムを削除する(1項目)
Canvasの大きさを取得(Pointで返る)
リンクつき目次を作成する v1
現在表示中のCanvasに存在しているラインのうち青いものに影を付ける
通常版のOmniGraffleでProfessional版でしか作れない「表」を作る
最前面のドキュメントの全Canvas上のグラフィックがそれぞれグループ化されていないかチェック。されていなければグループ化
Numbersで選択中のデータをもとにOmniGraffleの選択中のグラフィックのサイズで表作成
「A x B = C」の数の組み合わせを求める
「YxX」の形式の文字列を、{Y,X}のように数字のリストにして返す
miで選択中の内容をファイルに書き出してperlのプログラムとしてterminalで実行
与えられたテキストをPhotoshopでRGBデータと評価してCMYK値を返す
ファイル選択ダイアログを表示して、パスを取得する(Perl中へのAppleScript埋め込み)
AppleScriptObjCのメモリー浪費現象を解決?!
近似式によるRGB→CMYK/CMYK→RGB変換
PhotoshopでRGB→CMYK、CMYK→RGB変換
Excel 2011で現在オープン中の書類の選択中のシートをCSV書き出し
Mac App Store公開アプリのSandbox対応義務化 期限が6/1に延期
Excel 2011ですべてのタブのデータを取得して1つにまとめる v3
自然言語による相対日付指定v13
AppleScriptで正規表現(regexp)を
tellブロックの書き方いろいろ
Excel 2011で現在表示中のウィンドウのすべてのタブのズーム倍率を変更する
curlでダウンロードv2
100倍速いシェルソートでリストをソート
Excelの表中のデータを拾ってセルに色を付ける
InDesign CS3で指定のオプジェクトを、JPEG書き出ししてiPhoneへ
NSTextViewからのテキストデータ取得、テキスト設定サンプル
インストールされているアプリのAS辞書を書き出すv2
AppleScriptレコードのラベルのリストを作成
iPhoto, iTunes, Safariアップデートについて
QuickTime 7で録画して任意のファイル名で保存
Microsoft Office v2011 14.2.1アップデートで辞書に変更なし
ASObjC Runner〜ASOCの機能にAppleScript的な記法を
指定文字列から、指定ペア文字で囲まれる部分を削除。前方からスキャンして削除実行
offset ofの高速実行
指定ハードウェアポートのデバイス名を取得する v1.1
無線LANの電源のONOFF
無線LANネットワークを指定して接続する
簡易マクロ展開つきのコードチェック v1
日本語数値表現エンコードされた数値のparseテスト v2
EPSファイルの破損チェック(高速版)
インターネットのサービスを利用して日本国内の天気予報を取得する
WWDC2012のビデオが公開に
任意の桁数の2進数文字列を10進数に戻す
16進数文字列を10進数数値に変換する
HTMLコードのRGB 16進数コードを数値リストに変換
Numbersで指定範囲を高速に埋める
TidBitsがMountain Lion上のAppleScriptのルール変更について解説
iPhoneアプリをAppleScriptからコントロール
指定フォルダ内のPDFの空白ページ以外を個別に取り出して別フォルダに保存 v3
通知センター経由でTwitter投稿(10.8用)v2
Mail 4.0->6.0の移行でAppleScript関連機能の変更が発生
Skimでオープン中のPDFの現在のページの内容をOmniGraffleにペースト
OS X v10.8.2 追加アップデート 1.0がMail.appのAppleScript系のバグを修正
FTPソフトウェア「Transmit」の基礎的なスクリプティング(1)
Safari 6で指定のURLをオープンする
Transmitで指定のファイルを指定のお気に入りサーバーにアップロード
PhotoshopでJavaScript経由でEPS/PDFをオープン
指定フォルダが共有されているかチェック
2018年:macOS 10.14(自分は10.12を使用)
本Blogには基礎的で再利用性の高いAppleScriptを掲載しています。高度で見ただけで腰を抜かすような高度なものは掲載していません。逆にいえば、そういう「高度で奇抜なもの」も一般的で簡単なScriptの組み合わせで作られている、ということです。
2018年を振り返ると、Blogの再構築のために過去掲載の記事から新しめのものだけを再掲載。途中から新規作成分を掲載しています。
消滅したBlogの再構築をゼロから開始。Blog投稿用のAppleScriptを作成してローカルのAppleScriptをHTML化してXML-RPC経由でWordPressに主要なAppleScriptをアップロード。この「Finder上で選択しておいたScriptをHTML化してWordPressにアップロード」するというAppleScript(というか、その部品)を用意できていなければ、こんなに早期に復旧することはなかったでしょう。
・(GET)駅すぱあとAPIで駅コードから駅名称を取得
ヴァル研究所の「駅すぱあとAPI」が公開されているのを見つけ、実際に呼び出してみました。ただ、このAPIの呼び出しが必要な開発案件にまだ出くわしていないので、本気で使い込んではいません。REST APIは全般的に「仕様的に呼び出せるものは呼び出せる」「呼び出すことが目的ではなく、それをどのように活用するかが目標」です。Google翻訳だろうがDropboxだろうが、REST APIをAppleScriptから呼び出せるというのは「当然のこと」なので、あえてBlogに掲載する意義もそれほど感じませんが、、、、
・指定PDFの全ページからリンクアノテーションのURLを取得してURLを書きかえる
PDFのリンク書き換えScriptは、えほんシリーズ(Keynoteで作成)のPDFにScript Linkを埋め込むために試作したScript群の一部です。結局、Keynoteバージョン8.2か8.3あたりでKeynote書類にカスタムURLプロトコルのリンクを埋め込めるようになったため、自力で対応しなくても大丈夫になりましたけれども。
・AppleScriptの構文色分けカラーフォーマットをplistから読み込む
これは、Cocoaの機能を使わずに構文色分けフォーマットの判定を行っていた従来バージョンのルーチン(電子書籍のオマケ「Piyomaru Script Assistant」に使用)を、Cocoaの機能を用いて書き換えたものです。速度的なメリットはとくにありませんが、これを下敷きにしてさらに高度なものを作成するためにクリアしておきたい技術的な課題でありました。
のちに、このあたりの技術的な問題をクリアしたScriptを「AppleScript書類から指定の構文要素をピックアップ(Cocoa Property名称)して文字列化」として掲載しています。本来の作成目的はさらにこれを発展させたものです。
あまり派手ではありませんが、
・shebangっぽい行から実行プログラムを取得してスクリプト言語の拡張子を取得
というScriptも個人的には割と重要です。このScriptの作成目的は、FileMaker ProのDB内に格納したshell scriptなどを、shebangの情報をもとにファイル書き出しして実行するというものです。こういう目的を果たすScriptが存在していなかったためです(国内、海外ともに探しても見つからず)。
これは、個人的にはかなり意義のあるものです。掲載している分はこの程度の数ですが、未掲載分が大量にあります。このあたりの機能を確認することで、大きな収穫がありました。Cocoaの機能を使い出して真っ先に調べたのが、NSArray、NSString、NSDictionaryなどのデータ処理に必要なクラスの情報。ついで、NSImageなど画像処理に必要なクラス。NSObjectについてはずいぶん後になってから調べました。
・自分を最前面に移動させてAbout表示
これは、特殊な実行環境からこの機能を実現するための方法が見つからなかったので、「見つけたことが重要」な内容です。Scriptそのものにはあまり重要性はありません。
・配列に入れた画像を類似度でソートする
こういう処理はぜひAppleScriptでクリアしておきたい内容です。Cocoaの機能に手を出しはじめたのも、REST APIの呼び出しや機械学習(強化学習)やこのあたりの処理ができるようになるだろう、と感じたためです。強化学習については11月ごろに実現しています。
・アニメーションGIFをフレームごとに画像に分解する
分解すること自体にはあまり意味はありませんが、アニメーションGIFを作成するObjective-Cのプログラムが見つからない今日このごろ。Photoshopを使えば作れなくはないのですが、Photoshopを使わないで画像処理することに意義があります(使わなければMac App Storeに出せるので)。
・TwitterへのTweet文字数チェック
Github上で発見した当時「こんないいものが存在しているのに、なんでMac版のTwitterクライアントにこの機能は搭載されていないんだろ?」と首をひねっていましたが、間もなくMac版のTwitterクライアントが廃止に。あのアプリケーションは方向性がブレブレで、機能不十分で、User Interfaceもさっぱりな最低の存在でした。Appleに買収されたがっているがゆえの「瀬戸際外交の一種」とも見られていましたが、Twitterはどこに向かっているのでしょう?
・atan2をFramework呼び出しで計算する
これは、1つの緯度/経度情報をもとに他の座標がどの方角に存在するかを計算するために必要なものです。
・Bash In Tokyoで音声認識コマンドプログラムをデモしてきました
とりあえず作ってデモしてみたところ、若干方向性が合っていないことを感じ取って、のちのTanzakuにつながることになります。とくに、ファイルのドラッグ&ドロップ処理系とターミナル的なコマンド処理系を同時に実装すると「違和感」しかない、ということに気づいた次第です。
・Blog Archiveの電子書籍を計画しています
ごく一部の読者の方々のご要望を受けて企画した本シリーズ。続刊はすでに(機械的に)作成してあるのですが、内容確認とコメント追記にものすごくパワーが必要なので、思ったよりも進んでいませんが、すすんではいます。
・数値演算ライブラリ「calcLibAS」v1.3(28倍速)
数値演算ライブラリについては、Sephes Math LibraryをObjective-Cなどでラッピングしたものが決定版になるかと思っていましたが、本ライブラリはまさに掘っ建て小屋。冗談で作ってみたら予想外に実用性が出てしまったものです。
さすがに、引越しの最中に何かまとまったプログラムは書けません。
Blogアーカイブ本 vol.1を販売開始
Blogアーカイブ本 vol.2を販売開始
半信半疑で出してみたBlogアーカイブ本のVol.1〜2。一部読者のみなさまからはご好評いただいております。
・CPUの温度、放熱ファンの回転数を取得する
MacBook Proでデモを行っている最中に、AppleScriptを走らせて遅くなる現象に直面することがままありました。よくよく調べてみたら、長大なAppleScriptを実行しているさいにCPUが過熱してサーマルスロットリングが発生しているケースが多いことが判明。これは、環境がかわって南国の東向きの部屋に移動したことがきっかけですが、ノートPC用の放熱台にくわえ放熱ファンを強制的に高回転させるソフトウェア「TG Pro」を併用することで解決しています。本ルーチンは顧客に納品するGUIアプリケーションの部品として利用し、バッチ処理時のCPU過熱警報の機能として組み込みました。けっこう重要な部品です。
・Blogアーカイブ本 vol.3を販売開始
・AppleScript書類から指定の構文要素をピックアップ(Cocoa Property名称)
余裕を見て調査していたAppleScript構文要素の判別機能のCocoa版がだいたい予定どおりのレベルに仕上がったのが、本ルーチンです。
・MOSAミーティングで新プロジェクト「Tanzaku」を発表
自然言語コマンドを実行する「Newt On」Project(2002)、日本語音声認識コマンダー「ことだま」(2003)、その他日本語を理解して実行する各種プログラム試作品の集大成ともいうべきプログラム「Tanzaku」(2018)〜Talking Command Droplet via filenameです。
・easyJParse v3
AppleScriptに備わっている「words of」による簡易形態素解析機能。なぜか途中の記号類をドロップするため、いまひとつ実用的ではありませんでしたが、本プログラムにより本来の有用性を確保したといえなくもありません。何回か手を出しては放り投げていたものですが、デモの間際に集中して作ったら完成しました。コマンド解釈用に作ったので、この程度でも十分でした。
・イベント「Think AppleScript」盛会のうちに終了
初回だったので予定どおり、想定どおり、AppleScriptの歴史的経緯やおおまかな話などを詳細にご紹介しつつ、現時点での業務系のScriptでCocoaの機能を用いつつAdobe Createvie Suitesアプリケーションを操作する内容をデモしていただきました。質疑応答の中から、「iOSのSiriショートカットでiOSからosascriptコマンドを経由してMac上のAppleScriptを呼び出せる」といった話まで広がったのは収穫でした(結局、Entanglerのほうが6億倍ぐらい便利なのでSiriショートカットは使わずじまいですが)。
・ファイル作成日、修正日を変更する
他の補助アプリケーションの手助けなしに、ファイルの各種属性を書き換えられるようになったわけで、まことにけっこうなことです。
・NSURLからBookmarkを作成するじっけん
この機能はなくて困っていたので、できるという話は朗報でした。
・WebView+ボタンを作成 v3(URLから読み込み)
従来のWebViewがDepricated扱いになり、WKWebViewを使わなくてはならなくなったわけですが、使いこなすのに予想外に資料が存在せず(使い方がイレギュラーなこともある?)、いろいろ苦労していました。このあたり、プログラミングではなく「調査」の成果なわけですが、できないことをできるようにするためには、こうした下調べが欠かせません。
・機械学習で学習したMSの画像を連邦・ジオン軍判定してフォルダ分け v2
強化学習によって作成したモデルをもとにバッチ処理を行うというのは、1つの目標として据えていたので、そのやり方がわかって、実際にひととおり動作するプログラムを作成できたのはなかなかナイスです。
・tccKitで指定Bundle IDのアプリケーションの「オートメーション」認証状況を取得
macOS 10.14で大幅に変わった環境ですが、それに対処するためのノウハウも蓄積しつつあります。その中で最大のものがこれです。CodeSignさえ行えれば、動作内容の変化を最低限に抑えられる(初回のみセキュリテイダイアログを表示)のではないかと。ただ、CodeSignを行うような開発ライセンスを持っていないユーザーがドロップレットを作成した際にダイアログが出ることに不満を持っているようです。ドロップレットではなく、スクリプトメニューから実行するようにすれば、macOS 10.14のセキュリテイ対策機能に合っているように思います。
・macOS 10.14 AppleScriptリリースノート
後日確認したところ、macOSリリースノートに統合されたので、個別のリリースノートとして追記されることはなくなった、と明記されていました。内容をバックアップしておく必要がありそうです。
・easyJParse v4
簡易日本語形態素解析プログラムのアップデート版です。固有名詞に対応するための仕組みも見えてきました。
2018年にBlogに掲載したプログラムでいえば、強化学習、簡易日本語形態素解析、WkWebView利用あたりがポイントでしょうか。
2018年1月末の本Blog消失に伴い、電子書籍「AppleScript最新リファレンス」「AppleScript 10大最新技術」本文中からリンクしていた本Blog上のURLの変更先情報補完、および抜けていた記事のBlogへの補充作業がほぼ終了しました。
抜けた記事の再作成&更新作業は割としんどいものでした(ーー;;;
2つの電子書籍のサポートページ上にURLの対応表を掲載いたしましたので、ご参照ください。
オープンソースの「JXLS.framework」を用いて指定のExcelデータを組み立てて書き出すAppleScriptです。
アプリケーションにメッセージを送ってアプリケーションに仕事をしてもらうのがAppleScriptの流儀ですが、macOS 10.10以降でCocoaの機能が呼べるようになったため、こうしたオープンソースのフレームワークを呼び出して処理できるようになりました。
AppleScriptが自前で行なっていないことには変わらないのですが、Excelデータを(Excelなしで)組み立てられるわけで、出力データとしてExcel書類が求められる用途において、Excelなしで処理が行えます(開発中はExcelでどのように表示されるか確認する必要があるので、開発中は必要です)。
また、本物のExcelをコントロールする方法ではできなかった「並列処理で大量にデータを作成する」という処理も可能になるわけでけっこうなことです(ただ、そういう要求をされたことは皆無なのですが、、、、)。
–> Download JXLS(To ~/Library/Frameworks/)
AppleScript名:ASOCでExcelファイル生成テスト |
— Created 2015-10-08 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "JXLS" –https://github.com/JanX2/JXLS set aFile to POSIX path of (choose file name) set filePath to current application’s NSString’s stringWithString:aFile set workBook to current application’s JXLSWorkBook’s new() set workSheet to workBook’s workSheetWithName:"ぴよぴよシート" workSheet’s setWidth:1000 forColumn:0 defaultFormat:(missing value) repeat with i from 0 to 10 set aCell to (workSheet’s setCellAtRow:i column:0 toString:(current application’s NSString’s stringWithFormat_("ぴよまる %@", i + 1))) (aCell’s setHorizontalAlignment:1) —-HALIGN_LEFT (aCell’s setIndentation:(0 + i)) —– INDENT_0 end repeat workBook’s writeToFile:filePath |
「AppleScriptの穴」の内容が、2018年の1月末にBlog開設10年目にして突然消滅。あの悪夢のBlog消失事件から半年近くが経過しました。
消失直後に、AppleScript書類をHTML化してXML-RPC経由でWordPressをコントロールして、BlogにアップロードするAppleScriptを書いて実戦投入。機械的に基礎的なサブルーチンをアップロードし、じょじょに説明文を付加したコンテンツをアップロード。
macOS 10.11以降のScriptを対象に迅速な復旧を行い、意図した範囲でのサイト復旧はできているのかな、という状況です。
一方で、もっと古い時期&OSバージョン向けの情報については、正直なところそれを検証する環境を整備・維持するのが難しい状況です。
そのため、本BlogでもmacOS 10.10以前の情報について再掲載するつもりはありません。
そこで、古い情報のみを集めたBlog Archive本を電子ブックで出版することを計画中です。AppleScriptの穴のフォーマットと同じく、構文色分けを行なったプログラムリストに、クリックすると内容がScript Editorに転送されるURLリンク付き。PDFによる出版のため全文検索で内容をサーチ可能です。
とりあえず1か月分の見出しをリストアップしてみたら、130本ぐらいありました(Blog開設当初で、AppleScriptによる自動投稿プログラムにより連続アップしていました)。2008年3月9日から1年分を拾うだけでも500〜800ページぐらいにはなりそうです(×10年分)。
いまでもOS X 10.4〜10.9あたりを使い続けている方には見逃せない情報になるものと思われます。
なお、Blog復旧&再始動したあとのBlogアーカイブについては、新刊のCocoa Scripting Courseシリーズに各カテゴリのScriptをまとめて添付するため、これがアーカイブに該当することになります。