SlideShare a Scribd company logo
1 of 60
Copyright©2018 NTT corp. All Rights Reserved.
Spring Tools 4 の機能とその実装
2018年10月31日
岩塚 卓弥,堅田 淳也
NTTソフトウェアイノベーションセンタ
2Copyright©2018 NTT corp. All Rights Reserved.
• 名前:岩塚 卓弥
• 所属:NTT ソフトウェアイノベーションセンタ
• NTTの研究所のうちソフトウェアを専門に扱う
• 自部署ではソフトウェア工学を研究
• Springベースのグループ共通フレームワークの整備を担当
• Spring関連:
• Spring I/O, SpringOne それぞれ2015年から参加
• 改訂新版 Spring入門,Spring徹底入門 レビュアー
• JSUG幹事
自己紹介
• 名前:岩塚 卓弥
• 所属:NTT ソフトウェアイノベーションセンタ
• NTTの研究所のうちソフトウェアを専門に扱う
• 自部署ではソフトウェア工学を研究
• Springベースのグループ共通フレームワークの整備を担当
• Spring関連:
• Spring I/O, SpringOne それぞれ2015年から参加
• 改訂新版 Spring入門,Spring徹底入門 レビュアー
• JSUG幹事
3Copyright©2018 NTT corp. All Rights Reserved.
• 名前:堅田 淳也
• 所属:NTT ソフトウェアイノベーションセンタ
• NTTの研究所のうちソフトウェアを専門に扱う
• 自部署ではソフトウェア工学を研究
• Springベースのグループ共通フレームワークの整備を担当
• Spring経験
• 元SIerで、プロジェクトへのSpring適用支援などを担当
• SpringOne(2017, 2018)、Spring I/O(2018)に参加
自己紹介
4Copyright©2018 NTT corp. All Rights Reserved.
1. 概要編
• Spring Tools 4 の概要、新機能、削除された機能等の紹介
2. 実装編
• Spring Tools 4 の内部実装と動作についての紹介
今日話すこと
5Copyright©2018 NTT corp. All Rights Reserved.
概要編
Spring Tools 4 の機能とその実装
6Copyright©2018 NTT corp. All Rights Reserved.
• EclipseベースのSpring向け統合開発環境
• 長い歴史
• STSのコア要素である Spring IDE プラグインは
2005年に初版リリース
• Spring 1.x の時代
• 今日までSpringやEclipseのバージョンアップに追随
Spring Tool Suite (STS)
7Copyright©2018 NTT corp. All Rights Reserved.
• IDE/エディタの多様化
• 一昔前まではみんなEclipse
• 有料でも良いツールが選択されるようになってきた
• 軽量なソースコードエディタが増えてきた
• Springアプリ開発の変化
• Spring Bootが当たり前のように使われるようになってきた
• 動的コンフィギュレーションが多用されるため、ソースコードの静
的解析のみでは限界
STS を取り巻く環境の変化
時代の変化に対応した新しいツールが必要
8Copyright©2018 NTT corp. All Rights Reserved.
• 2018/9/25 リリース
Spring Tools 4 GA released
9Copyright©2018 NTT corp. All Rights Reserved.
• ほぼスクラッチから再実装
• Spring Boot + アノテーション設定による
開発スタイルのサポートにフォーカス
• 素のSpring開発ではほとんど恩恵を受けれない
• IDE非依存なアーキテクチャの採用
• 多様なIDE/エディタに対応可能
Spring Tools 4 (aka STS4)
10Copyright©2018 NTT corp. All Rights Reserved.
• 3つのIDE/エディタに対応
Spring Tools 4 (aka STS4)
Spring Tools 4
for Eclipse
Spring Tools 4
for Visual Studio Code
Spring Tools 4
for Atom IDE
• 追加パッケージとして
インストール
• Extension Packと
してインストール
• オールインワン形式をダ
ウンロードして利用
or
• プラグインとして既存
Eclipseにインストール
11Copyright©2018 NTT corp. All Rights Reserved.
• Navigation
• Springに特化した新しいシンボル検索
• Live Application Information
• 実行中のSpring Bootアプリの情報を表示
新機能
注意: 新機能が使えるのはSpring Bootアプリのみ
素のSpringアプリでは機能しません
!
12Copyright©2018 NTT corp. All Rights Reserved.
• Springに関連する要素をワークスペース or ソースフ
ァイル内から手軽に検索
新機能 - Navigation
Eclipseの場合
Ctrl(Cmd) + 6
13Copyright©2018 NTT corp. All Rights Reserved.
• 検索する要素ごとに専用のプレフィクスがある
• e.g. Beanを検索するときは “@+xxxx” (xxxxはBean ID)
• 検索できるもの
1. Spring関連のアノテーション
2. Bean IDによるBean検索 (@+)
3. RequestMappingのパス情報 (@/)
4. 実行中のSpring Bootアプリのエンドポイント (//)
• spring-boot-actuatorが必要
5. Spring Cloud FunctionのFunction (@>)
• まだプロトタイプ実装の扱い
新機能 - Navigation
14Copyright©2018 NTT corp. All Rights Reserved.
1. Springのアノテーション検索
• “@xxxx” と入力 (xxxxはアノテーション名)
新機能 - Navigation
15Copyright©2018 NTT corp. All Rights Reserved.
2. Bean検索
• “@+xxxx” と入力 (xxxxはBean ID)
新機能 - Navigation
Spring Data で生成されるRepository
でも検索可能
16Copyright©2018 NTT corp. All Rights Reserved.
3. RequestMapping検索
• “@/xxxx” と入力 (xxxxはパス)
新機能 - Navigation
17Copyright©2018 NTT corp. All Rights Reserved.
4. 実行中のSpring Bootアプリケーションのエンドポ
イント
• “//” と入力すると全エンドポイントが表示
• spring-boot-actuator が必須
新機能 - Navigation
18Copyright©2018 NTT corp. All Rights Reserved.
• 実行中のSpring Bootアプリの情報を表示
• ローカルで実行中のSpring Bootアプリを自動的に検出し、各
情報をソースコード上のマウスオーバーなどで表示する
• spring-boot-actuator が必須
• 確認できる内容
1. Live Request Mappings
2. Live Bean Information
3. Conditional Beans Information
4. Live Active Profiles Information
• 表示方法
• マウスオーバー
• コードレンズ
• Atomは非対応
新機能 - Live Application Information
19Copyright©2018 NTT corp. All Rights Reserved.
新機能 - Live Application Information
Live Request Mappingsの表示(マウスオーバー)
動作中のアプリの実際のURLリンクが
表示
20Copyright©2018 NTT corp. All Rights Reserved.
新機能 - Live Application Information
→ OwnerController
このBeanをインジェクションし
ているBeanが表示される
← OwnerRepository
このBeanがインジェクションし
ているBeanが表示される
Live Bean Informationの表示
(マウスオーバー)
21Copyright©2018 NTT corp. All Rights Reserved.
新機能 - Live Application Information
条件付きBean定義の各条件が合
致したかどうか分かる
Conditional Beans Informationの表示
(マウスオーバー)
22Copyright©2018 NTT corp. All Rights Reserved.
新機能 - Live Application Information
Live Active Profiles Informationの表示
(マウスオーバー)
有効になっているプロファイルが
ハイライトされる
有効になっているプロファイルが表示
23Copyright©2018 NTT corp. All Rights Reserved.
• コードレンズ
• ソースコード上に情報の1行サマリを表示する
• マウスオーバーと違い、ソースコード上に常に表示
• Live Request Mappings と Live Bean Information のみ対応
• デフォルトでは無効になっている(Eclipseの場合)
• Atomは未対応
新機能 - Live Application Information
Live Request Mappings の
サマリ情報を常に表示
Live Request Mappings の表示 (コードレンズ)
24Copyright©2018 NTT corp. All Rights Reserved.
新機能 - Live Application Information
Live Bean Informationの
サマリ情報を常に表示
Live Bean Information の表示(コードレンズ)
25Copyright©2018 NTT corp. All Rights Reserved.
• Boot Dashboard
• Spring Bootアプリの起動/停止
• Spring Starter Wizard
• Spring Initializr からSpring Boot アプリの雛形を生成
• application.properties(.yml) の編集サポート
• プロパティ名の補完
• バリデーション
• プロパティ情報のマウスオーバー表示
• application.propertiesをyml形式へ変換
• RequestMappingのコードスニペット補完
• Import Getting Started Content Wizard
• Spring公式のチュートリアルガイドのサンプルをワークス
ペースにインポート
• Quick Search
• ワークスペースからテキストを素早く検索するダイアログ
• Ctrl(cmd) + Shift + L
STS3から継続して使える機能
26Copyright©2018 NTT corp. All Rights Reserved.
• Request Mapping View
• @RequestMappingのパス情報のリストを表示するビュー
• 新機能 ”Navigation” で代替可能
• Live Beans Graph View
• 実行中のアプリのBean依存関係をグラフ表示するビュー
• STS4ではグラフ表示はできないが、”Live Application
Information”でBeanの依存関係は確認可能
• Spring XML config support
• Bean IDの自動補完、Beanのクラス名の補完、など
• STS4では代替機能なし
• Spring XML config validations
• 参照先に指定されたBeanが存在しない場合に警告を出す、など
• STS4では代替機能なし
STS4で削除された機能
27Copyright©2018 NTT corp. All Rights Reserved.
STS3 Features in STS4
• どうしてもSTS3のコンポーネントを使いたい場合…
• リポジトリの奥底に眠る古いXMLベースのアプリをメンテしな
ければならない
• 謎の圧力によってSpring Bootの利用が禁止されている
• 選択肢
1. STS3を使い続ける
2. STS3のコンポーネントをSTS4にインストールする
• 強くは推奨しないがサポートはされている (by 公式wiki)
• Eclipse MarketplaceからSpring Tools 3 Add-onをインストー
ル
STS 3.9.x は2019年の中頃までメンテナンス予定
→ それ以降は新しいEclipseへの対応は実施されない
28Copyright©2018 NTT corp. All Rights Reserved.
• Spring Tools 4
• Eclipse / VS Code / Atom に対応
• Spring Boot のアプリにフォーカス
• 新機能
• Navigation
• Live Application Information
• マウスオーバー / コードレンズ
• Spring Bootではなく、素のSpringを使う場合は…
• STS3を使い続ける or STS3をSTS4にインストール
• STS3は2019年の中頃までメンテナンス予定
ここまでのまとめ
29Copyright©2018 NTT corp. All Rights Reserved.
実装編
Spring Tools 4 の機能とその実装
30Copyright©2018 NTT corp. All Rights Reserved.
STS4はLanguage Serverとして機能を提供することで
複数のIDE・エディタに対応している
複数のIDE・エディタへの対応
Visual Studio Code
Language Server として
別プロセスで動作
IDE/エディタの拡張機能を利用
Language Server Protocol
31Copyright©2018 NTT corp. All Rights Reserved.
STS4 のリポジトリ
Language Server 本体のコード等
32Copyright©2018 NTT corp. All Rights Reserved.
STS4 のリポジトリ
Atomクライアント用のコード等
eclipseクライアント用のコード等
VSCodeクライアント用のコード等
33Copyright©2018 NTT corp. All Rights Reserved.
STS4 のリポジトリ
未対応
未対応
34Copyright©2018 NTT corp. All Rights Reserved.
? ?
そんなものはない
35Copyright©2018 NTT corp. All Rights Reserved.
• Eclipse LSP4J
Java による Language Server / Client 実装のためのライブラリ
• Eclipse LSP4E
Eclipse用の Language Client を実装するためのライブラリ
• Eclipse JDT Language Server
Java / Maven / Gradle プロジェクトをサポートする Language Server
• Language support for Java for Visual Studio Code
Eclipse JDT Language Server の VSCode用の Language Client
• VSCode Language Server - Client Module
VSCode用の Language Client を実装するためのライブラリ
• Atom Language Server Protocol Client
Atom用の Language Client を実装するためのライブラリ
STS4 を支える技術
https://github.com/eclipse/lsp4j
https://projects.eclipse.org/projects/technology.lsp4e
https://github.com/redhat-developer/vscode-java
https://github.com/atom/atom-languageclient
https://github.com/eclipse/eclipse.jdt.ls
https://github.com/Microsoft/vscode-languageserver-node/tree/master/client
for
for
for
36Copyright©2018 NTT corp. All Rights Reserved.
STS4はLanguage Serverとして機能を提供することで
複数のIDE・エディタに対応している
【再掲】複数のIDE・エディタへの対応
Visual Studio Code
Language Server として
別プロセスで動作
IDE/エディタの拡張機能を利用
Language Server Protocol
37Copyright©2018 NTT corp. All Rights Reserved.
Microsoftが策定した,プログラム解析器 (Language
Server) とそれを利用するツール間で会話するためのプ
ロトコル
- https://langserver.org
LSPを利用するメリット
1. 一つの Language Server だけで複数のクライアント
に対応できる
2. クライアントの実装言語とは独立して Language
Server を実装できる
3. Language Server が不安定な挙動をしてもクライア
ントが引きずられずに済む
Language Server Protocol (LSP) 概要
38Copyright©2018 NTT corp. All Rights Reserved.
JSON-RPC を利用したメッセージを送り合うシンプルなプロトコル
• Request Message:クライアント/サーバ間のリクエスト
• Response Message:Request Messageへのレスポンス
• Notification Message:レスポンス不要のメッセージ
LSP の仕様
Content-Length: 74
{
“jsonrpc”:”2.0”,
”id”:4,
”method”:”workspace/symbol”,
”params”:{“query”:””}
}
Request Message の例:
Header Part
Content Part
JSON-RPC
Object
詳細は https://microsoft.github.io/language-server-protocol/specification 参照のこと
39Copyright©2018 NTT corp. All Rights Reserved.
設定で Language Server とのやり取りを出力できるVSCode拡張も
あるが,STS4は非対応
LSP のメッセージを覗いてみる
Java Extension の場合:
拡張の設定
トレースログ
40Copyright©2018 NTT corp. All Rights Reserved.
LSP のメッセージを覗いてみる
DEMO
41Copyright©2018 NTT corp. All Rights Reserved.
• VSCode では STS4 とのメッセージはTCPで送受信される
• localhost内のTCPパケットをキャプチャすることでメッセージを
取得できる
TCPパケットのキャプチャによるメッセージの取得
WireSharkによるパケットのキャプチャ: Loopback
クライアントが45556ポート
LSP のメッセージ
42Copyright©2018 NTT corp. All Rights Reserved.
TCPパケットのキャプチャによるメッセージの取得
DEMO
43Copyright©2018 NTT corp. All Rights Reserved.
標準入出力のキャプチャによるメッセージの取得
• Eclipse では STS4 とのメッセージは標準入出力を介して送受信される
• プロセスの標準入出力をキャプチャすることでメッセージを取得できる
Language Server プロセスの標準入出力のキャプチャ:
標準入力(Client → Server) 標準出力(Server → Client)
44Copyright©2018 NTT corp. All Rights Reserved.
標準入出力のキャプチャによるメッセージの取得
DEMO
45Copyright©2018 NTT corp. All Rights Reserved.
Navigation機能使用時のメッセージ
Client
Client
“method”:”workspace/symbol”
“param”:{“query”:”xxx”}
Array of SymbolInformation
“method”:”textDocument/documentSymbol”
“param”:{“textDocument”:{”uri”:”file://...”}}
Array of SymbolInformation
プロジェクト内
ファイル内
46Copyright©2018 NTT corp. All Rights Reserved.
SymbolInformationの作成
010 010 010
① ②
1. プロジェクトから javaファイルを探索
2. javaファイルとclasspath上のファイルからAST(抽象構文
木)を作成
3. ASTをたどりながらSymbolを探索
• 種別ごとに定義されたSymbolProviderにより
SymbolInformationを取得
• @Bean / @RequestMapping / @Component …
• 取得したSymbolから以下を作成
• プロジェクト全体のSymbolInformationのリスト
• ファイル名からSymbolInformationのリストへのMap
J
③
プロジェクトのオープン時に一覧を作成しており,即時提要可能
J
47Copyright©2018 NTT corp. All Rights Reserved.
【特例】“query”:“//”
Client
“method”:”workspace/symbol”
“params”:{“query”:”//”}
Array of SymbolInformation running
Spring Boot Apps
JMX
要 Actuator取得したホスト,ポート番号,
RequestMappingのパスからURLを組み立てる
//から始まるqueryの場合,実行中のSpring Boot アプリケーションか
ら
JMXを用いてRequestMapping情報を取得
初回リクエスト時に多少のオーバヘッドが発生
48Copyright©2018 NTT corp. All Rights Reserved.
Live Application Informationの表示
Client
“method” : “sts/highlight”
“params” : {“doc”:…, “codeLenses”:[…]}
running
Spring Boot Apps
JMX
要 Actuator
定期的に取得した情報を Language Server から通知
実行中のSpring Boot アプリケーションからJMXを用いて情報を取得
バックグラウンドでポーリングを続けるので,継続的に一定のリソースを消費する
開いているファイルについてのハイライトとCodeLensの情報を通知
リクエストはしない
ポーリング
49Copyright©2018 NTT corp. All Rights Reserved.
• Serverという名がつくものはとりあえず繋いでみたく
なるはず
→ やってみた
• 手順
1. Language Server をデバッグ用のスタンドアローンモード
で起動
• TCP の 5007 ポートで待受
2. TCPで初期化リクエストのメッセージを送る
• 予めキャプチャしておいた正規のリクエストを利用
3. Language Server からのリクエストにレスポンスする
• 一部動的な要素あり
4. Symbol取得のリクエストを送る
おまけ1:Language Server に接いでみる
50Copyright©2018 NTT corp. All Rights Reserved.
おまけ1:Language Server に接いでみる
DEMO
51Copyright©2018 NTT corp. All Rights Reserved.
TCPで初期化リクエストのメッセージを送る
…
LSPの仕様で定められた初期化リクエスト
クライアントの機能の対応状況を送る
Initialize Request(Client → Server)
Response (Server → Client)
…
Initialized Notification(Client → Server)
52Copyright©2018 NTT corp. All Rights Reserved.
Language Server からのリクエストにレスポン
スする
addClasspathListener Request (Server → Client)
STS4独自のリクエスト
ランダム値
Response (Client → Server)
…
Callback Command (Client → Server)
Serverから送られてきた値 Classpathのエントリを送る
53Copyright©2018 NTT corp. All Rights Reserved.
Symbol取得のリクエストを送る
symbol Request(Client → Server)
Response (Server → Client)
…
正しく接続できていればリクエストに応じた結果が返ってくる
54Copyright©2018 NTT corp. All Rights Reserved.
Serverという名がつくものにはとりあえずクライアント
を作ってみたくなるはず
→ 作ってみた
Spring Shell と Eclipse LSP4J を利用したCLIのクライアント
• 対応機能
• Symbolの取得
• プロジェクト内
• ファイル内
• 実行中のSpring Boot ApplicationのRequestMapping
• Live Application Information によるハイライト
おまけ2:クライアントを実装してみた
55Copyright©2018 NTT corp. All Rights Reserved.
おまけ2:クライアントを実装してみた
DEMO
56Copyright©2018 NTT corp. All Rights Reserved.
Symbolの取得
プロジェクト内のSymbol取得
ファイル内のSymbol取得
57Copyright©2018 NTT corp. All Rights Reserved.
Symbolの取得
生データを出力して確認
58Copyright©2018 NTT corp. All Rights Reserved.
Symbolの取得
実行中のSpring Boot ApplicationのRequestMapping取得
59Copyright©2018 NTT corp. All Rights Reserved.
ハイライト
Live Application Information によるハイライト
CodeLens
60Copyright©2018 NTT corp. All Rights Reserved.
• Language Server Protocol
• 一つの実装で複数のIDE/エディタに機能を提供
• 今後さらに対応が広がる可能性も
• Navigation の実装・動作
• プロジェクトを開いた時点でNavigation先を解析
• 実行中のSpring BootアプリのエンドポイントはJMXで収集
• Live Application Information の実装・動作
• JMXで定期的に情報を収集
• Language Server から一方的に通知
実装編まとめ

More Related Content

What's hot

Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと心 谷本
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き土岐 孝平
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話Yoshinori Matsunobu
 
Terraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as CodeTerraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as CodeTakahisa Iwamoto
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント土岐 孝平
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話KEISUKE KONISHI
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用apkiban
 
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察cch-robo
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション土岐 孝平
 
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装Masatoshi Tada
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることShingo Fukui
 

What's hot (20)

SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 
Terraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as CodeTerraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as Code
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
 
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
 
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 

Similar to Spring tools4

Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Spring I/O 2016 報告 Test / Cloud / Other Popular SessionsSpring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Spring I/O 2016 報告 Test / Cloud / Other Popular SessionsTakuya Iwatsuka
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告Takuya Iwatsuka
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告apkiban
 
Python languageupdate (2004)
Python languageupdate (2004)Python languageupdate (2004)
Python languageupdate (2004)泰 増田
 
OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向NTT Software Innovation Center
 
ドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながらドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながらsoishino
 
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractTakuya Iwatsuka
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo!デベロッパーネットワーク
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]David Buck
 
dstn交流会_DataSpider のソーシャルとの融合、手組との融合
dstn交流会_DataSpider のソーシャルとの融合、手組との融合dstn交流会_DataSpider のソーシャルとの融合、手組との融合
dstn交流会_DataSpider のソーシャルとの融合、手組との融合dstn
 
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめTetsutaro Watanabe
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストEclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストAtsuhiro Kubo
 
OSSで作るOpenStack監視システム
OSSで作るOpenStack監視システムOSSで作るOpenStack監視システム
OSSで作るOpenStack監視システムsatsuki fukazu
 
ひとりドキュメント担当の仕事を楽しむ
ひとりドキュメント担当の仕事を楽しむひとりドキュメント担当の仕事を楽しむ
ひとりドキュメント担当の仕事を楽しむsoishino
 
Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門Takuya Iwatsuka
 

Similar to Spring tools4 (20)

Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Spring I/O 2016 報告 Test / Cloud / Other Popular SessionsSpring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
 
Python languageupdate (2004)
Python languageupdate (2004)Python languageupdate (2004)
Python languageupdate (2004)
 
OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向
 
ドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながらドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながら
 
Spring I/O 2018 報告会
Spring I/O 2018 報告会Spring I/O 2018 報告会
Spring I/O 2018 報告会
 
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
 
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_cccSpring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
 
dstn交流会_DataSpider のソーシャルとの融合、手組との融合
dstn交流会_DataSpider のソーシャルとの融合、手組との融合dstn交流会_DataSpider のソーシャルとの融合、手組との融合
dstn交流会_DataSpider のソーシャルとの融合、手組との融合
 
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストEclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテスト
 
OSS光と闇
OSS光と闇OSS光と闇
OSS光と闇
 
OSSで作るOpenStack監視システム
OSSで作るOpenStack監視システムOSSで作るOpenStack監視システム
OSSで作るOpenStack監視システム
 
ひとりドキュメント担当の仕事を楽しむ
ひとりドキュメント担当の仕事を楽しむひとりドキュメント担当の仕事を楽しむ
ひとりドキュメント担当の仕事を楽しむ
 
Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門
 

More from Takuya Iwatsuka

SpringとGrarlVM Native Image -2019/12-
SpringとGrarlVM Native Image -2019/12-SpringとGrarlVM Native Image -2019/12-
SpringとGrarlVM Native Image -2019/12-Takuya Iwatsuka
 
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能Takuya Iwatsuka
 
SpringOne Platform 2017報告会 メインプロジェクトのアップデート
SpringOne Platform 2017報告会 メインプロジェクトのアップデートSpringOne Platform 2017報告会 メインプロジェクトのアップデート
SpringOne Platform 2017報告会 メインプロジェクトのアップデートTakuya Iwatsuka
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Takuya Iwatsuka
 
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Takuya Iwatsuka
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用Takuya Iwatsuka
 
Password validation with Passay
Password validation with PassayPassword validation with Passay
Password validation with PassayTakuya Iwatsuka
 

More from Takuya Iwatsuka (8)

SpringとGrarlVM Native Image -2019/12-
SpringとGrarlVM Native Image -2019/12-SpringとGrarlVM Native Image -2019/12-
SpringとGrarlVM Native Image -2019/12-
 
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
 
SpringOne Platform 2017報告会 メインプロジェクトのアップデート
SpringOne Platform 2017報告会 メインプロジェクトのアップデートSpringOne Platform 2017報告会 メインプロジェクトのアップデート
SpringOne Platform 2017報告会 メインプロジェクトのアップデート
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
 
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
 
Spring social の基礎
Spring social の基礎Spring social の基礎
Spring social の基礎
 
Password validation with Passay
Password validation with PassayPassword validation with Passay
Password validation with Passay
 

Spring tools4

  • 1. Copyright©2018 NTT corp. All Rights Reserved. Spring Tools 4 の機能とその実装 2018年10月31日 岩塚 卓弥,堅田 淳也 NTTソフトウェアイノベーションセンタ
  • 2. 2Copyright©2018 NTT corp. All Rights Reserved. • 名前:岩塚 卓弥 • 所属:NTT ソフトウェアイノベーションセンタ • NTTの研究所のうちソフトウェアを専門に扱う • 自部署ではソフトウェア工学を研究 • Springベースのグループ共通フレームワークの整備を担当 • Spring関連: • Spring I/O, SpringOne それぞれ2015年から参加 • 改訂新版 Spring入門,Spring徹底入門 レビュアー • JSUG幹事 自己紹介 • 名前:岩塚 卓弥 • 所属:NTT ソフトウェアイノベーションセンタ • NTTの研究所のうちソフトウェアを専門に扱う • 自部署ではソフトウェア工学を研究 • Springベースのグループ共通フレームワークの整備を担当 • Spring関連: • Spring I/O, SpringOne それぞれ2015年から参加 • 改訂新版 Spring入門,Spring徹底入門 レビュアー • JSUG幹事
  • 3. 3Copyright©2018 NTT corp. All Rights Reserved. • 名前:堅田 淳也 • 所属:NTT ソフトウェアイノベーションセンタ • NTTの研究所のうちソフトウェアを専門に扱う • 自部署ではソフトウェア工学を研究 • Springベースのグループ共通フレームワークの整備を担当 • Spring経験 • 元SIerで、プロジェクトへのSpring適用支援などを担当 • SpringOne(2017, 2018)、Spring I/O(2018)に参加 自己紹介
  • 4. 4Copyright©2018 NTT corp. All Rights Reserved. 1. 概要編 • Spring Tools 4 の概要、新機能、削除された機能等の紹介 2. 実装編 • Spring Tools 4 の内部実装と動作についての紹介 今日話すこと
  • 5. 5Copyright©2018 NTT corp. All Rights Reserved. 概要編 Spring Tools 4 の機能とその実装
  • 6. 6Copyright©2018 NTT corp. All Rights Reserved. • EclipseベースのSpring向け統合開発環境 • 長い歴史 • STSのコア要素である Spring IDE プラグインは 2005年に初版リリース • Spring 1.x の時代 • 今日までSpringやEclipseのバージョンアップに追随 Spring Tool Suite (STS)
  • 7. 7Copyright©2018 NTT corp. All Rights Reserved. • IDE/エディタの多様化 • 一昔前まではみんなEclipse • 有料でも良いツールが選択されるようになってきた • 軽量なソースコードエディタが増えてきた • Springアプリ開発の変化 • Spring Bootが当たり前のように使われるようになってきた • 動的コンフィギュレーションが多用されるため、ソースコードの静 的解析のみでは限界 STS を取り巻く環境の変化 時代の変化に対応した新しいツールが必要
  • 8. 8Copyright©2018 NTT corp. All Rights Reserved. • 2018/9/25 リリース Spring Tools 4 GA released
  • 9. 9Copyright©2018 NTT corp. All Rights Reserved. • ほぼスクラッチから再実装 • Spring Boot + アノテーション設定による 開発スタイルのサポートにフォーカス • 素のSpring開発ではほとんど恩恵を受けれない • IDE非依存なアーキテクチャの採用 • 多様なIDE/エディタに対応可能 Spring Tools 4 (aka STS4)
  • 10. 10Copyright©2018 NTT corp. All Rights Reserved. • 3つのIDE/エディタに対応 Spring Tools 4 (aka STS4) Spring Tools 4 for Eclipse Spring Tools 4 for Visual Studio Code Spring Tools 4 for Atom IDE • 追加パッケージとして インストール • Extension Packと してインストール • オールインワン形式をダ ウンロードして利用 or • プラグインとして既存 Eclipseにインストール
  • 11. 11Copyright©2018 NTT corp. All Rights Reserved. • Navigation • Springに特化した新しいシンボル検索 • Live Application Information • 実行中のSpring Bootアプリの情報を表示 新機能 注意: 新機能が使えるのはSpring Bootアプリのみ 素のSpringアプリでは機能しません !
  • 12. 12Copyright©2018 NTT corp. All Rights Reserved. • Springに関連する要素をワークスペース or ソースフ ァイル内から手軽に検索 新機能 - Navigation Eclipseの場合 Ctrl(Cmd) + 6
  • 13. 13Copyright©2018 NTT corp. All Rights Reserved. • 検索する要素ごとに専用のプレフィクスがある • e.g. Beanを検索するときは “@+xxxx” (xxxxはBean ID) • 検索できるもの 1. Spring関連のアノテーション 2. Bean IDによるBean検索 (@+) 3. RequestMappingのパス情報 (@/) 4. 実行中のSpring Bootアプリのエンドポイント (//) • spring-boot-actuatorが必要 5. Spring Cloud FunctionのFunction (@>) • まだプロトタイプ実装の扱い 新機能 - Navigation
  • 14. 14Copyright©2018 NTT corp. All Rights Reserved. 1. Springのアノテーション検索 • “@xxxx” と入力 (xxxxはアノテーション名) 新機能 - Navigation
  • 15. 15Copyright©2018 NTT corp. All Rights Reserved. 2. Bean検索 • “@+xxxx” と入力 (xxxxはBean ID) 新機能 - Navigation Spring Data で生成されるRepository でも検索可能
  • 16. 16Copyright©2018 NTT corp. All Rights Reserved. 3. RequestMapping検索 • “@/xxxx” と入力 (xxxxはパス) 新機能 - Navigation
  • 17. 17Copyright©2018 NTT corp. All Rights Reserved. 4. 実行中のSpring Bootアプリケーションのエンドポ イント • “//” と入力すると全エンドポイントが表示 • spring-boot-actuator が必須 新機能 - Navigation
  • 18. 18Copyright©2018 NTT corp. All Rights Reserved. • 実行中のSpring Bootアプリの情報を表示 • ローカルで実行中のSpring Bootアプリを自動的に検出し、各 情報をソースコード上のマウスオーバーなどで表示する • spring-boot-actuator が必須 • 確認できる内容 1. Live Request Mappings 2. Live Bean Information 3. Conditional Beans Information 4. Live Active Profiles Information • 表示方法 • マウスオーバー • コードレンズ • Atomは非対応 新機能 - Live Application Information
  • 19. 19Copyright©2018 NTT corp. All Rights Reserved. 新機能 - Live Application Information Live Request Mappingsの表示(マウスオーバー) 動作中のアプリの実際のURLリンクが 表示
  • 20. 20Copyright©2018 NTT corp. All Rights Reserved. 新機能 - Live Application Information → OwnerController このBeanをインジェクションし ているBeanが表示される ← OwnerRepository このBeanがインジェクションし ているBeanが表示される Live Bean Informationの表示 (マウスオーバー)
  • 21. 21Copyright©2018 NTT corp. All Rights Reserved. 新機能 - Live Application Information 条件付きBean定義の各条件が合 致したかどうか分かる Conditional Beans Informationの表示 (マウスオーバー)
  • 22. 22Copyright©2018 NTT corp. All Rights Reserved. 新機能 - Live Application Information Live Active Profiles Informationの表示 (マウスオーバー) 有効になっているプロファイルが ハイライトされる 有効になっているプロファイルが表示
  • 23. 23Copyright©2018 NTT corp. All Rights Reserved. • コードレンズ • ソースコード上に情報の1行サマリを表示する • マウスオーバーと違い、ソースコード上に常に表示 • Live Request Mappings と Live Bean Information のみ対応 • デフォルトでは無効になっている(Eclipseの場合) • Atomは未対応 新機能 - Live Application Information Live Request Mappings の サマリ情報を常に表示 Live Request Mappings の表示 (コードレンズ)
  • 24. 24Copyright©2018 NTT corp. All Rights Reserved. 新機能 - Live Application Information Live Bean Informationの サマリ情報を常に表示 Live Bean Information の表示(コードレンズ)
  • 25. 25Copyright©2018 NTT corp. All Rights Reserved. • Boot Dashboard • Spring Bootアプリの起動/停止 • Spring Starter Wizard • Spring Initializr からSpring Boot アプリの雛形を生成 • application.properties(.yml) の編集サポート • プロパティ名の補完 • バリデーション • プロパティ情報のマウスオーバー表示 • application.propertiesをyml形式へ変換 • RequestMappingのコードスニペット補完 • Import Getting Started Content Wizard • Spring公式のチュートリアルガイドのサンプルをワークス ペースにインポート • Quick Search • ワークスペースからテキストを素早く検索するダイアログ • Ctrl(cmd) + Shift + L STS3から継続して使える機能
  • 26. 26Copyright©2018 NTT corp. All Rights Reserved. • Request Mapping View • @RequestMappingのパス情報のリストを表示するビュー • 新機能 ”Navigation” で代替可能 • Live Beans Graph View • 実行中のアプリのBean依存関係をグラフ表示するビュー • STS4ではグラフ表示はできないが、”Live Application Information”でBeanの依存関係は確認可能 • Spring XML config support • Bean IDの自動補完、Beanのクラス名の補完、など • STS4では代替機能なし • Spring XML config validations • 参照先に指定されたBeanが存在しない場合に警告を出す、など • STS4では代替機能なし STS4で削除された機能
  • 27. 27Copyright©2018 NTT corp. All Rights Reserved. STS3 Features in STS4 • どうしてもSTS3のコンポーネントを使いたい場合… • リポジトリの奥底に眠る古いXMLベースのアプリをメンテしな ければならない • 謎の圧力によってSpring Bootの利用が禁止されている • 選択肢 1. STS3を使い続ける 2. STS3のコンポーネントをSTS4にインストールする • 強くは推奨しないがサポートはされている (by 公式wiki) • Eclipse MarketplaceからSpring Tools 3 Add-onをインストー ル STS 3.9.x は2019年の中頃までメンテナンス予定 → それ以降は新しいEclipseへの対応は実施されない
  • 28. 28Copyright©2018 NTT corp. All Rights Reserved. • Spring Tools 4 • Eclipse / VS Code / Atom に対応 • Spring Boot のアプリにフォーカス • 新機能 • Navigation • Live Application Information • マウスオーバー / コードレンズ • Spring Bootではなく、素のSpringを使う場合は… • STS3を使い続ける or STS3をSTS4にインストール • STS3は2019年の中頃までメンテナンス予定 ここまでのまとめ
  • 29. 29Copyright©2018 NTT corp. All Rights Reserved. 実装編 Spring Tools 4 の機能とその実装
  • 30. 30Copyright©2018 NTT corp. All Rights Reserved. STS4はLanguage Serverとして機能を提供することで 複数のIDE・エディタに対応している 複数のIDE・エディタへの対応 Visual Studio Code Language Server として 別プロセスで動作 IDE/エディタの拡張機能を利用 Language Server Protocol
  • 31. 31Copyright©2018 NTT corp. All Rights Reserved. STS4 のリポジトリ Language Server 本体のコード等
  • 32. 32Copyright©2018 NTT corp. All Rights Reserved. STS4 のリポジトリ Atomクライアント用のコード等 eclipseクライアント用のコード等 VSCodeクライアント用のコード等
  • 33. 33Copyright©2018 NTT corp. All Rights Reserved. STS4 のリポジトリ 未対応 未対応
  • 34. 34Copyright©2018 NTT corp. All Rights Reserved. ? ? そんなものはない
  • 35. 35Copyright©2018 NTT corp. All Rights Reserved. • Eclipse LSP4J Java による Language Server / Client 実装のためのライブラリ • Eclipse LSP4E Eclipse用の Language Client を実装するためのライブラリ • Eclipse JDT Language Server Java / Maven / Gradle プロジェクトをサポートする Language Server • Language support for Java for Visual Studio Code Eclipse JDT Language Server の VSCode用の Language Client • VSCode Language Server - Client Module VSCode用の Language Client を実装するためのライブラリ • Atom Language Server Protocol Client Atom用の Language Client を実装するためのライブラリ STS4 を支える技術 https://github.com/eclipse/lsp4j https://projects.eclipse.org/projects/technology.lsp4e https://github.com/redhat-developer/vscode-java https://github.com/atom/atom-languageclient https://github.com/eclipse/eclipse.jdt.ls https://github.com/Microsoft/vscode-languageserver-node/tree/master/client for for for
  • 36. 36Copyright©2018 NTT corp. All Rights Reserved. STS4はLanguage Serverとして機能を提供することで 複数のIDE・エディタに対応している 【再掲】複数のIDE・エディタへの対応 Visual Studio Code Language Server として 別プロセスで動作 IDE/エディタの拡張機能を利用 Language Server Protocol
  • 37. 37Copyright©2018 NTT corp. All Rights Reserved. Microsoftが策定した,プログラム解析器 (Language Server) とそれを利用するツール間で会話するためのプ ロトコル - https://langserver.org LSPを利用するメリット 1. 一つの Language Server だけで複数のクライアント に対応できる 2. クライアントの実装言語とは独立して Language Server を実装できる 3. Language Server が不安定な挙動をしてもクライア ントが引きずられずに済む Language Server Protocol (LSP) 概要
  • 38. 38Copyright©2018 NTT corp. All Rights Reserved. JSON-RPC を利用したメッセージを送り合うシンプルなプロトコル • Request Message:クライアント/サーバ間のリクエスト • Response Message:Request Messageへのレスポンス • Notification Message:レスポンス不要のメッセージ LSP の仕様 Content-Length: 74 { “jsonrpc”:”2.0”, ”id”:4, ”method”:”workspace/symbol”, ”params”:{“query”:””} } Request Message の例: Header Part Content Part JSON-RPC Object 詳細は https://microsoft.github.io/language-server-protocol/specification 参照のこと
  • 39. 39Copyright©2018 NTT corp. All Rights Reserved. 設定で Language Server とのやり取りを出力できるVSCode拡張も あるが,STS4は非対応 LSP のメッセージを覗いてみる Java Extension の場合: 拡張の設定 トレースログ
  • 40. 40Copyright©2018 NTT corp. All Rights Reserved. LSP のメッセージを覗いてみる DEMO
  • 41. 41Copyright©2018 NTT corp. All Rights Reserved. • VSCode では STS4 とのメッセージはTCPで送受信される • localhost内のTCPパケットをキャプチャすることでメッセージを 取得できる TCPパケットのキャプチャによるメッセージの取得 WireSharkによるパケットのキャプチャ: Loopback クライアントが45556ポート LSP のメッセージ
  • 42. 42Copyright©2018 NTT corp. All Rights Reserved. TCPパケットのキャプチャによるメッセージの取得 DEMO
  • 43. 43Copyright©2018 NTT corp. All Rights Reserved. 標準入出力のキャプチャによるメッセージの取得 • Eclipse では STS4 とのメッセージは標準入出力を介して送受信される • プロセスの標準入出力をキャプチャすることでメッセージを取得できる Language Server プロセスの標準入出力のキャプチャ: 標準入力(Client → Server) 標準出力(Server → Client)
  • 44. 44Copyright©2018 NTT corp. All Rights Reserved. 標準入出力のキャプチャによるメッセージの取得 DEMO
  • 45. 45Copyright©2018 NTT corp. All Rights Reserved. Navigation機能使用時のメッセージ Client Client “method”:”workspace/symbol” “param”:{“query”:”xxx”} Array of SymbolInformation “method”:”textDocument/documentSymbol” “param”:{“textDocument”:{”uri”:”file://...”}} Array of SymbolInformation プロジェクト内 ファイル内
  • 46. 46Copyright©2018 NTT corp. All Rights Reserved. SymbolInformationの作成 010 010 010 ① ② 1. プロジェクトから javaファイルを探索 2. javaファイルとclasspath上のファイルからAST(抽象構文 木)を作成 3. ASTをたどりながらSymbolを探索 • 種別ごとに定義されたSymbolProviderにより SymbolInformationを取得 • @Bean / @RequestMapping / @Component … • 取得したSymbolから以下を作成 • プロジェクト全体のSymbolInformationのリスト • ファイル名からSymbolInformationのリストへのMap J ③ プロジェクトのオープン時に一覧を作成しており,即時提要可能 J
  • 47. 47Copyright©2018 NTT corp. All Rights Reserved. 【特例】“query”:“//” Client “method”:”workspace/symbol” “params”:{“query”:”//”} Array of SymbolInformation running Spring Boot Apps JMX 要 Actuator取得したホスト,ポート番号, RequestMappingのパスからURLを組み立てる //から始まるqueryの場合,実行中のSpring Boot アプリケーションか ら JMXを用いてRequestMapping情報を取得 初回リクエスト時に多少のオーバヘッドが発生
  • 48. 48Copyright©2018 NTT corp. All Rights Reserved. Live Application Informationの表示 Client “method” : “sts/highlight” “params” : {“doc”:…, “codeLenses”:[…]} running Spring Boot Apps JMX 要 Actuator 定期的に取得した情報を Language Server から通知 実行中のSpring Boot アプリケーションからJMXを用いて情報を取得 バックグラウンドでポーリングを続けるので,継続的に一定のリソースを消費する 開いているファイルについてのハイライトとCodeLensの情報を通知 リクエストはしない ポーリング
  • 49. 49Copyright©2018 NTT corp. All Rights Reserved. • Serverという名がつくものはとりあえず繋いでみたく なるはず → やってみた • 手順 1. Language Server をデバッグ用のスタンドアローンモード で起動 • TCP の 5007 ポートで待受 2. TCPで初期化リクエストのメッセージを送る • 予めキャプチャしておいた正規のリクエストを利用 3. Language Server からのリクエストにレスポンスする • 一部動的な要素あり 4. Symbol取得のリクエストを送る おまけ1:Language Server に接いでみる
  • 50. 50Copyright©2018 NTT corp. All Rights Reserved. おまけ1:Language Server に接いでみる DEMO
  • 51. 51Copyright©2018 NTT corp. All Rights Reserved. TCPで初期化リクエストのメッセージを送る … LSPの仕様で定められた初期化リクエスト クライアントの機能の対応状況を送る Initialize Request(Client → Server) Response (Server → Client) … Initialized Notification(Client → Server)
  • 52. 52Copyright©2018 NTT corp. All Rights Reserved. Language Server からのリクエストにレスポン スする addClasspathListener Request (Server → Client) STS4独自のリクエスト ランダム値 Response (Client → Server) … Callback Command (Client → Server) Serverから送られてきた値 Classpathのエントリを送る
  • 53. 53Copyright©2018 NTT corp. All Rights Reserved. Symbol取得のリクエストを送る symbol Request(Client → Server) Response (Server → Client) … 正しく接続できていればリクエストに応じた結果が返ってくる
  • 54. 54Copyright©2018 NTT corp. All Rights Reserved. Serverという名がつくものにはとりあえずクライアント を作ってみたくなるはず → 作ってみた Spring Shell と Eclipse LSP4J を利用したCLIのクライアント • 対応機能 • Symbolの取得 • プロジェクト内 • ファイル内 • 実行中のSpring Boot ApplicationのRequestMapping • Live Application Information によるハイライト おまけ2:クライアントを実装してみた
  • 55. 55Copyright©2018 NTT corp. All Rights Reserved. おまけ2:クライアントを実装してみた DEMO
  • 56. 56Copyright©2018 NTT corp. All Rights Reserved. Symbolの取得 プロジェクト内のSymbol取得 ファイル内のSymbol取得
  • 57. 57Copyright©2018 NTT corp. All Rights Reserved. Symbolの取得 生データを出力して確認
  • 58. 58Copyright©2018 NTT corp. All Rights Reserved. Symbolの取得 実行中のSpring Boot ApplicationのRequestMapping取得
  • 59. 59Copyright©2018 NTT corp. All Rights Reserved. ハイライト Live Application Information によるハイライト CodeLens
  • 60. 60Copyright©2018 NTT corp. All Rights Reserved. • Language Server Protocol • 一つの実装で複数のIDE/エディタに機能を提供 • 今後さらに対応が広がる可能性も • Navigation の実装・動作 • プロジェクトを開いた時点でNavigation先を解析 • 実行中のSpring BootアプリのエンドポイントはJMXで収集 • Live Application Information の実装・動作 • JMXで定期的に情報を収集 • Language Server から一方的に通知 実装編まとめ