1.8 プログラムの再利用方法
 ところで、特定のプログラムを色々なプログラムで使い回ししたい、なんてこととでお困りの方はいないでしょうか。例えば、データベースの接続・切断・トランザクション開始の処理や、その他にシステムで共通で使うサブルーチンや関数(例えば、運用日を取ってきたり、n営業日後やn営業日前、nヶ月後などの日付を求めたり)などです。

 こういった処理を、いろんなプログラムへベタベタ書いておくと、あとでロクなことがありません。もし、共通の部分に仕様変更が入ったら、その処理を行っている全てのプログラムを書き換えなくては…気が遠くなっちゃうよね(汗)

 vbsという拡張子で作ったプログラムだと他のvbsのプログラムを参照することが出来ないのですが、wsfという拡張子のプログラムにすればこれが出来ちゃいます。

 てなわけで、wsfの使い方、行ってみよう!
wsfの使用例1/vbsプログラムのインクルード
 wsfファイル(プログラム)の使い方と、外部にあるvbsで作ったプログラムを取り込む(インクルードする)方法です。例では、wsfのプログラムから、vbsファイルの方にあるprcMsgWriteという処理を呼び出しています。vbsのプログラムの方では、受け取った文字列をコンソールへ表示しています。

 ところで、wsfに書く内容は、vbsとはちょっとだけ違いますがhtmlに似ているので、なんとなく分かるでしょう。

 まず、全体を<job>〜</job>というタグで囲み(@)、その中に必要なことを書いていきます。vbsのファイルを取り込むには、Aのように<script>タグを使い、タグの中のsrcエレメントの所に、vbsのファイル名を指定すればOK!何種類かのvbsファイルを取り込みたい場合は、srcに指定するファイル名を変えた<script>〜</script>を、必要なだけ定義すればOK!

 もう一つ<script>タグがあり(B)ますが、ここはこのwsfを実行したときに、実際に動く部分です。<script>タグを使っていますが、ここにはsrcエレメントは付けません。

 あと、プログラムを実行するときは、wsfの方を実行します。

 ■VBScriptでの記述例
こっちがメイン。ファイル名はMain.wsfで作成
<!-- @このプログラム全体をジョブとして定義。ジョブ名はjob1 -->
<job id="DailyJob1">

<!-- A外部VBSファイルの取り込み(インクルード) -->
<script language="VBScript" src="./common.vbs"></script>

<!-- Bメイン処理。実行すると、この部分が実行される -->
<script language="VBScript">

    Option Explicit

    Call prcMsgWrite ("みんな〜!やってる?")

</script>
<!-- Bメイン処理はここまで(</script>タグまで) -->

</job>
<!-- @全体はここまで(</job>タグまで) -->

こっちは再利用するプログラム。ファイル名はcommon.vbsで作成
Option Explicit

Sub prcMsgWrite(tmpMessage)

    Dim strDateTime

    WScript.Echo Date & " " & Time & " > " & tmpMessage

End Sub

 ■JScript(JavaScript)での記述例
こっちがメイン。ファイル名はMainJ.wsfで作成
<!-- @このプログラム全体をジョブとして定義。ジョブ名はjob1 -->
<job id="DailyJob1">

<!-- A外部VBSファイルの取り込み(インクルード) -->
<script language="JScript" src="./common.js"></script>

<!-- Bメイン処理。実行すると、この部分が実行される -->
<script language="JScript">

    prcMsgWrite("みんな〜!やってる?");

</script>
<!-- Bメイン処理はここまで(</script>タグまで) -->

</job>
<!-- @全体はここまで(</job>タグまで) -->

こっちは再利用するプログラム。ファイル名はcommon.jsで作成
function prcMsgWrite(tmpMessage) {
    WScript.echo(getDate() + " " + getTime() + " > " + tmpMessage);
}

function getTime() {
    var objDate = new Date();
    return objDate.getHours() + ":" + objDate.getMinutes() + ":" + objDate.getSeconds();
}

function getDate() {
    var objDate = new Date();
    return objDate.getYear() + "/" + (objDate.getMonth() + 1) + "/" + objDate.getDay();
}
wsfの使用例2/wsfへ複数ジョブを定義する
 今度は、wsfファイルの中へ複数のジョブを入れておくときの方法です。さきほどの例では、<job>〜</job>タグで全体を囲んでいましたが、複数のジョブを入れておく場合は<package>〜</package>で全体を囲み、その中に<job>〜</job>を入れます。
 例では、1つのwsfファイルの中に、DailyJob1DailyJob2という2つのジョブ(別なプログラム)が入っています。

 実行するときは、cscriptコマンドに//job:ジョブ名というオプションを付け、どのジョブを実行するかを指定します。コマンドの例は、DailyJob2(2つ目に定義してあるジョブ)を実行したい場合です。

C:\happy>cscript MainB.wsf //job:DailyJob2

 ちなみに、//job:ジョブ名を指定しなかったときは、一番上に(先頭に)定義してあるジョブが実行されます。例で言うと、DailyJob1です。

 ■VBScriptでの記述例
こっちがメイン。ファイル名はMainB.wsfで作成
<!-- @パッケージの開始 -->
<package>

    <!-- @1つ目のジョブの定義。ジョブ名はDailyJob1 -->
    <job id="DailyJob1">

    <script language="VBScript" src="./common.vbs"></script>
    <script language="VBScript">

        Option Explicit

        Call prcMsgWrite ("みんな〜!やってる?")

    </script>

    </job>
    <!-- @DailyJob1はここまで -->

    <!-- A2つ目のジョブの定義。ジョブ名はDailyJob2 -->
    <job id="DailyJob2">

    <script language="VBScript" src="./common.vbs"></script>
    <script language="VBScript">

        Option Explicit

        Call prcMsgWrite ("あー腹減った・・・")

    </script>

    </job>
    <!-- ADailyJob2はここまで -->

</package>
<!-- @パッケージの終了 -->

こっちは再利用するプログラム。ファイル名はcommon.vbsで作成
Option Explicit

Sub prcMsgWrite(tmpMessage)

    Dim strDateTime

    WScript.Echo Date & " " & Time & " > " & tmpMessage

End Sub

 ■JScript(Java Script)での記述例
こっちがメイン。ファイル名はMainBJ.wsfで作成
<!-- @パッケージの開始 -->
<package>

    <!-- @1つ目のジョブの定義。ジョブ名はDailyJob1 -->
    <job id="DailyJob1">

    <script language="JScript" src="./common.js"></script>
    <script language="JScript">

        prcMsgWrite("みんな〜!やってる?");

    </script>

    </job>
    <!-- @DailyJob1はここまで -->

    <!-- A2つ目のジョブの定義。ジョブ名はDailyJob2 -->
    <job id="DailyJob2">

    <script language="JScript" src="./common.js"></script>
    <script language="JScript">

        prcMsgWrite("あー腹減った・・・")

    </script>

    </job>
    <!-- ADailyJob2はここまで -->

</package>
<!-- @パッケージの終了 -->

こっちは再利用するプログラム。ファイル名はcommon.jsで作成
function prcMsgWrite(tmpMessage) {
    WScript.echo(getDate() + " " + getTime() + " > " + tmpMessage);
}

function getTime() {
    var objDate = new Date();
    return objDate.getHours() + ":" + objDate.getMinutes() + ":" + objDate.getSeconds();
}

function getDate() {
    var objDate = new Date();
    return objDate.getYear() + "/" + (objDate.getMonth() + 1) + "/" + objDate.getDay();
}
Copyright(C) 1999-2006 結城圭介。 All rights reserved