Archive for 8月, 2009

2009/08/30 Sal Soghoian「サンプルコードは来週中に」

去る8月29日、US Appleが運営している「AppleScript Studio ML」に、AppleScriptプロダクトマネージャSal Soghoianが(久しぶりに)投稿。

来週中にAppleScript StudioおよびAutomatorのサンプルコード(サンプルプロジェクト)を公開する見込みであることを明らかにしました。

2009/08/29 Snow LeopardのAppleScriptに関するリリースノート(2)

Snow LeopardのAppleScriptについてのリリースノートのうち、変更点に関するものが別途アップされていました(AppleScript Users MLより)。

Mac Dev Center: AppleScript Release Notes: 10.6 Changes

(more…)

2009/08/29 Appleのサイトが最新のSnow Leopard(+Xcode)にキャッチアップしていない

http://www.apple.com/jp/macosx/developers/

にある「スクリプト言語: プログラムの作成をシンプルに」の記述は、

applewebcap.jpg

Snow Leopard添付のXcode 3.2を起動して、新規プロジェクトを作成しようとすると、ダイアログはこのようになるはずですが…………

xc321.jpg

どうやら最新の状態に合っていないようです。画面のキャプチャからして最新の状態に合っておらず、早々に手直しする必要が出てくることでしょう。

ここには、AppleScriptObjCという単語が入るべきですが、現状では入っていません。USのオリジナルのサイトも同様です。

Webサイトはプロダクトマーケティング管轄のはずですが、マーケティング分野でここまでお粗末で足並みが揃っていないというのは珍しく、Snow Leopardの発売日決定が、オリジナルの発売日計画から急に前倒しになって現場の足並みが揃っていないという印象を受けます。

2009/08/29 AppleScript Objective-Cブリッジ(AppleScriptObjC)に関するリリースノート

Mac OS X 10.6 Snow Leopardで新たに実装された、AppleScript Studio上でObjective-Cライクな構文によりCocoaの機能を利用する仕組み「AppleScript Objective-Cブリッジ」(AppleScriptObjC)に関するリリースノートが公開されました。

Mac Dev Center: AppleScriptObjC Release Notes

<日本語訳>
「AppleScriptObjC」はMac OS X 10.6で実装された新たなフレームワークで、CocoaアプリケーションをAppleScriptで記述できるようにするもの。AppleScriptObjCでいかなるCocoaフレームワークをもScripting可能とし、Cocoaの世界の中でAppleScriptに第一級の機能を提供する。
</日本語訳>

なんか、first-class citizenって言葉、Mac OS Xへの移行時にも言われていたような記憶が(AppleScriptのプロダクトマネージャであるSal Soghoian本人がそう言っていた)。ぜんぜんそう感じられなかったけど。

また、このドキュメントの中で、AppleScript Studioの開発から、AppleScriptObjCの開発に移行するよう開発者にすすめています。OSの新機能についてはAppleScriptObjC上で実現し、AppleScript Studioの機能はデフォルトではオフにする(Interface Builder上でAppleScript Studio系のパレットがオフにされるとか)とまで言っています。

ただし、Terminal上からdefaultコマンドでAppleScript Studioの機能をイネーブルに戻すための手段が提供されており、これによってInterface Builder上でのAppleScript Studioの開発は行えます。おそらく、次のMac OS Xのメジャーアップデート(Mac OS X 10.7?)の時には完全にAppleScriptObjCへの移行を促されるのではないでしょうか。

ちなみに、Mac OS X 10.5上のXcode 3.1.3で作成したAppleScript Studioのプロジェクトは、Mac OS X 10.6上のXcodeでも問題なくビルド可能でした。

2009/08/29 Snow LeoaprdのAppleScriptに関するリリースノート

Snow Leopard上のAppleScriptに関するリリースノートが公開されました。

Mac Dev Center: AppleScript Release Notes for Mac OS X v10.6: AppleScript Release Notes for Snow Leopard

重要な変更点は以下のとおり。

・dateで文字列からdateオブジェクトを生成する際に、AM/PMの指定ができるようになった
・AppleScriptがスレッドセーフになった
・Scripting Additionに対して、AppleScriptによるEPPC経由でのリモートプロシージャコール時に命令を許可/禁止するための仕組みが備わった
AppleScript Objective-Cブリッジが実装された

