Slide 1

Slide 1 text

ಈ࡞֬ೝͷͨΊͷࣾ಺ΞϓϦ഑৴ αʔϏεΛ৽ͨʹ࡞ͬͨ࿩ 2018/09/01 iOSDC Japan 2018 Track C ໜ࿊ ஐେ @slightair 1

Slide 2

Slide 2 text

ࣗݾ঺հ • ໜ࿊ ஐେ / @slightair • ΫοΫύουגࣜձࣾ ٕज़෦ ϞόΠϧج൫άϧʔϓॴଐ • ࣾ಺ͷ։ൃ؀ڥ੔උɺαʔϏε։ൃ෦ॺͷٕज़తࢧԉ͕ۀ຿ 2

Slide 3

Slide 3 text

ࠓ೔ͷ͓࿩ • ๻ͨͪͷࣾ಺ΞϓϦ഑৴ͷ࢖͍ํ • ࠓ·Ͱར༻͖ͯͨ͠ΞϓϦ഑৴αʔϏε • ৽͘͠࡞ͬͨΞϓϦ഑৴αʔϏεͷ঺հ • վળ͞Εͨ఺ɾؾΛ͚ͭͨ఺ • ΞϓϦ഑৴ʹؔ͢Δ޻෉ͷ঺հ 3

Slide 4

Slide 4 text

։ൃ͍ͯ͠ΔΞϓϦɺ͍࣮ͭػʹ͍Εͯ৮Δʁ • ࢼ͠ʹ࡞ͬͯΈͨػೳΛ։ൃؔ܎ऀΈΜͳͰ৮ΔͨΊ • मਖ਼ͷPRΛग़ͨ͠ͱ͖ • ௥Ճɾमਖ਼ͨ͠ػೳͷಈ࡞֬ೝ • ૢ࡞ײͷ֬ೝ • ϦϦʔεલͷಈ࡞֬ೝ 4

Slide 5

Slide 5 text

೔ৗੜ׆ͷதͰͷ࢖͍৺஍Λࢼ͍ͨ͠ • ࣮ࡍʹΞϓϦ͕࢖ΘΕΔͰ͋Ζ͏λΠϛϯάͰΞϓϦΛࢼ͍ͨ͠ • ྉཧ͠ͳ͕Β • ҠಈதͳͲɺྉཧͷ͜ͱΛߟ͑ͦ͏ͳλΠϛϯά • ৽ΞϓϦɾ৽ػೳͳΒͳ͓͞Βɺ࢖ΘΕΔ૝ఆͷγʔϯͰ • ࣾһͷࢲ෺ͷεϚʔτϑΥϯʹ΋։ൃ൛ͷΞϓϦΛೖΕͯࢼͤΔ Α͏ʹ͍ͯ͠Δ 5

Slide 6

Slide 6 text

DeployGate Enterprise • ಺੡ͱҧ͍഑৴αʔϏεࣗମͷϝϯς͕ෆཁͳͷ͸͏Ε͍͠ • Enterprise൛Ͱ͸૊৫ͷϝϯόʔɾάϧʔϓ؅ཧ͕Ͱ͖Δ • ར༻ऀͷୀ৬࣌ͳͲΛߟ͑ΔͱඞਢɺͰ΋؅ཧ͸େม… • άϧʔϓ؅ཧ͸͠͹Β͕͘Μ͹ͬͯ࢖ͬͯΈ͚ͨͲɺ๻ͨͪ ͷ࢖͍ํͩͱࡉ͔͍άϧʔϓ෼͚͸ඞཁͳ͔ͬͨ 6

Slide 7

Slide 7 text

TestFlight • ങऩલ͸େม͓ੈ࿩ʹͳ͍ͬͯͨ • Apple ެࣜͷ࢓૊Έ • ࣾ಺഑৴Ͱ͸ Internal Tester ͕༻్ͱ͍͚ۙΕͲ • ࢲ෺Ͱ࢖͍ͬͯΔ AppleID ΛձࣾͷνʔϜʹొ࿥ͨ͘͠ͳ͍ • ٯʹձࣾͰऔͬͨ AppleID Λࢲ෺ͷ iPhone ʹೖΕͯ࢖͏͔ͱ͍͏ͱɺͦ͏΋ͳΒͳ͍1 • ͙͢ʹෆ࠾༻ʹͳͬͨ 1 Android/PlayStoreͷํ͸ΞΧ΢ϯτपΓͷ༥௨͕ޮ͖ͦ͏ͩͬͨɻAlphaϦϦʔεͷػೳ͸ར༻Ͱ͖ͦ͏ɻ 7

Slide 8

Slide 8 text

࢖͍͍ͨਓ͕ٸʹ૿ݮ͢Δͱ͖େม໰୊ • ʮ։ൃ͖ͯͨ͠ΞϓϦ͕େମͰ͖ͨͷͰࣾ಺ςετ൛഑৴։࢝͠ ͨΑʂΈΜͳ࢖ͬͯʂʯʢࣾ಺ϒϩάʣ • → ഑৴αʔϏεͷΞΧ΢ϯτ௥Ճґཔ͕େྔൃੜ • ࿮ͦΜͳʹۭ͖͕ͳ͍ͧɺϝϯόʔ੔ཧ͠ͳ͖Ό… • ͠͹Β͘͢Δͱར༻ࣗମ͕མͪண͍ͪΌ͏ • ར༻ස౓తʹશࣾһʹΞΧ΢ϯτల։͢Δͷ΋ݫ͍͠ 8

