HULFTは、企業間やシステム間のファイル連携において高い信頼性を誇るミドルウェアです。GUI操作も可能ですが、業務自動化やジョブ管理ツール(JP1など)と連携するには、コマンドラインによるバッチ処理が不可欠です。
この記事では、HULFTの送信バッチを構築するために必要な以下の3つの要素を詳しく解説します:
utlsend:ファイル送信コマンドutlalivecheck:相手先HULFTの起動確認コマンド- タイムアウト制御とエラーハンドリング
🧭 送信バッチの基本構成
送信バッチは、以下の流れで構成されます:
- 相手先HULFTが起動しているか確認(
utlalivecheck) - ファイル送信処理を実行(
utlsend) - 戻り値で正常終了か異常終了かを判定
この流れをバッチファイルに組み込むことで、安定したファイル送信処理が可能になります。
🧪 サンプルバッチコード(Windows)
@echo off
SET HULFTPATH="x:\HULFT Family\hulftx\bin"
SET FILEID=xxxxx
SET HOSTNAME=xxxxx
SET PORTNO=xxxxx
rem 相手先HULFTの起動確認
%HULFTPATH%\utlalivecheck -h %HOSTNAME% -p %PORTNO% -w 20
if NOT %ERRORLEVEL%==0 (
echo 相手先HULFTが起動していません
exit /B 8
)
rem ファイル送信
%HULFTPATH%\utlsend -f %FILEID% -sync -w 300
if %ERRORLEVEL%==0 (
echo 正常終了
exit /B 0
) else (
echo 異常終了(コード:%ERRORLEVEL%)
exit /B 9
)
🔍 utlalivecheckとは?
utlalivecheck は、相手先HULFTが起動しているかどうかを確認するコマンドです。これを使うことで、相手が停止している状態で送信を試みる無駄を防げます。
主なオプション
utlalivecheck -h <ホスト名> -p <ポート番号> -w <待機秒数>| オプション | 説明 |
|---|---|
-h | 相手先のホスト名またはIPアドレス |
-p | 通信ポート番号(HULFT設定に準拠) |
-w | 応答待ち時間(秒) |
⏱ タイムアウトの仕組みと注意点(utlsend)
utlsend には -w オプションでタイムアウト時間を設定できます。これは、送信処理が一定時間内に完了しない場合に異常終了させるための制御です。
よくあるタイムアウト原因
- 相手先HULFTが応答しない(ネットワーク障害)
- ファイルサイズが大きくて送信に時間がかかる
- 相手先の受信キューが満杯で処理できない
📊 図解:送信処理とタイムアウトの流れ
[送信元] ── utlsend実行 ──▶ [HULFT通信開始]
│ │
│ ├─▶ [相手先HULFT応答待ち]
│ │ └─▶ 応答なし or 遅延
│ │
└─▶ [タイムアウト時間経過] ──▶ 処理中断(戻り値9)✅ 運用のベストプラクティス
| 項目 | 内容 |
|---|---|
utlalivecheck の導入 | 相手先が起動していない場合は送信をスキップ |
| タイムアウト時間の調整 | 通信環境やファイルサイズに応じて -w を適切に設定 |
| 再送制御 | ファイルIDや送信履歴を管理し、重複送信を防止 |
| ログ監視 | タイムアウト発生時は自動通知や再送判断を行う仕組みを導入 |
📝 まとめ
HULFTの送信バッチを安定運用するには、以下の3つが鍵です:
utlalivecheckで相手先の起動確認utlsend -sync -wで確実な送信とタイムアウト制御- ログと戻り値によるエラー検知と再送判断
これらを組み合わせることで、信頼性の高いファイル連携が実現できます。HULFTは便利ですが、運用設計がその真価を引き出します。


コメント
ののさん
ご質問ありがとうございます。
質問内容を消してしまいすいません。
本文を上書きしてしまいました。
設定は-w 300というオプションを入れていました。
公式サイトを確認すると、
https://www.hulft.com/help/ja-jp/HULFT-V8/WIN-ADM/Content/HULFT_ADM/Caution/timeout_synchronous.htm
・送信要求コマンドはタイムアウトで終了しますが、その後ファイル転送は継続します。
となっているのでutlsendはタイムアウトしたがHulftは処理を継続した形になっているようです。
※正常終了というのは語弊がありますね。すいません。バッチは異常終了したがデータは正しく送信されたが正しいです。直しておきます。
リターンコードは、バッチの仕様上9で返りますがエラー内容はHulftエラーコード:58 utlsend: TimeOut(58)となっております。
ちなみにタイムアウトを設定しない場合はシステム動作環境設定のソケットリードタイムアウト値まで待つみたいです。
以上よろしくお願いいたします