Slide 1

Slide 1 text

database/sql 入門 (P$POGFSFODF4QSJOH :PJDIJSP4IJNJ[V!CVEPVHVNJ

Slide 2

Slide 2 text

自己紹介 ‣ ਗ਼ਫཅҰ࿠!CVEPVHVNJ ‣ ‣ #BDLFOE&OHJOFFS ‣ (P3VCZ ‣ ϒϩάIUUQCVEPVHVNJHJUIVCJP ‣ ϘϧμϦϯάࣗ࡞ΩʔϘʔυHPMBOHUPLZP

Slide 3

Slide 3 text

このセッションの背景 ‣ (Pͷॻ੶͸਺ଟ͘ൃച͞Ε͍ͯΔ͕ʜ ‣ σʔλϕʔεૢ࡞͍ͭͯॻ͔Εͨຊ͸͋·Γͳ͍ ‣ Πϯλʔωοτ্΋·ͱ·ͬͨهࣄ͕͋·Γͳ͍ ‣ YYYϥΠϒϥϦΛ৮ͬͯΈͨܥ΍த্ڃऀ޲͚ͷνϡʔχϯάه ࣄ

Slide 4

Slide 4 text

今日のゴール ‣ %#Λ࢖ͬͨ։ൃΛߦͳ͏ͨΊͷ४උ͕Ͱ͖Δ ‣ EBUBCBTFTRMύοέʔδͷงғؾΛཧղ͢Δ ‣ ࣮૷ͱҰॹʹςετΛॻ͚ΔΑ͏ʹͳΔ ‣ %#पΓͷهࣄ΍ൃදΛࢀߟʹࣗ෼ͰखΛಈ͔ͤΔΑ͏ʹͳΔ

Slide 5

Slide 5 text

DBを用意する

Slide 6

Slide 6 text

ローカルにDBサーバを構築する ‣ ࢖͍ࣺͯͷσʔλϕʔεΛ༻ҙ͢Δ ‣ ྫɿ%PDLFSΛ࢖ͬͯ.Z42-ΛϙʔτͰىಈ͢Δ

Slide 7

Slide 7 text

マイグレーションツールを使ったスキーマ定義 ‣ σʔλϕʔεΛ༻ҙ͚ͨͩ͠Ͱ͸σʔλ͸อଘͰ͖ͳ͍ ‣ ςʔϒϧΛ࡞ͬͯσʔλͷೖΕ΋ͷʢεΩʔϚʣΛ༻ҙ͢Δ ‣ εΩʔϚͷߏ੒؅ཧΛ͢ΔͨΊʹ͸ϚΠάϨʔγϣϯπʔϧΛ࢖͏

Slide 8

Slide 8 text

Goで書かれたマイグレーションツール ‣ IUUQTHJUIVCDPNSVCFOWTRMNJHSBUF ‣ IUUQTHJUIVCDPNHPCVGGBMPQPQUSFFNBTUFSTPEB ‣ IUUQTHJUIVCDPNHPMBOHNJHSBUFNJHSBUF ‣ IUUQTHJUIVCDPNTUFJOCBDIFSHPPTF

Slide 9

Slide 9 text

sql-migrate ‣ γϯϓϧʹϚΠάϨʔγϣϯ༻ͷ42-Λ࣮ߦɾ؅ཧͰ͖Δ

Slide 10

Slide 10 text

sql-migrate ‣ %4-Ͱ͸ͳ͘ૉͷ42-Λ࢖ͬͯϚΠάϨʔγϣϯΛఆٛͰ͖Δ

Slide 11

Slide 11 text

DB処理の設計方針

Slide 12

Slide 12 text

Entity(構造体)の定義 ‣ งғؾ͸+40/Ϛοϐϯάͱಉ͡ ‣ /VMM୅ೖͷՄೳੑ͕͋ΔϑΟʔϧυͷܕʹ͸TRM/VMM999Λ ‣ (P͔Β͸TRM/VMM5JNF΋࢖͑Δ UJQHPMBOHPSH൓өࡁΈ

Slide 13

Slide 13 text

リポジトリパターン ‣ σʔλͷ֨ೲ৔ॴΛӅณɾந৅Խ͢Δઃܭύλʔϯ ‣ σʔλιʔεͷӬଓԽૢ࡞ΛಛఆQLH ࠓճ͸SFQPTJUPSZQLHʣʹ
 ΧϓηϧԽ͢Δ͜ͱ͕Ͱ͖Δ ‣ ଞͷQLH͸σʔλιʔεͷӬଓԽૢ࡞ͷৄࡉΛ஌Βͳ͍··
 ϏδωεϩδοΫɾΞϓϦέʔγϣϯϩδοΫΛ࣮૷Ͱ͖Δ

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

データベース操作の入門

Slide 17

Slide 17 text

ドライバをロードする ‣ ઀ଓઌͷ3%#ʹ͋ͬͨ
 υϥΠόΛCMBOLJNQPSU ‣ .Z42-ͷ৔߹͸ɺ
 HPTRMESJWFSNZTRM͕
 σϑΝΫτ

Slide 18

Slide 18 text

database/sqlを使ったデータベース操作の実装 ‣ (Pʹ΋%#ૢ࡞Λ࣮૷͢Δͱ͖͸KJO[IVHPSNͳͲͷൺֱతϦονͳ ϑϨʔϜϫʔΫʢ03.ʣ͕ଘࡏ͢Δ ‣ ࠓճ͸(Pͷ%#ૢ࡞ͷجຊ֓೦Λԡ͑͞ΔͨΊɺ
 ެࣜͰ͋ΔEBUBCBTFTRMQLHΛྫʹ͢Δ

Slide 19

Slide 19 text

sql.DB、sql.Conn、sql.Tx オブジェクト ‣ TRM%# ‣ ෳ਺ͷΰϧʔνϯ͔Βར༻͞Εͯ΋҆શɻαʔϏεىಈ࣌ʹҰ౓TRM0QFO͢Δ ͚ͩͰΑ͘ɺ௨ৗ0QFO$MPTFΛ܁Γฦ͞ͳ͍ ‣ TRM$POO ‣ TRM%# $POOϝιου͔ΒऔಘͰ͖ΔɻίωΫγϣϯʹ૬౰ɻཁ$MPTF ‣ TRM5Y ‣ τϥϯβΫγϣϯʹ૬౰ɻίϛοτϩʔϧόοΫૢ࡞Λ͢Δͱ͖ʹɻཁ$MPTF

Slide 20

Slide 20 text

sql.DB、sql.Conn、sql.Tx オブジェクト ‣ 2VFSZ$POUFYU2VFSZ3PX$POUFYU ‣ 4&-&$5ૢ࡞ ‣ &YFD$POUFYU ‣ */4&3561%"5&%&-&5&ૢ࡞ ‣ ͲΕ΋(P%PDʹ&YBNQMF͕͋ΔͷͰɺͦΕΛΈΔͱΑ͍

Slide 21

Slide 21 text

Repositoryパターンへの適用

Slide 22

Slide 22 text

テストを書く

Slide 23

Slide 23 text

外部環境・サービスに依存しないテスト and より実環境の再現を優先したいテスト

Slide 24

Slide 24 text

再掲

Slide 25

Slide 25 text

モックを使ったDBに依存しない単体テスト ‣ %"5"%0(HPTRMNPDLͱ͍͏ બ୒ࢶ ‣ TRM%#ΦϒδΣΫτͷϞοΫ ‣ ظ଴͢Δ42-จ͕ൃߦ͞Ε͔ͨ ݕূͰ͖Δ

Slide 26

Slide 26 text

モックを使ったDBに依存しない単体テスト ‣ SBFQPTJUPSZҎ֎ͷQLH͸ϞοΫ ͰςετͰ͖Δ ‣ ࣮ࡍHPMBOHHPNPDL࢖ͬͨΓ

Slide 27

Slide 27 text

DBサーバを使った結合テスト ‣ ςετίʔυͷத͔Β%PDLFSΛ࢖Θͣ.Z42-αʔόΛىಈ͢Δ ‣ IUUQTHJUIVCDPNMFTUSSBUHPUFTUNZTRME ‣ ςετίʔυͷத͔Β%PDLFSΛ࢖ͬͯ.Z42-αʔόΛىಈ͢Δ ‣ IUUQTHJUIVCDPNPSZEPDLFSUFTU ‣ #VJME$POTUSBJOUTΛ࢖͏ͱςετ΋෼͚࣮ͯߦͰ͖Δ ‣ HPUFTUͰ΋࣮ߦ͢ΔϑΝΠϧΛϑΟϧλϦϯά͢Δͷʹ࢖͑Δ

Slide 28

Slide 28 text

CircleCIの設定例

Slide 29

Slide 29 text

今日のゴール ‣ %#Λ࢖ͬͨ։ൃΛߦͳ͏ͨΊͷ४උ͕Ͱ͖Δ ‣ EBUBCBTFTRMύοέʔδͷงғؾΛཧղ͢Δ ‣ ࣮૷ͱҰॹʹςετΛॻ͚ΔΑ͏ʹͳΔ ‣ %#पΓͷهࣄ΍ൃදΛࢀߟʹࣗ෼ͰखΛಈ͔ͤΔΑ͏ʹͳΔ

Slide 30

Slide 30 text

まとめ ‣ ϩʔΧϧͷ.Z42-্ཱ͔ͪ͛Β$*ͷઃఆΛ͢Δͱ͜Ζ·Ͱ঺հ ‣ ൃදதͷαϯϓϧίʔυͷશମ͸ҎԼͷϦϙδτϦͰ ‣ IUUQTHJUIVCDPNCVEPVHVNJHPTRMTBNQMF ‣ ޱ಄Ͱ঺հͨ͠هࣄͷ63-ͳͲ͸໌೔ϒϩάهࣄͰ঺հ༧ఆ ‣ GPMMPXNF!CVEPVHVNJ