Slide 1

Slide 1 text

1 https://openliberty.io Liberty 開発ツール⼊⾨ ⽇本IBM ⽥中 孝清 (Twitter @TTakakiyo) Liberty Dojo 2024第3回

Slide 2

Slide 2 text

2 ⾃⼰紹介 2 n ⽥中 孝清 n ⽇本アイ・ビー・エム株式会社 テクノロジー事業本部 Data AI and Automation 事業部 Application Modernization テクニカルセールス n WebSphere Application Serverなどの テクニカルセールスを20年以上担当 n Twitter(X) @TTakakiyo n https://www.linkedin.com/in/takakiyo/

Slide 3

Slide 3 text

3 3 ビルドツールを使った開発 Liberty Maven Plugin

Slide 4

Slide 4 text

4 再掲︓Java EEは「オペレーションのモダナイズ」が困難︖ n 「アプリケーション・サーバー」という実装が, 運⽤の⾃動化・効率化などのモダナイゼーションの阻害要因になっていた 4 開発環境 実働環境 コード作成 App Server導⼊ 構成 ビルド デプロイ 実⾏ n Java EEでは,開発者がコードを作成し, それをビルドするだけでは実⾏できない n あらかじめテスト環境,本番環境に アプリケーション・サーバーを導⼊し 必要な構成を済ませ その環境にアプリをデプロイして はじめて実⾏することができた n サーバーのメンテナンスが, 運⽤の⼤きな負荷に

Slide 5

Slide 5 text

5 再掲︓ 「モダン」なJavaフレームワークでは n コードを作成し,ビルドしたら, それがそのままサーバーで実⾏可能 n 事前のサーバー導⼊は不要 n 実⾏時の構成も,すべてコードとして記述 n CI/CDなどの⾃動化も容易 5 開発環境 実働環境 コード作成 ビルド 実⾏

Slide 6

Slide 6 text

6 再掲︓実⾏環境の全てをコードで記述し,ビルドで作成 n LibertyはMaven Centralリポジトリーから ⾃動でダウンロードされ,実⾏環境を構築 n 構成およびビルドされたアプリを追加し ビルド環境でテスト実⾏が可能 n その環境を,まるごと導⼊可能ZIP (や実⾏可能JAR)にパッケージング可能 6 サーバー構成 導⼊可能 ZIP ランタイムの指定 ビルド・ツール 実⾏可能 JAR or アプリ 開発環境 実働環境 コード作成 ビルド ZIP展開 実⾏ コード作成 ビルド 実⾏ または 開発環境 実働環境

Slide 7

Slide 7 text

7 再掲︓Open Libertyのクイック・スターター 7 https://openliberty.io/start/ Mavenのプロジェクトを ダウンロードできる (64kBほどの⼩さなZIP) 展開してビルドしただけで, 完全に動作する Open Liberty環境ができあがる (数⾏書きかえれば製品版も) 以下のStarterでも⽣成可能 • Eclipse Starter for Jakarta EE https://start.jakarta.ee/ • MicroProfile Starter https://start.microprofile.io/

Slide 8

Slide 8 text

8 ダウンロードしたプロジェクトの構成 n Maven Wrapper – 最⼩限のmaven-wrapper.jarをつかい, セントラル・リポジトリからMaven本体をダウンロードして実⾏ – 開発環境にMavenが未導⼊でも開発が⾏える n Project構成ファイル – ビルドするプロジェクトの依存関係や利⽤するプラグインを定義 – Libertyプラグインの構成として利⽤するLibertyなども指定 n ソースディレクトリ – アプリケーションのソースコードや, Libertyの構成ファイルなどを保管 n Libertyの構成ファイル n ターゲットディレクトリ – ビルドを⾏うと⽣成される(mvn cleanで全て消える) – ビルドしたアプリケーションやLibertyの環境が⽣成される 8

Slide 9

Slide 9 text

9 Mavenの起動コマンド n 利⽤するPCにMavenが構成されている場合は,「mvn」コマンドを実⾏する n Mavenが未導⼊ならば,プロジェクトに含まれるMaven Wrapperを使⽤する – Windows環境なら,プロジェクトのディレクトリで「mvnw.cmd」で実⾏ – その他の環境なら,プロジェクトのディレクトリで「./mvnw」で実⾏ n この資料では「mvn」コマンドで統⼀ n mvn [ゴール名] [オプション] で起動する 9

