Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

カテゴリー: news

macOS 12.3上でFinder上で選択中のファイルをそのままオープンできない件

Posted on 3月 28, 2022 by Takaaki Naganoya

macOS 12.xはAppleScriptの処理系に対して、主にセキュリティ面でいろいろ修正が加わっています。

この修正は、セキュリテイを「高める」という名目のもとに行われているのですが、セキュリティ面での課題さえ片付けられれば、その他に悪影響を及ぼしていたとしても「知ったことではない」というのがAppleの態度です。そして、その問題に対してユーザー側から文句が出てこなければ、そのままです。

–> View Demo Movie

とくに、深謀遠慮な考えとか、素晴らしい見通しとかはなく、「上から言われたからやっている」というやっつけ仕事感を感じます。

AppleはSteve Jobsが作り上げた秘密警察みたいな組織になっていて、チーム間の権限の切り分けが病的なまでに行われており、チームが違うと会社が違うぐらいの隔たりが発生しています。それは、Steve Jobsという「垣根を無視して横断して歩く異物」がいたから成立する組織であって、官僚化、硬直化が絶賛進行中といったところです。

話を戻しますが….たしかに、そうした機能的なアップを伴わない修正で何も問題(副作用)が起こらなければ「セキュリティが高まったのでよかったね」という美談になるわけですが、たいていの場合にはそうなりません。意図していなかった箇所に副作用が生じます。

あるいは、セキュリティのポリシー同士が実は矛盾を生んでいる、という状況になっていて、Aという問題とBという問題を解決した結果、あらたにCというもっと巨大な問題が発生する、とかいった状況は容易にあり得るわけです。それでも、各担当者は誠意をもってその仕事に取り組んでいるわけで、こうした「人間的に尊敬できて素晴らしい能力を持ったスタッフ」による「熱心かつ誠意あふれる真摯な仕事」が合成された結果、「見たことも聞いたこともない間抜けな理由から生じる猛毒にまみれた悪意」が合成されてしまうことが、現在のTim CookのAppleの下ではあり得るのです。

「Finder上で選択中のファイルをそのままオープンする」

というのは、ここ数年というよりもAppleScriptを覚えたてのころにちょろっと書いて実行したぐらいであり、実際のところ「それがどうした?」というレベルの処理です。

AppleScript名:Finder上で選択中のファイルをオープン.scpt
–macOS 12.3でエラーになる処理
tell application "Finder"
  open selection
end tell

★Click Here to Open This Script 

Finder上で選択したファイルに対する処理は、きょうび何かのアプリケーションに渡さなくてもAppleScriptだけで処理できてしまうことが多いということもありますし(画像とか)、選択されたファイルをそのままオープンするという「1=1」みたいな処理はやりません。

選択したフォルダの中をすべてSpotlight経由で走査して、指定の形式のファイルだけをリストアップして、順次処理するようなものになっています。

ただ、10年たっても20年たっても「1=1」みたいな処理しかしていない人がけっこういて驚かされると同時に、意外なところで(Adobeのアプリケーションでアプリケーション間の連携に)使っていたりして、修正されないと困るケースは多いようです。

Shane StanleyがLateNight Softwareのフォーラムに投稿した、こうした処理への迂回Scriptがありました。さすがです。

Finder経由で書類のオープンと、その書類を作成したアプリケーションの起動を促すという、macOS 12.3で問題が起こっている処理を、Cocoaの機能を用いることで迂回してしまおうというものです。

ただ、そのままではFinder上で指定したファイルを1つオープンするという実証コードのレベルのものだったので、複数のファイルが選択されたものをオープンするように書き足してみました。

AppleScript名:macOS 12.3でFinder上の選択中のファイルをオープン.scpt
—
–  Created by: Shane Stanley
–  Created on: 2022/03/24

–  Modified by: Takaaki Naganoya
–  Modified on: 2022/03/27
—
— macOS 12.3でFinder上のselectionをただopenすると、作成したアプリケーションは起動するが、書類はオープンされないバグ
– に対処したもの。複数ファイルの選択状態を処理する場合がほとんどなので、若干追記
– ただ、漫然と選択したファイルをオープンするという処理はやっていないので(なにがしかの処理を自前でやるので)

use framework "AppKit"
use framework "Foundation"
use scripting additions

tell application "Finder"
  set aSel to selection as alias list
  
if aSel = {} then return
end tell

openFiles(aSel) of me

on openFiles(pathList as list)
  repeat with i in pathList
    set j to contents of i
    
openFile(POSIX path of j) of me
  end repeat
end openFiles

on openFile(thePath as string) — POSIX path
  set ws to current application’s NSWorkspace’s sharedWorkspace()
  
set theURL to current application’s |NSURL|’s fileURLWithPath:thePath
  
ws’s openURL:theURL
end openFile

★Click Here to Open This Script 

Posted in Bug file news URL | Tagged 12.0savvy Finder | Leave a comment

macOS 12.x上のAppleScriptのトラブルまとめ

Posted on 3月 20, 2022 by Takaaki Naganoya

現在進行形で発生しているAppleScript系のトラブルについてまとめておきます。macOS 12になって、AppleScriptの処理系の根幹部分にいろいろ手が加わっており(だったら機能追加してほしい気がする)、不具合なのかセキュリティポリシーとの不整合なのか(そんなもん、社内で調整してほしい)よくわからない問題がいろいろ生じています。

Apple自身が機能ごとのリリースノートを出さないようになり、こういうときに困ります。macOS 12.xで見られた不具合の中には、かなりApple自身の邪悪なポリシー運用の結果として顕在化したものもあるので、明文化できないのでしょうか。何をやった結果として発生した問題である、と書いてしまうと「なんでAppleはそんな邪悪なことをやっているの?」と世界中からツッコミを受けるに違いありません。

問題1:Scriptを実行すると「表があふれました」と謎のエラーが表示される(解決したか不明)

macOS 12.3で解消されるか? と見ていましたが、完全に対処できている感じではない様子。
→ 関連情報:SkimのAppleScriptサポート機能にバグ
→ その後、この「表があふれました」エラーには遭遇していないので、問題は解決されたのでしょう。ただし、油断しているとmacOSのマイナーアップデート時に何かやらかす可能性があります。

問題2:12.3betaで発生した「AppleScript書類をオープンできない」問題(解決)

これについては、12.3Release版では発生していないもよう。息が止まるかと思うほど焦りました。電子書籍1つ作るにしても、手間のかかる作業の多くをAppleScriptで自動化。そうでなければ、そんなにポンポン書けません。

問題3:インストールされていないアプリケーションを操作するScriptをオープンできない(未解決)

ただし、そのMacにインストールされていないアプリケーションを操作するScriptをオープンしようとすると、これまでは「どのアプリケーションですか?」とユーザーに問い合わせしていましたが、これが一律にエラーになるようです。
→ macOS 12.5 beta5において、インストールされていないアプリケーションに対するAppleScriptをオープンした場合には、オリジナルのままオープンされ、コンパイル(構文確認)すると書き換えられるといった動作を行うことを確認しています

問題4:悪意を持って作られたAppleScriptバイナリ(アプレット?)のセキュリティ上の問題(CVE-2022-22626)(解決)

悪意を持って作成したAppleScriptバイナリは予期しない強制終了、ないしはプロセスが確保していたメモリを暴露(他のプロセスから読み書き&実行できてしまう?)する問題があったとのこと。

悪意を持って作ったことがないのと、ランタイムプログラムのメモリ処理の問題のようなので(???)、Scriptを書いている側には「そんなのあったの?」という話です。

個人的には、AppleScriptをアプレット化して動かすことは少なく、Script DebuggerかScript Menuで動かしている場合がほとんどです。

問題5:Finder上のselection itemsをオープンした際に、作成したアプリは起動されるがファイルはオープンされない問題

Finder上で選択したファイルを、指定のアプリケーションや、各ファイルを作成したアプリケーションで開かせようとした場合に、アプリケーションのプロセスは起動するものの、指定の書類はオープンされないという問題。macOS 12.3上で発生した新たな問題の様子。

先に対象のアプリケーションを起動しておくとファイルオープンの処理は通るというケースもあれば、そうではないというケースも。
→ macOS 12.3.1/12.4beta1で解消

問題6:macOS 12のスクリプトエディタで、Context Menu機能にバグ(未解決)


