Slide 1

Slide 1 text

;ͭ͏ͷͻͱ͕ ͕Μ͹Βͣʹ ໰୊ࣇίʔυΛվળ͍ͯ͠Δ࿩ 2021.03.02. ANDPAD TechLive #3 @makicamel

Slide 2

Slide 2 text

w!NBLJDBNFM઒ݪສق wɹ w3VCZͱϏʔϧɹɹͱ͓ञ͕޷͖ ࣗݾ঺հ

Slide 3

Slide 3 text

ANDPADͷίʔυ͸໰୊ࣇἧ͍

Slide 4

Slide 4 text

໰୊ࣇྫ

Slide 5

Slide 5 text

class Users::GreetingsController < Users::ApplicationController before_action :set_greeting before_action :energy_required def set_greeting @greeting = current_user.greeting end before_action :depressed_greeting_required, only: [:destroy] def depressed_greeting_required raise UnauthorizedError unless @greeting.depressed? end # νϟοτͰͷΈར༻ include Common::Chats::GreetingsController def greeting_permissions chat_permissions end end ݟ௨͠ͷ ѱ͍Ϋϥε

Slide 6

Slide 6 text

class Greeting < ApplicationRecord include GreetingRelation # relation include GreetingScope # scope # enum include State # ֤greetingͷ࡞੒ include ForActionAccount include ForActionOrder # include ForActionWork include ForActionCustomer # ... end ϞδϡʔϧͰޡຐԽ͞ΕͨϑΝοτΫϥε

Slide 7

Slide 7 text

class Users::ContactsController < Users::ApplicationController crud_controller Contact, [:new, :create] def new # ... end private def scope # ... end end ΦϨΦϨϑϨʔϜϫʔΫ

Slide 8

Slide 8 text

class Admin::GreetingsController < Admin::ApplicationController AdminRoutes::STRUCTURES.each_pair do |k, v| define_method k do # ... end v.each_pair do |kk, vv| define_method "#{kk}_hi" do # ... end define_method “#{kk}_goodbye" do # ... end end end end ϝλϓϩ

Slide 9

Slide 9 text

ʮ͋ͬͦͷมߋਖ਼͍͠ΜͰ͚͢Ͳ طଘͷڍಈ͕Ͱ͢Ͷ 👼ʯ

Slide 10

Slide 10 text

※ ;ͭ͏ʹਆςʔϒϧͱ͔ৗਓʹ͸ཧղ͕ࠔ೉ͳίʔϧόοΫͱ͔΋͋Γ·͢

Slide 11

Slide 11 text

•ϝϯςίετ͕ߴ͍ •όάɾো֐Λى͜͠΍͍͢ •ௐࠪɾػೳ௥Ճɾमਖ਼ʹ͔͔Δ͕࣌ؒ૝ఆͷ n ഒ๲Ε͕ͪ •ΦϯϘʔσΟϯάίετ͕ߴ͍ •ׂΕ૭ΛੜΉ •ͳΜ͔Πϥοͱ͢Δ ໰୊ࣇ͕ͨͪҾ͖ى͜͢͜ͱ

Slide 12

Slide 12 text

;ͭ͏ͷίʔυʹ໭͍ͨ͠

Slide 13

Slide 13 text

ͱ͜ΖͰͦͷ޻਺͸Ͳ͜ʹ͋ΔΜͰ͔͢ʁ

Slide 14

Slide 14 text

ʰ)6/5&3º)6/5&3ʱୈר࿩ʮରܾᶆʯ෌ֽٛത

Slide 15

Slide 15 text

࢒೦ͳ͕Β೦ೳྗऀͰ͸ͳ͍ͷͰ

Slide 16

Slide 16 text

;ͭ͏ͷͻͱ͕ ͕Μ͹Βͣʹ ໰୊ࣇίʔυΛվળ͍ͯ͠Δ࿩

Slide 17

Slide 17 text

ຊ೔ͷίϯςϯπ •εΫϦϓτԽ͢Δ •͕Μ͹Βͳ͍ •҆શʹ΍Δ •޿ΊΔ ※ ʮΑ͍ઃܭͱ͸ʯʮࣗಈςετͷͳ͍ϓϩδΣΫτͰࣗಈςετΛॻ͘ʯ ͷΑ͏ͳ࿩͸͠·ͤΜ •εΫϦϓτԽ͢Δ •͕Μ͹Βͳ͍ •҆શʹ΍Δ •޿ΊΔ 🤖

