【超初心者向け】VSCodeでJAX-RS(Grizzly&Jersey)の開発を超速ではじめる(Windows10版)

最速の手順を追い求めてみました。

想定する対象読者は、【超初心者向け】とある通り、
「プログラムをこれから学ぶひと」や「JAX-RSは初めのひと」です。
画像多めです。

# はじめに

Java言語でも、サクっとWebサービスの開発を始められるんだよというのを伝えたくて、やり方をまとめました。
「超速ではじめる」と題しましたが、テストの実行までをカバーした実用的な内容を心掛けたつもりです。


なお、以下の手順は`Windows 10 Enterprise LTSC (Build 19041.vb_release.191206-1406)` の 標準ユーザー で確認しました。

# 本編

## 1. VSCodeのインストール

これがなきゃ始まりません。ということで以下からダウンロードしてインストールします。

ここからダウンロード。
※特にこだわりなければ、`User 64bit` で良いと思います。
[Download Visual Studio Code](https://code.visualstudio.com/download)

この記事の時点では、 `VSCodeUserSetup-x64-1.6.2.exe` がダウンロードされました。

続けてこれを起動し、VSCodeをインストールしましょう。
インストールはすべてデフォルトの設定で構いませんが、私は以下を追加でチェックしました（あとで便利なので）。

* ✅ エクスプローラーのファイル コンテキスト メニューに [Codeで開く] アクションを追加する
* ✅ エクスプローラーのディレクトリ コンテキスト メニューに [Codeで開く] アクションを追加する

インストール後、起動するとこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/4c88ce98-e7c6-4040-04fc-51bae34660cd.png)

画面右下に視点を。
「表示言語を日本語に変更するには・・・」と親切に教えてくれていますね！
「インストールして再起動」ボタンを押しちゃいましょう。

するとこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/59d9fa51-d262-7d7e-a847-aa8d0626aa8f.png)

これでとりあえず VSCodeのインストールができました。

## 2. VSCodeに Extension Pack for Java 拡張を追加

画面右端のメニューから、 拡張機能 を表示しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/f1c16182-6c69-b004-2bb9-061f789756d6.png)

検索欄に、`Extension Pack for Java`を入力します。
検索結果から、同名で、かつ `Microsoft` 提供のものを選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/bdc6142a-dd3e-b2ef-f792-a8fcccd3fe3e.png)

「インストール」ボタンを押してインストールします。

インストールが終わると、こんな画面が出ますので、ここからJDKをインストールしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/5acb4dc1-32ef-443c-c3b8-87634422664d.png)

「Install a New JDK」ボタンをクリック。
すると選択肢が表示されるので、`17 (LTS)` `hotspot` が選択されていることを確認し、「Download」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/e5f01688-7c23-1f82-9712-96a93fd228bb.png)

するとインストーラがダウンロードされます。
私の場合、`OpenJDK17U-jdk_x64_windows_hotspot_17.0.1_12.msi` がダウンロードされました。
ではこれを起動してインストールしましょう。
※標準ユーザーの場合、ここで管理者ユーザーのパスワードが必要です！
※管理者ユーザーのパスワードを得られない場合、他のやり方があります。が、この記事では触れません。超速なので。

インストール時、次の１点だけ、設定を変更してください。

* `Set JAVA_HOME variable` を `ローカル ハード ドライブにインストール` に変更する

※これを忘れると、次の「JAX-RS(Grizzly&Jersey) のプロジェクトを作成する」でエラーが起きます。

インストールが終わったら、VSCodeを再起動しましょう。

これで Extension Pack for Java拡張 の追加は完了です。
では早速、JAX-RS(Grizzly&Jersey)の開発を始めましょう！

## 3. JAX-RS(Grizzly&Jersey) のプロジェクトを作成する

VSCodeの「表示」メニューから「コマンドパレット (Ctrl+Shift+P)」を選択します。
入力欄が表示されるので、`Maven`と入力。
するとコマンド候補が一覧表示されるので、 `Maven: Create Maven Project` を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/eaea00e4-3c95-abab-8344-055e3bff88f7.png)