とくに、「AppleScript Objective-Cブリッジ」が今回のキモでしょう。これまでAppleScript Studioについては「やる気あんのか?」「Appleには開発者がいないに違いない」「よその会社の製品(FaceSpan)の文法をパクって作った仕組みなので、Apple自身では発展させられないのか?」などなど、さまざまな観測が行われてきましたが……なんにせよ、進化したのはよいことです。

Xcode上のAppleScript Studioを用いて、AppleScriptによってObjective-Cと同じ(ような)ことができてしまうわけで、さまざまな「限界を超えた」アプリケーション開発が行えるものです。

AppleScript Studio上でObjective-CモドキなAppleScript構文が許容されるようになり、いままではObjective-Cのプログラムをプロジェクトに追加してcall methodでおそるおそる呼び出していたような処理が、AppleScriptだけで記述できます。

Mac OS X 10.6でAppleScript Studioの仕組みが変わってしまうことは聞いていたので、そのためにAppleScript Studio系の情報掲載は控えていたのですが、10.6以降をターゲットとした情報を掲載していければと考えています。

ただ……肝心のDevelopper Toolsのサンプルプロジェクトはまだからっぽの状態なので……Appleのサンプルはまだ拝めていない状況ですが………………いつ、出てくるのやら(9月中旬〜末ぐらいと予想)。

追記:
サンプルコードについては「Beyond that, we’re working on sample code.」などとAppleのエンジニアがMLで言っています。やはり作業中で、Snow Leopardのリリースには間に合わなかったか……あるいはSnow Leopardのリリースが当初の予定(9月末?)から、なんらのマーケティング的な判断によって繰り上げられたために、ドキュメント作成作業は当初予定のまま進行している状態、と見るべきかもしれません。

2009/08/26 Snow Leoaprdでスクリプトエディタが「AppleScriptエディタ」に

すでに、AppleのWebサイト上でMac OS X 10.6「Snow Leopard」の情報が大々的に公開されているし、この名称についても記載されていることを確認したので書いても大丈夫だと思うのですが……これまでの「スクリプトエディタ」が、1993年だか1994年だかの登場以来はじめて、名前が変わります。

(約)15年来の歴史上はじめての改名……………

  新しい名前は「AppleScriptエディタ」。

as21.jpg

機能的な変更点については発売まで書けませんが(8/28日……どこの標準時で定義するのやら、、、)、名前が変わるので、スクリプトエディタ自体をコントロールするようなAppleScriptを書いている人は要注意です。

細かいことをいえば、スクリプトエディタ自体に対するtellブロック内の名称はすべて自動で書き換えられるので、よほど細かい仕様を前提としてAppleScriptを書いていなければ影響は少ないはずなのですが、スクリプトエディタのプロセスが存在しているとかいないとか、そういう処理を行っている場合には、プロセス名称を指定している箇所を書き換える必要があります。

実際にはほとんどやりませんが、GUI Scripting経由でスクリプトエディタをコントロールしているような場合には、プロセス名称の指定部分は書き換える必要があることでしょう。

それにしても、どのような意図があって改名したのかさっぱり不明ですが、日常会話で「スクリプトエディタ」と呼んでいたものが変わってしまうと……「ASエディタ」とでも呼ぶことになるのでしょうか? ちょっと困ります。

2009/08/15 メールアドレスチェック

メールアドレスの妥当性チェックルーチンです。(複数の)アドレスをリストに入れて呼び出すと、妥当性を判断して返します。

実際に妥当性を判断するのは、文字種別によるものと、ドメイン部分についてはwhoisによるリクエストを実行しています(インターネット接続されている環境でないと本ルーチンは動作できません)。

whoisコマンドのオーバーヘッドが大きいので、これを並列処理すれば大幅にスピードアップするものと思われます。

ただし、妥当性を判断するといってもこの程度なので、当該のメールアドレスが生きているかどうか、存在するかどうかについては検証を行っていません。

そのかわりといっては何ですが、ドメインの検証については……ドメインが存在しなかった場合にはサブドメインをある程度さかのぼって検証するようになっています。

説明が乱暴だったので補足すると……サブドメイン付きでwhoisを発行しても、「そんなもん知らない」と言われるので、1階層ずつサブドメインをさかのぼって、xx.xxのレベルになるまで繰り返します。途中でヒットしたら、そういうドメインが存在するという判断を行います。