macOS 12のスクリプトエディタで、Script Assistantとして/Library/Scriptsに入れているAppleScriptをコンテクストメニューから呼び出せるようになっていますが、そこにカスタムScriptを入れて呼び出すと(絵文字入りファイル名)コンテクストメニュー上に重複した項目が表示されるというバグです。
→ 途中で「直った」という連絡をもらったのですが、まったく直っていませんでした。Appleのエンジニアは字が読めないか、目が見えないのでしょう。最低限、字が読めないとバグは取れないですよね?
→ macOS 14で解決

問題7:アプリケーション同士のイベントのやりとりが2回以上発生するとエラー-609になるバグ

macOS 12.5 beta 5で発生した前代未聞のバグ(?)。

現在のTim Cook体制下で狙っていると見られる「セキュリティ確保のためには動かないコンピュータが最高!」の思想を体現する機能の実現のためか、こうしたアプリケーション同士のイベントの送信をカウントしているようです。これがバグなのか意図したものなのかは不明ですが、カウントして準備を始めたということだけは言えるでしょう。

ただ、Dockに登録したアプリケーションに書類をドラッグ&ドロップすると3回目からはエラーになりますし、FinderのToolbarに登録したアプリケーションのアイコンを3回クリックしてもエラー-609になります。とうてい、まともな状態とは言えません。

macOS 12.5でこの機能がオンになるものとは思っていませんが、Apple側が何かよからぬ企みを行っていることだけは明らかです。

「地獄への道は善意で敷き詰められている」(The road to hell is paved with good intentions)という言葉があります。セキュリティ強化の美名のもとにこれが実現したとき、コンピュータが役立たずの置物になってしまいます。Tim Cook CEOによる最悪の施策として記憶されることでしょう。頭が悪すぎです。
→ macOS 12.5(21G69)で解決???? Release Notesに記載されてもいないので不明

Posted in Bug news | Tagged 12.0savvy | Leave a comment

ドラッグ&ドロップ機能の未来?

Posted on 3月 17, 2022 by Takaaki Naganoya

目下、Tim Cook体制のもと「セキュリティ至上主義」が掲げられ、機能の有用性とセキュリティ(機能を制限、削除する)をてんびんにかけると、後者が重視されるようになっています。

そんな中、ドラッグ&ドロップの機能についてはいろいろ制約を受けたり、一部で使えなくなっていくのではないかという「懸念」を持っています。

実際、macOS 10.12以降、AppleScriptドロップレット(ファイルのドラッグ&ドロップを受信して動作するAppleScriptの実行プログラム)がOS側のセキュリティ機能による動作の影響(xattr)を受け、まっとうな処理方法では期待されるファイル処理ができなくなっています(回避策はあります)。

このため、macOS上でもFinder上でiOS並みのファイル操作、ドラッグ&ドロップでファイル/フォルダを移動させる程度の処理しか許可されず、アプリケーション側にまとめてファイルを渡すような処理ができなくなる「かも」しれません。

このドラッグ&ドロップによるファイルの一括指示の機能を維持するために、「display drop dialog Script Library」というライブラリをedama2氏との協力のもと(自分は要望を出したぐらいで作ったのはedama2氏)、配布しています。

アラートダイアログで指定のファイルタイプの書類のFinderからのドラッグ&ドロップを受け付けます。わざわざDropletを作らなくてもファイルのドラッグ&ドロップを受け付けるためには、こうしたインタフェースがないとまずいんじゃないか? という予測のもとに企画したものです。

目下、macOS 12.3でFinderに対してファイルのAppleScriptからオープン操作を行わせると、「creatorのアプリケーションは起動するもののファイルがオープンされない」という現象が発生しており(エラーダイアログが出る例があったり、出ない例があったり)、Apple社内でも整合性が取れていない状況のようです。

Appleとしては個別のテクノロジーについて発言したり、WWDCでも技術ではなくマーケティング的なセッションが増えて「見るべきものがない」状況になっていますが、こうした状況は好ましいものとは言えません。

Posted in Bug news | Tagged 12.0savvy | Leave a comment

Cocoa Scripting Course #4 近日刊行

Posted on 3月 16, 2022 by Takaaki Naganoya

Cocoa Scripting Courseの第4巻、「System Hardware & Software Information」を近日刊行いたします。

→ 発売しました!

第4巻では、ハードウェアやOSのソフトウェア情報、アプリケーション・バンドルからの情報取得を幅広く紹介しています。現時点で480ページぐらいです。

思えば、3巻目を刊行したあとに「M1 MacとmacOS 11の組み合わせだとしぬほどCocoa Scriptingが遅くなる」ことに気づいてAppleにレポート。この問題を片付けるまで続刊の刊行は見合わせざるを得ない状況でした。

「Appleの最新鋭マシンが10年前のMacBook Air 11インチより10倍遅いってマジか?」

みたいなレポートを行い、この煽りまくる(&詳細なデータとAppleScriptのプログラムを添えた)バグレポートが効いたとも言われています(本当のところは分かりませんけれども)。少なくとも、レポートしなかったら直っていなかったことでしょう。

無事、macOS 12でM1およびIntel CPU上でCocoa Scriptingを行なったときのスピード低下問題が解決。

この問題が解決したので、ようやく続刊の刊行に復帰した次第です。以前から地道に続け、飽きたら別の本に着手し、並列で4〜5冊進行しておりました。

Cocoa Scripting Courseはそんなに部数が出る本ではないので、ついつい後回しになりがちです。

Posted in Books news | Leave a comment

[新刊]つたわる資料のつくりかた

Posted on 3月 15, 2022 by Takaaki Naganoya

あらたに電子書籍を刊行しました。「つたわる資料のつくりかた」。資料を作るすべての人に向けた、資料作成の基礎を解説する本です。Amazon Kindleで配信中。

Posted in Books news | Leave a comment

macOS 12.3 beta 5、ASの障害が解消される(?)

Posted on 3月 2, 2022 by Takaaki Naganoya

macOS 12.3 beta 3/beta 4で発生していたAppleScriptの処理系全般にわたって発生していた障害が、beta 5で解消されたように見えます。

本Blogへのプログラムリスト掲載時に使っている「AS Publisher v1.8」(AppleScriptでAppleScriptを処理して掲載用のHTMLを生成するプログラム)自体が動作せず、Blogに投稿できない(横にある別Ver.OSのマシンでやればいいんですが)状況が続いていました。

本日配信されていたmacOS 12.3 beta 5で解消されたように見えます。手元にあるScriptが膨大すぎて、全数チェックするわけにもいきませんが、オープンできずにいたAppleScript書類はオープン/実行できています。

昨日リリースした書籍に掲載予定だったリストに動かないものがあって、掲載を見送る処理&使用しているプログラムの作者にお詫びのメールを送っていたのですが、なんのことはない、このbeta 3/4のバグのせいでした(beta 5にアップデートしたら何事もなかったように動いた)。

AppleScript書類をオープンできないとか実行できないといった「最悪レベルの問題」を起こさないことは確認できていますが、やっぱり「内部の表があふれる」的なエラーを出すScriptはまだあるようです。

macOS 11や10.15でそのようなエラーを起こす例を見なかったScriptなので、やはりmacOS 12環境に固有の問題が何かまだ残されているということなんでしょう。

macOS 12.3 beta 5、古めのMac OS X 10.2ぐらいの時期に書かれたAppleScript書類で、現在すでにOSにインストールされていない各種補助アプリケーションを呼び出しているものを、アプリケーション選択ダイアログを出さずに、いきなり「オープンできない」とダイアログを出して切り捨てる動作を行なっています。Script Debugger経由ではオープンできるため、依然として注意が必要です。

Posted in Bug news | Tagged 12.0savvy | 8 Comments

新刊発売:AppleScriptによるWebブラウザ自動操縦ガイド

Posted on 3月 2, 2022 by Takaaki Naganoya

macOS用の7つのWebブラウザ(Safari、Chrome、Chromium、Microsoft Edge、Vivaldi、Brave Browser、Opera)を操作するAppleScript本です。PDF形式306ページ。

→ 販売ページ

1章 めんどうな操作を自動化しよう!

人間の手で操作して情報を集めたり、データ入力するのは非効率。スクリプトから操作して自動操作

2章 スクリプトエディタの使い方

AppleScript専用のスクリプトエディタの使い方など、基礎的な内容をご紹介。

3章 WebブラウザをAppleScriptから動かそう

macOS用Webブラウザの大半はAppleScriptから操作可能。AppleScript対応は必須の機能!

4章 Webブラウザの情報を取り出そう