Slide 9

Slide 9 text

ಉ͡ΞϓϦͰ΋ෳ਺ͷઃఆͰ ผΞϓϦͱͯ͠഑৴͢Δ • ΞϓϦʹΑͬͯ৭ʑͳ഑৴ઃఆ͕͋Δ • BETA: ࠷৽ͷmasterϒϥϯνͷ಺༰Λ഑৴͢Δ • TEST: ϦϦʔε௚લͷಈ࡞֬ೝ΍ࢼ࡞ஈ֊ͷػೳΛ ௥Ճ͠ػೳͷݕূ͢Δ • PR: PR୯ҐͰमਖ਼ɾػೳ௥Ճͷಈ࡞֬ೝΛߦ͏ • ಉ͡ΞϓϦ͸ҰՕॴ·ͱΊ͓͖͍ͯͨ • ઀ଓઌ2ͷมߋ͸ΞϓϦ಺ͷσόοάπʔϧͰมߋͰ͖ ΔΑ͏ʹ͍ͯ͠Δ 2 produc)onɺstagingɺ֤։ൃऀͷ։ൃ؀ڥͳͲ 9

Slide 10

Slide 10 text

๻Β͕ཉ͍͠৚݅ɺղܾ͍ͨ͠໰୊ • ഑৴αʔϏεͷҡ࣋ɾ؅ཧෛ୲ΛՄೳͳݶΓ཈͍͑ͨ • ΞΧ΢ϯτ؅ཧΛ͕Μ͹Γͨ͘ͳ͍ • ࣾ಺ͷਓؒͳΒ࢖͑Δ͘Β͍ͷ੍ݶͰे෼ͦ͏ɺάϧʔϓͳͲࡉ͔͍ઃఆ· Ͱ͸ඞཁͳ͔ͬͨ • ֤ࣗͷՈͳͲɺࣾ֎Ͱ΋ΠϯετʔϧͰ͖ΔΑ͏ʹ͍ͨ͠ • ଞͷࣾ಺πʔϧͷΞΧ΢ϯτɾΞΫηεݖݶ؅ཧͱ·ͱ·ͬͯΔͱ͏Ε͍͠ • ଟ਺ͷΞϓϦɺͦΕΒʹෳ਺ͷ഑৴ઃఆ͕͋ͬͯ΋͖Ε͍ʹ·ͱΊ͍ͨ 10

Slide 11

Slide 11 text

haneda • iOS/Android ޲͚ͷ಺੡ͷࣾ಺ΞϓϦ ഑৴αʔϏε • ΞϓϦҰཡϖʔδͱΞϓϦৄࡉϖʔδ ͕͋Δ͘Β͍ͷγϯϓϧͳ಺༰ • ઃఆόϦΤʔγϣϯΛkindͱݺͼɺ ΞϓϦ୯ҐͰ·ͱΊΔ • ࣾ಺ωοτϫʔΫ ·ͨ͸ G Suiteೝূ Λ௨ͬͨ୺຤ͷΈΞΫηε͕Մೳ 11

Slide 12

Slide 12 text

12

Slide 13

Slide 13 text

haneda ͷߏ੒ • AWS S3ʹϏϧυͨ͠όΠφϦͱϝλσʔλΛهड़ͨ͠JSONΛ഑ஔ͢Δ • CIͰϑΝΠϧੜ੒ͱΞοϓϩʔυΛߦ͏ͨΊͷfastlane ac4onΛ༻ҙͨ͠ • WebΞϓϦ • S3ͷJSONΛݩʹHTMLΛϨϯμϦϯά͢Δ • iOSΞϓϦμ΢ϯϩʔυ༻ͷmanifestΛಈతੜ੒͢Δ • DB͸࢖͍ͬͯͳ͍ • ೝূʹ͸ࣾ಺ڞ௨ͷϦόʔεϓϩΩγΛར༻͢Δ3 3 groupad(ࣾ಺ϒϩάɾWiki)ͳͲͷࣾ಺πʔϧͱڞ௨ͷΞΫηε੍ޚɻղઆهࣄ 13

Slide 14

Slide 14 text

haneda ʹΑΓվળ͞Εͨ͜ͱ • G Suite ೝূʹͨ͠ͷͰೖࣾ࣌ʹࣾ಺ΞΧ΢ϯτ͕ൃߦ͞ΕΔͱಉ ࣌ʹར༻Մೳʹͳͬͨ4 • ଞͷࣾ಺πʔϧ܈ͱಉ͡ΞΧ΢ϯτɾΞΫηεݖݶͰར༻Մೳ ʹɺࣾ಺֎໰Θ༷ͣʑͳ৔ॴͰશࣾһ͕ར༻Ͱ͖Δ • લड़ͷΑ͏ͳγϯϓϧͳߏ੒ͷͨΊ഑৴αʔϏεࣗମͷ؅ཧෛ୲ ΋ͦ͜·Ͱ্͕ΒͣʹࡁΜͩ 4 DeployGate ͕ G Suite ࿈ܞʹରԠͨ͠ࡍʹܧଓར༻΋ݕ౼͕ͨ͠ɺҰ෦ػೳ͕଍Βͣݟૹͬͨ 14

