Tweet / Photo allowed.
This work by
Windymelt
is licensed under
CC BY-SA 4.0
class: center, middle # AI Coding Agent 時代の Scala
2025-03-14 Scala わいわい勉強会 #5 `id:Windymelt` --- # Windymelt - [Windymelt](https://www.3qe.us/)です - 全宇宙でこの ID を使っています - mixi2 もやってるよ - GitHub, X/Twitter, etc... - PGP: `F2FC 63C2 42C0 4D9D` - 2016- [株式会社はてな](https://hatena.co.jp/) - [AIを利用した発話分析ソリューション toitta](https://toitta.com/)の開発 - プライベート - [動画生成ツール ZMM](https://www.3qe.us/zmm/doc) - Scala の記事たくさん[書いてる](https://blog.3qe.us/category/scala) - インターネットが大好き --- # Windymelt
- [PR]プログラミング言語コミュニティ『Scalaわいわいランド』主宰 - ↑ググって〜 --- class: center, middle # 今回は AI 驚き屋になりつつ Scala の話をします --- # 最近人々の魂が Cline によって震わされている - AI Coding Agent - [CLINEに全部賭けろ](https://zenn.dev/mizchi/articles/all-in-on-cline) - 魂、震えてますか? - 使ったことあるよって人は :raising_hand: --- # Cline - みんなもう知ってるだろうけど多少おさらいします - 知らなかったフリをして驚いてください - クリーネだと思ってたけどクラインらしい - 生成 AI (LLM) を利用してコードを記述させるツール/プラグイン - どの LLM プロバイダを利用するかどうかは選べる - VSCode の Extension としてインストールする - すみません、デモはないです --- # Cline v. GitHub Copilot - 今は Copilot Agent が出ているが - Copilot: 賢く補完するのが仕事 - Cline などの Agent 型 AI: ユーザの指示に基いて能動的にファイルを読み、書き、実行する --- # Copilot のユーザストーリー - ユーザはコードの知識を持っている - ユーザは既存のコードに変更を加えようとし、数文字タイプする - Copilot が応答し、LLM の知識やファイル内容から推測した最もらしい補完候補を提示する - ユーザはこれを受諾するか、無視して入力を続ける - ユーザは定型的処理を例外的な速さで実現する --- # Cline のユーザストーリー - ユーザはコードの知識を(ある程度)持っている - ユーザは既存のコードに変更を加えようとし、**Cline に自然言語で指示を出す** - e.g. 「このfoo処理をBarライブラリのハンドラとして呼び出すようなコードをBuzz objectに定義して」 - Cline が応答し、LLM の知識や、必要に応じてプロジェクト内の**複数ファイルを閲覧してコンテキストに読み込み、複数ファイルに書き込む** - ユーザはこれを受諾するか、拒絶して再度指示を与える - ユーザは自らの意図を Cline を通じて例外的な速さで達成する --- # Cline v. GitHub Copilot (2) - Copilot は補完に重きを置いている - コンテキストの幅が狭い - モデルが知ってる知識を迅速にくりだし、空気を読む - 一瞬で FizzBuzz のコードが出て嬉しいが他のファイルの知識を参照したりしない - お前が主体 --- # Cline v. GitHub Copilot (2) - Cline は自律してコードをいじる - (許可すれば)複数のファイルを読み書きするのでコンテキストの幅が広い - (許可すれば)コマンド実行を行い、自律してテスト結果を検証し、再実装する - (許可すれば)ブラウザを開き、ドキュメントを読み込み、UI 動作を確認し、再実装する - 手足が生えている - お前は主体ではない --- # Cline 個人的に面白ポイント - 好きな LLM のプロバイダを使える - OpenRouterってのを使っている - LLM 単体だと Claude 3.7 Sonnet の評判が良い - OpenRouter はトークンを都度購入して消費するモデル(サブスクもあるかは知らない) - ソシャゲの石じゃん - OpenRouter を経由するとトークンを暗号通貨で支払える(???) - いろんな LLM 切り替える君 - Ethereum 連携が最初からあるので、ログインと支払い手段が最初から統合されている - Ethereum のウォレットを接続してWBTCで支払ったら普通に払えてうける --- # マジョリティな言語ではおおむねうまくいくっぽい - TypeScript とか Go とか Python とか - _うまく_: 動く、正しい、意図通り --- # Scala だとどうよ? - Scala 3 で以下のようなコードを書かせた - RSS を読み込んで差分を表示するプロダクト - ZIO を使って非同期ハンドリングや DI を行う - [feedmax](https://github.com/windymelt/feedmax) - RSS / Atom を受信して更新があったら Webhook を発射してくれる君 - 結構難しいのではないかと思っていた - ZIO 特有のイディオム - Windymeltが作った外部ライブラリ(ドキュメントなし)の存在 - 言語がそんなにマジョリティではない --- # 普通にうまく動いた - 「ZIO のしきたりに従ってこのモジュールをリファクタして」 - 「設定を`application.conf`から読み込むようにして」 - 「状態を`state.json`に保存するようにして」 --- # うまくいかない所もあった - Clineはライブラリの最新バージョンがどれかとか、どのライブラリを選ぶべきかの審美眼をもたない - どのライブラリ使うかはこちらで指示する必要がある - が、それでも手で書くよりは reasonable な速度で動く - コンパイルエラーになって手詰りになると、思い付きでガチャガチャ型注釈を入れて遊び出した - 大学一年生のC言語の授業みたいな直し方をする - エラーメッセージ読め(読んでるだろうけど) - たまにsbtを実行しようとするので遅い。結果を読めないこともある - ライブラリの詳細な知識はあまりない - ないメソッドを呼ぼうとする --- # どこに気をつけるべきか? - ファイルはある程度小さく切れたほうがいい - ファイルの全内容をコンテキストとして転送し、また変更結果をコンテキストとして回収する、という挙動 - ファイルがデカいと単にトークンがもったいない - ファイルがデカいと変更が遅い --- # どこに気をつけるべきか? - 難しいことをさせたいときは、人間がコードである程度の指針を示すほうがいい - i.e. 型定義だけ、とか型注釈だけしたコードをポン置きする - Clineは最初からある型定義にかなり忠実に従う(えらいぞ) --- # どこに気をつけるべきか? - `sbtn`を活用する - `sbt`のネイティブ版 - ビルドサーバに接続するので高速 - ビルドサーバがなければバックグラウンドで立ちっぱにしてくれる - 「`sbtn`使ってね」と指示するとそうする --- # どこに気をつけるべきか?まとめ - 細やかなモジュラリティ - 型で Cline に伝える - 高速なビルドサイクル --- # Scalaは案外AI開発に向いてる - きわめて柔軟なモジュールシステム - package / object とアクセス修飾子 - ファーストクラスな関数/型/モジュール - 表現力豊かで堅牢な型システム - Cline がエラーにすぐ気付ける - Cline がどうしたらいいか理解できる - opaque types - type class - 最近はそこそこ高速なビルド - sbtn で結構なんとかなる --- # Windymelt
- [PR]プログラミング言語コミュニティ『Scalaわいわいランド』主宰 - ↑ググって〜