Slide 1

Slide 1 text

Copyrights(c) Henry, Inc. All rights reserved. Kotlinの開発でも AIをいい感じに使いたい サーバーサイドKotlin LT大会 vol.14 @kohii 2025-02-28

Slide 2

Slide 2 text

Copyrights(c) Henry, Inc. All rights reserved. About Me Kohei Ishikawa / @kohii ● 2021.08〜 Henry Inc. ○ Tech Lead ○ Architect ● Indie Hacker ○ SmoothCSV - 最強のCSVエディター ○ MediXplorer - 医科診療行為マスタービューアー ○ Moyuk - ブラウザ上でTypeScriptでツールを作るプラットフォーム ● X: @kohii00

Slide 3

Slide 3 text

Copyrights(c) Henry, Inc. All rights reserved. ヘンリーが作っているもの ● レセコン一体型電子カルテ「Henry」 ○ 電子カルテ: 医療情報を記録・管理するソフトウェア ○ レセコン: 診療報酬制度に基づいた会計情報を管理す るソフトウェア

Slide 4

Slide 4 text

Copyrights(c) Henry, Inc. All rights reserved. 今日話すこと 個人的な課題感 ● TypeScriptの開発では公私でCursorを利用しているが、生産性が段違いだと 感じる ● Kotlinの開発でもこのレベルでAIの恩恵を得られないものか ● Kotlin界隈が置いていかれる危機感

Slide 5

Slide 5 text

Copyrights(c) Henry, Inc. All rights reserved. 私のAIコーディング歴 TypeScript Kotlin 2022年6月 GitHub Copilot w/ VSCode GitHub Copilot w/ IntelliJ 2024年9月 Cursor へ移行 〃 2025年1月 (Cline 併用) 〃

Slide 6

Slide 6 text

Copyrights(c) Henry, Inc. All rights reserved. つらみ

Slide 7

Slide 7 text

Copyrights(c) Henry, Inc. All rights reserved. Kotlin開発 with AI を極限まで突き詰めてみたい 2つの道を検討する: ● 道1. IntelliJでAI支援を最大化する ● 道2. IntelliJ以外でKotlinを開発できるようになる 注: ● ※ ここで話す各ツールに対する評価は個人の主観的な感想 ● ※ 2025年2月現在の情報 ● ※ ローカルでの開発を対象とする (Devin などは対象外)

Slide 8

Slide 8 text

Copyrights(c) Henry, Inc. All rights reserved. 話すこと 1. 道1. IntelliJでAI支援を最大化する 2. 道2. IntelliJ以外でKotlinを開発できるようになる 3. まとめ

Slide 9

Slide 9 text

Copyrights(c) Henry, Inc. All rights reserved. コーディングにおけるAI支援 1. コード補完ツール: ● コードの続きを補完するもの ● 人間がドライバーでAIが支援 2. コーディングエージェント: ● AIが環境を認識し、計画を立て、ツールを駆使してタスクを達成する ● AIがドライバーで人間が監督 3. その他 ● チャットアシスタント、コミットメッセージ生成、バグ発見など 1,2が特に大事だと思うのでここを中心に調べてみる

Slide 10

Slide 10 text

Copyrights(c) Henry, Inc. All rights reserved. 1. コード補完ツール IntelliJ IDEA上で利用可能なコード補完ツール最強種を探したい 評価ポイント: ● 普通の補完: 書きかけのコードから続きを補完 ○ 👉 補完の精度や範囲、応答速度 ● 次の修正の提案: 直近の操作の意図を汲み取り、次の修正を提案する ○ (Cursor TabやCopilot NESなど) ○ 👉 まず、この機能があるかないか

Slide 11

Slide 11 text

Copyrights(c) Henry, Inc. All rights reserved. IntelliJ IDEAで利用可能な主なコード補完ツール ● JetBrains AI Assistant ● GitHub Copilot ● Cody ● Codeium

Slide 12

Slide 12 text

