業務で使う端末やサーバーの場合、Tera Termのバージョンに縛られる事があります。たとえば作業端末にインストールされているTera Termのバージョンが決められていて、自分の権限でバージョンアップする事が許されない、という事はよくあります。
そういった、Tera Termのバージョンに縛られる環境下で注意したい事についてまとめます。
タップできる目次
Tera Termのバージョンを調べる
Tera Termはバージョンが上がると使えるTTLコマンドが増えたり仕様が変わる事があります。そういったバージョンの差異を吸収するためには、マクロを実行した際にgetverでバージョンを調べる必要があります。
業務用途のTera Termマクロを作成する場合、トラブルを未然に防ぐために次の選択を最初に行うことをオススメします。
- ある特定のバージョンに満たない場合はエラーを通知してマクロの実行を中止する。
- バージョンによって挙動を変えるようにコーディングする(要4.58以降)。
- 特定のバージョン以上のみ動作保証の対象とする(getverが使える4.58以降など)。
- 最新バージョン以外は動作保証の対象外とする。
Tera Termのバージョンによって挙動を変える方法は、getverが使えるTera Term 4.58以降が必要です。
注意するバージョン
新しいバージョンなら何でも良いというわけではありません。
たとえば、最近(2016年)のリリースですと、4.90に注意する必要があります。このバージョンは正しくないif文をエラーにするように仕様変更が加えられました。ところが、これにはバグがあって、ある条件では正しいif文でもエラーになってしまいます。
ですので、とりあえず4.90は避けた方が良いと思います。今まで問題なく動いていたマクロが動かなくなる可能性があります。
もしもTera Term 4.90で動かす事を考慮する場合は「if … then」のようにthenを常に使うようにする事をオススメします。詳細は「if分でバグを仕込まないための注意点」を参照してください。
![](https://infrapod.net/wp-content/uploads/2018/03/teraterm-macro-160x160.png)
各バージョンでの注意
すべて挙げるとキリが無いので、ぼくが業務マクロを書く際にハマったものやよく使うであろうTTLコマンドについて取り上げます。
waitregexが4.20以下では使えない
waitは待ち受け文字列が固定文字列なので柔軟性がありません。汎用性があるマクロを書くためには、どうしても正規表現が使えるwaitregexが必要です。動作保証バージョンを4.21以上とするか、それが出来なければ動的に待ち受け文字列を生成してwaitを使うか、汎用性については諦めるしかありません。
breakが4.52以下では使えない
breakはループから抜けるためのTTLコマンドです。breakが使えない場合はgotoで抜けるしかありません。Tera Term 4.52以下を動作保証とする場合は、最初からbreakを使わずbreakで抜ける先にラベルを書いておいて、gotoで飛ばすようにする必要があります。
continueが4.76以下では使えない
continueはループの先頭に戻るためのTTLコマンドです。continueが使えない場合、breakと同じ要領でgotoでループの先頭に飛ばすしかありません。Tera Term 4.76以下を動作保証とする場合は、最初からcontinueを使わずループの先頭にラベルを書いておいて、gotoで飛ばすようにする必要があります。
do,whileとuntil, enduntilが4.55以下では使えない
ある程度プログラミングの経験がある人はwhileの他にdo,whileやuntil,enduntilを使う機会が多いと思うのですが、これらは4.56以降でないと使えません。Tera Term 4.55以下を動作保証とする場合は、whileだけでコーディングする必要があります。
listboxが4.77以下では使えない
ぼくはlistboxを接続先を選択させるために使う事が多いのですが、listboxは4.78以降でないと使えません。Tera Term 4.77以下を動作保証とする場合は、残念ですがlistboxは代替手段がないので、使う事は諦めてください。
使えるパラメータ数が4.92以降で違う
Tera Term 4.91までは、Tera Termマクロに引数で渡す事ができるパラメータの数が8個までと仕様で決まっていました。4.92以降ではparams配列が使えるようになったため、この制限がなくなりました。
params配列については「Tera Term 4.92リリース」を参照してください。
![](https://infrapod.net/wp-content/uploads/2019/08/teraterm-160x160.png)
strspecialが4.66以下では使えない
messageboxやyesnoboxなど文字列を表示する際に改行(¥n)やタブ(¥t)を制御文字として扱う方法はふたつあります。ひとつ目はmessageboxやyesnoboxのstrspecialオプションを使う、ふたつ目はstrspecialコマンドで制御文字を変換する方法です。
strspecialオプションは非推奨扱いですが、Tera Term 4.66以下を動作保証とする場合は、strspecialコマンドを使わずにstrspecialオプションを使う必要があります。
logopenの仕様とオプション
logopenはバージョンによって使えるオプションや仕様変更が比較的多いTTLコマンドです。
4.58でのオプション追加
plain text flag, timestamp flag, hide dialog flagオプションが追加された。
4.61での仕様変更
binary flagオプションを有効にすると、plain text flagオプションとtimestampオプションが無効化されるようになった。
4.62での仕様変更
logopenが成功したか否か、resultへ結果を格納するようになった。
4.61までは本当にログファイルを開く事ができたのか判断できません。そのためlogopenを実行した後、ログファイルの存在を確認する必要があります。
4.62以上の場合、logopenを実行した後にresultの値を調べて、そうでなければファイルの存在を調べる、という方法か、もしくはresultは調べず常にファイルの存在を調べる、という方法のどちらかを選択する必要があります。
ファイルの存在確認については下記の記事を参照してください。
![](https://infrapod.net/wp-content/uploads/2018/03/teraterm-macro-160x160.png)
4.80でのオプション追加
Include screen bufferオプションが追加された。
さいごに
最初の方でも書きましたが、業務用途でTera Termマクロを作成して他人に使わせる場合は、トラブルを未然に防ぐためにもTera Termのバージョンに留意した上で、動作保証ができるTera Termのバージョンを使う人と事前に合意しておく事をオススメします。