Slide 10

Slide 10 text

10 Mavenで利⽤するゴールの例 n Mavenの標準のゴール – mvn compile – mvn test – mvn package – mvn install 等 n ビルドの各ステップは 「フェーズ」という段階に分かれている n 各フェーズの名称をゴールにすると 最初のフェーズ(validate)から 指定されたフェーズまでが 順に実⾏される n フェーズに対応しない特別なゴールもある – mvn clean 等 10

Slide 11

Slide 11 text

11 pom.xml︓プロジェクト構成ファイルの基本構造(1) n プロジェクト要素︓ – POMのバージョン︓ – プロジェクトの識別⼦ • グループ︓ • プロジェクトの識別⼦︓ • バージョン︓ – 成果物の形式︓ – 各種プロパティ︓ – 依存関係︓ • プロジェクトが依存する対象を 記述する – ビルド構成︓ • ビルドの詳細について 特にコンパイルに使⽤する プラグインについて構成する (次ページ) 11 4.0.0 com.demo maven-test 1.0-SNAPSHOT war 8 8 UTF-8 jakarta.platform jakarta.jakartaee-api 8.0.0 provided

Slide 12

Slide 12 text

12 pom.xml︓依存関係 n 利⽤するJava EE/Jakarta EEやMicroProfile の APIについては,基本的にはStarterが 出⼒したものをそのまま使⽤すればOK n アプリケーションが使⽤する 外部ライブラリがあれば追加する – compileで追加する – アプリケーションのライブラリとして追加される n Libertyで構成するJDBC Driverなども 依存関係として追加する – providedで追加する – Liberty環境に組み込むようプラグインを構成する 12 jakarta.platform jakarta.jakartaee-api 8.0.0 provided org.apache.httpcomponents httpclient 4.5.14 compile org.postgresql postgresql 42.5.4 provided

Slide 13

Slide 13 text

13 pom.xml︓ビルド構成・プラグインの組み込み n ビルド構成︓ – 出⼒ファイル名︓ – プラグイン管理︓ • ⼦プロジェクト含め,関連プロジェクト 全体で有効なプラグインの構成 – プラグイン組み込み︓ • このプロジェクト⾃⾝に組み込むプラグイン n Libertyプラグインについての構成は, プラグイン管理に 構成されたlibery-maven-pluginの ⼦要素として構成していく 13 maven-test org.apache.maven.plugins maven-war-plugin 3.3.1 io.openliberty.tools liberty-maven-plugin 3.3.4 io.openliberty openliberty-kernel 24.0.0.6 zip minify io.openliberty.tools liberty-maven-plugin

Slide 14

Slide 14 text

14 Libertyプラグインで利⽤可能になるゴールの例 n Liberty環境を構築するゴール(Libertyの環境構築もプラグインが⾃動で⾏う) – mvn liberty:create • Libertyランタイムをダウンロードし,targetディレクトリ下に導⼊して,サーバーに作成し構成を配置する – mvn liberty:install-feature • ⾜りないFeatureがあれば,追加導⼊する – mvn liberty:deploy • targetディレクトリ下のLibertyランタイムにビルドしたアプリケーションをデプロイする • サーバーが稼働中ならば,正常に更新されたことを確認する n serverコマンドのアクションと同等の操作をするゴール – mvn liberty:start • サーバーをバックグランドで起動し,アプリケーションを実⾏する – mvn liberty:stop • バックグランドで起動しているサーバーを停⽌する – mvn liberty:package • Libertyランタイム+構成+アプリケーションを含んだアーカイブファイルを作成する(デフォルトではZIPファイル) n Liberty Dev Mode(開発モード) – mvn liberty:dev 14

Slide 15

Slide 15 text

