Upgrade to Pro — share decks privately, control downloads, hide ads and more …

kotlin-lsp の開発開始に触発されて、Emacs で Kotlin 開発に挑戦した記録...

Avatar for nabeo nabeo
November 01, 2025

kotlin-lsp の開発開始に触発されて、Emacs で Kotlin 開発に挑戦した記録 / kotlin‑lsp as a Catalyst: My Journey to Kotlin Development in Emacs

Avatar for nabeo

nabeo

November 01, 2025
Tweet

More Decks by nabeo

Other Decks in Technology

Transcript

  1. Copyright © Henry, Inc. All rights reserved. kotlin-lsp の開発開始に触発されて、 Emacs

    で Kotlin 開発に挑戦した記録 株式会社ヘンリー SRE 渡辺 道和 (nabeo) Kotlin Fest 2025
  2. Copyright © Henry, Inc. All rights reserved. X: @nabeo Blog:

    https://nabeop.hatenablog.com/ • 渡辺 道和 (nabeo) ◦ 2023年6月にインフラが得意な SRE として ジョイン ◦ Kotlin 暦: 2年半 ◦ Emacs 暦: そろそろ四半世紀 Kotlin はほぼ読み専。稀に既存のコードをちょこっとだけ 書き換えるなどしている。 自己紹介 2
  3. Copyright © Henry, Inc. All rights reserved. 3 No Emacs,

    No Life Emacs の開発終了が 僕のエンジニア人生の終了だと思っている
  4. Copyright © Henry, Inc. All rights reserved. • AI 以前に

    LSP サーバの補助がないとコードリーディングの効率に影響する ◦ 言語やプロジェクトに慣れていないうちは定義元ジャンプや参照先ジャンプがないと厳しい • KotlinConf 2025 以前にも Kotlin における LSP サーバ実装は存在はしてい た ◦ 大規模なプロジェクトでは実用に耐えない状態だった ◦ 個人開発のプロダクトだったので開発も滞りがち • IntelliJ IDEA は LSP サーバそのものではないが、LSP で提供される機能が 実装されている ◦ Kotlin 開発では IntelliJ IDEA 一択という状況 現代において LSP は必須 4
  5. Copyright © Henry, Inc. All rights reserved. KotlinConf 2025 Unpacked:

    Upcoming Language Features, AI-Powered Development, and Kotlin Multiplatform Upgrades | The Kotlin Blog KotlinConf 2025 でまさかの LSP サーバ実装について言及される 6
  6. Copyright © Henry, Inc. All rights reserved. • 使い慣れたエディタを使いたい ◦

    自分が一番使い慣れているエディタが Emacs だった ◦ このスライドも k1LoW/deck を使って Emacs で作っています • エコシステムが充実している環境であれば自分にとって一番快適な環境を作 ることができる ◦ 使用する言語によってエディタを使い分けたくない なぜ、Emacs を使いたいのか? 8
  7. Copyright © Henry, Inc. All rights reserved. • なにはなくとも LSP

    クライアント • シンタックスハイライトは欲しい • リンターもあれば嬉しい 現時点で Emacs でこれらをどれほどカバーできるかに挑戦してみた 9
  8. Copyright © Henry, Inc. All rights reserved. • 2つの選択肢がある ◦

    lsp-mode ◦ eglot • eglot は Emacs に標準で組み込まれている • lsp-mode は 3rd パーティのパッケージとして提供されている Emacs での LSP 事情 11
  9. Copyright © Henry, Inc. All rights reserved. kotlin-lsp はどちらでも使える •

    lsp-mode は機能が豊富で様々な LSP サーバに対応している • eglot はシンプルに使える lsp-mode v.s. eglot 12
  10. Copyright © Henry, Inc. All rights reserved. • 2ヶ月前くらいまでは eglot

    を使っていたけど、lsp-mode に乗り換えた • 開発環境の快適さを追求できる ◦ lsp-mode がデファクトスタンダードの位置にいる ◦ lsp-mode には機能を拡張する lsp-ui や consult-lsp など多くのツールが存在している ◦ 保存時に LSP サーバの機能を使ってフォーマットもしてくれる ◦ ドキュメントが豊富 個人的には lsp-mode 推し (になった) 13
  11. Copyright © Henry, Inc. All rights reserved. 14 kotlin-lsp で

    ktorio/ktor-samples を読んでいる様子
  12. Copyright © Henry, Inc. All rights reserved. 大前提: pre-alpha という位置付けなので転んでも泣かない覚悟が必要!!

    • メモリ消費が激しくて、初期化時に OOM エラーが発生する場合がある ◦ ラッパースクリプト内の Java の起動引数をよしなにする • すくなくとも macOS では最新の v0.253.10629 ではコード補完がうまく動 かない ◦ Github でも不具合報告として複数の issue が立っている ◦ 一つ前の v0.252.17811 はちゃんと使える • 最後のリリースから2ヶ月以上新しいリリースがされていない ◦ v0.253.10629 のリリース前に2週間ごとのリリースサイクルが予告されていた ◦ クローズドなコードからの分離がうまくいっていないのではないか? ◦ GitHub 上では頻繁にコミットが積まれているので信じて気長に待つ kotlin-lsp を使う時の注意点 15
  13. Copyright © Henry, Inc. All rights reserved. • コードの構文を分析して CST

    を作成する • GitHub で開発されてコードハイライトやアウトライン解析などで利用され ている • Emacs では 29 から標準で使える様になった • 各言語ごとにパーサーが開発されている Tree-sitter 17
  14. Copyright © Henry, Inc. All rights reserved. • fwcd さんが

    Kotlin 向けのパーサーを公開している • M-x treesit-install-language-grammar して kotlin を選択すると ライブラリがコンパイルされる ◦ kotlin 関連のファイルを開くとメジャーモードが kotlin-ts-mode となり Tree-sitter に よるシンタックスハイライトが有効になる Emacs で Tree-sitter を使う 18
  15. Copyright © Henry, Inc. All rights reserved. • Emacs では

    Flycheck がデファクトスタンダードとなっている ◦ lsp-mode のエラーなども Flycheck で確認することができる • Flycheck はリンターなどをチェッカーとして定義して使用する • Kotlin 向けのチェッカーは flycheck-kotlin というパッケージが存在する ◦ 内部では ktlint が使われている ◦ 会社ではリンターとして detekt を使っているが Flycheck 用のチェッカーが見つからなかった 20 Flycheck
  16. Copyright © Henry, Inc. All rights reserved. • 編集中のファイルに対応しているチェッカーのリストのうち最初のチェッ カーをデフォルトで使う

    ◦ lsp-mode のチェッカーがリストの一番先頭にきているので、flycheck-kotlin はデフォルト では使えない ◦ M-x flycheck-select-checker で選択する必要がある • flycheck-add-next-checker を使って lsp-mode のチェッカーの後に flycheck-kotlin のチェッカーを実行させる ◦ kotlin-lsp は外部のパッケージの読み込みなどに対応していないので、lsp-mode 由来のエ ラーが大量にでてくるのでノイズになる lsp-mode を組み合わせた時に複数のチェッカーを組み合わせる 22
  17. Copyright © Henry, Inc. All rights reserved. 俺たちの戦いはこれからだ!! • 他の言語と比較すると

    Kotlin 開発では IntelliJ IDEA 一強時代が長かったの でエコシステムの充実度は低いといわざるを得ない ◦ 例えば、Emacs から gradle の任意のタスクを実行するようなパッケージは存在しなさそう だった • 公式による LSP サーバ実装の開発が開始されて機運は高まってきている (と 思いたい) ◦ 少なくとも IntelliJ IDEA 以外のエディタを使った Kotlin 開発の可能性は出てきた ◦ 特に AI との親和性が高い Cursor や Kiro などのエディタの現実味はあるはず • Emacs の設定は GitHub で公開しているので参考にしてください ◦ https://github.com/nabeo/dot.emacs まとめ 23
  18. Copyright © Henry, Inc. All rights reserved. 24 ヘンリーブースでもっとエディタ談義しませんか? 採用情報

    募集中の採用ポジションや募集要項などがご確認いた だけます。 オープンポジションのカジュアル面談も募集していま すので、お気軽にお申し込みください。 技術ブログ ヘンリー製品開発チームが運営する技術ブログです。