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
機械学習プロジェクトを頑健にする施策 ML Ops Study #2
Search
Takahiko Ito
May 29, 2018
Programming
12
4.4k
機械学習プロジェクトを頑健にする施策 ML Ops Study #2
https://ml-ops.connpass.com/event/83919/
Takahiko Ito
May 29, 2018
Tweet
Share
More Decks by Takahiko Ito
See All by Takahiko Ito
Elasticsearch における類似度ベクトル検索のベストプラクティスを求めて/es-vector-search
takahiko03
9
5.9k
pfm
takahiko03
0
1.1k
機械学習チームにおけるソフトウェアエンジニア〜役割、キャリア /devsum-2018-summer
takahiko03
8
11k
Cookiecutter Template for Data Scientists Working in Docker Containers
takahiko03
2
2.2k
Cookiecutter for ML experiments with Docker
takahiko03
0
1.1k
日本語の表記ゆれ 解決方法の検討と実装
takahiko03
2
2.1k
Other Decks in Programming
See All in Programming
リハビリmruby
kishima
1
160
ドメイン駆動設計の実践
masuda220
PRO
17
5.1k
Product Management LT会_クアンド新家
shinshin
0
210
初心者がおさえておきたいAWS CDKのベストプラクティス 2024
konokenj
15
7.3k
Javaの現状2024夏 / Java current status 2024 summer
kishida
4
1.4k
CSC307 Lecture 10
javiergs
PRO
0
310
最近追加した型の紹介とその振り返り
aki19035vc
0
170
SDCon2024: Enabling DevOps and Team Topologies thru architecture: architecting for fast flow
cer
PRO
0
780
社内 LT 会を発足し、アウトプット文化を醸成させるために考えたこと・やったこと / Starting internal LT meetings and fostering an output culture
mackey0225
3
120
Jetpack for KMP
fornewid
1
290
ぼっちを避けて楽しむためのアノテコノテ / Various Tips and Tricks to Avoid Loneliness and Have Fun
nrslib
3
1.7k
コード生成を伴うLLMエージェント - 2024.07.18 Tokyo AI
smiyawaki0820
11
4.1k
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1026
450k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
Music & Morning Musume
bryan
43
5.9k
Statistics for Hackers
jakevdp
792
220k
How to Ace a Technical Interview
jacobian
274
23k
Navigating Team Friction
lara
181
13k
RailsConf 2023
tenderlove
16
720
Web development in the modern age
philhawksworth
203
10k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
20
7.2k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
Designing for Performance
lara
604
67k
Documentation Writing (for coders)
carmenintech
63
4.2k
Transcript
ػցֶशϓϩδΣΫτΛؤ݈ʹ͢Δࢪࡦ ϫʔΫϑϩʔɺԾԽɺ ্࣭ɺࣝҠৡ etc ҏ౻ܟ
ࣗݾհ • ιϑτΣΞΤϯδχΞ • ത࢜ʢֶʣ • TwitterΞΧϯτ: takahi_i • Φʔϓϯιʔεɿ
RedPen 2
ຊͷτϐοΫ • ػցֶशϓϩδΣΫτ͕੬͘ͳͬͯΏ͘ݪҼͱ औΓΜͰ͍Δରॲ๏ʹ͍ͭͯհ • ɿ͍͔ͭ͘ͷϓϩδΣΫτͰͷऔΓΈ • NOTE: ػցֶशͷϞσϧΛσϓϩΠ͢Δ෦ ѻΘͳ͍
3
ػցֶशϓϩδΣΫτͷεςʔ δ ୳ࡧతͳ࣮ݧ ίʔυཧ Ϟσϧͷ σϓϩΠ ̏ͭͷεςʔδʢ୳ࡧతͳ࣮ݧɺεΫϦϓτ ԽɺσϓϩΠʣ͔ΒͳΔ 4 ϥΠϒϥϦԽ
ϦϑΝΫλϦϯά ςετɺLinter CI όονεΫϦϓτɺ ίϯτϩʔϥՃɺ CD Jupyter Notebook
ࠓճѻ͏ൣғ ຊൃදͰѻ͏τϐοΫ ୳ࡧతͳ࣮ݧ ίʔυཧ Ϟσϧͷ σϓϩΠ 5 ϥΠϒϥϦԽ ϦϑΝΫλϦϯά ςετɺLinter
CI όονεΫϦϓτɺ αʔϏεԽɺ CD ࣮ݧˠίʔυཧ͔ΒϓϩδΣΫτͷؤ݈ԽΛ ҙࣝ͢Δ Jupyter Notebook
ίʔυཧεςʔδ • Jupyter Notebook ͰಘΒΕ࣮ͨݧ݁ՌΛϥΠϒϥϦ ԽɺεΫϦϓτʹ͢Δ • ࣮ࢪऀɿϦαʔνϟɺ͘͠Ҿ͖ܧ͙ιϑτΣ ΞΤϯδχΞ •
த్ͳίʔυཧ → ϓϩδΣΫτ͕੬͘ 6
੬͍ػցֶशϓϩδΣΫτ • ػցֶशͷਫ਼͕མ͍ͪͯΔ͕ɺͩΕཧղͰ ͖ͳ͍ • ࡞ͬͨਓ͕ࣙΊͯ͠·͕ͬͨɺͲ͏͍ͬͯͨ ͷ͔Θ͔Βͳ͍ 7
ػցֶशΛར༻ͨ͠αʔϏε ͷ͠͞ • ΞϧΰϦζϜͷ͠͞✕ΤϯδχΞϦϯάͷ͠͞ 㱺྆ํͰ͖ͳ͍ͱ͏·͍͔͘ͳ͍ • ϓϩδΣΫτͷ։͔࢝ΒΤϯδχΞϦϯάͷجຊΛ कͬͯҰาͣͭؤ݈ʹ • جຊɿڥݻఆʢԾԽʣɺϫʔΫϑϩʔཧɺϦ
ϑΝΫλϦϯάɺςετɺCIɺϖΞϓϩɺ etc 8
ػցֶशϓϩδΣΫτɿ੬͞ ͷݪҼ ػցֶशϓϩδΣΫτҎԼͷ͔Β੬͘ͳͬͯ Ώ͘ • ࣮ݧεΫϦϓτ͕ಈ͔ͳ͍ • ࣮ݧεΫϦϓτ͕ཧղͰ͖ͳ͍ • ࣮ݧͨ͠ਓ͔Βίʔυ͕ΕΔ
9
ػցֶशϓϩδΣΫτͷ੬͞ ҎԼɺ֤ͱରॲํ๏ʹ͍ͭͯղઆ • ࣮ݧεΫϦϓτ͕ಈ͔ͳ͍ • ࣮ݧεΫϦϓτ͕ཧղͰ͖ͳ͍ • ࣮ݧͨ͠ਓ͔Βίʔυ͕ΕΔ 10
ػցֶशϓϩδΣΫτͷ੬͞ • ࣮ݧεΫϦϓτ͕ಈ͔ͳ͍ • ࣮ݧεΫϦϓτ͕ཧղͰ͖ͳ͍ • ࣮ݧͨ͠ਓ͔Βίʔυ͕ΕΔ 11
ػցֶशϨϙδτϦ͋Δ͋Δ GitHubʹ͋Δػցֶशք۾ͷϦϙδτϦʹ͍ͭͯͷ Tweet ͰOSSͰɺ͜ͷΑ͏ͳঢ়ଶͷϨϙδτϦΛαʔ ϏεʹಋೖͰ͖ͳ͍ɻɻɻ 12
࣮ݧεΫϦϓτ͕ಈ͔ͳ͍ ̎ͭʹྨ͞ΕΔ 1.εΫϦϓτͷ࣮ߦॱং͕͔Βͳ͍ 2.εΫϦϓτ͕ґଘ͢Δڥ͕͔Βͳ͍ 13
࣮ߦॱং͕Θ͔Βͳ͍ • ঢ়گɿεΫϦϓτ͕ෳ༻ҙ͞Ε͍ͯΔ • • ֶशσʔλ͕Ͳ͜ʹଘࡏ͢Δͷ͔Θ͔Βͳ͍ • Ͳͷॱ൪Ͱ࣮ߦ͢ΕΑ͍ͷ͔͔Βͳ͍ 14
ղܾํ๏ɿϫʔΫϑϩʔΛ ཧ͢Δ • ϑϩʔΛཧͰ͖ΔπʔϧΛϦϙδτϦʹಋೖ ͢ΔɿmakeLuigi • εΫϦϓτͷ࣮ߦॱংґଘؔهड़Ͱ͖Δ • ϝϦοτɿCIɺCDಋೖγϯϓϧʹ 15
εΫϦϓτΛ࣮ߦ͢Δڥ͕ ࡞Εͳ͍ • ػցֶशΛѻ͏εΫϦϓτଟͷϥΠϒϥϦ ʹґଘ • PythonϥΠϒϥϦ͚ͩͰͳ͘ɺଞͷݴޠͰهड़ ͞Εͨπʔϧʹґଘ͢ΔʢMeCabͳͲʣ • ֤εςʔδ͝ͱʹҟͳΔڥʢܭࢉػʣͰಈ࡞
͢ΔͷͰϙʔλϏϦςΟ͕ॏཁ 16
ɿલͷεςʔδͰಈ͍ͯ ͍࣮ͨݧ͕ಈ࡞͠ͳ͍ 17 ࣮ݧ ςετɺlintɺϦϑΝΫλ ϦϯάɺϥΠϒϥϦԽɺ CI όονεΫϦϓτɺ CDɺαʔϏε Ϟσϧվྑ
kubernetes ECS ίʔυཧ σϓϩΠ εςʔδ͝ͱʹಈ࡞ڥΛ ࡞Δίετ͕େ͖͍ɻ →ϞσϧͷվྑαΠΫϧ͕ճΒͳ͍(TдT)
ղܾํ๏ɿDocker Λಋೖ • ܰྔͳԾԽڥ • PythonϥΠϒϥϦҎ֎ͷɺґଘ͢Δڥ Dockerfile ʹهड़Ͱ͖Δ • ڥͷϙʔλϏϦςΟ্͕
18
DockerͰڥΛԾԽ 19 ࣮ݧ ςετɺlintɺϦϑΝΫλ ϦϯάɺϥΠϒϥϦԽɺ CI όονεΫϦϓτɺ CDɺαʔϏε Ϟσϧվྑ kubernetes
ECS ίʔυཧ σϓϩΠ ࣮ݧஈ֊͔ΒҰ؏ͯ͠Dockerίϯς φ্Ͱ࡞ۀɻಈ࡞͠ͳ͍εςʔδ͕ ग़ͳ͍Α͏ʹ
͔͠͠ɺɺDockerɺɺ • ίϚϯυ͕͍ɻɻɻɻ(TдT) • ϙʔτϑΥϫʔυɺϑΝΠϧϚϯτΛࢦఆ • ࣮ݧεςʔδ͔Β Docker Ͱ࡞ۀ͢Δؾ͕ى͜Β ͳ͍ɻɻɻ
20
Docker ίϚϯυ • Docker Πϝʔδͷ࡞ • docker build -t ml-image
-f ./docker/Dockerfile . • Dockerίϯςφͷ࡞ • docker run -it -v `pwd`:/work -p 8888:8888 — name ml-image ml-container • ͞Βʹɺআɺ࠶ੜੑ etc … 21
ͦ͜Ͱ ( *´ůшʆ) Šŕťž 22
ղܾํ๏ɿCookiecutter Docker Science • DockerڥͰͷ࣮ݧʙσϓϩΠ·ͰΛα ϙʔτ͢ΔCookiecutterςϯϓϨʔτΛͭ͘ Γ·ͨ͠ • ΦʔϓϯιʔεϓϩδΣΫτ •
URL: https://docker-science.github.io/ • Cookiecutter: ϓϩδΣΫτͷςϯϓϨʔτ ੜπʔϧ 23
ػೳɿCookicutter Docker Science • ΤϯδχΞϦϯάೳྗͷߴ͘ͳ͍ϝϯόͰDockerΛѻ͍͘͢ • DockerͷίϚϯυΛ make λʔήοτͰӅṭ •
ϙʔτϑΥϫʔυɺϑΝΠϧϚϯτઃఆɺίϯςφ࡞Γ͠ etc … • ࣮ݧ͔ΒཧɺσϓϩΠ·ͰΛҙࣝͨ͠σΟϨΫτϦߏΛग़ྗ • σΟϨΫτϦߏͷڞ௨ԽʹΑΓϓϩδΣΫτͷݟ௨͠ • Cookiecutter Data Science ͷߏΛࢀߟʹͨ͠ 24
ϑΝΠϧɺσΟϨΫτϦߏ ͷ౷Ұ 25 make init Ͱ S3͔ΒσʔλΛμ ϯϩʔυ ֶशεΫ Ϧϓτ͕ओྗ͢ΔϞσ
ϧΛอ࣋ ࣮ݧ༻ͷϊʔτϒο ΫΛอ࣋ ίʔυཧ࣌ʹ࡞ ΒΕΔϝιουɺΫϥε Λอ࣋ ϓϩδΣΫτͷϫʔ ΫϑϩʔΛه
Cookiecutter Docker Science ͷ ͍ํʢϓϩδΣΫτੜʣ $cookiecutter
[email protected]
:docker-science/cookiecutter-docker-science.git project_name [project_name]: image-classification
project_slug [image_classification]: jupyter_host_port [8888]: description [Please Input a short description]: Classify images into several categories data_source [Please Input data source in S3]: s3://research-data/food-images 26
Demo: Cookiecutter Docker Science • ϓϩδΣΫτͷੜ • https://asciinema.org/a/ 6XV9dNixtzfUwWdoqLj7HG7 A2
• Docker image / container ίϯς φ࡞ • https://asciinema.org/a/ 06CcXPubAj3RSiMSTy3CZDrfG • Jupyter Notebook Λ্ཱͪ͛Δ 27
Cookiecutter Docker Science Λར༻ ࣮ͯ͠ݧஈ֊͔ΒԾԽڥͰ࡞ۀ 28 ࣮ݧ ςετɺlintɺϦϑΝΫλ ϦϯάɺϥΠϒϥϦԽɺ CI
όονεΫϦϓτɺ CDɺαʔϏε Ϟσϧվྑ kubernetes ECS ίʔυཧ σϓϩΠ ͯ͢ͷεςʔδͰԾڥ γʔϜϨεʹεςʔδΛҠಈͰ͖Δ
ػցֶशϓϩδΣΫτͷ੬͞ • ࣮ݧεΫϦϓτ͕ಈ͔ͳ͍ • ࣮ݧεΫϦϓτ͕ཧղͰ͖ͳ͍ • ࣮ݧͨ͠ਓ͔Βίʔυ͕ΕΔ 29
࣮ݧεΫϦϓτ͕ཧղͰ͖ͳ͍ • ঢ়گɿͳΜ͔ಈ࡞͍ͯ͠ΔΑ͏͕ͩɺϞσϧΛੜ͍ͯ͠Δίʔ υ͕ཧղͰ͖ͳ͍ • ྫɿJupyter Notebook Λͦͷ··ίϐϖͨ͠εΫϦϓτ • ػցֶशΞϧΰϦζϜ͍͠㱺ίʔυ͕ཧ͞Ε͍ͳ͍ͱͬ
ͱ͍͠ • ରॲɿιϑτΣΞΤϯδχΞϦϯάͰҰൠతͳίʔυ࣭ͷ ্ࢪࡦΛಋೖ • ϦϑΝΫλϦϯάɺςετɺCI etc 30
ϦϑΝΫλϦϯά • ϓϩάϥϜͷ֎෦͔Βݟͨಈ࡞Λม͑ͣʹιʔε ίʔυͷ෦ߏΛཧ͢ΔʢWikipedia ΑΓʣ • ෳࡶʹͳΓ͕ͪͳػցֶशͷॲཧΛཧ͢Δ • ॴײɿGitHub
Qiita Ͱެ։͞Ε͍ͯΔػցֶ शίʔυΛΈΔͱɺίʔυཧ͕ͳ͞Ε͍ͯΔ ͷ͕গͳ͍ʢଞͷίʔυͱൺֱʣɻ 31
ϦϑΝΫλϦϯά߲ ॳาతͳཧͰಡΈ্͕͢͢͞ΔʢςετɺCIɺCDͷੴʣ • ؔͷ͞ • มͷείʔϓ • ͕ؔऔΔҾͷ • ϚδοΫφϯόʔͷఆͷஔ͖͑
• ಉ͡ॲཧΛҰՕॴʹ·ͱΊΔ • ਂ͍ωετ෦Λؔͱͯ͠நग़͢Δ 32
ؔͷ͞ • ͕͍ؔͱཧղ͢Δͷ͕͘͠ͳΔ • ͻͲ͍εΫϦϓτͩͱ͕ͯ͢ϝΠϯؔ • ॲཧͷ༰ຖʹؔͱͯ͠நग़͢Δ 33
มͷείʔϓ • είʔϓɿม͕ར༻Ͱ͖Δڑ • είʔϓ͘ɺͦͯ͘͠ • άϩʔόϧมϩʔΧϧมʹஔ͖͑Δ • ॲཧΛ௨ͯ͡ར༻͢ΔมΠϯελϯεม ʹ͢Δ
34
ؔͷҾ • ػցֶशͷΞϧΰϦζϜύϥϝλ͕ଟ͍ˠؔͷ Ҿ͕ଟ͘ͳΓ͕ͪ • Ҿͷ͕ଟ͍ͱॲཧ͕͍ͮΒ͍ • ݮΒͤͳ͍͔ݕ౼͢Δ • ҾΛΦϒδΣΫτͱͯ͠·ͱΊΔ
• Կར༻͞ΕΔˠΠϯελϯεมʹ 35
ॲཧΛҰՕॴʹ·ͱΊΔ • ಉ͡Α͏ͳॲཧΛ͍ͯ͠ΔՕॴΛҰͭʹ·ͱΊ Δ • ྫɿσʔλͷมτϨʔχϯάͰςετͰ ར༻͢Δ 36
ਂ͍ωετΛආ͚Δ • for ϧʔϓɺif จ͕ωετ͍ͯ͠ΔͱྲྀΕ͕͔ͭ Έʹ͍͘ • ੵۃతʹؔΛநग़͢Δ • ΤσΟλͷػೳΛ͏ͱγϣʔτΧοτͰαΫο
ͱͰ͖Δ 37
ࣗಈςετ • ςετɿೖྗʹରͯ͠ظͨ͠Ξτϓοτʹͳͬ ͍ͯΔ͔Λݕূ͢Δίʔυ • ࠷ݶɿલॲཧɺEnd-to-Endͷςετॻ͘ 38
ςετͷԸܙ • ςετ=༷ • υΩϡϝϯτΛॻ͍ͯ࣌ؒͱͱʹᴥᴪ͕ੜ· ΕΔ • CIͰಈ࡞͢Δςετʹᴥᴪ͕ͳ͍ • ॻ͍͓͍ͯͯ͋͛ΔͱɺҾ͖ܧ͙ਓͷཧղΛॿ͚Δ
• ςετ͕ແ͍ίʔυΛमਖ਼͢Δͷڪා 39
ͦͷ΄͔ • linter ಋೖ • logger ಋೖ • CIಋೖ •
υΩϡϝϯτʢSphinxʣ • ࣮ݧͨ͠༰ͳͲΛ·ͱΊΔ • etc … 40
ػցֶशϓϩδΣΫτͷ੬͞ • ࣮ݧεΫϦϓτ͕ಈ͔ͳ͍ • ࣮ݧεΫϦϓτ͕ཧղͰ͖ͳ͍ • ࣮ݧͨ͠ਓ͔Βίʔυ͕ΕΔ 41
͜Ε·ͰͷରࡦͰίʔυେ ؤ݈ʹͳͬͨ ͔͠͠ɺ·͕ͩ͋Δɻɻɻ ୭͕ཧ͢Δͷ͔ɻɻɻ 42
࣮ݧͨ͠ਓ͔Βίʔυ͕ΕΔ • ঢ়گɿ࣮ݧϨϙδτϦΛผͷਓ͕ཧʢ͘͠ ॻ͖͠ʣ • ѱӨڹɿ࠶࣮ݧ͠ʹ͘͘ͳΔɺকདྷͷमਖ਼ίε τ • ϓϩδΣΫτཚͳۀʹΑͬͯ੬͘ͳΔ •
ίʔυ͕ؤ݈ͰϓϩδΣΫτͱͯ͠੬͍ 43
ొϝϯόʔ ίʔυཧΛ̎ͭͷλΠϓͷϝϯόʔ Ͱ͓͜ͳ͏ʢɿݫີʹ͔Ε͍ͯΔ Θ͚Ͱ͋Γ·ͤΜʣ ϦαʔνϟدΓɿ࣮ݧͨ͠ਓɻػցֶ शΛར༻ͨ͠ϞσϦϯά͕ಘҙ ʢιϑτΤΞʣΤϯδχΞدΓɿι ϑτΣΞ։ൃ͕ಘҙ 44
Ξϯνύλʔϯɿίʔυཧ ʹ͓͚Δۀ ୳ࡧతͳ࣮ݧ ίʔυཧ Ϟσϧͷ σϓϩΠ Ϧαʔνϟ͕ݕূ࣮ͨ͠ݧ༰ΛΤϯδχΞ͕ཧ • ϥΠϒϥϦԽɺςετՃɺϦϑΝΫλϦϯά etc
45
ྑ͘ͳ͍࡞ۀϑϩʔɿίʔυ ཧ ʮΤϯδχΞ͕ػցֶशϓϩδΣΫτ༻ͷϨϙδτϦʹ ίϛοτʯɺ͘͠ʮผϨϙδτϦΛ࡞ͬͯ࡞ۀʯ 46 CIઃఆɺϦϑΝΫλϦϯά ςετɺLinterɺLogger ͷಋೖ ػցֶशϓϩδΣΫτ ϨϙδτϦ
ίϛοτՃ
ۀͷ݁Ռ • Ϧαʔνϟɿॻ͖͞Ε͍ͯΔͷͰཧ͞Εͨ ίʔυ͕ཧղͰ͖ͳ͍ • ΤϯδχΞɿॲཧͷཧղ͕Γͳ͍ɻ࣮ݧͷৄ ࡉΛཧղͰ͖͍ͯͳ͍ • ϦαʔνϟɺΤϯδχΞͱʹϓϩδΣΫτʹର ͢Δཧղɺ͕த్
47
ঢ়گੳɿۀʹΑΔ 48 ࣮ݧ ςετɺlintɺϦϑΝΫλ ϦϯάɺϥΠϒϥϦԽɺ CI όονεΫϦϓτɺ CDɺαʔϏε Ϟσϧվྑ kubernetes
ECS ίʔυཧ σϓϩΠ ৽͍࣮͠ݧ݁Ռ͕ͰΔͨͼʹ ϦαʔνϟˠΤϯδχΞͷόέπ ϦϨʔ͕ൃੜ
ঢ়گੳɿۀʹΑΔ 49 ࣮ݧ ςετɺlintɺϦϑΝΫλ ϦϯάɺϥΠϒϥϦԽɺ CI όονεΫϦϓτɺ CDɺαʔϏε Ϟσϧվྑ kubernetes
ECS ίʔυཧ σϓϩΠ ίʔυཧޙͷεΫϦϓτΛϦαʔ νϟ͕ཧղͰ͖ͳ͍ 㱺վྑαΠΫϧΛճͤͳ͍ɻɻɻ
ݱঢ়Λཧ • ࣮ݧͨ͠ਓʢϦαʔνϟʣͷखͷಧ͔ͳ͍ॴͰίʔυΛ मਖ਼͢ΔͱϓϩδΣΫτࢮ͵ • رɿ࣮ݧͰར༻ͨ͠ίʔυʢσʔλมॲཧͳͲʣʴ ϞσϧΛͦͷ··σϓϩΠ͍ͨ͠ 㱺͔͠͠ɺා͍ͷͰίʔυཧʢՄಡੑؤ݈ੑ ্ʣ͔ͯ͠ΒϓϩμΫγϣϯʹಋೖ͍ͨ͠ 50
Ξϓϩʔν ࣮ݧͨ͠ਓ͕ࣗͰίʔυཧ͢ΔʢBeyond the Boundaryʣ 51
ίʔυཧΛϖΞͰऔΓΉ • ίʔυཧ࣌ʹϦαʔνϟɺΤϯδχΞͷϖΞΛ࡞Δ • ݟΛڞ༗ͭͭ͠ϖΞͰίʔυཧ • ίετߴ͘ͳ͍ɿ͍͍ͤͥඦʙઍߦͷεΫϦϓτ 52 ୳ࡧతͳ࣮ݧ ίʔυཧ
Ϟσϧͷ σϓϩΠ
࡞ۀϑϩʔɿίʔυཧ ʮΤϯδχΞ͕Pull RequestΛ࡞Γʯɺʮ࣮ݧͨ͠ ਓ͕ϨϏϡʔ͢Δʯ 53 CIઃఆɺϦϑΝΫλϦϯά ςετɺLinterɺLogger ͷಋೖ ϨϏϡʔˍϚʔδ ϓϧϦΫΤετͷ࡞
ҙ • ϓϩδΣΫτͷඒ͠͞ͱ࣮ݧ͢͠͞ͷόϥϯεΛऔΔ • ࣮ݧͨ͠ਓ͕࣮ݧΛܧଓͰ͖ΔൣғͰमਖ਼ • ࣮ݧͨ͠ਓ͕ཧղͰ͖ͳ͍मਖ਼Ϛʔδ͠ͳ͍ • ϓϧϦΫΤετͷཻখ͘͞ •
େ͖͍ͱཧղ͠ʹ͍͘ • ίϛοτΛܗͯ͠Θ͔Γ͘͢ʢιϑτΣΞΤϯδχΞ ͷͷݟͤͲ͜Ζʣ 54
ԸܙɿϖΞͰίʔυཧ • ϨϏϡʔͨ͠ίʔυͳͷͰ࣮ݧΛγʔϜϨεʹ࠶։Ͱ ͖Δʢਫ਼্ʣ • ͯ͢ͷϝϯόʹΤϯδχΞϦϯάͷجૅతͳݟΛ ڞ༗Ͱ͖ΔʢςετɺCIɺLinterɺϦϑΝΫλϦϯά etc ʣ →
ࣗͰίʔυཧͭͭ͠αΠΫϧΛճ͢ → কདྷͷमਖ਼ίετݮ 55
·ͱΊ ػցֶशϓϩδΣΫτ͕੬͘ͳͬͯΏ͘ݪҼͱऔ ΓΜͰ͍Δࢪࡦʹ͍ͭͯղઆͨ͠ • ࣮ݧεΫϦϓτ͕ಈ͔ͳ͍ • ࣮ݧεΫϦϓτ͕ཧղͰ͖ͳ͍ • ࣮ݧͨ͠ਓ͔Βίʔυ͕Ε 56
57 ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