15 mvn liberty:create ゴール n サーバーが未導⼊であれば,liberty:install-serverが実⾏され, pom.xmlで指定されたLibertyランタイムをダウンロード,展開する – デフォルトの構築場所はtarget/libertyで,ここにwlpディレクトリが作成される n liberty:createゴールで,サーバー構成が作成され, src/main/liberty/configディレクトリ以下の 全てのファイル・ディレクトリが, 上記のLibertyの${server.config.dir}にコピーされる – src/main/liberty/configディレクトリに 必要なファイルを準備しておく • server.xmlは必須 • 環境変数を設定するserver.env • JVM起動引数を指定するjvm.options • 複数サーバーにまたがるセキュリティ機能を使⽤する場合は, 鍵ファイルもあらかじめ作成して配置しておく 15 ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── jp │ │ │ └── test │ │ │ └── HelloServlet.java │ │ ├── liberty │ │ │ └── config │ │ │ ├── jvm.options │ │ │ └── server.xml │ │ └── webapp │ │ ├── WEB-INF │ │ │ └── web.xml │ │ └── index.html │ └── test │ └── java │ └── jp │ └── test │ ├── ApplicationTest.java │ └── it │ └── EndpointIT.java └── target └── liberty

Slide 16

Slide 16 text

16 Liberty Dev Mode n Mavenで「liberty:dev」をゴールに実⾏すると使⽤可能に n Mavenのcompileまでのゴールが実⾏されて,アプリケーションがビルドされる n 以下のLibertyプラグインのゴールが順に実⾏され, targetの下にLibertyの環境が作られる – liberty:install-server – liberty:create – liberty:install-feature – liberty:deploy n ホットデプロイが有効な状態でLibertyを起動し,アプリケーションのテストが可能に n コードが変更されると,⾃動的にcompile/liberty:deployが実⾏され, 実⾏中のアプリケーションも更新される n Ctrl-Cの⼊⼒で終了する – 他のコマンドを⼊⼒することで,テストや構成の再読み込みなども可能 16

Slide 17

Slide 17 text

17 Libertyプラグインの構成(1)︓ランタイムの指定 n Mavenセントラルレポジトリからダウンロードするランタイムの種類・バージョンを ので指定する – Open Libertyを使⽤する場合は,以下を指定する Group ID: io.openliberty,Artifact ID: openliberty-kernel – WebSphere Liberty(ILAN版)を使⽤する場合は,以下を指定する Group ID: com.ibm.websphere.appserver.runtime,Artifact ID: wlp-kernel – バージョンは,末尾が3/6/9/12で,最新のものを使⽤することを推奨 n 上記のRuntimeはカーネルのみを含み, server.xmlに記述されたFeatureが, liberty:install-featureゴールで 動的に導⼊される – にtureを指定すると 最初の⼀回だけ導⼊されるようになる – 開発パフォーマンスを落とすことなく 最⼩限のサイズのランタイムが利⽤できる 17 io.openliberty.tools liberty-maven-plugin 3.3.4 com.ibm.websphere.appserver.runtime wlp-kernel 24.0.0.6 true

Slide 18

Slide 18 text

18 Libertyプラグインの構成(2)︓Libertyへのファイルの追加 n Libertyからとして参照するJARは, でprofidedとして定義する n Libertyプラグインので を構成して ファイルをコピーする – コピー先のは, ${server.config.dir}からの相対パス n server.xmlなどのLiberty構成ファイルで, やで指定して構成する 18 jdbc/postgresql org.postgresql postgresql org.postgresql postgresql 42.5.4 provided

Slide 19

Slide 19 text

