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

カテゴリー: How To

iWorkアプリケーションがアップデート。日本語の縦書きテキストに対応

Posted on 3月 29, 2019 by Takaaki Naganoya

Keynote、Pages、NumbersのいわゆるiWorkアプリケーションがそろってアップデートし、日本語、中国語、韓国語の縦書きテキストに対応しました。

Keynote Pages Numbers
macOS 10.12 v8.1 v7.1 v5.1
macOS 10.13 v9.0 v8.0 v6.0
macOS 10.14 v9.0 v8.0 v6.0

この、macOS 10.14用のバージョンが今回の最新アップデートです。最新のiWorkアプリケーションは最新のmacOSが必要です(記事執筆時にはmacOS 10.13用のアップデータが出ていなかったのでこう書きました。現在は10.13/10.14で実行可能)。

iWorkアプリケーション、とくにPagesについては日本語の縦書きができないことに対してMac App Store上で膨大な批判コメントがついており、アップデートとともにこれらの批判をかわそうという意図のようです(かわすだけで、もう一歩進んだ使い方の提案などはしていないもよう)。

macOS 10.12で足踏みをしている多くのユーザー(10.13が地雷すぎてアップデートできなかったユーザー)にアップデートを思い切らせるだけのものがあるでしょうか?

AppleScript用語辞書にselectionが装備され、Pagesでは活用できる

例によってこれらのiWorkアプリケーションのAppleScript用語辞書を書き出して前バージョンと比較したところ、数少ないものの大きな変更が加わっていることがわかりました。それが「selection」の実装です。

「選択中のオブジェクトに対してScriptで操作を行う」

という処理がほぼできなかったiWorkアプリケーションにおいて、selectionが実装されたことの意味は大きいと思います。

ただし、本当にすべてのオブジェクトをselectionで取得できるのか、実際に検証するまでわかりません(それがAppleクオリティー)。

検証したところ、KeynoteとNumbersではほとんど機能アップしておらず、既存の「選択中のスライド」(current slide)「現在のドキュメント」(front document)という範囲でしかselectionが機能していないことが判明しました(Numbersで「選択中の表」をselectionから取得できないのはとても残念。別の方法(↓)はあるけど)。


tell application "Numbers"
  tell front document
    tell active sheet
      set theTable to first table whose class of selection range is range
      
      
tell theTable
        try
          set selList to value of every cell of selection range –選択範囲のデータを取得
        on error
          return "" –何も選択されてなかった場合
        end try
      end tell
      

    end tell
  end tell
end tell

★Click Here to Open This Script 

唯一、Pagesではさまざまな選択中のオブジェクトにアクセスできるようになっており、常識的なエンジニアが担当していれば、じきに各アプリケーション間の機能の不整合を修正してくることでしょう。

今回のアップデートが、Pagesを中心に行われた(Pagesと共通の部品を使って、ついでにオマケでKeynoteとNumbersの機能アップが行われた)ことが伺い知れます。

Pages書類上のオブジェクトでも、状態によって参照できないケースも

まだ実装途上と思わせるものが、このあたりにあります。書類内のさまざまなオブジェクトによって、状態によってはselectionから(実際に選択していても)参照できないものがありました。とくに、Pages書類上の本文テキストをselectionから取得できないことについては、「テキストエディタ以下」「CotEditorの爪の垢でも煎じて飲ませてもらえ」ともいえるわけで、最大のがっかりポイントといえます。

オブジェクト配置=テキストと移動(デフォルト) オブジェクト配置=移動しない
本文中の文字 selectionから取得できない(エラーになる) selectionから取得できない(エラーになる)
表(table) selectionから取得できない(エラーになる) 取得できる
図形(shape) 取得できる 取得できる
グラフ(chart) 取得できる 取得できる
画像(image) 取得できる 取得できる
テキストオブジェクト(shape) 取得できる 取得できる
ムービー(movie) 取得できる 取得できる
ライン(line) 取得できる 取得できる

また、imageオブジェクトはファイルパスを「file」という属性ラベルで返してくることになっているのですが、この「file」が既存のAppleScriptの予約語とコンフリクトしており、属性値をまとめて取得しようとするとエラーになります。

imageオブジェクトからfile属性を単独で取得してもエラーになるため、Scripterからは解決方法がありません。ここは予約語を「image path」などのコンフリクトしない単語ないし連語に変更することで問題の回避を行なっていただきたいものです。

縦書き属性はAppleScriptから操作不能

現時点では、AppleScriptでアクセス可能な属性値に縦書きへの変更を行うためのものは用意されていません。縦書きのテキストオブジェクトを任意の場所に作成するといった処理は無理です。

しいていえば、あらかじめ縦書きのテキストアイテム(place holder)を含むテンプレート書類を用意しておき、テンプレートから作成した新規書類のplace holderにテキストを流し込むぐらいでしょうか。あと、GUI Scriptingで強引に操作すれば、縦書きのテキストアイテムを生成できないこともありません。

けっこうグッときました

最初、用語辞書の中に「selection」をみつけたときにはメイン環境をmacOS 10.12.6から10.14.4にアップデートしかけました。

