HULFT Scriptで転送前後処理を自動配布、自動反映してみた (3/3)

# はじめに
こんにちは、よろず相談担当 **すぎもん** :yum: です。

[前回](https://qiita.com/sugimon/items/c8142a441037d82cd4d3 "前回")の記事では、お客様の課題を解決する方法として
**「HULFT Script オートマティック・アップデート」**
というワザの概要をご紹介いたしました。

今回は、実際に作成したサンプルを処理の流れに沿ってご紹介します。
#処理の流れ
### ■本社側の流れ
<dl><dt>1. 配布処理実行</dt><dd>本社の担当者が配布実行したいタイミングで、HULFT Scriptの処理を実行します。<br>
自動化するなら、深夜などにスケジュール実行しても良さそうです。</dd>
<dt>2. 処理のエクスポート</dt><dd>各拠点に配布したい処理を「CLI Console」でエクスポートします。<br>
「CLI Console」とは、HULFT Scriptの管理機能をコマンド実行できるツールです。</dd>
<dt>3. HULFT配信</dt><dd>HULFTを使用し、「2.」でエクスポートした処理を転送します。</dd></dl>

### ■支店側の流れ
<dl><dt>4. HULFT集信</dt><dd>HULFTで本社から送信されたファイルを受け取ります。</dd>
<dt>5. 処理のインポート</dt><dd>HULFT Scriptの処理を実行し、「CLI Console」で処理をインポートします。<br>
処理は、HULFT Scriptトリガーを使用して、HULFTの集信を契機として実行されます。<br>
インポートには「サーバ移行機能」を使用するため、忘れずに再起動しましょう。</dd></dl>

# 1.配布処理実行
まず、本社側で下記のようなスクリプトを作成し、配置します。
![本社側スクリプトイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/92e50f6f-c26b-80f5-bd47-29d1e2b05fab.png)
最初の「delete（ファイル/ディレクトリ削除処理）」アイコンでは、初期処理としてワークフォルダをクリアしています。

次の「launch（外部アプリケーション起動処理）」アイコンでは、下記のとおり設定し、「CLI Console」を起動しています。
![外部アプリケーション起動処理](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/dc73e211-27c7-9fba-bf41-7724d6f39234.png)
引数として、「CLIコマンド設定ファイル」のパスを記述します。「-M」に続いて、スペースを空けずにパス指定します。
※「CLI Console」をバッチ実行する場合、各コマンドは「CLIコマンド設定ファイル」に記載し、 "ファイル渡し" する必要があります。
# 2.処理のエクスポート
「CLI Console」は、HULFT Scriptインストールフォルダの「/server/bin/CLI.exe」にあります。
![CLI.exe](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/36aa8d60-0f0f-9a24-ab20-cf1a36d69f34.png)
CLI.exeに "ファイル渡し" する「CLIコマンド設定ファイル」の内容は以下のとおり。
![cli_serverdl.cli](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/a9a8d4db-12ef-d527-5937-daae7cef6e41.png)

```ruby:cli_serverdl.cli
#サービスをエクスポートします
exp --service="HULFTScriptテンプレート基礎編" "C:\hulft\export"
```

※行頭が「#」から始まるものはコメントとして扱います。
上記コマンドを実行することで、「HULFTScriptテンプレート基礎編」というサービスが「C:\hulft\export」にエクスポートされます。
![exportファイル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/852baabd-3557-9559-3153-288ab833c31c.png)
なお、ファイル名（export_xxxxxxxxxx）はエクスポート時に動的に付与されます。
ファイル名はHULFT配信時に使用するので、スクリプト内でファイル名を取得し、変数に退避しておきます。
ここでは、「list（ファイル名一覧取得処理）」アイコンでファイル名を取得し、「variable（変数代入）」アイコンで変数に退避しています。
# 3. HULFT配信
続いて、HULFTによる配信を行うため、「配信要求処理」を行います。
ここでは、使用するHULFTのファイルID（FILE_001）を指定します。
![配信要求処理（必須設定）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d48d8dee-82f8-2e98-9db3-835f97833a52.png)
配信要求処理のポイントは、下記のとおり「配信ファイル名」を動的指定していることです。
上述のとおり、サービスをエクスポートした際のファイル名は毎回変わるからです。
![配信要求処理（任意設定）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ba45d3cc-c091-5646-743a-1212171e5a47.png)
ここで、HULFTの設定内容を見てみましょう。
HULFTの「配信管理情報」に入力されているファイル名は、仮のファイル名となります。
ここに値が記載されていても、HULFT Scriptからファイル名を渡すので、そちらが優先されます。
![配信管理情報](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6517b38f-f850-50c7-fac6-cc2eed44130b.png)
# 4. HULFT集信
HULFTの集信を監視し、処理を実行するため、HULFT Scriptトリガーを使用します。
HULFT Scriptトリガーは、HULFTのファイル転送を検知して、条件に一致した場合にスクリプトを実行する機能です。
![HULFT Scriptトリガーの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/dcae5230-dfdc-6e0e-dce3-293c927fd37b.png)
ここでは、「ファイルID（FILE_001）」の「集信」が「正常（完了コード="0"）」のときのみ起動するように設定しました。

そして、監視対象となるHULFTの「集信管理情報」です。
![集信管理情報](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/09ef2089-27f9-7132-7e14-dc5510889d87.png)
「集信管理情報」のファイル名ですが、こちらは「固定のファイル名（service.zip）」にしました。
こちらのファイル名は、次のステップで使用します。
![service.zip](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e7fc2fa6-d3b0-a79e-40e9-a8f42f63ae87.png)
# 5. 処理のインポート
HULFT ScriptトリガーでHULFTの集信を検知したら、下記のスクリプトを実行します。
配置するのは、「launch（外部アプリケーション起動処理）」アイコンだけですね。
![支店側スクリプトイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0b951ef3-d9bf-0b99-6807-50436f9b718c.png)
下記のとおり設定し、「CLI Console」を起動します。
引数として、「CLIコマンド設定ファイル」のあるパスを記述します。
![外部アプリケーション起動処理](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b1771e6c-8c12-ef69-49f1-6c3943ca6fb8.png)
CLI.exeに "ファイル渡し" する「CLIコマンド設定ファイル」の内容は以下のとおり。
集信したファイル名（service.zip）を固定で記載しています。
![cli_serverul.cli](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2aa36885-bdb5-81bd-4495-f8a8ec289d05.png)

```ruby:cli_serverul.cli
#サービスをインポートします
imp -m "C:\hulft\import\service.zip"

#有効化するため再起動します
shutdown --reboot
```

インポート後、HULFT Script Serverの再起動も行っています。
再起動を伴うので、当然ですが、運用外の時間帯に実行すべきですね。

# テスト実行してみよう！
本社側のスクリプトをデザイナから実行します。
![デザイナから実行](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e0241ed4-1b94-d5d8-08a9-7e07f6717c7f.png)
HULFTの配信履歴です。「完了コード="0"」ですね。
![配信状況一覧](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/9c0afa10-dd4a-6fb0-f5e6-b19cf34406c4.png)
配信が正常終了ということは、集信も正常終了です。
![集信状況一覧](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e157a8b6-9e6d-c58b-e8d9-fb7694bc7933.png)
支店側のサービスです。
処理の実行前は、「HULFTScriptテンプレート基礎編」の登録日時が「2019/08/19 14:22:26」ですね。
![マイサービス（実行前）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0505e5a4-02bf-2f3b-8a36-14e69e0924ae.png)
処理の実行後、登録日時が「2019/08/19 14:28:08」になりました。
![マイサービス（実行後）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/448d3294-4160-7da0-d500-c50917f77531.png)
サービスを更新していれば、バージョンも上がるはずです。
今回はループバックで実施したため、「登録日時」で成功を確認しています。
# さいごに
いかがでしたか？
この**「HULFT Script オートマティック・アップデート」**を使用すれば、開発環境で作成した処理を自動配布し、簡単に本番適用できます。

実際の運用に至るには、まだまだ考慮点はあると思います。
が！　お客様の課題を必ずや解決の方向に導くハズ！

##### 【課題1】内部統制の不全

| :arrow_forward: 一元管理 | 開発環境で作成した処理を配布し、簡単に本番適用が可能 |
|:--|:--|

##### 【課題2】属人化

| :arrow_forward: 標準化 | 開発者のスキルに依存しにくいノンプログラミング開発 |
|:--|:--|

##### 【課題3】開発コスト増大

| :arrow_forward: 高生産性 | 豊富なテンプレートをベースに、パターン化しつつ実装 |
|:--|:--|

:running:　:running:　:running:　:running:　:running:

いや～、製品や機能を組み合わせることで、今までになかった使い方が出てくるものですね。
頭を柔軟にすれば、フレキシブルな課題解決案が浮かぶもんだ、と再認識した次第です。（←自画自賛）

このブログでは、技術の「よろず相談窓口」で相談を受けた内容や、誕生したワザをご紹介していけたらな、と思っています。
これからも是非チェックいただき、宜しければフォローをお願いします。

それでは、また！

---

:arrow_backward: [HULFT Scriptで転送前後処理を自動配布、自動反映してみた (1/3)](https://qiita.com/sugimon/items/946eed82770abc66f287 "1/3")
:arrow_backward: [HULFT Scriptで転送前後処理を自動配布、自動反映してみた (2/3)](https://qiita.com/sugimon/items/c8142a441037d82cd4d3 "2/3")

---