続けて、`More`を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/af7467bf-7513-af9f-1837-0f5e1bca035c.png)

続けて、`jersey-quickstart-grizzly2 org.glassfish.jersey.arcetypes`を選択。
※似たのがあるので、気を付けて！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/d694bea9-f199-55ab-0437-240d1d16cb99.png)

続けて、3.0.1 を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/c644ba6f-ef9e-4214-7579-925c39ece23e.png)

次はこれから作るプロジェクトの「製作者グループのID」を入力。
とりあえずお試しなら、 `com.example.あなたのニックネーム的なID` でいいと思います。
私は `com.example.kami_teru` を入力しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/799f221a-d37d-21de-4927-2164a86aa41c.png)

次はこれから作るプロジェクトの「製品のID」を入力。
私は `hello_slack_bot_service_20211217` を入力しました。 ※slack_botってのは別件でちょうどやっていたので。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/f43f8cb7-95b7-cdf9-24c8-1f2033552148.png)

すると次に、フォルダ選択ダイアログが表示されます。
特にこだわりなければ、私は次のパスにしました。　※`source\repos\`はVisualStudioが自動的に作るフォルダパス。※`master\`はあとでGitを導入することを想定。
`C:\Users\{あなたのユーザー}\source\repos\hello_slack_bot_service_20211217\master`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/44e010fb-216f-5839-66d3-937fabbff41e.png)

フォルダを選ぶと、「ターミナル」が表示されてなにやら始まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/01c35450-5989-0478-0131-394651343982.png)

たくさんのダウンロードが走りますが、これは JAX-RS(Grizzly&Jersey) の開発に必要なライブラリ(jar)をまとめて集めてくれているのです。便利ですね。

しばらくすると、次のような入力待ち状態になります。
これは「製品のバージョン」の入力待ちです。
とりあえずお試しなら、(ターミナルをクリックしてから) Enter を入力します。　※`1.0-SNAPSHOT`っていう、ベータ版的なバージョンになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/870a499d-690e-2397-0516-625b3a3321d7.png)

次に、最終確認が表示されるので、`Y`を入力してから Enter を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/9a722f26-b4e6-37b0-20b5-d0133aca6b67.png)

これで、処理が終了します。
視点を画面右下に移すと、「ここにできたよ！」的なダイアログが。親切ですね。「Open」をクリックしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/11d50dde-5e6b-de6e-0468-27aaa4836046.png)

すると、作成されたプロジェクトのフォルダが開くのですが、こんなダイアログが出ます。
作成者はこれからの自分なので、信頼してあげましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/6bc50979-edf1-af61-131f-e9010d729d44.png)

これで、JAX-RS(Grizzly&Jersey) のプロジェクトを作成できました。
エクスプローラーパネルでツリーを展開すると、おぉ、いろいろできていますね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/ce86b7f3-0233-7bab-6283-ed610996378e.png)


次は実際に動かしてみましょう。

## 4. JAX-RS(Grizzly&Jersey) のプロジェクトを実行する

エクスプローラーパネルのJAVA PROJECTS欄から、プロジェクトを実行(Run)できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/f2a2f3a2-b306-5a1d-9b80-b2fe4038932b.png)

※このようなセキュリティの警告が出ます。ファイアウォールの設定に関するものなので、今は無視（キャンセル）で構いません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/1416a98e-1b9e-fd28-2131-9de1a7d7a561.png)

するとターミナルに、`Jersey app started`とでましたね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/61e9cbd6-d4d9-1039-1db0-48157c0d4890.png)

ではブラウザを立ち上げて、つぎのURLにアクセスしてみてください。
http://localhost:8080/myapp/myresource
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/39026b4e-9b82-3410-7b81-47cf2cade332.png)

何か表示されましたね！
これは、作成したプロジェクトがテンプレートとして用意している次のソースコードが実行された結果です。

簡単に解説すると...

* Main.java ・・・ Webサービス(Grizzly HTTP server)を起動。基本URL `http://localhost:8080/myapp/`を設定。
* MyResource.java ・・・ URL `myresource` に対して応答。このクラスのようにして、いろんな処理を実装できる。

です。

