Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DevOps導入指南 ~基本編~
Search
Recruit Technologies
August 21, 2020
Technology
5
42k
DevOps導入指南 ~基本編~
2020年度リクルート新人ブートキャンプ エンジニアコースの講義資料です
Recruit Technologies
August 21, 2020
Tweet
Share
More Decks by Recruit Technologies
See All by Recruit Technologies
障害はチャンスだ! 障害を前向きに捉える
rtechkouhou
1
620
Flutter移行の苦労と、乗り越えた先に得られたもの
rtechkouhou
3
11k
ここ数年間のタウンワークiOSアプリのエンジニアのチャレンジ
rtechkouhou
1
1.4k
大規模環境をAWS Transit Gatewayで設計/移行する前に考える3つのポイントと移行への挑戦
rtechkouhou
1
1.8k
【61期 新人BootCamp】TOC入門
rtechkouhou
3
41k
【RTC新人研修 】 TPS
rtechkouhou
1
40k
Android Boot Camp 2020
rtechkouhou
0
40k
HTML/CSS
rtechkouhou
10
50k
TypeScript Bootcamp 2020
rtechkouhou
9
45k
Other Decks in Technology
See All in Technology
Building Static Websites with Sculpin
opdavies
0
1.4k
Bidirectional Quadratic Voting Leveraging Issue-Based Matching
kentaro
2
170
疎通2024
sadnessojisan
4
490
分野に潜むツールの紹介
pojiro
1
330
タイミーのBraze活用 ~PUSH通知を活用したレコメンド~
ozeshun
2
120
リクルートのデータマネジメント組織に 求められてきたコト
recruitengineers
PRO
4
340
エンジニアリングマネージャーが紐解く、事業視点から組織文化まで、包括的アプローチの探求 / READYFOR
9ma3r
13
2.2k
[RSJ24] Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations
keio_smilab
PRO
0
220
AWSを始めた頃に陥りがちなポイントをまとめてみた
oshanqq
1
1.7k
自社開発した大規模言語モデルをどうプロダクションに乗せて運用していくか〜インフラ編〜
pfn
PRO
4
680
Javaにおける関数型プログラミンへの取り組み
skrb
5
110
Azure Cosmos DB での時系列ログの運用と改善
sansantech
PRO
0
190
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
72
8.9k
How GitHub (no longer) Works
holman
309
140k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
The Invisible Side of Design
smashingmag
295
50k
Documentation Writing (for coders)
carmenintech
65
4.3k
The Language of Interfaces
destraynor
153
23k
Fashionably flexible responsive web design (full day workshop)
malarkey
400
65k
Visualization
eitanlees
142
15k
A Tale of Four Properties
chriscoyier
155
22k
RailsConf 2023
tenderlove
26
790
How to Ace a Technical Interview
jacobian
275
23k
How to name files
jennybc
75
97k
Transcript
© 2020, Recruit Technologies Co., Ltd. All rights reserved. ΫϥυΞʔΩςΫτ(
౻ݪ ྋഅ %FW0QTಋೖࢦೆ ʙجຊฤʙ ൛
ߨࢣհ ౻ݪ ྋഅ גࣜձࣾϦΫϧʔτ ŲƅƁŦƄŞŪ౷ׅຊ෦ŲƅƁŦƄŞŪ։ൃ౷ׅࣨ ŚƃŢƄŬŗžƃŞƄࣨŲƅƁŦƄŞũŎűƄũŎŚƃŢƄŬŗžƃŞƄ෦ ŞŽřŪƄŗŖŝũŞŪŞƄſŖŲƅ ܦྺ ʙ Ϣʔβܥ4JFSʹͯ3%
ʙ ϦΫϧʔτςΫϊϩδʔζʹೖࣾ ओͳ׆ಈ ࣾ֎ؚΉ • ίϯςφɾύϒϦοΫΫϥυܥςΫϊϩδʔͷࣄۀண • ίϛϡχςΟɾΧϯϑΝϨϯεӡӦ 3BODIFS+1ίΞϝϯόʔɾ$MPVE/BUJWF%BZT5PLZPηογϣϯεϐʔΧʔ ӡӦελοϑ • ॻ੶ࣥචɾ࿈ࡌɾొஃͳͲ • 3BODIFSʹΑΔ,VCFSOFUFT׆༻શΨΠυ ΠϯϓϨε • !*5ઌߦࣄྫʹֶͿ,VCFSOFUFTاۀ׆༻ͷݱ࣮ɾίϯςφϕʔεͷ$*$%ຊ൪ࣄྫେղ • 5IJOL*5 ϚϧνΫϥυ࣌ͷ࠷ڧίϯϏ 3BODIFSʹΑΔ,VCFSOFUFT׆༻ΨΠυ •
͏গ͠ߨࢣͷུྺ 4 2011/3 BDfB]^d7C\GRV 2011/4 )1ZSIerRV= 0 / +ZR&D
1$/(1/eb_<`8/F9IH 0O2L6IH 2016/1 ,-1.19S 0:JM[@Q(Qass) 0;T1NX/NXIH Raico, Fleet, '@Q,,HRTech(ATS, EMS, KOT), *! "Lite, Simpos 0MANTONX & /53 53g KY?W baEU(@IT/ThinkIt) #/PA(CloudNativeDays ) %( c>(Rancher JP)
l %FW0QTͬͯԿʁ l %FW0QTͱ l %FW0QTͷཱ֬ʹཱͭςΫϊϩδʔ l %FW0QTͷཱ֬ʹඞཁͳจԽతಛੑ l %FW0QTಋೖࢦೆ
ʙٕज़ฤʙ ΞδΣϯμ
DevOps?
γεςϜͷ։ൃ৫ Ҏ߱%FW ͱ ӡ༻৫ Ҏ߱0QT Ͱରཱ͋͠͏ͷͰͳ͘ɺ ڠௐ ߹ʹΑͬͯ༥߹ ͠ͳ͕ΒϏδωεతΛ ୡ͢ΔͨΊͷߟ͑ํɺ৫తͳจԽ
%FW0QTͬͯԿʁ Dev Ops Dev Ops DevOps DevOps
%FW0QTΛ࣮ફͰ͖͍ͯΔاۀ WT %FW0QTΛ࣮ફͰ͖͍ͯͳ͍اۀ %FW0QTΛ࣮ફͰ͖ͨ࣌ͷޮՌ
%FW0QTΛ࣮ફͰ͖͍ͯΔاۀ WT %FW0QTΛ࣮ફͰ͖͍ͯͳ͍اۀ %FW0QTΛ࣮ફͰ͖ͨ࣌ͷޮՌ &
" $!% # DevOpsLean
%FW0QTΛ࣮ફͰ͖͍ͯΔاۀ WT %FW0QTΛ࣮ફͰ͖͍ͯͳ͍اۀ %FW0QTΛ࣮ફͰ͖ͨ࣌ͷޮՌ &
" $!% # DevOpsLean
%FW0QTΛ࣮ફͰ͖͍ͯΔاۀ WT %FW0QTΛ࣮ફͰ͖͍ͯͳ͍اۀ %FW0QTΛ࣮ફͰ͖ͨ࣌ͷޮՌ &
" $!% # DevOpsLean
%FW0QTΛ࣮ફͰ͖͍ͯΔاۀ WT
%FW0QTΛ࣮ફͰ͖͍ͯͳ͍اۀ %FW0QTΛ࣮ફͰ͖ͨ࣌ͷޮՌ & " $!% # DevOpsLean
%FW0QTΛ࣮ફͰ͖͍ͯΔاۀ WT %FW0QTΛ࣮ફͰ͖͍ͯͳ͍اۀ ҎԼͷ؍Ͱ ༗ҙͳ͕ࠩ͋ͬͨ %FW0QTΛ࣮ફͰ͖ͨ࣌ͷޮՌ
%FW0QTΛ࣮ફͰ͖͍ͯΔاۀ WT %FW0QTΛ࣮ફͰ͖͍ͯͳ͍اۀ ҎԼͷ؍Ͱ ༗ҙͳ͕ࠩ͋ͬͨ %FW0QTΛ࣮ફͰ͖ͨ࣌ͷޮՌ
%FW0QTΛ࣮ફͰ͖ͨ߹ɺҎԼ͕࣮ݱͰ͖Δ %FW0QTΛ࣮ફͨ͠߹ͷҰൠతͳޮՌ
%FW0QTΛ࣮ફͰ͖ͨ߹ɺҎԼ͕࣮ݱͰ͖Δ %FW0QTΛ࣮ફͨ͠߹ͷҰൠతͳޮՌ " !
DevOps
ຊ֨తʹޠΒΕΔ͜ͱ͕૿͑ͨͷࣸਅڞ༗αʔϏεͷGMJDLS͕ ͷ03FJMMZ7FMPDJUZΧϯϑΝϨϯεͰߦͳͬͯൃදҎ߱ %FW0QTͷྺ࢙ ݪ https://www.slideshare.net/jallspaw/10-deploys-per-day- dev-and-ops-cooperation-at-flickr
ຊ֨తʹޠΒΕΔ͜ͱ͕૿͑ͨͷࣸਅڞ༗αʔϏεͷGMJDLS͕ ͷ03FJMMZ7FMPDJUZΧϯϑΝϨϯεͰߦͳͬͯൃදҎ߱ %FW0QTͷྺ࢙ ݪ https://www.slideshare.net/jallspaw/10-deploys-per-day- dev-and-ops-cooperation-at-flickr
Ops ! Dev Dev
Ops %FWͱ0QTͷରཱ Dev Ops
҉తʹΓࠐ·Ε֤ͨϩʔϧͷͷҧ͍ʹىҼ ͳͥରཱ͕ى͜Δͷ͔ Dev/! )+.0 " #* Ops/!
%&-', "1$2 #*3( 2
҉తʹΓࠐ·Ε֤ͨϩʔϧͷͷҧ͍ʹىҼ ͳͥରཱ͕ى͜Δͷ͔ DevK3 ?BIL2 & %!5-. 6@2 OpsK3 !#(9:H/;D
& %!5-M8N 6@O< N A GE4 !"',+)*$JC & & %!=10F>7
େతΛୡ͢Δ֬ΛߴΊΔʹ %FWͱ0QTͷରཱΛղফ͢Δඞཁ͕͋Δ ରཱΛղফ͢ΔͨΊʹ ① ②
େతΛୡ͢Δ֬ΛߴΊΔʹ %FWͱ0QTͷରཱΛղফ͢Δඞཁ͕͋Δ ରཱΛղফ͢ΔͨΊʹ ① ②
ຊདྷࢦ͍ͨ͠ͷ৫ͱͯ͠ͷจԽͷཱ֬ ςΫϊϩδʔͦͷ࣮ݱΛࢧԉ͢ΔͨΊͷΈ %FW0QTʹ͓͚ΔςΫϊϩδʔͷཱͪҐஔ
શ һ ᘳ ਓ શһ͕ਓͰ͋Δඞཁ͕͋Δ ςΫϊϩδʔ͕ͳ͍߹
ଟ छ ଟ ༷ શ һ ᘳ ਓ
શһ͕ਓͰ͋Δඞཁ͕͋Δ ͦΕɺ͋Γ͑ͳ͍ͷͰςΫϊϩδʔͷྗΛआΓΔ ςΫϊϩδʔ͕ͳ͍߹ ( )
ओʹ࣠ ςΫϊϩδʔͰओʹॿ͚Δࣄฑ
① ( ) ओʹ࣠ ςΫϊϩδʔͰओʹॿ͚Δࣄฑ
② (("- %) ① #) ., ($!
0*/ &'1+) ओʹ࣠ ςΫϊϩδʔͰओʹॿ͚Δࣄฑ
େ͖͚ͯͭ͘ͷςΫϊϩδʔ͕%FW0QTจԽͷཱ֬Λࢧ ԉ͢ΔͱݴΘΕ͍ͯΔɻ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ %"# !$
!$
େ͖͚ͯͭ͘ͷςΫϊϩδʔ͕%FW0QTจԽͷཱ֬Λࢧ ԉ͢ΔͱݴΘΕ͍ͯΔɻ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ %"# !$
!$
ίʔυ͔ΒΠϯϑϥؚΊͨڥߏஙΛࣗಈతʹ࣮ࢪͰ͖Δ Α͏ʹ͢Δ͜ͱ ࣗಈԽ͞ΕͨΠϯϑϥ
͢ͰʹϨΠϠʔ͝ͱʹ༷ʑͳςΫϊϩδʔ͕ଘࡏ͢Δ
࣮֬ʹޡΓͳ͘୯७࡞ۀΛਓؒ͜ͳ͢͜ͱ͕Ͱ͖Δ͔ʁ ͳͥࣗಈԽ͞ΕͨΠϯϑϥ͕ඞཁ͔ʁ
࣮֬ʹޡΓͳ͘୯७࡞ۀΛਓؒ͜ͳ͢͜ͱ͕Ͱ͖Δ͔ʁ ͷԾϚγϯΛखಈͰߏஙɾςετ͢Δɻ ਓ࣮ؒ֬ʹޡΓͳ࣮͘ߦͰ͖Δ͔ʁ ͳͥࣗಈԽ͞ΕͨΠϯϑϥ͕ඞཁ͔ʁ
࣮֬ʹޡΓͳ͘୯७࡞ۀΛਓؒ͜ͳ͢͜ͱ͕Ͱ͖Δ͔ʁ ͷԾϚγϯΛखಈͰߏஙɾςετ͢Δɻ ਓ࣮ؒ֬ʹޡΓͳ࣮͘ߦͰ͖Δ͔ʁ ͳͥࣗಈԽ͞ΕͨΠϯϑϥ͕ඞཁ͔ʁ
ਓؒ୯७࡞ۀΛޡΓͳ࣮֬͘ʹ࣮ߦ͢Δʹෆ҆ఆ͗͢Δ ͳͥࣗಈԽ͞ΕͨΠϯϑϥ͕ඞཁ͔
!
ਓؒ୯७࡞ۀΛޡΓͳ࣮֬͘ʹ࣮ߦ͢Δʹෆ҆ఆ͗͢Δ ͳͥࣗಈԽ͞ΕͨΠϯϑϥ͕ඞཁ͔ -1# ! &8( 352 4 .% $*
+/ 9 ), + '7" 60+ 7
୯७ͳ܁Γฦ͠࡞ۀ͕ಘҙ େྔ୯७࡞ۀʹ͓͚Δܭࢉػ
୯७ͳ܁Γฦ͠࡞ۀ͕ಘҙ େྔ୯७࡞ۀʹ͓͚Δܭࢉػ
୯७ͳ܁Γฦ͠࡞ۀ͕ಘҙ େྔ୯७࡞ۀʹ͓͚Δܭࢉػ $ # "
or " !%
େྔͷ୯७࡞ۀ ܭࢉػʹͤͨํ͕దࡐదॴ ͦͷͨΊͷπʔϧग़ଗ͍ͭͭ͋Δ େྔ୯७࡞ۀܭࢉػʹͤΔ
େ͖͚ͯͭ͘ͷςΫϊϩδʔ͕%FW0QTจԽͷཱ֬Λࢧ ԉ͢ΔͱݴΘΕ͍ͯΔɻ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ %"# !$
!$
ίʔυΛίʔυϦϙδτϦͰཧ͢Δ ڞ༗͞Εͨόʔδϣϯίϯτϩʔϧ
ίʔυΛίʔυϦϙδτϦͰཧ͢Δ ڞ༗͞Εͨόʔδϣϯίϯτϩʔϧ
ίʔυΛίʔυϦϙδτϦͰཧ͢Δ ڞ༗͞Εͨόʔδϣϯίϯτϩʔϧ =
l %PDLFSGJMF l ,VCFSOFUFTͷϚχϑΣετ l "OTJCMFͷQMBZCPPL l 5FSSBGPSNͷUGϑΝΠϧɾUGWBSTϑΝΠϧ l $*$%ͷύΠϓϥΠϯఆٛϑΝΠϧ
ͳͲ Πϯϑϥίʔυ
ڥ͝ͱʹσϓϩΠ͞Ε͍ͯΔ ΞϓϦέʔγϣϯ֤छߏΛѲ͢ΔͨΊ ͳͥڞ༗͞Εͨόʔδϣϯίϯτϩʔϧ͕ඞཁ͔
શһ͕͍࣋ͬͯΔίʔυόϥόϥ ݹ͔ͬͨΓ৽͔ͬͨ͠Γ ڞ༗͞Εͨόʔδϣϯίϯτϩʔϧ͕ͳ͍ঢ়گΛߟ͑Δ ࣟ ࣠ ࣡
ࣣ ࣕ ࣖ ࣗ ࣘ ŋŏ
શһ͕͍࣋ͬͯΔίʔυόϥόϥ ݹ͔ͬͨΓ৽͔ͬͨ͠Γ ڞ༗͞Εͨόʔδϣϯίϯτϩʔϧ͕ͳ͍ঢ়گΛߟ͑Δ ࣟ ࣠ ࣡
ࣣ ࣕ ࣖ ࣗ ࣘ ŋŏ
શһ͕͍࣋ͬͯΔίʔυόϥόϥ ݹ͔ͬͨΓ৽͔ͬͨ͠Γ ڞ༗͞Εͨόʔδϣϯίϯτϩʔϧ͕ͳ͍ঢ়گΛߟ͑Δ ࣟ ࣠ ࣡
ࣣ ࣕ ࣖ ࣗ ࣘ ŋŏ ʊਓਓਓਓਓਓਓਓʊ ʼ ଋ͞Εͨࢮ ʻ ʉY^Y^Y^Y^Y^Y^Y ʉ
Ͳͷίʔυ͕࠷৽ͳͷ͔ຊ൪ڥͰಈ͍͍ͯΔͷ͔ΛѲͰ͖Δ ڞ༗͞Εͨόʔδϣϯίϯτϩʔϧ͕͋Ε มߋ༰ Λू σϓϩΠ
ڞ༗͞Ε͍ͯͳ͍όʔδϣϯίϯτϩʔϧ దͳίϛϡχέʔγϣϯɺোରԠΛ્͢Δ Ξϯνύλʔϯ ڞ༗͞Εͳ͍όʔδϣϯίϯτϩʔϧ Ops Dev
) (
γεςϜΛߏ͢Δίʔυ શͯޓ͍ʹݟ͑Δॴʹஔ͠ɺڞ༗͢Δ Ξϯνύλʔϯ ڞ༗͞Εͳ͍όʔδϣϯίϯτϩʔϧ Ops Dev
γεςϜΛߏ͢Δίʔυ શͯޓ͍ʹݟ͑Δॴʹஔ͠ɺڞ༗͢Δ Ξϯνύλʔϯ ڞ༗͞Εͳ͍όʔδϣϯίϯτϩʔϧ Ops Dev
(Single source of truth )
ڥʹͲͷ࣌ͷίʔυ͕σϓϩΠ͞Ε͍ͯΔ͔ɺ ͦͷίʔυΛϝϯόʔશһ͕ಉ͡Α͏ʹӾཡͰ͖Δ͜ͱ͕ ίϛϡχέʔγϣϯΛԁʹ͢Δͱͱʹɺ ൃੜ࣌ͷղܾ·Ͱͷ࣌ؒ .553 Λॖ͢Δ ڞ༗͞Εͨόʔδϣϯίϯτϩʔϧ·ͱΊ
େ͖͚ͯͭ͘ͷςΫϊϩδʔ͕%FW0QTจԽͷཱ֬Λࢧ ԉ͢ΔͱݴΘΕ͍ͯΔɻ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ %"# !$
!$
ϏϧυͱσϓϩΠʹ͍ͭͯπʔϧΛ׆༻ͯ͠ ՄೳͳݶΓγϯϓϧͳϓϩηε Ͱࣗಈ࣮ߦͰ͖ΔΑ͏ʹ͢Δ͜ͱ ϫϯεςοϓϏϧυͱσϓϩΠ
ϫϯεςοϓϏϧυͱσϓϩΠͰ࣮ݱ͍ͨ͜͠ͱ ② (")! 0 $.'- ③ %
# *+ ① /' ,&
ϫϯεςοϓϏϧυͱσϓϩΠͷ༗ແʹΑΔࠩҟΛߟ͑Δ ϫϯεςοϓϏϧυͱσϓϩΠͷ༗ແ #$! "+* '/-4 ("$&$ ) !%" $
-('/ !" +* ("$&$ ) !%" '/-4.)2 0,1'/3
ϫϯεςοϓϏϧυͱσϓϩΠͷ༗ແʹΑΔࠩҟΛߟ͑Δ ϫϯεςοϓϏϧυͱσϓϩΠͷ༗ແ -.&%+" &,97 2@<H ( &, .(0#.!) %+"/ &,
'.* <42@ %+" &,97 ( &, .(0#.!) %+"/ &, 2@<H?6C A;B2@G >)F J 137$0.= :8IDE5 J
࡞ۀͷखॱΛύΠϓϥΠϯԽ͢Δ͜ͱͰɺ ࡞ۀͷ࠶ݱੑΛߴΊΔ ᶃ ϏϧυɾσϓϩΠϓϩηεΛ࣮֬ʹվળͰ͖ΔΑ͏ʹ͢Δ Dev Ops
$ " ( ' ) & $ % " ! Ops Dev " #
࡞ۀͷखॱΛύΠϓϥΠϯԽ͢Δ͜ͱͰɺ ࡞ۀͷ࠶ݱੑΛߴΊΔ ᶃ ϏϧυɾσϓϩΠϓϩηεΛ࣮֬ʹվળͰ͖ΔΑ͏ʹ͢Δ Dev Ops
$ " ( ' ) & $ % " ! Ops Dev " # %#,! "(' ) $ -* %& $ +.
ϫϯεςοϓϏϧυͱσϓϩΠ͕ͳ͍߹Λߟ͑Δ ᶄ ଐਓੑΛԼ͛Δ A A ? B
ϫϯεςοϓϏϧυͱσϓϩΠ͕ͳ͍߹Λߟ͑Δ ᶄ ଐਓੑΛԼ͛Δ ) A (
ϫϯεςοϓϏϧυͱσϓϩΠ͕ͳ͍߹Λߟ͑Δ ᶄ ଐਓੑΛԼ͛Δ ) A (
ϫϯεςοϓϏϧυͱσϓϩΠ͕͋Δ߹Λߟ͑Δ ᶄ ଐਓੑΛԼ͛Δ A ) ) ( ) B
୭͕͍ͭԿΛͲΜͳతͰ σϓϩΠͨ͠ͷ͔ѲͰ͖ΔΑ͏ʹ͢Δ ೝূɾೝՄͷΈΛύΠϓϥΠϯʹΈࠐΉ ᶅ ΨόφϯεΛޮ͔ͤΒΕΔΑ͏ʹ͢Δ
ܰ͘ৼΓฦΓ ڞ༗͞Εͨόʔδϣϯίϯτϩʔϧ ϫϯεςοϓϏϧυͱσϓϩΠ มߋ༰ Λू Ϗϧυ σϓϩΠ
ϫϯεςοϓϏϧυͱσϓϩΠͰ࣮ݱ͍ͨ͜͠ͱ ࠶ܝ ② (")! 0 $.'- ③
% # *+ ① /' ,&
҆શ͔࣮ͭ֬ʹΞϓϦέʔγϣϯڥΛϏϧυ͠ɺ σϓϩΠ͢Δɺ·ࣦͨഊ͔ΒͷվળΛ༰қ͔ͭண࣮ʹ࣮ ࢪ͢Δ্ͰϫϯεςοϓϏϧυͱσϓϩΠॏཁ ϫϯεςοϓϏϧυͱσϓϩΠͷ·ͱΊ
େ͖͚ͯͭ͘ͷςΫϊϩδʔ͕%FW0QTจԽͷཱ֬Λࢧ ԉ͢ΔͱݴΘΕ͍ͯΔɻ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ %"# !$
!$
ಛఆͷػೳͷ༗ޮɾແޮΛΓସ͑ͨΓ Ұ෦ͷਓͷΈʹఏڙ͢ΔͨΊͷϑϥά ϑΟʔνϟʔϑϥάͱ
ᶃ Ұ෦ͷϢʔβ͚ʹػೳΛఏڙ͢Δ ᶄ ҆શʹػೳͷϦϦʔεΛߦ͏ ϑΟʔνϟʔϑϥάͷత
l ϓϥΠϕʔτϕʔλ l Ұ෦ͷࢦఆͨ͠ϢʔβʹͷΈػೳΛެ։͢Δ l "#ςετ l ൺΛఆΊͯػೳ৽͍͠6*Λެ։͠ɺڹΛௐΔ l μʔΫϩʔϯν
l ϢʔβͷϦΫΤετΛෳٖͯ͠ࣅతʹॲཧΛߦ͏ ϑΟʔνϟʔϑϥάͷओͳख๏
l ϓϥΠϕʔτϕʔλ l Ұ෦ͷࢦఆͨ͠ϢʔβʹͷΈػೳΛެ։͢Δ l "#ςετ l ൺΛఆΊͯػೳ৽͍͠6*Λެ։͠ɺڹΛௐΔ l μʔΫϩʔϯν
l ϢʔβͷϦΫΤετΛෳٖͯ͠ࣅతʹॲཧΛߦ͏ ϑΟʔνϟʔϑϥάͷओͳख๏
<ิղઆ>μʔΫϩʔϯν
!
<ิղઆ>μʔΫϩʔϯν ! ! "
" # !
<ิղઆ>μʔΫϩʔϯν
" !
<ิղઆ>μʔΫϩʔϯν
! !
<ิղઆ>μʔΫϩʔϯν $ ,) # - . .
/ / 0 * " '%(! ,) &+
Ծઆݕূࢼߦࡨޡ 㲈খ͘͞ࢼͯ͠খࣦ͘͞ഊ ͕͘͠ͳΔ ϑΟʔνϟʔϑϥά͕ͳ͍߹
Ծઆݕূࢼߦࡨޡ 㲈খ͘͞ࢼͯ͠খࣦ͘͞ഊ ͕͘͠ͳΔ ϑΟʔνϟʔϑϥά͕ͳ͍߹ (-+)& %
* , $ ! # "' "'
Ծઆݕূࢼߦࡨޡ 㲈খ͘͞ࢼͯ͠খࣦ͘͞ഊ ͕༰қʹͳΔ ϑΟʔνϟʔϑϥά͕͋Δ߹ "
! # $
Ծઆݕূࢼߦࡨޡ 㲈খ͘͞ࢼͯ͠খࣦ͘͞ഊ ͕༰қʹͳΔ ϑΟʔνϟʔϑϥά͕͋Δ߹ "
! # $
Ծઆݕূɾࢼߦࡨޡͱ҆શʹ࣮ࢪ͢Δ্Ͱ ϑΟʔνϟʔϑϥάಛʹॏཁ ϑΟʔνϟʔϑϥά
େ͖͚ͯͭ͘ͷςΫϊϩδʔ͕%FW0QTจԽͷཱ֬Λࢧ ԉ͢ΔͱݴΘΕ͍ͯΔɻ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ %"# !$
!$
%FWͱ0QTͰҧ͏ࢦඪΛݟ͍ͯΔ Α͋͘Δ !
%FWͱ0QTͰҧ͏ࢦඪΛݟ͍ͯΔ Α͋͘Δ ! %!$ #"
%FWͱ0QTͰҧ͏ࢦඪΛݟ͍ͯΔ Α͋͘Δ ! &5,1.+4 32 % )'* $0 -
#!" 4(/
ϊϋՄೳͳݶΓू͠ɺ ಉ͡ใݯΛ͔ͭͬͯٞΛ͢Δ ಉҰͷใΛݟͳ͕Βٞ͢Δ Ops Dev ू or ฒଘ ཁٞ
ϊϋՄೳͳݶΓू͠ɺ ಉ͡ใݯΛ͔ͭͬͯٞΛ͢Δ ಉҰͷใΛݟͳ͕Βٞ͢Δ Ops Dev ू or ฒଘ ཁٞ
ϛείϛϡχέʔγϣϯΛݮΒͨ͢Ίʹ ϩʔϧ͕ҟͳΔ߹Ͱಉ͡ใΛ ݟΕΔঢ়ଶͰ͖ٞ͢ ૬ख͕Γಘͳ͍ใΛجʹٞΛ ల։͢Δ͜ͱίϛϡχέʔγϣϯతʹ/( ڞ༗͞ΕͨϝτϦΫε·ͱΊ
େ͖͚ͯͭ͘ͷςΫϊϩδʔ͕%FW0QTจԽͷཱ֬Λࢧ ԉ͢ΔͱݴΘΕ͍ͯΔɻ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ %"# !$
!$
$*ɺΞϥʔτ͚ͩͰͳ͘ɺϏδωε্ͷ࣮ͳͲΛ νϟοτϘοτΛͬͯνϟοτج൫ʹྲྀ͠·͠ΐ͏ νϟοτͷͨΊͷج൫ͱνϟοτϘοτΛੵۃతʹ׆༻͢Δ CI
ใΛϓογϡܕͰఏࣔͯ͠ɺ ͓͖ͬͯ͘ใΛੵۃతʹΠϯϓοτ͢ΔͨΊͷΈΛඋ͑Δ ʹϝϯόʔͷ͍ͬͯΔใΛಉظͤ͞Δʣ νϟοτͷͨΊͷج൫ͱνϟοτϘοτΛੵۃతʹ׆༻͢Δ
ใΛϓογϡܕͰఏࣔͯ͠ɺ ͓͖ͬͯ͘ใΛੵۃతʹΠϯϓοτ͢ΔͨΊͷΈΛඋ͑Δ ʹϝϯόʔͷ͍ͬͯΔใΛಉظͤ͞Δʣ νϟοτͷͨΊͷج൫ͱνϟοτϘοτΛੵۃతʹ׆༻͢Δ ?
l ϝʔϧϓϧܕͷใऔಘ l ͔ࣗΒݟʹߦ͘ඞཁ͕͋Δ l શһ͕͓͖ͬͯ͘ใͷఏࣔʹ ͋·Γ ͍͍ͯͳ͍ ϝʔϧͰͩΊͰͳ͍͕ɺগ͠Ή͔͍ͣ͠ ඇಉظ
ίϛϡχέʔγϣϯ (ׂࠐ߹͍/ઐ༗߹͍͕͍) ಉظ ίϛϡχέʔγϣϯ (ׂࠐ߹͍/ઐ༗߹͍͕ߴ͍) E Slack Teams PagerDuty
l ใͷྲྀ௨ܗଶΛ͓͖ͯͬͯ͘͠ใΛͬͯ ͓͖͘ਓ͕ೝࣝͰ͖ΔΑ͏ʹ͢Δ l ࠓճͷࣄྫͷ߹ϓογϡܕͷ΄͏͕͍͍ͯΔ νϟοτͱνϟοτϘοτ·ͱΊ
จԽΛࢧ͑ΔͨΊͷςΫϊϩδʔ·ͱΊ M=>5(0 <G &7/55#372 45! )'2$ ")3 (7-7(0 <G,#1 -
# - #* # @FLJ8 (A; :OHN 6C9DPI) +.%7/5#8 (E?K9 B)
จԽΛࢧ͑ΔͨΊͷςΫϊϩδʔ·ͱΊ M=>5(0 <G &7/55#372 45! )'2$ ")3 (7-7(0 <G,#1 -
# - #* # @FLJ8 (A; :OHN 6C9DPI) +.%7/5#8 (E?K9 B)
େతΛୡ͢Δ֬ΛߴΊΔʹ %FWͱ0QTͷରཱΛղফ͢Δඞཁ͕͋Δ ରཱΛղফ͢ΔͨΊʹ ① ②
ڞ௨ͷత Ϗδωεͷޭͱརӹͷ֦େ Λ࣮ݱʹ͚ͯྗ͢Δʹɺ ݁ہͷͱ͜Ζਓͱਓ͕ԁʹڠྗ͠ձ͑ΔҙࣝΛ࣋ͭඞཁ͕͋Δ %FW0QTͱ৫จԽ
ڞ௨ͷత Ϗδωεͷޭͱརӹͷ֦େ Λ࣮ݱʹ͚ͯྗ͢Δʹɺ ݁ہͷͱ͜Ζਓͱਓ͕ԁʹڠྗ͠ձ͑ΔҙࣝΛ࣋ͭඞཁ͕͋Δ %FW0QTͱ৫จԽ " !$ #
!$ &"$ %
৫͕εέʔϧͯ͠ಉ͡తʹ͔ͬͯ ڠྗ͋͑͠ΔΑ͏ʹ͢Δʹʁ
ݪయͰड़ΒΕ͍ͯΔͷҎԼͷ̐ͭ %FW0QTΛҡ͍࣋ͯͨ͘͠ΊʹඞཁͳจԽ
ݪయͰड़ΒΕ͍ͯΔͷҎԼͷ̐ͭ %FW0QTΛҡ͍࣋ͯͨ͘͠ΊʹඞཁͳจԽ
%FW0QTΛҡ͍࣋ͯͨ͘͠ΊʹඞཁͳจԽ
ઌೖ؍Λ࣋ͨͳ͍ ଞऀͷઐࣝɾҙݟɾΛଚॏ͢Δ ϊʔͱ͍͏͚ͩͷ͜ͱ͠ͳ͍ Ӆ͠ࣄ͠ͳ͍ ґཔ͢ΔલʹΔ͜ͱɾߟ͑Δ͜ͱΛͪΌΜͱΔ
૬ޓͷϦεϖΫτ
l ͋ͷਓ͍ͭYYYͳͷͰZZZ͠Α͏/( l ࣌ؒܦաʹ͍ਓͷதมΘΔ͠ঢ়گมΘΔ l ؆୯Ͱྑ͍ͷͰ͖ͪΜͱ֬ೝ͢Δ l ಉ͡ࣄฑͰঢ়گλΠϛϯάʹΑͬͯճมΘΔՄೳੑ͕ ͋ΔͷͰ؆୯ʹͰྑ͍ͷͰ֬ೝ͠·͠ΐ͏ ͦͷͨΊͷίϛϡχέʔγϣϯج൫ͱͯ͠4MBDL
+*3"$POGMVFODF͕උ͞Ε͍ͯΔ ઌೖ؍Λ࣋ͨͳ͍
l શͯʹ͓͍͕ͯࣗউ͍ͬͯΔͳΜͯ͜ͱͳ͍ l ઐྖҬ͕ҟͳΔ͠ɺ๊͍͑ͯΔϛογϣϯҟͳΔͷͰई ͕ͦͦҧ͏ l ଞਓҟͳΔࢹඞ͍ͣ࣋ͬͯΔͷͰҙݟଚॏ͢Δ ଞऀͷઐࣝɾҙݟɾΛଚॏ͢Δ
l શͯʹ͓͍͕ͯࣗউ͍ͬͯΔͳΜͯ͜ͱͳ͍ l ઐྖҬ͕ҟͳΔ͠ɺ๊͍͑ͯΔϛογϣϯҟͳΔͷͰई ͕ͦͦҧ͏ l ଞਓҟͳΔࢹඞ͍ͣ࣋ͬͯΔͷͰҙݟଚॏ͢Δ ଞऀͷઐࣝɾҙݟɾΛଚॏ͢Δ
Why
l શͯʹ͓͍͕ͯࣗউ͍ͬͯΔͳΜͯ͜ͱͳ͍ l ઐྖҬ͕ҟͳΔ͠ɺ๊͍͑ͯΔϛογϣϯҟͳΔͷͰई ͕ͦͦҧ͏ l ଞਓҟͳΔࢹඞ͍ͣ࣋ͬͯΔͷͰҙݟଚॏ͢Δ ଞऀͷઐࣝɾҙݟɾΛଚॏ͢Δ (!1)/.'%
Why& ,- #+*0 $" $
ޓ͍ͷґཔ༰ʹ͍ͭͯϊʔͱ͑Δͱ͖ͷྀࣄ߲ l ڋ൱͢Δࡍʹཧ༝Λࣔ͢ l ͲΜͳཧ༝Ͱ͋Εڋ൱ͷࠜڌΛࣔ͢ l Ͳ͏͢Εڐ༰Ͱ͖Δͷ͔Λࣔ͢ l Ͳ͏͢ΕґཔʹԠ͑Δ͜ͱ͕Ͱ͖Δͷ͔ج४Λࣔ͢ l
ґཔʹର͢Δ8IZΛ۷ΓԼ͛Δ͜ͱ l 8IZ͔Β۷ΓԼ͛Δ͜ͱͰผͷํ๏͕ఏҊͰ͖Δ͔͠Εͳ͍ ϊʔͱ͍͏͚ͩͷ͜ͱ͠ͳ͍
ޓ͍ͷґཔ༰ʹ͍ͭͯϊʔͱ͑Δͱ͖ͷྀࣄ߲ l ڋ൱͢Δࡍʹཧ༝Λࣔ͢ l ͲΜͳཧ༝Ͱ͋Εڋ൱ͷࠜڌΛࣔ͢ l Ͳ͏͢Εڐ༰Ͱ͖Δͷ͔Λࣔ͢ l Ͳ͏͢ΕґཔʹԠ͑Δ͜ͱ͕Ͱ͖Δͷ͔ج४Λࣔ͢ l
ґཔʹର͢Δ8IZΛ۷ΓԼ͛Δ͜ͱ l 8IZ͔Β۷ΓԼ͛Δ͜ͱͰผͷํ๏͕ఏҊͰ͖Δ͔͠Εͳ͍ ϊʔͱ͍͏͚ͩͷ͜ͱ͠ͳ͍
ۀ্ͷࠜڌͳ͘ใΛӅณ͠ͳ͍ l Ͳ͏ͤόϨΔɻόϨͨͱ͖ʹࣦΘΕΔ৴པΛߟ͑Δͱ ͡Ί͔Βެ։͓͍ͯͨ͠΄͏͕ྑ͍ l հͳ΄Ͳੵۃతʹ͑Δ͜ͱ l Ұॹʹղܾ͢ΔͨΊͷखஈΛߟ͑Δ Ӆ͠ࣄ͠ͳ͍
ۀ্ͷࠜڌͳ͘ใΛӅณ͠ͳ͍ l Ͳ͏ͤόϨΔɻόϨͨͱ͖ʹࣦΘΕΔ৴པΛߟ͑Δͱ ͡Ί͔Βެ։͓͍ͯͨ͠΄͏͕ྑ͍ l հͳ΄Ͳੵۃతʹ͑Δ͜ͱ l Ұॹʹղܾ͢ΔͨΊͷखஈΛߟ͑Δ Ӆ͠ࣄ͠ͳ͍
!$"#&14 +'0#/ (,*%. #/32 -)
l ݸผʹย͚ΒΕΔ͜ͱย্͚ͨͰґཔ͢Δ l ґཔ͢Δࡍʹ͓ͬͯ͘͜ͱɾཧ͢Δ͜ͱ ԿΛมߋ͢Δ͔ มߋ͢ΔࡍͷϦεΫ มߋͷޭɾࣦഊͷஅج४ͱ݁Ռͷ௨ํ๏
ࣦഊ࣌ͷରԠํ ґཔ͢ΔલʹΔ͜ͱɾߟ͑Δ͜ͱΛͪΌΜͱΔ
l ݸผʹย͚ΒΕΔ͜ͱย্͚ͨͰґཔ͢Δ l ґཔ͢Δࡍʹ͓ͬͯ͘͜ͱɾཧ͢Δ͜ͱ ԿΛมߋ͢Δ͔ มߋ͢ΔࡍͷϦεΫ มߋͷޭɾࣦഊͷஅج४ͱ݁Ռͷ௨ํ๏
ࣦഊ࣌ͷରԠํ ґཔ͢ΔલʹΔ͜ͱɾߟ͑Δ͜ͱΛͪΌΜͱΔ 1, 2 ( Welcome) 3, 4
%FW0QTΛҡ͍࣋ͯͨ͘͠ΊʹඞཁͳจԽ
৴པؔΛཱ֬Ͱ͖ͯͳ͍ঢ়ଶͰ݈શͳؔ࡞Εͳ͍ ૬ޓͷ৴པ
৴པؔΛཱ֬Ͱ͖ͯͳ͍ঢ়ଶͰ݈શͳؔ࡞Εͳ͍ ૬ޓͷ৴པ ) ) D ) (
0QT৽ػೳʹ͍ͭͯٞ͢Δࡍ%FWΛ৴པ͢Δ͜ͱ %FWΠϯϑϥߏͷมߋʹ͍ͭͯ0QTΛ৴པ͢Δ͜ͱ ޓ͍ʹಁ໌ੑΛҎͯۀΛਪਐ͢Δ͜ͱ ޓ͍ʹ࠷େݶͷΞΫηεݖݶΛ͠߹͏͜ͱ ૬ޓͷ৴པΛங্͘Ͱॏཁͳ͜ͱ ( ( D ) (
( O
%FW0QTΛҡ͍࣋ͯͨ͘͠ΊʹඞཁͳจԽ
l ࣦഊඞͣى͖Δzͷͩͱ͍͏ҙࣝΛ࣋ͭ͜ͱ l ࣦഊΛճආ͢Δ͜ͱΛߟ͑ଓ͚͍ͯΔݶΓɺࣦഊʹରԠ ͢Δೳྗ্͠ͳ͍ ࣦഊʹରͯ͠ͷ݈શͳଶ
l ࣦഊඞͣى͖Δzͷͩͱ͍͏ҙࣝΛ࣋ͭ͜ͱ l ࣦഊͷ֬ΛԼ͛ΔͨΊʹzܦࡁతɾతʹ߹ཧతͳൣғz ͰΈΛΈ্͛Δ͜ͱͪΖΜඞཁ l ࣦഊΛճආ͢Δ͜ͱΛߟ͑ଓ͚͍ͯΔݶΓɺࣦഊʹରԠ ͢Δೳྗ্͠ͳ͍ ࣦഊʹରͯ͠ͷ݈શͳଶ
l ࣦഊඞͣى͖Δzͷͩͱ͍͏ҙࣝΛ࣋ͭ͜ͱ l ࣦഊͷ֬ΛԼ͛ΔͨΊʹzܦࡁతɾతʹ߹ཧతͳൣғz ͰΈΛΈ্͛Δ͜ͱͪΖΜඞཁ l ࣦഊΛճආ͢Δ͜ͱΛߟ͑ଓ͚͍ͯΔݶΓɺࣦഊʹରԠ ͢Δೳྗ্͠ͳ͍ l ࣦഊ͕ى͖ͯӨڹ͕ى͖ͳ͍Έ
PS ਝʹ෮چͰ͖ΔΈΛ४උ͓ͯ͘͜͠ͱ ࣦഊʹରͯ͠ͷ݈શͳଶ
l ࣦഊඞͣى͖Δzͷͩͱ͍͏ҙࣝΛ࣋ͭ͜ͱ l ࣦഊͷ֬ΛԼ͛ΔͨΊʹzܦࡁతɾతʹ߹ཧతͳൣғz ͰΈΛΈ্͛Δ͜ͱͪΖΜඞཁ l ࣦഊΛճආ͢Δ͜ͱΛߟ͑ଓ͚͍ͯΔݶΓɺࣦഊʹରԠ ͢Δೳྗ্͠ͳ͍ l ࣦഊ͕ى͖ͯӨڹ͕ى͖ͳ͍Έ
PS ਝʹ෮چͰ͖ΔΈΛ४උ͓ͯ͘͜͠ͱ ࣦഊʹରͯ͠ͷ݈શͳଶ ( ( )
ݪయͰड़ΒΕ͍ͯΔͷҎԼͷ̐ͭ %FW0QTΛҡ͍࣋ͯͨ͘͠ΊʹඞཁͳจԽ
l ͕ൃੜͨ͠ͱ͖ʹݪҼΛಛఆͷਓͷࢿ࣭ʹٻΊͳ͍ l Կ͠ͳ͍͜ͱ͕࠷େͷՌʹͳͬͯ͠·͏ l ҤॖޮՌͰͦͷਓͷύϑΥʔϚϯεΛԼͤ͞Δ l ͕ࣦࣗഊͨ͠ͱ͖ʹͶฦͬͯ͘Δ ݸਓඇͷېࢭ
l ͕ൃੜͨ͠ͱ͖ʹݪҼΛಛఆͷਓͷࢿ࣭ʹٻΊͳ͍ l Կ͠ͳ͍͜ͱ͕࠷େͷՌʹͳͬͯ͠·͏ l ҤॖޮՌͰͦͷਓͷύϑΥʔϚϯεΛԼͤ͞Δ l ͕ࣦࣗഊͨ͠ͱ͖ʹͶฦͬͯ͘Δ ݸਓඇͷېࢭ "
৫ͷେత $4$-ߩݙϏδωεͷޭͱརӹͷ֦େ Λ࣮ݱ͢Δ ֬Λ্͛ΔͨΊʹҎԼͷ̐ͭΛ࣮ݱ͍ͨ͠ దͳ৫จԽͷཱ֬ͱҡ࣋·ͱΊ . .8 "( #
%$ 76/* 43 -,4& 01 )!52 +'
© 2020, Recruit Technologies Co., Ltd. All rights reserved. ΫϥυΞʔΩςΫτ(
౻ݪ ྋഅ %FW0QTಋೖࢦೆ ʙٕज़ฤʙ
େతΛୡ͢Δ֬ΛߴΊΔʹ %FWͱ0QTͷରཱΛղফ͢Δඞཁ͕͋Δ ରཱΛղফ͢ΔͨΊʹ ࠶ܝ ① ②
େ͖͚ͯͭ͘ͷςΫϊϩδʔ͕%FW0QTจԽͷཱ֬Λࢧ ԉ͢ΔͱݴΘΕ͍ͯΔɻ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ %"# !$
!$
҉తʹΓࠐ·Ε֤ͨϩʔϧͷͷҧ͍ʹىҼ ͳͥରཱ͕ى͜Δͷ͔ DevK3 ?BIL2 & %!5-. 6@2 OpsK3 !#(9:H/;D
& %!5-M8N 6@O< N A GE4 !"',+)*$JC & & %!=10F>7
େ͖͚ͯͭ͘ͷςΫϊϩδʔ͕%FW0QTจԽͷཱ֬Λࢧ ԉ͢ΔͱݴΘΕ͍ͯΔɻ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ %"# !$
!$
Ҏ߱ͰࠊΛਾ͔͑ͯͬ͠Γઆ໌ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ
ൺֱతγϯϓϧͳͷͭ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ %"# !$
!$
ൺֱతγϯϓϧͳͷͭ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ
ൺֱతγϯϓϧͳͷͭ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ
ൺֱతγϯϓϧͳͷͭ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ
ൺֱతγϯϓϧͳͷͭ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ
͍ͣΕ҆શʹมߋΛߦ͏ͨΊͷΈ ·ͨ҆શʹࣦഊ͢ΔͨΊͷΈ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ
͍ͣΕ҆શʹมߋΛߦ͏ͨΊͷΈ ·ͨ҆શʹࣦഊ͢ΔͨΊͷΈ %FW0QTจԽͷཱ֬Λࢧԉ͢ΔςΫϊϩδʔ
҆શʹมߋΛߦ͏ʹʁ ) ( = )
҆શʹมߋΛߦ͏ʹʁ ) ( = )
l ςετۦಈ։ൃ l ܧଓతΠϯςάϨʔγϣϯ l ܧଓతσϓϩΠɾσϦόϦʔ l ϩʔϦϯάσϓϩΠ l ϒϧʔάϦʔϯσϓϩΠ
l ΧφϦΞσϓϩΠ ଞʹ༷ʑͳख๏͋Γ ςετ༰қੑͱσϓϩΠ༰қੑΛߴΊΔͨΊͷखஈ
҆શʹมߋΛߦ͏ʹʁ ) ( = )
l ςετۦಈ։ൃ l ܧଓతΠϯςάϨʔγϣϯ $POUJOVPVT*OUFHSBUJPO$* ᶃ ҙਤͨ͠ͱ͓Γʹಈ࡞͢Δ͜ͱΛ֬ೝ͢Δखஈ
l ςετۦಈ։ൃ l ܧଓతΠϯςάϨʔγϣϯ $POUJOVPVT*OUFHSBUJPO$* ᶃ ҙਤͨ͠ͱ͓Γʹಈ࡞͢Δ͜ͱΛ֬ೝ͢Δखஈ
l ςετۦಈ։ൃ l ܧଓతΠϯςάϨʔγϣϯ $POUJOVPVT*OUFHSBUJPO$* ᶃ ҙਤͨ͠ͱ͓Γʹಈ࡞͢Δ͜ͱΛ֬ೝ͢Δखஈ @t_wada
ܧଓతΠϯςάϨʔγϣϯ
ίʔυϦϙδτϦίϛοτ͞Εͨίʔυʹରͯ͠ҎԼΛߦ͏͜ͱ ᶃ ࣗಈϏϧυ ᶄ ࣗಈςετ ܧଓతΠϯςάϨʔγϣϯ -/ / - -/
/ .
ίʔυϦϙδτϦίϛοτ͞Εͨίʔυʹରͯ͠ҎԼΛߦ͏͜ͱ ᶃ ࣗಈϏϧυ ᶄ ࣗಈςετ ܧଓతΠϯςάϨʔγϣϯ . - - .
-. - - / - :
ᶃ શһ͕ಉ͡खॱͰϏϧυͱςετΛ܁Γฦ͠ߦ͑ΔΑ͏ʹ͢ΔͨΊ ܧଓతΠϯςάϨʔγϣϯ͕ඞཁͳཧ༝
ᶃ શһ͕ಉ͡खॱͰϏϧυͱςετΛ܁Γฦ͠ߦ͑ΔΑ͏ʹ͢ΔͨΊ ܧଓతΠϯςάϨʔγϣϯ͕ඞཁͳཧ༝
ᶃ શһ͕ಉ͡खॱͰϏϧυͱςετΛ܁Γฦ͠ߦ͑ΔΑ͏ʹ͢ΔͨΊ ᶄ ςετ͕ՄೳͳݶΓຊ൪ڥʹ͍ۙڥͰߦΘΕΔΑ͏ʹ͢Δ ܧଓతΠϯςάϨʔγϣϯ͕ඞཁͳཧ༝
ᶃ શһ͕ಉ͡खॱͰϏϧυͱςετΛ܁Γฦ͠ߦ͑ΔΑ͏ʹ͢ΔͨΊ ᶄ ςετ͕ՄೳͳݶΓຊ൪ڥʹ͍ۙڥͰߦΘΕΔΑ͏ʹ͢Δ ܧଓతΠϯςάϨʔγϣϯ͕ඞཁͳཧ༝ !
ᶃ શһ͕ಉ͡खॱͰϏϧυͱςετΛ܁Γฦ͠ߦ͑ΔΑ͏ʹ͢ΔͨΊ ᶄ ςετ͕ՄೳͳݶΓຊ൪ڥʹ͍ۙڥͰߦΘΕΔΑ͏ʹ͢Δ ᶅ ߴ͍සͰςετΛߦ͏ ܧଓతΠϯςάϨʔγϣϯ͕ඞཁͳཧ༝ !
ෆ۩߹͕ࠞೖ͔ͯ͠Βͷ࣌ؒܦա͕ ͘ͳΔ΄ͲରԠίετ૿େ͢ΔͨΊ ߴ͍සͰςετΛߦ͏ඞཁੑ
ෆ۩߹͕ࠞೖ͔ͯ͠Βͷ࣌ؒܦա͕ ͘ͳΔ΄ͲରԠίετ૿େ͢ΔͨΊ ߴ͍සͰςετΛߦ͏ඞཁੑ
$*Λࢧ͑Δ۩ମతͳπʔϧྫͱྨ CI GNU make
go test python -m unittest *
$*Λࢧ͑Δ۩ମతͳπʔϧྫͱྨ CI GNU make
go test python -m unittest *
$*Λࢧ͑Δ۩ମతͳπʔϧྫͱྨ CI GNU make
go test python -m unittest *
$*Λࢧ͑Δ۩ମతͳπʔϧྫͱྨ CI GNU make
go test python -m unittest *
ᶃ Ϗϧυͱςετ͕҆ఆ͠ͳ͍ ᶄ Ϗϧυͱςετͷ࣮ߦ͕͍ ࣮ߦ͕͍࣌ؒ $*ͰΑ͋͘Δ
աڈͷϏϧυʹ͓͚Δ෭ੜɾ෭࡞༻ʹΑͬͯςετ͕҆ఆ͠ͳ͍ ҙਤͤͣʹͬͨதؒϑΝΠϧ%#ͷঢ়ଶͳͲʹىҼ ᶃ Ϗϧυͱςετ͕҆ఆ͠ͳ͍
աڈͷϏϧυʹ͓͚Δ෭ੜɾ෭࡞༻ʹΑͬͯςετ͕҆ఆ͠ͳ͍ ҙਤͤͣʹͬͨதؒϑΝΠϧ%#ͷঢ়ଶͳͲʹىҼ ᶃ Ϗϧυͱςετ͕҆ఆ͠ͳ͍
աڈͷϏϧυʹ͓͚Δ෭ੜɾ෭࡞༻ʹΑͬͯςετ͕҆ఆ͠ͳ͍ ҙਤͤͣʹͬͨதؒϑΝΠϧ%#ͷঢ়ଶͳͲʹىҼ ᶃ Ϗϧυͱςετ͕҆ఆ͠ͳ͍ CIDocker
DB docker-compose
ςεταΠζͷ֓೦Λͬͯޮతʹςετ͢Δ l ςετ͕ࣦഊ͢Δׂ͘Β͍ͭ·Βͳ͍ݪҼ l -JOUωοτϫʔΫ௨৴ͷൃੜ͠ͳ͍ߴͳςετͰચ͍ग़ͤΔ ᶄ Ϗϧυͱςετͷ࣮ߦ͕͍࣌ؒ 3 3 +9
)3 6 9 ( 3 3 3 3 0 3 3 3 6 3 39 3 3 3 3 3 3 39 6 3 3 ) 6 3 3 3 3 + 33 393 3 3 + 39 3 63 3 3 693 696 3 https://testing.googleblog.com/2010/12/test-sizes.html
ͳΔ͘ૣ͍λΠϛϯάͰࣦഊͤ͞ ϑΟʔυόοΫαΠΫϧΛߴͰճͤΔΑ͏ʹ͢Δ ςεταΠζͷ֓೦ʹ߹Θͤͨ$*ύΠϓϥΠϯ࣮ྫ 3 & & & & 8 3
8 3 & 8 & 1 2 3 & 1 2
ϏϧυࣗମΛߴԽ͢Δ ᶄ Ϗϧυͱςετͷ࣮ߦ͕͍࣌ؒ https://speakerdeck.com/orisano/docker-build-battle https://speakerdeck.com/orisano/better-docker-image https://speakerdeck.com/orisano/docker-build-battle https://www.slideshare.net/AkihiroSuda/cndt-docker
ϏϧυࣗମΛߴԽ͢Δ ᶄ Ϗϧυͱςετͷ࣮ߦ͕͍࣌ؒ https://speakerdeck.com/orisano/docker-build-battle https://speakerdeck.com/orisano/better-docker-image https://speakerdeck.com/orisano/docker-build-battle https://www.slideshare.net/AkihiroSuda/cndt-docker
ᶃ Ϗϧυͱςετ͕҆ఆ͠ͳ͍ l ରࡦϏϧυ͓ΑͼςετຖͷಠཱੑΛߴΊɺڥґଘੑΛԼ͛Δ ᶄ ςετͷ࣮ߦ͕͍࣌ؒ l ରࡦςεταΠζͷ֓೦ΛͬͯͳΔ͘ૣ͍ஈ֊Ͱࣦഊͤ͞Δ l ରࡦϏϧυࣗମΛߴԽ͢Δ
$*ͰΑ͋͘ΔͱରԠͷߟ͑ํ
҆શʹมߋΛߦ͏ʹʁ ) ( = )
҆શʹϦϦʔε͢Δͱʁ ᶄ҆શʹػೳΛϦϦʔε͢ΔͨΊͷखஈ !
҆શʹϦϦʔε͢Δͱʁ ᶄ҆શʹػೳΛϦϦʔε͢ΔͨΊͷखஈ !
)( ( ) , ) ;
҆શʹϦϦʔε͢Δͱʁ ᶄ҆શʹػೳΛϦϦʔε͢ΔͨΊͷखஈ !
)( ( ) , ) ;
ίʔυมߋʹͱͳͬͯ ࣗಈతʹ࣮ՔಇڥͷϦϦʔε४උ͕࣮ߦ͞ΕΔ͜ͱ l ܧଓతσϦόϦ l ϦϦʔεʹࡍͯ͠ঝೝϓϩηεΛڬΉ l ܧଓతσϓϩΠ l ϦϦʔε·Ͱͯࣗ͢ಈͰߦΘΕΔ
ܧଓతσϦόϦɾσϓϩΠͱ -/ / - -/ / .
ͳͥܧଓతσϦόϦɾσϓϩΠ͕ඞཁ͔
खಈ࡞ۀͱσϓϩΠΛίʔυԽͨ͠߹Λൺֱ +
खಈ࡞ۀͱσϓϩΠΛίʔυԽͨ͠߹Λൺֱ +
खಈ࡞ۀͱσϓϩΠΛίʔυԽͨ͠߹Λൺֱ +
खಈ࡞ۀͱσϓϩΠΛίʔυԽͨ͠߹Λൺֱ +
खಈ࡞ۀͱσϓϩΠΛίʔυԽͨ͠߹Λൺֱ +
σϓϩΠͷίʔυԽʹࡍͯ͠ߟ͑Δ͜ͱ
σϓϩΠͷίʔυԽʹࡍͯ͠ߟ͑Δ͜ͱ
σϓϩΠͷίʔυԽʹࡍͯ͠ߟ͑Δ͜ͱ 0 ' # . 2
% & / " (0 1 ≒ * !+) ') ,$-(
σϓϩΠͷίʔυԽʹࡍͯ͠ߟ͑Δ͜ͱ 7% . * 5 9
, # " # " - 6! $' (7%8 ≒ 1 &2) .0 3+4/ () 6!
l ༏ઌॱҐΛ্͚ͭͨͰࣗಈԽ͢Δ l ස Y࡞ۀͷεςοϓ Ͱ༏ઌΛஅ ܧଓతσϦόϦɾσϓϩΠ
҆શʹϦϦʔε͢Δͱʁ ᶄ҆શʹػೳΛϦϦʔε͢ΔͨΊͷखஈ !
)( ( ) , ) ;
l ϩʔϦϯάσϓϩΠ l ϒϧʔάϦʔϯσϓϩΠ ΠϛϡʔλϒϧσϓϩΠ l ΧφϦΞϦϦʔε ͜͜Ͱղઆ͢ΔσϓϩΠɾϦϦʔεख๏
ଟ͋ΔԽ͞ΕͨίϯϙʔωϯτΛঃʑʹೖΕସ͑Δख๏ ϩʔϦϯάσϓϩΠ APP ver.1.0 APP ver.1.0 APP ver.1.0 APP ver.1.0
Loadbalancer Database
ଟ͋ΔԽ͞ΕͨίϯϙʔωϯτΛঃʑʹೖΕସ͑Δख๏ ϩʔϦϯάσϓϩΠ APP ver.1.1 APP ver.1.0 APP ver.1.0 APP ver.1.0
Loadbalancer Database
ଟ͋ΔԽ͞ΕͨίϯϙʔωϯτΛঃʑʹೖΕସ͑Δख๏ ϩʔϦϯάσϓϩΠ APP ver.1.1 APP ver.1.1 APP ver.1.0 APP ver.1.0
Loadbalancer Database
ଟ͋ΔԽ͞ΕͨίϯϙʔωϯτΛঃʑʹೖΕସ͑Δख๏ ϩʔϦϯάσϓϩΠ APP ver.1.1 APP ver.1.1 APP ver.1.1 APP ver.1.0
Loadbalancer Database
ଟ͋ΔԽ͞ΕͨίϯϙʔωϯτΛঃʑʹೖΕସ͑Δख๏ ϩʔϦϯάσϓϩΠ APP ver.1.1 APP ver.1.1 APP ver.1.1 APP ver.1.1
Loadbalancer Database
ᶃ ೖସͷྀ ᶄ σʔλͷόʔδϣϯؒޓੑ ͷྀ ϩʔϦϯάσϓϩΠͷҙ APP ver.1.1 APP ver.1.0
APP ver.1.0 APP ver.1.0 Loadbalancer Database APP ver.1.1 APP ver.1.1 APP ver.1.0 APP ver.1.0 Loadbalancer Database interval APP ver.1.1 APP ver.1.1 APP ver.1.0 APP ver.1.0 Loadbalancer Database ,'! ! * " (* 0&%- .$) # / !+
໘Λͭ ϒϧʔάϦʔϯ ༻ҙ͠ɺΓସ͑Δ ϒϧʔɾάϦʔϯσϓϩΠ ΠϛϡʔλϒϧσϓϩΠ APP ver.1.0 APP ver.1.0 APP
ver.1.0 APP ver.1.0 Loadbalancer Database
໘Λͭ ϒϧʔάϦʔϯ ༻ҙ͠ɺΓସ͑Δ ϒϧʔɾάϦʔϯσϓϩΠ ΠϛϡʔλϒϧσϓϩΠ APP ver.1.1 APP ver.1.1 APP
ver.1.0 APP ver.1.0 Loadbalancer Database
໘Λͭ ϒϧʔάϦʔϯ ༻ҙ͠ɺΓସ͑Δ ϒϧʔɾάϦʔϯσϓϩΠ ΠϛϡʔλϒϧσϓϩΠ APP ver.1.1 APP ver.1.1 APP
ver.1.0 APP ver.1.0 Loadbalancer Database
໘Λͭ ϒϧʔάϦʔϯ ༻ҙ͠ɺΓସ͑Δ ϒϧʔɾάϦʔϯσϓϩΠ ΠϛϡʔλϒϧσϓϩΠ APP ver.1.1 APP ver.1.1 Loadbalancer
Database " % $ #!
ᶃ Ϧιʔείετ l ڥΛ໘ҡ࣋͢Δίετ l ػϦιʔείετ͕ؾʹͳΔ߹ ΠϛϡʔλϒϧσϓϩΠΛݕ౼ ᶄ ସϙΠϯτ l
ޙड़ ϒϧʔɾάϦʔϯσϓϩΠͷߟྀࣄ߲
τϥϑΟοΫΛίϯτϩʔϧ͢ΔϙΠϯτ͕ଟଘࡏ͢Δ ϒϧʔɾάϦʔϯσϓϩΠͷߟྀࣄ߲ ସϙΠϯτ CDN Loadbalancer Web AP DNS
τϥϑΟοΫΛίϯτϩʔϧ͢ΔϙΠϯτ͕ଟଘࡏ͢Δ ϒϧʔɾάϦʔϯσϓϩΠͷߟྀࣄ߲ ସϙΠϯτ CDN Loadbalancer Web AP DNS
τϥϑΟοΫΛίϯτϩʔϧ͢ΔϙΠϯτ͕ଟଘࡏ͢Δ ϒϧʔɾάϦʔϯσϓϩΠͷߟྀࣄ߲ ସϙΠϯτ CDN Loadbalancer Web AP DNS Loadbalancer
Web AP
τϥϑΟοΫΛίϯτϩʔϧ͢ΔϙΠϯτ͕ଟଘࡏ͢Δ ϒϧʔɾάϦʔϯσϓϩΠͷߟྀࣄ߲ ସϙΠϯτ CDN Loadbalancer Web AP DNS Web
AP
τϥϑΟοΫΛίϯτϩʔϧ͢ΔϙΠϯτ͕ଟଘࡏ͢Δ ϒϧʔɾάϦʔϯσϓϩΠͷߟྀࣄ߲ ସϙΠϯτ CDN Loadbalancer Web AP DNS AP
τϥϑΟοΫΛίϯτϩʔϧ͢ΔϙΠϯτ͕ଟଘࡏ͢Δ ϒϧʔɾάϦʔϯσϓϩΠͷߟྀࣄ߲ ସϙΠϯτ CDN Loadbalancer Web AP DNS
ঃʑʹ৽͍͠όʔδϣϯʹτϥϑΟοΫΛྲྀͯ͠ ΤϥʔͷมಈͳͲΛݟͭͭɺ҆શʹϦϦʔε͢Δख๏ ΧφϦΞϦϦʔε APP ver.1.0 APP ver.1.0 APP ver.0.9 APP
ver.0.9 Loadbalancer Database 100%
ঃʑʹ৽͍͠όʔδϣϯʹτϥϑΟοΫΛྲྀͯ͠ ΤϥʔͷมಈͳͲΛݟͭͭɺ҆શʹϦϦʔε͢Δख๏ ΧφϦΞϦϦʔε APP ver.1.0 APP ver.1.0 APP ver.1.1 APP
ver.1.1 Loadbalancer Database 100%
ঃʑʹ৽͍͠όʔδϣϯʹτϥϑΟοΫΛྲྀͯ͠ ΤϥʔͷมಈͳͲΛݟͭͭɺ҆શʹϦϦʔε͢Δख๏ ΧφϦΞϦϦʔε APP ver.1.0 APP ver.1.0 APP ver.1.1 APP
ver.1.1 Loadbalancer Database 75% 25%
ঃʑʹ৽͍͠όʔδϣϯʹτϥϑΟοΫΛྲྀͯ͠ ΤϥʔͷมಈͳͲΛݟͭͭɺ҆શʹϦϦʔε͢Δख๏ ΧφϦΞϦϦʔε APP ver.1.0 APP ver.1.0 APP ver.1.1 APP
ver.1.1 Loadbalancer Database 50% 50%
ঃʑʹ৽͍͠όʔδϣϯʹτϥϑΟοΫΛྲྀͯ͠ ΤϥʔͷมಈͳͲΛݟͭͭɺ҆શʹϦϦʔε͢Δख๏ ΧφϦΞϦϦʔε APP ver.1.0 APP ver.1.0 APP ver.1.1 APP
ver.1.1 Loadbalancer Database 25% 75%
ঃʑʹ৽͍͠όʔδϣϯʹτϥϑΟοΫΛྲྀͯ͠ ΤϥʔͷมಈͳͲΛݟͭͭɺ҆શʹϦϦʔε͢Δख๏ ΧφϦΞϦϦʔε APP ver.1.0 APP ver.1.0 APP ver.1.1 APP
ver.1.1 Loadbalancer Database 100%
l (P4UPQج४ͷ໌֬Խ l ߴ࣭ͳࢹɾϞχλϦϯάج൫ඞਢ 6*69ɺγεςϜ؍྆໘ ΧφϦΞϦϦʔεͷߟྀࣄ߲
҆શͳσϓϩΠɾϦϦʔεͷͨΊͷख๏ͱͯ͠ҎԼΛղઆͨ͠ l ϩʔϦϯάσϓϩΠ l ϒϧʔάϦʔϯσϓϩΠ ΠϛϡʔλϒϧσϓϩΠ l ΧφϦΞϦϦʔε σϓϩΠɾϦϦʔεख๏·ͱΊ
҆શͳσϓϩΠɾϦϦʔεͷͨΊͷख๏ͱͯ͠ҎԼΛղઆͨ͠ l ϩʔϦϯάσϓϩΠ l ϒϧʔάϦʔϯσϓϩΠ ΠϛϡʔλϒϧσϓϩΠ l ΧφϦΞϦϦʔε σϓϩΠɾϦϦʔεख๏·ͱΊ ଞʹ༷ʑͳख๏͕͋Γɺ
ࡉʑͱͨ͠ςΫχοΫଊ͑ํ͕͋ΔͷͰͦ͜ ʑࢼߦࡨޡ͠ͳ͕ΒֶΜͰ͍ͩ͘͞
Ͳ͏࣭ͬͯΛຏ͖ࠐΉ͔ ܧଓతσϓϩΠɾσϦόϦʔͷ՝
Ͳ͏࣭ͬͯΛຏ͖ࠐΉ͔ ܧଓతσϓϩΠɾσϦόϦʔͷ՝ ΞϓϦέʔγϣϯίʔυͱಉ༷ʹ ຏ͖ࠐΈ 㲈ࣦഊɾࢼߦࡨޡ ͕ڐ͞ΕΔڥΛ४උɾ׆༻͢Δ
Ͳ͏࣭ͬͯΛຏ͖ࠐΉ͔ ܧଓతσϓϩΠɾσϦόϦʔͷ՝ ΞϓϦέʔγϣϯίʔυͱಉ༷ʹ ຏ͖ࠐΈ 㲈ࣦഊɾࢼߦࡨޡ ͕ڐ͞ΕΔڥΛ४උɾ׆༻͢Δ ։ൃڥɾεςʔδϯάڥͷσϓϩΠຊ൪ͱಉ͡खॱͰߦ͏
ಉ͡खॱͰσϓϩΠ͢Δ σϓϩΠϓϩηεͷ౷Ұ ։ൃ εςʔδϯά ຊ൪
ڥࠩΛՄೳͳݶΓഉআ͢Δ σϓϩΠϓϩηεΛ౷Ұ͢Δ্ͰͷϙΠϯτ DNS e.g. Route53Private DNS
ڥࠩΛՄೳͳݶΓഉআ͢Δ σϓϩΠϓϩηεΛ౷Ұ͢Δ্ͰͷϙΠϯτ DNS e.g. Route53Private DNS
ڥࠩΛ༰қʹຒΊΒΕΔΑ͏ʹ ΞϓϦέʔγϣϯΛ࡞Δ ΞϓϦέʔγϣϯઃఆํ๏ Good Bad 1, #"$ ## 1,1,!+4& /)*.1,23*
*%-05 (' 1,! #
l ϓϩηεΛຏ͖ࠐΉͨΊͷΛ֬อ͢Δ l ຏ͖ࠐΈΛҙຯ͋Δͷʹ͢ΔͨΊ ڥؒͷࠩΛ࠷খʹอͭ ܧଓతσϓϩΠɾσϦόϦʔ՝ͷ·ͱΊ
%FW0QTΛ࣮ફͯ͠ҎԼΛ࣮ݱ͢ΔͨΊͷ֤छख๏Λղઆͨ͠ ·ͱΊ " !
%FW0QTΛ࣮ફͰ͖͍ͯΔاۀ WT
%FW0QTΛ࣮ફͰ͖͍ͯͳ͍اۀ %FW0QTΛ࣮ફͰ͖ͨ࣌ͷޮՌ & " $!% # DevOpsLean
'0:"1 26) '0:"1 $ %FW0QTΛ࣮ફͰ͖͍ͯΔاۀ WT %FW0QTΛ࣮ફͰ͖͍ͯͳ͍اۀ
%FW0QTΛ࣮ફͰ͖ͨ࣌ͷޮՌ & " $!% # DevOpsLean3'/&-5 ,*4 # 98 ( %. +!7
҉తʹΓࠐ·Ε֤ͨϩʔϧͷͷҧ͍ʹىҼ ͳͥରཱ͕ى͜Δͷ͔ DevK3 ?BIL2 & %!5-. 6@2 OpsK3 !#(9:H/;D
& %!5-M8N 6@O< N A GE4 !"',+)*$JC & & %!=10F>7
҉తʹΓࠐ·Ε֤ͨϩʔϧͷͷҧ͍ʹىҼ ͳͥରཱ͕ى͜Δͷ͔ DevK3 ?BIL2 & %!5-. 6@2 OpsK3 !#(9:H/;D
& %!5-M8N 6@O< N A GE4 !"',+)*$JC & & %!=10F>7 ϛογϣϯͷҧ͍Λཧղ্ͨ͠Ͱ ҆શʹมߋ͢ΔͨΊͷํ๏Λߟ͑ͯຏ͘ ͍·ͦͷͨΊͷಓ۩ຏͨ͘Ίͷख๏ͨ͘͞Μ͋Δ
ΧελϚʔΫϥΠΞϯτͷߩݙ ͱ͔ͦ͜ΒͨΒ͞ΕΔ Ϗδωεͷޭͱརӹͷ֦େ
ΧελϚʔΫϥΠΞϯτͷߩݙ ͱ͔ͦ͜ΒͨΒ͞ΕΔ Ϗδωεͷޭͱརӹͷ֦େ ͍͖ͬͯ
THE TWELVE-FACTOR APP
l ηοτΞοϓͷࣗಈԽͷͨΊʹએݴతͳϑΥʔϚοτΛ͍ɺ ϓϩδΣΫτʹ৽͘͠ՃΘͬͨ։ൃऀ͕ཁ͢Δ࣌ؒͱίετΛ࠷খԽ͢Δ l Լͷ04ͷґଘؔΛ໌֬Խ͠ɺ࣮ߦڥ͍͋ͩͰͷҠ২ੑΛ࠷େԽ͢Δ l ϞμϯͳΫϥυϓϥοτϑΥʔϜ্ͷσϓϩΠʹద͓ͯ͠Γɺ αʔόཧɺγεςϜཧΛෆཁͳͷʹ͢Δ l ։ൃڥͱຊ൪ڥͷࠩҟΛ࠷খݶʹ͠ɺΞδϦςΟΛ࠷େԽ͢ΔܧଓతσϓϩΠΛՄೳʹ͢Δ
l πʔϧɺΞʔΩςΫνϟɺ։ൃϓϥΫςΟεΛେ෯ʹมߋ͢Δ͜ͱͳ͘εέʔϧΞοϓͰ͖Δ 5)&58&-7&'"$503"11ͱ https://12factor.net/ja/
5IF5XFMWF'BDUPST *ίʔυϕʔε όʔδϣϯཧ͞Ε͍ͯΔͭͷίʔυϕʔεͱ ෳͷσϓϩΠ **ґଘؔ ґଘؔΛ໌ࣔతʹએݴ͢͠Δ ***ઃఆ ઃఆΛڥมʹ֨ೲ͢Δ *7όοΫΤϯυαʔϏε όοΫΤϯυαʔϏεΛΞλον͞ΕͨϦιʔε
ͱͯ͠ѻ͏ 7ϏϧυɾϦϦʔεɾ࣮ߦ ϏϧυɾϦϦʔεɾ࣮ߦͷͭͷεςʔδΛݫີ ʹ͢Δ 7*ϓϩηε ΞϓϦέʔγϣϯΛͭ͘͠ෳͷεςʔτ Ϩεͳϓϩηεͱ࣮ͯ͠ߦ 7**ϙʔτόΠϯσΟϯά ϙʔτόΠϯσΟϯάΛ௨ͯ͠αʔϏεΛެ։͢Δ 7***ฏߦੑ ϓϩηεϞσϧʹΑͬͯεέʔϧΞτ͢Δ *9ഇغ༰қੑ ߴͳىಈͱάϨʔεϑϧγϟοτμϯͰݎ࿚ੑΛ࠷ େԽ͢Δ 9։ൃຊ൪Ұக ։ൃɺεςʔδϯάɺຊ൪ڥΛͰ͖Δ͚ͩҰகͤͨ͞ ঢ়ଶΛอͭ 9*ϩά ϩάΛΠϕϯτετϦʔϜͱͯ͠ѻ͏ 9**ཧϓϩηε ཧλεΫΛճݶΓͷϓϩηεͱ࣮ͯ͠ߦ͢Δ
5IF5XFMWF'BDUPST *ίʔυϕʔε όʔδϣϯཧ͞Ε͍ͯΔͭͷίʔυϕʔεͱ ෳͷσϓϩΠ **ґଘؔ ґଘؔΛ໌ࣔతʹએݴ͢͠Δ ***ઃఆ ઃఆΛڥมʹ֨ೲ͢Δ *7όοΫΤϯυαʔϏε όοΫΤϯυαʔϏεΛΞλον͞ΕͨϦιʔε
ͱͯ͠ѻ͏ 7ϏϧυɾϦϦʔεɾ࣮ߦ ϏϧυɾϦϦʔεɾ࣮ߦͷͭͷεςʔδΛݫີ ʹ͢Δ 7*ϓϩηε ΞϓϦέʔγϣϯΛͭ͘͠ෳͷεςʔτ Ϩεͳϓϩηεͱ࣮ͯ͠ߦ 7**ϙʔτόΠϯσΟϯά ϙʔτόΠϯσΟϯάΛ௨ͯ͠αʔϏεΛެ։͢Δ 7***ฏߦੑ ϓϩηεϞσϧʹΑͬͯεέʔϧΞτ͢Δ *9ഇغ༰қੑ ߴͳىಈͱάϨʔεϑϧγϟοτμϯͰݎ࿚ੑΛ࠷ େԽ͢Δ 9։ൃຊ൪Ұக ։ൃɺεςʔδϯάɺຊ൪ڥΛͰ͖Δ͚ͩҰகͤͨ͞ ঢ়ଶΛอͭ 9*ϩά ϩάΛΠϕϯτετϦʔϜͱͯ͠ѻ͏ 9**ཧϓϩηε ཧλεΫΛճݶΓͷϓϩηεͱ࣮ͯ͠ߦ͢Δ Dev, Ops" !
5IF5XFMWF'BDUPST *ίʔυϕʔε όʔδϣϯཧ͞Ε͍ͯΔͭͷίʔυϕʔεͱ ෳͷσϓϩΠ **ґଘؔ ґଘؔΛ໌ࣔతʹએݴ͢͠Δ ***ઃఆ ઃఆΛڥมʹ֨ೲ͢Δ *7όοΫΤϯυαʔϏε όοΫΤϯυαʔϏεΛΞλον͞ΕͨϦιʔε
ͱͯ͠ѻ͏ 7ϏϧυɾϦϦʔεɾ࣮ߦ ϏϧυɾϦϦʔεɾ࣮ߦͷͭͷεςʔδΛݫີ ʹ͢Δ 7*ϓϩηε ΞϓϦέʔγϣϯΛͭ͘͠ෳͷεςʔτ Ϩεͳϓϩηεͱ࣮ͯ͠ߦ 7**ϙʔτόΠϯσΟϯά ϙʔτόΠϯσΟϯάΛ௨ͯ͠αʔϏεΛެ։͢Δ 7***ฏߦੑ ϓϩηεϞσϧʹΑͬͯεέʔϧΞτ͢Δ *9ഇغ༰қੑ ߴͳىಈͱάϨʔεϑϧγϟοτμϯͰݎ࿚ੑΛ࠷ େԽ͢Δ 9։ൃຊ൪Ұக ։ൃɺεςʔδϯάɺຊ൪ڥΛͰ͖Δ͚ͩҰகͤͨ͞ ঢ়ଶΛอͭ 9*ϩά ϩάΛΠϕϯτετϦʔϜͱͯ͠ѻ͏ 9**ཧϓϩηε ཧλεΫΛճݶΓͷϓϩηεͱ࣮ͯ͠ߦ͢Δ % &') Dev, Ops-, $# $# = !'"%( *+
ϦϙδτϦͰཧ͞Ε͍ͯͳ͍ίʔυσϓϩΠ͠ͳ͍ *ίʔυϕʔε
ϦϙδτϦͰཧ͞Ε͍ͯͳ͍ίʔυσϓϩΠ͠ͳ͍ ୯ҰͷϦϙδτϦ͔ΒϩʔΧϧɾ։ൃɾ εςʔδϯάɾຊ൪ʹσϓϩΠͰ͖ΔΑ͏ʹ͓ͯ͘͠ ڥ͝ͱʹར༻͍ͯ͠ΔϦϙδτϦ͕ҟͳΒͳ͍Α͏ʹ͢Δ *ίʔυϕʔε
ϦϙδτϦͰཧ͞Ε͍ͯͳ͍ίʔυσϓϩΠ͠ͳ͍ ୯ҰͷϦϙδτϦ͔ΒϩʔΧϧɾ։ൃɾ εςʔδϯάɾຊ൪ʹσϓϩΠͰ͖ΔΑ͏ʹ͓ͯ͘͠ ڥ͝ͱʹར༻͍ͯ͠ΔϦϙδτϦ͕ҟͳΒͳ͍Α͏ʹ͢Δ *ίʔυϕʔε %$.) " /( "!"',
( +"# vim0 "&- *1 = )
ΞϓϦέʔγϣϯΛಈ্͔͢Ͱ ඞཁͳཁૉͷґଘ͕ؔ໌ࣔతʹఆٛ͞Ε͍ͯΔ͜ͱ **ґଘؔ 3VCZ (FNˠ (FNGJMF /PEFKT ˠ QBDLBHFKTPO 1ZUIPO
1ZQJ ˠ SFRVJSFNFOUTUYU +BWB ˠ QPNYNM %PDLFS ˠ %PDLFSGJMF
ΞϓϦέʔγϣϯΛಈ্͔͢Ͱ ඞཁͳཁૉͷґଘ͕ؔ໌ࣔతʹఆٛ͞Ε͍ͯΔ͜ͱ **ґଘؔ 3VCZ (FNˠ (FNGJMF /PEFKT ˠ QBDLBHFKTPO 1ZUIPO
1ZQJ ˠ SFRVJSFNFOUTUYU +BWB ˠ QPNYNM %PDLFS ˠ %PDLFSGJMF ϩʔΧϧ։ൃͷࡍʹՃͷखॱ͕ൃੜ͢Δ߹ Կ͔͠ΒͷΛ๊͍͑ͯΔͱߟ͑ͨํ͕ྑ͍ ͪΖΜݴޠڥͷߏஙͦͷͷআ͘ FHNBWFOͰηοτΞοϓͨ͠ޙʹԿ͔Α͘Θ͔Βͳ͍KBSϑΝΠϧΛґଘؔʹೖΕΔͳͲ
ઃఆΛΞϓϦέʔγϣϯίʔυ͔ΒݫີʹͰ͖ΔΑ͏ʹ͢Δ ***ઃఆ
ઃఆΛΞϓϦέʔγϣϯίʔυ͔ΒݫີʹͰ͖ΔΑ͏ʹ͢Δ ***ઃఆ "(#!// ) )
N G ( ( G (
ΞϓϦέʔγϣϯ͕ΞΫηε͢ΔϦιʔεॴͳͲΛҙ ࣝ͢Δ͜ͱͳ͘ΞΫηεͰ͖ΔΑ͏ʹ͢Δ͜ͱ ΞϓϦέʔγϣϯίʔυΛมߋ͢Δ͜ͱͳ͘ɺ ଓઌͷϦιʔεΛมߋͰ͖ΔΑ͏ʹ͢Δ͜ͱ *7όοΫΤϯυαʔϏε
ϏϧυɾϦϦʔεɾ࣮ߦͷϓϩηεΛ໌֬ʹ͚Δ 7ϏϧυɾϦϦʔεɾ࣮ߦ ίʔυ ࣮ߦՄೳͳ όΠφϦ ઃఆ ϑΝΠϧ PSڥม ઃఆ
ϑΝΠϧ PSڥม ࣮ߦՄೳͳ όΠφϦ Ϗϧυ ϦϦʔε ࣮ߦ ෆ۩߹ݕ PS৽ػೳཁٻ ϦϑΝΫλϦϯά͋ΔΑ ίʔυमਖ਼ ɾՃ
ϏϧυɾϦϦʔεɾ࣮ߦͷϓϩηεΛ໌֬ʹ͚Δ 7ϏϧυɾϦϦʔεɾ࣮ߦ ίʔυ ࣮ߦՄೳͳ όΠφϦ ઃఆ ϑΝΠϧ PSڥม ઃఆ
ϑΝΠϧ PSڥม ࣮ߦՄೳͳ όΠφϦ Ϗϧυ ϦϦʔε ࣮ߦ ෆ۩߹ݕ PS৽ػೳཁٻ ϦϑΝΫλϦϯά͋ΔΑ ίʔυमਖ਼ ɾՃ -', (&.+ (%!"!#* ! !#* " )$ )
ΞϓϦέʔγϣϯΛ୯Ұɺ͘͠ ෳͷεςʔτϨεͳϓϩηεͱ࣮ͯ͠ߦ͢Δ 7*ϓϩηε
ΞϓϦέʔγϣϯΛ୯Ұɺ͘͠ ෳͷεςʔτϨεͳϓϩηεͱ࣮ͯ͠ߦ͢Δ 7*ϓϩηε
ΞϓϦέʔγϣϯΛ୯Ұɺ͘͠ ෳͷεςʔτϨεͳϓϩηεͱ࣮ͯ͠ߦ͢Δ 7*ϓϩηε ! (Redis, Memcached, RDB
)
ΞϓϦέʔγϣϯϓϩηεͦͷͷ͕ ϙʔτόΠϯσΟϯάΛ௨ͯ͡αʔϏεΛެ։͢Δ ࢦఆ͞Εͨ5$16%1ϙʔτ൪߸ΛͬͯαʔϏεΛެ։͢Δ 7**ϙʔτόΠϯσΟϯά
εέʔϧΞτϓϩηεϞσϧʹΑͬͯߦΘΕΔ 7***ฒߦੑ
εέʔϧΞτϓϩηεϞσϧʹΑͬͯߦΘΕΔ 7***ฒߦੑ " !#
l ϓϩηε͕04͔Βͷ4*(5&3.γάφϧड͚औͬͨࡍʹά Ϩʔεϑϧ ʹγϟοτμϯͰ͖ΔΑ͏ʹ͢Δ l ఀࢭͷࡍʹෳࡶͳखଓ͖Λ͍Βͳ͍Α͏ʹ͢Δ l ىಈ࣌ؒΛ࠷খԽ͢Δ l ϓϩηε͕ىಈ͔ͯ͠ΒͰ͖Δ͚ͩ࣌ؒͰॲཧΛ։࢝Ͱ͖ΔΑ͏ʹ͢Δ
*9ഇغ༰қੑ *
։ൃεςʔδϯάຊ൪ΛͰ͖Δ͚ͩҰகͤͨ͞ঢ়ଶΛอͭ l ߏཁૉଗ͑Δ l ຊ൪ʹ͔͠ଘࡏ͠ͳ͍ίϯϙʔωϯτ͕ͳ͍Α͏ʹ͢Δ l ϥΠηϯείετͷ߹Ͱͦ͏ͳ͍ͬͯΔͳΒͦͦͷߏΛݟ͢ l εέʔϧ·Ͱଗ͑Δ͔༧ࢉͱ૬ஊ l
ෛՙࢼݧ࣌ͷΈΦϯσϚϯυʹଗ͑ΒΕΔΑ͏ʹ͓ͯ͘͠ͱ͍ͬͨΞϦ l Ұக͍ͯ͠ͳ͍෦໌จԽ͢Δ l ڥ͝ͱͷࠩ໌จԽ͠ɺ༰қʹؾ͚ΔΑ͏ʹ͢Δ l ύϒϦοΫΫϥυͰ͋ΕJOUFSOBM%/4Λ͏·͘׆༻Ͱ͖Δͱ͔ͳΓڧྗ 9։ൃຊ൪Ұக
ϩάGMVFOUEMPHTUBTIͳͲͷπʔϧΛ ༻͍ͯಛఆͷॴʹू͢Δ 9*ϩά ेʙඦͷαʔόʔ ेʙඦͷαʔόʔ ू
ϩάͷूΛ͍ͯ͠ͳ͍߹ ϩάͷूΛ͍ͯ͠Δ߹
ϩάGMVFOUEMPHTUBTIͳͲͷπʔϧΛ ༻͍ͯಛఆͷॴʹू͢Δ 9*ϩά ेʙඦͷαʔόʔ ेʙඦͷαʔόʔ ू
ϩάͷूΛ͍ͯ͠ͳ͍߹ ϩάͷूΛ͍ͯ͠Δ߹ ( MTTR)
ཧλεΫ %#ͷઃఆมߋͳͲ ΛҰճݶΓͷϓϩηεͱ࣮ͯ͠ߦ͢Δ ྫ͑ɺ%#ͷϚΠάϨʔγϣϯλεΫίʔυͱηοτʹͳ͓ͬͯΓɺ ϦϦʔε࣌ʹ࣮ߦ͞ΕΔΑ͏ʹͳ͍ͬͯΔ 9**ཧϓϩηε QZUIPO %KBOHP QZUIPONBOBHFQZNJHSBUF 3VCZ
3P3 SBLFECNJHSBUF HP TRMNJHSBUF TRMNJHSBUFVQ
ཧλεΫ %#ͷઃఆมߋͳͲ ΛҰճݶΓͷϓϩηεͱ࣮ͯ͠ߦ͢Δ ྫ͑ɺ%#ͷϚΠάϨʔγϣϯλεΫίʔυͱηοτʹͳ͓ͬͯΓɺ ϦϦʔε࣌ʹ࣮ߦ͞ΕΔΑ͏ʹͳ͍ͬͯΔ 9**ཧϓϩηε QZUIPO %KBOHP QZUIPONBOBHFQZNJHSBUF 3VCZ
3P3 SBLFECNJHSBUF HP TRMNJHSBUF TRMNJHSBUFVQ ਓؒϛεΛ͢ΔͷͰՄೳͳݶΓ 42-ΛͦͷͰ࣮ߦ͢ΔͳͲͷ ෳࡶͳ࡞ۀͤ͞ͳ͍Α͏ʹ͢Δ͜ͱ