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
yasunori
April 08, 2026
Programming
190
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
33
ゴリラ.vim #36 ~ Vim x SNS ~ スポンサーセッション
yasunori0418
1
2.5k
Other Decks in Programming
See All in Programming
実用!Hono RPC2026
yodaka
2
270
Lightning-Fast Method Calls with Ruby 4.1 ZJIT / RubyKaigi 2026
k0kubun
3
1.3k
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
280
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
220
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
290
t *testing.T は どこからやってくるの?
otakakot
1
710
GitHubCopilotCLIをはじめよう.pdf
htkym
0
270
Kubernetes上でAgentを動かすための最新動向と押さえるべき概念まとめ
sotamaki0421
3
680
[RubyKaigi 2026] Require Hooks
palkan
1
230
iOS機能開発のAI環境と起きた変化
ryunakayama
0
190
AIを導入する前にやるべきこと
negima
2
260
🦞OpenClaw works with AWS
licux
1
260
Featured
See All Featured
Utilizing Notion as your number one productivity tool
mfonobong
4
290
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
250
sira's awesome portfolio website redesign presentation
elsirapls
0
220
The SEO identity crisis: Don't let AI make you average
varn
0
450
For a Future-Friendly Web
brad_frost
183
10k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
500
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.3k
Embracing the Ebb and Flow
colly
88
5k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
350
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
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