ただ、詳細に検証して実態がわかると、アップデートを思いとどまりました。「selection」が利用できることの意義は大きいですが、Pagesの地の文(本文)の選択範囲が取得できないなど、何を目的として実装されたかが不明な仕上がりになっています。最終的には、本文テキストないしオブジェクト内部テキストの選択を取得するselectionと、各オブジェクトの選択を求めるselected itemの2つに分けるのがスマートなやり方だと思います(実装する方にしてみれば、泥臭い努力が必要なわけですが)。

Pagesのtableオブジェクトへのアクセスに「オブジェクト配置=移動しない」への設定が要求されることについては、かなり根深い問題があるものと思われますが、もう2・3発ジャブが入っていたら(Keynote上のテキストオブジェクトとか、Numbers上の表オブジェクトをselectionからアクセスできたとか)macOS 10.14にアップデートしていたかもしれません。

Posted in How To | Tagged 10.14savvy Keynote Numbers Pages | Leave a comment

US Apple主催のMailing Listの死活判定

Posted on 2月 14, 2019 by Takaaki Naganoya

自分は100個以上のApple MLを購読。さすがに政府公共機関向けと学校教育機関向けMLは追い出されましたが、入れるかぎりのMLに入っておいて、手元(Mail.app上)でAppleScriptのボットを走らせメールタイトルをもとに綿密なフォルダ分けを行なって、各ML上の頻出語句でフォルダ分けして情報を整理・活用しておりました。

そんな最中、2017年1月末に発生したML Serverのダウン。その後1か月もの間、US Appleにあらゆる方法でコンタクトして無視されるという経験を経て、US在住のMLメンバーが知り合いのApple社員に電話し、それでようやく復旧したことは記憶に新しいところです。

ここに、数日前に掲載した、list.apple.com上の「Lists hosted on this site」のML一覧の画像があります。25個のMailing Listが掲載されていることが確認できます(記事作成時点のカウント)。

しかし、自分の手元には、このリストに載っていないMLあてのメールが続々と到着。

「あれ? list server上で加入フォームへのリンクが設置されていない、活動中のMailing Listがけっこうある??」

と、気がついて、、、Numbers上に記載したメールアドレスを読み取ってテストメールを送信するAppleScriptを作成して、ジャンルごとにMailing Listにテストメールを送信してみました。

手で数えたところ、「Lists hosted on this site」のページからリンクされていないが、物理的に生きているMLが35もありました。内容によっては極端に流量が少なかったり、すでに廃止されて久しい技術のために論理的に生きていないMLなどもありますが、それでも30前後は普通に運用されているMLと言ってよいでしょう。

以下、自分の個人的なカテゴリ分けのもと、「紹介されていないが生きている」MLは名称を赤く塗っておきました。

個別のMLを正式に終了させる場合には、きちんとアナウンスしてほしいところです。

追記:SALT MLとSmartCard Users MLがテスト対象のリストからもれていましたが、いずれも健在のようです。

Posted in How To | Leave a comment

AppleScriptの情報源

Posted on 2月 9, 2019 by Takaaki Naganoya

AppleScript関連の情報源については、US Appleの主催しているAppleScript Users MLが圧倒的に活発だったのですが、2017年1月31日「血の火曜日事件」とのちに呼ばれる(嘘)MLサーバーのクラッシュが発生。

このサーバーダウンに際してAppleに対しさまざまなチャネル経由で「MLサーバーが落ちてるぞ!」と知らせたものの、縦割り管理が行きすぎてトラブルへの対応がめちゃめちゃ後手後手なApple。まったくMLサーバーの障害について対応しませんでした(Developper Support経由でアクセスしても対応がないのはどうかと思います)。

CEOに直接メールしてもダメ、Developper Supportにメールや電話してもダメ。MLの管理者にメールしろとか言われましたが、落ちているサーバー上にアカウントがある管理者にメールして、何の意味があるというのでしょう。

結局、この1か月間の空白によりMailing Listから多くのユーザーが離れ、MLが復旧したことを1年間知らなかったユーザーがいたほどです。

「人の煩悩の数ほど存在している」と言われていたApple MLですが、開発者サポートについてはWebフォーラムに移行しつつありました。これは、従業員が仕事中にMLに質問を投げたり回答することをTopが嫌ったとも、Apple Developper Program外のメンバーに対してApple従業員がコメントすることのコストをTopが嫌ったとも噂されていますが、正確なところはよくわかりません。

Mailing Listでないと自動処理ロボットで情報収集をしにくいし、Webフォーラムはサーバーの応答性によって閲覧に時間がかかるのでとてもとても勘弁してほしいのですが、最近はフォーラムが多いようです。

(1)AppleScript Users ML

Shaneが(4)と(5)にコメントをするようになって、それにしたがって(1)から人が減ったように思います。現状、あんまり活性度は高くありません。

(2)GroupsIO ML

(1)がコケたときに危機感を抱いた有志が立ち上げたML群です。AppleScript系ではあんまり活性度は高くありません。

(3)Apple Developper Forum

正直、使い勝手がいまひとつで、質問しても答えてもらえそうな気配がまったくしません。ここにはScripterはまったくいません。Appleの従業員が質問に答えてくれるようですが、そんなもんに一切期待していないので用はありません。

(4)Mac Scripter Forum

