日別アーカイブ: 2019年7月9日

WindowsホストからWSL2のWebアプリケーションにアクセスする

これは2019/07/29現在の情報に基づくもので、今後の機能追加・廃止に伴い記載内容との乖離が発生する可能性があります。特にWSL2は現在まだGAではないので、大いに変更の可能性があります。

Build 18945で変更があり、localhostでアクセスできるようになった。

What’s new for WSL in Insiders Preview Build 18945
https://devblogs.microsoft.com/commandline/whats-new-for-wsl-in-insiders-preview-build-18945/

実際に確認してみる。まず、簡単なアプリケーションを作成する。今回はHelidon SE (1.2) のQuickStartを使う。QuickStartアプリケーションの作成は以下を参照。

Guides — Quickstart SE
https://helidon.io/docs/latest/#/guides/02_quickstart-se

このアプリケーションはHello World的なREST APIをホストするアプリケーションで、WSL2上で http://localhost:8080/greet で待機する。

では、Windows側で動作確認。コマンドプロンプトでcurlを実行してみると…。

無事にlocalhostでアクセスできることが確認できた。以前は以下の操作が必要であったが、今後は不要ということがわかった。以下は記録目的で残しておく。


これは2019/07/09現在の情報に基づくもので、今後の機能追加・廃止に伴い記載内容との乖離が発生する可能性があります。特にWSL2は現在まだGAではないので、大いに変更の可能性があります。

IPアドレスを取得する方法は以下のドキュメントに記載がある。

Accessing Linux applications from Windows
https://docs.microsoft.com/en-us/windows/wsl/wsl2-ux-changes#accessing-linux-applications-from-windows

この中で、以下の記述がある。

– Obtain the IP address of your distro by running the command ip addr inside of your WSL distro and finding it under the inet value of the eth0 interface.You can find this more easily by filtering the output of the command using grep like so: ip addr | grep eth0.

– Connect to your Linux server using the IP you found above.

Accessing Linux applications from Windows
https://docs.microsoft.com/en-us/windows/wsl/wsl2-ux-changes#accessing-linux-applications-from-windows

実際にコマンドを打ってみると…

この例では、WSL2で動作しているubuntuの環境の外部IPアドレスは 172.17.213.35 であることがわかる。そのため、このIPアドレスを使えば、WSL2内で稼働しているWebアプリケーションにアクセスできる。以下は8080ポートで公開しているWebアプリケーションにcURLでアクセスした例。

Command line interface for MicroProfile Starter is now available

このエントリは以下のエントリをベースにしています。
This entry is based on the following one written by Michal Karm Babacek (Red Hat).
https://microprofile.io/2019/07/08/command-line-interface-for-microprofile-starter-is-available-now/

2019年2月から利用可能のMicroProfile Starterサービスですが、REST APIとCLIからも利用できるようになりました。

Eclipse MicroProfile Starter (Beta) Available
https://microprofile.io/2019/02/06/eclipse-microprofile-starter-beta-available/
https://logico-jp.io/2019/02/10/eclipse-microprofile-starter-beta-available/

これはMicroProfile Starterの開始以来、Starterにコマンドラインでアクセスできるように、MicroProfile開発者から要求されてきた機能です。このAPIは、今後予定されているVisual Studio Codeの拡張や、Eclipse Che、IntelliJ IDEA、Netbeansの拡張でも使用される予定です。

Why do you need this API?

  • CLI : 開発者がcURLやPowerShellを使ってアプリケーションを生成できます。Webブラウザを開く必要はありません。
  • Tools integration : MicroProfileアプリケーション生成機能を統合開発環境やツールに統合するためのサービスを他社に提供します。

How to use the MicroProfile Starter CLI

一番簡単なプロジェクト生成方法は、サーバを選択し、すべての仕様がデフォルトで有効になっている最新のMicroProfileバージョンをサービスに選択することです。

