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.6k
機械学習プロジェクトを頑健にする施策 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
6.3k
pfm
takahiko03
0
1.2k
機械学習チームにおけるソフトウェアエンジニア〜役割、キャリア /devsum-2018-summer
takahiko03
8
11k
Cookiecutter Template for Data Scientists Working in Docker Containers
takahiko03
2
2.5k
Cookiecutter for ML experiments with Docker
takahiko03
0
1.2k
日本語の表記ゆれ 解決方法の検討と実装
takahiko03
2
2.3k
Other Decks in Programming
See All in Programming
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
3
570
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
130
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.3k
Go コードベースの構成と AI コンテキスト定義
andpad
0
160
2年のAppleウォレットパス開発の振り返り
muno92
PRO
0
180
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
580
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
240
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
4.6k
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
6
1.9k
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
650
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
180
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
200
Featured
See All Featured
The Language of Interfaces
destraynor
162
26k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
How STYLIGHT went responsive
nonsquared
100
6k
Designing Experiences People Love
moore
143
24k
So, you think you're a good person
axbom
PRO
0
1.9k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Heart Work Chapter 1 - Part 1
lfama
PRO
4
35k
The Spectacular Lies of Maps
axbom
PRO
1
420
Balancing Empowerment & Direction
lara
5
840
A designer walks into a library…
pauljervisheath
210
24k
Context Engineering - Making Every Token Count
addyosmani
9
590
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 ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