Xcode関連のScript(Xcode上でGUIアプリを記述するAppleScript)だとここで調べ物をしています。2018/9に管理者が交代になってLate Light Softwareが(Mark AlldrittとShane Stanleyが)運営、コメントするようになりました。

(5)Late Night Software Forum

2016年ごろに刷新されたWeb Forumです。割と活発に稼働していますが、基本的に「メーカーへの質問」とか「ユーザーサポート」の性質が強いので、書き込みしにくい印象があります(個人の印象です)。

これらのほかに、Twitterで「AppleScript」をキーワードに検索巡回を行い、間違った内容を吹聴しているユーザーに対して「これはこうだよー」とBotのようにコメントをつけています。ただ、TwitterのMac版クライアントがなくなって使い勝手が著しく悪くなったので、先行き不透明です。

ちなみに、本Blogにもフォーラムを作っておきましたが、なぜか私の独演会状態になっています。

(6)Piyomaru Software Books

Piyomaru Softwareによる電子ブック(PDF)を多数刊行しています。

Posted in How To | 2 Comments

Illustratorで指定のartboardの名称を取得する

Posted on 1月 11, 2019 by Takaaki Naganoya

Adobe Illustratorで指定のartboardの名称を取得するAppleScriptです。

本来であれば、Illustratorのdocument以下のartboardの名称を取得するのであれば、

tell application "Adobe Illustrator"
  set aName to name of artboard 1 of document 1
end tell

★Click Here to Open This Script 

で取得できる「はず」ですが、実際にAdobe Illustratorに対してこれを実行するとエラーになります(Adobe Illustrator CC2018=Adobe Illustrator v22.1にて実行)。

これは、Adobeがいいかげんな実装を行って、出荷前に一切のチェックを行わないためです。100% Adobeのせいです。

ちなみに、このproperty値からnameをIllustratorへのtellブロック外で取得すると、

のようになります。エラーメッセージの文字列としては取得できることがわかります。エラーメッセージのダイアログではAdobe IllustratorのAppleScript用語辞書の予約語を用いて表示が行われていますが、実際にエラーメッセージを(Adobe Illustratorのtellブロック外で)文字列として取得すると、用語辞書が用いられないので生のAppleEventの文字列を相手にすることになります。

というわけで、手段をえらばずにエラーメッセージから名前を取り出してみました。任意のアートボードのプロパティ値を取得してgetArtboardNameFromPropertiesを呼び出すと、アートボード名を抽出します。なお、動作原理の都合上、アートボード名にダブルクォートを含まないようにしてください。

こんなイレギュラーでトリッキーなやり方が必要なのは、Adobeの開発者がバカだからです(本当に)。心の底から軽蔑します(artboardのnameを取得する場合には、部分的にJavaScriptを呼び出して実行してもOK、というかその方法が推奨されます)。

AppleScript名:アートボードの名前を取得する
—
–  Created by: Takaaki Naganoya
–  Created on: 2019/01/11
—
–  Copyright © 2019 Piyomaru Software, All Rights Reserved
—
use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

tell application "Adobe Illustrator"
  tell document 1
    tell artboard 1
      set aProp to properties
      
set aName to getArtboardNameFromProperties(aProp) of me
    end tell
  end tell
end tell

on getArtboardNameFromProperties(aProp)
  set beginStr to "«class bAl9»:\""
  
  
try
    set aRec to aProp as string
  on error erM
    set offsetA to offset of beginStr in erM
    
set ermB to text (offsetA + (length of beginStr)) thru -1 of erM
    
set offsetB to offset of "\"" in ermB
    
set resB to text 1 thru (offsetB – 1) of ermB
    
return resB
  end try
  
  
error "Illigal Data Format" –Error
end getArtboardNameFromProperties

★Click Here to Open This Script 

Posted in How To Raw AppleEvent Code | Tagged 10.12savvy 10.13savvy Illustrator | 2 Comments

Closure?

Posted on 1月 4, 2019 by Takaaki Naganoya

AppleScriptにClosureがない云々という話を見かけることがあります。JavaScript系の人が言っているのをよく見かけます。

ハンドラ内にさらに入れ子状にハンドラを宣言してプライベートなハンドラとして利用するのがclosureである、という説明を見かけました。

そういうものであれば、明確に存在します。Script文で記述するScript Objectです。

ハンドラ内に記述したScript文でScript Objectの宣言を行い、ハンドラ内でプライベートなサブハンドラを列挙することもできますし、外部に記述して論理分割することもできます。

実際に、巨大なScript同士を(何も考えずに)つないで使うような場合に重宝しています。

プライベートなハンドラをハンドラ内に入れ子状に作成したScript(本サンプルScriptのようなもの)については、たしかにinnerFunc1やinnerFunc2はメイン側(一番外側)からは直接呼び出すことはできないので、プライベートな関数のような扱いを行えます。便利かもしれないし、それほどでもない感じもします。

このあたりは個人の「趣味」の世界なので、そういう構造にしたい人はすればいいし、したくない人はしなければよいのではないでしょうか。

AppleScript名:closure1
set a to mainHander("ABC") of me
–> "ABCABC….ABCABC"

on mainHander(aParameter)
  script aClosure
    
    