Slide 18

Slide 18 text

class Users::GreetingsController < Users::ApplicationController before_action :set_greeting before_action :energy_required def set_greeting @greeting = current_user.greeting end before_action :depressed_greeting_required, only: [:destroy] def depressed_greeting_required raise UnauthorizedError unless @greeting.depressed? end # νϟοτͰͷΈར༻ include Common::Chats::GreetingsController def greeting_permissions chat_permissions end end ݟ௨͠ͷѱ͍ ίϯτϩʔϥ

Slide 19

Slide 19 text

class Users::GreetingsController < Users::ApplicationController before_action :set_greeting before_action :energy_required def set_greeting @greeting = current_user.greeting end before_action :depressed_greeting_required, only: [:destroy] def depressed_greeting_required raise UnauthorizedError unless @greeting.depressed? end # νϟοτͰͷΈར༻ include Common::Chats::GreetingsController def greeting_permissions chat_permissions end end •ΈͮΒ͍ •ͲΕ͕ΞΫγϣϯʁ •͍ͭͲͷίʔϧόοΫ͕ൃՐ͢Δͷʁ •͜ͷϞδϡʔϧ͸Ұମ…ʁ •chat_permissionsͬͯԿ

Slide 20

Slide 20 text

εΫϦϓτԽҎલ •ૺ۰͢Δ౓ʹख࡞ۀͰ੔ཧ •ඇΞΫγϣϯͳϝιουΛ private ʹ͢Δ •ίʔϧόοΫ΍ϞδϡʔϧͷincludeΛΫϥε্෦ʹ·ͱΊΔ

Slide 21

Slide 21 text

εΫϦϓτԽҎલ •ΊΜͲ͍͘͞ •ຖճಉ͜͡ͱ΍ͬͯΔ •εΫϦϓτԽͰ͖ΔͷͰ͸

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

•ϝιουͷهड़ॱ੔ཧ •1 Օॴ͔ΒͷΈݺ͹Ε͍ͯΔϞδϡʔϧͷΠϯϥΠϯԽ •ΦϨΦϨϑϨʔϜϫʔΫͷҾ͖ണ͕͠ ಉ͡มߋΛ·ͱΊͯػցతʹߦ͏ͷͰ
 ϨϏϡʔ͠΍͍͢ͱ͍͏ϝϦοτ΋ εΫϦϓτԽྫ🤖

Slide 24

Slide 24 text

•ʮಛఆύλʔϯͷจࣈྻΛ࣋ͭϝιουҰཡʯௐࠪ •਺ेʙ਺ඦͷௐࠪ݁Ռͷ GitHub Issue Խ εΫϦϓτԽྫ🤖 ࠶ར༻ੑ͕ߴ͘ϛεɾ࿙Εͳ͘ૣ͍ͷͰ ௐࠪʹ΋΂ΜΓ

Slide 25

Slide 25 text

ୀ۶ͳ͜ͱ͸3VCZʹ͓Ͷ͕͍͠Α͏4QFBLFS%FDLc!NBLJDBNFM IUUQTTQFBLFSEFDLDPNNBLJDBNFMBVUPNBUFUIFCPSJOHTUB⒎XJUISVCZ εΫϦϓτԽྫ🤖 •ଞͷྫɾ΂ΜΓͳಓ۩ʹ͍ͭͯ͸Ҏલผͷͱ͜ΖͰ͓࿩͠·ͨ͠

Slide 26

Slide 26 text

ຊ೔ͷίϯςϯπ •εΫϦϓτԽ͢Δ •͕Μ͹Βͳ͍ •҆શʹ΍Δ •޿ΊΔ 🏖

Slide 27

Slide 27 text

Case 1.

Slide 28

Slide 28 text

•༻్ෆ໌ͳίϯτϩʔϥ͕Ұఆ਺͋Δ •ফ͠๨Ε͕ओ •ௐࠪɾमਖ਼ޙʹʮ͑ͬ࢖ΘΕͯͳ͍ʯͱͳΔͱ൵͍͠ •ফ͍ͨ͠ •ϩάͰར༻༗ແΛ֬ೝޙʹ͞ΑͳΒ͢Δ ༻్ෆ໌ͳίϯτϩʔϥ

Slide 29

Slide 29 text

