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

【Go活用事例】 安全運転支援サービスを支える 運用管理システム

【Go活用事例】 安全運転支援サービスを支える 運用管理システム

2019/11/1 の、DeNA.go #3 の発表資料です。

Avatar for Hirotaka Suzuki

Hirotaka Suzuki

November 01, 2019
Tweet

More Decks by Hirotaka Suzuki

Other Decks in Technology

Transcript

  1. ͨͱ͑͹ɺ͜Μͳ͜ͱ͕Ͱ͖·͢ ✓ ֤ςʔϒϧʢҎ্ʣͷ$36%ૢ࡞΍ΠϯϙʔτɾΤΫεϙʔτ ✓ ंࡌثͷ෦඼Λൃ஫ͯ͠ɺൃ஫ॻͷ1%'Λμ΢ϯϩʔυ͢Δ ✓ ෦඼͕ೲ඼͞Εͨͱ͖΍෦඼͕࢖༻͞Εͨͱ͖ʹɺࡏݿ਺Λਖ਼͘͠อͭ ✓ ޻৔Ͱͷंࡌثͷ૊Έཱ͔ͯΒൃૹ·ͰΛτϥοΩϯά͢Δ ✓

    Ͳͷंࡌث͕Ͳͷं྆ʹऔΓ෇͚ΒΕ͍ͯΔ͔؅ཧ͢Δ ✓ ंࡌثʹ഑৴͢ΔΞϓϦέʔγϣϯΛΞοϓϩʔυ͢Δ ✓ "*ʹΑΔϢʔβʔͷإೝূͷਖ਼֬ੑΛνΣοΫ͢Δ ✓ Ϣʔβʔ͔ΒͷϑΟʔυόοΫΛ֬ೝͯ͠ɺϝʔϧฦ৴͢Δ ✓ ϢʔβʔͷݖݶΛΘ͔Γ΍͍͢(6*Ͱ֬ೝɾมߋ͢Δ ✓ ंࡌثͷՔಇঢ়گΛϦΞϧλΠϜͰूܭ͢Δ ɾɾɾɾɾɾ  
  2. (PͰॻ͔Ε͍ͯΔ΋ͷ • ӡ༻؅ཧγεςϜͷ"1*ɾϏϡʔ 3BJMTͰॻ͔Ε͍ͯΔ΋ͷ • ंࡌثͱͷ௨৴"1* • ंࡌث͔ΒͷϑΝΠϧΞοϓϩʔυ"1* • 8&#ΫϥΠΞϯτͱͷ௨৴"1*

    • ఆظόον΍σʔϞϯ   3BJMT͕ଟ͍ ΞʔΩςΫνϟʢݴޠผʣ ࣮ূ࣮ݧதʹ͸ ͳ͔ͬͨαʔϏε ࣮ূ࣮ݧத͔Β ͋ͬͨαʔϏε
  3. #FFHPʹ͍ͭͯ   • ϑϧελοΫͷ.7$ϑϨʔϜϫʔΫ • தࠃͰਓؾ͕͋ΓɺΤϯλʔϓϥΠζͰͷ࣮੷΋๛෋ʢςϯηϯτɾϑΝʔ΢ΣΠɾɾɾʣ • 8FC։ൃ޲͚ͷػೳ͸Ұ௨ΓͦΖ͍ͬͯΔ •

    ֤ػೳ͸ϞδϡʔϧԽ͞Ε͓ͯΓɺ޷͖ͳϥΠϒϥϦʹೖΕସ͑ΒΕΔ • ηογϣϯɾΩϟογϡɾϩΨʔɾJOɺɺɺ03.·Ͱ͍͍ͭͯΔ • ϑϧελοΫϑϨʔϜϫʔΫͷΘΓʹ͸ɺϕϯνϚʔΫ଎౓΋ͦͦ͜͜଎͍ • 3BJMTಉ༷ʹɺCFFͱ͍͏$-*πʔϧ͕͋Δ • ίʔυࣗಈੜ੒ʢTDBGGPMEJOHʣ΋Ͱ͖Δ
  4. ϥΠϒϥϦ঺հ   03. (03. কདྷͷ3BJMT͔ΒͷϦϓϨΠεͷͨΊɺ"DUJWF3FDPSEʹ ࣅͨػೳ͕΄͍͠ ϩΨʔ MPHSVT #FFHPͷMPHTϞδϡʔϧ΋༻ҙ͞Ε͍ͯΔ͕ɺMPHSVTΛ

    ࢖༻͍ͯ͠Δ ؀ڥઃఆ $POpHPS ؀ڥ͝ͱʹઃఆϑΝΠϧΛ࡞੒Ͱ͖Δ ύοέʔδ؅ཧ HMJEFˠ (P.PEVMFT HMJEFΛ࢖͍͕ͬͯͨɺ(P.PEVMFTͷಋೖޙʹҠߦ ߦ਺औಘ XIFSFBNJ ࣮ߦதͷιʔείʔυͷߦ਺ΛऔಘͰ͖ΔɻΤϥʔ௨஌ ࣌ʹ࢖༻
  5. ϥΠϒϥϦ঺հ   ߏ଄ମͷൺֱ HPDNQ ߏ଄ମͳͲͷҰகΛྑ͍ײ͡ʹൺֱͯ͘͠ΕΔ *%ੜ੒ YJE ϢχʔΫ*%Λੜ੒͢ΔɻΞηοτͷμΠδΣετ෇༩ ͳͲͰ࢖༻

    1%'ੜ੒ HPQEG ೔ຊޠ΋͖Ε͍ʹ1%'ग़ྗͯ͘͠ΕΔɺ͋Γ͕͍ͨϥ ΠϒϥϦ ը૾ੜ੒ HH ޷͖ͳϑΥϯτΛϩʔυͯ͠ςΩετΛը૾ԽͰ͖Δ όʔίʔυੜ੒ #BSDPEF 23ίʔυͷ࡞੒ʹ࢖༻
  6. ࣮૷ʢ$POUSPMMFSʣ ˒ϕʔεͷίϯτϩʔϥߏ଄ମΛఆٛ͢Δ • ϨεϙϯεͷϑΥʔϚοτʢ)5.-+40/ʣͰɺߏ଄ମΛ෼͚Δ   // controllers/html/base.go type HTMLController

    struct { beego.Controller accesslog *logger.AccessLog } // controllers/api/base.go type APIController struct { beego.Controller accesslog *logger.AccessLog }
  7. ࣮૷ʢ$POUSPMMFSʣ ˒ίϯτϩʔϥڞ௨ॲཧΛ࣮૷͢Δ • 1SFQBSF Ͱίϯτϩʔϥͷલॲཧɺ'JOJTI Ͱίϯτϩʔϥͷޙॲཧ͕ॻ͚Δʢ3BJMT ͷCFGPSF@BDUJPOɾBGUFS@BDUJPOͷΑ͏ͳ΋ͷʣ   //

    controllers/api/base.go func (c *APIController) Prepare() { // ΫοΩʔೝূ΍ݖݶνΣοΫͳͲ } func (c *APIController) Finish() { // ϩάͷॻ͖ग़͠ͳͲ }
  8. ࣮૷ʢ$POUSPMMFSʣ ˒ίϯτϩʔϥݸผॲཧΛ࣮૷͢Δ   // controllers/api/login.go func (c *APIController) LoginIndex()

    { // ϩάΠϯॲཧΛͯ͠ɺJSONΛฦ͢ c.ServeJSON() } // controllers/html/login.go func (c *HTMLController) LoginIndex() { // ϩάΠϯϖʔδͷϏϡʔΛฦ͢ c.TplName = "ops/login/index.tpl" }
  9. ࣮૷ʢ.PEFMʣ ˒%#εΩʔϚʹରԠ͢Δߏ଄ମΛఆٛ͢Δ   // models/car_schema.go type Car struct {

    ID int `gorm:"column:id;primary_key" json:"id" csv:"id" chart:"display:ID;sortable:true;filterable:true;type:number;formable:f alse;listable:true"` Name *string `gorm:"column:name" json:"name" csv:"name" chart:"display:ं྆ ໊;sortable:true;filterable:true;type:text;formable:true;listable:true "` // ...... }
  10. ࣮૷ʢ.PEFMʣ ˒ϞσϧϩδοΫΛ࣮૷͢Δ • ϝιου໊͸ɺ"DUJWF3FDPSEͷϝιου໊Λҙࣝ͢Δ • (03.ͷϑοΫʢ#FGPSF$SFBUFɾ"GUFS$SFBUFʣ͕࢖͑Δ   // models/car.go

    func (car *Car) FindBy() error { // ̍݅औಘ } func (cars *Cars) Where() error { // ෳ਺݅औಘ } func (car *Car) Update() error { // ̍݅ߋ৽ } func (cars *Cars) UpdateAll() error { // ෳ਺݅ߋ৽ }
  11. εΩʔϚߏ଄ମ ˒ςʔϒϧ͝ͱʹɺ%#ͷεΩʔϚఆٛΛ൓өͨ͠εΩʔϚߏ଄ମΛͭ͘Δ ˒ܕͱWBMJEBUFλάͰεΩʔϚΛදݱ͢Δ w (03.ͷ࢓্༷ɺ/6--ڐՄͷΧϥϜ͸ϙΠϯλܕʹ͢Δඞཁ͕͋Δ   type TableExample struct

    { // int unsigned (NOT NULL) DeviceID int `validate:"min=0"` // int unsigned (NOT NULL DEFAULT 0) UserCertBy *int `validate:"min=0"` // int unsigned UserID *int // varchar (NOT NULL) Result string `validate:"required"` // varchar Name *string }
  12. εΩʔϚߏ଄ମ ˒ΫϥΠΞϯταΠυͰͷڍಈΛߏ଄ମͷλάʹఆٛ͢Δ • +BWB4DSJQUʹλάͷ಺༰Λ+40/Ͱฦ٫͢Δ • ʢྫʣ͋ΔΧϥϜʹରͯ͠ɺιʔτػೳΛ༗ޮʹ͢Δ͔Ͳ͏͔ • ʢྫʣ͋ΔΧϥϜΛɺ$47ͷग़ྗର৅ʹ͢Δ͔Ͳ͏͔  

    type TableExample struct { Name *string `gorm:"column:name" json:"name" csv:"name" chart:”display:Name;sortable:true;filterable:true;type:text;formab le:true;listable:true"` UpdatedByUserName string `gorm:"-" json:"updated_by_user_name" csv:"-" chart:"display:ߋ৽ ऀ;sortable:false;filterable:false;type:text;formable:false"` }
  13. 3BJMTαʔϏεͱͷซଘ ˒%#·ΘΓͷఆٛͷڞ௨Խ • (PͷαʔϏεͱ3BJMTͷαʔϏε͕ಉ͡%#Λࢀর͍ͯ͠Δ৔߹͸ɺ%#·ΘΓͷఆٛͷ ߋ৽ࠩ෼͕όάͷԹচʹͳΔ • Ͱ͖Δ͚ͩೋॏ؅ཧΛආ͚ΔΑ͏ʹ޻෉͢Δ   ڞ௨ԽͷҰྫ

    %#εΩʔϚఆٛ 3VCZ SJEHFQPMF ͰҰݩ؅ཧ εΩʔϚߏ଄ମ %#εΩʔϚ͔ΒεΩʔϚߏ଄ମΛࣗಈੜ੒ɻ·ͨɺ%#εΩʔ Ϛͱͷࠩ෼͕ൃੜ͍ͯ͠ͳ͍͔ΛνΣοΫ͢ΔπʔϧΛ༻ҙ FOVNఆٛ ZBNMʹFOVN஋ͷఆٛΛॻ͖ग़͠ɺ྆γεςϜ͔ΒಡΈࠐΉ
  14. 3BJMTαʔϏεͱͷซଘ ˒҉߸Խ·ΘΓͷڞ௨Խ • ҰํͷαʔϏεͰ҉߸Խͨ͠஋Λ΋͏ҰํͷαʔϏεͰ΋ࢀর͍ͨ͠৔߹ɺ҉߸Խํࣜ ΍伴Λ߹ΘͤΔඞཁ͕͋Δ • ʢྫʣγϯάϧαΠϯΦϯ • ෳ਺ͷαʔϏεͰɺಉ͡Ϣʔβʔ໊ɾύεϫʔυͰϩάΠϯ͍ͨ͠ •

    3VCZͷ%FWJTF͸ɺϢʔβʔύεϫʔυͷ҉߸Խʹ#$SZQUΛ࢖༻͢Δ • (PଆͰ΋#$SZQU·ΘΓͷॲཧΛ࣮૷͢Δඞཁ͕͋Δ • 伴ͷ؅ཧ͕໘౗ʹͳΔ • 伴ͷߋ৽λΠϛϯάΛͦΖ͑ΔͳͲͷ޻෉ • Ϋϥ΢υαʔϏεΛ࢖͏ͱָʢ"844FDSFUT.BOBHFSͳͲʣ