Presented in Qiita Night Lightning Talks on 2022-12-02 https://increments.connpass.com/event/265957/
RubyͱRailsͷԿ͕ڧ͍ͷ͔ऀ থل
View Slide
Software Engineer, Senior Expert at WED Inc.✓Ruby Committer / ex. FreeBSD Committer✓Huginn (⭐37k) Co-maintainer✓Hammerspoon (⭐9.8k) ContributorWrites Production Code InRuby / TypeScript / Go / Luaऀ থل (Akinori Musha)@knu on GitHub and Twitter
తʹݴ͏ͱɺͱͯͭͳ͍ॊೈ͞Λ͍࣋ͬͯΔRubyͱRailsͷڧΈͱΕͯΈΔͱ࿀͘͠ͳΔڧΈΛৼΓฦΔ
Railsࠓੜ࢈ੑͷ࠷దղͷͻͱͭ• ϏϡʔΛ࣋ͨͳ͍APIαʔόͰ͋ͬͯڧΈ͕ͨ͘͞Μ͋Δ• Ή͠ΖϑϩϯτΤϯυJS/TSʹ͍ͤͨ• RubyͱRailsϏδωεϩδοΫΛॻ͘ͷʹదͨ͠ݴޠͱϑϨʔϜϫʔΫ• جຊޠኮ͕๛ͰɺυϝΠϯʹదͨ͠৽͍͠ޠኮΛ૿͢ͷಘҙ• ΓͱΓ͢ΔΦϒδΣΫτ͕΄΅ActiveRecord ModelΠϯελϯεRelationΦϒδΣΫτʹدΔͷͰɺ΄΅self-documented, ݟΔ࣮͕ܾ·͍ͬͯΔͷͰಈతܕ͚ͷऑΈཱ͕ͪͮΒ͍• ActiveRecordͷྫ֎ͱrescue_fromʹΑΔิػߏ͕RESTͱ͔ͬͪΓϋϚ͍ͬͯΔ
ActiveRecord͕ڧ͍• CRUD: ܕมόϦσʔγϣϯΛඋ• ݅ݕࡧɺJOINɺूܭɺࢥ͍ͷ··• ·ͱͳSQLΛ࡞ͬͯ͘ΕΔ• DRYͷపఈ• DBͷεΩʔϚͱstructఆٛΛೋॏཧ͠ͳ͍͍ͯ͘• defaultಡΜͰ͘ΕΔ
ActiveRecord Migration͕ڧ͍• ฒߦ։ൃॱෆಉͷσϓϩΠʹ͑Δόʔδϣϯཧ• ݸʑͷϚΠάϨʔγϣϯʹ͍ͭͯద༻ঢ়ଶ͕ཧ͞Ε͍ͯͯɺݸผʹup/downՄೳ• DDLDMLྲྀͤΔ• ϏϡʔϑΝϯΫγϣϯͷྨՃgemͰεΩʔϚͷҰ෦ͱͯ͠ཧՄೳ• σʔλϕʔεΤϯδϯΛ͍ͤΔʂGoͰۤ࿑͠·ͨ͠😝
Sidekiq͕ڧ͍• खܰʹδϣϒΛ࡞͙ͬͯ͑͢Δ• PubSubͩͱTerraformͰτϐοΫΛ৽ઃͯ͠ϫʔΧʔʹsubscriberΛ༻ҙͯ͠…• ߴͳྲྀྔ੍ޚॏෳɾഉଞ੍ޚ͕ඞཁʹͳͬͯ༰қʹରԠ• Sidekiq Pro/EnterpriseΛങ͍͍ͬͯ͠ɺOSSͷιϦϡʔγϣϯ๛
RSpec͕ڧ͍• ͳΜͰϞοΫͰ͖Δ• ΠϯλϑΣʔεΛఆٛͨ͠Γ͠ͳ͕ͯͯ͘͢Test Ready• σʔλϕʔεͷΫϦΞͳͲͥΜͿRails+RSpecଆͰ໘Λݟͯ͘ΕΔ• E2EςετʢFeature specʣඪ४උ
Rails console͕ڧ͍• ௐࠪσʔλෆ߹ͷۓٸमਖ਼ɺόονॲཧͷϦϋʔαϧͳͲʹେ׆༂• ίϯύΠϧσϓϩΠͳ͠ʹɺҙͷϏδωεϩδοΫΛݺͼग़ͤΔ• όονॲཧͷྨ֎෦αʔϏε࿈ܞଟ͘ɺϫϯγϣοτͩͬͨΓͯ͠ɺ೦ೖΓͳςετΛॻ͍͔ͯΒ࣮͢Δίετ͕·ͬͨ͘ݟ߹Θͳ͘ײ͡Δ͜ͱଟ͍• ͦΜͳͱ͖ɺ։ൃڥεςʔδϯάڥͰRails console͔Β෮ࢼߦͯ֬͠ೝͰ͖Δ͜ͱେ͖ͳث͜Εຊʹݟա͕ͪ͝͠😳
తʹݴ͏ͱɺ։ൃମݧͰޙΕΛऔ͍ͬͯΔRubyͱRailsͷऑΈͱΕͯΈΔͱΓͨ͘ͳ͘ऑΈΛৼΓฦΔ
Rubyͷ։ൃମݧϋοϐʔͳΜ͡Όͳ͍ͷʁ👍ҙਤΛࣗ༝ʹදݱͰ͖ΔɺറΓ͕গͳ͍• ݴޠͷ੍ճආͷςΫχοΫ͕ཁΒͳ͍• ʮͨΊͷʯσβΠϯύλʔϯɺΠϯλʔϑΣʔε͕ͳ͍👎੍Λදݱɺڧ੍͢Δޠኮʹ͍͠• ಡΈखʹͱͬͯͷώϯτɺΠϯλϓϦλʹͱͬͯͷώϯτ• ॻ͖खͷϛεࢭ
ॳΊͯ͞ΘΔਓʹ͘͞͠…• ϕʮRubyͰ͜Μͳ෩ʹॻ͚ΔΑʯ• ॳʮ͍͢͝ɺ؆ܿͰ͔͍͍ͬ͜Ͱ͢Ͷʂʯ• ॳʮʢͰଞͷݴޠʹԠ༻ޮ͔ͳ͍ࣝͩ…ʣʯ• ॳʮͥΜͥΜิީิ͕ग़ͯ͜ͳ͍Μ͚ͩͲΈͳ͞ΜͲ͏ͬͯઃఆͯ͠ΔΜͰ͔͢ʁʯ• ϕʮ͍͢͝ϓϥάΠϯઃఆͱ͔ಛʹͳͯ͘ɺΈΜͳۭͰॻ͍ͯ·͢… ͦΕ͔RubyMineͬͯΈΔʁʯ• ॳʮʢࢧԉͳ͠Ͱॻ͘ͷ·͔͡…ʣʯTypeScript/Go/KotlinݴΘ͕ͣͳɺPythonPHPܕΞϊςʔγϣϯΛॻ͘͠ఆٛδϟϯϓΛΜΜ͏ͷ͕;ͭ͏😇
LinterΛࣂ͍׳Β͢ͷ͕େม• RubocopͷσϑΥϧτઃఆ͕ͭΒ͍• ίϛϡχςΟʔϕʔεͱ͍͏ͷ͕ۂऀͰɺͤͱݴΘΕΔ͕ཧ༝͕ෆ໌ͳͷͰ࠷ॳ͔Βܗ֚Խ͍ͯ͠Δ• ࣗಈϑΥʔϚολʔͱͯ͠ಈ࡞͕͗͢Δ• อଘ࣌ࣗಈܗʹͯ͠ؾܰʹηʔϒͰܗɺͱ͍͕ͨ͠ඵֻ͔ΔͷͰମݧ͕ྑ͘ͳ͍
ܕ͚ରԠΛͬͱ͕ΜΓ͍ͨ• ܕݱϓϩάϥϚʔͷϝϯλϧϞσϧʹ͍ࠜͯ͟͠Δ• Ή͠ΖίʔυͷҙਤͷҰ෦ͱͯ͠ܕΛॻ͖͍ͨͰ͟͝Δ• ผϑΝΠϧཧ͠ΜͲ͍.rbs (.rbi)• ΤσΟλͰΠϯϥΠϯදࣔɾฤूͰ͖Ε؇ʁ• SorbetʹΑΔΞϊςʔγϣϯDRYʹͳ͍ͬͯͳ͍• ϝιουͷԾҾɺಛʹΩʔϫʔυҾͷೋॻ͖͕ͩΔ͍
ͦΕͰ… RubyͱRailsڧ͍มԽΛแ༰͢Δྗ
͜Ε͕మ൘ߏ✨RailsϞϊϦεͷपΓʹϚΠΫϩαʔϏε• ߴϨΠϠʔΛ୲͏ʹ;͞Θ͍͠ॊೈੑ• GoͰ֎෦γεςϜ࿈ܞόοΫΤϯυΛॻ͍ͯRails͔ΒgRPC• PythonͰը૾ॲཧαʔϏεΛॻ͍ͯSidekiq͔Β࣮ߦ• LPಛઃαΠτNuxt.jsFreshͰָ͘͠ॻ͘
https://wed.company/recruitWED Inc. is Hiring!WEDҰॹʹ։ൃ͢ΔؒΛ୳͍ͯ͠·͢ʂ