•ϦΫΤετ͕ͳ͍৔߹ •࡟আ •ϦΫΤετ͕͋Δ৔߹ •ଓ౤ •͘͝كʹϦΫΤετ͕͋Δ৔߹ •զʑ͸Ͳ͔͜Βདྷͨͷ͔ ༻్ෆ໌ͳίϯτϩʔϥ 🍎 ⚾

Slide 30

Slide 30 text

•ಛʹ JavaScript Λհͨ͠ར༻Օॴͷಛఆ͕ࠔ೉ •AngularJS, Vue.js, jQuery ͕ಉϦϙδτϦͰڞଘ •angularjs-rails-resource ͷࣗ༝౓͕ڟѱ •Өڹൣғͷ֬ೝʹ͕͔͔࣌ؒΔ •ͲΕ͚ͩௐ΂ͯ΋֬৴͕࣋ͯͳ͍ ༻్ෆ໌ͳίϯτϩʔϥ 'JOF-JOF1SPUPUZQJOHBOHVMBSKTSBJMTSFTPVSDF IUUQTHJUIVCDPN'JOF-JOF1SPUPUZQJOHBOHVMBSKTSBJMTSFTPVSDF

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

•before •͕Μ͹ͬͯ grep ͢Δͷ͸େมͩ͠࿙ΕΔ •after •ʮͭ·Γ஌Γ͍ͨͷͬͯϦϑΝϥͩΑͶʁʯ •Rails ʹฉ͚͹ָͰਖ਼֬ ͕Μ͹Βͳ͍

Slide 33

Slide 33 text

Case 2.

Slide 34

Slide 34 text

•Rails ͷϝιουͷར༻ঢ়گΛௐ΂͍ͨ •ಛఆΫϥε͕Ϩγʔόͷ࣌ •ಛఆͷύϥϝʔλΛड͚औΔ࣌ •grep ͸ແཧήʔ •Ruby ͸ࣗ༝ͳͷͰ ϝιουͷར༻ঢ়گΛ஌Γ͍ͨ

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

•before •͕Μ͹ͬͯ grep ͢Δͷ͸ർΕΔ͠࿙ΕΔ •after •ϝιουΛΦʔόʔϥΠυ •ಛఆ৚݅Ͱݺ͹ΕͨΒ Bugsnag ʹ௨஌ͯ͠ super ͢Δ ※ ςετͰ΋͋Δఔ౓ݕ஌Ͱ͖Δ͚Ͳ ɹςετ͕ͳ͍ͱ͜ΖͰݺ͹ΕΔՄೳੑ΋͋ΔͷͰຊ൪ಋೖ ͕Μ͹Βͳ͍

Slide 37

Slide 37 text

͕Μ͹Βͳ͍ ֎෦APIར༻࣌͸ඇಉظʹ͢Δɾ
 ΤϥʔϋϯυϦϯά౳๨Εͣʹ…!!
 ʢো֐ى͜͠·ͨ͠ʣ

Slide 38

Slide 38 text

ຊ೔ͷίϯςϯπ •εΫϦϓτԽ͢Δ •͕Μ͹Βͳ͍ •҆શʹ΍Δ •޿ΊΔ ⛑

Slide 39

Slide 39 text

ɹϦϦʔε͠·ͨ͠ʂ ɹԿ΍Βಈ࡞͕͓͔͍͠ΜͰ͕͢…ʁ ɹো֐ͩʂ੾Γ໭͠·͢ʂ ɹྟ࣌ϦϦʔεऴΘΓ·ͨ͠… Α͋͘Δޫܠ ɹ;Γ͔͑ΓɾϙετϞʔςϜऴΘΓ·ͨ͠… ɹ࠶मਖ਼͠·͢…

Slide 40

Slide 40 text

•όάΛੜΈ΍͍͢ίʔυ •Өڹൣғ͕ಡΊͳ͍ •ෳࡶͳཁ͕݅ͦͷ··࢓༷ʹͳ͓ͬͯΓɺ࢓༷͕ෳࡶ •ޡͬͨطଘͷڍಈ͕ਖ਼ͱͯ͠ಈ͍͍ͯΔ •જࡏόάͱ͍͏஍ཕ ো֐ΛੜΈ΍͍͢ঢ়ଶ

Slide 41

Slide 41 text