19 Libertyプラグインの構成(3)︓ライセンスの適⽤ n ランタイムとしてWebSphere Libertyを指定すると,ILAN版がダウンロードされる – 開発者⽤途であれば無償で利⽤できるランタイム – テスト環境,本番環境等でも使⽤するためには,ライセンスファイルの適⽤が必要 n PAサイトからダウンロードしたライセンスファイル(wlp-base-license.jarなど)を, 以下のようなmvnコマンドを実⾏して,適当なGroup/Artifact/Versionで導⼊しておく n で指定すると, Liberty環境作成時に ⾃動的にライセンスの適⽤が⾏われる 19 io.openliberty.tools liberty-maven-plugin 3.3.4 com.ibm.websphere.appserver.runtime wlp-kernel 24.0.0.6 true com.ibm.websphere.liberty wlp-base-license 18.0.0.1 % mvn install:install-file ¥ -Dfile=wlp-base-license.jar ¥ -DgroupId=com.ibm.websphere.liberty ¥ -DartivactId=wlp-base-license ¥ -Dversion=18.0.0.1 [INFO] CWWKM2181I: Installing Liberty production license com.ibm.websphere.liberty:wlp-base-license:18.0.0.1. [INFO] IBM WebSphere Application Server を使用、抽出、またはインストールする前に、IBM プログラムのご使用条件 [INFO] の条項と追加のライセンス情報に同意する必要があります。 以下の使用条件をよくお読みください。 [INFO] [INFO] [INFO] --acceptLicense 引数が見つかりました。 これは、ご使用条件の条項に同意されたことを示します。 [INFO] [INFO] [INFO] ライセンス・ファイルが正常に適用されました。

Slide 20

Slide 20 text

20 Libertyプラグインの構成(4)︓パッケージのため構成 n 導⼊可能なパッケージを作成する liberty:packageゴールを実⾏する前には, liberty:create,liberty:install-feature, liberty:deployゴールを 実⾏しておくことが必須 n 標準のpackageのフェーズで 上記のLibertyのゴールが実⾏されるように を構成しておくと便利 – 「mvn package」で,導⼊可能な Libertyのパッケージが作成される n にzipを, にminifyを指定しておく – 直接実⾏可能なパッケージを作成するには, にjarを, にminify,runnableを指定する 20 io.openliberty.tools liberty-maven-plugin 3.3.4 com.ibm.websphere.appserver.runtime wlp-kernel 24.0.0.6 true zip minify package-server package create install-feature deploy package

Slide 21

Slide 21 text

21 Libertyプラグインの構成(5)︓extensionとして組み込み n にtrueを設定すると, extensionとして組み込まれ, 標準のフェーズやゴールが拡張される n に指定する成果物の形式として liberty-assemblyが使⽤可能になる n 標準のフェーズにlibertyのゴールが⾃動的に組み込まれ 「mvn package」で,導⼊可能なパッケージが作成できるようになる 21 io.openliberty.tools liberty-maven-plugin 3.3.4 true zip minify 4.0.0 com.demo maven-test 1.0-SNAPSHOT liberty-assembly

Slide 22

Slide 22 text

22 導⼊可能なパッケージの作成 n 前⾴までのLibertyプラグインの構成(4)か(5)をおこなうと, 「mvn package」で,targetディレクトリ以下に Libertyの実⾏環境も含んだ,導⼊可能なアーカイブ・パッケージが作成される n がzipの場合 – でminifyを指定︓最⼩限のサイズに限定したLibertyの実⾏環境と,構成・アプリケーション – でusrを指定︓構成とアプリケーションのみがZIPに含まれる n がjarの場合 – でminifyを指定︓⾃⼰展開コードを組み込んだ,Libertyの実⾏環境と構成・アプリケーション • java -jarで実⾏すると,指定されたディレクトリにLiberty環境を展開 – でminify,runnableを指定︓直接実⾏可能なLibertyのJARファイル • java -jarで実⾏すると,テンポラリディレクトリに展開の上,Libertyを実⾏ 22

Slide 23

Slide 23 text

23 その他,Mavenプラグインについての情報は n LibertyのMaven Pluginは,OSSで開発が⾏われています n GutHub上のプロジェクトページで, 詳細なドキュメントが参照可能です – https://github.com/OpenLiberty/ci.maven 23

Slide 24

Slide 24 text

24 24 IDEとの連携 Eclipse / VS Code / IntelliJ

Slide 25

Slide 25 text

25 ⼆つのIDE拡張 Liberty Developer Tools • Libertyの提供当初から 存在している拡張 • 多機能 • 現在は新規機能開発は停⽌ Liberty Tools • 2023年に正式版になった 新しい拡張 • まだ機能は少ない • 現在も更新が続いている Eclipse ○ ○ Visual Studio Code ○ IntelliJ IDEA ○ Maven / Gradle 基本的には利⽤せず ビルドに利⽤ Dev Modeとの連携 ○ デバッガとの連携 ○ ○ server.xmlの構⽂チェック ○ ○ server.xmlのGUIによる編集 ○ 商⽤サポート ○