Webブラウザ自体が大量の情報を管理しています。まずは、ブラウザの情報を調べてみましょう。

5章 指定URLをオープンしよう

誰にでも確実に行える操作です。かならず経験しておきましょう。URLをオープンした後が大事です。

6章 コンテンツをキャプチャして保存しよう

表示内容を変化しないデータや、再利用可能なデータとして残しておくことは、重要な処理です。

7章 Webコンテンツにアクセスしよう

HTML内の操作対象にアクセスするための、さまざまなアプローチをご紹介

8章 Webコンテンツを画面部品として操作しよう

画面上の部品と同様にWebコンテンツにアクセスして強引に操作する「奥の手」GUI Scripting

9章 ログイン、ログアウトしてみよう

ユーザー登録が必要なWebサイトの処理を行うために必須の作業です。意外とクリアしにくい箇所

10章 データをダウンロードして処理しよう

直接ダウンロードできないファイルのダウンロード完了を検出して、ファイル処理しよう! ダウンロード後にファイル整理したりファイル名を変更したり

11章 仮想ディスプレイでユーザーの誤操作を防ごう

ユーザーからの操作をガードするために、仮想ディスプレイを用意してWebブラウザを表示! 画面上から強引にScriptで動かすと、ユーザーの誤操作が一番の大敵

12章 さまざまな実行環境を知ろう

AppleScriptにはいろいろな実行環境があって、環境ごとにできる/できないことがあります。時間と気持ちに余裕のある時にでも読んでおくとよいでしょう。

13章 実例:Quoraの統計データを取得しよう

実際に、Quoraのアクセス情報ページにアクセスし、自分の投稿情報を取得してみよう!

14章 さまざまな技術資料。興味があったら読んでね

アプリケーション・オブジェクトの指定方法/AppleScript用語辞書の確認方法/Webブラウザの基礎的なScripting/Google Chrome系のWebブラウザのsdef/AppleScriptの歴史/AppleScriptのエラーコード表/AppleScript予約語一覧/各Webブラウザの用語辞書の変更履歴

Posted in Books news | Tagged Brave Browser Chromium Google Chrome Opera Safari Vivaldi | Leave a comment

macOS 12.3 beta4、まだ直らないASまわりの障害

Posted on 2月 23, 2022 by Takaaki Naganoya

