【SAP BTP】CAP Service SDK for Javaを使用してapp（UI側）を作ってみる

# はじめに
CAP Service SDK for Node.jsを使用してapp（UI側）を作成する手順については、
[Visual Studio Code を使用して Node.js で CAP ビジネス サービスを作成する](https://developers.sap.com/tutorials/cp-apm-nodejs-create-service.html)
に記載されていますが、
CAP Service SDK for Javaを使用してappを作成する手順については、
記載されているサイトが見当たらなかったため、当記事に記します。

# 準備
BTP環境のサブアカウントにSpace「dev」が作成されていることが前提です。

# 手順
## ①新しくプロジェクトを作成する
vs codeを開き、下記の画像のように、
"demo"フォルダの中に`mta.yaml`と`.gitignore`を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/9ed6cf28-d67d-4183-f9c2-e5b04df6b39e.png)

## ②CAPプロジェクトを作成する
### CDSツールを使用してJavaプロジェクトを作成する
[CAP Java Maven Archetype を実行する](https://cap.cloud.sap/docs/java/getting-started#run-the-cap-java-maven-archetype)
と
[【SAP BTP】CAP Service SDK for JavaでOData APIを作ってみる(1)](https://qiita.com/yonekura-h/items/594de263631726b8881a)
を参考に以下の手順を進めていきます。

下記のコマンドを実行し、①で作成したプロジェクトに移動し、
CAP Java Maven Archetypeを使用して、新しいCAP Javaプロジェクトを作成します。

```
$ cd demo/
$ mvn archetype:generate -DarchetypeArtifactId="cds-services-archetype" -DarchetypeGroupId="com.sap.cds" -DarchetypeVersion="RELEASE"
```

`groupId`、`artifactId`、`package`を求められるため、下記の画像のように入力します。
`groupId`：jp.co.kyoso.demo
`artifactId`：capservice
`package`：デフォルト値

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/50e3db01-b1b1-be14-b139-03583d1e388c.png)

入力し、クリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/266ab7a5-f8ad-3f04-9f25-e79e988c3778.png)


→demoの中に新しくプロジェクトが作成されていたらOKです。


※下記のコマンドを実行し、CDSツールを使用してJavaプロジェクトを作成する方法もあります。
```
cds init <PROJECT-ROOT> --add java
```