Slide 26

Slide 26 text

26 拡張機能の使い分け n Eclipseを使⽤して開発する場合は,Liberty Developer Toolsが現時点ではお薦め – Eclipse IDEのバージョンと,Liberty Developer Toolsのバージョンの組み合わせに制限があるので, サポートページで組み合わせを確認してから両者をダウンロードする • https://www.ibm.com/support/pages/node/6589483 • サポートページよりも新しいEclipseを使⽤すると,正常に稼働しないこともあるので注意 – Mavenプロジェクトの使⽤は必須ではない • Libertyプラグインを組み込んだMavenを使⽤しない場合は, Liberty環境はEclipse/Liberty Developer Toolsを操作して⼿動で作成する • Libertyプラグインを組み込んだMavenを使⽤して,Liberty環境を⾃動作成することも可能 n VS Code / IntelliJを使⽤して開発する場合は,Liberty Toolsを使⽤する – Java 21対応などもLiberty Toolsの⽅が早いので, 最新のJava機能を利⽤したい場合なども,Liberty Toolsの使⽤がお勧め – Liberty Toolsでは,Libertyプラグインを組み込んだMavenの使⽤が必須 • Open Liberty Starterなどで,Mavenプロジェクトを⽣成してから利⽤する

Slide 27

Slide 27 text

27 Liberty Developer Tools for Eclipseの利⽤⽅法 n コミュニティ上のガイドを参照ください 1. コミュニティ( https://ibm.biz/JapanWebSphereUG )にアクセス 2. 「WebSphere Application Server Liberty技術⽂章⼀覧」をクリック 3. 「WebSphere Liberty 開発ツール利⽤ガイド」をクリック 27

Slide 28

Slide 28 text

28 Visual Studio CodeへのLiberty Toolsの導⼊ n 前提 – (Libertyで利⽤可能なバージョンの)JDKが導⼊されていること – Visual Studio Codeを導⼊し,Extension Pack for JavaなどのJava開発拡張が追加されていること n 導⼊⽅法 – 画⾯左のアクティビティ・バーから「拡張機能」をえらび,「liberty」などで検索してLiberty Toolsを表⽰ – 「インストール」ボタンで導⼊ 28

Slide 29

Slide 29 text

29 Visual Studio Codeでの開発 n Starterなどで作成したMavenプロジェクトを,VS Codeの「フォルダーを開く」で開く – フォルダー内のファイルの作成者を信頼するか,のダイアログボックスが 出た場合は「信頼します」をクリック n アクティビティ・バーの 「エクスプローラー」からプロジェクトの ファイル全体を確認・編集・保存して開発 29

Slide 30

Slide 30 text

30 Liberty Dashboard n Liberty Toolsが導⼊されていると,エクスプローラーのなかに 「LIBERTY DASHBOARD」が追加される n プロジェクト名を右クリックすると,Libertyの起動や停⽌などが⾏える – 通常は「Start」で起動して,アプリケーションをテスト 「Stop」で停⽌する – 実⾏中のLibertyに,「Attach debugger」で デバッガを接続し,ステップ実⾏なども可能 30

Slide 31

Slide 31 text

31 server.xmlの編集 n コンテンツアシストや,構⽂チェックなどが使⽤可能 31

Slide 32

Slide 32 text

32 32 最後に お知らせと宣伝

Slide 33

Slide 33 text

33 Qiitaでハンズオン記事を公開しています n JDK+VS Codeが導⼊されていれば無料で実施できるOpen Libertyのハンズオン 33 https://qiita.com/TTakakiyo/items/5f09be651bec34885c6e

Slide 34

Slide 34 text

34 Integration&WebSphereコミュニティ 34 https://ibm.biz/JapanWebSphereUG ↓Integration Group Japan↓ n 多数の⽇本語技術⽂書を掲載 n 各種イベント・セミナーのご案内 n IBM IDでLoginすれば質問投稿や限定記事の閲覧が可能 n オープンソースや幅広いテクノロジーに関する話題も