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

Capybara+生成AIでどこまで本当に自然言語のテストを書けるか?

Yusuke Iwaki
October 25, 2024

 Capybara+生成AIでどこまで本当に自然言語のテストを書けるか?

Kaigi on Rails 2024 Day1 17:55 〜 18:10

Railsには、システムテストとよばれるE2Eテストを簡単に実行できるフレームワークがあります。生成AIの登場によって、テストコードを書くことは昔ほど苦ではなくなってきました。しかしE2Eテストは作っておしまいではなく、Webサイトを改修するたびにメンテナンスをしなくてはいけません。なかなか面倒です。

これだけAIが賢くなったら、自然言語でシステムテストを書いて、サイトが変わっても自然言語の記載を変えたらそのまま動くようにはできるはずです。
まだまだ精度は出ないなど運用上の課題はありますが、Railsサーバーを起動してAIにWebサイトを読み取らせて自然言語でテスト内容を入力して結果を得る、というニッチな方法を、Capybaraドライバを拡張して実装する方法について解説します。

Yusuke Iwaki

October 25, 2024
Tweet

More Decks by Yusuke Iwaki

Other Decks in Technology

Transcript

  1. ਓ͕ؒςετ͢Δ৔߹ʜ ʮϩάΠϯը໘ʯͰ͸ &NBJMZVTVLFJXBLJ!FYʜ 1BTT)PHF)PHF ΛೖΕͯϩάΠϯ͢Δɻ μογϡϘʔυʹભҠޙɺ %FWJDFTλϒΛ։͍ͯ 'VMMZ.BOBHFEσόΠεͷ*.&*͕ ৄࡉը໘ʹग़͍ͯΔ͜ͱΛ֬ೝ͍ͨ͠ɻ ZVTVLFJXBLJ!FYBNQMFDPN

    ZVTVLFJXBLJ!FYBNQMFDPN ZVTVLFJXBLJ!FYBNQMFDPN ஌Βͳ͍ࢠͰ͢Ͷ ஌Βͳ͍ࢠͰ͢Ͷ ஌Βͳ͍ࢠͰ͢Ͷ ʂ Έͬͨ͢ɺɺ΋͏Ұճʜ ·͔͜͜͞ͰμογϡϘʔυͷૢ࡞Λ ଓߦ͢Δਓ͸͍ͳ͍ɻ
  2. ػց͕ςετ͢Δ৔߹ʜ ʮϩάΠϯը໘ʯͰ͸ &NBJMZVTVLFJXBLJ!FYʜ 1BTT)PHF)PHF ΛೖΕͯϩάΠϯ͢Δɻ μογϡϘʔυʹભҠޙɺ %FWJDFTλϒΛ։͍ͯ 'VMMZ.BOBHFEσόΠεͷ*.&*͕ ৄࡉը໘ʹग़͍ͯΔ͜ͱΛ֬ೝ͍ͨ͠ɻ ZVTVLFJXBLJ!FYBNQMFDPN

    ZVTVLFJXBLJ!FYBNQMFDPN ZVTVLFJXBLJ!FYBNQMFDPN ஌Βͳ͍ࢠͰ͢Ͷ ஌Βͳ͍ࢠͰ͢Ͷ ஌Βͳ͍ࢠͰ͢Ͷ TMFFQ WJTJUEFWJDFT จ຺൑அ͕ޮ͔ͳ͍ɻ ϦΧόϦ΋͞Εͳ͍··ૢ࡞͕ଓ͖ ςετ͕མͪΔʜʢ fl BLZUFTUʣ Ϣʔβ໊ ύεϫʔυ ʁ ϩάΠϯ͕ඞཁͰ͢ ςετεςοϓఆٛ
  3. &&ςετӡ༻ͷ՝୊ ʮϩάΠϯը໘ʯͰ͸ &NBJMZVTVLFJXBLJ!FYʜ 1BTT)PHF)PHF ΛೖΕͯϩάΠϯ͢Δɻ μογϡϘʔυʹભҠޙɺ %FWJDFTλϒΛ։͍ͯ 'VMMZ.BOBHFEσόΠεͷ*.&*͕ ৄࡉը໘ʹग़͍ͯΔ͜ͱΛ֬ೝ͍ͨ͠ɻ CSPXTFMPHJO

    TFUFNBJM bZVTVLFJXBLJ!FYʜ` TFUQBTTXPSE b)PHF)PHF` TMFFQ CSPXTFEFWJDFT  ʜʜ ςετεςοϓఆٛ ςετγφϦΦ ίϯςΩετ΋ ͋Δ΂͖ঢ়ଶ΋ ৘ใ͕ܽམ มߋʹऑ͍ ϩέʔλʔ
  4. ࣗવݴޠͰςετΛॻ͚͹ղܾʂ ʮϩάΠϯը໘ʯͰ͸ &NBJMZVTVLFJXBLJ!FYʜ 1BTT)PHF)PHF ΛೖΕͯϩάΠϯ͢Δɻ μογϡϘʔυʹભҠޙɺ %FWJDFTλϒΛ։͍ͯ 'VMMZ.BOBHFEσόΠεͷ*.&*͕ ৄࡉը໘ʹग़͍ͯΔ͜ͱΛ֬ೝ͍ͨ͠ɻ ςετεςοϓఆٛ

    ςετγφϦΦ ࣗવݴޠ ʮϩάΠϯը໘ʯͰ͸ &NBJMZVTVLFJXBLJ!FYʜ 1BTT)PHF)PHF ΛೖΕͯϩάΠϯ͢Δɻ μογϡϘʔυʹભҠͰ͖͍ͯͨΒɺ %FWJDFTλϒΛ։͍ͯ 'VMMZ.BOBHFEσόΠεͷ*.&*͕ ৄࡉը໘ʹग़͍ͯΔ͜ͱΛ֬ೝ͍ͨ͠ɻ ϩάΠϯը໘ʹඈ͹͞Ε͍ͯͨΒɺ̏ճ·Ͱ ϦτϥΠͯ͠΄͍͠ɻ ͜͜Β΁ΜͰ ੜ੒"*Λ ࢖͑͹͍͍ʁ
  5. ࣗવݴޠΛੜ੒"*Ͱม׵͸ࣦഊ͢Δ ฏۉతͳ໋໊ͷηϨΫλ ฏۉతͳߏ੒ͷϖʔδલఏͷεΫϦϓτ ͕ੜ੒͞ΕΔ ࣗવݴޠ ʮϩάΠϯը໘ʯͰ͸ &NBJMZVTVLFJXBLJ!FYʜ 1BTT)PHF)PHF ΛೖΕͯϩάΠϯ͢Δɻ μογϡϘʔυʹભҠͰ͖͍ͯͨΒɺ

    %FWJDFTλϒΛ։͍ͯ 'VMMZ.BOBHFEσόΠεͷ*.&*͕ ৄࡉը໘ʹग़͍ͯΔ͜ͱΛ֬ೝ͍ͨ͠ɻ ϩάΠϯը໘ʹඈ͹͞Ε͍ͯͨΒɺ̏ճ·Ͱ ϦτϥΠͯ͠΄͍͠ɻ )5.-ߏ଄΋ ը໘ߏ੒΋஌Βͳ͍
  6. εΫγϣΛݟͯ3VCZίʔυΛॻ͔ͤΔ ϒϥ΢βը໘ %0.ߏ଄ ࣍ͷΞΫγϣϯ &NBJMʜ 1BTT Λೖྗ ੜ੒ "* 3VCZίʔυ

    εΫϦʔϯ γϣοτ ݱࡏͷ63- $BQZCBSB ϒϥ΢β ૢ࡞ ɾϩάΠϯϑΥʔϜͷ ɹ9 :࠲ඪͷಛఆ ɾ9 :࠲ඪΛΫϦοΫͯ͠ ɹ༷ࢠݟ͢Δ εΫγϣը૾͚ͩ Λݟͯ
  7. εΫγϣΛݟͯ3VCZίʔυΛॻ͔ͤΔ ϒϥ΢βը໘ %0.ߏ଄ ࣍ͷΞΫγϣϯ &NBJMʜ 1BTT Λೖྗ ੜ੒ "* 3VCZίʔυ

    εΫϦʔϯ γϣοτ ݱࡏͷ63- $BQZCBSB ϒϥ΢β ૢ࡞ ɾϩάΠϯϑΥʔϜͷ ɹ9 :࠲ඪͷಛఆ ɾ9 :࠲ඪΛΫϦοΫͯ͠ ɹ༷ࢠݟ͢Δ εΫγϣը૾͚ͩ Λݟͯ ඞཁʹԠͯ͡%0.πϦʔͷEVNQ΋ ݟͳ͕ΒͰ͋Ε͹
  8. ੜ੒͞ΕͨίʔυͰϒϥ΢βΛࣗಈૢ࡞ ϒϥ΢βը໘ %0.ߏ଄ ࣍ͷΞΫγϣϯ &NBJMʜ 1BTT Λೖྗ ੜ੒ "* 3VCZίʔυ

    εΫϦʔϯ γϣοτ ݱࡏͷ63- $BQZCBSB ϒϥ΢β ૢ࡞ 3VCZͷࠇຐज़ʢϝλϓϩʁʣ ίʔυ͸ʮจࣈྻʯ
  9. ੜ੒͞ΕͨίʔυͰϒϥ΢βΛࣗಈૢ࡞ ϒϥ΢βը໘ %0.ߏ଄ ࣍ͷΞΫγϣϯ &NBJMʜ 1BTT Λೖྗ ੜ੒ "* 3VCZίʔυ

    εΫϦʔϯ γϣοτ ݱࡏͷ63- $BQZCBSB ϒϥ΢β ૢ࡞ ධՁۭؒʹɺ*OQVU5PPMʢԾশʣΛ༻ҙͯ͠ JOTUBODF@FWBMϝιουΛར༻͢Δ ίʔυ͸ʮจࣈྻʯ
  10. $BQZCBSBͷ໾ׂ͸ʁ ϒϥ΢βը໘ %0.ߏ଄ ࣍ͷΞΫγϣϯ &NBJMʜ 1BTT Λೖྗ ੜ੒ "* 3VCZίʔυ

    εΫϦʔϯ γϣοτ ݱࡏͷ63- $BQZCBSB ϒϥ΢β ૢ࡞ αʔόʔىಈ αʔόʔʹ઀ଓ 34QFDͱ࿈ܞ ࣗಈૢ࡞πʔϧ ͱ࿈ܞ SFG3BJMTͷγεςϜςετղ๤ֶˏ,BJHJPO3BJMT
  11. $BQZCBSBͷ໾ׂ͸ʁ ϒϥ΢βը໘ %0.ߏ଄ ࣍ͷΞΫγϣϯ &NBJMʜ 1BTT Λೖྗ ੜ੒ "* 3VCZίʔυ

    εΫϦʔϯ γϣοτ ݱࡏͷ63- $BQZCBSB ϒϥ΢β ૢ࡞ αʔόʔىಈ αʔόʔʹ઀ଓ 34QFDͱ࿈ܞ ࣗಈૢ࡞πʔϧ ͱ࿈ܞ ࣗಈૢ࡞͍ͯͨ͠ͷ͸ ͍ͭ͜
  12. $BQZCBSBͷ໾ׂ͸ʁ ϒϥ΢βը໘ %0.ߏ଄ ࣍ͷΞΫγϣϯ &NBJMʜ 1BTT Λೖྗ ੜ੒ "* 3VCZίʔυ

    εΫϦʔϯ γϣοτ ݱࡏͷ63- $BQZCBSB ϒϥ΢β ૢ࡞ αʔόʔىಈ αʔόʔʹ઀ଓ 34QFDͱ࿈ܞ ࣗಈૢ࡞πʔϧ ͱ࿈ܞ *OQVU5PPMʢԾশʣͱ࿈ܞͰ͖Δ $BQZCBSBυϥΠόΛ࣮૷͢Δ ͦͷ··࢖͏͚ͩ
  13. ࠓճ࡞Γ͍ͨ΋ͷ 34QFD $BQZCBSB υϥΠό WJTJUMPHJO BEEJUJPOBM@JOTUSVDUJPO ɹ͜ͷϖʔδ͸̏ϖΠϯͰʜ  ɹ Ϣʔβ໊YYύεϫʔυQQͰϩάΠϯ

     %FWJDFTλϒΛΫϦοΫͯ͠Ұཡ͔ΒEYYΛબͿ ʜ 8FC%SJWFS #J%Jϥούʔ CSPXTJOH$POUFYUOBWJHBUF ϒϥ΢β "HFOU "[VSF0QFO"* 4BOECPY *OQVU5PPM FWBM JOQVUQFSGPSN"DUJPOT CSPXTJOH$POUFYUDBQUVSF4DSFFOTIPU