$ curl -O -J 'https://start.microprofile.io/api/project?supportedServer=THORNTAIL_V2'
curl: Saved to filename 'demo.zip'

Shell session recording

cURLの例をテキストとして記録しました。動画から直接コピー&ペーストできます。利用可能な選択肢の並び方やサーバや仕様の選択方法がわかる動画になっています。

$ curl -O -J 'https://start.microprofile.io/api/project?supportedServer=PAYARA_MICRO&selectedSpecs=JWT_AUTH&selectedSpecs=METRICS'

asciicast

Windows PowerShell session

以下の動画では、PowerShellを使ってMicroProfileプロジェクトを生成する方法を紹介しています。

Invoke-WebRequest -OutFile project.zip -Uri https://start.microprofile.io/api/project?supportedServer=TOMEE
Expand-Archive ./project.zip

Noteworthy resources for selecting other servers and specifications are:

$ curl https://start.microprofile.io/api/mpVersion

$ curl https://start.microprofile.io/api/mpVersion/MP22

Documentation

最新のドキュメントやサンプルはプロジェクトリポジトリのREST-README.mdにあります。以下のように、コマンドラインからアクセスすることもできます。

$ curl https://start.microprofile.io/api/

Project generator REST API
https://github.com/eclipse/microprofile-starter/blob/master/src/main/resources/REST-README.md

さらに、正式な仕様がSwaggerHubでご覧頂けます。APIバージョンが指定されていない場合、最新のバージョンをデフォルトで選択します。例えば、start.microprofile.io/api/ は start.microprofile.io/api/1/ に相当します。WindowsユーザーにはcURL for WindowsやPowerShellを含め、多数の選択肢があります。

MicroProfile Starter – Project generator API
https://app.swaggerhub.com/apis-docs/microprofile/starter/1

Advanced usage

このAPIを使うと、JSONファイルをPOSTできます。cURLコマンドにクエリパラメータを渡す必要はありません。また、コード内でEtagレスポンスヘッダとIf-Node-Matchリクエストヘッダを使うことができます。これにより、同じZipファイルや同じJSONレスポンスの解析を何度も実行することがなくなります。

RFC7232 Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests
Etag
https://tools.ietf.org/html/rfc7232#section-2.3
If-None-Match
https://tools.ietf.org/html/rfc7232#section-3.2

EtagとIf-Node-Matchの利用方法ならびにJSONのPOSTの例はドキュメントに記載があります。

EtagとIf-Node-Matchの例
https://github.com/eclipse/microprofile-starter/blob/master/src/main/resources/REST-README.md#examples
Use JSON for get the project
https://github.com/eclipse/microprofile-starter/blob/master/src/main/resources/REST-README.md#use-json-for-get-the-project

大事なことを言い忘れていましたが、このAPIはツールやIDEと統合しやすいリソースを提供します。これらのリソースは、大きなJSONとして1つのHTTPレスポンスとして、有効なオプションのマトリックス全体を返します。

Integration with IDEs
https://github.com/eclipse/microprofile-starter/blob/master/src/main/resources/REST-README.md#integration-with-ides

Call to action

まもなく登場するMicroProfile Starter用VSCode extensionにご注目ください。さらに、MicroProfileコミュニティーでは、Eclipse Che、IntelliJ IDEA、Netbeansなど、他のIDE用のextensionの設計と実装のためのボランティアも募集しています。IntelliJのextensionをやってみたいという方はissue #170、Eclipse Cheのextensionをやってみたいという方はissue #171、Netbeansのextensionをやってみたいという方はissue #174にそれぞれコメントしてください。

Create Intellij extension for MP Starter #170
https://github.com/eclipse/microprofile-starter/issues/170
Create MP extension for Eclipse Che #171
https://github.com/eclipse/microprofile-starter/issues/171
Create MP extension for NetBean IDE #174
https://github.com/eclipse/microprofile-starter/issues/174