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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
yasunori
April 08, 2026
Programming
540
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
48
ゴリラ.vim #36 ~ Vim x SNS ~ スポンサーセッション
yasunori0418
1
2.8k
Other Decks in Programming
See All in Programming
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
240
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
200
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
120
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
180
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.7k
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
140
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
500
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.3k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.6k
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
250
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
370
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Mobile First: as difficult as doing things right
swwweet
225
10k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Six Lessons from altMBA
skipperchong
29
4.3k
GraphQLとの向き合い方2022年版
quramy
50
15k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
30 Presentation Tips
portentint
PRO
1
340
Java REST API Framework Comparison - PWX 2021
mraible
34
9.4k
The Cult of Friendly URLs
andyhume
79
6.9k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
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