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

dynamic!

 dynamic!

Kaigi on Rails 2025のオープニングキーノートです。

https://kaigionrails.org/2025/talks/moro/#day1

Avatar for MOROHASHI Kyosuke

MOROHASHI Kyosuke

September 26, 2025
Tweet

More Decks by MOROHASHI Kyosuke

Other Decks in Programming

Transcript

  1. “ Ruby ... 動的 言 語 、 高 生 産性

    備 。 文 法 持 、 自 然 読 書 。 ΦϒδΣΫτࢦ޲ϓϩάϥϛϯάݴޠ3VCZ IUUQTXXXSVCZMBOHPSHKB
  2. ݴޠػೳͱͯ͠ͷಈత͞ w ม਺ʹܕ͕ͳ͘ɺܕએݴ͕ෆཁ w ΦʔϓϯΫϥε w ΈΜͳେ޷͖"DUJWF4VQQPSU w ΈΜͳ େ޷͖DMBTT@FWBM

    JOTUBODF@FWBM SF fi OFNFOUT  w ͢΂͕ͯΦϒδΣΫτ w ΫϥεΠϯελϯεม਺Λ࢖ͬͨϝλϓϩάϥϛϯάͱ͔ɻ
  3. ར༻ऀͱͬͯͷಈత͞ w ΤϨΨϯτͳจ๏ w ࣗ໌ͱײ͡ΔΧοίΛॻ͔ͳͯ͘࡯ͯ͘͠ΕΔͱ͜Ζͱ͔ w JU΍4ZNCPMUP@QSPDUP@Iͷ EPVCMFTQMBUͱ͔΋ w ๛෋ͳɺར༻ऀ͕ཉͦ͠͏ͳΫϥε΍ϝιου

    w FBDIͱ&OVNFSBCMFUJNFT\^%BUBEF fi OF w PQFO CMPDL Ͱย෇͚ͯ͘͠ΕΔɺͱ͔ 3VCZʹ׳Εͨ݁Ռɺ3VCZʹ͋Γͦ͏ͳϝιου͕ཉ͘͠ͳΔͷ͔΋͠Εͳ͍ɻͦ͏͍͏૬ޓ࡞༻΋·ͨྑ͍Ͱ͢ɻ
  4. 3VCZͷಈతͳ։ൃ w *3#ͰΘ͔ͬͨ͜ͱΛιʔεϑΝΠϧʹॻ͍ͯಈ͔͢ɻ w ୯ҰϑΝΠϧͰಈ͔ͨ͠Γɻ w ϒϥ΢βΛϦϩʔυͨ͠Γɻ w ηοτΞοϓͱݕূΛࣗಈςετʹ·ͱΊͨΓɻ w

    ಈ͔͠ͳ͕Βɺࣗ෼͕΄͍͠ϓϩάϥϜʹۙͮ͘ɻ w ͦͷաఔͰର৅΍ࣗ਎ͷํ਑΁ͷཧղ΋ਂ·͍ͬͯ͘ɻ !TOPP[FSͷɺ෱Ԭ3VCZձٞͷߨԋʮ"3VCZ1SPHSBNNJOH&QJTPEFʯ͍͍࿩Ͱͨ͠ɻະݟͷํ͸ͥͻɻ
  5. ಈతͳ։ൃ͸ͨͷ͍͠ w ΍Γ͍ͨ͜ͱʹରͯ͠ɺ࠷খݶʹมԽͤͯ͞ w *3#ͷߦ͚ͩΛೖྗͯ͠ w ͦ͜Ͱ͏·͍ͬͨ͘ͷΛιʔείʔυʹ͖࣋ͬͯͯ w ࣮ߦ݁ՌͷϑΟʔυόοΫΛ͏͚ͯ w

    ͏·͍ͬͨ͘Γ͍͔ͳ͔ͬͨΓ͢Δ w ΍Ζ͏ͱͨ͜͠ͱͷཧղ͕ਂ·Δɻ w ࣍ͷߦಈ΍ɺ΍Γ͍ͨ͜ͱࣗମ͕ಈతʹมΘΔɻ
  6. 3BJMTΞϓϦέʔγϣϯΛಈతʹ։ൃ͢Δ w ͜ͷྑ͞ΛΞϓϦέʔγϣϯ։ൃʹεέʔϧ͍ͤͨ͞ɻ ಈతͳ։ൃ͸ͨͷ͍͠ w ΍Γ͍ͨ͜ͱʹରͯ͠ɺ࠷খݶʹมԽͤͯ͞ w *3#ͷߦ͚ͩΛೖྗͯ͠ w ͦ͜Ͱ͏·͍ͬͨ͘ͷΛιʔείʔυʹ͖࣋ͬͯͯ

    w ࣮ߦ݁ՌͷϑΟʔυόοΫΛ͏͚ͯ w ͏·͍ͬͨ͘Γ͍͔ͳ͔ͬͨΓ͢Δ w ΍Ζ͏ͱͨ͜͠ͱͷཧղ͕ਂ·Δɻ w ࣍ͷߦಈ΍ɺ΍Γ͍ͨ͜ͱࣗମ͕ಈతʹมΘΔɻ
  7. ϋοϐʔύε😀ͱ͸ w ;ͭ͏ͷར༻ऀ͕ظ଴͢Δ࠷΋γϯϓϧͳૢ࡞͕Ͱ͖Δ ͱ͜Ζ·Ͱ࣮૷Ͱ͖͍ͯΔঢ়ଶɻ w όϦσʔγϣϯΛύε͢ΔೖྗΛͨ͠Βσʔλ͕อଘͰ͖ΔɺͳͲ w ར༻ऀͷؾ࣋ͪͰ࢖ͬͯɺ࠷ॳͷϑΟʔυόοΫΛಘ͍ͨɻ w ϨΠϠΘ͚ͯ͠BQQNPEFMT

    ͚ͩ࡞Δͱ͔Ͱ͸ͳ͍ɻ ͍ΘΏΔʮਖ਼ৗܥʯͷϢʔεέʔεʹ͍ۙͰ͢ɻҰࣜ͢΂ͯͰͳ͘ɺ͞ΒʹεςοϓΛ෼ׂͰ͖Δ͜ͱ΋͋Γ·͢ɻ .71ͱ΋ҧͬͯɺ΋ͬͱখ͘͞εϥΠε͠·͢ɻ.71Ұࣜͩͱ͜ͷ൑அͷͨΊʹ͸େ͖͗͢Δɻ
  8. “ 、XP 価値 最 知的 部分 。 保 、今 日

    問題 優雅 解決 大 変 作業 。 (中略) 「最 、 何 ?」 (中略) 私 、 質問 。 複雑性 排除 、何 考 。 ,FOU#FDLʮΤΫετϦʔϜϓϩάϥϛϯάʯ ୈষɹՁ஋
  9. 😀ར༻ऀ͸ɺΧϯϑΝϨϯεʹొ࿥Ͱ͖Δ w લఏ w ར༻ऀͱͯ͠ϩάΠϯ͓ͯ͠Γ w ΧϯϑΝϨϯεͷৄࡉϖʔδΛ։͍͍ͯΔͱͯ͠ w γφϦΦ w

    ʮొ࿥͢ΔʯϘλϯΛԡ͢ͱ w ʮࢀՃొ࿥͠·ͨ͠ʯͱදࣔ͞ΕΔ͜ͱ ܁Γฦ͠Ͱ͕͢ɺݪଇͱͯ͠ར༻ऀͷ໨ઢͰ͏·͘ಈ͍͍ͯΔ͜ͱΛ֬ೝͰ͖ΔΑ͏ʹεϥΠε͠·͢ɻ
  10. 3BJMTͰ3&45GVMͳೖྗΛӬଓԽ͢Δ*' # POST /conferences/:conference_id/registration def create @registration = current_user.registrations.build( conference:

    Conference.find_by!(name: params[:conference_id]) ) @registration.save! end SFEJSFDU@UPΛॻ͖๨Ε͍ͯΔ͜ͱʹࠓ೥ؾ͍ͮͨͷͰ͕͢ɺͦ͜͸৺ͷ໨Ͱݟ͍ͯͩ͘͞🙏
  11. ूத͢Δ΋ͷҎ֎͸อཹ͢Δ w %#ઃܭʹूத͢Δʺ%#εΩʔϚΛ֬ఆͤ͞Δɻ w ͢΂ͯͷΧϥϜΛఆ͖ٛ͠Ζ͏ͱ͠ͳ͍ɻ w ͋ͱ͋ͱʮొ࿥࣌ʹίϝϯτΛ࢒͢ʯͳͲΛ࣮૷ͨ͘͠ͳΔ͔΋ ͠Εͳ͍͕ɺอཹ͢Δɻ w ΠϕϯτΤϯςΟςΟͷ֓೦Λݟग़͚ͩ͢Ͱ΋ਐ௙ɻ

    w GL੍໿ͱɺΤϯςΟςΟؒͷଟॏ౓΋ߟ͑ΒΕΔͱྑ͍ɻ %#੍໿΍ଟॏ౓·Ͱߟ͑ΒΕΔͱ͍͍Ͱ͕͢ɺͦ͜Ͱ೰ΜͰख͕ࢭ·Δ͘Β͍ͳΒɺઌʹਐΜͰΈΔͱྑ͍Ͱ͢ɻ ίπͱͯ͠͸ͷଟॏ౓ͷઃఆ͸͚ͬ͜͏গͳ͍ͷͰɺ/·ͨ͸/.ͱԾஔ͖͢Δͷ͕ྑ͍Ͱ͢ɻ
  12. 😀ར༻ऀ͸ɺΧϯϑΝϨϯεʹొ࿥Ͱ͖Δ w લఏ w ར༻ऀͱͯ͠ϩάΠϯ͓ͯ͠Γ w ΧϯϑΝϨϯεͷৄࡉϖʔδΛ։͍͍ͯΔͱͯ͠ w γφϦΦ w

    ʮొ࿥͢ΔʯϘλϯΛԡ͢ͱ w ʮࢀՃొ࿥͠·ͨ͠ʯͱදࣔ͞ΕΔ͜ͱ w ࢀՃऀʹʮΧϯϑΝϨϯεʹࢀՃొ࿥͠·ͨ͠ʯͱ͍͏ϝʔϧ͕ಧ͘͜ͱ w ओ࠵ऀʹʮ৽ͨʹࢀՃొ࿥͕͋Γ·ͨ͠ʯͱ͍͏ϝʔϧ͕ಧ͘͜ͱ
  13. ʮࢀՃऀ΍ओ࠵ऀʹϝʔϧΛૹΔʯ def create conference = Conference.find_by!(name: params[:conference_id]) @regitration = current_user.registrations.create!(conference:)

    UserMailer.register_confirmation(@registration).deliver_later OrganizerMailer.register_confirmation(@registration).deliver_later notice = 'Registered successfully.' redirect_to conference_path(@registration.conference), notice: end
  14. ༨ஊ "DUJPO.BJMFSͱͦΕΛࢧ͑Δ"DUJWF+PC͕ͱͯ΋޷͖ w 8FCΞϓϦͰ͸ϝʔϧૹ৴ͳΓඇಉظॲཧͳΓ͕ඞཁͩͱ͍͏͜ͱ͕ཧղ͞Ε͍ͯͯɺ ͦͷFOPVHIHPPEͳΠϯλʔϑΣʔε͕ඪ४ͳͷ͕εΰΠɻ w "DUJPO.BJMFSɺ4.51ࣗମͷෳࡶ͞ͷӅณ΋͋Γ͕͍ͨ͠ɺࣗಈςετ͔ΒͷΞΫηα "1*ͱ͔ɺϝʔϧϓϨϏϡʔͱ͔·Ͱ͋ͬͯҒ͍ɻ w ͰɺͦΕΛࢧ͑Δ"DUJWF+PCͰ͢Αɻݱ୅ͷ8FCΞϓϦͰ͸ඇಉظॲཧ͕ඞཁɻ

    ͔ͩΒͦͷΠϯλʔϑΣʔεΛ༻ҙ͓͖ͯ͠·͢Ͷɺ͍ͬͯ͏ɻ਌੾ɻ w *'͕ܾ·͍ͬͯΔͷͰɺඞཁʹͳͬͨΒΞμϓλΛBTZOD͔Β೚ҙͷϓϩμΫτʹ มߋͰ͖Δɻඇಉظδϣϒج൫ͷಋೖʹΦϓγϣφϦςΟ͕Ͱ͖ΔΘ͚ɻ w ͔ͦ͜ΒຬΛ࣋ͯ͠ͷ4PMJE2VFVFͱ͔.JTTJPO$POUSPMͷొ৔Ͱ͢ΑɻΫʔϧ͗͢Δɻ ݴ༿͸ਚ͖ͳ͍ͷ͚ͩͲޠΔ͕࣌ؒ଍Γͳ͍ͷͰɺ࿓Լ΍࠙਌ձͰձ࿩͍ͤͯͩ͘͞͞ !NPSJIJSPLɺ!TSPDLTUZMFɺ!BMTUSPDSBDLͷඇಉظδϣϒͷൃද΋ָ͠ΈͰ͢Ͷ
  15. ʮͦͷͱ͖ʯ͕དྷͨΒίʔυΛม͑Δ w ʮ͜͏ॻ͘ͷ͕Αͦ͞͏ʯͱͳͬͨΒࢼͯ͠ΈΔɻ w BGUFS@DPNNJU͔ΒૹͬͯΈͨΓɻ w Ϩίʔυ࡞੒ͱϝʔϧૹ৴Λ୲͏ΫϥεΛ࡞ͬͨΓɻ w 1VC4VCͳΠϕϯτۦಈΆ͍ͷΛࢼͯ͠΋͍͍͔΋ɻ w

    ͦͷ࣌ͷॻ͖ຯ͸Ͳ͏Ͱ͔͢  w ͍͍ײ͡ͳΒଓ͚Δɻͬ͘͠Γ͜ͳ͔ͬͨΒ໭͢ɻ w ม͑ͨΓ໭ͨ͠Γ͢ΔͨΊͷ࢓૊ΈΛ੔͓͑ͯ͘ɻ ʮγεςϜͷઃܭʹຖ೔खΛೖΕΔ͜ͱɻγεςϜͷઃܭ͸ɺͦͷ೔ͷγεςϜͷχʔ ズ ʹ͏·͘߹கͤ͞Δ͜ͱɻʯ ,FOU#FDLʮΤΫετϦʔϜϓϩάϥϛϯάʯ Ͱɺࠓ೔͸͜͜·Ͱɻͦͷ೔͕དྷͨΒͦͷͿΜΛઃܭ͠·͢ɻ
  16. 😀ར༻ऀ͸ɺࣗ෼ͷϓϩϑΟʔϧΛมߋͰ͖Δ w લఏ w ར༻ऀͱͯ͠ϩάΠϯ͓ͯ͠Γ w ϓϩϑΟʔϧϖʔδΛ։͍͍ͯΔͱͯ͠ w γφϦΦ w

    ʮฤूʯΛΫϦοΫ͢Δ w ʮࣗݾ঺հʯʹʮ3VCZͱ3BJMT͕޷͖Ͱ͢ʯͱೖྗ͢Δ w ʮϝʔϧΞυϨεʯʹʮOFX!FYBNQMFDPNʯͱೖྗ͢Δ w ʮڵຯͷ͋ΔτϐοΫʯͰɺʮ3VCZʯͱʮ3BJMTʯΛνΣοΫ͢Δ w ʮߋ৽ʯΛΫϦοΫ͢Δɻ w ʮϓϩϑΟʔϧΛߋ৽͠·ͨ͠ʯͱදࣔ͞Ε͍ͯΔ͜ͱ w ϝΞυཝʹ͸ʮOFX!FYBNQMFDPNʯ͕දࣔ͞Ε͍ͯΔ͜ͱ
  17. ྫ͑͹͜Μͳςʔϒϧ܈ users PK id human_id created_at user_profiles PK id FK

    user_id region favorite_editor favorite_method ... timestamps user_credentials PK id FK user_id email phone name password_digest ... timestamps
  18. ʮͭҎ্ͷςʔϒϧΛಉ࣌ʹߋ৽͍ͨ͠ʯ w ʮϨʔϧ͔Β߱ΓΔʯબ୒͢Δཧ༝/P ͨͿΜ ɻ w ͦΕ͚ͩʹɺ͍ΖΜͳ߱Γํ͕͋Δ w ૉ๿ʹίϯτϩʔϥͰ"3ϞσϧΛߋ৽͢Δɻ w

    Ϧονͳ+4ϑΥʔϜΛ࡞ΓɺϢʔβʔૢ࡞Ͱͭͷߋ৽"1*Λୟ͘ɻ w αʔϏε૚΍'PSN0CKFDUΛಋೖ͢Δɻ w ͳͲͳͲ
  19. ͲΜͳϦιʔε͔ɺߟ͑Δ w ϓϩϑΟʔϧΫϨσϯγϟϧͷςʔϒϧ෼ׂ͸࣮૷ଆͷ ٕज़తͳϝϦοτॏࢹͷߏ଄Ͱ͋Δɻ w ΋ͪΖΜద੾ͩͱࢥ͏͕ɺར༻ऀ͕಺෦࣮૷Λҙࣝ͢Δඞཁ͸ͳ͍ɻ w ར༻ऀ͔Βͷଊ͔͑ͨɺͭ·ΓʮϦιʔεʯͱͯ͠͸ɺҰͭͷ ϓϩϑΟʔϧͱଊ͑Δํ͕ཧղ͠΍͍͢ɻ w

    ͦͷཧղʹ߹͏Α͏ʹɺ࣮૷ΛมԽͤ͞Α͏ɻ ࡢ೥঺հͨ͠Α͏ʹɺςʔϒϧ෼ׂ͠VTFSTΛJNNVUBCMFʹ͢Δ͜ͱࣗମͷϝϦοτ͕ଟ͍ͱมΘΒͣࢥ͍·͢ɻ ͕ɺͦΕΛར༻ऀʹҙ͍ࣝͤͨ͞Θ͚Ͱ͸ͳ͍Ͱ͢ΑͶɻͦͷͨΊͷϦιʔεந৅ԽͰ͢ɻ
  20. ༨ஊʮ'PSN0CKFDUͰ΋αʔϏε૚Ͱ΋ͲͪΒͰ΋ྑ͍ʯͱݴ͏ׂʹ w ࣗ෼ͷաڈൃදΛݟͯ΋ৗʹ'PSN0CKFDUਪ͠ͳͷͰ͢ΑͶɻ΄Μͱʹͩ͜ΘΓ͸ͳ͍ͭ΋ΓͳͷͰࣗݾ෼ੳ͠·ͨ͠ɻ w ͓ͦΒ͘ʮͦͷจ຺Ͱͷར༻ऀͷೖྗηοτʯΛදݱ͢ΔΦϒδΣΫτΛ࡞Δͷ͕޷͖ͳͷͩͱࢥ͍·͢ɻ w ݸਓతʹʮෳ਺ͷՕॴ͔Βͷݺͼग़͠ΛҰՕॴʹू໿ͨ͠͏͑ɺͦͷݺͼग़͠ઌʹͯݺͼग़͠ݩʹԠͨ͡࠶෼ذΛ͢Δʯͱ͍͏ઃܭΛ ޷Έ·ͤΜɻ3BJMT͸ͦΕΛϧʔςΟϯάͰͪΐ͏্खʹ΍ͬͯ͘ΕΔͷͰɺͦͷྼԽΛΞϓϦ಺Ͱ࠶࣮૷͢Δͷ͸ආ͚͍ͨͰ͢ɻ w ͱ͍͏Θ͚ͰɺϧʔςΟϯάʹΑͬͯ෼ذ͞ΕͨҎ߱͸ಉ༷ͷ෼ذΛݮΒ͍ͯ͜͠͏ͱ͢Δͱɺίϯτϩʔϥೖྗ͝ͱ

    Ϣʔβʔ ೖྗ୯Ґ Ͱॲཧ૚Λઃ͚ͨ͘ͳΓ·͢ɻ݁Ռ'0Λ޷ΜͰ͍ΔΑ͏Ͱ͢ɻ w Ͱ͋Ε͹ɺίϯτϩʔϥΛ'0૚ʹͯ͠΋ྑ͍ͷͰ͸ ͱݴ͏ҙݟ΋͋Γɺಛʹւ֎ͰҰఆͷਓؾΛूΊ͍ͯΔ͍ͨΑ͏Ͱ͢ɻ w ͔ͨ͠ʹͦΕ΋ѱ͘ͳ͍ؾ͸͠·͢ɻ͕ɺͦΕʹͯ͠΋ίϯτϩʔϥ͸ࣗಈςετ΋ॻ͖ͮΒ͍͠ɺϨεϙϯεฦ͢੹຿΋͋ΔͷͰ ΋͏গ͠খ͘͞෼͚ͨ͘ͳΓɺ'0Λ࡞Δ͜ͱ͕ଟ͍Ͱ͢ɻ w Ͱ΋ίϯτϩʔϥΛ࢖ͬͯΈΔઃܭ΋ࢼͯ͠Έ͍ͨͰ͢Ͷɻ3BJMTͩͱίϯτϩʔϥςετ͸ॻ͖ͮΒ͘ͳ͍ͱ͍͏ཱ৔΋͋Δɻ w ݴ͍׵͑Δͱɺ͔ͭͯݏΘΕͨ'BU$POUSPMMFSΞϯνύλʔϯͷ໰୊͸ίϯτϩʔϥ͕'BUͳ͜ͱ͡Όͳ͍ͷͰ͸ ͱ͍͏࠶ධՁͰ͢Ͷɻ w ͳͲͳͲߟ͑ͭͭɺجຊ͸"3ͷ$36%ͰɻಛʹΠϕϯτΤϯςΟςΟΛݟग़ͯ͠$36%͢ΔͷͰे෼ͳΒɺͦΕ͕Ұ൪Ͱ͢ɻ ͻͲ͍ϑΥϯταΠζͰڪॖͰ͢ɻؾ͕࣋ͪߴ·ͬͯ͠·͍·ͨ͠ɻޙ΄Ͳ͝Ұಡ͍ͩ͘͞ !FYQBKQɺ!KPLFSͷηογϣϯ΋ָ͠ΈͰ͢Ͷɻ
  21. 3BJMTͷؾ࣋ͪʹͳͬͯߟ͑Δ w "3#BTFͷΦϒδΣΫτΛੜ੒͢Δͱ͖ͷΠϯλʔϑΣʔε͕͜Ε w ͷͪʹಉ༷ͷ*'Λ࡞ΔͨΊͷ"DUJWF.PEFM ҎԼ".P ΋ग़͍ͯΔ w ͞Βʹద੾ʹೖྗΛߜΔͨΊͷػߏͱͯ͠4USPOH1BSBNFUFST΋͋Δ w

    ͍ΖΜͳํ͕ࣜ͋Δ͏ͪɺNBTTBTTJHONFOUͱ૬ੑͷྑ͍΍͕ͭ࠾༻͞Εͨ ΤϯτϦϙΠϯτʹBUUSJCVUFTͷ)BTI ͷΑ͏ͳ΋ͷ Λ౉ͯ͠ NBTTBTTJHONFOU͠ɺϑΝαʔυΛݺͿͷ͕جຊߏ଄
  22. "DUJWF4VQQPSU$VSSFOU"UUSJCVUFT w εϨουϩʔΧϧ ˺8FCϦΫΤετε͝ͱ Ͱม਺Λڞ༗Ͱ͖Δɻ w 3BJMT  Ͱಋೖ͞ΕͨɻҎ߱ɺࢍ൱྆࿦͋Δɻ w

    ٖࣅάϩʔόϧม਺ͷΑ͏ʹɺҾ਺Ͱͷ࣋ͪճ͕͠ෆཁͰศརɻศར    w ࢲ΋౰ॳ͸ջٙత͕ͩͬͨɺྑͦ͞͏ʹࢥ͖͑ͯͨɻ w ࣌ؒͷܦաͰڑ཭ײ͕มΘ͖ͬͯͨɻ୯७઀৮ޮՌͬͯڧྗͰ͢Ͷɻ w ༻๏༻ྔʹ͸ؾΛ͚ͭΔલఏͰɺࢼͯ͠Έ͍ͨɻ w ͜Ε΋·ͨɺզͳ͕Β໘ന͍ଶ౓ͷมԽͩͳɺͱࢥ͍·͢ɻ ,BJHJPO3BJMTɺ!TBNQPLVPLLBOFOͷηογϣϯλΠτϧɺʰ"DUJWF4VQQPSU$VSSFOU"UUSJCVUFTͬ͘͢͝ ศརͳͷʹݏΘΕऀʁʂʱ͕·͞ʹͦͷঢ়گΛද͍ͯ͠·͕͢ɺ೥ʹSBJMTOFX͢ΔͳΒΞϦͱࢥ͍·͢ɻ
  23. ϝʔϧΞυϨεͱɺͦͷଞϓϩϑΟʔϧߋ৽Ͱ͖Δ Current.set(user: users(:alice)) do topics = Topic.where(name: %w[ruby rails]) form

    = ProfileUpdateForm.new( description: 'I love Ruby & Rails.', email: '[email protected]', topic_ids: topics.map(&:id) ) form.call profile = form.profile.reload expect(profile.topics).to contain_exactly(*topics) end
  24. ͯ͞ʮϓϩϑΟʔϧߋ৽͍ͨ͠ʯ໰୊͸ղ͚ͨ w ΞΫγϣϯͰϝΞυͱɺͦͷଞϓϩϑΟʔϧ ঺հจɺڵຯͷ͋ΔτϐοΫ Λߋ৽Ͱ͖͍ͯͦ͏ w ͓ͬͱɺϝΞυͷ౸ୡ֬ೝ͕ඞཁͰ͸  w ϋοϐʔύεΛ࡞ΓʮͦΕͰ͸͏·͍͔͘ͳ͍͜ͱʯʹؾ͚ͮͨ

    w ͏·͍ͬͨ͘Γɺ͍͔ͳ͔ͬͨΓ͢Δ rails ࣌ؒϛʔςΟϯάͯ͠ߟ͑ͨઃܭΛɺ͍࣮͟૷ͨ͠Β෼Ͱ࢓༷όάʹؾ͍ͮͨܦݧɺ͋Δͱࢥ͍·͢ɻ ͦͷؾ͖ͮΛϑΟʔνϟ࣮૷ͱ͍͏εέʔϧͰಘΔͨΊͷ׆ಈͱߟ͍͑ͯͩ͘͞ɻͰ͖Δ͚ͩૣ͘ؾ͖͍ͮͨɻ
  25. 😀ར༻ऀ͸ɺࣗ෼ͷϓϩϑΟʔϧΛมߋͰ͖Δ w લఏ w ར༻ऀͱͯ͠ϩάΠϯ͓ͯ͠Γ w ϓϩϑΟʔϧϖʔδΛ։͍͍ͯΔͱͯ͠ w γφϦΦ w

    ʮฤूʯΛΫϦοΫ͢Δ w ʮࣗݾ঺հʯʹʮ3VCZͱ3BJMT͕޷͖Ͱ͢ʯͱೖྗ͢Δ w ʮϝʔϧΞυϨεʯʹʮOFX!FYBNQMFDPNʯͱೖྗ͢Δ w ʮڵຯͷ͋ΔτϐοΫʯͰɺʮ3VCZʯͱʮ3BJMTʯΛνΣοΫ͢Δ w ʮߋ৽ʯΛΫϦοΫ͢Δɻ w ʮϓϩϑΟʔϧΛߋ৽͠·ͨ͠ʯͱදࣔ͞Ε͍ͯΔ͜ͱ w ϝΞυཝʹ͸ʮPME!FYBNQMFDPNʯ͕දࣔ͞Ε͍ͯΔ͜ͱ w ʮOFX!FYBNQMFDPNʯѼʹʮϝʔϧΞυϨεͷ֬ೝʯͱ͍͏ϝʔϧ͕ಧ͘͜ͱ
  26. 1SP fi MF6QEBUF'PSNΛมߋ͢Δ w VTFSDSFEFOUJBMFNBJM͸·ͩߋ৽͠ͳ͍ɻ w ୅ΘΓʹʮϝΞυมߋͷਃ੥ʯΛ࡞Δɻ w &NBJM$IBOHF3FRVFTU͋ͨΓͰͲ͏͔ɻ w

    VTFS@JE FNBJM UPLFO FYQJSFT@BU VTFE@BU DSFBUFE@BU͋ͨΓ  w dSFRVFTUFNBJMѼʹ֬ೝϝʔϧΛૹ৴͢Δɻ ͨͩͷ༨ஊͰ͕͢ɺFYQJSZͷදݱͱͯ͠ɺແޮʹͳΔ࣌ࠁΛ%#อଘ͢Δྲྀ೿ͱɺอଘ͢Δͷ͸࡞੒೔ʹ͓͖ͯ͠ ಡΈग़࣌͠ʹܭࢉ͢Δྲྀ೿͕͋Δؾ͕͠·͢ɻࢲ͸%#ݟͨΒ༗ޮ͔Ͳ͏͔͕Θ͔Δલऀͷํ͕޷͖Ͱ͢ɻ
  27. Current.set(user: users(:alice)) do topics = Topic.where(name: %w[ruby rails]) old_email =

    Current.user.email new_email = '[email protected]' form = ProfileUpdateForm.new( description: 'I love Ruby & Rails.', email: new_email, topic_ids: topics.map(&:id) ) form.call profile = form.profile.reload expect(profile.topics).to contain_exactly(*topics) expect(profile.user.email).to eq(old_email) expect(form.email_change_request&.email).to eq(new_email) expect(ActionMailer::Base.deliveries.size).to eq(1) end
  28. ϝʔϧૹ৴ίʔυ͸Ͳ͜ʹஔ͘  ࠶ w ৔߹ʹΑΔɻ͍ͬͨΜɺߟ͓͑ͯ͘ʹཹΊͨɻ w ʮ࠷΋γϯϓϧͰɺ͏·͍͖ͦ͘͏ͳ΋ͷ͸ԿͰ͔͢ ʯ w ʮͦͷͱ͖ʯ͕དྷͨɻ

    w ࢀՃొ࿥ͷ௨஌ϝʔϧ͸ίϯτϩʔϥ͔Βૹͬͨɻ w ͜ͷϓϩϑΟʔϧมߋ͸͢Ͱʹ'PSN0CKFDU͋ΔͷͰɺ'0ͰૹΔ  w ͜͜Ͱ'0ͱ͍͏֓೦͕ಋೖ͞ΕΔΘ͚Ͱɺ͡Ό͋ࢀՃొ࿥΋'0ʹدͤΔ  w Ͳ͏͢Δ
  29. ϑΥʔε͕มΘΔͱίʔυ΋มΘΔ ͜ͱ͕͋Δ w ྫ͑͹ w ి࿩൪߸΋౸ୡ֬ೝͨ͘͠ͳͬͯ͘Δɻ γϣʔτϝʔϧૹ৴Λ"DUJWF+PCͰಠ࣮ࣗ૷͢Δɻ w ϓϩϑΟʔϧߋ৽ͷ'PSN0CKFDU͔ΒɺδϣϒΛQFSGPSN@MBUFS͠Α͏͔ͳɻ w

    ͱ͍͏͜ͱͰ'0͕ඞཁͳΔͷ͸ؒҧ͍ͳͦ͞͏ɻ ͳΒ൑அΛอཹͯͨ͠ࢀՃొ࿥΋'0ʹ͍͍͔ͯ͠΋ͳɻ w ࢀՃొ࿥ؔ࿈ͷϝʔϧ΋'0͔ΒૹΔΑ͏ʹམͪண͖ͦ͏ɻ w Αͦ͞͏
  30. ࡞༻͍ͯ͠ΔϑΥʔεʹ஫ҙΛ෷͏ w ιϑτ΢ΣΞͷߏ଄͸͍ΖΜͳϑΥʔεʹӨڹ͞ΕΔɻ w ࢖͍ͬͯΔϑϨʔϜϫʔΫΛ͸͡Ίͱ͢Δٕज़ w ଞͷ৔ॴͷطଘίʔυ w ΍Ζ͏ͱ͍ͯ͠Δ͜ͱ΁ͷ֬৴౓߹͍ w

    ࡞༻͍ͯ͠ΔϑΥʔεʹ஫ҙΛ෷͏ɻ wʮ࠷΋γϯϓϧͰɺ͏·͍͘͘ʯΑ͏ʹมߋ͢Δɻ ߦͬͨΓདྷͨΓͰΘ͔ΓͮΒͯ͘͢Έ·ͤΜɻͰ΋͜ͷ᫴८͕ͦ͜େࣄͳΜͰ͢Αɺͱ͍͏झࢫͰ͢ɻ
  31. w ϋοϐʔύε😀ΧϯϑΝϨϯεʹࢀՃొ࿥Ͱ͖ΔΑ͏ʹ͢Δɻ w ຊ౰ʹγϯϓϧʹɺొ࿥͚ͩͰ͖Δɻ w ࢀՃొ࿥࣌ʹϝʔϧΛૹΔΑ͏ʹ͢Δɻ w ϝʔϧૹ৴ίʔυ͸ɺ൑அΛཹอ͠ίϯτϩʔϥʹ͓͍͓ͯ͘ɻ w ϋοϐʔύε😀ϓϩϑΟʔϧߋ৽Ͱɺෳ਺ςʔϒϧΛߋ৽͢Δɻ

    w ͜͜ͰΑ͏΍͘'PSN0CKFDUΛಋೖ͢Δɻ w '0ͱ͍͏ߏ଄͸ྑͦ͞͏ɻ͍ͬΆ͏ػೳͷෆ଍ʹؾ͕ͭ͘ɻ w ϝΞυมߋͷͨΊͷ౸ୡ֬ೝͷ࢓૊ΈΛಋೖ͢Δɻ w ্هͷ'0͕͋Δͱ࡞Γ΍͍͢ͱ࣮ײ͢Δɻ w '0͕Αͦ͞͏ͩͬͨͷͰɺࢀՃొ࿥΋Ҡ͔͢ߟ͑࢝ΊΔɻ
  32. w ϋοϐʔύε😀ΧϯϑΝϨϯεʹࢀՃొ࿥Ͱ͖ΔΑ͏ʹ͢Δɻ w ຊ౰ʹγϯϓϧʹɺొ࿥͚ͩͰ͖Δɻ w ࢀՃొ࿥࣌ʹϝʔϧΛૹΔΑ͏ʹ͢Δɻ w ϝʔϧૹ৴ίʔυ͸ɺ൑அΛཹอ͠ίϯτϩʔϥʹ͓͍͓ͯ͘ɻ w ϋοϐʔύε😀ϓϩϑΟʔϧߋ৽Ͱɺෳ਺ςʔϒϧΛߋ৽͢Δɻ

    w ͜͜ͰΑ͏΍͘'PSN0CKFDUΛಋೖ͢Δɻ w '0ͱ͍͏ߏ଄͸ྑͦ͞͏ɻ͍ͬΆ͏ػೳͷෆ଍ʹؾ͕ͭ͘ɻ w ϝΞυมߋͷͨΊͷ౸ୡ֬ೝͷ࢓૊ΈΛಋೖ͢Δɻ w ্هͷ'0͕͋Δͱ࡞Γ΍͍͢ͱ࣮ײ͢Δɻ w '0͕Αͦ͞͏ͩͬͨͷͰɺࢀՃొ࿥΋Ҡ͔͢ߟ͑࢝ΊΔɻ
  33. ಈతʹ͢Δ৺ཧతΞϓϩʔν w ίʔυΛॻ͍ͯɺಈ͔ͯ͠ɺ࠶ͼಡΉɻϑΟʔυόοΫΛ ड͚ɺͦΕʹԠͯ͡ίʔυΛมߋ͢Δɻ w ࣗ෼ͷʮྑ͍ίʔυʹͳͬͨͳʯʮͳΜ͔Θ͔ΓͮΒ͍ͳʯͱ͍͏ ײ֮Λେ੾ʹ͢Δɻ w Ұؾʹ΍Γ͗͢ͳ͍ɻগͣͭ͠ɻ w

    ࠓͷখ͞ͳมߋͰʮྑ͍ίʔυʹͳͬͨʯ  w 5JEZ'JSTU ͕ͱͯ΋ࢀߟʹͳΓ·͢ɻ ޷͖ͳ5JEZJOH͸Ґ͸ʮεςʔτϝϯτΛখ෼͚ʹ͢Δʯ͢ͳΘۭͪߦΛ͍ΕΔ΍ͭͰ͢ɻҐ͸ʮͻͱ͔ͨ·Γʯɻ
  34. “ 、 重要 。整頓 平穏 満 足 、喜 ? 多少

    。 重要 。 、 最 高 自 分 、 良 。 急 、変更 痛 伴 変更 、最 高 自 分 。 ,FOU#FDLʮ5JEZ'JSTU ʯ ষɹ݁࿦
  35. νʔϜͰϓϩμΫτΛಈతʹ։ൃ͢Δ w ͜ͷྑ͞ΛνʔϜͰͷϓϩμΫτ։ൃʹεέʔϧ͍ͤͨ͞ɻ ಈతͳ։ൃ͸ͨͷ͍͠ w ΍Γ͍ͨ͜ͱʹରͯ͠ɺ࠷খݶʹมԽͤͯ͞ w *3#ͷߦ͚ͩΛೖྗͯ͠ w ͦ͜Ͱ͏·͍ͬͨ͘ͷΛιʔείʔυʹ͖࣋ͬͯͯ

    w ࣮ߦ݁ՌͷϑΟʔυόοΫΛ͏͚ͯ w ͏·͍ͬͨ͘Γ͍͔ͳ͔ͬͨΓ͢Δ w ΍Ζ͏ͱͨ͜͠ͱͷཧղ͕ਂ·Δɻ w ࣍ͷߦಈ΍ɺ΍Γ͍ͨ͜ͱࣗମ͕ಈతʹมΘΔɻ
  36. ϓϩμΫτ։ൃͷϩʔϧ w اըऀ  1E.ɺࣄۀ੹೚ऀɺϚʔέλʔɺσ ΟϨΫλʔɺηʔϧεͳͲ  w ओʹɺࣄۀͱͯ͠ఏڙ͍ͨ͠Ձ஋ΛɺϓϩμΫτ΍ͦͷػೳͱͯ͠ ൃҊɾاըɾద༻͢Δ͜ͱʹ੹೚Λ࣋ͭਓͨͪɻ

    w ։ൃऀ  ϓϩάϥϚʔɺσβΠφʔɺ43&ɺ2"&ɺΞδϟΠϧίʔνͳͲ  w ओʹɺϓϩμΫτ΍ͦͷػೳΛɺಈ࡞͢Διϑτ΢ΣΞͱͯ͠ ઃܭɾ࣮૷ɾσϓϩΠ͢Δ͜ͱʹ੹೚Λ࣋ͭਓͨͪɻ ୯७͗͢Δೋ෼ͳͷͰແݶʹݴ͍͍ͨ͜ͱ͕͋Δͱࢥ͏ͷͰ͕͢ɺ͍ͬͨΜ͜ͷఆٛͰߦ͔͍ͤͯͩ͘͞ɻ ݱ࣮Ͱ͸ɺͦΕͧΕͷઐ໳ੑΛ্࣋ͬͨͰΫϩεΦʔόʔ͢Δͷ͕ͱͯ΋େࣄͰ͢ΑͶɻ
  37. اըऀͱ։ൃऀͷίϛϡχέʔγϣϯ w اըऀ  ͸ w ఏڙ͍ͨ͠Ձ஋Λɺιϑτ΢ΣΞͷมߋͱͯ͠૝૾͢Δɻ w ૝૾ͨ͠มߋΛɺࣗ਎ͷจ຺ͰΤϯίʔυ͠ɺυΩϡϝϯτʹ දݱ͢Δɻ

    w ։ൃऀ  ͸ w ఏࣔ͞ΕͨυΩϡϝϯτͳͲΛɺࣗ਎ͷจ຺Ͱσίʔυ͠ɺ ࣮૷͢΂͖ιϑτ΢ΣΞΛ૝૾͢Δɻ w ࣗ෼ͷ૝૾ʹԊ͏Α͏ɺιϑτ΢ΣΞΛมߋ͢Δɻ
  38. υΩϡϝϯτͰͷҙࢥૄ௨͸೉͍͠ w υΩϡϝϯτ্ͷιϑτ΢ΣΞ͸ɺॻ͖खͱಡΈख ͦΕͧΕͷจ຺ʹґଘͯ͠ಡΈॻ͖͞ΕΔɻ w ʮ͜͜͸໨ཱͭΑ͏ʹར༻ऀʹ఻͍͑ͨͳɻʰϝοηʔδΛϙοϓΞοϓͤ͞Δʱͬͱʯ w ʮϙοϓΞοϓ Ϟʔμϧʹ͠Ζͬͯ͜ͱ σβΠϯγεςϜʹ͜ͷαΠζͷϞʔμϧͳ͍

    ɹ͔Β࡞Βͳ͍ͱɻଞͷϞʔμϧͱͷ༏ઌॱ੍ޚ΋͠ͳ͍ͱʯ w ʮ։ൃऀ͕ղऍͨ͠υΩϡϝϯτͷͱ͓Γʯ࣮૷ͯ͠΋ اըऀͷ૝ఆ͢ΔՁ஋ͱ͸ҟͳΔ Մೳੑ͕ߴ͍ ɻ νʔϜͷ࿅౓্͕͕ΔͱΤϯίʔυσίʔυਫ਼౓΋͕͋ΔͷͰɺυΩϡϝϯτͰͷҙࢥૄ௨ΛؚΉ ίϛϡχέʔγϣϯશൠ্͕खʹͳΓ·͢ɻʮϢϏΩλεݴޠʯ͕ҭͭɺΈ͍ͨͳɻ
  39.          

            ಈ͘ιϑτ΢ΣΞͰձ࿩͢Δ
  40. ྫϓϩϑΟʔϧͱϝΞυͷมߋ w ʮϝʔϧΞυϨεʯͱʮڵຯͷ͋ΔτϐοΫʯΛߋ৽Ͱ͖Δɻ w ʮڵຯͷ͋ΔτϐοΫʯ͸ଈ࣌൓ө͞ΕΔ w ʮϝʔϧΞυϨεʯ͸มߋதʹͳΓɺมߋखଓ͖ΛਐΊͯ΄͍͠ͱදࣔ͞ΕΔ w มߋͷखॱ͕ॻ͔Εͨϝʔϧ͕ૹ৴͞ΕΔ w

    ͜͜·ͰΛ৮ͬͯΈͨاըऀ͸ w ϝΞυมߋखଓ͖ͷϝοηʔδ΍ϝʔϧຊจΛߟ͑ΒΕΔ w ͜ͷखॱ͕ར༻ऀʹͱͬͯΘ͔Γ΍͍͢ͷ͔ Λ࠶ݕ౼Ͱ͖Δ ಈ͘ιϑτ΢ΣΞͷํΛݟͯߟ͑ΔͱɺυΩϡϝϯτͷํΛݟ͍ͯΔ࣌ʹൺ΂ͯɺͦΕΛ࢖͏ར༻ऀͷ ཱ৔ʹ͚ۙͮΔͷͰɺར༻ऀͷ͜ͱΛߟ͑΍͘͢ͳΔͱ͍͏͔ɻ
  41. ͦΕͧΕͷ৬ೳΛൃشͰ͖Δ w ಈ͘ιϑτ΢ΣΞΛ࣮ࡍʹૢ࡞͢Δ͜ͱͰɺ σβΠφʔ΍2"ΤϯδχΞ΋ɺΑΓଟ͘ΛൃݟͰ͖Δɻ w ΋ͪΖΜϓϩάϥϚʔ΋ɺװͱͳΔ෦෼͕͋Δͱɺ֦ு΍੔಴͕ਐΊ΍ͯ͘͢خ͍͠ɻ w اըऀ͸ɺࣄۀ׆༻ͷܭըΛ൑அɾݟ௚͠Ͱ͖Δɻ w ͋ͱΞϨͱιϨΛ࡞ͬͨΒ༧ఆ௨ΓϦϦʔεͰ͖Δͳɺͱ͔

    w Ή͠Ζ΋͏.71ͱͯ͠ར༻ऀʹఏڙͯ͠ɺ࢒Γ͸ޙ௥͍ͰվमͰ͖Δͳɺͱ͔ w ٯʹɺ͜ͷࢪࡦ͸ͪΐͬͱμϝ͔΋ɺૣΊʹݟ௚͔͢ɺͱ͔ ϋοϐʔύεΛʮੴͷεʔϓʯ ʮୡਓϓϩάϥϚʔʯࢀর ͷੴͱͯ͠ػೳ͍ͤͨ͞ͷͰ͢ɻ
  42. গͮͭ͠ɺಈతʹशख़͢Δ w طଘͷίʔυͷมߋ͸೉͍͠ɻ%#Λมߋ͢Δͷ͸΋ͬͱ೉͍͠ɻ w ͔ͩΒɺٕज़Λֶͼɺ೔ʑΑ͍ίʔυΛॻ͍͍ͯ͘ɻ w ࣗಈςετ΍ɺ$*$%؀ڥΛߏங͢Δͷ΋೉͍͠ɻ w ͔ͩΒɺܧଓతʹҡ࣋վળ͍ͯ͘͠ɻ w

    اըऀͷ๬ΉϑΟʔνϟ͔Βɺద੾ͳαΠζͷϋοϐʔύεΛఆٛ͢Δͷ΋ɺ΍ͬͯΈΔͱ೉͍͠ɻ w ͔ͩΒɺ܁Γฦ͠։ൃͯ͠νʔϜશମͷ࿅౓Λ্͍͛ͯ͘ɻ w ࣄۀʹ࠷దͳࢪࡦΛͨͯɺ࣮ݱ͢Δͷ͸Ϛδ೉͍͠ɻ w ͔ͩΒɺ܁Γฦͯ͠௅ઓ͠ଓ͚Δ͔͠ͳ͍ɻ
  43. ιϑτ΢ΣΞΛಈతʹ։ൃ͢Δ w ͜ͷྑ͞ΛϓϩάϥϚʔͷ࢓ࣄશମʹεέʔϧ͍ͤͨ͞ɻ ಈతͳ։ൃ͸ͨͷ͍͠ w ΍Γ͍ͨ͜ͱʹରͯ͠ɺ࠷খݶʹมԽͤͯ͞ w *3#ͷߦ͚ͩΛೖྗͯ͠ w ͦ͜Ͱ͏·͍ͬͨ͘ͷΛιʔείʔυʹ͖࣋ͬͯͯ

    w ࣮ߦ݁ՌͷϑΟʔυόοΫΛ͏͚ͯ w ͏·͍ͬͨ͘Γ͍͔ͳ͔ͬͨΓ͢Δ w ΍Ζ͏ͱͨ͜͠ͱͷཧղ͕ਂ·Δɻ w ࣍ͷߦಈ΍ɺ΍Γ͍ͨ͜ͱࣗମ͕ಈతʹมΘΔɻ
  44. “ 個 人 対話 、 包括的 動 、 契約交渉 顧客

    協調 、 計画 従 変化 対応 、 価値 。 、左記 価値 認 、私 右記 価値 。 ΞδϟΠϧιϑτ΢ΣΞ։ൃએݴ IUUQTBHJMFNBOJGFTUPPSHJTPKBNBOJGFTUPIUNM
  45. EZOBNJD w աڈͷઃܭʹ͍ͭͯͷൃදͰ΋ʮܧଓͯ͠վળ͢Δͷ͕େࣄʯͱ͸ݴ͍ͬͯͨɻ w *EFOUJGZJOH6TFS*EFOUJUZ!,BJHJPO3BJMT w 4JNQMJDJUZPO3BJMT3%# 3&45 3VCZ!,BJHJPO3BJMT w

    ϑΥʔϜΦϒδΣΫτͱͷ޲͖߹͍ํ!3BJMT%FWFMPQFST.FFUVQ%BZ&YUSFNF w มԽ͢Δ͜ͱɺมԽͤ͞Δ͜ͱɺมԽͰ͖Δͱ৴͡Δ͜ͱ͕ͦ͜େࣄͳͷͩ ͱ͍͏؍఺Ͱ࿩Λͨ͘͠ͳͬͨɻ w ιϑτ΢ΣΞ͸ɺ੩తTUBUJDͳߏ଄෺Ͱ͸ͳ͘ɺಈతEZOBNJDͳʮؔΘΔਓͨͪ օͷɺݱࡏͷཧղͷදݱͰ͋Δʯ͜ͱΛ࣠ʹͨ͠࿩Λ͠·ͨ͠ɻ ΞδϟΠϧιϑτ΢ΣΞ։ൃએݴͷʮࠨهͷࣄฑʯͷΑ͏ʹɺઃܭΛؚΉٕज़త୎ӽ΋ؒҧ͍ͳ͘େࣄͰ͢ɻ ͕ͦ͜ج൫ͰɺͦΕ͕͋Ε͹ͦ͜ɺมԽͤ͞Δ΂͖ํ޲Λ൑அͰ͖ΔΑ͏ʹͳΔͷͰɻ