Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Server-Side Kotlin LT大会 vol.18 [Kotlin-lspの最新情報...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yasunori
April 08, 2026
Programming
110
1
Share
Server-Side Kotlin LT大会 vol.18 [Kotlin-lspの最新情報と Neovimのlsp設定例]
https://server-side-kotlin-meetup.connpass.com/event/387213/
yasunori
April 08, 2026
More Decks by yasunori
See All by yasunori
Tried writing it vim9script
yasunori0418
0
28
ゴリラ.vim #36 ~ Vim x SNS ~ スポンサーセッション
yasunori0418
1
2.4k
Other Decks in Programming
See All in Programming
AIエージェントで業務改善してみた
taku271
0
510
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
470
How Swift's Type System Guides AI Agents
koher
0
230
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
4
2.9k
iOS機能開発のAI環境と起きた変化
ryunakayama
0
180
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
160
Java 21/25 Virtual Threads 소개
debop
0
340
Swift Concurrency Type System
inamiy
0
480
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
2
140
Vibe NLP for Applied NLP
inesmontani
PRO
0
360
KagglerがMixSeekを触ってみた
morim
0
370
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.6k
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
Everyday Curiosity
cassininazir
0
190
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Fireside Chat
paigeccino
42
3.9k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
670
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.3k
ラッコキーワード サービス紹介資料
rakko
1
3M
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
270
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
We Have a Design System, Now What?
morganepeng
55
8.1k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
160
Transcript
Kotlin-lspの最新情報と Neovimのlsp設定例 Server-Side Kotlin LT大会 vol.18 2026年4⽉8⽇ 株式会社ログラス 1
のコードを⾒るとき、 何のエディタを使っていますか?
None
全てが揃う、間違い無しの選択
でも、私は…
6
self-intro
LSP(Language Server Protocol) とは 8
LSP(Language Server Protocol)とは 解決する課題: "M × N" の壁 9 以前は、新しいエディタ(Vim,
Sublime Text, IntelliJ等)で、新しい⾔語(Kotlin, Rust, Go等)を使おうとするたびに、専⽤のプラグインをゼロから開発する必要があり ました。 • 以前: ⾔語数 (M) × エディタ数 (N) の開発コストが発⽣ • LSP導⼊後: ⾔語サーバーが1つあれば、共通プロトコルを通じて全エディタで動作
10
LSP(Language Server Protocol)とは LSPの仕組み: エディタとサーバーの対話 11 エディタ(クライアント)と、解析エンジン(サーバー)が JSON-RPC で通信します。 1.
Editor: 「今、main.kt の5⾏⽬、10列⽬にカーソルがあるよ」 2. Language Server: 「そこなら、println という関数が補完候補だね」 3. Editor: (補完リストを表⽰)
LSP(Language Server Protocol)とは 提供される主な機能 12 • コード補完(IntelliSense, Completion) • 定義へのジャンプ
/ 参照元検索 • ホバーによるドキュメント表⽰ • リアルタイムの静的解析(警告‧エラー表⽰)
kotlin-lspについて 13
• これまでKotlinのLanguage Serverはコミュニティ版しか存在しなかった ‐ https://github.com/fwcd/kotlin-language-server • 2025年のKotlinConf Keynoteで公式がKotlinのlanguage serverを開発することを発表 ‐
発表段階ではPre-alpha版、現時点でもPre-alpha版 ‐ https://www.youtube.com/shorts/YE8UzPavOTA • ソースコードは⼀部公開というステータス ‐ ユーザーによるビルドは不可能 ‐ IntelliJに組込まれているKotlinプラグインの機能を kotlin-lspに移植作業中というステータス • リリースノートでは毎週リリースという表記はある ‐ ただ、現時点ではリリース間隔は不定期 ‐ https://github.com/Kotlin/kotlin-lsp/blob/main/RELEASES.md kotlin-lspについて KotlinConf 2025で発表された”公式の”language server 14
IntelliJを使わなくても Kotlinが書ける
つまり、Vimmerの私としては 激アツなわけです!!
そうは⾔ってもkotlin-lspはPre-alpha版 課題は盛り沢⼭な状態でした…
kotlin-lspについて Kotlin-lspの課題 18 • VSCode以外で使う場合は、Standalone版を実⾏する必要がある。 ‐ 公式の開発メンバーの誰かがkotlin-lsp単体を動かすことができたスクリプトを使っている状態 • メモリ使⽤量が⾮常に多い ‐
巨⼤なプロジェクトになるほどメモリ使⽤量が多くなるので -Xmx24G みたいなオプションを付ける ‐ https://speakerdeck.com/nabeo/use-kotlin-lsp-in-emacs?slide=9 • Composite Buildに対応していない ‐ 複数モジュールの読み込みはひと⼿間加える必要がある ‐ 後述するNeovimの設定
そして、2026年3⽉20⽇…
20
v262.2310.0のリリース 🎉 !!!!
22 kotlin-lspについて v262.2310.0 のすごいところ • Kotlin 2.3.0のサポート • 実装‧型定義ジャンプの追加 •
いくつかのコードアクション追加 • パフォーマンス改善とメモリリークバグの修正 ‐ 体感ではあるが、明かにメモリ使⽤量が少なくなっている • Mavenからのプロジェクトインポートがサポートされる • Gradleのプロジェクトインポートが安定
Gradleのプロジェクトインポートが安定化
念願のComposite Buildの対応
じゃあ、⼿放しで使えるのか? と⾔われると、そうでも無い。
まだ”設定させていただける”余地はある。
Neovimの設定例 27
Neovimの設定例 そもそも、”設定させていただける”とは? 28 • VimもNeovimも基本的に設定しないと便利に使えません。 • 簡単には使えないですが、どういう仕組みで動いているのかを理解できるようになれます。 • 仕組みを理解できるようになると、理解が深まり、更なる改善案が⽣れます。 •
改善をしていけば、作業効率は向上していきます。 • 作業効率の向上が⾒込める”設定”という⾏為、とても素敵だと思いませんか? • つまり、”設定させていただける”ことは感謝すべきことです。
故に 設定させていただきありがとうございます。
Neovimの設定例 kotlin-lsp における Workspace Folders 設定 -> Gradle composite build
を LSP に認識させる仕組み 30 settings.gradle.kts の includeBuild() は、別ディレクトリのプロジェクトをビルドに組み込む。 メインプロジェクトの rootUri 外にソースが分散するため、LSP に追加で認識させる必要がある。
Neovimの設定例 問題 ー LSPサーバーの認識範囲 31 LSP サーバーは起動時に rootUri(1ディレクトリ)しか認識しない。 includeBuild 先のコードはインデックス対象外となり、以下の問題が発⽣する:
• 定義ジャンプが機能しない • 型解決に失敗する • 偽のエラー診断が表⽰される
32
Neovimの設定例 解決策 ー workspace/didChangeWorkspaceFolders 33 LSP 仕様に定義された通知メソッドで、サーバーの認識対象ディレクトリを動的に追加‧削除できる。 Neovim では vim.lsp.buf.add_workspace_folder()
を呼ぶことでこの通知が送信される。
Neovimの設定例 34
Neovimの設定例 なぜ on_init で実⾏するか 35 • on_init はkotlin-lsp起動の初期段階である initialize レスポンス直後
‐ 編集中に使⽤されるインデックスの構築前に呼ばれる。 • このタイミングで workspace folder を追加することで、 サーバーが最初のスキャンから全ソースを認識できるようになる ‐ 図解は次ページへ
Neovimの設定例 36
Neovimの設定例 この設定による効果とまとめ 37 • workspace folder 追加により得られる改善: ‐ Before: 別プロジェクトへの定義ジャンプ時にインデックス作成と読み込み
‐ After: 起動初回の読み込みで完結し、⾼速に定義ジャンプ可能 • 読み込み時間はプロジェクト数に依存 • まとめ ‐ kotlin-lsp v262.2310.0 はめっちゃ良いぞ!! ‐ いっぱい設定できると学びと効率化が得られるぞ!! ‐ Gradle composite build + LSP の組み合わせでは workspace folder の動的追加は効果的 • kotlin-lsp 固有ではなく、workspace folders 対応の LSP サーバー全般に適⽤可能 ‐ 詳しい設定は私のdotfilesを⾒てください! • https://github.com/yasunori0418/dotfiles
38