Slide 1

Slide 1 text

© Link and Motivation Group AI初心者でも始められた! Aiderとともに進める ライブラリアップデートの第一歩 株式会社リンクアンドモチベーション 中上 裕基

Slide 2

Slide 2 text

2 © Link and Motivation Group 中上 裕基(なかがみ ゆうき) @nakagam3 自己紹介 1 2015年〜 印刷会社でエンジニアとしてキャリアをスタート 2 2019年〜 大手通信会社でフロントエンドエンジニア/スクラムマスターとしてオンライ ンストアの立ち上げに携わる 3 2022年〜現在 株式会社リンクアンドモチベーションでチームの 生産性・開発者体験の向上というミッションのために奮闘中

Slide 3

Slide 3 text

プロローグ 〜なぜAIを使おうと思ったか?〜

Slide 4

Slide 4 text

4 © Link and Motivation Group AIツールに対して斜に構えてた中上 次々出てくるしなー できないことも 多そうだしなー どうせ自分でやった方が 早いんだろうなー 何か作るのって 楽しいしなー

Slide 5

Slide 5 text

5 © Link and Motivation Group ところが FEのライブラリをアップデートしなきゃ! 新しいAPIを 使いたい 非推奨になった APIの修正 依存する ライブラリの刷新 挙動の変化 型定義の変更 廃止された構文の 書き換え

Slide 6

Slide 6 text

6 © Link and Motivation Group あれ? やりたくないなら AIに押し付けちゃう? という超意識の低いスタート

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Aiderの注目ポイント AIペアプロ 対話しながらAIがコーディング してくれる Git操作 修正した内容をcommitまでやって くれる! CLI スクリプトに組み込みやすい様々な機 能がある

Slide 9

Slide 9 text

事例紹介 〜どんな風にAiderを使ったか?〜

Slide 10

Slide 10 text

© Link and Motivation Group 10 事例1 - 大量のコード自動修正 単純作業なんて押し付けちゃえ

Slide 11

Slide 11 text

11 © Link and Motivation Group ライブラリアップデートも分解しちゃえばタスクの集まり 引用:https://qiita.com/hirokidaichi/items/c66682a64ac2fc59cdf3 新しいAPI の利用 依存する ライブラリの更新 挙動の変化 廃止された構文の 書き換え 分解

Slide 12

Slide 12 text

12 © Link and Motivation Group ライブラリアップデートも分解しちゃえばタスクの集まり 引用:https://qiita.com/hirokidaichi/items/c66682a64ac2fc59cdf3 新しいAPI の利用 依存する ライブラリの更新 挙動の変化 分解 廃止された構文の 書き換え

Slide 13

Slide 13 text