on innerFunc1(aParameter)
      set a to aParameter & aParameter
      
return a
    end innerFunc1
    
    
on innerFunc2(aParameter)
      set a to aParameter & "…." & aParameter
      
return a
    end innerFunc2
    
  end script
  
  
set a to innerFunc1(aParameter) of aClosure
  
set b to innerFunc2(a) of aClosure
  
return b
end mainHander

★Click Here to Open This Script 

Cocoaの機能を利用するAppleScriptObjCの宣言を行った場合でも、同様にハンドラ内のScript Object内にさらにプライベートハンドラを記述する記法はコンパイル(=構文確認)を通るようです。

AppleScript名:closure2
—
–  Created by: Takaaki Naganoya
–  Created on: 2019/01/04
—
–  Copyright © 2019 Piyomaru Software, All Rights Reserved
—

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

set a to mainHander("ABC") of me
–> "ABCABC….ABCABC"

on mainHander(aParameter)
  script aClosure
    
    
on innerFunc1(aParameter)
      set a to aParameter & aParameter
      
return a
    end innerFunc1
    
    
on innerFunc2(aParameter)
      set a to aParameter & "…." & aParameter
      
return a
    end innerFunc2
    
  end script
  
  
set a to innerFunc1(aParameter) of aClosure
  
set b to innerFunc2(a) of aClosure
  
return b
end mainHander

★Click Here to Open This Script 

Posted in How To JavaScript | Tagged 10.11savvy 10.12savvy 10.13savvy 10.14savvy | 1 Comment

Keynoteの表セルに計算式を入れる

Posted on 12月 5, 2018 by Takaaki Naganoya

Keynoteの最前面の書類の現在表示中のスライド(ページ)上の表の指定セルに計算式を入れ、表示フォーマットを指定するAppleScriptです。

計算式については、Keynote上で実際に入力して、AppleScriptから指定セルのpropertyを取得して、記入方法を確認しました。

tell application "Keynote"
  tell front document
    tell current slide
      tell table 1
        tell column 2
          tell cell 3
            properties
            
–> {vertical alignment:center, row:row "3" of table 1 of slide 1 of document id "11E9C7CA-50E5-4360-A26D-C8B14BAE004D" of application "Keynote", class:cell, font name:"HiraKakuProN-W3", formatted value:"50%", background color:{65527, 65533, 65524}, formula:"=B2÷B1", name:"B3", text wrap:true, text color:{0, 0, 0}, alignment:center, column:column "B" of table 1 of slide 1 of document id "11E9C7CA-50E5-4360-A26D-C8B14BAE004D" of application "Keynote", format:percent, font size:22.0, value:0.5}            
          end tell
        end tell
      end tell
    end tell
  end tell
end tell

★Click Here to Open This Script 

このような状態で、

実際に実行すると、

のようになります。セルに指定できるformatの種類は、KeynoteのAppleScript用語辞書にあるように、

automatic/‌checkbox/‌currency/‌date and time/‌fraction/‌number/‌percent/‌pop up menu/‌scientific/‌slider/‌stepper/‌text/‌duration/‌rating/‌numeral system

のとおりです。実際に指定してみるとわかるのですが、Keynoteのアプリケーション仕様にない予約語があり(checkbox、pop up menu、slider、stepper)これらを指定してもKeynoteがサポートしている範囲内のformatでしか表示されません。

なお、掲載Scriptではわかりやすいように確認処理を省略していますが、実行の前提条件としてKeynote書類がオープンされていて、表示中のスライド(ページ)上に表オブジェクトが存在する状態になっていることが必要です。これらの前提条件を満たしていない場合には、エラーになります。

AppleScript名:Keynoteの表セルに計算式を入れる
tell application "Keynote"
  tell front document
    tell current slide
      tell table 1
        tell column 2
          tell cell 3
            set its value to "=B2÷B1"
            
set its format to percent
          end tell
        end tell
      end tell
    end tell
  end tell
end tell

★Click Here to Open This Script 

Posted in How To | Tagged 10.11savvy 10.12savvy 10.13savvy 10.14savvy Keynote | Leave a comment

Table 1の全セルを選択する v3

Posted on 11月 5, 2018 by Takaaki Naganoya

Numbersで選択中のセルがなければ、最前面の書類の選択中のワークシートのうちのTable 1を全選択するAppleScriptです。

選択部分からデータを取得する処理はよく行いますが、プログラム側から選択部分を作成するというのはやっていなかったので、試行錯誤してみました。

AppleScript名:Table 1の全セルを選択する v3.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2018/11/05
—
–  Copyright © 2018 Piyomaru Software, All Rights Reserved
—
use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

tell application "Numbers"
  tell front document
    tell active sheet
      try
        –選択セルがある場合
        
set theTable to first table whose class of selection range is range
      on error
        –選択セルがない場合はTable 1を全選択
        
set tCount to count every table
        
if tCount = 0 then error "There is no table in active sheet"
        
        
tell table 1
          set selection range to cell range
        end tell
        
      end try
    end tell
  end tell
end tell

★Click Here to Open This Script 

Posted in How To | Tagged 10.11savvy 10.12savvy 10.13savvy 10.14savvy Numbers | Leave a comment

シリアルコードの生成と検証

