Slide 1

Slide 1 text

ྩ࿨͚ͩͲNBLFೖ໳ QVEEJOH 1

Slide 2

Slide 2 text

2 5XJUUFS !QVEEJOH@JOGP 1SPpMF ͋͋ͨ͘Μ޻๪0# 43&ͱͯ͠8FCܥاۀͰۈ຿ ίʔώʔ͕झຯ

Slide 3

Slide 3 text

͜ͷࢿྉͷλʔήοτ 3 ˔ .BLFΛ࢖ͬͨ͜ͱ͕ͳ͍ਓ ˔ .BLFΛීஈ࢖͍͠ͳ͍ਓ ˔ $$ͷϔϏʔϢʔβͰͳ͍ਓ ˔ δΣωϦοΫͳλεΫϥϯφʔΛٻΊ͍ͯΔਓ

Slide 4

Slide 4 text

? NBLF ࢖ͬͨ͜ͱ͋Γ·͔͢ʁ 4

Slide 5

Slide 5 text

(/6.BLF 5 ˔ (/6ϓϩδΣΫτͷNBLF ˔ ݱࡏͷNBLFͷσϑΝΫτελϯμʔυ ˓ NBD04ʹϓϦΠϯ͞ΕͯΔ΋ͷͰ͢Β(/6.BLF ˓ 8JOEPXT޲͚ʹग़͍ͯΔ΋ͷ΋(/6.BLF ˔ ݱঢ়͜ΕҎ֎Λߟྀ͢Δඞཁ͸͋·Γͳ͍

Slide 6

Slide 6 text

NBLF͸͍ͭ࢖͏ʁ 6 ˔ Կ͔ϑΝΠϧΛੜ੒͢ΔλεΫ͕͋Δͱ͖ ˓ ྫʣίϯύΠϧ࣮ͯ͠ߦόΠφϦΛ࡞Δ ɹɹಛఆͷϑΝΠϧΛࣗಈੜ੒͢ΔίϚϯυΛ࢖͏ ˔ Ұ࿈ͷૢ࡞Λ؆୯ʹ࣮ߦ͍ͨ͠ͱ͖ ˓ ྫʣੜ੒࣮ͨ͠ߦόΠφϦΛ·ͱΊͯ࡟আ͍ͨ͠

Slide 7

Slide 7 text

.BLFpMF 7 ˔ NBLFͷಈ࡞Λఆٛ͢Δ ˓ UBSHFUɿੜ੒͢Δ λʔήοτϑΝΠϧ܈ ˓ QSFSFRɿUBSHFUͷ ੜ੒ʹඞཁͳϑΝΠϧ܈ ˓ DPNNBOEɿUBSHFUΛ ੜ੒͢ΔίϚϯυ܈ ˔ ஫ҙɿΠϯσϯτ͸λϒ # コメントは `#` で始める # prereqが無い場合 target1: command1 # targetとして定義した物を # 他のtargetのprereqにできる target4: target1 command1 # それぞれの要素は複数定義可 target2 target3: prereq1 prereq2 command1 command2

Slide 8

Slide 8 text

ґଘάϥϑ 8 # コメントは `#` で始める # prereqが無い場合 target1: command1 # targetとして定義した物を # 他のtargetのprereqにできる target4: target1 command1 # それぞれの要素は複数定義可 target2 target3: prereq1 prereq2 command1 command2 UBSHFU UBSHFU DPNNBOE DPNNBOE DPNNBOE DPNNBOE UBSHFU UBSHFU QSFSFR QSFSFR

Slide 9

Slide 9 text

$ make target4 9 # コメントは `#` で始める # prereqが無い場合 target1: command1 # targetとして定義した物を # 他のtargetのprereqにできる target4: target1 command1 # それぞれの要素は複数定義可 target2 target3: prereq1 prereq2 command1 command2 UBSHFU UBSHFU DPNNBOE DPNNBOE DPNNBOE DPNNBOE UBSHFU UBSHFU QSFSFR QSFSFR

Slide 10

Slide 10 text

10 # コメントは `#` で始める # prereqが無い場合 target1: command1 # targetとして定義した物を # 他のtargetのprereqにできる target4: target1 command1 # それぞれの要素は複数定義可 target2 target3: prereq1 prereq2 command1 command2 UBSHFU UBSHFU DPNNBOE DPNNBOE DPNNBOE DPNNBOE UBSHFU UBSHFU QSFSFR QSFSFR $ make target4

Slide 11

Slide 11 text

11 # コメントは `#` で始める # prereqが無い場合 target1: command1 # targetとして定義した物を # 他のtargetのprereqにできる target4: target1 command1 # それぞれの要素は複数定義可 target2 target3: prereq1 prereq2 command1 command2 UBSHFU UBSHFU DPNNBOE DPNNBOE DPNNBOE DPNNBOE UBSHFU UBSHFU QSFSFR QSFSFR $ make target4

Slide 12

Slide 12 text

12 # コメントは `#` で始める # prereqが無い場合 target1: command1 # targetとして定義した物を # 他のtargetのprereqにできる target4: target1 command1 # それぞれの要素は複数定義可 target2 target3: prereq1 prereq2 command1 command2 UBSHFU UBSHFU DPNNBOE DPNNBOE $ make target4 طʹ྆ํଘࡏ͠ɺ͔ͭɺ UBSHFUͷํ͕ΑΓ΋ߋ৽೔͕ݹ͍ ˣ Կ΋͠ͳ͍ طʹ྆ํଘࡏ͢Δ͕ɺ UBSHFUͷํ͕ΑΓ΋ߋ৽೔͕৽͍͠ ˣ UBSHFUΛࢦఆ͞ΕͨίϚϯυͰ࠶࡞੒

Slide 13

Slide 13 text

? ࠷ۙͷݴޠͬͯɺґଘղܾ͸ ݴޠଆͰ΍ͬͯ͘ΕΔΑͶʁ 13

Slide 14

Slide 14 text

ʂ Ͱ͸.BLF͸ෆཁʂ ղࢄʂ 14

Slide 15

Slide 15 text

ʂ Ͱ͸ͳ͍ 15

Slide 16

Slide 16 text

ݱ୅ʹ͓͚Δ.BLFͷ࢖͍Ͳ͜Ζ 16 ˔ Ұͭͷݴޠͷείʔϓʹऩ·Βͳ͍ɺෳࡶͳૢ࡞΍ ଟ਺ͷΦϓγϣϯ෇͖ͷίϚϯυͷΤΠϦΞε ˓ ΫϩεϏϧυɾEPDLFSΛ࢖ͬͨϏϧυͳͲ ˓ MJOU΍୯ମςετͷ࣮ߦ ˓ Ϗϧυ੒Ռ෺ͷύοέʔδϯά ˓ QSPUPDΛ࢖ͬͨίʔυੜ੒ͳͲ ˔ ϓϩδΣΫτϝϯόʔͱ࡞ۀख๏ͷڞ༗͕Ͱ͖Δ ˓ ෳࡶͳૢ࡞ΛӅṭ͠ɺ։ൃΛޮ཰Խ ˓ ֮͑΍͍͢ڞ௨ݴޠͱͯ͠ͷ.BLFpMF

Slide 17

Slide 17 text

λεΫϥϯφʔͱͯ͠ීٴ͗ͨ͢͠ฐ֐ 17 ˔ ݩʑͷ༻్ͱͯ͠͸ϏϧυπʔϧͰ͋ΓɺͦΕΏ͑ʹ ޡͬͨ࢖༻๏͕૝ఆ֎ͷ݁ՌΛ΋ͨΒ͢͜ͱ͕͋Δ ˓ ٙࣅλʔήοτʢޙड़ʣ΍ɺม਺ͷ࢖༻๏ͳͲΛ ཧղ͓ͯ͘͠ ˔ σόοά͕೉͘͠ɺਖ਼͍͠৘ใΛಘʹ͍͘ ˓ ΠϯλʔωοτͷීٴΑΓ΋ྺ࢙͕ݹ͍ͨΊ ˓ ΦϥΠϦʔͷʰ(/6.BLFୈࡾ൛ʱ͕͓͢͢Ί

Slide 18

Slide 18 text

ʂ ·ͣ͸جૅΛݻΊΑ͏ʂ 18

Slide 19

Slide 19 text

ʂ 19 &Y )FMMPXPSME

Slide 20

Slide 20 text

ԋशϓϩδΣΫτͷ༻ҙ 20 ˔ ϦϙδτϦͷΫϩʔϯ ˓ IUUQTHJUIVCDPNQEEHHOVNBLFFYFSDJTF ˓ ·ͨ͸IUUQTHJUIVCDPNQEEHHOVNBLF FYFSDJTFBSDIJWFNBTUFS[JQ͔Βμ΢ϯϩʔυ ˔ ϩʔΧϧͷϦϙδτϦΛ74$PEFͰ։͘ ˓ 3FNPUF$POUBJOFSTϓϥάΠϯΛೖΕͯ3FPQFO JODPOUBJOFS͢Δ &Y)FMMPXPSME

Slide 21

Slide 21 text

໰୊ઃఆ 21 ˔ ҎԼͷཁ݅Λຬͨ͢.BLFpMFΛॻ͚ main.cΛίϯύΠϧ͠ɺhelloͱ͍͏όΠφϦΛ ࡞੒͢Δ main.cʹมߋ͕͋Ε͹helloΛ࠶Ϗϧυ͠ɺ มߋ͕ແ͚Ε͹Կ΋͠ͳ͍ make helloͰhello͕࡞੒Ͱ͖Δ ˔ ิ଍ɿgcc -o バイナリ名 ソース名 &Y)FMMPXPSME

Slide 22

Slide 22 text

ʂ 22 &Y 1IPOZUBSHFU ઌʹFYΛ΍ͬͯΈ͍ͯͩ͘͞

Slide 23

Slide 23 text

λʔήοτͱٙࣅλʔήοτ 23 ˔ .BLFͷλʔήοτ͸࣮ࡏ͢Δʢ·ͨ͸͜Ε͔Β ੜ੒͢ΔʣϑΝΠϧ܈Λࢦ͢ ˔ Ͱ͸Α͘ݟΔmake clean΍make install͸ʁ ˓ ͜ΕΒ͸ٙࣅλʔήοτͱݺ͹ΕΔ ˓ ࢦఆ͞Εͨͱ͖ৗʹ࣮ߦ͞ΕΔλʔήοτ ˓ DMFBO΍JOTUBMMͱ͍͏ϑΝΠϧ͕͋ͬͯ΋ײ஌͠ͳ͍ ˓ .BLFͷػೳͰ͸ͳ͍ͷͰɺͦΕΒͷॲཧ͸ࣗ෼Ͱ ॻ͘ඞཁ͕͋Δɻ &Y1IPOZUBSHFU

Slide 24

Slide 24 text

.PHONY 24 ˔ ٙࣅλʔήοτʹ͢Δʹ͸ ಛघͳλʔήοτͰ͋Δ .PHONYͷQSFSFRͱͯ͠ ࢦఆ͢Δ ˔ ෳ਺ʹ෼͚ͯॻ͘͜ͱ΋ɺ Ұͭʹ·ͱΊͯॻ͘͜ͱ΋ ग़དྷΔ # ターゲット一つずつに設定する場合 .PHONY: hoge hoge: fuga .PHONY: piyo piyo: poyo ˞ 1IPOZɿʹͤ΋ͷɾ·͕͍΋ͷ IUUQTEJDUJPOBSZHPPOFKQXPSEFOQIPOZ # まとめて設定する場合 .PHONY: hoge piyo hoge: fuga piyo: poyo &Y1IPOZUBSHFU

Slide 25

Slide 25 text

໰୊ઃఆ 25 ˔ &Yͷ.BLFpMFʹҎԼͷػೳΛ௥Ճ͢Δ make buildͰhelloίϚϯυΛϏϧυ make cleanͰϏϧυ੒Ռ෺Λ࡟আ ˔ ͨͩ͠ɺclean͓ΑͼbuildϑΝΠϧΛ࡟আͯ͠͸ ͳΒͳ͍ &Y1IPOZUBSHFU

Slide 26

Slide 26 text

ʂ 26 &Y 7BSJBCMF

Slide 27

Slide 27 text

ม਺ 27 ˔ ͜͜·Ͱ͸શͯϋʔυίʔσΟϯά͖ͯͨ͠ ˓ ࣅͨΑ͏ͳϧʔϧ͕ଟ਺͋ΔͱɺԿ͔վળ͢Δͨͼʹ ଟ਺ͷมߋΛඞཁͱͯ͠͠·͏ ˔ ͦ͜Ͱม਺Λར༻͢Δ ˓ ܕͷΑ͏ͳ΋ͷ͸ແ͍ ˓ ୯ʹͦͷม਺Λར༻ͨ͠ࡍՕॴ͕ɺͦͷม਺ͷ஋ ʢจࣈྻʣʹஔ׵͞ΕΔɺͱߟ͑Δͱ$ͷdefine ͳͲʹ͍ۙ &Y7BSJBCMF

Slide 28

Slide 28 text

28 ˔ l変数名=値zͰએݴͰ͖Δ ˔ ࢖༻࣌͸l$(変数名)z ˔ એݴͨ͠৔ॴ͸ؔ܎ແ͍ ˓ શ෦ΛಡΈࠐΜͰ͔Βม ਺ͷ஋Λల։͢ΔͨΊ ˓ ಉ໊ͷม਺ͷ஋͸࠷ޙʹ એݴ͞Εͨ΋ͷͰ্ॻ͖ # コンパイラを変数化 CC=gcc hello: main.c $(CC) -o hello main.c # targetやprereqにも使える SRC_FILES=a.txt b.txt c.txt MERGED_FILE=merged.txt $(MERGED_FILE): $(SRC_FILES) cat $(SRC_FILES) \ > $(MERGED_FILE) ม਺ &Y7BSJBCMF # 表示されるのは2.0.0 VERSION=1.0.0 .PHONY: print_version print_version: echo $(VERSION) VERSION=2.0.0

Slide 29

Slide 29 text

29 ˔ ࣄલʹఆٛ͞Ε͍ͯΔ ಛघͳม਺΋ଘࡏ͢Δ ˔ ίϚϯυͰ࢖͑Δࣗಈม਺ ͱ͍͏΋ͷ΋͋Δ ˓ ίϚϯυதͷλʔήοτ ໊ͳͲͷϋʔυίʔυΛ ๷͛Δ ˔ σϑΥϧτλʔήοτ͸ .DEFAULT_GOALͰઃఆ .PHONY: print print: # 使用するMakeのバージョン echo $(MAKE_VERSION) # 指定されたターゲット一覧 echo "$(MAKECMDGOALS)" # 変数一覧 echo "$(.VARIABLES)" # カレントディレクトリのパス echo $(CURDIR) ಛघͳม਺ &Y7BSJBCMF # $< → prereqの最初の一つ # $@ → ターゲット名 main.o: main.c gcc -c $< -o $@ # $^ → prereqの一覧 hello: main.o gcc $^ -o $@ # 単にmakeと実行されたとき # helloをターゲットとする .DEFAULT_GOAL=hello

Slide 30

Slide 30 text

30 ˔ .BLFpMFͷ֎෦͔Βม਺Λ ౉͢ํ๏͸छྨ ˔ ؀ڥม਺ ˓ தͰఆ͍ٛͯ͠Δ஋Λ ্ॻ͖Ͱ͖ͳ͍ ˔ NBLFͷҾ਺ ˓ தͰఆ͍ٛͯ͠Δ஋Λ ্ॻ͖Ͱ͖Δ # Makefileの中身 VAR=hoge # これは定義済み扱い DEFINED= .PHONY: print print: @echo $(VAR) @echo $(DEFINED) @echo $(ENV_VAR) ֎෦͔Β஋Λ౉͢ &Y7BSJBCMF # 環境変数 $ VAR=fuga DEFINED=hoge ENV_VAR=piyo \ make print hoge piyo # makeの引数 $ make print \ VAR=fuga DEFINED=hoge ENV_VAR=piyo fuga hoge piyo

Slide 31

Slide 31 text

໰୊ઃఆ 31 ˔ ҎԼͷཁ݅Λຬͨ͢Α͏ʹɺ.BLFpMFʹมߋΛՃ͑Αɻ ˓ $47ϑΝΠϧΛੜ੒͢ΔϓϩάϥϜ͕มߋʹͳͬͨ ࡍʹɺมߋՕॴ͕ՕॴͰࡁΉ ˓ ੜ੒͢Δσʔλྔʢ-n 10ʣ͕มߋʹͳͬͨͱ͖ ʢྫ͑͹-n 100ʣʹมߋՕॴ͕ՕॴͰࡁΉ ˔ ͨͩ͠ɺ$47ϑΝΠϧ͸HFO@EBUBQZΛ༻͍ͯੜ੒͢Δ΋ͷ ͱ͠ɺHFO@EBUBQZࣗମΛมߋ͢Δ͜ͱ͸ෆՄͱ͢Δɻ &Y7BSJBCMF

Slide 32

Slide 32 text

ʂ 32 &Y 1BUUFSO

Slide 33

Slide 33 text

33 ˔ ͋Δ֦ுࢠΛ࣋ͭϑΝΠϧ Λੜ੒͢Δͱ͖ɺଟ͘ͷ৔ ߹ͦͷϧʔϧ͸ͲΕ΋ಉ͡ Ͱ͋Δ ˔ % ΛϫΠϧυΧʔυͱͯ͠ ࢖༻Ͱ͖Δ ˓ ࣗಈม਺Λ͏·͘ ׆༻͢Δͱྑ͍ # .cから.oを生成するルール %.o: %.c gcc -o $@ $< # .oから実行バイナリを作るルール %: %.o gcc -o $@ $^ ύλʔϯϚον &Y1BUUFSO

Slide 34

Slide 34 text

҉໧ͷϧʔϧ 34 ˔ .BLFʹ͸ࣄલʹఆٛ͞Εͨ҉໧ͷϧʔϧ͕ଘࡏ͢Δ ˓ ྫ͑͹ %.o: %.c $(COMPILE.c) $(OUTPUT_OPTION) $< ˔ શͯͷ҉໧ͷϧʔϧ͸make --print-data-baseͰ දࣔͰ͖Δ &Y1BUUFSO

Slide 35

Slide 35 text

໰୊ઃఆ 35 ˔ ҎԼͷཁ݅Λຬͨ͢Α͏ʹɺ.BLFpMFʹมߋΛՃ͑Αɻ ˓ DTWͱ͍͏֦ுࢠΛ࣋ͭϑΝΠϧͷੜ੒ϧʔϧΛՕ ॴʹ·ͱΊΑ ˓ ಉ༷ʹKTPOͱ͍͏֦ுࢠΛ࣋ͭϑΝΠϧͷੜ੒ϧʔ ϧΛՕॴʹ·ͱΊΑ ˔ ͨͩ͠ɺ$47͓Αͼ+40/ϑΝΠϧ͸HFO@EBUBQZΛ༻ ͍ͯੜ੒͢Δ΋ͷͱ͠ɺHFO@EBUBQZࣗମΛมߋ͢Δ͜ ͱ͸ෆՄͱ͢Δɻ &Y1BUUFSO

Slide 36

Slide 36 text

ʂ 36 &Y 1BUUFSO5BSHFU4QFDJpD7BSJBCMF

Slide 37

Slide 37 text

37 ˔ .BLFpMFதͷม਺͸جຊత ʹશͯάϩʔόϧͰ͋Δ ˔ ޙ͔Βఆٛ͠௚͢ͱɺͦͷ ஋͸্ॻ͖͞Εͯ͠·͏ ˔ ಛఆͷϧʔϧ͚ͩ஋Λม͑ ͍ͨʜʜͱ͍͏৔߹ɺӈͷ ํ๏Ͱ͸μϝ # 表示されるのはどちらも2.0.0 VERSION=1.0.0 .PHONY: print_version print_version: echo $(VERSION) VERSION=2.0.0 .PHONY: print_version2 print_version2: echo $(VERSION) ม਺ͷείʔϓ &Y1BUUFSO5BSHFU4QFDJpD7BSJBCMF

Slide 38

Slide 38 text

38 ˔ ಛఆͷείʔϓʹݶͬͯม ਺ͷ஋Λมߋ͢Δ ˓ ಛఆͷύλʔϯʹϚον ͢Δ৔߹ ˓ ಛఆͷλʔήοτͷ৔߹ ˔ ্ॻ͖͢Δ͜ͱʹ஫ҙ ˓ BQQFOEͰ͸ແ͍ # make print_version # → 1.0.0が表示される # make print_version2 # → 2.0.0が表示される .PHONY: print_version .PHONY: print_version2 print_version: VERSION=1.0.0 print_version2: VERSION=2.0.0 print_version print_version2: echo $(VERSION) ݻ༗ͷม਺ &Y1BUUFSO5BSHFU4QFDJpD7BSJBCMF

Slide 39

Slide 39 text

໰୊ઃఆ 39 ˔ ҎԼͷཁ݅Λຬͨ͢Α͏ʹɺ.BLFpMFʹมߋΛՃ͑Αɻ ˓ .csv͓Αͼ.jsonͷ֦ுࢠΛ࣋ͭϑΝΠϧʢCSVS ͓ΑͼJSONSʣΛੜ੒͢ΔϧʔϧΛҰͭʹ·ͱΊΑ ˓ ·ͨɺlarge_dataͱ͍͏จࣈྻΛϑΝΠϧ໊ʹؚΉ ৔߹ɺੜ੒͢Δσʔλ਺Λʢ-n 100ʣͱͤ Αɻ ˔ ͨͩ͠ɺ$47͓Αͼ+40/ϑΝΠϧ͸HFO@EBUBQZΛ༻ ͍ͯੜ੒͢Δ΋ͷͱ͠ɺHFO@EBUBQZࣗମΛมߋ͢Δ͜ ͱ͸ෆՄͱ͢Δɻ &Y1BUUFSO5BSHFU4QFDJpD7BSJBCMF

Slide 40

Slide 40 text

ʂ 40 &Y $POEJUJPO

Slide 41

Slide 41 text

৚݅෼ذ 41 ˔ .BLFpMF಺Ͱ৚݅෼ذΛهड़Ͱ͖Δ ˓ ifdefɿ͋Δม਺͕ఆٛ͞Ε͍ͯΕ͹USVF ˓ ifeqɿͭͷ஋͕౳͚͠Ε͹USVF ˓ ifneqɿͭͷ஋͕౳͘͠ͳ͚Ε͹USVF ˔ ॻ͖ํʹগ͠Ϋη͕͋ΔͨΊɺ࢖༻͢Δࡍʹ͸஫ҙ͢Δ͜ͱ &Y$POEJUJPO

Slide 42

Slide 42 text

42 ˔ ؀ڥม਺ͱ૊Έ߹Θͤͯ ࢖͏ͳͲ ˔ ؀ڥม਺ʹର͢Δ σϑΥϧτ஋ͷఆٛʹ͸ ?=Λ࢖ͬͨํ͕εϜʔζʹ ॻ͚Δ ˔ ݸਓతʹ͸͋·Γ࢖͍ Ͳ͜Ζ͕ͳ͍ʁ SUDO=sudo ifdef SUDO_USER SUDO=sudo -u $(SUDO_USER) endif .PHONY: install install: $(SUDO) mv hoge /usr/local/bin/ JGEFG &Y$POEJUJPO

Slide 43

Slide 43 text

43 ˔ Λ࢖͏ํ๏ͱlzΛ࢖͏ ํ๏͕͋Δɻ ˓ ͷ৔߹ɺલޙͷۭന΋ ൺֱ͞ΕΔ ˓ ΍΍͍͜͠ͷͰޙऀਪ঑ ˔ "/%ͱ͔03͕ॻ͚ͳ͍ ifeq ($(HOGE),hoge) HOGE=fuga endif # 以下はfalse ifeq (hoge, hoge) HOGE=hoge endif ifeq "$(HOGE)" "hoge" HOGE=fuga endif JGFRɾJGOFR &Y$POEJUJPO

Slide 44

Slide 44 text

44 ˔ ৚݅෼ذ͸ίϚϯυͷهड़ ʹ΋࢖͑Δ ˔ ͨͩ͠ɺJGઅશମΛUBCͰ Πϯσϯτͯ͠͠·͏ͱɺ શ͕ͯίϚϯυͱ࣮ͯ͠ߦ ͞Εͯ͠·͏ ˔ JG৚݅ͷΠϯσϯτ͸ εϖʔεͰߦ͏ # インデントしない方が良い main: ifeq "$(ANOTHER)" “another.c" gcc -o main another.c else gcc -o main main.c endif JGͷΠϯσϯτ &Y$POEJUJPO # タブでインデントするとエラー # # $ make # /bin/sh: 1: ifeq: not found # make: *** [Makefile:2: main] Error 127 main: ifeq "$(ANOTHER)" “another.c" gcc -o main another.c else gcc -o main main.c endif

Slide 45

Slide 45 text

໰୊ઃఆ 45 ˔ ҎԼͷཁ݅Λຬͨ͢Α͏ʹ.BLFpMFʹมߋΛՃ͑Α ˓ DRYRUNͱ͍͏ม਺͕USVFͰ͋Δͱ͖ɺ࣮ࡍʹ λʔήοτΛੜ੒ͤͣɺ୅ΘΓʹ࣮ߦίϚϯυΛ දࣔ͢Δ ˓ TFFEUYUҎ֎͕ࢦఆ͞Εͨͱ͖ɺܯࠂΛදࣔ͢Δ ˓ CIͱ͍͏؀ڥม਺͕ઃఆ͞Ε͍ͯͨͱ͖ɺNUM=1ʹ͢Δ ˔ ͨͩ͠ɺHFO@EBUBQZࣗମΛมߋ͢Δ͜ͱ͸ෆՄͱ͢Δ &Y$POEJUJPO

Slide 46

Slide 46 text

ʂ 46 &Y 'VODUJPOT

Slide 47

Slide 47 text

ؔ਺ 47 ˔ .BLFʹ͸༷ʑͳػೳΛఏڙ͢Δ૊ΈࠐΈؔ਺͕͋Δ ˓ TIFMMɿγΣϧεΫϦϓτΛ࣮ߦ͢Δ ˓ XJMEDBSEɿಛఆͷύλʔϯΛ࣋ͭϑΝΠϧσΟϨΫ τϦΛྻڍ͢Δ ˓ EJSɿࢦఆ͞ΕͨύεͷσΟϨΫτϦ෦Λநग़͢Δ ˓ TVCTUɿจࣈྻதͷಛఆͷจࣈྻΛஔ׵͢Δ ˓ GPSFBDIɿෳ਺ͷཁૉʹؔ਺Λద༻͢Δ &Y'VODUJPOT

Slide 48

Slide 48 text

48 ● $(関数名 引数1,引数2) ˔ ஫ҙࣄ߲ ˓ ΧϯϚͷલޙʹۭനΛೖ Εͳ͍ ˓ $Λ࢖͍͍ͨ৔߹ɺ$$ͱ ͯ͠Τεέʔϓ͢Δ ࢖͍ํ &Y'VODUJPOT # 直下にあるCのソースコードを列挙 C_SRCS=$(wildcard *.c) # ファイル名の.cと.oを置換 O_FILES=$(subst .c,.o,$(C_SRCS)) %.o: %.c echo "gcc -o $@ $<" $(O_FILES): $(C_SRCS) # パイプも使える FILES=$(shell ls -a | grep -v .git) .PHONY: ls ls: echo $(FILES)

Slide 49

Slide 49 text

໰୊ઃఆ 49 ˔ ҎԼͷཁ݅Λຬͨ͢.BLFpMFΛॻ͚ ˓ DNEσΟϨΫτϦҎԼʹ͋ΔͭͷίϚϯυΛϏϧυ͠ɺ ͦΕͧΕCJOσΟϨΫτϦҎԼʹ഑ஔ͢Δ ˓ lib/*.go ͱstatik/*.goɺ͓Αͼ֤ίϚϯυͷ(P ϑΝΠϧɺgo.mod͕มߋ͞ΕͨΒ࠶౓Ϗϧυ͕૸Δ ˓ makeͱ࣮ߦ͢ΔͱͭͷίϚϯυ͕Ϗϧυ͞Εɺ make cleanͰશͯ࡟আ͞ΕΔ ˔ ͨͩ͠ɺ.BLFpMFதʹ(PͷιʔείʔυϑΝΠϧ໊Λ ϋʔυίʔυͯ͠͸ͳΒͳ͍ ˔ ิ଍ɿgo build -o バイナリへのパス ./cmd/コマンド名 &Y'VODUJPOT

Slide 50

Slide 50 text

ʂ 50 &Y 5ZQFPG7BSJBCMF

Slide 51

Slide 51 text

छྨͷม਺ͷ࢖͍෼͚ 51 ˔ ࣮͸એݴͷ࢓ํʹΑͬͯ.BLFpMFͷม਺͸छྨ͋Δ ˓ ୯७ల։ม਺ɿVAR := value ˓ ࠶ؼల։ม਺ɿVAR = value ˔ ͦΕͧΕͷม਺͸ධՁ͞ΕΔλΠϛϯά͕ҟͳΔ ˓ ୯७ల։ม਺ɿͦͷ৔Ͱ஋͕ల։͞ΕΔ ˓ ࠶ؼల։ม਺ɿ࢖ΘΕΔͱ͖ʹ஋͕ల։͞ΕΔ &Y5ZQFPG7BSJBCMF

Slide 52

Slide 52 text

52 ˔ ؔ਺ͳͲΛ࢖ͬͯಈతʹ มΘΓಘΔ஋ΛऔΔม਺Ͱ ҧ͍͕ൃੜ͢Δ ˔ ࠷ॳʹఆ͍ٛͯ͠Δ͚ͩͷ DATEม਺ͷ஋͕࣮ߦͷ౓ʹ มԽ͍ͯ͠Δ ˔ ҰํDATE_FIXED͸ มԽ͍ͯ͠ͳ͍ ۩ମతͳڍಈ &Y5ZQFPG7BSJBCMF DATE=$(shell date) DATE_FIXED:=$(shell date) .DEFAULT_GOAL=all .PHONY: print print%: @echo $(DATE) @echo $(DATE_FIXED) @sleep 1 .PHONY: all all: print1 print2 print3 $ make Sat 29 Aug 2020 06:44:17 PM UTC Sat 29 Aug 2020 06:44:17 PM UTC Sat 29 Aug 2020 06:44:18 PM UTC Sat 29 Aug 2020 06:44:17 PM UTC Sat 29 Aug 2020 06:44:19 PM UTC Sat 29 Aug 2020 06:44:17 PM UTC

Slide 53

Slide 53 text

53 ˔ ɿະఆٛͷͱ͖ʹ୅ೖ ˓ ؀ڥม਺Λѻ͏ͷʹศར ˔ ɿఆٛࡁΈͷ஋ʹ৽ͨͳ ஋ΛՃ͑Δ ˓ ಛఆͷλʔήοτ͚ͩ ϏϧυΦϓγϣϯΛ௥Ճ ͍ͨ͠ͳͲ ͍ͭͰʹଞͷԋࢉࢠ &Y5ZQFPG7BSJBCMF HOGE?=hoge HOGE += fuga .PHONY: print print: @echo $(HOGE) $ make hoge fuga $ HOGE=piyo make piyo fuga

Slide 54

Slide 54 text

໰୊ઃఆ 54 ˔ ҎԼͷཁ݅Λຬͨ͢Α͏ʹɺ.BLFpMFʹมߋΛՃ͑Αɻ ˓ ϑΝΠϧͷੜ੒ޙɺ֦ுࢠΛআ͍ͨϑΝΠϧ໊͕ಉ͡෺ಉ࢜ͷ ૊ΛɺҰͭͷΞʔΧΠϒʹ·ͱΊΔ ˗ ྫ͑͹foo.csvͱfoo.json͔Βfoo.tar.gzΛ࡞Δ ˔ ͨͩ͠ɺΞʔΧΠϒ໊ʹ͸Ϗϧυ࣌ͷ࣌ؒΛՃ͑ɺྫ͑͹ foo_20200830-000000.tar.gzͱͳΔΑ͏ʹ͢Δ͜ͱɻ ˔ ·ͨɺಉ࣌ʹੜ੒ͨ͠ΞʔΧΠϒ໊ͷ೔͕࣌ἧ͏Α͏ʹ஫ҙ͢Δ ˔ ิ଍ ˓ ೔࣌ੜ੒ɿdate +%Y%m%d-%H%M%S ˓ ΞʔΧΠϒੜ੒ɿtar czf アーカイブ名 ファイル1 ファイル2… &Y5ZQFPG7BSJBCMF

Slide 55

Slide 55 text

ʂ ͔͜͜Βઌ͸ൃల՝୊ 55

Slide 56

Slide 56 text

ʂ 56 &Y 1PSUBCJMJUZ

Slide 57

Slide 57 text

؀ڥʹॊೈʹରԠ͢Δ 57 ˔ ؀ڥʹΑ༷ͬͯʑͳҧ͍͕͋Δ ˓ -JOVY΍.BDͰ͸࡟আίϚϯυ͕rm ͕ͩ8JO͸del ˓ -JOVYͷsed ͱ.BDͷsed ͸Φϓγϣϯ͕ҧ͏ ˔ ͜ΕΒͷࠩҟΛٵऩ͢Δʹ͸Ͳ͏͢Ε͹ྑ͍͔ʁ ˓ Ͱ͖Δ͚ͩ.BLFͷػೳΛ࢖͏ ʢshellͷ࢖༻Λආ͚Δʣ ˓ ࣮ߦίϚϯυΛม਺Խͯ͠؀ڥ͝ͱʹ੾Γସ͑ &Y1PSUBCJMJUZ

Slide 58

Slide 58 text

58 ˔ ·ͣ͸ $(OS) Ͱ൑ఆ ˔ -JOVYͱ.BDͷ൑ఆ͸ uname ίϚϯυΛ࢖͏ ˔ ͦΕͧΕͷ৚݅෼ذ಺Ͱ ඞཁͳϑϥάͷ௥Ճ΍ɺ ίϚϯυͷมߋΛߦ͏ 04͝ͱʹ෼ذ &Y1PSUBCJMJJUZ ifeq "$(OS)" “Windows_NT" # Windows else UNAME=$(shell uname -s) ifeq "$(UNAME)" "Linux" # Linux else # macOS endif endif

Slide 59

Slide 59 text

໰୊ઃఆ 59 ˔ -JOVY΍.BDͰ͸࡟আίϚϯυ͕SN͕ͩ8JO͸EFM ˔ -JOVYͷTFEͱ.BDͷTFE͸Φϓγϣϯ͕ҧ͏ ˔ ͜ΕΒͷࠩҟΛٵऩ͢Δʹ͸Ͳ͏͢Ε͹ྑ͍͔ʁ &Y1PSUBCJMJUZ

Slide 60

Slide 60 text

ʂ 60 &Y 4FDPOEBSZ&YQBOTJPO

Slide 61

Slide 61 text

໰୊ઃఆ 61 ˔ &YͷΑ͏ͳ.BLFpMF͸·ͩඇޮ཰ ˓ Ϗϧυ͍ͨ͠શͯͷίϚϯυΛྻڍ͢Δඞཁ͕͋Δ ˓ ࣮͸͜ΕΛ͏·͘ղܾ͢Δํ๏͕͋Δ ˔ ύλʔϯϚονͰॻ͍ͯXJMEDBSEͰల։Ͱ͖ͨΒخ͍͠ ˓ ͭ·Γbin/%ʹϚονͨ͠λʔήοτͷQSFSFRͰ $(wildcard cmd/%/*.go)Έ͍ͨͳ͜ͱ͕͍ͨ͠ &Y4FDPOEBSZ&YQBOTJPO IUUQTXXXHOVPSHTPGUXBSFNBLFNBOVBM NBLFIUNM4FDPOEBSZ&YQBOTJPO

Slide 62

Slide 62 text

ͦͷଞUJQT 62 ˔ ίϚϯυͷ࣮ߦ݁Ռ੍ޚ ˓ A!AΛ෇͚Δͱɺ࣮ߦίϚϯυΛදࣔ͠ͳ͍ ˓ AAΛ෇͚Δͱɺࣦഊͯ͠΋ແࢹ͢Δ ˔ ෳ਺λʔήοτΛฒྻʹੜ੒ ˓ AK/Aʢ/͸੔਺ʣͱ͍͏Φϓγϣϯ෇͖Ͱ࣮ߦ͢Δ ˔ Α͘ݟΔDPOpHVSFͬͯԿʁ ˓ .BLFpMFࣗମΛ͜ΕΛ࢖ͬͯੜ੒͢Δ ˓ BVUPNBLFͷΑ͏ͳ΋ͷ΋͋ΔͷͰڵຯ͕͋Ε͹ ˔ ΋ͬͱ৽͍͠.BLFΈ͍ͨͳͷͳ͍ͷʁ ˓ CB[FMͱ͔͋Δ͚ͲٻΊͯΔͷͱ͸ҧ͏͔΋

Slide 63

Slide 63 text

·ͱΊ 63 ˔ (/6.BLF͸ϑΝΠϧΛੜ੒͢ΔϧʔϧΛهड़͢Δ΋ͷ ˓ ͨͩ͠λεΫϥϯφʔͱͯ͠΋࢖͑Δ ˔ ޮ཰తͳॻ͖ํΛ͢Δ͜ͱͰɺϋʔυίʔσΟϯάΛ ݮΒͤΔ ˓ ύλʔϯϚονɾ૊ΈࠐΈؔ਺ͳͲ ˔ ଞʹ΋ଟ਺ͷػೳ͕͋Δ ˓ (/6.BLFୈࡾ൛ͷߪೖΛ͓͢͢Ί͠·͢

Slide 64

Slide 64 text

? ࣭໰λΠϜ 64