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

タグ: 26.0savvy

macOS(Mac OS X/OS X)上のAppleScriptの歴史

Posted on 9月 9 by Takaaki Naganoya

macOS 26.0のリリース日が公開されそうなので、AppleScriptの歴史年表について書いておきます。

各種電子書籍に掲載している内容ですが、一般にも共有できていたほうがメリットが多そうなので公開しておきます。

マイナーバージョンで発生したバグの件については、すべて掲載できていません。ファイル書き込み時の文字エンコーディングが狂うとか、OSのバージョン番号をまともに返してこないとか。

Mac OS X 10.0(AppleScript v1.6)
◯Classic Mac OS向けに書かれたOSAXを認識しなくなった 
◯Unicode Textを扱えるようになった(as Unicode Text)
◯Mac OS Xのファイル/アプリケーションの新しい仕組み「バンドル」を扱えるようになった 
◯コマンドラインからosascript、osacompile、osadecompile、osalangが使えるようになった 
◯read/writeコマンドで2GB以上のデータの読み書きができるようになった

Mac OS X 10.1(AppleScript v1.7)
◯AppleScript自体の改行コードに、CR+LF(Windows)、CR(Mac)、LF(Unix)の3種類を使えるようになった(ネイティブはCR)
◯プログラムリンクの機能が復活。ただし、AppleTalkによるノード名称の指定はできず、TCP/IPベースに変更される(eppc://)
◯SOAPとXML-RPCの機能がサポートされた
◯拡張子を扱えるようになった
◯アプレット保存時にPowerPC/68kのどちらかのバイナリを選択するようになった

Mac OS X 10.2(AppleScript v1.9)
◯choose URLがWindows系サービスとFTPサーバーに対応
◯Script Menuの機能が単体でダウンロード提供されるようになった
(Folder ActionsがSystem Eventsの管轄にあるなど混乱期)

Mac OS X 10.3(AppleScript v1.9.2)
×AppleScript史上最大最悪のバグ「is in」演算子が使えないバグが発生(→10.3.x台で修正される)
◯AppleScriptおよびアプリケーションがバンドル形式でも保存できるようになった
◯delayに小数点以下の数値が指定できるようになった
(×AppleScriptの処理系のバグがとても多かった暗黒時代)

Mac OS X 10.4(AppleScript v1.10)
◯日本語環境がらみのバグが多数修正されたが、本格的な修正は10.5を待つ必要があった
×バグの指摘から修正まで時間がかかり、このバージョンを経てようやく処理系の安定が図られるようになった
×Finderからファイルパスを取得するとエンコーディングがおかしくなったり、display dialogで日本語がまともに表示できないアプリが存在していたのもこのバージョンまで

Mac OS X 10.5(AppleScript v2.0)
◯文字列をすべてUnicodeで扱うようになった
◯ASCIIキャラクター0〜255だけでなく、Unicodeの広い範囲の文字を取得できるように「text id xxxx」(xxxxは10進数で指定)が新設された
◯日本語の文字を含むファイルパスの取扱いがまともになってきた
◯アプリケーション起動中の状態(running)を取得できるようになった
◯アプリケーションをバンドルIDで指定できるようになった
◯FolderAction SetupがScriptableになった
◯「#」ではじまるコメント行を書けるようになった

OS X 10.6(AppleScript v2.1)
◯「スクリプトエディタ」が「AppleScriptエディタ」と名称変更
◯AppleScriptエディタが「ユーティリティー」フォルダに移動になった
◯AppleScriptエディタ上での構文色分け機能が強化された
◯AppleScript処理系の(ログイン後の)起動が速くなった
→ ただし、逆にログインアイテムに登録したAppleScriptアプレットが正しく実行されないというバグを生んだ。ログインアイテムに登録したAppleScriptアプレットでSystem Eventsを呼び出すと、System Eventsの起動が間に合わず、エラーになったりしていた

OS X 10.7(AppleScript v2.2)
◯AppleScriptエディタにスクリプトテンプレートの機能が追加された
◯AppleScriptエディタ上でAppleScriptObjC(Cocoa AppleScript Applet)を書けるようになった
×64bit版に書き直されたFinder、通称「Cocoa Finder」の動作速度が遅く、とくにファイル処理をFinderに任せると大幅に速度が低下する現象が発生。Scripterの間で「ファイル処理をFinderで行わないという」暗黙の合意が広がった

OS X 10.8(AppleScript v2.2)
◯AppleScriptエディタに「エクスポート」の機能がついた。アプレットはエクスポートして生成するよう変更
◯AppleScriptがOSのSandbox化の機能の影響を受けるようになった

OS X 10.9(AppleScript v2.3)
◯AppleScript 20年来の大改革。ライブラリ機能「AppleScript Libraries」が追加された
◯ユーザーへのNotification Center経由での通知命令「display notification」が追加された
◯AppleScriptObjCのハンドラ記述方式に、Objective-Cに似た記述方式が使えるようになった(Xcode上)
◯AppleScriptエディタでアプレットへのコードサインができるようになった
◯AppleScriptエディタがiCloudに対応し、iCloud上にAppleScriptを保存、iCloudからのAppleScriptの読み込みができるようになった

OS X 10.10(AppleScript v2.4)
◯「AppleScriptエディタ」が名称変更でふたたび「スクリプトエディタ」に
◯スクリプトエディタ上でCocoaの機能を利用するAppleScriptObjCを標準でサポートするようになった
◯プログレスバーの表示機能をサポート
◯「as」による型変換(cast)で複数の型をリストで指定できるようになった
◯AppleScriptObjCのハンドラ記述方式に、Objective-Cに似た記述方式が使えるようになった(スクリプトエディタ上)
◯ハンドラ(サブルーチン)宣言部でパラメータの型指定が行えるようになった
◯無意味句を用いたハンドラ記述した場合に、パラメータ省略時の初期値を宣言できるようになった

×AppleScriptアプレット中でdelayコマンドを利用したときに、正しく時間待ちされないバグ

×AppleScriptとCocoaの間で小数点を含む実数を変換すると小数点以下の値が欠落するバグ
×NSStringとtext、NSStringとstring、NSStringとUnicode textの間でデータ 変換をしたときに、一部の文字が正しく変換されないというバグ(castバグ)
×Folder Actionにバグ。利用者権限に抵触してまともに動作しない(OS X 10.11で修正)

OS X 10.11(AppleScript v2.5)
◯Folder Actionのバグ修正。FSEventsを用いて随時ドロップされたファイルのイベントを受け付けるように処理方式があらためられた(以前は数秒ごとに対象フォルダをチェック する方式)
◯10.10のAppleScriptObjCのバグ修正(cast、enum)
◯AppleScript Librariesのファイルの置き場所を追加(環境変数で指定可能に)
◯より多くのCocoaのデータ型をAppleScriptの型に変換するようになった
◯delayの時間待ち無効バグ修正

macOS 10.12(AppleScript v2.5)
◯パフォーマンス改善のためのバグ修正を実施
×ドロップレットに不具合。ファイルの拡張属性「com.apple.quarantine」がついていると、ファイルが無視される(Script側で対処。以後Apple修正せず)
×Scripting Bridgeの定義ファイルに不具合。Enum「NSNotFound」のブリッジされている定義値が-1にならない(macOS 10.13.1で修正)

macOS 10.13(AppleScript v2.7)
◯セキュリティ関連の修正を実施
◯NSCharacterSet newlineCharacterSet()のようなメソッドでクラッシュしなくなった
◯NSNotFoundのScriptingBridge経由でブリッジされる定義値を-1に修正(macOS 10.13.1)
◯Remote AppleEventsの機能が復旧し、AppleScriptからLAN上の他のマシンの上で動作しているアプリケーションを直接操作できるようになった(起動している必要がある)

◯ScriptingBridge定義ファイルにバグ。PDFKit中のPDFPageのcurrentPage()がブリッジされていない。報告するも未修正(ずっと未修正)

macOS 10.14(AppleScript v2.7)
◯システム環境設定の「アクセシビリティ」>「プライバシー」に、「フルディスクアクセス」「オートーメーション」が新設され、ディスクやリソースへのアクセス、アプリケーションとの通信を管理するようになった。これに伴い、このアプリケーションへのアクセス認証を得ていない場合に発生するエラー(エラーコード-1743)が新設された。
◯サードパーティのOSAXサポートが廃止された
◯スクリプトメニューが、Menu Extraから独立したアプリケーションに変更になった
◯DVDプレイヤーがアプリケーションから補助ツールに格下げになり、AppleScriptからの操作が行えなくなった
◯SIPの機能が強化されセキュリティが強化された。その結果、アプレット内にFrameworkを同梱して配布したり、~/Library/Frameworksに入れたフレームワークをスクリプトエディタが認識しなくなった(事実上、Script Debuggerが必須に)
◯スクリプトエディタのAppleScript用語辞書から「execute」コマンドが削除された
◯住所録(Contacts.app)でプラグインScriptを利用できる機能が削除された(AppleScript用語辞書には残されているが機能しない)

macOS 10.15(AppleScript v2.7)
◯Remote AppleEvents(eppc)経由で他のマシン上のアプリケーションと通信する場合に、同一ユーザー名であることが必要になった。この制限を解除するためには、「defaults write /Library/Preferences/com.apple.AEServer RestrictAccessToUserSession -bool false」の操作をターミナル上で行う必要がある
◯AppleScript専用補助ツール「Image Events」がデフォルト状態ではファイルに一切アクセスできない状態で出荷される(セキュリティ設定によりアクセス可能に。その後のOSバージョンでも修正されない)

◯Cocoa呼び出しを行なった際の実行速度が大幅に低下(→macOS 12で修正)

macOS 11.0(AppleScript v2.7)
◯ARM(Apple Silicon)対応。AppleScript Appletなど実行アプリケーションがすべてApple Silicon/Intel 64のUniversal Binary化
◯Automator Action用に盲腸のように残っていたAppleScript Studioランタイムの廃止が明言される

◯AppleScriptアプレット中にproperty値が保存されなくなった。property値を保存する場合にはUser Defaultsに書き込む必要がある
◯ファイル共有のプロトコルに「afp://」が利用できなくなった。「smb://」に一本化

◯AppleScript書類(.scpt)アイコンが単なるプレーンテキストのものに変わっている(バグなのか本気なのかは不明。macOS 11.x台では修正されない見込み)

◯System Eventsの初回操作時に明示的に「launch」コマンドの実行が必要に(自動起動しない)

◯macOS 11.5において、NSString’s stringWithFormat:メソッドをAppleScriptから呼び出してもクラッシュしなくなった(macOS 11.0〜11.4の間はクラッシュ発生)

◯これまでに書かれたCocoa Scriptingのプログラムで「書き方が間違っているが、許容されてきた」書き方がエラーもしくはクラッシュを引き起こすようになった
×AppleScriptがM1 CPUの高効率コア「Icestorm」で実行されてしまうため、Cocoa Scripting時にIntel CPUにくらべて10分の1〜70分の1程度にパフォーマンス低下(→macOS 12で修正)

macOS 12.0(AppleScript v2.8)
◯ショートカット.appが標準搭載される。ショートカットにAppleScript実行アクションが搭載され、ショートカット中からAppleScript(Cocoa Scripting機能を含む)の呼び出しが可能に
◯ショートカット.appが起動中でなくてもショートカットを実行できるShortcuts Eventsが標準搭載される

◯Piyomaru Softwareの働きかけにより、macOS 10.15で生じたCocoa Scriptingの速度低下、およびmacOS 11で生じたApple Silicon MacのCocoa Scripting速度低下が是正される。Cocoa呼び出し時のAppleScriptの大幅な処理速度向上
◯macOS 12.3、悪意を持って作られたAppleScriptバイナリ(アプレット)のセキュリティ上の問題(CVE-2022-22626)を解消
◯macOS 12.1〜2の間、日本語環境限定で、NSDataDetectorで自然言語テキストから「電話番号」を抽出する機能が動作していなかった(12.3で修正)
◯macOS 12.3、スクリプトエディタのコンテクストメニュー(スクリプトアシスタント表示用)にバグ。項目が複数回表示される(macOS 13で修正)

◯macOS 12.3.1、セキュリティ強化にともなう不具合(Finder上のselectionをオープンすると、ファイルを作成したアプリケーションが起動されないエラーなど)を修正

◯macOS 12.4、AppleScriptアプレットで、入力検証を強化して、領域外読み込みの脆弱性に対処(CVE-2022-26697)。アプリケーションが予期せず終了したり、プロセスメモリが漏洩したりする可能性がある脆弱性に対し、配列境界チェック機能を改善して対処(CVE-2022-26698)。

macOS 13.0(AppleScript v2.8)
◯「システム環境設定」が「システム設定」に。AppleScriptで各種Paneを表示させる機能が動作しなくなった
→ macOS 13.5あたりでmacOS 14同様の機能を実装、機能復旧
◯「Font Book」がAppleScript非対応に
◯「アプリケーションのAppleScript用語辞書をブラウズする方法が、「アプリケーションのアイコンをスクリプトエディタにドラッグ&ドロップする」ものから「アプリケーションのアイコンをスクリプトエディタの「ライブラリ」ウインドウにドラッグ&ドロップもしくは「+」ボタンのクリックで追加するやりかたに変更される(macOS 14で復旧)
×Text To Speech(テキスト読み上げ音声)のIDがすべて変更になる。日本語環境用にSiriのO-renとHattoriが搭載されるが、sayコマンドで使えるようにはなっていない

×AppleScriptからMail.appにメール作成+送信を行うと1通作成ごとに生成されたプロセスがメモリ上から消えず、メモリを食い潰してマシンの処理速度自体が遅くなる
×スクリプトエディタ上で「Cocoa-AppleScript Applet」のテンプレートから作成したアプレットが動作しない問題が発生
◯テキスト読み上げキャラクタのうち一部のキャラクタで名前がローカライズされてしまい、sayコマンドで指定できないバグが発生(日本語環境限定バグ)

macOS 14.0(AppleScript v2.8)
◯「システム設定」のAppleScriptで各種Paneを表示させる機能が復旧
◯Safari v17で隠し命令「show credit card settings」が追加される。do javascript命令の実行許可のための「Apple EventからのJavaScriptを許可」の場所が設定>デベロッパに変更される
◯ミュージック.appでplaylistの「loved」属性が「favorited」に変更される
◯連絡先.appの廃止済みプラグイン機能用の「Address Book Rollover Suite」の属性がhiddenに変更される

◯スクリプトエディタのコンテクストメニュー・スクリプトに、絵文字つきのファイル/フォルダのコンテンツを入れると、コンテクストメニューに「項目が重複して表示される」不具合が修正される
◯「アプリケーションのAppleScript用語辞書をブラウズする方法「アプリケーションのアイコンをスクリプトエディタにドラッグ&ドロップ」が復旧する
×スクリプトエディタ上で「Cocoa-AppleScript Applet」のテンプレートから作成したアプレットが動作しない問題が継続中
×スクリプトメニューから呼び出したAppleScriptの実行速度が、スクリプトエディタ上よりも6倍以上遅くなる現象が発生
×半角スペース文字列の数値への型変換で処理系自体がクラッシュするバグ(14.0 Sonoma Crasher→ 15.0で修正)
×テキスト読み上げキャラクタのうち一部のキャラクタで名前がローカライズされてしまい、sayコマンドで指定できないバグが継続中(日本語環境限定バグ)

macOS 15.0(AppleScript v2.8)
◯Safariのtabにpidプロパティが追加される
◯AppleScriptドロップレットにドロップしたファイル/フォルダが、xattr「com.apple.quarantine」の影響とGatekeeperの兼ね合いですべてが受け渡されない現象がmcOS 10.12から継続して発生していたが、これが改められ、ドロップされたファイル/フォルダの欠損が発生しなくなった。なお、この変更がmacOS 13.xおよび14.xにもさかのぼって適用された
◯半角スペース文字列の数値への型変換で処理系自体がクラッシュするバグ(14.0, Sonoma Crasher)が解消
×スクリプトエディタ上で「Cocoa-AppleScript Applet」のテンプレートから作成したアプレットが動作しない問題が継続中

×スクリプトメニューから呼び出したAppleScriptの実行速度が、スクリプトエディタ上よりも6倍以上遅くなる現象が継続中
×テキスト読み上げキャラクタのうち一部のキャラクタで名前がローカライズされてしまい、sayコマンドで指定できないバグが継続中(日本語環境限定バグ)

macOS 26.0(AppleScript v2.8)
◯スクリプトエディタ上で「Cocoa-AppleScript Applet」のテンプレートから作成したアプレットがApple Silicon Mac上で動作しない問題が解決される(??????)
◯スクリプトエディタ上でコンパイル(構文確認)を行うと、最終行が見栄なくなる門外が解決される

◯スクリプトエディタがDark Modeに対応
◯スクリプトエディタのアイコンがmacOS 26風に変更される

Posted in History | Tagged 26.0savvy | Leave a comment

開始時刻から終了時刻までhh:mm形式の文字列を15分単位でリスト出力

Posted on 8月 13 by Takaaki Naganoya

指定の開始時刻から終了時刻まで、hh:mm形式の文字列を15分間隔でリスト出力するAppleScriptです。

ありもののサブルーチンを組み合わせて即席で作ったCocoa版のルーチンと、ChatGPT(GPT-5)に書かせた非Cocoa版のルーチンの2つがあり(ChatGPTにCocoa使用を指定せず)、速度を比較してみたら……

非Cocoa版のルーチンのほうが6倍ぐらい高速でした。データが小さすぎるとか、処理内容が小さすぎる場合にはCocoaの機能を利用しないほうが高速に処理できる場合があります。

Shane Stanleyの処理時間計測アプリ「ScriptGeek」が、かなりCocoa Scriptingの登場初期から存在しており、不思議に思ってきたものですが……処理内容の規模によってはCocoa Scriptingのほうが遅くなるケースがあるため、実際に書いて動かして計測してみないと、Cocoa Scriptingで高速化が達成できるかわからないところです。

このほか、AppleScriptのランタイム環境が何になるかによって実行速度は変わってきます。Xcode上で開発するCocoa Applicationなども実行特性が違うため、やはり動かして計測してみないと何がベストなのかはわかりません。

ただ、この程度の処理であれば、0.0028秒が0.4秒になったところで、何か実用上の差異が発生するわけでもありません。

追記:
追加で最速パターンを掲載しておきます。汎用性を求めて計算して出力していましたが、ほとんどの用途で毎回同じようなデータを出力することでしょう。なので、固定データを返すだけでいいだろうかと。高速版とくらべても65〜70倍ぐらい高速です(当たり前)。

AppleScript名:15分メッシュの時間文字列を生成.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/08/13
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

set aRes to generateWorkUnitList() of me
–> {"5:15", "5:30", "5:45", "6:00", "6:15", "6:30", "6:45", "7:00", "7:15", "7:30", "7:45", "8:00", "8:15", "8:30", "8:45", "9:00", "9:15", "9:30", "9:45", "10:00", "10:15", "10:30", "10:45", "11:00", "11:15", "11:30", "11:45", "12:00", "12:15", "12:30", "12:45", "13:00", "13:15", "13:30", "13:45", "14:00", "14:15", "14:30", "14:45", "15:00", "15:15", "15:30", "15:45", "16:00", "16:15", "16:30", "16:45", "17:00", "17:15", "17:30", "17:45", "18:00", "18:15", "18:30", "18:45", "19:00", "19:15", "19:30", "19:45", "20:00", "20:15", "20:30", "20:45"}

on generateWorkUnitList()
  set hList to {}
  
  
repeat with h from 5 to 20 by 1
    repeat with m from 0 to 59 by 15
      if {h, m} is not equal to {5, 0} then
        set mStr to numToZeroPaddingStr(m, 2, "0")
        
set the end of hList to (h as string) & ":" & mStr
      end if
    end repeat
  end repeat
  
  
return hList
end generateWorkUnitList

–整数の値に指定桁数ゼロパディングして文字列で返す
on numToZeroPaddingStr(aNum as integer, aDigit as integer, paddingChar as text)
  set aNumForm to current application’s NSNumberFormatter’s alloc()’s init()
  
aNumForm’s setPaddingPosition:(current application’s NSNumberFormatterPadBeforePrefix)
  
aNumForm’s setPaddingCharacter:paddingChar
  
aNumForm’s setMinimumIntegerDigits:aDigit
  
  
set bNum to current application’s NSNumber’s numberWithInt:aNum
  
set aStr to aNumForm’s stringFromNumber:bNum
  
  
return aStr as text
end numToZeroPaddingStr

★Click Here to Open This Script 

AppleScript名:15分メッシュの時間文字列を生成(高速).scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/08/13
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

set mList to retWorkingMeshStrList() of me
–> {"5:15", "5:30", "5:45", "6:00", "6:15", "6:30", "6:45", "7:00", "7:15", "7:30", "7:45", "8:00", "8:15", "8:30", "8:45", "9:00", "9:15", "9:30", "9:45", "10:00", "10:15", "10:30", "10:45", "11:00", "11:15", "11:30", "11:45", "12:00", "12:15", "12:30", "12:45", "13:00", "13:15", "13:30", "13:45", "14:00", "14:15", "14:30", "14:45", "15:00", "15:15", "15:30", "15:45", "16:00", "16:15", "16:30", "16:45", "17:00", "17:15", "17:30", "17:45", "18:00", "18:15", "18:30", "18:45", "19:00", "19:15", "19:30", "19:45", "20:00"}

on retWorkingMeshStrList()
  set startSeconds to (5 * 3600) + (15 * 60) — 5:15 の相対秒
  
set endSeconds to (20 * 3600) — 20:00 の相対秒
  
set intervalSeconds to 15 * 60 — 15分間隔
  
  
set timeList to {}
  
  
repeat with t from startSeconds to endSeconds by intervalSeconds
    set h to t div 3600
    
set m to (t mod 3600) div 60
    
— 2桁表示に整形
    
–set hStr to text -2 thru -1 of ("0" & h)
    
set hStr to h as string
    
set mStr to text -2 thru -1 of ("0" & m)
    
set end of timeList to (hStr & ":" & mStr)
  end repeat
  
  
return timeList
end retWorkingMeshStrList

★Click Here to Open This Script 

AppleScript名:15分メッシュの時間文字列を生成(最速).scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/08/10
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4"
use framework "Foundation"
use scripting additions

set hList to generateWorkUnitList() of me

on generateWorkUnitList()
  return {"5:15", "5:30", "5:45", "6:00", "6:15", "6:30", "6:45", "7:00", "7:15", "7:30", "7:45", "8:00", "8:15", "8:30", "8:45", "9:00", "9:15", "9:30", "9:45", "10:00", "10:15", "10:30", "10:45", "11:00", "11:15", "11:30", "11:45", "12:00", "12:15", "12:30", "12:45", "13:00", "13:15", "13:30", "13:45", "14:00", "14:15", "14:30", "14:45", "15:00", "15:15", "15:30", "15:45", "16:00", "16:15", "16:30", "16:45", "17:00", "17:15", "17:30", "17:45", "18:00", "18:15", "18:30", "18:45", "19:00", "19:15", "19:30", "19:45", "20:00"}
end generateWorkUnitList

★Click Here to Open This Script 

Posted in date list Text | Tagged 14.0savvy 15.0savvy 26.0savvy ChatGPT | Leave a comment

Finderを終了させる

Posted on 7月 29 by Takaaki Naganoya

Finderを終了させたままにしておくAppleScriptです。

この種類のQ&Aだと、

do shell script "killall Finder"

といった回答が書かれがちですが、これだと終了させたままにはできません。

Finderを終了させたままにしておく方法について調べてみたら、見つかったのでまとめておきました。

AppleScript名:Finderを終了させる.scpt
do shell script "defaults write com.apple.Finder QuitMenuItem -boolean true"

tell application "Finder" to quit

★Click Here to Open This Script 

Posted in process | Tagged 13.0savvy 14.0savvy 15.0 26.0savvy Finder | Leave a comment

Claris FileMaker Pro 2025(v22)がリリースされた

Posted on 7月 12 by Takaaki Naganoya

Appleの子会社であるClarisから、Claris FileMaker Pro 2025(v22)がリリースされました。

AppleScript名:Claris FileMaker Pro 2025のバージョン番号取得.scpt
tell application "FileMaker Pro"
  version
  
–> "22.0.1"
end tell

★Click Here to Open This Script 

AppleScript用語辞書は前バージョンから変更されていません。

Posted in news | Tagged 14.0savvy 15.0savvy 26.0savvy | Leave a comment

ASCII ARTで直線を引く v3.1

Posted on 7月 8 by Takaaki Naganoya

ASCII ARTで指定の2点間に線を引くAppleScriptです。(デモ用の)文字で表現するゲームを作る場合に、基礎ルーチンを整備しておく必要性を感じて、書いておきました。

AppleScript名:ASCII ARTで直線を引く v3.1.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/07/07
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

property widthCount : 40
property heightCount : 25
property spaceChar : " "
property drawChar : "■"

— 使用例
set canvas to makeBlankCanvas() of me

set canvas to drawLine(canvas, 0, 0, 39, 24, 1) of me — 太さ1の線

set curDelim to AppleScript’s text item delimiters
set AppleScript’s text item delimiters to return
set resultText to canvas as text
set AppleScript’s text item delimiters to curDelim

return resultText

on makeBlankCanvas()
  set blankLine to ""
  
repeat widthCount times
    set blankLine to blankLine & spaceChar
  end repeat
  
set canvas to {}
  
repeat heightCount times
    set end of canvas to blankLine
  end repeat
  
return canvas
end makeBlankCanvas

on drawLine(canvas, x0, y0, x1, y1, thickness)
  script spd
    property drawnPositions : {}
    
property drawXCoords : {}
    
property canvas : {}
    
property lineChars : {}
  end script
  
  
copy canvas to (canvas of spd)
  
  
set dx to x1 – x0
  
set dy to y1 – y0
  
set lineLength to (dx * dx + dy * dy) ^ 0.5
  
  
if lineLength = 0 then
    if x0 ≥ 0 and x0 < widthCount and y0 ≥ 0 and y0 < heightCount then
      set theLine to item (y0 + 1) of (canvas of spd)
      
set newLine to replaceCharAt(theLine, x0 + 1, drawChar)
      
set item (y0 + 1) of (canvas of spd) to newLine
    end if
    
    
return (canvas of spd)
  end if
  
  
set nx to –dy / lineLength
  
set ny to dx / lineLength
  
  
set halfThickness to (thickness – 1) / 2
  
if halfThickness < 0 then set halfThickness to 0
  
  
set x to x0
  
set y to y0
  
  
set dxAbs to absNum(dx) of me
  
set dyAbs to absNum(dy) of me
  
set sx to signNum(dx) of me
  
set sy to signNum(dy) of me
  
set err to dxAbs – dyAbs
  
  
set (drawnPositions of spd) to {}
  
  
repeat
    set (drawXCoords of spd) to {}
    
repeat with t from –halfThickness to halfThickness
      set pxF to x + nx * t
      
set pxInt to pxF as integer
      
if pxInt ≥ 0 and pxInt < widthCount then
        if (drawXCoords of spd) does not contain pxInt then
          set end of (drawXCoords of spd) to pxInt
        end if
      end if
    end repeat
    
    
set pyInt to y as integer
    
if pyInt ≥ 0 and pyInt < heightCount then
      set theLine to item (pyInt + 1) of (canvas of spd)
      
set (lineChars of spd) to characters of theLine
      
      
repeat with pxInt in (drawXCoords of spd)
        set posKey to (pxInt as string) & "," & (pyInt as string)
        
        
if (drawnPositions of spd) does not contain posKey then
          set item (pxInt + 1) of (lineChars of spd) to drawChar
          
set end of (drawnPositions of spd) to posKey
        end if
        
      end repeat
      
      
set newLine to (lineChars of spd) as string
      
set item (pyInt + 1) of (canvas of spd) to newLine
    end if
    
    
if x = x1 and y = y1 then exit repeat
    
    
set e2 to 2 * err
    
if e2 > –dyAbs then
      set err to err – dyAbs
      
set x to x + sx
    end if
    
    
if e2 < dxAbs then
      set err to err + dxAbs
      
set y to y + sy
    end if
  end repeat
  
  
return (canvas of spd)
end drawLine

on replaceCharAt(str, pos, char)
  if pos < 1 or pos > (length of str) then return str
  
set prefix to text 1 thru (pos – 1) of str
  
set suffix to text (pos + 1) thru -1 of str
  
return prefix & char & suffix
end replaceCharAt

on absNum(n)
  if n < 0 then return –n
  
return n
end absNum

on signNum(n)
  if n > 0 then return 1
  
if n < 0 then return -1
  
return 0
end signNum

★Click Here to Open This Script 

Posted in Text | Tagged 13.0savvy 14.0savvy 15.0savvy 26.0savvy | Leave a comment

NLTaggerで品詞つきの日本語形態素解析

Posted on 6月 30 by Takaaki Naganoya

ChatGPTに日本語形態素解析のAppleScriptを書かせてみました。そのままでは使い物にならず、ずいぶん書き直しましたが、ゼロから書くよりは時間の節約になっています。

ただし、実際に書いて動かしてみるとNLTaggerでは日本語の品詞情報が取得できないので、ほぼ役に立ちません。MeCab経由で取得したほうが実用的です。

この状態で「なんちゃらIntelligence」とか言われても、「はぁ?」としか、、、基礎ができていないのに応用はできませんよ。

AppleScript名:NLTaggerで品詞つきの日本語形態素解析(ただし、品詞はほとんど役に立たない).scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/06/30
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.8" — macOS 12 or later
use framework "Foundation"
use framework "NaturalLanguage"
use scripting additions

set inputText to current application’s NSString’s stringWithString:"私は昨日東京に行きました。"

— NLTaggerの作成(品詞情報を取得したいのでLexicalClassを指定)
set tagger to current application’s NLTagger’s alloc()’s initWithTagSchemes:{current application’s NLTagSchemeLexicalClass}
tagger’s setString:inputText
tagger’s setLanguage:(current application’s NLLanguageJapanese) range:{location:0, |length|:(inputText’s |length|())}

— 結果を格納するリスト
set tokenList to {}

— 解析処理
set inputLength to (inputText’s |length|()) as integer
set currentIndex to 0

repeat while currentIndex < inputLength
  set tokenRangeRef to reference
  
set {tagRes, theRange} to tagger’s tagAtIndex:(currentIndex) unit:(current application’s NLTokenUnitWord) |scheme|:(current application’s NLTagSchemeLexicalClass) tokenRange:(tokenRangeRef)
  
–return theRange
  
  
set theRange to theRange as record
  
set startLoc to theRange’s location
  
set rangeLen to theRange’s |length|()
  
  
if (rangeLen > 0) then
    set tokenText to inputText’s substringWithRange:(current application’s NSMakeRange(startLoc, rangeLen))
    
if tagRes is not missing value then
      set posStr to tagRes as string
    else
      set posStr to "Unknown"
    end if
    
set endIndex to startLoc + rangeLen
    
set end of tokenList to {(tokenText as string), posStr}
    
set currentIndex to endIndex
  else
    exit repeat
  end if
end repeat

return tokenList
–> {{"私", "OtherWord"}, {"は", "OtherWord"}, {"昨日", "OtherWord"}, {"東京", "OtherWord"}, {"に", "OtherWord"}, {"行き", "OtherWord"}, {"まし", "OtherWord"}, {"た", "OtherWord"}, {"。", "SentenceTerminator"}}

★Click Here to Open This Script 

Posted in Natural Language Processing | Tagged 15.0savvy 26.0savvy NLTagger | Leave a comment

macOS 26, 15.5でShortcuts.app「AppleScriptを実行」アクションのバグが修正される

Posted on 6月 10 by Takaaki Naganoya

macOS 15.xで続いていた、Shortcuts.appの「AppleScriptを実行」アクションにおいて、デフォルト入力されるべきハンドラなどのScriptが新規追加時に入力されないバグが、修正されたようです。

これは、macOS 26BetaのShortcuts.app上で本バグが修正されていたことから、macOS 15.5上のShortcuts.appの再確認を行ったところ、実際に修正されていることが明らかになりました。

macOS 15.5上のShortcuts.app ようやく「AppleScriptを実行」アクションのバグが修正されたもよう

Posted in Bug | Tagged 15.0savvy 26.0savvy Shortcuts | Leave a comment

macOS 26, Tahoe

Posted on 6月 10 by Takaaki Naganoya

バージョン番号のリナンバーが行われ、macOS 15の次はmacOS 26ということになりました。AppleScriptで「system info」を実行すると、 system version:”26.0″が返ってきます。

スクリプトエディタのバージョンは上がっていませんが、Dark Modeへの対応が行われており、エディタ背景がDark Modeで暗くなるようです。ウィンドウの角丸の半径が大きくなって、全体的にオモチャみたいな印象を受けます。個人的に嫌いではないですが、画面を広く使えない(余白が多い)ので現場によっては困ることも。

AppleScriptのバージョンは2.8で変更なし。まだそんなに真剣に使っていないので、AppleScriptから見て挙動が変わったかといった点はわかりません。

β版のmacOSでありがちな、バージョン取得機能ミスや、aliasからPOSIX pathへの変換ミスなどは見られませんでした。

ただ、WWDC Keynoteで見られたガラス調のUIの見た目については、現時点では見られず、これがまだ実装が間に合っていないためなのか、M1 Mac miniだと環境的に再現しないのかは不明です。

テキスト読み上げ音声系のVoice Characterが増えたりはしていないのですが、「プレミアム」と「拡張」が同時に存在しているなど、ポリシーにゆらぎが見えます。どちらかにするのではないんですね。

バグ:
スクリプトエディタ内からスクリプトメニューをオンに設定しても、ステータスメニュー上にスクリプトメニューが表示されません。すぐにオフになります。この点はバグでしょう(調査が始まったとの話)。

Xcode 26でAppleScript App templateが認識されませんでした。関係者に報告していますが、回答はもらっていません。一応、既存のXcode ProjectをmacOS 26に持って行って、ビルド+実行できることは確認しています。テンプレートの場所や記法が変わったのかも?

→ Xcodeのテンプレートのフォルダが変更になったようです。従来は、~/Library/Xcode/Templatesでしたが、Xcode 26では~/Library/Developer/Xcode/Templates に変わっていました(ドキュメントとかヘルプに記載なし)。

→ 関係者との協議のすえ、これは自分の勘違いで最初から ~/Library/Developer/Xcode/Templates であったことが判明しました。

Posted in news | Tagged 26.0savvy | Leave a comment

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

Google Search

Popular posts

  • Numbersで選択範囲のセルの前後の空白を削除
  • macOS 15でも変化したText to Speech環境
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • Script Debuggerの開発と販売が2025年に終了
  • 【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ
  • KagiのWebブラウザ、Orion
  • AppleScript入門① AppleScriptってなんだろう?
  • macOS 14で変更になったOSバージョン取得APIの返り値
  • macOS 15 リモートApple Eventsにバグ?
  • macOS 26, Tahoe
  • macOS 15:スクリプトエディタのAppleScript用語辞書を確認できない
  • 2024年に書いた価値あるAppleScript
  • NSObjectのクラス名を取得 v2.1
  • 有害ではなくなっていたSpaces
  • Pixelmator Proがv3.6.8でHDR画像をサポート
  • Xcode上のAppleScriptObjCのプログラムから、Xcodeのログ欄へのメッセージ出力を実行
  • (確認中)AppleScript Dropletのバグっぽい動作が解消?
  • AVSpeechSynthesizerで読み上げテスト
  • AppleScript Dropletのバグっぽい動作が「復活」(macOS 15.5β)
  • 指定フォルダ以下の画像のMD5チェックサムを求めて、重複しているものをピックアップ

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (200) 14.0savvy (155) 15.0savvy (144) CotEditor (66) Finder (52) Keynote (119) 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 (76) Pages (55) Pixelmator Pro (20) 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
  • 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)
  • 未分類

アーカイブ

  • 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