Couchbase, Spring, SwaggerによるRESTful Webサービス構築⓪ サンプルアプリケーション紹介


##　はじめに

本稿では、[Couchbase Labs](https://github.com/couchbaselabs)により公開されているサンプルアプリケーションを紹介します。

サンプルアプリケーションの構成を下に図示します。アプリケーションを動かしてみるためには、Dockerが利用できることが必要になります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/8210dc7f-df06-9a38-9a85-27464ef28afa.png)


## クイックスタート

githubからリポジトリを取得します。ディレクトリを移動します。

```
git clone https://github.com/couchbaselabs/try-cb-java.git
cd try-cb-java
```

移動先のディレクトリで、`docker-compose`を以下のように実行します。

```
docker-compose up
```

### Couchbase Server

[http://localhost:8091/](http://localhost:8091/)にアクセスすると、以下のようなログイン画面が表示されます。以下の認証情報を使ってログインすることができます。

- アカウント名：Administrator
- パスワード：password

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/53ae14a7-7a66-87a5-dd94-71003c964a5b.png)



### アプリケーションフロントエンド

[http://localhost:8081](http://localhost:8081)にアクセスします。下の画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/c82bba59-48ca-1a9c-91cd-5d2c692b02f2.png)

二つのリンクが存在しますが、それぞれへ以下のような画面へ進みます。
URLを見るとわかりますが、`tenant_agent_00`と`tenant_agent_01`という二つのテナントを模したものになっています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/e5f3ba7b-11fc-aacf-822b-7c86eb02a47f.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/33960cc9-cb71-c2db-ebef-cbfd3f2f51b7.png)

ここでは、　CB Travelを選択して進みます。
初回利用時には、ユーザーが存在していないので、ユーザー名とパスワードを入力して、[Register]をクリックします。

以下のような画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/3de5526b-fcd6-a2d7-5d37-ec2ca2f92936.png)

## REST APIサービス

[http://localhost:8080](http://localhost:8080)にアクセスします。下の画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/3647cd8b-aed0-008f-f35e-0c3472596281.png)

「Learn the API with Swagger, interactively」リンクを押下します(または、　[http://localhost:8080/apidocs](http://localhost:8080/apidocs)にアクセスします)。下の画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/871c0b4c-0582-28d7-70dd-ac44ddd3add0.png)

## アプリケーション概要

このアプリケーションは、ユーザーが空港と日付に基づいて飛行ルートを検索して選択できるフライトプランナーです。
また、ユーザーはキーワードを使用してホテルを検索できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/b62a5a0a-f595-765c-9909-8b454818a43a.png)

### データ・モデル
サンプルデータセットの詳細については、[Travel App DataModel](https://docs.couchbase.com/java-sdk/current/ref/travel-app-data-model.html)を参照してください。

### アプリケーション終了

アプリケーションを終了するには、ターミナルでControl+Cを押し、docker-composeがコンテナーを正常に停止するのを待ちます。

## Dockerからマニュアル実行への切り替え

上では、すべてをDockerで実行していましたが、データベース、フロントエンド、WEB APIサーバーをそれぞれ、マニュアル実行に切り替えることができます。。

マニュアル起動への切り替えのために、`mix-and-match.yml`が提供されています。

### データベースのマニュアル実行

Couchbase Serverをマニュアル実行する場合は、travel-sample バケットのセットアップでバージョン7.0.0以降が必要になります。

また、「hotels-index」という名前の旅行サンプルバケットに全文検索インデックスを作成する必要があります。これは、次のコマンドで実行できます。（後述するように、自動作成を選択することもできます）

```
curl --fail -s -u <username>:<password> -X PUT \
        http://<host>:8094/api/index/hotels-index \
        -H 'cache-control: no-cache' \
        -H 'content-type: application/json' \
        -d @fts-hotels-index.json
```

マニュアル実行中のCouchbase　Serverを使用する場合、データベースに関する詳細を次のように記します。

```
CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password docker-compose -f mix-and-match.yml up backend frontend
```

Dockerイメージは通常と同じチェックを実行し、`hotels-index`が存在しない場合は作成します。

### Web APIサーバーのマニュアル実行

Dockerイメージを使わずに、Javaアプリケーションを自分で実行して、必要とあれば変更を加えるなどして、Couchbase APIの機能を試してみることもできます。

実行には、以下の要件があります。

- Java 8以降（Java 11を推奨）
- Maven3以降


依存関係をインストールします。

```
mvn clean install
```

新しいCouchbase Serverイメージに対して初めて実行するときは、提供されている `wait-for-couchbase.sh`をラッパーとして使用して、すべてのインデックスが確実に作成されるようにすることができます。


```
docker-compose -f mix-and-match.yml up db

export CB_HOST=localhost CB_USER=Administrator CB_PSWD=password
./wait-for-couchbase.sh echo "Couchbase is ready!"

mvn spring-boot:run -Dspring-boot.run.arguments="--storage.host=$CB_HOST storage.username=$CB_USER storage.password=$CB_PSWD"
```

既存のCouchbase Serverを実行して正しく構成している場合は、次のコマンドを実行できます。

```
mvn spring-boot:run -Dspring-boot.run.arguments="--storage.host=localhost storage.username=Administrator storage.password=password"
```

最後に、サンプルのフロントエンドVueアプリケーションが変更に対してどのように機能するかを確認したい場合は、次のコマンドで実行します。

```
docker-compose -f mix-and-match.yml up frontend
```

### フロントエンドのマニュアル実行

Dockerを使用せずにフロントエンドコンポーネントを手動で実行するには、こちらのガイドに従ってください

[https://github.com/couchbaselabs/try-cb-frontend-v2](https://github.com/couchbaselabs/try-cb-frontend-v2)


## 参考情報
https://docs.couchbase.com/java-sdk/current/hello-world/sample-application.html

https://github.com/couchbaselabs/try-cb-java

上記のリポジトリ中には、「Couchbase 4.0」という記述が見えますが、現在の内容は、Couchbase Server 7.0に基づいています。