title1
navigation bar3




[ 1-p1 | 1-p2 | 1-p3 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 ] [日経マック連載Index ]


  ファイルの名前をまとめて変えたい! 「□□□USA」を「USA□□□」にする単純作業なのだが、ファイルの数が何千も…。そこでAppleScriptの出番。

  Finderに命令をtell、ファイル名をset、ファイルが何万個あろうとrepeat命令で繰り返しはお手のもの。10行程度のスクリプトで解決だ。
  連載第一回目は、ノンプログラマーのAppleScript開眼の巻。


連載[1-1]  たくさんのファイルをまとめて名前変更する

頼みの綱はAppleScriptだけ!
プログラミング言語は中学生程度の英語
漢字Talk7.5にはタダで付いてくる
アプリケーションに命令をtellする
ファイルが1万個でもドンと来い!
「□□□USA」をすべて「USA□□□」に
choose folder...でダイアログボックスが
Excelやファイルメーカーにもtellできる
すべてのファイルについてrepeat文で繰り返す
国名の単語だけを取ってくる
tellやrepeatはブロックに着目しよう
単語を切ったりつないだり自由自在
出来上がった文字列をファイル名にset
ちょっとしたメモをコメント文で
なぜ人間の言葉をソフトが理解できる?
画像やフィールドも操作できる
ファイル名を変えるなど氷山の一角



《 頼みの綱はAppleScriptだけ! 》
先生っ、一大事ですっ!
先生
うわっ!なんだ君か。いったい何が起こったんだ。
聞いて下さいよ、先生。明日中に何千個ものファイル名を付け替えなきゃならないんです。
今朝いきなり本部長から呼ばれまして、取引先との日々の履歴を残したファイルの名前がうちの部署と営業1部とで違ってるんで、それを統一してくれって。しかも明日中にですよっ。
本部長がシステム部に相談したら、来期のプロジェクトにするから半年待ってくれって言われたそうです。
先生
まぁ、そんなもんだろうな。
それで思い出したんですが、先生が前におっしゃってたマックを自動操縦する「AppleScript」とかいうやつ。
これでファイル名をパパパッとまとめて変更できないかと思って。
先生
ファイルの名前を変えるくらい簡単だよ。論より証拠で簡単なAppleScriptの例を見せてあげよう。
図1は今の君にドンピシャ。ファイルの名前を変更するスクリプトなんだがね。
あれっ、たった1行しかないですよ。
先生
行数は問題じゃないよ。スクリプトも説教も短いほど喜ばれるものだ。動かしてみようか。
ほらっ、あっという間にファイル名が変わるだろう。
本当だ。どういう風に動いてるんですか。
先生
最初から説明しよう。このスクリプトは「スクリプト編集プログラム」という一種のエディタ−・ソフトで書かれてるんだ。


図1 ファイル名を変える単純なスクリプトの例

TOP


《 プログラミング言語は中学生程度の英語 》
ちょっと待ってください。今「スクリプト」って言いましたが、それはプログラムなんですか?
先生 そう、昔だったらCOBOLやらFORTRANとか、あるいはCやBASICなんていういうのがあるよね。
だけどAppleScriptはもっとずっと簡単だ。「HyperCard」は知ってるでしょ?
僕も使ってます。
先生 じゃあHyperTalkというプログラミング言語は?
えぇ、簡単な検索用のスタックを作ったことがあります。
なんだか中学生程度の英語みたいで、プログラミングといってもわりと分かりやすかったような気がします。
先生

じゃぁ話は早い。AppleScriptもプログラミング言語の一種なんだが、以前の言語とは違ってほとんど普通の英語って感じなんだな。こういうのを、近頃ではプログラミング言語と言わずに「スクリプト」って呼ぶようになった。
これを書いたり編集したりするためのソフトが、さっき言った「スクリプト編集プログラム」になるんだな。


《 漢字Talk7.5にはタダで付いてくる 》
ところで、そのスクリプト編集プログラムはどうやったら手に入るんですか?
先生 95年1月にリリースされるマックの新システム「漢字Talk7.5」には、これを含めてAppleScriptを使うために必要なソフトが一切合切標準でついて来るんだ(別掲記事参照)。
じゃぁ7.5にアップグレードすれば、すぐにスクリプト編集プログラムでスクリプトが作れるんですね?
先生 もちろんさ。だが、いくら簡単だといったって、道具をそろえただけで何にも知らないんじゃ無理だろうがね。ところで、スクリプト編集プログラムには、スクリプトの文字を入力/編集するだけではなくて、作ったスクリプトをコンパイルして実行する機能もあるんだ。
コンパイル?
先生 人間にも分かる言葉で書いたスクリプトを、マックのアプリケーションが解読できる言葉に置き換えることだな。AppleScriptで使われるアプリケーションの言葉は「AppleEvent」と呼ばれていてね、スクリプト編集プログラムは、例えば君が書いたスクリプトをAppleEventに置き換えて、それを実行するわけだ。