Copyrights(c) Henry, Inc. All rights reserved. GitHub Copilot ● このジャンルの先駆者かつ巨人 ● 多くのIDEやエディタで利用可能 ○ ただしVS Code以外は二級市民扱い ● 実験的な機能やエディタ外の機能もあり、日々進化している ○ 次々リリースするので面白い https://github.blog/changelog/label/copilot/ https://plugins.jetbrains.com/plugin/17718-github-copilot Plans ● Free ($0/月): 補完は2000回/月まで ● Pro ($10/月) ● Business ($19/月) ● Enterprise ($39/月)

Slide 13

Slide 13 text

Copyrights(c) Henry, Inc. All rights reserved. GitHub Copilot ● 補完の精度や応答速度: ○ なかなか良い(体感) ○ 最近 GPT-4o mini ベースの補完モデルが追加され、精度や応答速度が向上 ■ 275,000以上のリポジトリ、30以上の言語を追加学習 ■ JetBrains IDEでも利用可能 (Preview) ● 次の修正の予測: ○ VS Codeでは Next Edit Suggestions (NES) をPreview版として利用可能 ○ JetBrains IDEでは未対応😢

Slide 14

Slide 14 text

Copyrights(c) Henry, Inc. All rights reserved. JetBrains AI Assistant ● JetBrains謹製のAIコーディングアシスタント ● JetBrains IDEでのみ利用可能 ● 機能の豊富さやIDE統合レベルはCopilot (for JetBrains IDE) より上 https://plugins.jetbrains.com/plugin/22282-jetbrains-ai-assistant Plans ● Pro ($10/月) ● Enterprise ($30/月)

Slide 15

Slide 15 text

Copyrights(c) Henry, Inc. All rights reserved. JetBrains AI Assistant ● 補完の精度や応答速度: ○ 2024年11月からMellumという独自のモデルを使用し、性能が大幅に向上 ○ Completion policy を Creative にすると補完してくれやすくなる ○ Copilotとそれほど遜色なし (やや補完発生が控えめな気がする) ● 次の修正の予測: ○ なし

Slide 16

Slide 16 text

Copyrights(c) Henry, Inc. All rights reserved. Cody ● Sourcegraph社のクロスエディタなAIコーディングアシスタント ● OSS https://plugins.jetbrains.com/plugin/9682-cody-ai-code-assistant Plans ● Free ($0/月): 補完使い放題 ○ Chatも200回使える ● Pro ($9/月) ● Enterprise Starter ($19/月)

Slide 17

Slide 17 text

Copyrights(c) Henry, Inc. All rights reserved. Cody ● 補完の精度や応答速度: ○ 応答がかなり早く、激しめに提案してくれる ○ 精度も他と遜色ないレベルと感じた ○ 補完用モデルにDeepSeek-V2を使ってるらしい ● 次の修正の予測: ○ なし

Slide 18

Slide 18 text

Copyrights(c) Henry, Inc. All rights reserved. Codeium ● Codeium社は昨年末にWindsurfをリリースしそちらに注力している感じがす る ● 応答が遅い、精度高くないと感じたので省略 ○ (たまたまかも?)

Slide 19

Slide 19 text

Copyrights(c) Henry, Inc. All rights reserved. コード補完ツールの結論 ● 補完に肝してはどれもだいたい似たような感じで、そこまで大きな差はない ○ 安定感を重視: Copilot、JetBrains AI Assistant ○ 無料で使いたい: Cody ● Cursor Tabのように次の修正の予測ができるものはまだない 😢

Slide 20

Slide 20 text

Copyrights(c) Henry, Inc. All rights reserved. 2. コーディングエージェント ● 現状でIntelliJで使えるGAなサービスはない ● Junie (by JetBrains) ○ まだEAPなのでWaitlistに登録して待て ○ 招待されたユーザーがちらほら出始めている ● GitHub CopilotのエージェントはVS Codeでプレビュー版 ○ 将来的にJetBrains IDEに来るかな...?

Slide 21

Slide 21 text

Copyrights(c) Henry, Inc. All rights reserved. 身も蓋もない話 本気で優れたAI統合機能を作るには、現状ではエディタ本体への修正が不可欠 ● この分野で強い企業はVS Codeをフォーク (Cursor, Windsurf) ○ Windsurfは元々各エディタ向け拡張Codeiumを提供していたが限界に直面したとのこと https://www.latent.space/p/windsurf ● GitHub Copilotも、VS CodeにCopilotのための修正を多く入れている ○ 「Copilot Chatはその深いUI統合によりVS Codeと同期してリリースされる」 https://marketplace.visualstudio.com/items?itemName=GitHub.copilot ○ VS CodeのリリースノートのトップセクションはCopilotに関するもの ● JetBrainsも、AI Assistantの優位性はIDEとの統合レベルと言っている ○ https://www.jetbrains.com/ai/ → 単なるプラグインの立場では限界があるようだ

Slide 22

Slide 22 text

Copyrights(c) Henry, Inc. All rights reserved. IntelliJでAI支援を最大化する道 の結論 ● 補完ツール: ○ 👍通常の補完はVS Codeで使えるものと遜色ない ○ 👎Cursor Tab相当のものはない ○ → IDEとしては優れているので、通常の補完によるコーディングで頑張る ● コーディングエージェント: ○ 👍Junie by JetBrainsが開発中 ○ 👎VS Codeベースのものに比べて遅れを取っている ● IntelliJがどれほど優れたAI統合IDEになれるかはJetBrains次第 ○ IntelliJに賭ける/応援するならJetBrains AI Assistantを使おう

Slide 23

Slide 23 text

Copyrights(c) Henry, Inc. All rights reserved. 話すこと 1. 道1. IntelliJでAI 支援を最大化する 2. 道2. IntelliJ以外でKotlinを開発できるようになる 3. まとめ

Slide 24

Slide 24 text

Copyrights(c) Henry, Inc. All rights reserved. 「IntelliJ以外で」=「VS Codeで」とする ● VS Code界隈がAIコーディングエディタの先進国 ● VS CodeでKotlin開発できるなら、CursorやWindsurfでもできる ○ これらはVS Codeのフォークで、基本的な操作や利用可能な拡張は同じ ○ 1つ選ぶなら今のところCursorがトップランナーだと思われる ○ ちなみにヘンリーでは希望する人にCursorを配ってます

Slide 25

Slide 25 text

Copyrights(c) Henry, Inc. All rights reserved. 「VS CodeでKotlinの開発ができる」=「LSPが使える」 ● VS CodeでKotlinの開発ができる ● = コード補完、エラー診断、参照の検索等ができる ● = KotlinのLanguage Serverが利用できる

Slide 26

Slide 26 text

Copyrights(c) Henry, Inc. All rights reserved. Language Server ● エディタに補完やエラー診断などの機能を提供するバックグラウンドプロセ ス ● エディタとは独立して動作し、標準化されたプロトコル(LSP)で通信する ● VS Codeのために開発されたが、多くのエディタで採用されている

Slide 27

Slide 27 text

Copyrights(c) Henry, Inc. All rights reserved. KotlinのLanguage Server実装 ● 公式のもの: ○ なし ● コミュニティ主導: ○ fwcd/kotlin-language-server ○ SuduIDE/ideals

Slide 28

Slide 28 text

Copyrights(c) Henry, Inc. All rights reserved. JetBrainsはLanguage Serverを提供しない? ● 「現時点ではLSPをサポートする予定はありません。その代わりに、私たちは独自のIDEである IntelliJ IDEAで最高のKotlin開発体験を提供することに集中しています。」(2017) ● 同スレッドで2020年にも否定 https://discuss.kotlinlang.org/t/any-plan-for-supporting-language-server-protocol/2471

Slide 29

Slide 29 text

Copyrights(c) Henry, Inc. All rights reserved. JetBrainsはLanguage Serverを提供しない? 「当面そのような計画はありません」 (2025) https://youtrack.jetbrains.com/issue/IJPL-175427/Support-running-Intellij-in-a-headless-mode-to-use-as-a-Language-Server

Slide 30

Slide 30 text

Copyrights(c) Henry, Inc. All rights reserved. JetBrainsはLanguage Serverを提供しない? ● 結論: しないようだ ● JetBrainsが世の中の状況を見て方針を変える可能性に期待 ○ 5月のKotlin Confの発表にちょっとだけ期待......

Slide 31

Slide 31 text

Copyrights(c) Henry, Inc. All rights reserved. コミュニティ主導のLanguage Server実装 ● fwcd/kotlin-language-server ● SuduIDE/ideals

Slide 32

Slide 32 text