Posted on 11月 3, 2018 by Takaaki Naganoya

オープンソースのフレームワーク「SerialKeyGenerator」を用いてシリアルコードを生成、検証するAppleScriptです。

シリアルコードについて

シリアルコードは、日本では「レジストコード」「プロダクトコード」などと呼ばれるもので、ソフトウェアの販売時にこのコードを発行し、ソフトウェアのシリアルコード入力ダイアログに入力してもらうことで、完全版として機能させるというものです。

Mac App StoreではApple IDとひもづけることでシリアルコードを使用しないソフトウェア販売とライセンシングを行なっていますが、Mac App Store外で販売する場合にはシリアルコードのことを考える必要が出てきます。

コードの文字数を増やすと、仮にキーボードから入力する場合の難易度が上がってしまいます。適度な長さの文字列になることが望ましいところです。

シリアルコードが仮に流出した場合に備え、どの購入者のコードが流出したかを特定する必要があります。そのため、シリアルコードにはその名のとおり、購入者の番号を含めてあるのが普通です。

SerialKeyGeneratorの使い方について

SerialKeyGeneratorでは、シークレットキーワード、ユーザー番号をもとにシリアルコードが生成されます。日時を考慮してシリアルコードを計算するため、同じシリアルコードを生成させても日時が変われば結果は異なります。

ただ、おおもとのシークレットキーワードが判明してしまうと、第三者がシリアルコードを勝手に発行してソフトウェアの不正使用ができてしまうため、アプリケーション内に格納するシークレットキーワードは文字ダンプされても判明しないようにしておくのが普通です。

–> Download serialKeyGenKit.framework(To ~/Library/Frameworks/)

AppleScript名:SerialKeyGeneratorサンプル1
— Created 2015-10-24 by Takaaki Naganoya
— 2015 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "serialKeyGenKit" –https://github.com/danielvy/SerialKeyGenerator

–Generate Serial Code with secret Keyword
set aGen to current application’s SerialKeyGenerator’s alloc()’s initWithSecret:"Piyomaru"
–>  (SerialKeyGenerator) <SerialKeyGenerator: 0x7f8b5b5fa200>

set aList to {}
repeat with i from 1 to 10
  set aRes to (aGen’s generateSerialWithSequence:i |data|:i)
  
set the end of aList to (aRes as text)
end repeat

aList
–>  {​​​​​"1CHH8-BJY89-TR9Z9-AKSTL-70JZF", ​​​​​"4KXCF-LS6P5-7BKYN-CUMPY-NM072", ​​​​​"41GO2-OGZ3T-83YP9-2LS4J-9W3MI", ​​​​​"CA3WV-C7FU7-PSPJ3-LNGT7-N6AJT", ​​​​​"3OG0B-MCFUM-7YKHT-EE533-LNJEJ", ​​​​​"4SKWQ-9G8XE-ZCE6K-APSAL-R0T8S", ​​​​​"CTEZT-H4AQQ-BM15H-FH2DG-P7K7O", ​​​​​"4BZ1X-2OHKF-5FWND-7SZVA-EBR89", ​​​​​"BDKRI-9JU7T-G6N20-YPU9K-6FXQW", ​​​​​"9EWW5-O3FMV-SDEZA-77JZE-OY8FL"​​​}

–Decode Serial with secret Keyword
set rList to {}
set bGen to current application’s SerialKeyGenerator’s alloc()’s initWithSecret:"Piyomaru"
–> (SerialKeyGenerator) <SerialKeyGenerator: 0x7fb6992b8400>

repeat with i in aList
  set bRes to (bGen’s decodeSerial:(contents of i))
  
  
set aDate to bRes’s |date| as date
  
set aSeq to bRes’s sequence as integer
  
set aData to bRes’s |data| as integer
  
  
set the end of rList to {aData, aSeq, aDate}
end repeat
return rList
–> {{1, 1, date "2018年11月3日土曜日 16:44:57"}, {2, 2, date "2018年11月3日土曜日 16:44:57"}, {3, 3, date "2018年11月3日土曜日 16:44:57"}, {4, 4, date "2018年11月3日土曜日 16:44:57"}, {5, 5, date "2018年11月3日土曜日 16:44:57"}, {6, 6, date "2018年11月3日土曜日 16:44:57"}, {7, 7, date "2018年11月3日土曜日 16:44:57"}, {8, 8, date "2018年11月3日土曜日 16:44:57"}, {9, 9, date "2018年11月3日土曜日 16:44:57"}, {10, 10, date "2018年11月3日土曜日 16:44:57"}}

★Click Here to Open This Script 

Posted in How To | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Excelデータを組み立てて書き出し(フォント指定、カラー指定)

Posted on 11月 3, 2018 by Takaaki Naganoya

オープンソースのフレームワーク「JXLS」を用いてExcelデータを組み立てるAppleScriptです。

フォント名と色を指定してみました。実際に案件で使用したことがないので、徹底的に活用した………という経験がないので、いまのところ何か風景画像をExcel書類に変換して「実はExcelで作りました」とかフカすぐらいしか用途がなさそうです。

–> Download JXLS(To ~/Library/Frameworks/)