《 アプリケーションに命令をtellする 》
その「実行」っていうのは?
先生 単純に言えば、動かすことだ。と言っちゃぁ身も蓋もないか。まぁ、命令することだな。さっきのファイル名を変えるスクリプトで言えば、「デスクトップにある"報告書"というファイルの名前を"私のレポート"に変えろ」っていう命令がFinderに伝えられる。それがここで言う「実行」の内容に当たるんだが。
すると「tell application "Finder"」というのが「"Finder"というアプリケーションに伝えろ」っていう命令なわけですね。
先生 おぉっ、そこまで分かったか。素晴らしいぞ、君の頭脳は!
そんな心にもない誉め方しないでくださいよ。だってこれは、中学で習うような英語じゃないですか。
先生 ふん、じゃぁ後は簡単だろう。「to set name of file "報告書" of desktop to "私のレポート"」は、どうだい?
だいたい見当がつきます。これは「デスクトップ上の"報告書"というファイルの名前を、"私のレポート"にセットしろ」ってことでしょ。setというのは「変えろ」って意味ですね。
先生 その通り。ただ、ひとこと言っておくと、setは正確には「変えろ」という命令ではない。
   set ×× to △△
  は、   ××に△△の値を代入しろという意味だ。
「代入」って数学みたいですね。
先生 要するに、何らかの値を入れることだね。
TOP


《 ファイルが1万個でもドンと来い! 》
でも先生、1個のファイル名を変えるくらい、手作業でも大したことじゃないでしょ。わざわざスクリプトを書くなんて馬鹿らしいような気がしますけど…。
先生 おっ、言ってくれるね。じゃぁ君はどうするんだい。ファイルが何千個もあるんだろう。
あっ、そうでした。参ってるんですよ、ホントに。
先生 だからスクリプトの価値があるんだな。AppleScriptなら100個のファイルの名前を30秒足らずで変えることができる。1000個あったって、ほんの数分だろうね。
ほんの数分っ! そんなに簡単にできたら、ボク出世しちゃうかも。
先生 おぉっ、どんどん出世してくれ。出世したら私にいい仕事を廻しなさい。よしっ、では具体的な話を聞こうじゃないか。


《 「□□□USA」をすべて「USA□□□」に 》
うちの部では取引先との日々のファイル名を、下記のように日付の後に国名の略称をアルファベットで付けています。
ところが営業1部はその逆なんです。
                  94 11 01 USA → USA 94 11 01
国名の後に日付が来るんです。 営業1部と同じように統一しろ、っていうのが本部長の指示なんですが。
先生 ほうぅ、じゃ国名と日付の順番を変えればいいわけだ。
ところが履歴ファイルっていうのが各部署で毎日20個以上作られまして、1年分となると年間200日としたって、
例えば1日50個×200日で、えぇーと、わぁっ大変だ!先生、1万個もありますよっ!
先生
そんなことで驚いてちゃいけない。図2(別ウインドウ参照)のスクリプトを見なさい。
一発で君と本部長の悩みは全て解決するはずだよ。
 図2
ホントですかぁ?ちょっと動かしてみていいですか。
先生 その前に説明しておこう。デスクトップに「テストデータ」というフォルダがあるね。
この中にさっき君が言ったような名前のファイルを2つ作ってあるんだ。
「94 12 01 USA」と「94 11 25 JPN」ですね。
先生 そう。このファイル名が一瞬で変わるから。さぁ、やってごらん。
あれっ、なんだかダイアログが出ましたけど。
先生
うん、このダイアログで名前を変えたいファイルが入っているフォルダを指定できるんだ。
今の場合だと「テストデータ」を選べばいいんですよね。おっ、何やらカーソルがぐるぐる回っていますが…、
一瞬で終わっちゃった。あっ、ファイル名がUSA 94 12 01とJPN 94 11 25に二つとも変わっています、先生。
先生
どうだい、これでいいんだろ。
はいっ。じゃぁこのスクリプトをコピーさせていただいてもいいですか?
先生
いいけれど、君はこのスクリプトを理解できてるのかい。後で、もしどこかを変えろなんて言われても大丈夫かな?

うっ、自慢じゃないですが全然駄目です。tellもsetも図1の例とは違うみたいですし。やっぱり先生、このスクリプトの意味を説明していただけます?



TOP

AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp

主催 株式会社フォーサイト   後援 アップルコンピュータ株式会社

(c)1996-2010 The ForeSight Inc. All rights reserved.Appleは、米国アップルコンピュータ社の登録商標です。
AppleScriptは、米国アップルコンピュータ社の商標です。
その他記載の会社名・製品名・ソフトウェア名は一般にその会社の登録商標または商標です。