•ྟ࣌ϦϦʔε͚ͩͰ൒೔ʢݱঢ়ʣ͔͔Δ ※ ඵͰऴΘΔΑ͏վળத •ௐࠪɾ;Γ͔͑Γɾ࠶ൃ๷ࢭͱͦͷϨϏϡʔͳͲͰ໿ 1 ೔ফ͑Δ •։ൃ෦ͷ৴པΛଛͳ͏ ো֐Λى͜͢ͱ

Slide 42

Slide 42 text

ো֐Λىͨ͘͜͠ͳ͍ •ҰேҰ༦ʹղܾͰ͖Δ՝୊Ͱ͸ͳ͍ •ো֐Λى͜͠΍͍͢ݱঢ়Ͱ΋҆શʹϦϦʔεͰ͖Δํ๏͕΄͍͠

Slide 43

Slide 43 text

•ϦϦʔεΛ 2 ஈ֊ʹΘ͚Α͏ ҆શʹϦϦʔεͰ͖Δํ๏

Slide 44

Slide 44 text

2 ஈ֊ϦϦʔε class ApplicationController < ActionController::Base private # ... # վम࣌ʹ҆શʹมߋΛ͢ΔͨΊͷϝιου # ྫ֎ൃੜ࣌ʹຊ൪؀ڥͰ͸௨஌Λૹͬͯݕূ͢ΔͨΊʹར༻͢Δ # 1ʙ2िؒఔ౓༷ࢠΛݟͯ໰୊͕ͳ͚Ε͹ϒϩοΫΛ֎͢ def temporary_ignore_error yield rescue => e if ::Rails.env.production? ::Bugsnag.notify(e) else raise e end end end

Slide 45

Slide 45 text

•e.g. όϦσʔγϣϯΛมߋ͠ɺྫ֎Λൃੜͤ͞Δमਖ਼ •before 1. ਖ਼͍͠มߋΛ͕ͨ͠ɺݩͷڍಈ͕ؒҧ͓ͬͯΓޡͬͨϦΫΤ ετ͕ૹΒΕ͖ͯͯϢʔβۀ຿ΛࢭΊͨ 😱 2. ͋Δը໘Ͱ͸ਖ਼͍͠มߋΛ͕ͨ͠ɺ༧૝͍ͯ͠ͳ͍ը໘ͰΤ ϯυϙΠϯτ͕ར༻͞Ε͓ͯΓϢʔβۀ຿ΛࢭΊͨ 😱 2 ஈ֊ϦϦʔε

Slide 46

Slide 46 text

•e.g. όϦσʔγϣϯΛมߋ͠ɺྫ֎Λൃੜͤ͞Δमਖ਼ •after •ຊ൪Ͱ͸ Bugsnag ʹ௨஌͢Δ͚ͩɺྫ֎Λى͜͞ͳ͍ •ҙਤ͠ͳ͍ϦΫΤετ͕͋ͬͨ৔߹ݕ஌Ͱ͖Δ •ܦա؍࡯ޙɺ࣮ࡍʹྫ֎Λൃੜͤ͞Δ 2 ஈ֊ϦϦʔε

Slide 47

Slide 47 text

•σϝϦοτ •ίʔυมߋͷ࣮ಋೖ͕஗ΕΔ •2 ஈ֊ϦϦʔε͕ΊΜͲ͏͍͘͞ •ϝϦοτ •҆৺ɾ҆શʹϦϦʔεͰ͖ো֐ΛݮΒͤΔ •ϨϏϡʔෛՙ͕ݮͬͨ 2 ஈ֊ϦϦʔε

Slide 48

Slide 48 text

•Darklaunch ͱ͍͏࢓૊Έ΋ผͷϝϯό͕࡞ͬͯ͘Εͨ •ձࣾ୯ҐͰػೳΛΦϯɾΦϑ͢Δ •Cookpad ͞Μͷ Chanko ΋༗໊Ͱ͢Ͷ 2 ஈ֊ϦϦʔε DPPLQBEDIBOLP3BQJEMZBOETBGFMZQSPUPUZQJOHZPVSSBJMTBQQMJDBUJPO IUUQTHJUIVCDPNDPPLQBEDIBOLP

Slide 49

Slide 49 text

ຊ೔ͷίϯςϯπ •εΫϦϓτԽ͢Δ •͕Μ͹Βͳ͍ •҆શʹ΍Δ •޿ΊΔ 🗣