このへん、大量に検証する場合には「検証ずみドメイン」のリスト(問い合わせキャッシュ)を作成しておいて、同じドメインには二度問い合わせを行わないといった処理を付加すると、ちょっとだけ賢い感じがします。

whoisでドメインの存在確認を行うより、もうすこしスマートでマシな方法もありそうですが、結局スパムすれすれな処理になってしまいそう(メールを送りつけてUser Unknownでエラーが返ってくるかどうか判定するとか)なので、まあこんなもんだろうかと。

あと、ANKというのは……ものすごく昔、8ビットCPUの時代の頃に1バイトのASCII文字列(Alphabet, Numeric, Kana)のことを指して言った太古の昔の言葉であり、だいたいいまどき半角カナなど使わないので……死語間違いなし。もうちょっと分りやすい言葉を使うべきであったかと反省しています。

スクリプト名:メールアドレスチェック v2
set adrList to {”maro@asia.damedame-domain.co.jp“, maro@piyocast.com“, maro@appleco.jp“}

set resList to {}

repeat with i in adrList
  半角文字列チェック
  
set aRes to detectOutANK(i) of me
  
if aRes = true then
    whoisを使用してドメインの妥当性を確認
    
set aDomain to splitAfterAtmark(i) of me
    
set aRes to checkMailAddr(aDomain) of me
  end if
  
set the end of resList to aRes
end repeat

resList
> {false, true, true}

メールアドレスのチェック(whois実行)
on checkMailAddr(anAdr)
  マッチしない場合には”aaa.aaa”の状態(ピリオド1こ)になるまでドメインをさかのぼる
  
repeat
    set aRes to countPeriod(anAdr) of me
    
if anAdr is in {”co.jp“, or.jp“, ne.jp“, go.jp“, ac.jp“, ad.jp“} then return false このへん、まだ見直す必要がある
    
    
if aRes = 0 then return false
    
    
with timeout of 3600 seconds
      set aRes to do shell script whois & anAdr
    end timeout
    
    
ignoring case
      if aRes contains No match then
        set anAdr to makeDomainShorter(anAdr) of me
        
if anAdr = false then return false
      else
        return true
      end if
    end ignoring
  end repeat
  
return false
end checkMailAddr

メールアドレスのサブドメイン部分を1階層分削る
Input: “asia.apple.com”
Output: “apple.com”
on makeDomainShorter(anAdr)
  set dotPos to offset of . in anAdr
  
if dotPos = 0 then return false
  
set resText to text (dotPos + 1) thru -1 of anAdr
  
return resText
end makeDomainShorter

@以降の文字列を返す
on splitAfterAtmark(anAdr)
  set atPos to offset of @ in anAdr
  
if atPos = 0 then return false
  
set domainText to text (atPos + 1) thru -1 of anAdr
  
return domainText
end splitAfterAtmark

ANK範囲外の文字があるかどうかをテストする
ANK文字以外のものが入っていたらfalse
on detectOutANK(testText)
  ANK文字列(大文字小文字は問わない)
  
set ankChar to {”0“, 1“, 2“, 3“, 4“, 5“, 6“, 7“, 8“, 9“, a“, b“, c“, d“, e“, f“, g“, h“, i“, j“, k“, l“, m“, n“, o“, p“, q“, r“, s“, t“, u“, v“, w“, x“, y“, z“, .“, -“, @“, _“}
  
  
set _testChar to testText as Unicode text
  
  
ignoring case
    repeat with i in _testChar
      set j to contents of i
      
if j is not in ankChar then
        return false
      end if
    end repeat
  end ignoring
  
  
return true
end detectOutANK

on countPeriod(aStr)
  set cList to characters of aStr
  
set pCount to 0
  
repeat with i in cList
    if contents of i = . then set pCount to pCount + 1
  end repeat
  
log {”pCount“, pCount}
  
return pCount
end countPeriod

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/08/15 メールの返信文1行目のテキストからメールアドレスを抽出する v2

メールの返信文1行目のテキストからメールアドレスを抽出するサブルーチンの発展版です。

  ひよこさん<hiyoko@piyocast.com>

のようなメール表記に対応したものです。とりあえず、このぐらい強化すれば使い物になりそうです。