AppleScript名:ASOCでExcelファイル生成テスト v2
— 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 64
  set aCell to (workSheet’s setCellAtRow:i column:0 toString:(current application’s NSString’s stringWithString:("ぴよまる " & (i as text))))
  (
aCell’s setFontName:"HiraKakuStd-W8")
  (
aCell’s setFontHeight:320) –this is point * 20
  (
aCell’s setFontColorIndex:i)
  (
aCell’s setForegroundFillColorIndex:13)
end repeat

workBook’s writeToFile:filePath

★Click Here to Open This Script 

Posted in How To | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Accessibility Inspectorがv5.0にバージョンアップして使いにくく?

Posted on 10月 30, 2018 by Takaaki Naganoya


電子ブックからリンクしている情報のBlog側の欠落をチェックしていたら、このAccessibility Inspectorの情報が(Blog上に)抜けていることがわかり、埋めているわけですが………チェックしていたら、バージョンがv4.0からv5.0に上がっていることに気づきました。


▲左側がv4.0、右側がv5.0。v5.0はアプリケーションとして動作し、メニューがある


日常的にアプリケーションのGUI部品の情報を収集するのはPFiddlesoftのUI Browserで、使用率は99.9:0.1でUI Browserのほうが圧倒的に多いわけですが、ごくたまにUI Browserでは手が届かないGUI部品があります。


具体的にいえば、フローティングパレットやポップアップメニュー上の凝ったGUI部品で、これらはUI Browserではオブジェクト階層が途中で途切れているものとして表示されるため、オブジェクト階層を追跡できないことがあります。

そんなわけで、ごくたまに(1年間に1回ぐらい?)Accessibility Inspectorのごやっかいになることがあり、v4.0では問題なく使用できていました。

問題は、いつのまにかアップデートされて入っていたAccessibility Inspector v5.0。

これ、Windowの中のGUI部品は追いかけられるんですが、メニュー部品を追いかけられないように見えるのですが………。目の錯覚なのか、使いこなせていないのか現段階では不明です。

それができないと、Accessibility Inspectorの存在意義が、、、、

# メニュー項目はOption+Spaceで選択中のGUI部品への参照をAccessibility Inspector v5.0のメインウィンドウに表示できることを教えてもらいました

一応、Apple Developper Connectionのアカウントがあれば、Developperサイトにログインして、ダウンロード項目から「Accessibility Tools for Xcode – February 2012」のアーカイブをダウンロードすれば、中にAccessibility Inspector v4.0が入っています。macOS 10.12上にコピーして動かせることを確認しています。

macOS 10.14, MojaveにAccessibility Inspector v4.0をインストールして、期待どおりの動作が行えていることを確認しています。Accessibility Inspector v4.0はCode Signされていないのでシステム環境設定の「セキュリティーとプライバシー」>「アクセシビリティ」でアクセシビリティへのアクセスを許可しておく必要があります。

なお、Accessibility Inspector v4.0はCode Signされていないので、macOS 10.14, Mojave上で起動するといろいろうるさく言われますが、システム環境設定の「セキュリティーとプライバシー」>「一般」からAccessibility Inspector v4.0の起動許可を指示すれば大丈夫です。


▲macOS 10.14, Mojave上でAccessibility Inspector v4.0を起動したところ

Posted in How To Tools | Tagged 10.12savvy 10.13savvy 10.14savvy GUI Scripting | Leave a comment

Syslogにログ出力

Posted on 10月 29, 2018 by Takaaki Naganoya

syslogにログ出力するAppleScriptです。

よく、AppleScriptで一括処理している時に、途中で規格に合わないデータがあったような場合にはエラーログにその内容を書き込むとか(処理は続行)、きちんと決められた時刻に処理を行なったという証拠を示すために、ログファイルに書き込んだりします。

ログ出力は、仕事でAppleScriptを書いていて割と最後の最後に実装するあたりなので、なるべく手をかけたくない処理でもあります(すべてのデータをテキスト化するKitなども、この「詳細なデータを残す必要はあるが手間はかけたくない」というニーズから生まれたものです)。

ただ、個別のファイルに書いておくのが面倒な場合だと、syslogに出力すればそれでOKという場合もあります。

そんなわけで、極力手を抜きたいログ記録についてはsyslogで済ませたい、という場合に用いるのがこれらの機能(loggerコマンド/NSLog)です。

開発中のAppleScript内に入れておいたlogコマンドの実行を横取りして、on logハンドラ内でsyslog出力するとかいうのが、一番手抜きができていい手口でしょうか。

AppleScript名:Syslogにログ出力(loggerコマンド)
logToSyslog("PiyomaruSoftware ひよこさんだよ") of me

–Syslogにメッセージを出力する
on logToSyslog(theMes)
  do shell script "logger -s " & quoted form of theMes
end logToSyslog

★Click Here to Open This Script 

AppleScript名:Syslogにログ出力(NSLog)
— Created 2015-10-21 by Shane Stanley
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

repeat with i from 1 to 10
  current application’s NSLog("PiyomaruSoftware! I can log %.2d to the Console as float %.2f or hex %X, too", i, i as real, i)
end repeat

★Click Here to Open This Script 

Posted in How To | Leave a comment

front document

Posted on 9月 11, 2018 by Takaaki Naganoya