macOS 12.3 beta 3で発生した目が覚めるような不具合。本日、beta 4が出てきたものの、AppleScript書類をオープンできない(ものがある)とか、実行できない(ものもある)というなかなかハードな状況です。正直、macOS 12.2に戻したいデス(^ー^;;

ちょっと前にSkimで遭遇した「内部の表があふれました」エラーの問題がどうやら(Skim以外にも)存在していて、その解決を図ろうとして他の問題を引き起こしてしまったのではないかと推測しています。

どこか別のチームが引き起こした修正が影響を及ぼしているのかと思いきや……そうでもない雰囲気が(汗)

macOS 12.3がどの程度までbetaを出すのかわかりませんが、通例ではbeta 5ぐらいでReleaseするんじゃないでしょうか。ラスト1take?

少なくとも、常識的に考えれば3月にリリースするとか噂で言われている新ハードウェアの発売に合わせて(未発表なので詳細は知りませんが)、これらのハードウェア向けにmacOS 12.3をリリースするとかいう話なんじゃないでしょうか。

# macOS 12.2.2とかいった細かいバージョンアップで例外的に対応することも不可能ではないと思われますが、外野からではリリース番号のポリシーなどはよくわかりません

自分なら、当初取り掛かっていた問題解決をいったん引っ込めて、12.2と同等の状況に戻してリリースすることでしょう。一部の問題解決を目指して、より広範囲に問題を引き起こすのは得策ではありません。

正直、AppleScriptの処理系の安定性がここまで「揺らいだ」のは初めての出来事なので(Mac OS X 10.3.xで、自分が多用している「is in」演算子が動かないことに気づいた時には目の前が真っ暗になりました…「Newt Onジャマー」とか呼んで、いいかげんにしてくれよと思ってました)、正直困惑しています。

Posted in Bug news | Tagged 12.0savvy | Leave a comment

CotEditor v4.1.2でAppleScript系の機能を追加

Posted on 2月 22, 2022 by Takaaki Naganoya

オープンソース開発されているフリーのテキストエディタ「CotEditor」v4.1.2において、AppleScript系の機能が追加されています。

・DocumentオブジェクトのhasBOM属性

has BOM (boolean, r/o) : Is the file encoding of the document has BOM (byte order mark)?

・convertコマンドのBOMオプション

convert v : Convert the document text to new encoding.
convert document : The document to convert encoding.
[lossy boolean] : Allows lossy conversion?
[BOM boolean] : Has the new encoding a BOM (byte order mark)?
to text : The new encoding, either in localized encoding name or an IANA charset name.
→ boolean : Did the convertion succeed?

・新設のjumpコマンド

jump v : Move the caret to the specified location. At least, either one of a parameter is required.
jump document : The document to move.
to line integer : The number of the line to go. If a negative value is provided, the line is counted from the end of the document.
[column integer] : The location in the line to jump. If a negative value is provided, the column is counted from the end of the line.

こんなサンプル書類があったとして、

AppleScriptのdocumentオブジェクトの文字データを取得してダンプしてみても、

--No BOM
{"E3", "81", "B4", "E3", "82", "88", "E3", "81", "BE", "E3", "82", "8B", "E3", "82", "BD", "E3", "83", "95", "E3", "83", "88", "E3", "82", "A6", "E3", "82", "A7", "E3", "82", "A2", "0A", "61", "62", "63", "64", "E9", "AB", "98", "E5", "B3", "B6", "E5", "B1", "8B", "65", "66", "67", "68", "69", "0A", "0A"}

--with BOM
{"E3", "81", "B4", "E3", "82", "88", "E3", "81", "BE", "E3", "82", "8B", "E3", "82", "BD", "E3", "83", "95", "E3", "83", "88", "E3", "82", "A6", "E3", "82", "A7", "E3", "82", "A2", "0A", "61", "62", "63", "64", "E9", "AB", "98", "E5", "B3", "B6", "E5", "B1", "8B", "65", "66", "67", "68", "69", "0A", "0A"}

この状態ではhasBOM属性値で差があっても、内部データでは差が出ません。これをファイルに書き込んで、ファイル内容についてチェックを行うと、

--No BOM
0000000 81e3 e3b4 8882 81e3 e3be 8b82 82e3 e3bd
0000010 9583 83e3 e388 a682 82e3 e3a7 a282 610a
0000020 6362 e964 98ab b3e5 e5b6 8bb1 6665 6867
0000030 0a69 000a                              
0000033

--With BOM
0000000 bbef e3bf b481 82e3 e388 be81 82e3 e38b
0000010 bd82 83e3 e395 8883 82e3 e3a6 a782 82e3
0000020 0aa2 6261 6463 abe9 e598 b6b3 b1e5 658b
0000030 6766 6968 0a0a                         
0000036

のように、差を検出できます。

Posted in news Object control Text | Tagged 10.15savvy 11.0savvy 12.0savvy CotEditor | Leave a comment

PDFViewでcustom URL protocolのリンクを含むPDFのリンクが途切れるバグが修正される

Posted on 2月 9, 2022 by Takaaki Naganoya

PDFView上で、カスタムURLプロトコルのURLリンクを含むPDFのリンクをクリックした場合に、展開されたリンクデータが途中で途切れるバグ(だか仕様だか)がmacOS 12.3beta 1で修正された…ように見えます。

なんの話だか、詳細が説明されなければわからないことでしょう。以下に詳細を示します。

macOS標準装備の「プレビュー.app」では、カスタムURLプロトコル入りのPDFでリンクをクリックしても反応しません。macOS標準装備のPDFビューワでこうしたPDFのリンクを拾わない、というAppleのセキュリティ上のポリシーを通すことについては、それはご勝手にすればいいでしょう。

ただ、だからといってPDFViewというOSの部品レベルでそれを阻害するような機能を実装するというのは、「やりすぎ」であり、「起動しないコンピュータ、動作しないコンピュータを作れば100%セキュリティを守れます!」というどこかの責任者のバカみたいな主張をバカな現場がそのまま実装したというだけの話です。

プレビュー.appなんて「よくわからない人」が使うPDFビューワーであり、文化的な最低限のレベルを満たしている人類は普通にSkimを使います。このバグによってSkimにまで影響が出て、基本的人権ともいえるPDFブラウジングが阻害されたため、「直してくれ」と要求した次第です。

2019/11/29 macOS 10.15でPDFView経由のURLイベントが正しくデコードされないバグ

macOS 10.15でこのバグ(だか仕様変更だか)が発生してAppleにバグレポート。macOS 10.15はそういう勘違いで独善的な仕様変更のオンパレード。macOS 10.15は本当に腹のたつアップデートでした。

そして、待てど暮らせど直る気配もなく、急にレポートがきて「いまごろ、何の話だ?」と、驚いてしまったほどです。

本バグ(と、自分は位置付けている)レポートは、「applescript://」URLリンクを埋め込んだPDFが、macOS上でリンククリックすると、Script Editorにその内容がすべて転送されず、途中で途切れるようになったという現象についての抗議です。

勝手に仕様変更だかバグだかを作ったのはAppleであり、その修正までに2年かかったというバカみたいな話です。

  macOS 10.15:PDFViewのバグ発生を検出、Appleにサンプルコードつきでバグレポートとして報告する
  macOS 11:バグ継続
  macOS 12:Beta 3でバグが修正されたことが通告される

勝手に仕様変更だかバグを作ったのはAppleなのに、利用者がその不利益を被って、多大なる労力を要求されるってなんなんでしょう、、、

PDFViewでPDFを表示する程度のシンプルでおかわいらしい内容のテストプログラムを作ってあったので、Xcodeでビルドして実行してテストしてみました。まだ、すべてのPDFでチェックしたわけではありませんが、いまのところ「いい感じ」に見えます。

この、Apple純正のバグをApple様に直していただいて、そのことをApple様に感謝しなければいけないのでしょうか? なんというマッチポンプ。もしかして、組織のどこかの人たちが善意で直してくれたのかもしれませんが、自分には知る由もありません。

ちなみに、SkimについてはmacOS 12でカスタムURLプロトコルリンクのPDFを問題なく処理できることを確認しています。

この調子で、PDFViewのcurrentPageがAppleScriptにまともにブリッジされていない件についても修正してくださるとありがたいのですが、どんなもんなんでしょうか。

Posted in Bug news | Tagged 12.0savvy PDFView | Leave a comment

マウスの右クリックメニューをカスタマイズするService Station

Posted on 1月 26, 2022 by Takaaki Naganoya

マウスの右クリックで表示されるコンテクストメニューをカスタマイズするツール、「Service Station」(Version 2020.9 (23))を購入して、macOS 12.2+M1 Mac miniの環境で試してみました。

同ツールはMac App Storeで販売されており、フリーでダウンロードしたのち、App内購入(1,840円)で購入できます。

OS標準のScript MenuにFinder上で選択中のファイルを対象としたAppleScriptを大量に仕込んで使っていますが、やはりコンテクストメニューから呼び出せたほうが便利なので、試してみることにしました。

Mac App Storeからダウンロードした状態(フリーで使えるお試し版)ではAppleScriptの起動はできないため、App内購入が必要です。

サポートページ(Github)、Twitterアカウントなどが公開されています。

この手のツールは、AppleScriptに対する知識が少ないデベロッパーが開発したものが多く、実際に使ってみると不満を覚える確率がきわめて高いジャンルです。これまでにも、実際に試すと「使い物にならない」と判断したツールがほとんどであるため、十分な検証が必要でしょう。

# デフォルト状態でAppleScriptの実行を指定できないのは、試用版の制限なのでご注意ください。

Service StationでAppleScript書類をコンテクストメニューから処理してみよう

本ツールのUser Interfaceはきわめてシンプルです。「Rules」でどのようにファイルを特定し、「Menu Items」でオープンするアプリケーションやAppleScriptを指定します。

初期状態では、「Folders」「Images」「Text」の3つのRulesが設定されています。ここに、AppleScript書類を処理するRulesを追加してみましょう。

どのような方法でAppleScript書類を特定できるのか、Rulesのポップアップを調べてみると……

「Kind -> Script」で「AppleScript」を指定するとよさそうです。Rulesを指定したあとで、「Menu Items」にサンプルScriptを指定してみましょう。特定のハンドラ宣言を記述したAppleScriptをここに指定できるようになっています(フラットなScriptだけであってバンドル形式は予想どおり実行できません)。


▲実行Scriptとしてバンドル形式のAppleScript書類(.scptd)を認識しないので、バンドル内に実行バイナリやAppleScriptライブラリを突っ込むのは無理

Service Stationで実行指定するAppleScriptは、~/Library/Application Scripts/com.knurling.ServiceStation.Attendant フォルダに入れる必要があります。

Finder上で試してみると…..AppleScript書類(.scpt、.scptd)を認識しません(ーー;;;


▲この設定にしたくなるが、この指定方法だとAppleScript書類(.scptおよび.scptd)を認識しない。罠なのでこの設定はしてはいけない。作者は.applescriptのテキスト形式のAppleScriptしか試していないもよう

この作者は「AppleScript書類」をテキスト形式(.applescript)でしかチェックしていないようです。なので、さきほどの「Rules」で提示された「Kind -> Script is AppleScript」は罠(Trap)なので選択してはいけません。

拡張子で指定しても応答しません(scpt、scptd)。RulesでUTIを指定できるようなので、

フラットなScript書類「com.apple.applescript.script」、バンドルScript書類「com.apple.applescript.script-bundle」、Script DebuggerのバンドルScript書類「com.latenightsw.osa.bundle」をAny条件で(どれかがヒットしたら該当したものとみなす)登録してみました。

はい。今度は問題なく、Finder上でAppleScript書類を選択した状態で表示させた(マウスの右クリック)コンテクストメニューでサンプルAppleScript(処理用のハンドラを記載しただけ)がメニューに表示され、添付のサンプルScript(「System Setup」タブの「Sample Scripts」ボタンを押すと表示される)を実行できました。

Service Station経由で実行したAppleScript(サンプルScript)は以下のような内容です。

AppleScript名:AppleScript.scpt
on serviceStationDidSelect(targetedURL, selectedItemURLs, menuKind)
  display dialog "targetedURL:
" & targetedURL & "

" & "selectedItemURLs:
"
& selectedItemURLs & "

" & "menuKind:
"
& menuKind
end serviceStationDidSelect

★Click Here to Open This Script 

ランタイム環境はosascript

お約束で、Service StationのAppleScriptランタイム環境名は知っておかなければいけないので、

AppleScript名:Runtime名を表示.scpt
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

on serviceStationDidSelect(targetedURL, selectedItemURLs, menuKind)
  set procInfo to current application’s NSProcessInfo’s processInfo()
  
set aName to procInfo’s processName() as string
  
display dialog aName
end serviceStationDidSelect

★Click Here to Open This Script 

こんなAppleScriptを書いて実験してみると….

のように、「osascript」を呼び出して実装していることがわかりました。

NSAlertダイアログを表示するも、最前面に表示されず

ランタイム環境が「osascript」だと、自前でアラートダイアログを表示させたときに「最前面に表示されない」といった問題が生じる可能性があります(osascriptでお手軽実装するの勘弁してほしい。Script側に苦労を押し付けないでほしい)。あとは、GUIなしプロセスで実行するようなので、GUI Scriptingの認証を通せるか不明です。

また、どこぞのネット上のサーバー上のREST APIにアクセスしようとしてもセキュリティ上の制約で「アクセスできない」可能性もあります(実行プロセス側でネット接続の許可をもらっていないと無理)。今後も検証が必要です。

現時点でみつけた「おや?」という仕様は、Rulesでルールを作った状態で複数のAppleScript書類を選択すると、コンテクストメニューにService Stationの項目が出てこないという点です。画像の複数選択には反応するようですが、自前で設定したRulesだと複数ファイル選択時に応答しません。

# これは、追試によって設定アプリケーションを終了させるまで設定が反映されない部分があることが判明

また、Service StationのRulesから呼び出すAppleScriptのハンドラで、受け渡されるのはHFS path stringであってURLではありませんし(fURLなのか?)、複数のURLを受信できるような表記がありながらも、本バージョンでは1つのURL(正確にはHFS path)しか受け渡されません。

# 追試の結果、複数のパス(fURL)が受け渡されていることが判明

本ツールの開発者はAppleScriptを日常的に書いていない気配が濃厚ですが、それでも修正されれば我慢できないというほどでもないでしょう。


▲予想どおり、NSAlertのダイアログを表示してもランタイムがosascriptなので最前面に表示されなかった(GUIなしの不可視プロセスからosascriptを実行した際の挙動)。CDN上のJavaScriptライブラリの呼び出しは行えた

パラメータの型チェックを試してみました。

AppleScript名:パラメータの型チェック.scpt
on serviceStationDidSelect(targetedURL, selectedItemURLs, menuKind)
  set c1 to (class of targetedURL) as string
  
set c2 to (class of selectedItemURLs) as string
  
set c3 to (class of menuKind) as string
  
  
display dialog "targetedURL:
" & c1 & "

" & "selectedItemURLs:
"
& c2 & "

" & "menuKind:
"
& c3
end serviceStationDidSelect

★Click Here to Open This Script 

サンプルScriptの記述がよくないせいで勘違いしてしまったようです。targetedURLはfURL、selectedItemURLsはList、menuKindはintegerで返ってきていました。

ホームディレクトリ内のAppleScriptライブラリを呼び出す

コンテクストメニューから呼び出すAppleScript内で、ホームディレクトリ以下のAppleScriptライブラリを呼び出すことができるか確認してみました。

結論:呼べる

AppleScript名:AppleScript v2_with_Library.scpt
use AppleScript version "2.4"
use scripting additions
use radioLib : script "displayTextView"

on serviceStationDidSelect(targetedURL as «class furl», selectedItemURLs as list, menuKind as integer)
  set aStr to do shell script "cal 2022"
  
display text view aStr main message "Main Message" sub message "Sub Message" with properties {font name:"Courier", size:13, width:600, height:300}
end serviceStationDidSelect

★Click Here to Open This Script 

Posted in news Review | Tagged 12.0savvy NSProcessInfo Service Station | Leave a comment

2021年に書いた価値あるAppleScript

Posted on 12月 10, 2021 by Takaaki Naganoya

2021年:macOS 12(自分はmacOS 11、12を使用)

毎年行なっている、Piyomaru Softwareが書いたAppleScriptの1年を振り返る記事の2021年版です。恒例行事です。

あいかわらずコロナ禍の影響で踏んだり蹴ったりの1年だったので、本を書くことに注力。これではPiyomaru SoftwareではなくPiyomaru Publishingだ、などと冗談を言っていましたが、年に13冊出して進行中のものが数冊あるという状況。本当にPiyomaru Publishingです。

→ 2018年に書いた価値あるAppleScript
→ 2019年に書いた価値あるAppleScript
→ 2020年に書いた価値あるAppleScript

本を短期間かつ1人で書いて、レイアウトして、電子書籍として仕上げるためには、それを補助する大量のAppleScriptが必要です。面倒な作業はとっととAppleScriptで自動化して、繰り返し行う煩雑な作業をMacに行わせる環境を整備してきました。逆に、そういうScriptを用意できているので作業を省力化して、書けているという状況があるともいえます。AppleScriptによる補助なしにはこんなペースで書くことは不可能でしょう。

今年書いた本の中でどれがどうということはないんですが、Cocoa Scripting本は書き始める前には、一体どういうものを書いてよいのかさっぱり分かりませんでした。戦場の絆本だってそうです。どれひとつとして、企画段階のままの内容で完成したものなどありません。

2021/1 FileMaker Pro Scripting Book with AppleScript macOS 12対応アップデート
2021/2 [Eng] FileMaker Pro Scripting Book with AppleScript
2021/3 Cocoa Scripting Course Volume #1 NSString
2021/3 Cocoa Scripting Course Volume #2 NSArray
2021/3 Macとアップルスクリプトで学ぶ いまからはじめるプログラミング①
2021/4 Macとアップルスクリプトで学ぶ いまからはじめるプログラミング②
2021/4 Cocoa Scripting Course Volume #3 NSDictionary
2021/5 ミュージック.app scripting book with AppleScript
2021/7 機能強化AppleScript集 CotEditor用 PowerPack 取扱説明書
2021/7 空前絶後あなたの知らない ヤバイAppleScriptの世界
2021/8 elgato STREAM DECK 徹底活用 Mac+STREAM DECKで時短+作業効率化!!
2021/9 空前絶後あなたの知らないヤバイAppleScriptの世界 iOS対応版
2021/10 アーケードゲーム「戦場の絆」僕らの15年戦争

書いた本はどれも「こんなものがあればいいのに!」というアイデアを形にしたものばかり(読者ニーズを形にしたものではないところにギャップはありますが、、、)。新基軸は、iOS用のFileMaker Goを電子書籍プラットフォームと見立てて、各種情報+ロジックを1つにまとまた本を出したことです。「iOSで読む」本についてはいろいろ構想もありますが、まだ試行錯誤の最中といったところでしょう。

FileMaker Pro系のコンテストには「FileMaker選手権2020」「FileMaker選手権2021」「FM-1グランプリ」の3つに応募し、FileMaker選手権2020ではDropbox賞を3つ(3年分)、FM-1グランプリでは仕事効率化部門で部門準賞をいただいています。

■BEST AppleScript of 2021

今年書いたAppleScriptの中で、個人的に一番会心の出来だったのは「部首で漢字検索」シリーズです。外部のデータに依存してはいるものの、テキスト中の漢字を部首で検索できるというのは、なかなかすごいことです。

技術レベル云々を問題にしなければ、macOS 11+M1 MacでAppleScriptの動作速度が遅いことを検証したサンプルAppleScriptと報告書のまとめでしょうか。おそらく、他にも同じようなレポートが行われていたところに、きちんとベンチマークをとって動作の異様さを報告したものが役立ったが、おそらくその前からApple社内で当たりはつけていたのでしょう。

M1 Mac miniが到着してすぐベンチマークを回して「なんだこの遅さは???」と気づいたぐらいだったので、半年前のWWDC以降に開発者向けに貸し出されたDTK(Developer Transition Kit、A12Bionic搭載マシン)を試していた人たちは揃いも揃ってみんな本当に気づかなかったんだろうか? という素朴な疑問があります。

M1上でのAppleScriptからのCocoa呼び出しの速度がmacOS 11.x上のレベルのままだったら、と思うとなかなか怖いものがあります。

■2021/1

FileMaker Pro Scripting Bookの英語版を書いていたので、こうしたものが必要になりました。日本語のままで未翻訳の文章が残っていると困るので、そのチェックのためのツールを書いてみたというところです。
1/28 最前面のKeynote書類のテキストアイテムの英語化率を求める

■2021/2

部首で漢字検索を行えるAppleScriptは、もともとのデータを作った人が偉いわけですが、実際に手元で用意したテストデータに対して実行し、その処理内容を正しく評価してAppleScriptから呼び出せるようにしたところに価値があるものと考えます。
2/21 部首で漢字検索
2/24 指定した文字で囲まれたキーワードの色を置換する

■2021/3

環境を用意するだけで手間がかかる超解像処理が、PixelMator Proで手軽に呼び出せるようになっていることに感服します。本処理は実に有用です。
3/25 画面スナップショット超解像バッチ処理 v1

■2021/4

Pagesの書類から最大サイズの文字で書かれている文章をタイトルとして取り出す処理を行うAppleScriptです。せめてPagesでタイトルの書式属性に該当するテキストを抽出できるようになっているとよいのですが、そういう機能は一切ないので困ります。
4/12 Pagesで最前面の書類中のテキストアイテムと本文テキストで文字サイズが最大のもののテキストを求める

■2021/5

Music.app本に掲載するために書いたものですが、なかなか苦労しました。AppleScriptからデータを取得したい内容です。
5/12 LAN上のdaapクライアントの共有名をリストアップ v2

■2021/6

M1 Mac miniを手にしたその日に強烈な違和感をおぼえ、ベンチマークを用意して実行してみました。これをやっていなかったら、macOS 12でもAppleScriptからのCocoa呼び出しは遅いままだったでしょう。技術的に高度かどうかはさておき、これをやらなかったら全世界的に致命的な影響が出たであろうことを考えると身震いします。
6/22 macOS 11, AppleScriptをFirestormではなくIcestormで実行か?!

■2021/7,8

とくになし。この頃が一番忙しかったので。

■2021/9

電子書籍「僕らの15年戦争」のために用意したものです。Pagesは長大なコンテンツの編集にまったく向いておらず、なるべく記事ごとに小割りに書類を分けないと困ります。そのため、全書類に対して同じ修正を行いたいといった場合、手作業で行うのは現実的な方法ではありません。AppleScriptから一括処理することが必須です。
9/22 Pagesの最前面の書類で選択中のツメを修正する

■2021/10

macOS 12で新規搭載されたショートカットをAppleScriptから呼び出したりいろいろ試し出しました。ただ、ショートカットの完成度がいまひとつというべきなのか、「よくまあこれでいままでiOSユーザーは文句を言わなかったもんだ」と呆れるほどのいい加減な出来に言葉を失っています。
10/27 AppleScriptからショートカット実行&ショートカット内でAppleScriptを実行

■2021/11

macOS 12上でショートカットをAppleScriptの処理内で実行するため、存在確認とインストールまで自動で行うことを試したAppleScriptです。まだ完全体とは言い難いですが、方向性はいいと感じています。
11/1 Shortcuts Eventsでショートカットのインストール+実行

電子書籍の作成補助Scriptの1つ。表のセルに入れた丸つき数字のリナンバー処理は、表コンテンツを編集すると必ず発生していた無意味な作業であり、これを手軽に行えるようにしたことは意義深いでしょう。
11/27 選択中の表の指定行・列のマル付き数字リナンバー v2

Posted in news | Tagged 10.15savvy 11.0savvy 12.0savvy | 3 Comments

Microsoftが新OutlookにAppleScript機能を追加表明

Posted on 12月 9, 2021 by Takaaki Naganoya

Outlook: Support for AppleScript in the New Outlook for Mac
Planned Availability: June CY2022 https://t.co/bGOxW8leZG #M365Roadmap #Outlook #NewRoadmapItem

— Microsoft365Roadmap (@M365Roadmap) December 8, 2021

Microsoft 365のロードマップを流布するTwitterアカウント@M365Roadmapが、Mac用のOffice365(ローカルで動かす版のOffice、月単位契約可)の新たなロードマップとして、新バージョンのOutlookに対して、2022年の6月を目処にAppleScript対応機能を追加することを発表しました。

Microsoft Outlook for Macは企業内のExchangeサーバーにアクセスするクライアントで、筆者の手元にある(契約していないので置いてあるだけ)バージョンをアップデートしたところ、バージョン16.55でAppleScript用語辞書もついています。

Microsoftが言うところの「新Outlook」というのは、バージョン17.xxというものなのか、あるいはそれ以上のバージョン番号がついたものなのかは分かりませんが、Outlook v16.xx系を使っていればAppleScriptサポートはあるので(Exchangeに用がないのでOutlookのScriptingしたことないですけど)、それまで16.xx系を使い続けてもよいのでしょう。

また、本件はあくまで計画段階の話なので、確度のほどは不明です。

Posted in news | Tagged 11.0savvy 12.0savvy Outlook | Leave a comment

Amazon EC2 M1 Macインスタンスが利用可能に

Posted on 12月 3, 2021 by Takaaki Naganoya

Amazon AWSでMacインスタンスが利用可能になって、約1年。当初はMacインスタンスにはMac mini 2018(Intel Mac)が採用されていましたが、M1 Mac miniを採用した「Amazon EC2 M1 Macインスタンス」が本日から利用可能になったと報じられています。

「利用可能なM1 Mac miniのスペックは8CPUコア、8GPUコア、16GBメモリ、16コアApple Neural Engine。これがThunderbolt経由で10GbpsのVPCネットワークと8GB EBSストレージに接続されています。」

とのこと。OSバージョンが書かれていませんが、macOS 11.xか12.xということになるでしょう。

サービス開始当初からM1 Macに言及していた割に提供が1年遅れたことについては、やはり「(AppleScriptや)shell scriptのようなプロセスを決め打ちで遅い高効率コア(IceStorm)で実行してしまう」というmacOS 11.x+M1の問題点(バグといってもいい)がmacOS 12で解消されるのを待っていたというところでしょうか?

ただ、基本単位が24時間で、それを超える分については1秒単位の課金。「瞬間的にMacを大量に用意して大量のデータを処理したい!」という用途にはいまひとつ(費用面で)使いにくいサービスでもあります。

最小単位が1時間とかだったら、いろいろ使ってみようという気になりますが、AppleのEULAをクリアするためにこのようなサービス形態になっているとかいないとか。

あらかじめ起動ディスクイメージを用意しておいて、必要なときに新規インスタンスをこれで起動し、所定の処理を行ったあとでデータをストレージに書き戻すとかいった使い方になることでしょう。

最小単位が24時間というのが、かえすがえすも……。

AppleScriptでこうしたサービスを利用する機会があるのかと言われれば、膨大な量のPDFを処理する必要がある場合などに、一時的にAWS上のインスタンスをかき集めて一気に処理するといったものが考えられるでしょう。

膨大なKeynoteやPagesのデータを処理する必要があって、そのデータ処理を行う……というケースもないことはなさそうですが、別にAWSを利用しなくても処理できそうな気もします(データ量次第です)。

Posted in news | Tagged 11.0savvy 12.0savvy AWS | Leave a comment

FM-1グランプリで仕事効率化部門の部門準賞を獲得!

Posted on 11月 28, 2021 by Takaaki Naganoya

FileMaker Proの「すごいデータベース」のコンテストであるFM-1グランプリにおいて、Piyomaru Softwareの応募作品「FileMaker PowerPack」が、予選を通過し、決勝において仕事効率化部門の部門準賞を獲得いたしました。

FileMaker PowerPackは、CotEditor PowerPackと同様、Cocoa ScriptingのパワーをFileMaker Proユーザーに体感していただく技術的なデモンストレーションであり、かつ日常的にデータベース用のデータ作成などの作業に従事する人たちが便利と感じる(のではないか)という内容のScriptを収録したScriptサンプルデータベースに仕上がっています。

データベース上にサンプルデータを入れ、その場で実行して結果を確認できるようになっています。

内容はあっさり読めるように書いてあるものが多いので、入門用に見えてしまうかもしれませんが……実際にAppleScriptを「書ける」人間が読むと顔をひきつらせるような内容のものが多々入っています。作った本人としては「これを見て書けるようになるとは思わない」というレベル設定です。超絶レベルではないものの、アクロバティックなものが多いので。

技術的にも度肝を抜くような内容であり、178本のScriptを収録してはいるものの、本作品はあくまでFileMaker Pro上で動作するAppleScriptのコードなわけで、「ド派手で巨大で存在感はあるものの、さすがに大賞はとらないだろう」という味付け。本作品のレビュー記事は、文字数からBlog側で単純計算した読了所要時間が23分という大作です(通常の8倍のボリウム)。

それでも、FM-1グランプリの運営方針である「きちんと内容をチェックする詳細なレビュー」が行われおり、日本国内のFileMaker Proコミュニティのレベルを内外に示したという意味において、よそで真似できない「まっとうな」骨太のコンテストであったことを痛感。運営に携わられたお3方、関連スポンサー企業の方々に敬意を表します。

というわけで、このFileMaker PowerPackの書き換え方法や利用方法などを解説した「FileMaker PowerPack活用ガイド」を近日発刊予定です。技術的なレベルを下げて解説し、久しぶりにAppleScriptにさわるという方向けにレベル設定しています。完全理解というレベルでなくても、必要な書き換えはできるだろうという内容を目指しています。

そして、自分で作った作品の作者自身の解説のはずなのに、自分で書いていてとても大変です。「誰だ、こんなもの作ったのは?」という悪態をついてしまうほどですが、それは自分のことなので自業自得というところです。

Posted in news | Tagged FileMaker Pro | Leave a comment

FM-1グランプリにFileMaker PowerPackを出品

Posted on 11月 15, 2021 by Takaaki Naganoya

FileMaker Proの作品コンテスト「FM-1グランプリ」の第2回予選を通過した「FileMaker PowerPack」を、内容拡充し第3回予選に再応募しました。

CotEditorのPowerPackにつづく、FileMaker ProのPowerPack。178本のAppleScriptを収録した、FileMaker Proに組み込んで動かすと便利そうなものを収録したサンプル集です。

Cocoa Scriptingのデモンストレーションを行うフリー配布ソリューションです。

FileMaker ProとAppleScriptなので、相性抜群! 楽勝で作れるに違いない!

……そんなことを考えていた時期が自分にもありました。

しかし、割と前代未聞のトラブルに遭遇。苦労話にはことかかないありさまです。だいたい、内容がなかなか決まらずに企画段階でかなり困っていました。

ここでは、お気楽そうに見える見た目とはまったく異なる技術的な内容について記すこととします。

FM独自のAppleScriptランタイム環境が大変

FileMaker ProのAppleScriptランタイム環境は独特のもので、ランタイム名を取得しても「FileMaker Pro」と独自の名前が返ってきます。Vanilla AppleScriptについては環境の違いにともなう「差異」は感じないところですが、Cocoa Scriptingを行うと「まったくの別物」であることを痛感できます。

FileMaker Pro内蔵のスクリプトステップ「AppleScriptを実行」は、実行したAppleScriptが生成したオブジェクトがメモリ上に常駐したりしません。実行後、即座にメモリ上からパージされるようです。ARC的な「使わなくなって時間がたったから自動で消しとくね!」という挙動とはまるっきり違います。

このことで、OS側から各種Notificationを受信するようなもの(USBメモリがマウントされたらAppleScriptを実行させるなど)は、瞬時にクラッシュ。NSTimerでタイマーを生成してタイマ割り込み処理を行おうとするとクラッシュ!

さらに、標準的なランタイム環境(スクリプトエディタ、Script Menu)で実行したときには発生しないトラブルが山のように発生します。

とくに、CoreImageの機能を呼び出して画像処理を行おうとした場合には、明示的にメインスレッドでの処理を指定する必要があり、これに気づくまではまったく画像フィルタ処理ができない始末。FileMaker PowerPackでは無駄にCoreImageのフィルタ呼び出しプログラムばかり60本ぐらい突っ込んでありますが、このCoreImageの処理で問題のある挙動を示すものがないか全数チェックしたという次第です。

Cocoa Scriptingについては、おそらくメーカー側でもノーチェックの部分なので、調べられる機会に調べておいたほうが得策です。

今回のFileMaker PowerPackでいろいろ余計なノウハウがたまりましたが、osascriptなどのランタイム環境と比べてもずいぶん風変わりなCocoa Scripting環境であることを意識しておく必要があることでしょう。

FileMaker PowerPackには目下178のScriptを入れてあり、FileMaker Pro DB上のサンプルデータをもとにデータ処理を行い、結果がある場合にはDB上に結果を描き戻すようになっています。

今回、さまざまなテストを重ね、「極力FileMaker Pro内蔵のAppleScript実行環境を利用しない」ことが問題解決の近道であることを痛感しました。できるだけ、FileMaker Proの外部に補助アプレットを用意して、そちらでCocoa Scriptingの処理を行うべきです。まして、タイマー処理やNotificationの受信処理などはFileMaker Pro内では行えないため、FM内では最低限の処理にとどめ、処理本体を外部に出すべきでしょう。

macOS 12のFramework再編の影響も

macOS 12で行われたFramework再編の影響も受けました。PDFKitの機能を利用する場合、macOS 11までであれば、

use framework "QuartzCore"

と記述していましたが、macOS 12では、

use framework "PDFKit"

と記述する必要があります。

macOS 11までのOSと、macOS 12以降のOSにそれぞれ対応するライブラリを書いて、実行時のOSバージョンを検出して呼び出しを切り替える処理をスクリプトエディタ上で動作確認してあったのですが、これをそのままFileMaker Proのランタイムに持っていくとコンパイル(構文確認)をパスしません。

仕方なく、macOS 11までのScriptと、macOS 12以降のScriptで別々のものに分ける必要がありました。

自称・世界最小の簡易形態素解析エンジン「easyJParse」のFM環境への移植

さまざまなランタイム環境で動作する必要のある、Piyomaru Softwareによる世界最小の簡易形態素解析エンジン「easyJParse」を、このFileMaker PowerPackに組み込んでいます。

このeasyJParseは初出時には80行程度、現在でも100行そこそこという超小型の形態素解析プログラムであり、自然言語(主に日本語)によるコマンドを分解するために開発したものです(飛行機の中でも動かすべく、REST APIで外部のサービスを呼び出したりはしていません)。

当初、easyJParseがFileMaker Proランタイム上で動かず、けっこう焦りましたが……いつもの「ソート方向指定」の「ascending」とか「descending」などのキーワードがFMの予約語と衝突していただけでした。

このeasyJParseが動くことで、FileMaker Pro上でTanzaku的な自然言語によるコマンド指定ソリューションが動きまくるはずですが、32KBまでのScriptしかホスティングできないという制限が地道に大変そうであります。

FM-1 GPにFileMaker選手権2021と結果発表が相次ぐ

ウチの検証環境(Intel+M1 Mac mini)でテストした範囲では問題ないことを確認していましたが、どうもM1 MacBook+Retina Display環境では検証できないので、その環境ではいろいろ問題に遭遇していたようです。問題の洗い出しを行えたことは前向きにとらえるべきですが、その環境がないので事前にチェックすることは不可能です。

# M1のRetina Display+MacBook環境が手元にないのでコンテストに応募したわけで…

肝心の総合結果発表は11月27日。大賞を取ることは難しそうですが、予選を通過したため何かいただけそうです。噂によればFileMaker選手権2021も近い日程で結果が発表されるとかしないとか。こちらにも応募はしているため、せめて参加賞ぐらいはいただきたいものです(モバイルバッテリーだったか)。

FileMaker PowerPackについては、その内容を解説し、書き換えるためのガイドを行う書籍を近日発行予定です。さらに、Cocoa Scripting的な立ち入った解説を行うものも計画しています。

これらの付録に、「FM-1グランプリ戦記」をつける予定です。

Posted in news | Tagged 12.0savvy FileMaker Pro | Leave a comment

FileMaker Pro Scripting Book with AppleScriptをアップデート

Posted on 11月 4, 2021 by Takaaki Naganoya

FileMaker ProのAppleScriptからの操作を詳細に解説した電子書籍「FileMaker Pro Scripting Book with AppleScript」(日本語版)をアップデートしました。

macOS 12に合わせた内容のアップデート、v1.2までに説明されていなかった内容の補完、および別冊付録リファレンスをまとめています。

すでに購入された方は、購入ページからの再ダウンロードで入手可能です。

→ FileMaker Pro Scripting Book with AppleScript オンラインブックストア(BOOTH)

Posted in Books news PRODUCTS | Tagged 12.0savvy FileMaker Pro | Leave a comment

AppleScript初期プロダクトマネージャーWilliam Cook氏が死去

Posted on 10月 29, 2021 by Takaaki Naganoya

I'm devastated to hear that William Cook passed away on Wed. Much of 1990s OOP was defined by his seminal papers. When he returned after a decade in industry (AppleScript!) I invited him to @BrownCSDept (where he got his PhD from Peter Wegner) and we became friends. Tragic. pic.twitter.com/SwiPvZZgd2

— ShriramKrishnamurthi (@ShriramKMurthi) October 28, 2021

Posted in news | Leave a comment

Skim v1.6.5+macOS 12.0.1でPDFに埋め込んだapplescript://リンクの動作を確認

Posted on 10月 28, 2021 by Takaaki Naganoya

macOS 10.15で「PDFView上で発生した(カスタムURLスキームの)URLイベントを途中でブチ切る」という変更を、ユーザーに何の断りもなく行ったApple。

本Blog掲載のプログラムリスト末尾に入っている「applescript://」URLリンク。Webブラウザ(HTML)→スクリプトエディタの間では、このURLリンクは有効です。この仕様を引き継いで、AppleScript解説本のPDFでも同様のURLリンクを入れてあったのですが……これがmacOS 10.15で意図的にブロックされました。

URLリンクの長さが規定の文字数を超えるものは途中で切ったり、リンクをそもそも無効にしたりと、AppleはmacOS 10.15.x上でマイナーアップデートのたびに悪のかぎりを尽くしていました。90年代の傍若無人なマイクロソフトを想起させるような、強引すぎるやり方です。

こういうのはとてもよくないことだと思います。PDFの扱いがいいからmacOSを使っている、という部分は大きいわけですが、その基盤となるPDFの扱いをいろいろ無断で変更するというのは、感心しません。

macOS 10.15はβ段階から出来が悪く、「こんなのに付き合っていられるか!」と10.14を継続使用することを決め、10.15をガン無視することにしました。

macOS 10.15は「リリースしてはいけない」レベルのOSだと感じました。このあたり、ダメなものにストップをかけられないのは、Appleという会社の構造的な問題なんでしょう(イエスマンばっかりやがな)。

macOS 10.15を無視したことは個人の生産性を損なわなかったという意味では「いいこと」でしたが、macOS 10.5で発生していたさまざまな問題を自分が認識しなかった(そういうレベルまで付き合う気がしなかった)ために、問題の発覚が遅れたという副作用もありました(まさか、Cocoa Scriptingの実行速度が大幅に低下していたとは!>macOS 10.15)。

macOS 10.15におけるPDF埋め込みリンクについては、macOS標準添付のPreview.appであろうがサードパーティの(オープンソースの)Skim PDF Viewerだろうが、自分でXcode上で作ったお気軽PDFブラウザだろうが、PDFViewを使っている限りはこの制限が発生していました。

真剣にサードパーティのPDF関連Frameworkの利用も検討しましたが、価格面でなかなか折り合いが合わなかったのと、PDFViewに相当するクラスが提供されていなかったのでダメでした。

本件についてはAppleにレポートしていましたが、Apple側でガン無視状態(いろいろリクエストしても無視されるのがデフォルト状態)。サードパーティのPDFビューワまで影響が出るため、macOS 10.15を使わないという消極的な対策しかできない状況でした。

ちょうどこの時期に執筆していたMusic.appのScripting本が完全に頓挫するなど、少なからず打撃を受けた出来事だったのです(各種既刊本のアップデート計画も白紙撤回していました)。

その後、Piyomaru SoftwareのScripting本については「本誌掲載Scriptは別途Zipアーカイブを添付」という原始時代のやり方にたちかえることになります。

そんな中、ふとmacOS 12.0.1+Skim v1.6.5で冗談半分に「URLリンクが復活してたりして」と試してみたら……………「!!!!!』

なんと、Skim上では「applescript://」URLリンクが正常に動作して、内容が途切れることなくスクリプトエディタに転送されていました。さすがに、追加試験でPreview.app上で実行してみたらリンクをまるごとブロックされましたが、Skimについては大丈夫なようです。

こっそり禁止して、こっそり修正ということなんでしょうか。現状がこのまま維持されるのか、それとも将来にまた仕様が変更されるのか不明ですが、コソコソ仕様を変えられるのはとても不愉快です。

OSのRelease Notesをちゃんと出さないことは、不満です。

Posted in news PDF | Tagged 12.0savvy | Leave a comment

AppleScriptからショートカット実行&ショートカット内でAppleScriptを実行

Posted on 10月 27, 2021 by Takaaki Naganoya

macOS 12で新規搭載された「ショートカット.app」、このアプリケーション上で記述するワークフローを「ショートカット」、ショートカットを構成する各コマンドを「アクション」と呼びます。

ショートカット.appは日本語ローカライズされた名称であって、実際には「Shortcuts.app」という名前です。

AppleScript用のショートカット実行GUIなしアプリケーション「Shortcuts Events.app」が別途(ショートカット.appのバンドル内に)存在しており、こちらもAppleScript用語辞書を備えています。

Shortcuts.appに対してコマンドを実行すると、同アプリケーションが起動します。Shortcuts Events.appに対してコマンドを実行すると、Shortcuts.appは起動しません。

両者とも辞書内容は一緒であり、バージョン番号と名前以外に差異はありません。

AppleScript名:ショートカットのプロパティを取得.scpt
tell application "Shortcuts"
  properties
  
–> {frontmost:false, class:application, name:"Shortcuts", version:"5.0"}
end tell

★Click Here to Open This Script 

AppleScript名:Shortcuts Eventsのプロパティを取得.scpt
tell application "Shortcuts Events"
  properties
  
–> {frontmost:false, class:application, name:"Shortcuts Events", version:"1.0"}
end tell

★Click Here to Open This Script 

ショートカット.appを起動するとこのようなウィンドウが表示されます。

あるいは、このようなウィンドウです。

ショートカット一覧が並んだ表示状態で実行することもできますし、ダブルクリックして個別ウィンドウ表示した状態で実行することも可能です。

また、メニューから実行することも可能です。

環境設定では、以下のような設定が行えます。「詳細」に「スクリプトの実行を許可」の項目があり、デフォルトではオフになっています。当然、ここはオンにします。他の項目についても適宜、自己責任でオンにすることになります。

ショートカット(ワークフロー)はローカルに保存されません。iCloud上に保存されます。

ショートカット(ワークフロー)の共有はコンテクストメニューから行います。このさい、iCloud上のURLが直接表示されないため、少々面倒な感じです。

「リーディングリスト」で共有すると、WebブラウザのURL欄に詳細なURLが表示されるため、これを用いるとよさそうです。

https://www.icloud.com/shortcuts/e788482535704922aaa9f617491353b2

新規ショートカットの作成には、メニューから「ファイル」>「新規ショートカット」(Command-n)を実行するか、ショートカット.appのウィンドウでツールバーの「+」をクリックします(すべてのショートカット、My Shortcutなど選択中のフォルダによって表示/非表示状態が変わります)。

初期状態はこんな(↑)感じです。アクションを選択してダブルクリックするか、ビュー上にドラッグ&ドロップするとアクションが置かれます。

最初なので、ダイアログでも出しておきましょう。

ツールバー上の「▶︎」ボタンをクリックするか、Command-rでショートカット(ワークフロー)を実行します。

ショートカットは名前で識別することになります。ツールバー上の名称を変更すると名前を付けられます。

AppleScript側からはこの名前「AS TEST2」を指定して呼び出すことになります。

AppleScript名:ショートカット.appでショートカット実行.scpt
tell application "Shortcuts"
  run shortcut "AS TEST2"
end tell

★Click Here to Open This Script 

AppleScript名:Shortcuts Eventsでショートカット実行.scpt
tell application "Shortcuts Events"
  run shortcut "AS TEST2"
end tell

★Click Here to Open This Script 

現在のところ、Shortcuts.appならびにShortcuts Events.appのrunコマンドでパラメータを指定すると実行時にエラーになるので、パラメータをAS側からショートカット側に指定できていません。クリップボード経由で指定するとかいってアクロバット技を使えばできないことはありませんが、パラメータを指定できないのは明らかな「バグ」です。

あとは、他のプログラムとの相互運用性を高めるためには、ショートカット側の実行結果をAS側に返してくれることが望ましいです。オブジェクトによっては、sdefを通じてやりとりできないCocoa Object(CLLocationなど)もありますが、結果は得られるべきでしょう。

ショートカット.appについては、ヘルプにけっこうな内容の説明が書かれているので、まずはそちらを読むとよいでしょう。ただ、日本語訳がよくないのか「お前は何を言ってるんだ?」という表現が散見され、説明文というよりも広告みたいな内容の箇所もあります。

Posted in news | Tagged 12.0savvy Shortcuts Shortcuts Events | 12 Comments

Post navigation

  • Older posts
  • Newer posts

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • macOS 26, Tahoe
  • Script Debuggerの開発と販売が2025年に終了
  • 【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ
  • NSObjectのクラス名を取得 v2.1
  • Xcode上のAppleScriptObjCのプログラムから、Xcodeのログ欄へのメッセージ出力を実行
  • Script Debuggerがフリーダウンロードで提供されることに
  • AppleScript Dropletのバグっぽい動作が「復活」(macOS 15.5β)
  • macOS 26, 15.5でShortcuts.app「AppleScriptを実行」アクションのバグが修正される
  • Dock Menu
  • 執筆中:AppleScript最新リファレンスver2.8対応(macOS 15対応アップデート)
  • Applicationのactivateを記録する v2
  • Appleに買収されたPixelmator ProがAppleとしての初アップデート
  • Claris FileMaker Pro 2025(v22)がリリースされた
  • Numbersで選択範囲のdateの年を+1する
  • macOS 15.5beta5(24F74)でaliasのキャスティングバグが修正された???
  • 複数の重複検出ルーチンを順次速度計測
  • シンプルな文字置換
  • NaturalLanguage.frameworkを用いて日本語テキストの形態素解析を行う
  • AS書類を書式で分解して再構成
  • スタイルつきテキストでスタイルつきテキストを検索 v1.1

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (204) 14.0savvy (159) 15.0savvy (166) 26.0savvy (36) CotEditor (67) Finder (53) Keynote (122) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (53) NSDictionary (28) NSFileManager (23) NSFont (21) NSImage (41) NSJSONSerialization (21) NSMutableArray (63) NSMutableDictionary (22) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (119) NSURL (98) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (78) Pages (58) Safari (44) Script Editor (27) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • date
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Newt On Project
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • process
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • Scripting Additions
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2026年1月
  • 2025年12月
  • 2025年11月
  • 2025年10月
  • 2025年9月
  • 2025年8月
  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC