去年に続きKotlin Festに参加しました(2年目)。今年はスピーカーとして登壇しました。
いつもやっているように見たセッションのメモを自分用にまとめていきたいところですが、自分の登壇の準備も有り、見たセッションは少なめです。(録画出れば見ようと思います)
その代わりに、自分の登壇の経験や当日の様子も少し書きます。
セッションのメモ
Kotlinを支える技術:言語設計と縁の下の力持ち
Jetbrainsのヤンさんの招待セッション。
新しく採用するかもしれないcompanionを通して、プログラミング言語設計とその変遷の話。
言語仕様は一度変えるとなかなか変えられないので、一大決断。
例えば、出版された書籍に影響してしまう。
companion objectがあるが、制約としてクラスに一つしか持てないとか、がある。
Javaからの移行を難しくしている。
その対応としてnamespaceやstaticの導入を検討したが、今有力なのはcompanion。
namespaceは新しいキーワードを導入するのに抵抗がある。
staticは、他の言語で意味が変わったりするキーワードなので混乱を招く恐れがある。
など。
KotlinのリポジトリにKEEPがあり、ここで言語仕様のディスカッションが見れる。
(context parameterについてなど見てみると面白いです。)
また他の更新の話もあり。部分的なindexingは、indexが終わる前に部分的にコードジャンプなどが使えるようになる機能。
すでに一部で入っているとのこと。
Kotlin Build Tools APIの話もあり。
言語設計の話はとても面白かったです。こうやって言語の仕様が決まっていく過程がわかり、その大変さがわかりました。
Kotlin言語仕様書への招待 〜コードの「なぜ」を読み解く〜
EBNFのような言語仕様の表記法がある。
Kotlinでも他の言語でも、そういった記法で仕様書が書かれる。
forやifのあとにカッコや変数がつづく、などの仕様書。
こういった記法はなかなか読み解くのが難しいが、AIを借りれば楽ができる。
関数のオーバーロードで、どの関数が使われるかを通して、具体的に仕様を紹介されていました。
細かい言語仕様になってくるとあまり覚えていないことがある。
そういったとき調べるといろいろ出てきはするが、やはり一次情報は確実な正しさがある。
確かな情報が欲しい場合には言語仕様を見てみると良さそう。
普段あまり意識しないので、興味深く、いい勉強になりました。
Ask the speakerで質問に行きました。
Q: 資料の準備でJetbrainsの方に協力してもらったと言ってたが、どうやって関わった?
A: Kotlinリポジトリのissueで聞いたときに反応してくれて、メールしてもいいよと言われた
このときKotlin Slack Channelもいいよという話をお伝えしました。
Q: 実際に業務で仕様書を見ることはある?
A: Kotlinでは今のところあまりないが、以前Go言語を使っていたときに、パフォーマンス・チューニングのために仕様書を見ることはあった
フルKotlinで作る!MCPサーバー、AIエージェント、UIまで一気通貫したAIエージェントシステム
Koogの内容があり、自分の発表に繋がる内容がある。
しかしこちらは実業務でKoogを使う内容で、より実践的。
MCPをKotlinで実装する話。MCPの通信にはstdio, SSE, Streamable httpがある。
今は最後が一般的とのことだが、Kotlin MCP SDKでは現状対応していないので注意が必要。
Koogではエージェントの状態をどうやって保持するか。
AIAgentはワンショットで、Persistenceに委ねる。
AIAgentServiceがあり、こちらだと複数のAIAgentのインスタンスをまとめて効率的に管理しやすい。 最初はAIAgentServiceがなくて自前でクラスを作っていたが、あとから同じようなAIAgentServiceが出てきた。(このあたり自分の理解が足りず自信がないのでちょっと詳しく調べたい。)
ストリーミング実行時のツール実行は現状制約がある。
自分はKoogを使ったサービスを本番運用を見据えて展開する、ことはまだ十分にできていなかったので、参考になりました。このあたり自分もいろいろ試していきたいです。
ビルドプロセスをデバッグしよう!
ビルドでハマるときはあり、デバッグしたくなる(わかる)
printデバッグも可能だが見るのが大変。
具体的なデバッグの手順が紹介されている。
-Dorg.gradle.debug=trueオプションでビルドプロセスのデバッグを有効にする。
--no-daemonつけるのがおすすめ。
ideでRemote JVM Debugの設定をする。
gradle pluginのリポジトリやKotlin Compiler pluginのリポジトリをクローンしてプラグイン自体をデバッグ可能。
DroidKaigi2024のデバッグのセッションの話もあり、参考になる(自分も参考にしています。)
Ask the speakerでは、remote jvm debugの話がありました。
IDEを2つ開いている状態で、デバッグするようです。なぜ機能するか?という話がありました。
(結論までは聞けなかった...)
KoogではじめるAIエージェント開発
これは私の登壇セッションなのですが、Ask the speakerや懇親会で話したことのメモ。
Q: 結合テストでOllamaを使うと良いという内容があったが、使ってる?性能的に大丈夫?
A: 自分はgentransで結合テストをしています。 現状CIでなくて、ローカルで動かしています。非力なマシンで動くモデルを使っていますが、プロンプトを簡単にし、シンプルなタスクを実行することで、ある程度テストはうまくいっています。現状それでなんとかリグレッション検知の目的は果たしています。(だけどちゃんと運用していくなら、テストコンテナ使って、性能の良いマシンで動かすといいかもしれない)
Q: 割り込みについて。LangChainにはinterruptがある。
A: KoogにはAskToolで割り込みできる。(それ以上はあまり答えられなかった。エージェントが動いている最中に割り込みを入れる話があった気がします。Koogではたぶんそうした機能はない。他にもマルチエージェントの並列処理やパフォーマンスの話も出ていた。マルチエージェントはあまり試せていないのでうまく答えられず)
当日の様子、感想
ブース、Ask the Speaker、懇親会のコミュニケーションが楽しかったです。良い雰囲気で楽しく話せました。
特に自分が登壇したこともあり、登壇を踏まえた話が広がりました。
Ask the Speakerでも感想を言ったり質問してもらえて良かったです。特にエージェントを作りたくなった、といってもらえたことが嬉しかったです。 Xでも反応があり、それも嬉しかったです。
また、発表では自分のマシンの相性問題のトラブルで2分ほど遅れてしまいました。
申し訳なかったですが、スタッフさんの助けもあり、なんとか少しのロスで復旧できました。
改めてありがとうございました。
毎回カンファレンスではAsk the speakerで交流するのが楽しいのですが、
今回は少ししか行く余裕がありませんでした。
個人的にはAsk the Speakerでの交流はとても良いので、確実に行けたらと思います。
登壇した感想
自分の発表も(たぶん)うまく行って良かったです。自分でもまずまずよくできたと思います。
ただ反省点もいくつかあります。もうちょっと配分をこうすればとか、知見の部分をもっと盛り込めればとか。質問にも100%答えられなかった部分もあります。
このあたり今後改善していければと思います。
去年のKotlin FestとDroidKaigiのプロポーザルに挑戦して(去年は落選)以降、1年間LTに挑戦したり、カンファレンスに向けて準備してきたりしていました。
記事を書いたり、新しい技術を試したり、プロポーザルを考えたりしていました。
カンファレンスも倍率は高いので、プロポーザルを出し続けて数年かけて登壇できればいいなと思っていましたが、
Kotlin Festに拾っていただき、貴重な経験ができました。
私はカンファレンスやコミュニティに成長の機会をもらってきました。
登壇経験も自分の成長に繋がることですが、もらってばかりではなく、自分も与える側になれればいいなと思っています。
今回それがどれくらいできたか分かりませんが、今後もなにか貢献できるように情報発信や、登壇活動を続けたいです。
またKoogも素晴らしいライブラリなので、もっと使い倒して、情報発信、あわよくばコントリビュートもしていきたいです。