### サンプルのアプリケーションを生成する
下記のコマンドを実行し、CAPプロジェクトのディレクトリに移動して、サンプルのアプリケーションを生成します。
```
$ cd capservice/
$ mvn com.sap.cds:cds-maven-plugin:addSample
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/0e13a0a7-90b9-deeb-5108-2b6f6b550f86.png)

→上記の画像のように、サンプルが生成されていたらOKです。

## ③appを作成する
### cdsをインストール
コマンドプロンプトを開き、下記のコマンドを実行して、cdsのバージョンを確認します。
```
cds --version
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/06ca7711-298d-01d5-b603-1489f0e4a915.png)
→上記の画像のようにバージョンが記載されている場合、cdsをインストールできている状態のため、
次の手順[「SAP CDS Language Support」をインストールする](https://qiita.com/30_fujiwara/items/8a3dfde05e9b66d47715#sap-cds-language-support%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B)に移ってください。

※上記のコマンドを実行したときに、バージョンが表示されない場合はインストールがまだできていない状態なので、
下記のコマンドを実行し、cdsをインストールします。
```
npm i -g @sap/cds-dk
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/c103fd54-2acd-9863-ab3a-2a6141bc9626.png)

→上記の画像のような内容が表示されたら、インストール完了のため、
次の手順[「SAP CDS Language Support」をインストールする](https://qiita.com/30_fujiwara/items/8a3dfde05e9b66d47715#sap-cds-language-support%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B)に移ってください。

※下記の画像の内容が表示された場合は、ローカルにnpmがインストールできていない可能性が高いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/381ea14e-154f-ea42-b408-ff75149a91eb.png)

この場合は下記の点を確認してください。
1．C:\Users\ユーザ名\AppData\Roaming配下にnpmフォルダがあるか
　→ない場合、ローカルにnpmをインストールする
2．環境変数Pathにnpmフォルダは指定されているか
　→されていない場合、下記の画像のように指定する


上記の1・2のうち、当てはまるものがある場合、下記の対応を行います。
1．C:\Users\ユーザ名\AppData\Roaming配下にnpmフォルダがない場合
　対処法：npmをローカルにインストールする

2．環境変数Pathにnpmフォルダは指定されていない場合
　対処法：下記の画像のように指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/890a02e0-4adf-db89-f9b8-0c8a8ec337a1.png)

上記を対応後、再度下記のコマンドを実行すると、インストールできます。
```
npm i -g @sap/cds-dk
```

### 「SAP CDS Language Support」をインストールする
マーケットプレイスに移動し、「SAP CDS Language Support」をインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/f7bf5587-4e19-c5da-1361-948e782b4186.png)

### SAP Fioriテンプレートを使用して、app（UI側）を作成する
vs codeでコマンド パレットを開き、「Fiori: Open Application Generator」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/e41c09bb-e335-333c-9aa4-366549b8286f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/42a167b7-e7fa-244a-e86a-6450be3ce24f.png)


#### Floorplan Selection
`Application Type`には「SAPUI5 freestyle」の「SAPUI5 Application」を選択し、「Next」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/d1759f20-096c-0826-9a63-6325f80f4f9b.png)


※`Application Type`で「SAP Fiori elements」を選択の場合、Launch Padの設定が必要になります。
今回はデモ作成のため、「SAPUI5 freestyle」を選択します。

#### Data Source and Service Selection
`Data source`には「Use a Local CAP Project」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/928cdf4a-9ac0-2c80-8465-ebe4ad33ab41.png)

`CAP project folder path`にはbooksのディレクトリに移動し、「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/2a8e2d09-0867-eb93-157c-3b28193d064b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/d014975a-0103-be6b-4a0c-9f61cafa290d.png)

`OData service`にはサンプルで生成したものを選択し、「Next」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/d6262f41-fde8-3499-3f32-c282af9b7549.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/05583e25-fe94-5d22-a45c-07edb152f890.png)

#### Entity Selection
`View name`にはViewのファイル名を指定し、「Next」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/50f5beef-e588-7577-8b2d-ce8b698822cb.png)

#### Project Attributes
下記の画像のように、appのフォルダ名やタイトルなどを入力し、「Next」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/bf20d2d7-2127-158c-fb3a-2efddf2c499c.png)

#### Deployment Configuration
`Please choose the target`にはデフォルトでセットされている「Cloud Foundry」を選択したままで、
`Destination name`にはDestinationの名前を入力し、「Finish」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/1e4308ac-707e-64fa-e4c5-281b9a670fae.png)

下記の画像のように、appフォルダが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/be0a0186-4e5c-5734-fbea-77f4a97c37ab.png)

# ローカルで動作確認を行う
下記のコマンドを実行し、ローカルでプロジェクトを起動します。
```
$ cd capservice/
$ cd srv/
$ mvn spring-boot:run
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/6e8b54c0-566c-cfa0-2274-9b1f86042e01.png)

上記のようにspring bootが起動されたら、localhost:8080にアクセスします。
（赤枠で囲んでいるpasswordは後ほど使用するため、コピーします。）

上記のコマンドを実行したときに、下記のようなエラーが発生する場合は、
vs codeを閉じてbashで実行したらエラーが解消されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/ab96f98f-5743-787c-5f76-93b40d131420.png)

localhost:8080にアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/a76c1d01-8fa7-c9d4-52fe-4ee959026296.png)

アクセスできたら、localhost:8080/画面ID/webapp/index.htmlにアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/c731acb3-b758-934b-8db1-6242e5772729.png)

ログイン情報が求められるため、下記の情報を入力し、ログインします。
ユーザー名：user
パスワード：先ほどコピーしたpassword

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1855659/6a35dcd6-cd17-e146-717a-bb51eb5b0155.png)

→上記のようにUIが表示されたらOKです。


# おわりに
今回はCAPプロジェクトのローカルでの実装方法と動作確認を記事にまとめました。
CAPプロジェクトのデプロイする際の注意事項や、デプロイ後のCAPのapp（UI側）のアクセス方法については下記の記事にまとめているので、
CAPのデプロイがうまくいかない、デプロイ後のCAPプロジェクトのapp（UI側）が表示されないなどの問題点で悩まれている方がいらっしゃいましたら、
読んでいただけると幸いです。
[【SAP BTP】デプロイ後のCAP Service SDK for Javaのapp（UI側）の接続時に「Whitelabel Error Page」が発生する件](https://qiita.com/30_fujiwara/items/62833594a124e35a56cc)

# 参考資料
・[Visual Studio Code を使用して Node.js で CAP ビジネス サービスを作成する](https://developers.sap.com/tutorials/cp-apm-nodejs-create-service.html)
・[CAP Java Maven Archetype を実行する](https://cap.cloud.sap/docs/java/getting-started#run-the-cap-java-maven-archetype)
・[【SAP BTP】CAP Service SDK for JavaでOData APIを作ってみる(1)](https://qiita.com/yonekura-h/items/594de263631726b8881a)