スクリプト名:メールの返信文1行目のテキストからメールアドレスを抽出する v2
set aStr to On Fri, Aug 14, 2009 at 3:57 PM, Doug McNutt wrote:
set aRes to detectMailResAddrFromText(aStr) of me
> “testadr@testdomain.com”

メールの返信文1行目のテキストからメールアドレスを抽出する
on detectMailResAddrFromText(aStr)
  if @ is in aStr then
    set atOffset to offset of @ in aStr
    
set formerText to text 1 thru atOffset of aStr
    
set latterText to text (atOffset + 1) thru -1 of aStr
    
    
set fText to procFormer(formerText, “) of me
    
set lText to procLatter(latterText, “) of me
    
    
if fText = false then return false
    
if lText = false then return false
    
    
set tRes to fText & lText
    
    
if < is in tRes and > is in tRes then
      set tRes to trimStrFromTo(tRes, < “, >“) of me
    end if
  else
    return false
    
  end if
end detectMailResAddrFromText

@から後方のテキストで指定文字まで探して取り出す
on procLatter(aText, aMakrer)
  if aMakrer is in aText then
    set anOffset to offset of aMakrer in aText
    
if anOffset = 0 then return false
    
    
set tRes to text 1 thru (anOffset - 1) of aText
    
return tRes
  else
    return false
  end if
end procLatter

@から前方のテキストで指定文字まで探して取り出す(@入り)
on procFormer(aText, aMakrer)
  set revT to (reverse of (characters of aText)) as string
  
if aMakrer is in revT then
    set anOffset to offset of aMakrer in revT
    
if anOffset = 0 then return false
    
    
set tRes to text 1 thru (anOffset - 1) of revT
    
set tRes to (reverse of (characters of tRes)) as string
    
return tRes
  else
    return false
  end if
end procFormer

指定文字でトリミング
on trimStrFromTo(aStr, fromStr, toStr)
  fromStrは前から探す
  
if fromStr is not equal to “” then
    set sPos to (offset of fromStr in aStr) + 1
  else
    set sPos to 1
  end if
  
  
toStrは後ろから探す
  
if toStr is not equal to “” then
    set b to (reverse of characters of aStr) as string
    
set ePos to (offset of toStr in b)
    
set ePos to ((length of aStr) - ePos)
  else
    set ePos to length of aStr
  end if
  
set aRes to text sPos thru ePos of aStr
  
return aRes
end trimStrFromTo

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/08/15 メールの返信文1行目のテキストからメールアドレスを抽出する v1

Mail.appでメールの返信分に入る引用時の定型文からメールアドレスを抽出するAppleScriptです。

返信フォーマットについては明確に規定がないはずで、メーラーごとに文章は異なるものと思われますが、メールアドレスを抽出するためには、最低限メールアドレスの前後にスペースが入っていればなんとかなりそうです。

メールアドレスの存在については、「@」記号が存在していればOKとしています。

これらの条件を満たさない場合には、falseを返すようにしています。得られたメールアドレスの妥当性については別途検証する必要がありそうですが、自分の用途ではとくにそこまでやる必要はないものと判断しています。

本プログラムはもともと……メーリングリストでやりとりされているメールのうち、「返信を返信先のメールに直接行うのではなく、トピックのオリジナルのものに対して行う」という困ったメールに対処し、イレギュラーな返信パターンを認識。きっちり返信先を判定しつつMindjet MindManager上でメールフローをビジュアル化するために着手したものです。

英語のMLしか読まない自分にとっては有用なものになりそうですが、日本語の技術系MLで活発かつ有用な情報が得られるところは寡聞にして知りません。このため、日本語のメールの返信ヘッダーへの対応についてはノーアイデアです。

スクリプト名:メールの返信文1行目のテキストからメールアドレスを抽出する v1
set aStr to On 2009/08/13, at 14:24, xxxx-xxx.999999@docomo.ne.jp wrote:

if @ is in aStr then
  set atOffset to offset of @ in aStr
  
set formerText to text 1 thru atOffset of aStr
  
set latterText to text (atOffset + 1) thru -1 of aStr
  
  
set fText to procFormer(formerText, “) of me
  
set lText to procLatter(latterText, “) of me
  
  
if fText = false then return
  
if lText = false then return
  
  
set tRes to fText & lText
  
end if

> “xxxx-xxx.999999@docomo.ne.jp”

