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

バイブスあるコーディングで ~PHP~ 便利ツールをつくるプラクティス

Avatar for uzulla uzulla
July 19, 2025

バイブスあるコーディングで ~PHP~ 便利ツールをつくるプラクティス

at: PHPカンファレンス関西 2025
date: 2025/07/19
speaker: uzulla

Avatar for uzulla

uzulla

July 19, 2025
Tweet

More Decks by uzulla

Other Decks in Programming

Transcript

  1. ʮVibe codingʯ͸ɺ2025೥2݄ʹAndrej KarpathyʹΑͬͯఏএ͞Εͨ֓೦ɿ "There’s a new kind of coding I

    call 'vibe coding', where you fully give in to the vibes, embrace exponentials, and forget that the code even exists." AIʹࣗવݴޠͰࢦࣔΛग़ͯ͠AI͕ίʔυΛੜ੒͢Δϓϩηεɻ։ൃऀ͸ੜ੒͞ΕΔ ίʔυͷৄࡉʹੵۃతʹؔ༩ͤͣɺʮྲྀΕʹ਎Λ೚ͤΔʯܗͰਐΊΔɻ ΄͔͔Βͷൈਮ • Wikipedia: ʮਝ଎ͰଈڵతɺڠಇతͳΞϓϩʔνʯͰ͋Γɺ։ൃऀͱLLM͕ϖΞ ϓϩάϥϛϯάͷΑ͏ʹಇ͘ɻ • MIT Technology Review: ΤϯδχΞͷ໾ׂ͸πʔϧͱର࿩͠ɺͦͷ݁ՌΛධՁ ͢Δ͜ͱɻ
  2. ࢲ͕Vibe codingͰͭͬͨ͘πʔϧྫ • https://github.com/uzulla/pod-tenuki • Pod-Tenuki͸ɺWAVΛ౤͛ࠐΉͱϚελϦϯάͱαϚϦʔςΩετͷੜ੒Λ ͠·͢ɻ • ϚελϦϯά: Auphonic

    APIΛ࢖༻ͯ͠Ի੠ϑΝΠϧΛϊʔϚϥΠζɺσϊΠ ζ • WAVϑΝΠϧ࿈݁: ෳ਺ͷWAVϑΝΠϧΛ1ͭͷMP3ϑΝΠϧʹ࿈݁ • จࣈى͜͠: GCP Speech-to-Text APIͰςΩετʹม׵ʢ௕࣌ؒԻ੠ʹର Ԡʣ • ཁ໿: OpenAI APIΛ࢖༻ͯ͠จࣈى͔͜͠ΒλΠτϧͱઆ໌จΛੜ੒
  3. ࢲ͕Vibe codingͰͭͬͨ͘PHPͷπʔϧྫ • https://github.com/uzulla/calluserfunc_bsky • Packagist.orgʹ౤ߘ͞ΕΔ৽͍͠ύοέʔδΛBlueSkyͷΞΧ΢ϯτʹࣗಈ ౤ߘ͢ΔΞϓϦͰ͢ɻTwitter൛ͷϞμϯԽˍҠ২Ͱ͢ɻ • Packagist.orgͷ৽ணύοέʔδRSSϑΟʔυΛऔಘ •

    ৽͍͠ύοέʔδͷΈΛBlueSkyʹ౤ߘ • GitHub Actions VariableΛ࢖༻ͯ͠࠷ޙʹॲཧͨ͠ύοέʔδͷ೔࣌Λอଘ • ॏෳ౤ߘΛ๷ࢭ͢ΔͨΊͷϑΟϧλϦϯά • ݴޠ͸PHPͰ͢
  4. $ claude --dangerously-skip-permissions ╭───────────────────────────────────────────────────╮ │ ✻ Welcome to Claude Code!

    │ ╰───────────────────────────────────────────────────╯ > Ϣʔβʔ؅ཧػೳΛ࡞ͬͯ ⏺ ෼͔Γ·ͨ͠ɻNode.js + Express + SQLiteΛ࢖ͬͯγϯϓϧͳϢʔβʔ؅ཧγεςϜΛ࡞੒͠·͢ɻ ... ⏺ Ϣʔβʔ؅ཧγεςϜ͕׬੒͠·ͨ͠ʂαʔόʔ͕ϙʔτ3000Ͱىಈ͍ͯ͠·͢ɻ
  5. ͍͢͝ʂ͏͍ͨ͝ʂʂʂ $ curl -X POST http://localhost:3000/api/auth/login \ -H "Content-Type: application/json"

    \ -d '{"username":"admin","password":"admin123"}' { "message":"Login successful", "user":{ "id":1,"username":"admin", "email":"[email protected]", "full_name":"Administrator","role":"admin" }, "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...._PB8" }
  6. ׬

  7. ʮԶ͸PHP͕͍͍Μͩʂʯ $ claude --continue --dangerously-skip-permissions ╭───────────────────────────────────────────────────╮ │ ✻ Welcome to

    Claude Code! │ ╰───────────────────────────────────────────────────╯ > Զ͸PHPͰ࣮૷ͯ͠΄͍͠ΜͰ͢Αɺ͜ͷΞϓϦ͔͖ͳ͓͍ͯͩ͘͠͞ ʢ্ه͸ݪจͷϚϚɺ̍ߦͰ͢ʣ ... ⏺ PHPͰΞϓϦέʔγϣϯΛॻ͖௚͠·ͨ͠ɻ php-appσΟϨΫτϦʹ׬શͳPHP࣮૷Λ࡞੒͠·ͨ͠ɻ
  8. $ curl -X POST http://localhost:8000/api/auth/login \ -H "Content-Type: application/json" \

    -d '{"username":"admin","password":"admin123"}' ʢུʣ <b>Deprecated</b>: Illuminate\Database\Eloquent\Concerns\HasGlobalScopes::addGlobalScope() : Implicitly marking parameter $implementation as nullable is deprecated, the explicit nullable type must be used instead in <b>/ Users/zishida/dev/vibeslide/vibeee/php-app/vendor/illuminate/database/ Eloquent/Concerns/HasGlobalScopes.php</b> on line <b>21</b><br /> {"error":"Missing username or password"}
  9. ʮͳ͓Γ·ͨ͠ʯ $ curl -X POST http://localhost:8000/api/auth/login\ -H "Content-Type: application/json"\ -d

    '{"username":"admin","password":"admin123"}' { "message":"Login successful", "token":"eyJ0e...w5fcM", "user":{ "id":1,"username":"admin","email":"[email protected]", "full_name":"System Administrator","role":"admin", "created_at":"2025-07-15T13:46:06.000000Z", "updated_at":"2025-07-15T13:46:06.000000Z" } }
  10. ࠷ۙͷAI Agent͛͢ʔʂʂ • ԶʮϢʔβʔ؅ཧػೳΛ࡞ͬͯʯAIʮͭ͘Γ·ͨ͠ʯ • ԶʮPHP͕͍͍ΜͩΑʯAIʮ͍͍ײ͡ͷߏ଄ͷPHPͰͭ͘Γ·ͨ͠ʯ • ԶʮͳΜ͔͏͔͝ͳ͍ʂʯAIʮࣗ෼ͰΤϥʔΛ୳ͯ͠ͳ͓͠·ͨ͠ʯ • ԶʮίʔυಡΉͷΊΜͲ͍ʯAIʮOASͱ͔࢓༷ॻͭ͘Γ·ͨ͠ʯ

    • (ϓϩϙʔβϧ౤ߘͨ࣌͠఺Ͱ͸ɺͰ͖ͳ͔ͬͨΜͩΑʁ) • (ؒҧ͑ͳ͍͔ͬͯʁਓؒΑΓ͸ؒҧ͑ͯͳ͍ؾ͕͠·͢Ͷ…ʁ) • օ͞Μʮ͋Εʁςετ͸ʁʯԶʮͦΕ͸ελϬϧ͞ΜͷLTʹظ଴ʂʂʂʯ
  11. ྫɿ ͜Ε͘Β͍ͷ shiyousho.md ͔͍ͯΈΔ # ʨπʔϧ໊ͱ͔ʩ ## ղܾ͍ͨ͠՝୊ʢWHYʣ − طଘͷΞϓϦΛվम͍ͨ͠

    - Userొ࿥Λ͍ͨ͠ - SPA͔Β࢖͑ΔೝূΛ͍ͨ͠ ## ඞཁͳ࣮૷ཁ݅ʢHOWɺWhatʣ - ೝূ͢ΔJsonAPI͕ඞཁ - Ϣʔβʔొ࿥ɺ࡟আ͸CLIͰ͓͜ͳ͏
  12. $ claude --dangerously-skip-permissions ╭───────────────────────────────────────────────────╮ │ ✻ Welcome to Claude Code!

    │ ╰───────────────────────────────────────────────────╯ > ઈରʹ·ͩίʔυॻ͔ͳ͍Ͱɻ shiyousho.md ͕࢓༷ॻͳΜͰɺಡΈࠐΜͰͶɻ ࢓༷ॻ͸Ξοϓσʔτ͍͍ͯ͠Αɺ ͦΕΛΈͳ͕Βɺࢲ͕ϨϏϡʔ͢ΔͶɻ ͔ͩΒઈରʹ·ͩίʔυॻ͔ͳ͍Ͱɺ ࢓༷ॻʹαϯϓϧίʔυ΋͔͔ͳ͍Ͱɻ ⏺ Θ͔Γ·ͨ͠ɺಡΈࠐΈ·͢ɻ
  13. ͦͯ͠…ʂੇܶͩʂʂʂʂ • ! ͔ͦ͜Β͋͑ͯɺԶ౳ͷ஌͍ͬͯΔΑ͏ͳʮ࢓༷ʯ͸ॻ͔ͳ͍ • ৴ͯ͡΄͍͠ΜͰ͕͢…ੇܶΛॻ͍ͯΈΔͱ͕ޮՌ͋Δ • ʢπʔϧͳΒʣʮͲ͏΍ͬͯ࢖ΘΕΔ͔ੇܶͯ͠Έͯʯ • ʢϥΠϒϥϦͳΒʣʮͲ͏࢖ΘΕΔ͔αϯϓϧίʔυ͔͍ͯΈͯʯ

    • ΋ͪΖΜɺࣗ෼Ͱੇܶͯ͠ཧղͤ͞Δͷ΋Α͍ • ͜ΕɺAIͷཧղ౓ͷ೺ѲʹޮՌ͕͋Γ·͢ • ૝ఆͱҧ͏ɾෆՄೳͳճ౴͕͋ͬͨΒࢦఠ͢Δ • ͨ·ʹ࢓༷ॻʹʮͦΕΛ࣮ݱ͢Δ࣮૷࢓༷Λॻ͖ग़ͯ͠ʯͱ͍ͬͯϨϏϡʔ
  14. ʮͳΜͰAIʹ࢓༷ॻΛॻ͔ͤΔɺͰ͸͍͚ͳ͍ͷ͔ʁʯ • AI͸ɺཔ·ΕΕ͹͍͢͝จࣈྔΛ͔͍ͯ͘Ε·͢ɻ • ͔͠͠ਓؒ͸ͨ͘͞ΜͷจࣈΛΈΔͱɺಡ·ͣʹLGTM͠·͢ • ϨϏϡʔ͞Εͳ͍࢓༷ॻ͕Ͱ͖͕͋Γ·͢ʂʂʂ • ੇܶͩͱਓؒ͸ҧ࿨ײʹؾ͖ͮ΍͍͢Ͱ͢ʢݸਓࠩ͸͋Γͦ͏ʣ •

    ʮੇܶΛ10Ҋ͘Β͍ͩͯ͘͠Εʯͱ͔͍͏ͱΑ͍Ͱ͢ɺਓؒͳΒΩϨͯస৬͠· ͕͢ɺAI͸΍ͬͯ͘Ε·͢ • ࢓༷ॻͳΜͯͳͯ͘΋ʮ͜͏͍͏ϢʔεέʔεΛຬͨ͢πʔϧΛͭͬͯ͘ʯͰͰ ͖Δ => Vibe Codingͩʂ
  15. ͞ΒͳΔ·ͱΊ • ࢲ͕ఏҊ͢ΔVibe Coding͸ɺAIʹؙ౤͛͢Δຐ๏͡Ό͋Γ·ͤΜɻ ʢ·͋ɺΨνϟ͕΄͍͠ͱ͖͸͋͑ͯॻ͔ͳ͍ͷ΋͋Γʣ • AI͸ຖ෼ೖࣾ͠ɺຖ෼ୀ৬͢Δɺ΍Δؾͷ͋ΔϝϯόʔͰ͢ɻWHY΍HOWͷڞ ༗ෆ଍͸໎૸͠·͢ɻ • ͦͷͨΊʹ͸ίʔυΑΓ΋࢓༷ॻΛҭͯͯɺΠϯϓοτͱΞ΢τϓοτॏࢹʹ੾

    Γସ͑Δ͜ͱ͕Vibe codingʹ͓͍ͯ؊ཁͩͱࢥ͍·͢ɻ • ͜Ε͕ͦ͜ɺVibe Codingͷݬ໓͔Βൈ͚ग़͠ɺAIΛਅͷύʔτφʔͱͯ͠׆༻ ͢ΔͨΊͷɺ๻͔ΒͷTipsͰ͢ɻ • ʮPHP8.5ରԠͯ͠ʯͰ͸ͳ͘ɺ͜ͷ࢓༷ॻͷπʔϧΛPHP8.5Ͱॻ͍ͯɺͷ࣌୅