Slide 15

Slide 15 text

in-house fastlane ϓϥάΠϯ • in-house fastlane ϓϥάΠϯ5Λ࡞Γࣾ಺഑৴Λ৽نΞϓϦ։ൃʹಋ ೖ͠΍͍͢؀ڥʹͨ͠ • haneda ͷ S3 όέοτ໊ͳͲͷઃఆ஋͸ϓϥάΠϯʹؚΊɺ࠷௿ ݶͷઃఆ͚ͩͰΞοϓϩʔυͰ͖ΔΑ͏ʹ • Beta ͳͲͷΑ͘࢖͏όοδΛ͚ͭͨΓɺάϨΠεέʔϧʹ͢Δͳ ͲΞΠίϯΛՃ޻͢Δ ac5on ΋෇ଐ͢Δ 5 ࣾ಺ Gem Server Ͱ؅ཧɺfastlane ʹ֎෦ Gem Server ͔ΒϓϥάΠϯΛಋೖͰ͖Δ࢓૊ΈΛ௥Ճͨ͠ 15

Slide 16

Slide 16 text

ϓϥάΠϯͷΞΫγϣϯ܈ • upload_mobile_app_to_s3 / haneda • pre5y_badge • save_adhoc_archive • Cer;ficates / Profiles • generate_provisioning_profile • generate_apns_cer;ficate • GitHub API wrappers • create_issue • add_labels • add_comment • has_label 16

Slide 17

Slide 17 text

fastlane match ʹΑΔূ໌ॻɾ伴؅ཧ • ূ໌ॻɺൿີ伴ɺProvisioning Profile ͳͲΛ҉߸Խͯ͠ϦϙδτϦͰ؅ཧ͠ ͍ͯΔ6 • ΞϓϦͷ਺ɾkind ͕૿͑ͯ΋Ұݩ؅ཧͰ͖Δ • EnterpriseProgramͷݖݶ͕ڧ͍ূ໌ॻͳͲΛΈͩΓʹ։ൃऀʹ౉ͨ͘͠ͳ ͍ɺCIϚγϯͷΈΞΫηεͰ͖Ε͹Α͍ • CIϚγϯ͕ෳ਺͋ͬͯ΋Πϯετʔϧͷख͕ؒ૿͑ͳ͍ 6 iOSΞϓϦͷαϒϛοτࣗಈԽͱূ໌ॻ؅ཧͷޮ཰Խ - ΫοΫύου։ൃऀϒϩά 17

Slide 18

Slide 18 text

ΞϓϦ഑৴ͷͨΊͷ lane ఆٛྫ lane :build_and_upload_to_haneda do app_identifier = base_app_identifier + '-beta' match(app_identifier: app_identifier, type: "enterprise", git_branch: "enterprise", readonly: true) pretty_badge(kind: 'beta', grayscale: false) gym(...) haneda( app_id: base_app_identifier, app_name: 'Overcookpad', kind_id: 'beta' ) end 18

Slide 19

Slide 19 text

ಛఆͷϥϕϧ͕͍ͭͨPRͷΈ഑৴ॲཧΛߦ͏ lane :pull_request do |params| pr_number = params[:pr]&.to_i UI.user_error!('Pull request number required') unless pr_number # (Ϣχοτςετ/֤छ෼ੳͳͲ...) next unless has_label(id: pr_number, label: 'InHouseBuild') build_and_upload_to_s3(staging: true, build_kind: :pr) build_url = Actions.lane_context[SharedValues::UPLOADED_MOBILE_APP_BUILD_URL] add_comment(id: pr_number, body: "Build uploaded to #{build_url}") end 19

Slide 20

Slide 20 text

·ͱΊ • ࣾ಺ͷΞϓϦ഑৴ͷ࢖͍ํʹ߹Θͤͯɺ಺੡ͷ഑৴αʔϏε haneda Λ࡞ͬͨ • Ͱ͖ΔݶΓγϯϓϧͳߏ੒Ͱߏங͠ɺ಺੡Ͱ͋ͬͯ΋؅ཧෛ୲͕૿͑ͳ͍Α ͏ʹ޻෉ͨ͠ • ଞͷࣾ಺Webπʔϧͱͷ࢖͍উखͱͦΖ͑Δ͜ͱ͕Ͱ͖ɺΞΧ΢ϯτ؅ཧͷ ໰୊΋ղܾͨ͠ • ΞϓϦ։ൃϓϩδΣΫτ͕૿͑ͯ͘Δͳ͔ɺ഑৴αʔϏεΛ͢͹΍͘ಋೖ͢ ΔͨΊͷ࢓૊Έ΋߹ΘͤͯͦΖ͑Δ͜ͱ͕Ͱ͖ͨ 20