Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
430
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
140
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
380
tparseでgo testの出力を見やすくする
utgwkk
2
260
Cap'n Webについて
yusukebe
0
140
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
190
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
2
300
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.9k
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
360
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
400
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
110
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
Featured
See All Featured
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
23
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Scaling GitHub
holman
464
140k
How to build a perfect <img>
jonoalderson
0
4.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
91k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1k
エンジニアに許された特別な時間の終わり
watany
105
220k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
0
26
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 ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