@から後方のテキストで指定文字まで探して取り出す
on procLatter(aText, aMakrer)
  if aMakrer is in aText then
    set anOffset to offset of aMakrer in aText
    
if anOffset = 0 then return false
    
    
set tRes to text 1 thru (anOffset - 1) of aText
    
return tRes
  else
    return false
  end if
end procLatter

@から前方のテキストで指定文字まで探して取り出す(@入り)
on procFormer(aText, aMakrer)
  set revT to (reverse of (characters of aText)) as string
  
if aMakrer is in revT then
    set anOffset to offset of aMakrer in revT
    
if anOffset = 0 then return false
    
    
set tRes to text 1 thru (anOffset - 1) of revT
    
set tRes to (reverse of (characters of tRes)) as string
    
return tRes
  else
    return false
  end if
end procFormer

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/08/07 文字種別を判定する

ある1文字がどういった文字種別に該当するかを判定するAppleScriptです。

よく海外のMLで話題になる種類の話で……アルファベット文字の言語圏の人たちには、漢字もひらがなもハングルもなかなか区別がつかなくて、それが何であるかが分らないといった話がよく出ます。ただ、こうして解決策が提示されたのははじめてのことだったかもしれません。

本Scriptは、AppleScript Users MLで出たScriptにさらに修正を加えたものです。Mac OS X 10.5.8上で動作確認を行ってありますが、Mac OS X 10.6や10.4では「/System/Library/Perl/5.8.8/unicore/Blocks.txt」が異なります。

Mac OS X 10.6:/System/Library/Perl/5.10.0/unicore/Blocks.txt
Mac OS X 10.4:/System/Library/Perl/5.8.6/unicore/Blocks.txt

unic2.jpg

スクリプト名:文字種別を判定する
property UnicodeBlocks : {}

findBlock(”“) of me Japanese Hiragana
> {rangeStart:”12352″, rangeEnd:”12447″, descriptionStr:”Hiragana”}

findBlock(”“) of me Kanji
> {rangeStart:”19968″, rangeEnd:”40959″, descriptionStr:”CJK Unified Ideographs”}

findBlock(”“) of me Simplified Chinese Character
> {rangeStart:”11904″, rangeEnd:”12031″, descriptionStr:”CJK Radicals Supplement”}

findBlock(”“) of me Hangul
> {rangeStart:”12592″, rangeEnd:”12687″, descriptionStr:”Hangul Compatibility Jamo”}

findBlock(”ä“) of me Alphabet with Umlaut
> {rangeStart:”128″, rangeEnd:”255″, descriptionStr:”Latin-1 Supplement”}

on findBlock(someCharacter)
  if (count UnicodeBlocks) is 0 then
    repeat with aLine in (paragraphs of (read POSIX file /System/Library/Perl/5.8.8/unicore/Blocks.txt“))
      if length of aLine is not 0 and text 1 of aLine is not # then
        set text item delimiters to ;
        
set blockRange to text item 1 of aLine
        
set blockDescription to text item 2 of aLine
        
set text item delimiters to ..
        
set blockStart to fromHex(text item 1 of blockRange)
        
set blockEnd to fromHex(text item 2 of blockRange)
        
set end of UnicodeBlocks to {rangeStart:blockStart, rangeEnd:blockEnd, descriptionStr:blockDescription} “description” conflicts with some OSAX or application
      end if
    end repeat
  end if
  
set someCharacterId to id of someCharacter
  
repeat with aBlock in UnicodeBlocks
    if someCharacterId rangeStart of aBlock and someCharacterId rangeEnd of aBlock then
      return aBlock as record
    end if
  end repeat
end findBlock

on fromHex(someValue)
  do shell script dc < <<'16i & someValue & p’
end fromHex

on toHex(someValue)
  do shell script dc < <<'16o & someValue & p’
end toHex

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/08/02 指定アプリケーションのAppleScript予約語をリストアップ

USのAppleScript Users MLにAppleのエンジニアによって投稿された、指定アプリケーションのAppleScript予約語をリストアップするshell scriptを、実際にAppleScriptでコーディングしてみました。

……何の役に立つのかさっぱり分りませんが、sdef(/usr/bin/sdef)コマンドというのが標準装備されているのを初めて知りました。
(more…)