Copyrights(c) Henry, Inc. All rights reserved. fwcd/kotlin-language-server ● https://github.com/fwcd/kotlin-language-server ○ Star: 1.8k ○ 最終コミット: 2025-02-05 ● コミュニティ主導のKotlinのLSP実装 ● @georgewfraserさんが作り、@fwcdさんがメンテ ○ コミットはだいたい依存ライブラリの更新くらいであまり活発ではない ● VS Codeでは拡張を通して利用可能 ○ https://marketplace.visualstudio.com/items?itemName=fwcd.kotlin ○ 自動的にLSをダウンロードして起動してくれる ○ Last Release: 2024-12-06 (その前は2024年7月)

Slide 33

Slide 33 text

Copyrights(c) Henry, Inc. All rights reserved. fwcd/kotlin-language-server ● 実用に耐えるか? ○ エラー診断や補完候補表示が遅い ○ CPU、メモリをアホほど食う ○ コードベースの大きさによるが、Henryのバックエンドのリポジトリを開くと最終的に CPU800%くらい持っていかれて何もできなくなる ● 小さなプロジェクトならそこそこ動く! ○ が、まだまだ不安定で仕事での利用は厳しそう…

Slide 34

Slide 34 text

Copyrights(c) Henry, Inc. All rights reserved. IdeaLS ● https://github.com/SuduIDE/ideals ○ Star: 76 ○ 最終コミット: 2024年5月 ● 裏でヘッドレスなIntelliJを動かし、補完や診断結果をLSP経由で提供するVS Code拡張

Slide 35

Slide 35 text

Copyrights(c) Henry, Inc. All rights reserved. IdeaLS ちなみにFleet (by JetBrains) もKotlin開発時にIntelliJをバックエンドのエンジンとして動 かす。発想は同じなのでなかなか筋が良いのでは…? https://www.jetbrains.com/fleet/

Slide 36

Slide 36 text

Copyrights(c) Henry, Inc. All rights reserved. IdeaLS ● 開発状況: ○ 最終コミット: 2024年5月 ○ 最近ほぼ息をしてない… ● Forks: ○ elebeaup/ideals : これが一番進んでる(2025年2月にコミットあり) ○ kohii/ideals : ↑をフォークして IntelliJ IDEA のバージョンとかを上げた ■ フォーク元に取り込まれてた ● 実用性: ○ 動いたり動かなかったりする → 動作が不安定であり、実務での利用は厳しい

Slide 37

Slide 37 text

Copyrights(c) Henry, Inc. All rights reserved. LSなしでCursor使うのはどう? ● Cursor Tabは人間が主導するので、ないと結構困る ○ LSなしCursorよりは、IntelliJ + (Copilot or AI Assistant) の方が良い ● コーディングエージェントはLSなくても結構どうにかなる ○ LSある場合のメリット: ■ 多くのエージェントはエラー診断を環境情報として認識し利用する ● 「コードを書き換えたら必ずコンパイルすること」みたいな指示で補う ■ 監督役の人間も生成されたコードにエラーや警告があるか瞬時にわかる ■ シームレスにコーディングの主導権を交代できる → というわけで次にエージェントについて話す

Slide 38

Slide 38 text

Copyrights(c) Henry, Inc. All rights reserved. コーディングエージェント ● AIコーディングエージェントとは ○ AIエージェント = 環境を認識し、計画を立て、ツールを駆使してタスクを達成するAI ○ AIコーディングエージェント = コーディングを行うエージェント ● エージェントが利用するツールの種類: ○ 知識の拡張: WebブラウジングやDBアクセスなど、情報を取得するためのツール ○ 能力の拡張: ターミナルや計算機の利用など、エージェントの機能を強化するツール ○ 書き込みアクション: コードの更新やPR作成など、環境に直接影響を与えるアクション ○ だいたいMCPとかで追加のツールを与えられるようになっている

Slide 39

Slide 39 text

