Libertyで 1 minuteデプロイ (1 minute deploy with Liberty)

# はじめに
Java EE アプリケーションサーバー WebSphereの新しいランタイムのインストールからアプリ稼働までを行う。Eclipseを使用することも可能だが，そちらは[本家](http://www.ibm.com/developerworks/jp/websphere/library/was/liberty_intro/1.html)を参考にしてもらい，本稿ではzip展開による導入を行う。
きっと従来のWAS(WebSphere Application Server)を知っている人は驚くに違いない。それはこの後の手順を試せば一目瞭然なのでお楽しみに。

# WebSphere Liberty
従来からIBMが提供していたWAS(フルプロファイル)は，WebSphere traditionalと呼ばれ，新しいランタイムはWebSphere Libertyと呼ばれている。

今回は，誰でもWebサイトから取得でき，簡単に，すぐに使えるWebSphere Libertyを使ってみる。というか紹介する。

※便利な使い方しってる人は是非教えてください！

しかも，開発用途であれば無償で使えるという・・・従来のWASを本番で使うケースでも，開発時に重宝する。

### WebSphere Libertyの主な特長は8つ
1. Java EE 7 完全対応 & 継続的デリバリー対応(四半期ごとに新機能追加)
2. 軽量・高速起動
3. Unzipで簡単導入
4. シンプルなサーバー構成ファイル
5. 無償で使える開発ツール (Eclipseプラグイン)
6. Jenkinsなどの自動化ツールと簡単連携
7. オンプレからIaaS/PaaS，Dockerどこでも動く
8. JAX-RSコードからAPI公開で必要になるSwagger自動生成


# 環境
- Mac : OS X El Capitan 10.11.6
- Java : 1.8.0_65
- Liberty : 16.0.0.3 (このあと導入)


# 本題: Libertyの導入からアプリ稼働まで
## Libertyのダウンロード
- WASdev.net からLibertyを取得しよう
 - 次のURLにアクセス。https://developer.ibm.com/wasdev/
 - "Download Latest Stable Release" をクリック
 <img width="930" alt="スクリーンショット 2016-09-30 20.48.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/69447/14baaba4-cfe8-95c7-85c2-8c56a85c9756.png">
 - "Download Liberty (16.0.0.3) with Java EE 7 Web Profile" をクリック
 <img width="928" alt="スクリーンショット 2016-09-30 20.49.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/69447/63d79d58-fe64-8e09-21ff-6751efb3005e.png">

 - License Agreementを確認し，"Accept and download"をクリック
 - これで "wlp-webProfile7-16.0.0.3.zip" のダウンロードが開始される

[WASdev](https://developer.ibm.com/wasdev/)は，WebSphere Libertyのナレッジが詰め込まれたWebサイトで，最新情報が逐一公開されている。Libertyのインストールイメージだけでなく，サンプルコードや，マニュアル，最新情報が得られるサイトだ。

## Libertyのインストール
- ダウンロードした "wlp-webProfile7-16.0.0.3.zip" を任意のディレクトリで展開


```bash
$ unzip wlp-webProfile7-16.0.0.3.zip
```
- すると以下のように， "wlp" というディレクトリが生成される
<img width="396" alt="スクリーンショット 2016-09-30 21.30.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/69447/98b22406-919b-09f3-37a9-2394d5077108.png">

- wlp以下に，Libertyを操作するコマンド群(bin)や，LibertyやJava EEのクラスなど(lib)が入っている
<img width="737" alt="スクリーンショット 2016-09-30 21.32.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/69447/6a505338-77ac-9353-68a4-3efaacea9886.png">

**この後作成するサーバーや，アプリなど，ユーザーがコマンドなどで用意するものは "usr" 以下のディレクトリに配置したり，生成される (重要)**


## 新規サーバーの作成
- 以下のコマンドでサーバーを作成する

```bash
$ bin/server create server1
```
すると，シンプルに1行出力される。
<img width="391" alt="スクリーンショット 2016-09-30 21.35.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/69447/898d02c9-8b6e-6a1b-3ea1-85c6bfa45647.png">

どこに生成されたかなーと，usrディレクトリを見てみよう
<img width="363" alt="スクリーンショット 2016-09-30 21.37.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/69447/d067fa20-fe0d-97d4-1183-b1ab36d30948.png">
usr/serversの下に， "server1" というのが出来た模様

## サーバーの起動
- 以下のコマンドでサーバーを起動する

```bash
$ bin/server run server1
```
以下のような出力が確認できる
<img width="1680" alt="スクリーンショット 2016-09-30 21.39.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/69447/f3ea5d28-8139-7fa2-c2ea-f7604984b64e.png">
末尾の **"server1 は、Smarter Planet に対する準備ができました。"** 
これを発見できれば，あなたのLibertyは起動している 

Smarter Planet・・・ふむ。まぁ良しとしよう

- http://localhost:9080/ にアクセスしてみよう
<img width="816" alt="スクリーンショット 2016-09-30 21.45.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/69447/0da379a8-3c77-8c08-f86e-cfab9616ae9c.png">
"Welcome to Liberty !!" ちゃんとLibertyが稼働している!

## アプリの作成
- 超シンプルなアプリケーションを作成する
 - "Hello World!!" と出力するjspの入った.warをつくるだけ  
- Libertyは起動したまま作業してみることにして，ターミナルで新規タブを開く  (Macなら⌘+Tとかで)
- 以下を素直にタイピング

```bash
$ cd usr/servers/server1/dropins　　　　　// wlp以下にusrがある
$ mkdir myApp.war
$ cd myApp.war
$ vi index.jsp
```

```index.jsp
<html><body>Hello World!!</body></html>
```
これでアプリは完成！！

## アプリのデプロイ
- 作成したアプリケーションをLibertyサーバーにデプロイする
 - というか・・・実はすでにデプロイは終わっている
 - ん？どういうこと？

Libertyには，**dropinsというディレクトリがあり，その中に.warや.earなどアプリケーションを配置するだけで良い**のだ

(今回は，アプリを作成した手順でdropinsにmyApp.warを作ったから配置済)

もし手元に何らかのアプリがあるなら，以下のようにdropinsにコピーしてみるといい

```bash
$ cp あなたのアプリ.war wlp/usr/servers/server1/dropins/
```


## アプリの稼働確認 (ブラウザ上)
- 手順の中でつくったmyApp.warの場合は，以下のようにアクセスする
 - http://localhost:9080/myApp 
 - デフォルトでは，アプリ名がコンテキストルートになる 
<img width="305" alt="スクリーンショット 2016-09-30 21.51.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/69447/483e8a45-ad65-86aa-f242-d6495ce20367.png">

# まとめ
早い。とにかく早い。
インストール用のzipさえダウンロードしておけば，1分でサーバーのインストール，構成，アプリのデプロイ，稼働確認までできてしまう。
しかも，アプリサーバーの起動も早い。1秒ほどで起動してくる。
さらに，使用しているディスクサイズやメモリを見ても驚き。

正直言って，Java EE アプリケーションサーバーってこんなに早いの？こんなに簡単だったっけ？ベンダー製品だよね？
これが私の最初の感想でした。同感の人もきっといるでしょう。

Dockerでも使えるし，CIで流行りのJenkinsとか自動化ツールとも相性が良い。

**なるほど，クラウドに適しているわけだ。**

ちなみに，今回[WASdev](https://developer.ibm.com/wasdev/)からダウンロードしたのは，Java EE 7 WebProfileに対応したものだが， Full Platformに対応したもの([Liberty with Java EE 7 Full Platform](https://developer.ibm.com/assets/wasdev/#asset/runtimes-wlp-javaee7))もある。

JMSやJava Batch，JAX-WSを使いたい場合は，Full Platform版。
JSP，Servlet，JAX-RSなどを使いたい場合は，Web Profile版を使うと良い。

次回は，クラウド環境かなー。