2009/08/01 指定フォルダ内の指定種別(kind)のファイル一覧を取得

指定のフォルダ内にある指定種別(kind)のファイル一覧を取得するAppleScriptをいろいろ掲載します。

まずは、指定したいファイルがどのような種別になっているのかを確認する必要があります。

  set a to choose file
  set aInfo to info for a

こんなAppleScriptを実行すると、結果として……

–> {name:”元の位置にペースト.key”, creation date:date “2009年 7月 30日 木曜日 11:07:15 AM”, modification date:date “2009年 7月 30日 木曜日 5:10:57 PM”, size:803112, folder:false, alias:false, package folder:false, visible:true, extension hidden:true, name extension:”key”, displayed name:”元の位置にペースト”, default application:alias “Cherry:Applications:iWork ‘09:Keynote.app:”, kind:”Keynote 書類”……}

などと返ってきますので、「ああ、『Keynote 書類』って指定すればいいんだ!」と分ります。属性によっては、whoseで指定できないものもあるので、そのあたりが要注意です。

スクリプト名:指定フォルダ内の指定形式のファイル一覧を取得(原始的手法)
指定フォルダ内の指定形式のファイル一覧を取得(原始的手法)
set aFol to choose folder

tell application Finder
  tell folder aFol
    set indList to (every file whose kind is Keynote 書類“)
  end tell
end tell

> {document file “a reference toのスコープ範囲 のバックアップ.key” of folder “AppleScript” of folder “Documents” of folder “maro” of folder “Users” of startup disk of application “Finder”, document file “a reference toのスコープ範囲.key” of folder “AppleScript” of folder “Documents” of folder “maro” of folder “Users” of startup disk of application “Finder”, document file “AppleScript past now and future のバックアップ.key” of folder “AppleScript” of folder “Documents” of folder “maro” of folder “Users” of startup disk of application “Finder”, (省略)}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

何も考えないで書くとこんな感じでしょうか。ただ、これだと結果がdocumentファイルのリストで返ってくるので、後で何か処理しようとしたときに面倒です。aliasに変換するのがベストなので……

スクリプト名:指定フォルダ内の指定形式のファイル一覧を取得(近代的手法)
set aFol to choose folder

tell application Finder
  tell folder aFol
    set indList to (every file whose kind is Keynote 書類“) as alias list
  end tell
end tell

>  {alias “Cherry:Users:maro:Documents:AppleScript:a reference toのスコープ範囲 のバックアップ.key”, alias “Cherry:Users:maro:Documents:AppleScript:a reference toのスコープ範囲.key”, alias “Cherry:Users:maro:Documents:AppleScript:AppleScript past now and future のバックアップ.key:”, alias “Cherry:Users:maro:Documents:AppleScript:AppleScript past now and future.key:”, alias “Cherry:Users:maro:Documents:AppleScript:AppleScript Studioの歴史.key:”,(中略)}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

と、as alias listでcastすると、いい感じにaliasのlistで結果が返ってきます。

しかし、これでも……ファイル名の次に作成日時、拡張子……など、さまざまな情報を取得したいと思ったら、再度同じような処理を書かなくてはなりません。

スクリプト名:指定フォルダ内の指定形式のファイル一覧を取得(現代的手法)
set aFol to choose folder

tell application Finder
  tell folder aFol
    set indList to a reference to (every file whose kind is Keynote 書類“)
  end tell
  
set namList to name of indList
end tell

> {”a reference toのスコープ範囲 のバックアップ.key”, “a reference toのスコープ範囲.key”, “AppleScript past now and future のバックアップ.key”, “AppleScript past now and future.key”, “AppleScript Studioの歴史.key”, “attribute runの書式取得 のバックアップ.key”, “attribute runの書式取得.key”, “boot sequence difference.key”, “Dylan Grand Tour.key”, “Expression MediaのScripting資料.key”, “FontBookに関する情報.key”…(省略)}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

このようにして、a reference toで指定条件に合致するオブジェクト(ファイル)への参照を変数に入れておけば、そこからファイル名や作成日時などを自由に取り出せるようになります。

実用上は、「動けば別になんでもいい」ところですが、ちょっとしたこだわりの処理で、クソ面白くもなんともない(AppleScriptの実力がぜんぜん発揮されない)ファイル処理がちょっとだけ楽しくなったら、素敵なことではないでしょうか。