EmptyPage.jp > WZ Resources > WZ EDITOR 5.0 マクロ入門
WZ のマクロ機能をもっと活用したいと考えているユーザー向けに、その概要とマクロ言語(TX-C)での開発の学習方法について解説しています。この文書は、マクロに初めて挑戦しようという方々を対象としています。
マクロ機能を搭載していることを謳っているアプリケーションは数多く存在しています。もちろん、ここで話題とする WZ EDITOR にもマクロ機能は用意されています。アプリケーションのマクロとは、そのアプリケーションでの作業を自動化するために用意された一連の機能のことをいいます。ユーザーの行いたい作業をマクロで記述することにより、その作業を実際にユーザーがひと手順ずつ操作することなしに自動的に実行することができます。これはユーザーの労力の軽減と時間の節約になります。とくに繰り返しを強要するような作業では自動化の効果は大きく、手作業ではまる一日かかるような作業であっても、マクロによって自動化したところ数秒で終わってしまった、というのはよくあることです。そのうえ、自動化された作業は人為的なミスが起こる余地がないので、仕事の精確さにおいても手作業に優っているといえます(もっとも、自動化するマクロのプログラミング自体にミスが含まれていた、ということは少なくありませんが)。したがって、「同じような操作を繰り返す作業」「書式化された膨大なデータを扱う作業」に携わる人にとって、マクロは必ずといっていいほど役に立つ機能です。
WZ EDITOR の場合、マクロのもうひとつの役割として、エディタに新しい機能(ないし操作)を付け加えて作業環境を快適にするという面もあります。テキストエディタを使ってユーザーが行う作業というのは、人それぞれ特色があります。同じテキストエディタを、ある人は日記を書くのに用い、ある人は書籍の原稿整理に用い、ある人はコーディングに用います。このとき、最初の人では日付を入力する作業、2 番目の人では用字用語の統一や、単語を辞書で引く作業、3 番目の人ではそのプログラミング言語についての入力補完機能などを使う頻度が多いだろうということが考えられます。WZ 自体は、そのどれもそこそこできるような作りになっているといえますが、マクロを使うことで、これらの機能をより「手近なもの」にすることができます。自分の書き方に合った形で日付を挿入したり、キーひとつで複数の辞書アプリケーションを起動してカーソル位置の単語を引いたり、キーワードの入力直後に必要な括弧のペアを自動的に補ったりすることができます。つまり、自分の専門的に行う作業に合わせて、アプリケーションを特化できるわけです。こうした、いってみれば「小さな自動化」は、前述のような大規模な自動化が不可能な作業であっても、それをいくらか効率よくするのに役立てることができます。執筆やプログラミングなどの「クリエイティヴな」作業では、こうした効率化は思考の中断を少なくすることにつながり、創作物の質を向上させるという、見えない、しかし重要な成果をもたらすことにもなります。
キーボードマクロは、マクロの限定的な使い方のひとつです。キーボードマクロでは、ユーザーの操作(たとえば「行頭の 8 文字を削除→次の行へ移動」など)を記録して、それをそっくりそのまま繰り返させることができます。マクロ・プログラミングの知識がない場合でも、キーボードマクロの使い方を覚えるのは難しくないので、これによって簡単な作業の自動化を実現できます。
また、アプリケーションによっては、記録した操作をマクロのプログラミング言語によるコードとして出力できるものもあるので、それがマクロ・プログラミングの参考になる場合もあります(残念ながら、WZ の場合は、人間が記述するコードとはかけ離れていて、参考にならない場合が多いのですが)。
キーボードマクロでは絶対にできないこともあります。条件によって処理を変えるということは、単にユーザーのやった操作を繰り返すだけのキーボードマクロでは不可能です。「その行が空行であったら削除を行わない」といった単純な判断でさえもできません。「〜であったら」というのは条件判断で、それをやっているのはユーザーの頭の中だからです。
かたや、プログラムとして記述された(キーボードマクロでない)マクロでは、条件による処理の分岐ができます。どういう条件のときにどうするのかは、コードを書くところのユーザーがあらかじめ厳密に定義しておく必要がありますが、巧妙に作られたマクロは、あたかも作業の文脈を理解してユーザーを手伝ってくれているかのような、めざましい振る舞いをみせます。
ここでは、WZ EDITOR で実際にマクロ機能を利用する方法を説明します。
キーボードマクロとは、すでに説明したように、ユーザーのキー操作を記録して、それを後から再生することで作業を自動化できる機能です。
キーボードマクロの利用は、まず操作を記録するところからはじめます。[ツール] メニューから [キーボードマクロ] を実行すると、[キーボードマクロ] ダイアログが表示されます。ここで [記録開始] にチェックが入った状態で [OK] ボタンを押すと、キーボード操作の記録が開始されます。
記録されるのはキーボードでの操作のみです。マウスでカーソル位置を移動させたり、カット&ペーストを行ったりしても記録されません(おそらく再生した時に意図したものとは違う結果になるでしょう)。記録が終了したら、もう一度 [キーボードマクロ] ダイアログを表示させます。今度は先ほどの [記録開始] が [記録終了] になっているはずなので、これにチェックが入っていることを確認して [OK] を押します。これで記録が完了しました。
記録した操作を再生する場合は、[キーボードマクロ] ダイアログで [再生] にチェックを入れて [OK] ボタンを押します。同じ操作を繰り返したいという場合は、再生機能のキーボードショートカット (Shift+Ctrl+L) を利用すると便利です。
記録したキーボードマクロは、[キーボードマクロ] ダイアログに 4 つまで保存しておくことができます。また、登録した操作をコマンドマクロとして出力する機能も用意されています。これらの操作については WZ のヘルプを参照してください。
キーボードマクロではできないような処理でも、マクロ言語を使ってプログラムを記述すれば自動化することができます。Webなどで配布されているマクロは、どれもこうしたプログラムとして記述されたマクロです。ですから、自分でマクロを書くつもりのない人でも、これらのマクロを利用する方法は知っておいたほうがよいでしょう。ここでは、プログラムとして記述された一般的なマクロを利用するために必要な概念について説明しています。
WZ ではマクロに関係する 2 種類のファイルがあります。ひとつは「ソースコード」という、プログラムを記述したファイル、もうひとつが「実行形式ファイル」とか「マクロバイナリ」と呼ばれる、実際にマクロとして実行されるファイルです。それぞれの形式のファイルにおける代表的な拡張子から、ソースコードは「TXC ファイル」、マクロバイナリは「TXM ファイル」と呼ばれることもあります。
ソースコード | マクロバイナリ |
---|---|
※ ファイルのアイコンは環境によって異なる場合があります。 |
ソースコードは人間が見たり書いたりするためのテキストファイルです。マクロの制作者はテキストエディタでマクロのソースコードを書きます。そのソースコードをもとに、WZ が実行形式のファイルを作ります。この作業を「コンパイル」といいます。ソースコードをコンパイルしてできるのがマクロバイナリです。ソースコードに書かれたプログラムの書き方が間違っているとコンパイルに失敗することもあります。この場合はマクロバイナリは作られず、エラーの箇所(ファイル名と行番号)とその理由が書かれたログメッセージが開きます。
具体的な例を挙げてみます。カーソル位置に署名を挿入するマクロを作ることにしました。このマクロの名前は「MySignature」ということに決めました。ユーザーは次のようなコードを書き、MySignature.txc というファイル名でそれを適切な場所に保存します(「適切な場所」というのがどこのことなのかは、このあとで説明があります)。
void main(TX *text) { // カーソル位置に署名を挿入する。 txInsert(text, "-- "); txInsertReturn(text); txInsert(text, "何某何兵衛"); txInsertReturn(text); }
マクロを保存したら、コンパイルを行います。メニューをたどって [ツール]-[マクロ]-[コンパイル] を実行します。エラーがなければ、ステータスバーに「コンパイル成功」と表示されているはずです。これで、マクロバイナリ、MySignature.txm が適切な場所に作成されました。
ユーザーは必ずしもマクロを自分で書く必要があるわけではありません(というか、そうする人はごく一部です)。大多数のユーザーは(そしてマクロを自分で書くユーザーも)、ほとんどの場合はほかの人が書いたマクロをありがたく利用することで愉快に暮らしています。この場合、マクロの作者(WZ のコミュニティでは、伝統的に「マクロ師」などと呼ばれます)が書いたソースコードを、Web などから入手することになります。そうして手に入れたソースコードをユーザーはコンパイルして、マクロバイナリを自分の環境に作るわけです。
マクロバイナリを実際に動く機械(自動車とか)にたとえると、ソースコードはその設計図のようなものといえます。コンパイルは、設計図をもとにして実際の機械を作る作業に相当します。
マクロのソースコードやマクロバイナリは、WZ がその存在を認識できる適切な場所(特定のフォルダ)におかれている必要があります。インストール時、この場所は WZ のインストール先にある「MACRO」フォルダです。WZ を C:\Program Files\WZ EDITOR にインストールしたのならば、C:\Program Files\WZ EDITOR\MACRO になります。ここにソースコード(拡張子が .txc のファイル)を作成して、コンパイルを行うと、同じ場所にマクロバイナリ(拡張子は .txm)が作られます。
このインストール直後の場合、ソースファイルとマクロバイナリがごたまぜになるので、よくマクロを利用する人は WZ の設定を変更して、ソースファイルの置き場所を別のフォルダにすることを好みます。その方法についてはこの文書の趣旨から外れますので、他のドキュメントを参考にしてください。
void main(TX *text)
」って何さ?ここまで、「ユーザーは次のようなコードを書き……」とさらりと書いてしまいましたが、マクロのコードははじめて見る人の目には意味不明の文字列に映るかもしれません。「void
」「TX
」「txInsert
」「*
」「;
」といった見慣れない単語や記号が並ぶ、この数式のような(しかし数式ともちょっと違う)テキストこそが、特定の書式に則って書かれたいわゆるプログラム(コード)なのです。プログラム言語というのは、その「特定の書式」の仕様のことを指します。WZ のマクロを記述するのに採用されているプログラム言語は「C 言語」というものです(WZ 固有の機能が追加されているために、正確には「TX-C」という別の名前が付いています)。C 言語には「最初に main
関数(『関数』というのが何かについてはここでは説明しませんが)が実行される」「ひとつの文はセミコロン (;) で終了する」といったルールがあって、そういう厳密なルールに従って、ユーザーがやりたい処理を記述していきます。
あー、その、つまりですね、マクロの作成にはこのプログラミング言語についての知識(WZ なら C 言語の知識)が必要だということです。このことは、逃げも隠れもできない厳然たる事実です。また、どんなアプリケーションのマクロについてもこのことは同様ですから、マクロを書こうという人には、少なからずの学習が必要になるということを、観念して受け入れてもらわなければなりません(もっとも、個人的な体験をいえば、僕はそれが退屈なことだとは感じませんでしたが)。C 言語や WZ と Windows でのプログラミングの学習方法については、このドキュメントの終わりあたりに、少しだけ触れてあります。
コンパイルに成功すれば、いよいよそのマクロを実行することができます。[ツール] メニューにある [コマンド] を実行すると、[コマンドの実行] ダイアログが現れます。マクロは、このダイアログにマクロコマンドを入力することで実行します。
マクロを実行するコマンド名(マクロコマンド)は、次のような書式になっています。
マクロ名.関数名
ここで、マクロ名とはソースファイルに付けたファイル名(拡張子は除いたもの)、関数名とは、ソースファイルに書かれている C 言語における関数の名前です。先ほどの例でいうと、マクロ名は MySignature、関数名は main ですから、このマクロを呼び出すコマンドは、「MySignature.main」となります。これを [コマンドの実行] ダイアログの [コマンド] 欄に入力し、[OK] ボタンを押せば、自家製の署名がカーソル位置に挿入されるわけです。
[コマンド] 欄に入力するマクロコマンドの関数名の部分が「main」の時、マクロコマンドの後半部分、「.main」は省略できます。つまり、上記の例では単に「MySignature」と入力しても署名マクロは動作します。この .main を省略した書き方はとても一般的に使われますので、覚えておきましょう。
マクロには、これまで説明してきたようにコマンドを入力して使うタイプだけでなく、WZ の起動と同時に立ち上がり、WZ のさまざまな動作に合わせてその機能を実行するというタイプのマクロもあります。それがプラグインマクロです。このように書くと、なにやら複雑そうな印象がありますが、利用する側からすると、プラグインマクロは通常のコマンドマクロよりも簡単に利用できるマクロです。プラグインという名の通り、WZ に登録することで、WZ 本体の機能自体が強化・拡張されているかのように利用できるからです。
たとえば、編集中のファイルをバックアップするマクロがあったとします。通常のコマンドマクロでは、バックアップを作りたくなったら、そのたびに [コマンドの実行] ダイアログからマクロを実行する必要があるでしょう。しかし、プラグインマクロとして作られたバックアップマクロであれば、ファイルを開き、保存し、閉じるという作業ごと、あるいは 30 分ごとなどの任意のタイミングで自動的にバックアップを取るといったことが可能になるのです。ユーザーはこのバックアップ用のプラグインマクロの存在を意識する必要すらありません。WZ でファイルを編集していれば、適切な時に自動的にバックアップが作られていくというわけです。
プラグインマクロを利用するにあたってユーザーがしなければいけないのは、基本的にマクロをプラグインとして登録する作業だけです。あとは何もしなくても、(よくできたプラグインマクロであれば、)すべてプラグインマクロが面倒を見てくれるはずです。
ここでは自分でマクロを開発したいという人に向けて、必要な知識やノウハウの入手方法について紹介しています。
WZ のマクロは C 言語 (正確には C 言語に独自の仕様を加えた TX-C) ですので、これに馴染みがなければ C 言語についての学習からはじめなければなりません。C 言語の入門書として「これがよい」と断定できるものをあげるのは難しいのですが、個人的なアドバイスとしては、どれを選ぶにせよ、1 冊だけでなく(別の著者によるものを)複数読むようにするのがいいと思います。
WZ は単体でほぼフルセットの C 言語を実装しているので、じつは C の学習用教材として向いているといえなくもないのです(向いていない理由があるとすれば、教材にするにはとっつきにくいユーザー・インターフェースであること、そして「本当に」C 言語なので、ポインタ演算の操作を間違ったりすると WZ 自体が簡単にアプリケーションエラーで落ちてしまうという点でしょう)。また、新たなマクロ開発者の開拓という意味でも、本来なら「WZ マクロから入る C 言語入門」といったようなものが存在してしかるべきなのですが、残念ながら現在のところそういったものはありません(かつては存在していたようですが、それは今の WZ とは似ても似つかない、古い仕様の時代のものなので、今となってはあまり役には立たないでしょう)。もしそうしたものが欲しいと思われたら、販売元のビレッジセンターに要望を出してください。
C 言語の入門書としては、以下のようなものが読まれているようです。オンライン書店での評価なども参考にするとよいでしょう。
C 言語の多くの入門書では、はじめにコンソールに「Hello, world.」と表示させる、次のようなサンプルが出てきます。
#include <stdio.h> void main() { printf("Hello, world.\n"); }
これをたとえば hello.c というファイル名で保存してコンパイル、実行するわけです。TX-C では、上記のコードはコンパイルできません。しかし、以下のように書き換えて、ファイルの拡張子を .txc にすれば、マクロとしてコンパイル、実行できます。
void main() { printf("Hello, world.\n"); }
ごらんのように、見かけ上は「#include <stdio.h>
」の一行がないだけです。TX-C では C の標準的な関数の多くははじめから使えるようになっているので、ヘッダファイルをインクルードする必要がないのです。
このほかにも、一般的な C 言語(いわゆる ANSI C)と TX-C とは細かな点で相違があります(WZ のマクロヘルプの「ANSI-C との相違」を参照)が、以下のいくつかの点に気をつけておけば、初歩的な C 言語の入門書を WZ である程度まで攻略することはできると思います。
インクルード命令(#include <...>
)は C の入門書で扱う範囲では不要です。
浮動小数点型(float
、double
)は TX-C では使えません。
インクルード命令は不要と書きましたが、逆にいえば、そのままで使えない関数は TX-C では使えないと考えてください(実際には使う方法はありますが、それは入門向けの内容ではありませんのでここでは書きません)。こうした関数の代表的なものとしては 、標準入力からの入力を読む、scanf
関数、gets
関数などがあります。コンソールを持たない WZ では、こうした関数は用意されていないのです(printf
は便利なので例外的に用意されています)。ユーザーから文字列や数値を入力してもらうための方法としては、入力用のダイアログを表示する関数などが用意されています。
main
関数の引数が違うため、コマンドライン引数という概念がありません。参考書の「int argc, char **argv
」を扱うサンプルはあきらめてください。
ファイルポインタとそれに関するファイル操作関連の関数(fopen
、fclose
など)は使えません。WZ ではエディタで開くのと同じようにファイルを操作するので、そのための専用の関数が用意されています。
ずいぶんと違いがあるようにも見えますが、これは主に用意されている型や関数の有無による制約であって、C 言語の文法的なところでの違いではありません。C 言語のキモというのは、基本型、if
や while
、for
などの制御構文、ポインタ、構造体、関数であり、それらについての解説は C の一般的な説明がそのまま当てはまります。これらの振る舞いを学ぶためのコードは、ほとんどの場合 TX-C でもせいぜい上記のようなわずかな修正で動かすことができるはずです。
C 言語の文法についてある程度わかってくれば、ほかの人のマクロのソースコードを見てもそれが暗号の羅列には見えないはずです。わからないことは、WZ ではエディタの機能を利用するためにどのような関数群(API)が用意されていて、テキスト(TX 構造体)がどのような設計になっているのかといった、具体的な問題になります。
基礎的な情報については、WZ の「TX-C ヘルプ」および「API ヘルプ」にまとめられています(これらのドキュメントには [ツール]-[マクロ] メニューからアクセスできます)。まずはこれらにひと通り目を通しておくとよいでしょう。これらに載っている情報だけでもいろいろことができるというのがわかると思います。また、エディタの操作の自動化という目的なら、ここまででたいていのことは実現可能といえるかもしれません。
ほかの人が書いたマクロのソースコードもひじょうに有用な参考資料になります。ある操作をどのように実現しているのだろうという視点でコードを見ることは、プログラミングの上達にも役立ちます。たくさんのマクロが、ビレッジセンターの「TX-C ライブラリ」やユーザーによる個人運営のサイトで公開されています。WZ の話題を扱う Wiki ページも登場しました。また、マクロについて、自分では解決できないような疑問が出たら、ビレッジセンターの「作ろう TX-C」掲示板でほかのユーザーに質問することもできます。
WZ と TX-C API についての疑問への最高の(そしてもっとも信頼できる)解答は、_wz.h というヘッダファイルを見ることです。ここには、TX 構造体や TX-C API などの宣言が大量に含まれています。拡張子が .txc で作られたマクロのソースファイルは、じつは自動的にこの _wz.h をインクルードしているのです。_wz.h の内容は広大で、マクロを書き慣れている上級ユーザーでもその全部に目を通しているという人は滅多にいませんが、必要な情報がありそうなあたりを覗いてみたり、用意されている API 一覧を眺めたりしているだけでも有用な情報が手に入ることは多いです。
WZ のマクロ機能では、エディタのウィンドウプロシージャを「フック」して、入ってくるメッセージを監視したり、場合によっては一部を独自の処理に置き換えたりすることができます。ほとんどのプラグインマクロがこうした処理をしています。「ウィンドウプロシージャ」や「メッセージ」というのは Windows プログラミングの基本的な概念です。プラグインマクロを作成しようという人や、TX-C で Windows アプリケーションを作成しようとする人(こういうことを普通に書くことができるというのは TX-C のすごいところといえるかもしれませんが)なら、Platform SDK レベルの Windows プログラミングについて知っておく必要が出てくるでしょう。とはいえ、ほとんどの人は、ここまでの知識は必要ありません。
Win32 API を用いた Windows プログラミングについては、書籍やインターネット上のリソースをあたってみてください。