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
290
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
37
ゴリラ.vim #36 ~ Vim x SNS ~ スポンサーセッション
yasunori0418
1
2.6k
Other Decks in Programming
See All in Programming
Spec Driven Development | AI Summit Vilnius
danielsogl
PRO
1
150
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
1.2k
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
3k
ふにゃっとしない名前の付け方 〜哲学で茹で上げる、コシのあるソフトウェア設計〜
shimomura
0
120
書き換えて学ぶTemporal #fukts
pirosikick
2
370
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
130
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
730
AI時代になぜ書くのか
mutsumix
0
380
「OSSがあるなら自作するな」は AI時代も正しいか ── Build vs Adopt の新しい判断基準
kumorn5s
7
2.6k
AIと共に生きる技術選定 2026
sgash708
0
140
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
620
Building on Bluesky's AT Protocol with Ruby
mackuba
0
110
Featured
See All Featured
Bash Introduction
62gerente
615
210k
Paper Plane (Part 1)
katiecoart
PRO
0
7.5k
[SF Ruby Conf 2025] Rails X
palkan
2
1k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
160
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
180
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Fireside Chat
paigeccino
42
3.9k
Building Applications with DynamoDB
mza
96
7k
Why Our Code Smells
bkeepers
PRO
340
58k
The agentic SEO stack - context over prompts
schlessera
0
780
Building an army of robots
kneath
306
46k
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