Slide 50

Slide 50 text

•ձࣾಠࣗͷ࢓૊Έ͸ೝ஌ʹ͕͔͔࣌ؒΔ •प஌Λͯ͠΋ɺ৘ใײ౓͸ਓͦΕͧΕ •ʮԿͳͷ͔ʯʮ͍ͭ࢖͑Δͷ͔ʯʮͲ͏΍ͬͯ࢖͏ͷ͔ʯ Λखܰʹ఻͑Δͷ͸೉͍͠ •৽͘͠ࢀըͨ͠ਓ͸΋ͪΖΜ஌Βͳ͍ •΄΅ຖ݄ΤϯδχΞ͕δϣΠϯ͍ͯ͠Δʢײँʣ ࢓૊ΈΛ޿ΊΔ

Slide 51

Slide 51 text

•ʮϞϒϓϩνʔϜʯΛ݁੒ɺִि 1 ౓ߦ͍ͬͯΔ •͓୊͸ίʔυվળɾύϑΥʔϚϯεվળ etc •νʔϜϝϯό͕୭͔Λ༠ͬͯू·Δӡ༻ •ΦϯϘʔσΟϯάظʹಛʹϫʔΫͦ͠͏ •සग़ΞϯνύλʔϯɺഎܠɺରԠύλʔϯɺಓ۩ͳͲ Ϟϒ / ϖΞϓϩ

Slide 52

Slide 52 text

จষΛॻ͘

Slide 53

Slide 53 text

•֓ཁ •ίʔυྫɾಋೖͷ࢓ํ •஫ҙࣄ߲ •ۜͷ஄ؙͰ͸ͳ͍ͱ͔ •ܦա؍࡯ޙʹফ͢ͷ͓๨Εͳ͘ͱ͔ •࢓૊Έ จষΛॻ͘ 2ʙ3෼ͰಡΊΔ͘Β͍
 Ͱ͖ΔݶΓ؆ܿʹ

Slide 54

Slide 54 text

จষΛॻ͘

Slide 55

Slide 55 text

•୭΋͕໨ʹ͢Δ৔ॴʹ৘ใΛஔ͘ •ςϯϓϨʔτʹ࢓ࣄͯ͠΋Β͏ จষΛॻ͘

Slide 56

Slide 56 text

ຊ೔ͷίϯςϯπ •εΫϦϓτԽ͢Δ •͕Μ͹Βͳ͍ •҆શʹ΍Δ •޿ΊΔ 🤖 🏖 ⛑ 🗣

Slide 57

Slide 57 text

·ͱΊ •࣌ؒΛ࡞Δ •3 ਓʹ͸ͳΕͳ͍͚Ͳɺ࡞ۀ࣌ؒΛ 1/3ʢҎԼʣʹ͸Ͱ͖Δ •εΫϦϓτͱ͔ Rails ͱ͔௨஌ͱ͔ esa ͱ͔ςϯϓϨʔτͱ͔ʹ࢓ ࣄͯ͠΋Β͏ •ٕज़తʹ೉͍͜͠ͱ͸΍͍ͬͯͳ͍ •;ͭ͏ʹ Ruby / Rails ͷίʔυ͕ॻ͚Ε͹Ͱ͖Δ͜ͱ͹͔Γ •ʮ͕Μ͹Βͳ͍ʯ͜ͱΛ͕Μ͹Δ

Slide 58

Slide 58 text

•ػೳ։ൃɾमਖ਼͕εϜʔζʹͰ͖ΔΑ͏ʹ •໌Β͔ʹΑ͘ͳ͍΋ͷʹ৮Εଓ͚Δͷ͸Α͘ͳ͍ •ʮطଘ͕ͦ͏ͩ͠ཧ༝΋Θ͔Βͳ͍͔Β฿ͬͨํ͕ྑ͍ͷ͔ͳ…ʯ •ʮͲ͏͋Δ΂͖ͳΜ͚ͩͬʁʯͷٞ࿦͕ੜ·Εʹ͍͘ •ΘΕΘΕ͸ྑ͍ʢमਖ਼͠΍͍͢ʣίʔυΛָ͘͠ॻ͖͍ͨ •Rubyist ͳΜͩ͠ ͳͥίʔυͷվળΛ͢Δͷ͔

Slide 59

Slide 59 text

)BQQZ$PEJOH

Slide 60

Slide 60 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