Copyrights(c) Henry, Inc. All rights reserved. Kotlinでのコーディングエージェントの利用 ● 主要なコーティングエージェント ○ Cursor Agent (旧ComposerのAgentモード) ○ Windsurf Cascade ○ GitHub Copilot Edits (Preview) ○ Cline系列 (Roo Code, CoolCline) ● お好きなのを使えばOK ○ Cline系列はOSSなので中身が透明 & 改造できる ○ Cursor AgentはUIなど細かいところで気が効いていてGood ○ Windsurf Cascadeは評判良い(私は使ったことない) ○ それぞれクセがあるのでプロジェクトルールなどで調教

Slide 40

Slide 40 text

Copyrights(c) Henry, Inc. All rights reserved. Kotlinでのコーディングエージェントの利用 注意点: エージェントによってはKotlinがちょっと不利になる場合がある ● Clineはtree-sitterを使ってコードのメンバー定義をリストアップするツー ルを与えられているが、Kotlinは未対応 ○ Roo CodeにKotlin対応のPR送ったけど放置されてる https://github.com/RooVetGit/Roo-Code/pull/721 ● GitHub Copilotも同様らしい https://sizu.me/laiso/posts/rzhftmu6k8tx ● (どれほどの影響があるかは未検証)

Slide 41

Slide 41 text

Copyrights(c) Henry, Inc. All rights reserved. ヘンリーではRoo Code、Cursor Agentをいち早く利用 ● 繰り返し似たようなコードを作るところで特に有効 ○ プロンプトはMarkdownでコミットしておき、チャットUIで @prompt.md のように参照 ○ 次以降うまく行くように、ルールやプロンプトを育てる/育てさせる ● コツ: ○ 難しいタスクはいくつかのステップに分ける / フォーカスを絞る ○ 計測器を与えてフィードバックループを回させる ■ コンパイルやテストが通るか、パフォーマンス計測など ○ 必要な情報を参照できるようにする ■ MCP実装しなくても、Terminal経由でかなりいろいろできる ○ AIが働きやすいように構造を整備する

Slide 42

Slide 42 text

Copyrights(c) Henry, Inc. All rights reserved. IntelliJ以外でKotlinを開発できるようになる道 の結論 ● 現存するLanguage Serverはまだ不安定で、業務での利用は難しい ○ 状況によっては動くので期待は持てる ○ 今こそAIのパワーでみんなで改善しまくれば実用レベルになるかも…? ● エージェントは普通に使えるので、今すぐ使おう

Slide 43

Slide 43 text

Copyrights(c) Henry, Inc. All rights reserved. 話すこと 1. 道1. IntelliJでAI 支援を最大化する 2. 道2. IntelliJ以外でKotlinを開発できるようになる 3. まとめ

Slide 44

Slide 44 text

Copyrights(c) Henry, Inc. All rights reserved. まとめ ※個人の感想としての結論 ● 現状ではどちらの道でもTypeScript with Cursorの生産性にはまだ及ばない ● IntelliJ IDEAとCursor(など)を切り替えて利用しつつ、JetBrainsに期待する ○ VS Codeベースのエージェントを利用しつつ、コードを書く際にはIntelliJ with (AI Assistant or Copilot) を使う ○ Junieの完成度が上がればIntelliJだけで完結しそう

Slide 45

Slide 45 text

Copyrights(c) Henry, Inc. All rights reserved. おまけ: JetBrains IDEとCursorを相互に行き来する方法 ● この拡張が超便利 ○ Switch2IDEA: Cursorの拡張 ○ Switch2Cursor: JetBrains IDEのプラグイン ○ どちらも@qczoneという方が開発 ● Alt+Shift+O で今開いているファイルのカーソル位置を、もう一方のエディ タで瞬時に開ける

Slide 46

Slide 46 text

Copyrights(c) Henry, Inc. All rights reserved. おまけ2: Junieを使ってみた感想 招待いただいたのでちょっと使ってみた ● 今までのエージェントとはちょっと異質な感じがする ● 時間をかけてアウトプットをすごいブラッシュアップしてくれる ● さすがのIDE統合 ○ IDE上でのエラーや警告をフィードバックとして使ってくれる ○ テスト実行はターミナル経由ではなく、IntelliJ内で実行し結果を表示 ● よしなにやってくれようとする ○ ユーザーと対話しない。計画を箇条書きして、やったことを淡々と報告 ○ モデル選べない(ベストなものを選んでくれるらしい) ● 日本語で指示しても英語しか使わない