13 © Link and Motivation Group 例)Vue.jsのとある非推奨構文の書き換え これとか、これが 引用:Vue.js公式ドキュメント(https://v2.ja.vuejs.org/v2/guide/components-slots#非推奨の構文)

Slide 14

Slide 14 text

14 © Link and Motivation Group 例)Vue.jsのとある非推奨構文の書き換え こう 引用:Vue.js公式ドキュメント(https://v2.ja.vuejs.org/v2/guide/components-slots#名前付きスロット)

Slide 15

Slide 15 text

15 © Link and Motivation Group これがめっちゃある。。。 148ファイル 200箇所 ※eslintでのautofix後

Slide 16

Slide 16 text

16 © Link and Motivation Group そこで活用したのが... AiderのScripting機能 通常モード 対話を繰り返しながらコードを修正する Scriptingモード 1回分の修正を行うコマンドのように呼び出す 引用:Aider公式ドキュメント(https://aider.chat/docs/scripting.html)

Slide 17

Slide 17 text

17 © Link and Motivation Group 1. aiderと修正してみる Vue 2.6.0以降で非推奨になった slot およ び slot-scope 属性をv-slotを使った書き 方に修正してください。 → {{ shortenedUserName }} ↓ {{ shortenedUserName }}

Slide 18

Slide 18 text

18 © Link and Motivation Group 1. aiderと修正してみる Vue 2.6.0以降で非推奨になった slot およ び slot-scope 属性をv-slotを使った書き 方に修正してください。 制約として、v-slot は だけ に追加できます。それ以外の要素に付いてる 場合はその要素を残しつつtemplateで囲う ようにしてください。 # 例
Title
Title
{{ shortenedUserName }} {{ shortenedUserName }}

Slide 19

Slide 19 text

19 © Link and Motivation Group 2. aiderに自分を自動化してもらう aiderコマンドの–message-fileオプションを 使ってファイルの修正をしてPRを自動で作る shellスクリプトを作ってください。 - ファイルは引数から受け取ること - PRにはaiderラベルをつけること - PRのタイトルは「[Vue3化] aiderによる v-slot対応の自動修正」 ※ 残ってなかったので記憶のやつです → #!/usr/bin # branchを切る suffix=$(date "+%Y%m%d%H%M%S") git checkout -b aider/slot-syntax-$suffix master # aiderを実行 file_path="$1" aider --4o --no-stream --yes ¥ --message-file aider_prompt.md $file_path # pushする git push --set-upstream origin aider/slot-syntax-$suffix # PRを作成 sed "s|{{FILE_PATH}}|$file_path|g" pr_template.md > tmp.md cat aider_prompt.md >> tmp.md gh pr create ¥ --title "[Vue3化] aiderによるv-slot対応の自動修正 @$suffix" ¥ --body-file tmp.md ¥ --base master ¥ --label "aider"

Slide 20

Slide 20 text

20 © Link and Motivation Group 3. ぶん回す

Slide 21

Slide 21 text

21 © Link and Motivation Group 結果 103 修正完遂 Aiderで修正できた ファイル数 148 全ファイル数 修正した全ファイル数 70% 精度 自動修正できた割合 / ≒

Slide 22

Slide 22 text

© Link and Motivation Group 22 事例2 - テストコードの生成 テストだって押し付けちゃえ

Slide 23

Slide 23 text

自動テストが無い!

Slide 24

Slide 24 text

24 © Link and Motivation Group storybookをもっと作ってVRTしよう! + storybook Chromatic

Slide 25

Slide 25 text

25 © Link and Motivation Group そこで活用したのが... 引用:Aider公式ドキュメント(https://aider.chat/docs/config/options.html#--read-file) Aiderの--readオプション 通常のファイル指定 「修正対象」として読み込む=修正される場合あり --readオプション 「参考情報」として読み込む=修正されない

Slide 26

Slide 26 text

26 © Link and Motivation Group 1. 既にあるStoryファイルを参考にさせる {{FILE_PATH}}のstorybookファイルを 作成してください。sample.storiesを 参考にできる限り同じ書き方にすることを、必 ず守ってください。以下は作成時の禁止事項 です。 ● ダミーデータはコンポーネントのソースコードを踏まえて参照 エラーが出ないようなデータを作成してください。 ● VRTに使用するため、ダミーデータは固定の時刻になるよう にしてください。 ● slotがあったら、slotの内容を入れてください。 → #!/usr/bin # branchを切る suffix=$(date "+%Y%m%d%H%M%S") git checkout -b aider/slot-syntax-$suffix master # aiderを実行 file_path="$1" aider --4o --no-stream --yes ¥ --message-file aider_prompt.md ¥ --read sample.stories.ts ¥ --read $file_path # pushする git push --set-upstream origin aider/slot-syntax-$suffix # PRを作成 sed "s|{{FILE_PATH}}|$file_path|g" pr_template.md > tmp.md cat aider_prompt.md >> tmp.md gh pr create ¥ --title "[Vue3化] aiderによるv-slot対応の自動修正 @$suffix" ¥ --body-file tmp.md ¥ --base master ¥ --label "aider"

Slide 27

Slide 27 text

27 © Link and Motivation Group 2. ぶん回す

Slide 28

Slide 28 text

28 © Link and Motivation Group 結果 44 修正完遂 Aiderで修正できた ファイル数 67 全ファイル数 修正した全ファイル数 65% 精度 自動修正できた割合 / ≒

Slide 29

Slide 29 text

© Link and Motivation Group 29 事例3 - 静的解析のエラー修正 プロンプト考えるのも辞めちゃえ

Slide 30

Slide 30 text

30 © Link and Motivation Group Vue3へのマイグレーション箇所をeslintで検出 612ファイル 2037箇所 ※eslintでのautofix後

Slide 31

Slide 31 text

31 © Link and Motivation Group もういっそプロンプトなしでいけないかな?

Slide 32

Slide 32 text

32 © Link and Motivation Group そこで活用したのが... 引用:Aider公式ドキュメント(https://aider.chat/docs/usage/lint-test.html#manually-running-code) Aiderの/runコマンド 通常の入力 プロンプトとして処理されて修正する /run コマンド 指定されたコマンドの実行結果をもとに修正する

Slide 33

Slide 33 text

33 © Link and Motivation Group 1. プロンプトの代わりにlintコマンドを渡す file_path="$1" max_attempts=3 attempt=0 until pnpm run lint:which "$file_path" || [ "$attempt" -ge "$max_attempts" ]; do expect -c " set timeout -1 # Aiderを起動 spawn aider --4o $file_path # Aiderのプロンプトを待つ expect ¥">¥" # プロンプトを送信 send -- ¥"/run pnpm run lint:which ${file_path}¥r¥" ... " # ループ回数をカウント attempt=$((attempt + 1)) done

Slide 34

Slide 34 text

34 © Link and Motivation Group 2. ぶん回し、中です

Slide 35

Slide 35 text

35 © Link and Motivation Group 途中結果 7 修正完遂 Aiderで修正できた ファイル数 10 試したファイル数 修正した全ファイル数 70% 精度 自動修正できた割合 / ≒

Slide 36

Slide 36 text

エピローグ 〜使ってみてどうだったか?〜

Slide 37

Slide 37 text

37 © Link and Motivation Group 感想 AI好きになった (ちょっと可愛く見える)

Slide 38

Slide 38 text

38 © Link and Motivation Group 発見 今実際に試したことを「ひたすら繰り返す」 それだけで自動化できるという体験の新鮮さ

Slide 39

Slide 39 text

小さなことからでいい Aiderで始めよう

Slide 40

Slide 40 text

40 © Link and Motivation Group あれ?ライブラリアップデートは終わったの?

Slide 41

Slide 41 text

41 © Link and Motivation Group あれ?ライブラリアップデートは終わったの? Vue Fes Japan 2024でこの続きを登壇します!

Slide 42

Slide 42 text

42 © Link and Motivation Group ● エンジニアリングマネージャー ● プロダクトマネージャー ● テックリード ● サーバーサイドエンジニア ● フロントエンドエンジニア ● SRE ● データエンジニア ● CRM ● UXデザイナー テックブログも更新しています! まずはカジュアルにお話しましょう! ご連絡お待ちしております! 全職種、積極採用中です! お知らせ