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
新機能作成時に開発ブランチに細かくmergeしていく戦略/merge-strategy-for...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shibayu36
August 07, 2017
Programming
6
18k
新機能作成時に開発ブランチに細かくmergeしていく戦略/merge-strategy-for-new-feature
shibayu36
August 07, 2017
Tweet
Share
More Decks by shibayu36
See All by shibayu36
顧客との商談議事録をみんなで読んで顧客解像度を上げよう
shibayu36
0
280
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
EMこそClaude Codeでコード調査しよう
shibayu36
0
1.1k
詳しくない分野でのVibe Codingで困ったことと学び/vibe-coding-in-unfamiliar-area
shibayu36
3
5.7k
個人CLAUDE.md紹介と設定から学んだこと/introduce-my-claude-md
shibayu36
0
1.3k
今の生産性改善活動で大切にしている考え方
shibayu36
8
8.7k
エンジニアメンター制度の効果的な運用を目指して/improve-mentor-system
shibayu36
27
10k
グレードイメージ具体化のため昇格理由を公開する
shibayu36
8
6k
一から始めるJavaScriptユニットテスト/js-unit-test-from-scratch
shibayu36
8
33k
Other Decks in Programming
See All in Programming
CSC307 Lecture 09
javiergs
PRO
1
840
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
690
AI時代の認知負荷との向き合い方
optfit
0
160
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
220
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
140
CSC307 Lecture 01
javiergs
PRO
0
690
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
430
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
170
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
270
Featured
See All Featured
Between Models and Reality
mayunak
1
190
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
130
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Building Adaptive Systems
keathley
44
2.9k
Site-Speed That Sticks
csswizardry
13
1.1k
Discover your Explorer Soul
emna__ayadi
2
1.1k
First, design no harm
axbom
PRO
2
1.1k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
50k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
350
Transcript
৽ػೳ࡞࣌ʹ։ൃϒϥϯν ʹࡉ͔͘merge͍ͯ͘͠ઓུ ٕࣾज़ษڧձ 2017/08/03 id:shiba_yu36
࠷ۙେ͖Ίͳ৽ػೳΛ࡞Δ࣌ɺ ։ൃϒϥϯνʹࡉ͔͘merge͢ ΔઓུΛ͍ͬͯΔͷͰհ
جຊతͳઓུ • Ϣʔβʔʹ৽ػೳ͕ݟ͑ͳ͍Α͏ʹ͢ΔΛ͠ɺ ৽ػೳͷbranchͲΜͲΜmerge͍ͯ͘͠ • PRՄೳͳݶΓࡉ͔͘ • ࠷ޙʹϢʔβʔʹ৽ػೳΛݟ͑ΔΑ͏ͳϦϦʔεΛ ͢Δ
Πϝʔδ NBTUFS EFWFMPQ G SFMFBTF G G ࠷ऴSFMFBTF
͍ΖΜͳࣦഊ͔Β ͜ͷઓུʹࢸͬͨ
Α͋͘Δࣦഊύλʔϯͦͷ1 ڊେPRύλʔϯ
ڊେPRύλʔϯ • ৽ػೳͷͨΊͷίʔυΛҰͭͷPRʹ·ͱΊͯ mergeͯ͠ϦϦʔε GCJHCBOH EFWFMPQ
ࠔΔ͜ͱ • ίϯϑϦΫτ • ϨϏϡʔ͢Δ؍͕ଟ͗ͯ͢ݟམͱ͢ -> ҆ఆੑ× • ࢦఠ͕ଟ͘ͳΓ͕ͪ ->
ϨϏϡʔ͞ΕΔଆ͕ർฐ • ϨϏϡʔͷԠुͰർฐ͢Δ -> Ͳͬͪਏ͍
ײ֮తʹ500ߦ ͖͑ͯͨลΓͰਏ͍
Α͋͘Δࣦഊύλʔϯͦͷ2 ৽ػೳϦϦʔεϒϥϯνύλʔϯ
৽ػೳϦϦʔεϒϥϯν • ৽ػೳͷϦϦʔε༻ϒϥϯνΛҰͭ༻ҙͯ͠ɺͦ͜ ʹPRΛૹΔύλʔϯ • PRࡉ͔͘ϨϏϡʔ͞ΕɺϦϦʔε༻ϒϥϯν
GSFMFBTF EFWFMPQ G G
ࠔΔ͜ͱ • ίϯϑϦΫτ࠶ͼ • ࠷ޙʹϦϦʔεPRΛશνΣοΫ͠ͳ͍ͱ҆৺Ͱ ͖ͳ͍ • ଞͷػೳͰඞཁʹͳͬͨϝιουΛcherry-pick ͠·͘Δ
ࠔΔ͜ͱ • ίϯϑϦΫτ࠶ͼ • ࠷ޙʹϦϦʔεPRΛશνΣοΫ͠ͳ͍ͱ҆৺Ͱ ͖ͳ͍ • ଞͷػೳͰඞཁʹͳͬͨϝιουΛcherry-pick ͠·͘Δ ಛʹ͜Ε͕͍
• feature1Ͱfind_hoge_blogͱ͍͏ϝιουΛ࡞Δ • feature2Ͱಉ͡ϝιουΛ͏͜ͱʹͳͬͨ • find_hoge_blogΛ࡞ͬͨcommitΛcherry-pick͢ Δ? • ͔ͦ͠͠ͷcommitΛcherry-pick͢Δͱมͳίʔ υฆΕͯ͘Δ
• ίϐϖ͢Δ͔͠ͳ͍ʁʁʁ
͍͍ײ͡ʹΔํ๏͋Γ ͦ͏͚ͩͲɺͱʹ͔͘େม
͜ͷΑ͏ͳࣦഊ͔Β ࠷ॳͷઓུΛऔΔΑ͏ʹ
(࠶ܝ)جຊతͳઓུ • Ϣʔβʔʹ৽ػೳ͕ݟ͑ͳ͍Α͏ʹ͢ΔΛ͠ɺ ৽ػೳͷbranchͲΜͲΜmerge͍ͯ͘͠ • PRՄೳͳݶΓࡉ͔͘ • ࠷ޙʹϢʔβʔʹ৽ػೳΛݟ͑ΔΑ͏ͳϦϦʔεΛ ͢Δ
(࠶ܝ)جຊతͳઓུ • Ϣʔβʔʹ৽ػೳ͕ݟ͑ͳ͍Α͏ʹ͢ΔΛ͠ɺ ৽ػೳͷbranchͲΜͲΜmerge͍ͯ͘͠ • PRՄೳͳݶΓࡉ͔͘ • ࠷ޙʹϢʔβʔʹ৽ػೳΛݟ͑ΔΑ͏ͳϦϦʔεΛ ͢Δ
ύλʔϯ • ϩδοΫͷϝιου͔Β࡞Δ • Ϣʔβʔʹݟ͑ͳ͍෦͔Β࡞Δ • ΤϯυϙΠϯτΛຊ൪Ͱݟ͑ͳ͍Α͏ʹ͢Δ • Ұ෦ͷHTML͚ͩຊ൪ͰӅ͓ͯ͘͠ •
ϦχϡʔΞϧύλʔϯ
ύλʔϯ1 ϩδοΫͷϝιου͔Β࡞Δ
• Logic::Blog->find_public_blogsͱ͔ɺLogic::Blog- >createͱ͔͚ͩ࡞ͬͯPR • ϩδοΫΛϢʔβʔʹݟ͑ΔControllerͱ͔ͰΘ ͳ͚ΕવӨڹͳ͠
ҙ • ϢʔεέʔεΛੳ͓͔ͯ͠ͳ͍ͱɺ࣮ࡍʹ͏࣌ ʹ͑ͳ͍͜ͱʹؾͮ͘ • ͍ํٖࣅίʔυΛॻ͖ͭͭɺͦΕ߹ΘͤͯϨ Ϗϡʔͯ͠Β͏ͱྑ͍
sub endpoint { my ($req, $res) = @_; # λΠτϧͱઆ໌จΛrequest͔Β
# ͜͜Ͱvalidate͢Δ my ($title, $desc) = validate( title => $req->param('title'), desc => $req->param('desc'), ); # titleͱdescriptionΛ͢ Logic::Blog->create(...) }
ύλʔϯ2 Ϣʔβʔʹݟ͑ͳ͍෦͔Β࡞Δ
ྫ) MySQLͷLIKEݕࡧ͔ΒɺElasticsearch ʹஔ͖͑ͯࣗ༝ͳιʔτར༻Մೳʹ
ׂ͢Δ 1. Elasticsearchͷ։ൃڥ࡞Γ(खݩɺ։ൃڥɺຊ൪) 2. ݕࡧ͍ͨ͠σʔλͷElasticsearchͷಉظ 3. ݕࡧΫΤϦͰͷݕࡧཪଆΛMySQL͔ΒElasticsearchʹ ஔ͖͑ 4. ElasticsearchΛͬͯιʔτΛ࣮
3൪·ͰϢʔβʔ͔Βݟ͑ ͳ͍ͷͰɺਵ࣌ϦϦʔεՄೳ
ׂ͢Δ 1. Elasticsearchͷ։ൃڥ࡞Γ(खݩɺ։ൃڥɺຊ൪) 2. ݕࡧ͍ͨ͠σʔλͷElasticsearchͷಉظ 3. ݕࡧΫΤϦͰͷݕࡧཪଆΛMySQL͔ΒElasticsearch ʹஔ͖͑ 4. ElasticsearchΛͬͯιʔτΛ࣮
ύλʔϯ3 ΤϯυϙΠϯτΛຊ൪Ͱ ݟ͑ͳ͍Α͏ʹ
༻్ • ৽ػೳΛಛఆͷURLͰఏڙ͢Δ࣌ʹ ͑Δ
Γํ • ։ൃڥͰURLͰͦͷػೳʹΞΫηε Ͱ͖ΔΑ͏ʹ • ຊ൪ڥͰNot Foundʹ͢Δ • ୯ͳΔϑϥά͚ͩͰ࣮Մೳ
# /feature1ͰΞΫηεͰ͖ΔΤϯυϙΠϯτ sub feature1 { my ($req, $res) = @_;
# ։ൃڥͰͷΈONʹͳΔϑϥά # TODO(feature1_release): ϦϦʔεલʹফ͢ if (!$ENV{CAN_SHOW_NEW_FEATURE}) { return $res->not_found; } ... }
ϑϥάڥมͰ Config::ENVతͳͷ͏ͷͰ ͳΜͰ
ͨ͠ΒϑϥάΛͬͨif จΛফͨ͠ΒϦϦʔεͰ͖Δ
ύλʔϯ4 Ұ෦ͷHTML͚ͩຊ൪Ͱ Ӆ͓ͯ͘͠
༻్ • ͋ΔϖʔδͷҰ෦ʹ৽ػೳՃ ͢Δ࣌
Γํ • ςϯϓϨʔτΤϯδϯΛ͍ͬͯΔ ͱ؆୯ • ϑϥάΛςϯϓϨʔτʹͯ͠ɺಛఆ HTMLΛফͨ͠Γ͢Δ͚ͩ
... [%- IF can_show_new_feature %] <section id="feature1"> ... </section> [%-
END %] ...
JSͱ͔ཁૉ͕͋Δ࣌ͷ Έ༗ޮʹ͢ΔͷͰରॲՄೳ
ͨ͠ΒϑϥάΛͬͨif จΛফͨ͠ΒϦϦʔεͰ͖Δ
ύλʔϯ5 ϦχϡʔΞϧύλʔϯ
༻్ • ৽ػೳͰϖʔδ͕ΨϥοͱมΘΓɺ ಛఆHTMLΛӅ͢ͱ͔Ͱରॲෆೳͳ࣌
Γํ • ίϯτϩʔϥͱςϯϓϨʔτͷηοτΛ ͏1ͭ༻ҙ͢Δ • ৽͍͠ίϯτϩʔϥຊ൪Ͱݟ͑ͳ͍ Α͏ʹ • ࠷ޙʹલͷͭͱͦͬ͝ͱೖΕସ͑Δ
# /feature1_renewalͰΞΫηεͰ͖ΔΤϯυϙΠϯτ sub feature1_renewal { my ($req, $res) = @_;
# ։ൃڥͰͷΈONʹͳΔϑϥά # TODO(feature1_release): ϦϦʔεલʹফ͢ if (!$ENV{CAN_SHOW_NEW_FEATURE}) { return $res->not_found; } ... }
feature1_renewal.html lessͱ͔JSͱ͔͍͍ײ͡ʹ
• sub feature1_renewal -> sub feature1 • feature1_renewal.html -> feature1.html
• lessͱ͔ҰؾʹҠಈ • ࠷ޙ͚ͩͪΐͬͱେมͰ͋Δ
·ͱΊ • େ͖Ίͳ৽ػೳ࡞Γͷ࣌ͷmergeઓུʹͭ ͍ͯͷ • ࣦഊܦݧ͔ΒϢʔβʔʹݟ͑ͳ͍Α͏ʹͲ ΜͲΜ։ൃϒϥϯνʹmerge͢ΔΑ͏ʹ ͳͬͨ • ݟ͑ͳ͍Α͏ʹ͢Δύλʔϯ͍Ζ͍Ζ