Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Server-Side Kotlin LT大会 vol.18 [Kotlin-lspの最新情報...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
yasunori
April 08, 2026
Programming
940
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
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
200
Tried writing it vim9script
yasunori0418
0
71
ゴリラ.vim #36 ~ Vim x SNS ~ スポンサーセッション
yasunori0418
1
3.1k
Other Decks in Programming
See All in Programming
ChromeでローカルLLM
ryu1013
0
160
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
190
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.3k
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
190
Jetpack Compose Mechanisms
skydoves
3
860
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
130
パスワード再設定メールのURLについて知っておこう
uyuki234
0
180
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
610
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.3k
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
380
We Are The Robots
honzajavorek
0
400
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
320
Visualization
eitanlees
153
17k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
YesSQL, Process and Tooling at Scale
rocio
174
15k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Embracing the Ebb and Flow
colly
88
5.2k
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