$30 off During Our Annual Pro Sale. View Details »

コードの自動修正によって実現する、機能開発を止めないフレームワーク移行

gree_tech
PRO
November 11, 2021

 コードの自動修正によって実現する、機能開発を止めないフレームワーク移行

GREE Tech Conference 2021 で発表された資料です。
https://techcon.gree.jp/2021/session/Session-2

gree_tech
PRO

November 11, 2021
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. ίʔυͷࣗಈमਖ਼ʹΑ࣮ͬͯݱ͢Δ
    ػೳ։ൃΛࢭΊͳ͍ϑϨʔϜϫʔΫҠߦ
    άϦʔϥΠϑελΠϧגࣜձࣾ
    ໦ଜ༸ଠ

    View Slide

  2. ໦ଜ༸ଠ
    ˔ॴଐ
    ˓ άϦʔϥΠϑελΠϧגࣜձࣾ ϓϩμΫτ։ൃ෦ ϝσΟΞ։ൃ
    άϧʔϓ ΤϯδχΞϦϯάνʔϜ
    ˔ܦྺ
    ˓ ೥ άϦʔϥΠϑελΠϧגࣜձࣾ ೖࣾ
    ˓ ओʹʮ-*.*"ʯͷαʔόʔɾΠϯϑϥ։ൃ
    ࣗݾ঺հ
    2
    2

    View Slide

  3. LIMIAを知っていますか?
    ⓘ Start presenting to display the poll results on this slide.

    View Slide

  4. ͓खܰͰɺ͙͢ਅࣅͰ͖ΔͷʹɺͪΌΜͱ฻Β͠΍͍͢ɻ
    -*.*"͸Ոࣄͷ޻෉͕େू߹͢ΔϥΠϑελΠϧϝσΟΞͰ͢ɻ
    ͓खܰ޻෉ͰՈࣄ্ख
    -*.*"ͷ঺հ

    View Slide

  5. ˔Ҡߦલ
    ˓ ϑϨʔϜϫʔΫ
    ˙ 'VFM1)1
    ˓ ݴޠ
    ˙ 1)1
    ˓ Πϯϑϥ
    ˙ &$
    ˔Ҡߦޙ
    ˓ ϑϨʔϜϫʔΫ
    ˙ -BSBWFM
    ˓ ݴޠ
    ˙ 1)1
    ˓ Πϯϑϥ
    ˙ &$4'BSHBUF
    5
    ϑϨʔϜϫʔΫҠߦϓϩδΣΫτ
    https://aws.amazon.com/jp/architecture/icons/

    View Slide

  6. 6
    ҠߦϓϩδΣΫτͷεέδϡʔϧ
    ˔ػೳ։ൃΛࢭΊͣʹҠߦͯ͠ཉ͍͠ͱ͍͏ཁ๬
    ˔Ҡߦʹ͔͚ΒΕΔ޻਺͸ݶΒΕ͍ͯͨ
    ˓ ฒߦ։ൃظ͕ؒ௕ͦ͏ͳݟࠐΈͩͬͨ
    方針
    検討
    コード自動修正ルールの作成 QA・バグ修正 インフラ検証
    ݄ ݄ ݄ ݄ ݄
    ࣮ࡍͷҠߦεέδϡʔϧ
    社内管理ツール
    リリース
    カナリヤ
    リリース開始
    0.5人 1人 2人

    View Slide

  7. 7
    ͳͥࣗಈमਖ਼ʹ౿Έ੾͔ͬͨʁ
    ˔ܰྔͳ'VFM1)1ػೳͷଟ͍-BSBWFM΁ͷҠߦ
    ˓ %# 2VFSZ#VJMEFS
    $POUSPMMFS͋ͨΓΛஔ͖׵͑Ε͹ྑͦ͞͏
    ˓ 7JFXपΓ͸ςϯϓϨʔτΤϯδϯΛஔ͖׵͑Δ͚ͩͰྑͦ͞͏
    ˔खಈमਖ਼ͷݫ͠͞
    ˓ ສߦ௒͑ͷίʔυϕʔε
    ˓ ਓ΍͕࣌ؒ଍Γͳ͍
    ˓ ػೳ։ൃΛฒߦͰߦ͍͍͕ͨʜʜ
    ˙ ҠߦݩͱҠߦޙͷίʔυͷ྆ํΛมߋ͢Δඞཁ͕͋Δ
    ˙ ҠߦޙͷίʔυʹมߋΛՃ͑ΔͱDPOGMJDU͕ى͜ΓಘΔ
    ˙ ػೳ։ൃΛࢭΊΔ͔͠ͳ͍͕ɺࢭΊͨ৔߹͸൒೥ۙ͘ػೳ։ൃ͕ਐ·ͳ͍͜ͱ
    ͕ݟࠐ·Εͨ

    View Slide

  8. 8
    3FDUPS SFDUPSQIQSFDUPS

    ˔ࣗಈϦϑΝΫλϦϯάɾϚΠάϨʔγϣϯπʔϧ
    ˓ %FBE$PEF &BSMZ3FUVSOͳͲͷϦϑΝΫλϦϯάϧʔϧ
    ˓ 1)1όʔδϣϯͷVQHSBEF EPXOHSBEF
    ˔ಛ௃
    ˓ OJLJDQIQBTU Λϕʔεʹந৅ߏจ໦ʢ"45ʣΛฤू
    ˓ ܕ৘ใΛ1)14UBO͔ΒऔಘͰ͖Δ
    ˓ ςετ͕ॻ͖΍͍͢
    ˓ ։ൃ͕׆ൃ

    View Slide

  9. 9
    ϑϨʔϜϫʔΫҠߦʹ͓͚Δίʔυͷमਖ਼ྫ
    ˔2VFSZ#VJMEFSͷஔ͖׵͑
    ˓ XIFSF DPM JO C
    XIFSF*O B C

    ˓ XIFSF DPM TVC2VFSZ
    XIFSF4VC DPM TVC2VFSZ

    ˓ %#TFMFDU@BSSBZ <JE OBNF>
    %#TFMFDU JE OBNF

    ˔$POUSPMMFSͷஔ͖׵͑
    ˓ *OQVU 3FRVFTU 3FTQPOTFͳͲΛରԠ͢Δϝιουʹஔ͖׵͑
    ˓ $POUSPMMFSΛQTS४ڌʹSFOBNF
    ˓ QTSͷOBNFTQBDFʹ߹ΘͤͨσΟϨΫτϦ΁Ҡಈ

    View Slide

  10. 10
    3FDUPSͷม׵ྫ&BSMZ3FUVSO
    $IBOHF/FTUFE*GT5P&BSMZ3FUVSO3FDUPS
    public function hoge($value) {
    if ($value % 2 === 0) {
    if ($value % 3 === 0) {
    return 'yes';
    }
    }
    return 'no';
    }
    public function hoge($value)
    if ($value % 2 !== 0) {
    return 'no';
    }
    if ($value % 3 === 0) {
    return yes;
    }
    return 'no';
    }

    View Slide

  11. 11
    ந৅ߏจ໦ "CTUSBDU4ZOUBY5SFF"45

    https://github.com/nikic/PHP-Parser
    $var = "Hello World!";
    Stmt_Expression
    expr
    Expression_Assign
    var, expr
    Expression_Variable
    name: var
    Scalar_String
    value: Hello World!
    expr
    var
    expr

    View Slide

  12. 12
    3FDUPSͷॲཧʢந৅ߏจ໦ͷฤूʣ
    public function getNodeTypes(): array
    {
    return [String_::class];
    }
    public function refactor($node): ?Node
    {
    if ($node->value === "Hello World!") {
    $node->value = "Hello GREE Tech Conf!";
    return $node;
    }
    return null;
    }
    Scalar_String
    value: Hello GREE Tech Conf!
    Stmt_Expression
    expr
    Expression_Assign
    var, expr
    Expression_Variable
    name: var
    expr
    var
    Scalar_String
    value: Hello World!
    Scalar_String
    value: Hello World!

    View Slide

  13. 13
    3FDUPSͷॲཧʢந৅ߏจ໦͔Βίʔυͷߏஙʣ
    Scalar_String
    value: Hello GREE Tech Conf!
    $var = "Hello GREE Tech
    Conf!";
    Stmt_Expression
    expr
    Expression_Assign
    var, expr
    Expression_Variable
    name: var
    expr
    var

    View Slide

  14. 14
    ࣮ࡍͷίʔυࣗಈमਖ਼ͷྫ
    'VFM1)1
    ¥DB::select_array(['id', 'name'])->from('user');
    -BSBWFM
    ¥DB::table('user')->select('id', 'name')

    View Slide

  15. 15
    ࣮ࡍͷ3FDUPSϧʔϧTFMFDUGSPNΛUBCMFTFMFDU
    ¥DB::select_array(['id', 'name'])->from('user');
    ¥DB::table('user')->select_array(['id', 'name']);
    TFMFDUGSPNΛUBCMFTFMFDUʹมߋ

    View Slide

  16. 16
    ࣮ࡍͷ3FDUPSϧʔϧTFMFDU@BSSBZΛTFMFDU
    ¥DB::table('user')->select('id', 'name');
    ¥DB::select_array(['id', 'name'])->from('user');
    ¥DB::table('user')->select_array(['id', 'name']);
    TFMFDUGSPNΛUBCMFTFMFDUʹมߋ
    TFMFDU@BSSBZͷҾ਺Λల։

    View Slide

  17. 作成したRectorのルール数
    ⓘ Start presenting to display the poll results on this slide.

    View Slide

  18. 18
    ౴͑

    View Slide

  19. 19
    ͳͥࣗಈमਖ਼ʹ౿Έ੾͔ͬͨʁʢ࠶ܝʣ
    ˔ܰྔͳ'VFM1)1ػೳͷଟ͍-BSBWFM΁ͷҠߦ
    ˓ %# 2VFSZ#VJMEFS
    $POUSPMMFS͋ͨΓΛஔ͖׵͑Ε͹ྑͦ͞͏
    ˓ 7JFXपΓ͸ςϯϓϨʔτΤϯδϯΛஔ͖׵͑Δ͚ͩͰྑͦ͞͏
    ˔खಈमਖ਼ͷݫ͠͞
    ˓ ສߦ௒͑ͷίʔυϕʔε
    ˓ ਓ΍͕࣌ؒ଍Γͳ͍
    ˓ ػೳ։ൃΛฒߦͰߦ͍͍͕ͨʜʜ
    ˙ ҠߦݩͱҠߦޙͷίʔυͷ྆ํΛมߋ͢Δඞཁ͕͋Δ
    ˙ ҠߦޙͷίʔυʹมߋΛՃ͑ΔͱDPOGMJDU͕ى͜ΓಘΔ
    ˙ ػೳ։ൃΛࢭΊΔ͔͠ͳ͍͕ɺࢭΊͨ৔߹͸൒೥ۙ͘ػೳ։ൃ͕ਐ·ͳ͍͜ͱ
    ͕ݟࠐ·Εͨ

    View Slide

  20. 20
    ίʔυͷࣗಈमਖ਼ʹΑΔػೳ։ൃͱҠߦͷฒߦ։ൃ
    ։ൃϒϥϯν
    ˓ ػೳ։ൃɺόάमਖ਼
    ˓ 1)1ʹ൐͏ίʔυमਖ਼
    Ҡߦ༻ϒϥϯν
    ˓ 3FDUPSͷϧʔϧͷ࡞੒
    ˓ -BSBWFMؔ࿈ϑΝΠϧͷ௥Ճ
    ࠓ·Ͱ௨ΓͷϑϩʔͰ
    2"ɾϦϦʔε
    $*ʹΑΔ
    ࣗಈमਖ਼
    Ҡߦ؀ڥͰͷςετ
    ΞϓϦέʔγϣϯͷίʔυ͸
    Ҡߦ༻ϒϥϯνͰ͸ฤू͠ͳ͍

    View Slide

  21. 21
    ͲΕ͘Β͍ࣗಈमਖ਼ͰҠߦͰ͖͔ͨ
    ˔1)1ϑΝΠϧ͸ϑΝΠϧ͘Β͍
    ˔มߋྔ
    ˔खಈͰҠߦͨ͠ϑΝΠϧʢʙϑΝΠϧʣ
    ˓ ೝূपΓ
    ˓ ϧʔςΟϯά
    ˓ 'PSNBUUFS "HFOUͳͲ'VFM1)1ʹ͔͠ͳ͍ػೳ

    View Slide

  22. 22
    ίʔυͷࣗಈमਖ਼Λ΍Δ্Ͱʜʜ
    ˔ςετ
    ˓ ͋Δͱͱͯ΋ྑ͍
    ˓ -*.*"Ͱ͸ςετ͸͋·Γಈ͍͍ͯͳ͔ͬͨ
    ˔3FDUPSϧʔϧͷςετ
    ˓ ϧʔϧʹΑΔม׵Λ͋Δఔ౓อূͰ͖Δ
    ˓ 3FDUPS͸CSFBLJOHDIBOHF͕ଟ͍ͷͰ݁ߏ໾ʹཱͬͨ
    ˔੩తղੳπʔϧ
    ˓ 1)14UBOͷಋೖ
    ˙ Ұ൪໾ʹͨͬͨ
    ˙ ػೳ։ൃͷํͷόά΋ݕग़ͯ͘͠Εͨ

    View Slide

  23. 23
    ࣗಈमਖ਼Ͱۤ࿑ͨ͜͠ͱ
    ˔Ͳ͏ͯ͠΋ࣗಈमਖ਼͕೉ͦ͠͏ͳίʔυ
    ˓ ΊͪΌͪ͘Όෳࡶͳ2VFSZ#VJMEFS
    ˓ ࢓༷͔ΒΑ͘Θ͔Βͳ͍ίʔυ
    ݩͷίʔυଆΛ3FDUPSͰม׵Ͱ͖ΔϦϑΝΫλϦϯάͨ͠
    ͦ΋ͦ΋͍Βͳ͍ίʔυ͕ଟ͔ͬͨͷͰফ͠·ͬͨ͘ʢ໿ສߦʣ
    ˔πʔϧଆͷόά
    ˓ ਖ਼ͦ͠͏ͳͷʹಈ͔ͳ͍ͱࢥͬͨΒόʔδϣϯΛม͑Δͱಈ͍ͨΓ
    ˓ 3FDUPSͷ$BDIF͕յΕ͍ͯΔ
    044ͳΜ͔ͩΒࣗ෼Ͱ௚͢ʂʂ

    View Slide

  24. 24
    ࣗಈमਖ਼ʹΑΔҠߦ·ͱΊ
    ˔ྑ͔ͬͨ͜ͱ
    ˓ ෺ྔʹର߅Ͱ͖Δ
    ˓ ώϡʔϚϯΤϥʔΛݮΒͤΔ
    ˓ ৽ن௥Ճ͞ΕͨϑΝΠϧ΋ࣗಈͰҠߦ͞ΕΔ
    ˓ ػೳ։ൃͱDPOqJDU͢Δ͜ͱ͕ͳ͍
    ˔ѱ͔ͬͨ͜ͱ
    ˓ -BSBWFMͷػೳΛϑϧʹ࢖͑ͳ͍
    ˓ ந৅ߏจ໦ͷਂ͍஌ࣝͳͲ͕ඞཁͰଐਓԽ͠΍͍͢

    View Slide

  25. 25
    ҠߦϓϩδΣΫτΛऴ͑ͯ
    ˔ࣗಈमਖ਼Λܾஅͯ͠ྑ͔ͬͨ
    ˔3FDUPSͱ͍͏πʔϧʹग़ձ͑ͯྑ͔ͬͨ
    ˓ 1)11)1Ͱ΋׆༂ͦ͠͏ʂ
    ˓ ϦϑΝΫλϦϯάπʔϧͱͯ͠$*ʹೖΕ͍ͨ
    ˔ΠϯϑϥͷҠߦ΋ָ͔ͬͨ͠
    ˓ 71$5SBGGJD.JSSPSJOHʹΑΔෛՙςετ
    ˓ &$ͱ'BSHBUFͰͷΧφϦϠϦϦʔεΛߦ͏ͨΊͷ޻෉
    ˓ $*$%΋େ෯ʹվળ
    ˓ ΤϯδχΞϒϩάॻ͖͍ͨͱࢥ͍ͬͯ·͢ʜʜ

    View Slide

  26. 26

    View Slide