【入門編】【他言語連携データパイプライン】CScript StdIn/StdOut を用いた Python/Node.js との双方向リアルタイム通信 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptを「最強の糊」にする:CScript標準入出力によるPython/Node.jsとのリアルタイム連携術

こんにちは。現場の最前線でコードを書き続けてきたエンジニアとして、今日はVBScriptの「真の姿」をお見せしましょう。

多くの人はVBScriptを「古い」「時代遅れ」と切り捨てます。しかし、OSの深層に近い場所で、軽量かつ即座に動く「接着剤(Glue Code)」としての価値は、現代のモダンな言語をもってしても代替できません。

今回は、VBScriptを単なる自動化ツールから、「PythonやNode.jsといった強力なエンジンを制御する司令塔」へと進化させる、標準入出力(StdIn/StdOut)を用いたパイプライン通信について解説します。

1. なぜ「標準入出力」なのか?

通常、VBScriptで外部プログラムを動かすには `WScript.Shell` の `Run` メソッドを使いますが、これでは「出しっぱなし」です。結果をどう受け取るか? ファイルに書き出して読み直す……それはあまりに遅く、非効率です。

標準入出力(StdIn/StdOut)を使うと、VBScriptとPythonがまるで一つのプログラムであるかのように、メモリ上で直接データのやり取りが可能になります。

  • VBScriptの役割: OS特有の操作(ファイルシステム、レジストリ、Excel等のCOM操作)。
  • Python/Node.jsの役割: 高度な計算、JSON解析、API通信。

この分業こそが、現場を救う最強のアーキテクチャです。

2. 構築の基本:パイプラインの概念図

イメージしてください。2つのプログラムの間を「透明なチューブ」で繋ぐことを。

[VBScript] –(StdIn)–> [パイプライン] –(StdOut)–> [Python/Node.js]
↑ ↓
└───────────────────────(結果の受け渡し)──────────────────────┘

VBScript側では `WScript.Exec` メソッドを使用します。これにより、外部プロセスの入出力ストリームを直接操作できる「オブジェクト」が得られます。

3. 実践:VBScriptからPythonを呼び出し、データを受け取る

まずは、Python側で「送られてきた文字列を大文字にして返す」という単純なエコーサーバーを作ります。

Python側:`processor.py`

import sys

標準入力からデータを受け取り、加工して標準出力に書き出す
for line in sys.stdin:
result = line.strip().upper() + ” [Processed by Python]”
print(result)
sys.stdout.flush() # これが極めて重要!バッファを強制フラッシュする

VBScript側:`controller.vbs`

‘ CScript環境で実行してください
Dim shell, proc, inputData
Set shell = CreateObject(“WScript.Shell”)

‘ Pythonプロセスを起動(Execを使うのが肝!)
Set proc = shell.Exec(“python -u processor.py”)

‘ Pythonへデータを送る
proc.StdIn.WriteLine “Hello from VBScript”

‘ Pythonからの応答を待つ
Do While proc.Status = 0 ‘ プロセスが生きている間ループ
If Not proc.StdOut.AtEndOfStream Then
WScript.Echo “Pythonからの応答: ” & proc.StdOut.ReadLine
Exit Do ‘ 今回は1回受け取ったら終了
End If
WScript.Sleep 100 ‘ CPU負荷軽減のための小休止
Loop

4. 陥りやすい罠と「伝説の知見」

現場でこのコードを組む際、初心者が必ずハマるポイントがあります。これを知っているだけで、あなたのエンジニアとしての格が上がります。

罠1:バッファリング問題

Pythonなどのモダンな言語は、標準出力を「まとめて処理」しようとします。`sys.stdout.flush()` を入れないと、VBScript側にはデータがいつまで経っても届きません。「送ったら即流す」。これがパイプラインの鉄則です。

罠2:同期のタイミング

`proc.StdOut.ReadLine` は、データが来るまでプログラムを一時停止させます(ブロッキング)。無限ループに陥るとVBScriptが応答なしになるため、必ず `Status` プロパティや `AtEndOfStream` で状態を確認してください。

罠3:日本語の文字コード

VBScriptは伝統的にShift-JISを好みます。Pythonとやり取りする際は、Python側で `sys.stdout.reconfigure(encoding=’utf-8′)` 等を明示し、必要に応じてVBScript側で `ADODB.Stream` を使ってエンコード変換を噛ませる準備をしておくと、文字化けの悪夢から解放されます。

最後に:VBScriptを使いこなすということ

「VBScriptなんて古い」と言う人は、ツールを単体でしか見ることができません。しかし、あなたは違います。VBScriptというOS直結のインターフェースと、Pythonという強力な演算器を繋ぎ合わせる「パイプライン」の設計者になったのです。

この手法を覚えれば、Excelで収集したデータを即座にPythonでAI解析し、その結果をまたExcelに書き戻す、といった高度なオートメーションが、わずか数十行のコードで実現できます。

ここをクリアしたあなたなら、もう「マクロの記録」に頼る必要はありません。自信を持って、その「糊(Glue)」を使いこなしてください。応援していますよ。

タイトルとURLをコピーしました