【SAPUI5】UI5 Tooling：ABAPサーバへデプロイ

##はじめに
本記事は、UI5 Toolingを使ってみるシリーズの3回目です。（1回目は[こちら](https://qiita.com/tami/items/9f6b573aefce12dfc626)）
今回は、UI5のプロジェクトをバックエンド（オンプレミス）のABAPサーバにデプロイします。ローカルIDEを使うにあたって、デプロイはどうやるんだろうというのが一番の疑問でした。

＜参考にした記事＞

- [End-To-End setup of local development environment with UI5 Tooling – Part 5 Deployment](https://blogs.sap.com/2019/11/06/end-to-end-setup-of-local-development-environment-with-ui5-tooling-part-5-deployment/)
- [UI5 Tooling Custom Task to deploy UI5 sources to an ABAP server](https://blogs.sap.com/2019/11/24/ui5-tooling-custom-task-to-deploy-ui5-sources-to-an-abap-server/)

※2020/7/22追記
ui5-deployerというツールが以下のブログで紹介されています。
[ui5-deployer sends your Fiori/UI5 app from your local computer to the remote server](https://blogs.sap.com/2020/07/22/ui5-deployer-sends-your-fiori-ui5-app-from-your-local-computer-to-the-remote-server/)

ABAPサーバーにデプロイするために、2つの方法があります。両方とも以下のGitにあります。
https://github.com/pfefferf/ui5-nwabap-deployer

1. nwabap-ui5uploaderを使う
2. ui5-nwabap-deployerを使う

1.は最初にui5 buildでビルドしてから、作成されたdistフォルダをABAPサーバーにアップロードするという、2ステップでのデプロイになります。
2.はUI5 Toolingのカスタムタスク（プラグインのようなもの）で、ui5 buildを実行すると自動的にデプロイまでされます。

せっかくなので、両方試してみたいと思います。

##1. nwabap-ui5uploaderを使う
ドキュメント：[nwabap-ui5uploader](https://www.npmjs.com/package/nwabap-ui5uploader)

###1.1. 準備
nwabap-ui5uploaderをインストールします。

```
npm install nwabap-ui5uploader --save-dev
```
`.nwabaprc`というファイルを作成して、プロジェクト直下に置きます。ここにサーバーやログイン情報などの設定を書きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/0aeab0e0-66fa-b27d-a527-134824e9733e.png)

```:.nwabaprc
{
    "base": "./dist", //ABAPサーバーに持っていくフォルダを指定
    "conn_server": "http://myserver:8000", //サーバ
    "conn_user": "upload",                 //ログインユーザ
    "conn_password": "upl04d",             //パスワード
    "abap_package": "$TMP",                //パッケージ
    "abap_bsp": "ZZ_UI5_LOCAL",            //BSPアプリのID
    "abap_bsp_text": "UI5 upload local objects" //BSPアプリのテキスト
    "abap_transport": "PRDNK1230120032"         //移送依頼
}
```

デプロイするときは`npx nwabap upload`というコマンドに続けて、上記の設定項目を直接指定することができます。この場合、コマンドラインで指定した項目が設定ファイルより優先されます。

```
npx nwabap upload --base ./dist --conn_server http://myserver:8000 --conn_user upload --conn_password upl04d --abap_package ZFRONTENDS_TEST --abap_bsp ZABSHR --abap_bsp_text "Absence HR" --abap_transport PRDNK1230120032
```

###1.2. デプロイ
まず最初にビルドする必要があります。ビルドすると、必要なファイルが圧縮などされた後distフォルダに格納されます。このdistフォルダがデプロイの対象になります。

**※ビルドの前に！**
[【SAPUI5】UI5 Tooling：ODataへの接続](https://qiita.com/tami/items/78ae7e4233df9fad9a47)の手順でODataの宛先を指定している場合、uriの先頭に`ES5/sap/opu/odata/iwbep/GWSAMPLE_BASIC/`の`ES5`のような識別子がついていると思います。ビルドする前にこれを取っておかないと、デプロイ後にバックエンドでODataに接続できません。

以下のコマンドを実行します。buildはUI5 Toolingの機能です。

```
ui5 build
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/60a7c3ef-3580-2601-de67-52e3b405da94.png)

distフォルダが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/dd11ab1f-8c41-396e-c381-fe498cd98c55.png)

続いて、以下のコマンドを実行してdistフォルダの中身をABAPサーバにデプロイします。

```
npx nwabap upload
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/d557f0c9-bcd7-d7dc-1c56-1161213e9263.png)

BSPアプリケーションが登録されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/a3d53cd3-ece0-c682-7d6c-6ecb7e5bbc9d.png)

###1.3. 実行してみる
ABAPサーバ上でもきちんと機能しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/d8159dbb-b6e6-e9f7-7234-7f1b1f1e0e0f.png)

##2. ui5-nwabap-deployerを使う
ドキュメント:[ui5-nwabap-deployer](https://www.npmjs.com/package/ui5-task-nwabap-deployer)

###2.1. 準備
ui5-nwabap-deployerをローカルにインストールします。

```
npm install ui5-task-nwabap-deployer --save-dev
```

package.jsonに以下を追加します。

```json
"ui5": {
    "dependencies": [
        // ...
        "ui5-task-nwabap-deployer",
        // ...
    ]
}
```

ui5.yamlに以下を追加します。

```yaml
builder:
  customTasks:
  - name: ui5-task-nwabap-deployer
    afterTask: generateVersionInfo
    configuration: 
      resources:
        pattern: "**/*.*"
      connection:
        server: http://myserver:8000  //デプロイ先のサーバ
      authentication:
        user: myUser                  //ログインユーザ
        password: myPassword          //パスワード
      ui5:
        language: EN
        package: ZZ_UI5_REPO          //パッケージ
        bspContainer: ZZ_UI5_TRACKED  //BSPアプリのID
        bspContainerText: UI5 Upload  //BSPアプリのテキスト
        transportNo: DEVK900000       //移送依頼
        calculateApplicationIndex: true  //デプロイ後にインデックスの計算を行うか
```
デプロイ後にインデックスの計算をしてくれるので、ラウンチパッドから常に最新の状態で実行することができるのがうれしいですね。

###2.2. デプロイ
今回はシンプルに、ビルドを実行するだけです。

```
ui5 build
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/cc6de5ca-bb35-1464-a2cc-2693938200ab.png)

BSPアプリケーションが登録されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/83a4018c-3d37-2673-a713-e117904a10a4.png)

##感想
どちらのツールも、WebIDEに比べてデプロイにかかる時間が短かったです。WebIDEでちょっといじっては何度もデプロイするのはかなり面倒なのですが、ローカルIDEからなら気軽にできそうです。