AppleScriptに対応しているGUIアプリケーションで、複数のドキュメントを管理するもの、テキストエディタや表計算ソフトなどはwindowとdocumentというクラスが定義されています。

documentは、オープンされた順にIDが振られます。このIDは、ウィンドウの重ね合わせ順が変更されても変わりません。保存したりクローズしたりする対象はdocumentです(原則。たまに例外があります)。

windowのIDは、画面上のウィンドウの重ね合わせ順を反映したものです。最前面のウィンドウがwindow 1です。その下にあるのがwindow 2、3、4……とカウントされます。別のウィンドウを最前面に移動させると、それがwindow 1になります。

windowに対して実行できるコマンドもあれば、documentに対して実行できるコマンドもあります。そのあたり、アプリケーションごとに実装が異なるので慣れが必要です。一番このあたりでdocumentとwindowの使い分けに頭を悩まされるのはFileMakerあたりでしょうか。「それ、document(database)に対してのコマンドじゃないんだ?」という例がズラズラと。

長いあいだ、「最前面のdocumentにアクセスするのって大変だ」と感じていました。window 1にアクセスして、そのpropertyを取得し、propertyの中に対応するdocumentの情報があれば、それを取得。

そんな中、front documentという書き方を見かけ、試してみたら「最前面のdocument」にアクセスできました。AppleScript用語辞書にも載っていないのに、なぜか使える用語です。

AppleScript名:window–>document
–window 1–> document
tell application "Safari"
  tell window 1
    properties
    
–> {zoomable:true, closeable:true, zoomed:true, class:window, index:1, visible:true, name:"AppleScriptの穴 – Useful & Practical AppleScript archive", miniaturizable:true, id:204098, miniaturized:false, resizable:true, bounds:{0, 22, 1233, 1200}, current tab:tab 1 of window id 204098 of application "Safari", document:document "AppleScriptの穴 – Useful & Practical AppleScript archive" of application "Safari"}
    
    
set aDoc to document of it
  end tell
  
  
tell aDoc
    set aURL to URL
    
–> "http://piyocast.com/as/"
  end tell
end tell

★Click Here to Open This Script 

AppleScript名:front document
–front document
tell application "Safari"
  tell front document
    set aURL to URL
    
–> "http://piyocast.com/as/"
  end tell
end tell

★Click Here to Open This Script 

こんな便利な機能、いつごろ実装されたのかと疑問に思って、macOS/OS X/Mac OS Xのバージョンをさかのぼり、Classic Macエミュレータ「SheepShaver」上のClassic Mac OS J1-8.6上のAppleScript J1-1.3.7で確認したところ、期待どおりの動作を行いました。

うわ、恥ずかしい〜。ただ、front documentについて書籍などで書かれているのを見た覚えがありません。

1999年に作成されたAppleScript Language Guide 1.3.7で「front document」を検索してみたら、けっこーたくさん出てきました。

Posted in How To | Tagged 10.12savvy JeditΩ Safari | Leave a comment

Script Debugger 7が登場。試用期間が切れても機能制限つきLiteモードで動作

Posted on 3月 5, 2018 by Takaaki Naganoya

Late Night SoftwareからScript Debuggerの最新バージョン、Script Debugger 7がリリースされました。macOS 10.11以降のOSが対象です。価格は99ドルで、ボリュームディスカウントも用意されています。

Script DebuggerはClassic Mac OSの時代からサードパーティのAppleScript統合開発環境として続いてきたソフトウェアです。AppleScriptのプログラムの開発、実行およびデバッグのための強力な機能を提供します。

v6:AppleScriptObjCに対応
v5:エディタ部分をフル書き換え


▲Script Debugger 7


▲Script Debugger 3 + Classic Mac OS 8.6(SheepShaver)

AppleScript統合開発環境の決定版

「デバッガ」の名のとおり、AppleScriptに対して変数内容のリアルタイムモニタリング、ブレークポイントの設定、ステップ実行などの機能を提供します。

さらに、対象アプリケーションの各オブジェクトの属性値情報をリアルタイムでモニタリングする機能を提供しており、初見のGUIアプリケーションであっても、Script Debuggerのこの機能を用いれば、とくに迷うことなく目的の属性値情報にたどり着くことが可能です。

初心者にこそ使ってほしいソフトウェア

こうした機能は、(上級者はもちろんのこと)初心者にこそ有用なもので、自分もたまたまAppleScript入門時にScript Debuggerに出会い(バージョン2か3の頃に)、たいへんに助けられました。FileMaker Proのデータベースからカテゴリごとにデータを抽出してHTMLコンテンツを生成するAppleScriptを、AppleScriptを使い始めて1週間ぐらいで作れるようになったのは、(海外のMailing Listで教えてもらいつつ)Script Debuggerがあったからです。

名前が仰々しいので「むずかしいソフトウェア」と思われがちで、それがScript入門者にとってもメーカーにとってもたいへんに不幸なことだと思っていました。初心者が使うと便利でわかりやすいのに、初心者が「むずかしそう」と敬遠してしまうのは、残念なことです。

一般的なレベルの「AppleScript入門者」にScript Debuggerの機能を2〜3週間で理解しろといっても無理なようなので、もう少し「何か」があれば入門者もより理解が深まり、Script Debuggerの恩恵を授かることができるのに、と思っておりました。