実行されたプロジェクトは、ターミナルで Enterキーを打てば停止するように作られています(Main.javaにて)。
停止しておきましょう。

では最後に、テスト機能を紹介しましょう。

## 5. JAX-RS(Grizzly&Jersey) のプロジェクトをテストする

テスト中パネルを表示すると、既に何かありますね。さっそく実行してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/46e76e90-1e6e-adf9-a068-b4298133bf0f.png)

おぉ、成功したようです！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/49feec83-fb6f-c233-ee57-66d2d9b7da77.png)

では何をテストしたのか？ですが、これは次のソースコードに書かれたテストコードが実行されたものです。

* MyResourceTest.java ・・・ MyResourceソースコードをテストするためのテストコード。

簡単に説明すると、以下のステップをテストコードで実行しています。

1. Webサービス(Grizzly HTTP server)の起動
1. URL`http://localhost:8080/myapp/myresource`にアクセス
1. アクセス結果を確認
1. Webサービス(Grizzly HTTP server)の停止

便利ですね！

# おわりに

以上で、VSCodeでJAX-RS(Grizzly&Jersey)の開発を超速ではじめる環境が整いました。

Java言語でWebサービスを作るのも、結構簡単だなって思っていただければ幸いです。
色々調べながら、開発を楽しんでください！

2021.12.27 追記

よろしければ以下の続編もご利用ください。

* [【超初心者向け】VSCodeで作ったJAX-RS(Grizzly&Jersey)のプロジェクトをHerokuで一般公開する最短の方法(Windows10版)](https://qiita.com/kami_teru/items/2e2d23616a096165c976)


# おまけ

## Mavenコマンドを使う

学習が進むと Mavenコマンドを実行することもあると思います。
ひとつ設定が必要なので書いておきます。

まずは エクスプローラーパネル のMAVEN欄を開き、 `Lifecycle clean` を実行してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/60f7356e-f34e-61e0-e7a9-498b120ed8a6.png)

視点を画面右下に移すと、`Maven executable not found in PATH`との情報が。
これが、ひとつ必要な設定です。「Open Settings」をクリックしましょう。
すると`Maven executable PATH`の入力欄が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/8f80dc25-cb50-6653-9370-f04e31bc3805.png)

ところで実はその `Maven executable`、既に入っているんですよね。
次のフォルダを開いてください。
`C:\Users\{あなたのユーザー}\.m2\wrapper\dists`
そこで、`mvn`を検索してください。次のように、見つかるはずです。
見つかったら、`mvn`を Shiftキーを押しながら右クリックし、「パスのコピー」を実行しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/b4e81dc5-191f-db43-0e4b-59a812260ee9.png)

これをさっきの入力欄に貼り付ける・・・のですが、先頭と末尾の `"`は取り除いてください。
そして再度  `Lifecycle clean` を実行すると・・・成功しましたね！（ターミナル欄）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/1b56916e-2135-13d7-b889-00593bbfe563.png)

`clean`の他にも `compile`、`test`なども成功するはずです。
ぜひいろいろ試してみてください。

## ところで Maven とか JAX-RS、Grizzly、Jersey、とか ってなにもの？

超ざっくり説明します。
※間違ってはいないと思いますが、誤解を招く表現があればコメントください。。。

### Maven(メイブン)

Java開発の便利屋さん。複数のJavaソースやライブラリが絡んだコンパイルをサクっとこなしてくれるだけでなく、皆が開発したライブラリをインターネット上で一元管理してしてもくれてるすごいやつ。

### JAX-RS(ジャックス・アールエス)

Java API for RESTful Web Services。 JavaでWebサービスを作るときは、HTTPのメソッド(GET,POST,PUT,DELETE等)をうまく使ってこう作ろうね、を決めた仕様書。実装はない。

### Grizzly(グリズリー)

URLからのアクセスを受け付けて処理を行う常駐アプリケーション「サーブレットコンテナ」の実装。つまりWebサーバーアプリケーションたる部分。

### Jersey(ジャージー)

JAX-RSに定義された仕様を実装するもののひとつ。つまり RESTful たる部分の実体。

以上。