IBM Cloud ShellでQuarkusを試してみよう

この記事は、これからQuarkusを始める方を対象に、IBM Cloudで提供しているIBM Cloud Shellを使って[Quarkus.io](https://quarkus.io/get-started/)のFirstStartの手順を実行するためのガイドです。
###Cloud Shellとは
IBM Cloud Shell はクラウドのメニュー(アイコン)からコンソールに即時アクセスが可能です。
2020年10月現在、主に以下の機能をリリースしています。
・50時間利用/週
・ストレージ500 MB/User
・ファイルのアップロード、ダウンロード処理
・アプリのプレビュー
詳細、最新情報は[IBM Cloud Docs](https://cloud.ibm.com/docs/cloud-shell?topic=cloud-shell-shell-ui)をご確認ください
<img width="1424" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/e95c5d68-5d10-f77e-0693-7d547171b3e9.png">

###QUARKUS GET STARTED
オリジナルの記事はこちらのQUARKUS - CREATING YOUR FIRST APPLICATIONです。
https://quarkus.io/get-started/
こちらのガイドに習い、IBM Cloud Shellの実行手順に編集しています。
今回、紹介する範囲はQuarkusアプリケーションの起動、修正、実行結果の確認の手順になります。
<img width="562" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/edaa6c5c-94b3-2655-f287-aedf7aeddf9b.png">

###IBM Cloud からCloudShellを起動
・IBM Cloudに[Login](https://ibm.biz/Bdqfyd)します。
　アカウントをお持ちでない方は、[こちら](https://ibm.biz/Bdqfyd)からご登録ください。登録にはe-Mailアドレスが必要です。
　この手順はライトアカウントで実施可能です。（2020年6月時点）
・Cloud Shellを起動します。
<img width="599" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/b8761032-baba-15d9-a2f6-77d4ad3735d9.png">
・今回、Cloud Shellで3つのSessionを使用します。Sessionは＋ボタンで追加できます。Cloud Shellでは最大5つのSessionまで使用できます。
<img width="347" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/20201341-dfa6-35c9-04fe-1d21db5862df.png">
**-Session1:Quarkus環境構築**
**-Session2:curlコマンド実行**
**-Session3:File編集**

###Step1: サンプルコードの実行
行または$ごとにクリップボードにコピー、Cloud Shellにペーストして進めてください。

####1. Gitクローン<br>
```
git clone https://github.com/quarkusio/quarkus-quickstarts.git
```
####2. ディスクの使用量を確認<br>
```
df
```
<img width="413" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/506a32a0-8595-1df5-e547-d443f3ea373b.png">
#### 3.Maven Projectを作成
```
mvn io.quarkus:quarkus-maven-plugin:1.13.4.Final:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.getting.started.GreetingResource" \
    -Dpath="/hello"
```
<img width="551" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/2aa52ec6-5c89-9673-04d6-8a055425ab9d.png">
#### 4.ディレクトリを移動し、内容を確認
```
cd quarkus-quickstarts
```
```
cd getting-started
```
```
ls
```

<img width="292" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/45a92a6b-f1af-9517-a038-24906254d409.png">
####5.ファイルの内容を確認
```
cat pom.xml
```
```
cat src/main/java/org/acme/getting/started/GreetingResource.java
```
<img width="787" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/52276bef-6783-8705-387f-40868afc9a3a.png">
*pomファイルにはquarkus-maven-plaginなどが設定されています。
<img width="701" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/3ea89664-8570-8a5b-d6dc-86c34ac94950.png">
*GreetingResource.javaにはこのようなコードが生成されます。
####6.Quarkusを起動
```
./mvnw compile quarkus:dev:
```
<img width="672" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/190cde76-d6ea-196b-8fb3-1e8d115d752d.png">
起動できました！　続いて、Session2を追加します。

####7.cUrlでコードを実行(Session2)
```Session2
curl -w "\n" http://localhost:8080/hello
```
*Sessionが切れてしまった場合は、Quarkusを再度起動します。

<img width="486" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/dbff1a06-a725-b77f-2fb0-79e7ad66d576.png">
戻り値として”Hello”が表示されました！　

ブラウザでも確認してみましょう。
右上の目のアイコンから8080ポートを選択してみましょう。

続いて、Session3を追加します。

###Step2: コードの修正
####1.ディレクトリの確認と移動（Session3）
```
cd quarkus-quickstarts
```
```Session3
cd getting-started
```
####2.ディレクトリーの移動とファイルのコピー、確認
```
cd src/main/java/org/acme/getting/started
```
```
cp GreetingResource.java GreetingService.java
```
<img width="399" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/cbab70a9-d84b-61f5-63e8-fce30ce6a51d.png">
####3.編集ファイルの確認（表示）
```
cat GreetingService.java
```
<img width="698" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/0b24740c-267d-6957-4de4-56e106f5cdac.png">
↓次で内容を編集します。↓

####4.GreetingServiceファイルの編集
エディタをお持ちの方は、IBM Cloud Shell右上の矢印ボタンでファイルのダウンロード/アップロードも可能です。
お手元のエディタで編集して、ファイルを更新していただくこともできます。アップロードファイルはログインアカウント直下のディレクトリに配置されますので、適宜移動してください。
```
nano GreetingService.java
```
(編集用ウィンドウが開く)以下の内容に編集（または置換）

```
package org.acme.getting.started;

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class GreetingService {

    public String greeting(String name) {
        return "hello " + name;
    }

}
```
ファイル編集後、Exit → Y → To Files → GreetingService.java → Ent で閉じる
<img width="590" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/9a3ad948-1173-3853-0eb5-9e64b250180b.png">
編集後のファイルを表示して確認

```
cat GreetingService.java

```
####5.GreetingResourceファイルの編集
同様の手順でGreetingResourceファイルを以下の内容に編集

```
cat GreetingResource.java
nano GreetingResource.java
```
(編集用ウィンドウが開く)以下の内容に編集（または置換）

```
package org.acme.getting.started;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.jboss.resteasy.annotations.jaxrs.PathParam;

@Path("/hello")
public class GreetingResource {

    @Inject
    GreetingService service;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    @Path("/greeting/{name}")
    public String greeting(@PathParam String name) {
        return service.greeting(name);
    }

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "hello";
    }
}
```
ファイル編集後、Exit → Y → To Files → GreetingResource.java → Ent で閉じる
編集後のファイルを表示して確認

```
cat GreetingResource.java 
```
#### 6.cUrlでコードを実行(Session2)
```
curl -w "\n" http://localhost:8080/hello
```
```
curl -w "\n" http://localhost:8080/hello/greeting/quarkus
```
```
curl -w "\n" http://localhost:8080/hello/greeting/'半角英数任意の文字列（’は不要）'
```
<img width="613" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/7cd0218c-23f1-dc52-5c39-9dbaf6f5370a.png">

それぞれ、ブラウザでも確認してみましょう。
![スクリーンショット 2020-10-28 12.21.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245231/2092003b-be16-5c34-cdf9-fb0cbf6b0e31.png)

IBM Cloud ShellでQuarkusのお試しは以上になります。
最後まで読んでいただきありがとうございました。
おつかれさまでした！