macOS 10.14以降で、サードパーティFramework呼び出しScriptに必須

Apple純正のCocoa Frameworkにくわえ、サードパーティのFrameworkをAppleScriptから呼び出して利用することが、macOS 10.10以降で一般的になってきました、ところが、macOS 10.14以降ではmacOSのセキュリティ機能が強化され、ユーザーフォルダに存在するFrameworkを呼び出して実行することができなくなりました(SIPを解除するとこの制限はなくなります)。

Script Debuggerは、このmacOS 10.14以降の環境で、github上で公開されているオープンソースのFrameworkをビルドして呼び出したいような場合に、SIPを解除せずともFramework呼び出しが行える環境です。

また、macOS 10.15でAppleScriptアプレットにFrameworkを同梱して呼び出すようなやり方がSIPによって禁止されましたが、これもScript Debuggerのアプレット書き出し(Enhanced)を利用することで、Frameworkを同梱して実行できるAppleScriptアプレットを作成できます。

3週間の試用期間を過ぎてもLiteモードで機能制限版として使用可能

そこに、今回のScript Debugger 7で「Liteモード」が用意されました。使用期限が切れても、機能制限版のScript Debuggerとして動作するモードです。このLiteモードの状態でもApple純正のスクリプトエディタよりも高機能です(AppleScript書類の書式にアクセスできない以外は)。

ちなみに、Xcode上でGUIベースのアプリケーションをAppleScriptで組もうとしたときに、Script Debuggerなどのまともな外部AppleScriptエディタは必須のものです。

Posted in How To Tools | Tagged Script Debugger | Leave a comment

Finder Windowを円運動 v4

Posted on 2月 23, 2018 by Takaaki Naganoya

Finderのウィンドウ6つ(可変)を画面上で別々に楕円運動させるAppleScriptです。

三角関数の計算にShane StanleyのBridge Plus AppleScript Librariesを利用しています。

–> Demo Movie

AppleScript名:Finder Windowを円運動 v4
— Created 2014-11-17 by Takaaki Naganoya
— Modified 2018-02-23 by Takaaki Naganoya
— 2014-2018 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit" — for NSScreen
use bPlus : script "BridgePlus" –https://www.macosxautomation.com/applescript/apps/BridgePlus.html

property aNum : 300
property aOffset : 0
property maxWin : 6
property winList : {}
property randList : {}
property winSize : 300

–Initialize
load framework
set winList to {}
set randList to {}

repeat maxWin times
  tell application "Finder"
    activate
    
set aWin to make new Finder window
    
    
tell aWin
      set toolbar visible to false
      
set sidebar width to 0
      
set statusbar visible to false
      
set position to {100, 100}
      
set bounds to {100, 100, 100 + winSize, 100 + winSize}
    end tell
    
    
set the end of winList to aWin
    
set the end of randList to {random number from 0 to 400, random number from 0 to 400, random number from 1 to 360}
    
  end tell
end repeat

–Main
repeat with i from 1 to 360 by 6
  
  
repeat with ii from 1 to maxWin
    
    
set aWinObj to contents of item ii of winList
    
set {aRandX, aRandY, aRandDegree} to item ii of randList
    
    
set aDeg to i + aRandDegree
    
    
set aSinNum to (current application’s SMSForder’s sinValueOf:aDeg) as real
    
set aCosNum to (current application’s SMSForder’s cosValueOf:aDeg) as real
    
    
set x to ((aNum * aSinNum) + aNum) * 2 + aOffset
    
set y to (aNum * aCosNum) + aNum + aOffset
    
    
ignoring application responses
      tell application "Finder"
        tell aWinObj
          set position to {(x as integer) + aRandX, (y as integer) + aRandY}
        end tell
      end tell
    end ignoring
    
  end repeat
  
end repeat

–Sweep
tell application "Finder"
  repeat with i in winList
    tell i
      close
    end tell
  end repeat
end tell

★Click Here to Open This Script 

Posted in How To | Tagged 10.11savvy 10.12savvy 10.13savvy Finder | 1 Comment

Post navigation

  • Newer posts

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

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 15, Sequoia
  • 指定のWordファイルをPDFに書き出す
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • Numbersで選択範囲のセルの前後の空白を削除
  • メキシカンハットの描画
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AdobeがInDesign v19.4からPOSIX pathを採用
  • AppleScriptによる並列処理
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • Cocoa Scripting Course 続刊計画
  • macOS 14.xでScript Menuの実行速度が大幅に下がるバグ
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • Keynote/Pagesで選択中の表カラムの幅を均等割
  • デフォルトインストールされたフォント名を取得するAppleScript
  • macOS 15 リモートApple Eventsにバグ?
  • Keynote、Pages、Numbers Ver.14.0が登場
  • macOS 15でも変化したText to Speech環境
  • AppleScript入門① AppleScriptってなんだろう?
  • Numbersで最前面の書類のすべてのシート上の表の行数を合計

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (194) 14.0savvy (147) 15.0savvy (132) CotEditor (66) Finder (51) iTunes (19) Keynote (117) 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) 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
  • 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
  • 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年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