Slide 1

Slide 1 text

Python3΁ͷҠߦϦεΫΛ ࠷খݶʹ͢Δ Python2 EOL Party in Tokyo by @jumpyoshim #python2EOL

Slide 2

Slide 2 text

JUMPEI YOSHIMURA Backend Engineer @HiCustomer @jumpyoshim

Slide 3

Slide 3 text

ಈػ ৽ଔೖࣾޙͷϓϩδΣΫτͰ1ZUIPOܥͱ%KBOHPܥ΁ͷҠߦܦݧ ͕͋ͬͨͷͰɺͦͷͱ͖ͷܦݧΛ౿·͓͑ͯ࿩͍͖ͤͯͨͩ͠͞·͢

Slide 4

Slide 4 text

ࠓճͷςʔϚ ίετΛ͔͚Ε͹ϦεΫ͸ݮΒͤΔ 1ZUIPO΁ͷҠߦͷͨΊʹଟ͘ͷίετΛ͔͚ΒΕΔΘ͚Ͱ͸ͳ͍ ػೳͷϦϦʔε΍όάϑΟοΫε͕༏ઌ͞ΕɺΉ͠Ζ΄ͱΜͲίε τΛ͔͚ΒΕͳ͍ ͔͠͠ɺݶΒΕͨϦιʔεͷதͰϦεΫΛՄೳͳݶΓݮΒ͢ ͦͷͨΊʹԿ͕Ͱ͖Δ͔ ʮҠߦϦεΫΛ࠷খݶʹ͢Δʯ

Slide 5

Slide 5 text

Why We Need to Update

Slide 6

Slide 6 text

ΞοϓάϨʔυ͢Δཧ༝ ੬ऑੑ ৽ػೳ ୤ϨΨγʔ ৽ͨͳηΩϡϦςΟόά͕ൃ֮ͨ͠৔߹ʹ ߈ܸΛड͚ΔϦεΫ͕͋Δ ίϛϡχςΟͷ౒ྗͷԸܙΛड͚Δ͜ͱ͕ Ͱ͖Δ ୭͠΋޷ΜͰϨΨγʔͳ؀ڥΛબ͹ͳ͍

Slide 7

Slide 7 text

How to Upgrade 2 to 3 1.ࣗಈม׵πʔϧ 2. αʔυύʔςΟͷΞοϓάϨʔυ

Slide 8

Slide 8 text

1. ࣗಈม׵πʔϧ ɾUP ɾ'VUVSJ[F.PEFSOJ[F 1ZUIPOͰಈ࡞͢ΔίʔυΛੜ੒ 1ZUIPOΛ1ZUIPOͷίʔυʹม׵

Slide 9

Slide 9 text

1. ࣗಈม׵πʔϧ 1ZUIPO·Ͱ͸ࣗྗͰ͋͛Δඞཁ͕͋Δ खಈͰίʔυमਖ਼͕ඞཁͳՕॴ͕͋Δ ஫ҙ఺ ɾ͢΂ͯࣗಈԽ͞Ε͍ͯΔΘ͚Ͱ͸ͳ͍ ɾ1ZUIPOͷΈαϙʔτ

Slide 10

Slide 10 text

2. αʔυύʔςΟͷΞοϓάϨʔυ ࠷௿Ͱ΋1ZUIPOΛαϙʔτ͍ͯ͠Δόʔδϣϯ·Ͱ͋͛Δඞཁ͕͋Δ ࠷৽ͷόʔδϣϯͱͷࠩ෼Λ֬ೝߋ৽ $ pip list -o Package Version Latest Type ——————— —————— ————— ————— requests 2.21.0 2.22.0 wheel urllib3 1.24.3 1.25.8 wheel $ pip install -U requests

Slide 11

Slide 11 text

2. αʔυύʔςΟͷΞοϓάϨʔυ ஫ҙ఺ ɾޙํޓ׵ੑ͕ͳ͍มߋؚ͕·ΕΔՄೳੑ ɾͦ΋ͦ΋1ZUIPOΛαϙʔτ͍ͯ͠ͳ͍Մೳੑ υΩϡϝϯτΛ֬ೝ͠ͳ͕Βे෼ʹ஫ҙ͠ ΞοϓάϨʔυΛߦ͏ ಠࣗͰ࣮૷͢Δ ϑΥʔΫͨ͠ϓϩδΣΫτΛ୳͢

Slide 12

Slide 12 text

pyup.io (6*Ͱ࠷৽όʔδϣϯͱͷࠩ෼Λ֬ೝͰ͖Δ $)"/(&-0(͕͋Ε͹දࣔͯ͘͠ΕΔ https://pyup.io/tools/requirements-checker/

Slide 13

Slide 13 text

What We Should to Reduce Risk 1. Python2 / 3 ͷҧ͍Λཧղ͢Δ 2. ςετ 3. ܧଓతΠϯςάϨʔγϣϯ 4. αʔυύʔςΟͷબఆ 5. αʔυύʔςΟͷΞοϓάϨʔυࣗಈԽ

Slide 14

Slide 14 text

1. Python2 / 3 ͷҧ͍Λཧղ͢Δ ͲΜͳϦεΫ͕͋Δͷ͔ʢޓ׵ੑ͕ͳ͍ՕॴʣΛཧղ͢Δ ϦεΫͷ͋ΔՕॴΛॏ఺తʹରࡦ͢Δ 1ZUIPOެࣜυΩϡϝϯτʹΑΕ͹ܯռ͢Δ΂͖ҧ͍͸͚ͭͩ

Slide 15

Slide 15 text

(1) จࣈྻͷѻ͍ 1ZUIPOͰͷFODPEFEFDPEF͸VOJDPEFܕͱTUSܕ 1ZUIPOͰͷFODPEFEFDPEF͸TUSܕͱCZUFTܕ 1ZUIPOͷTUSܕ͸1ZUIPOͷTUSܕͰ͸ͳ͘VOJDPEFܕͱಉ౳ $ python2 >>> u'ͺ͍ͦΜ'.encode('utf-8') '\xe3\x81\xb1\xe3\x81\x84\xe3\x81\x9d\xe3\x82\x93' >>> '\xe3\x81\xb1\xe3\x81\x84\xe3\x81\x9d\xe3\x82\x93'.decode('utf-8') u'\u3071\u3044\u305d\u3093' $ python3 >>> 'ͺ͍ͦΜ'.encode() b'\xe3\x81\xb1\xe3\x81\x84\xe3\x81\x9d\xe3\x82\x93' >>> b'\xe3\x81\xb1\xe3\x81\x84\xe3\x81\x9d\xe3\x82\x93'.decode() 'ͺ͍ͦΜ'

Slide 16

Slide 16 text

(2) আࢉ 1ZUIPOͰ͸JOUಉ࢜ͷআࢉ݁Ռ͸͢΂ͯqPBUʹͳΔ $ python2 >>> 1 / 2 0 $ python3 >>> 1 / 2 0.5

Slide 17

Slide 17 text

2. ςετ ҠߦલͱҠߦޙͷಈ࡞͕ಉ͡Ͱ͋Δ͜ͱΛ୲อ͢Δ ͞·͟·ͳείʔϓ͕͋Δ ɾϢχοτςετɿؔ਺΍ϝιουϨϕϧͰ ɾ݁߹ςετɿͭҎ্ͷίϯϙʔωϯτΛ૊Έ߹Θͤͯ ɾ&&ςετɿαʔϏεશମΛ௨ͯ͠

Slide 18

Slide 18 text

Testing Pyramid ͲͷςετΛͲΕ͚࣮ͩࢪ͢Δͷ͕Α͍ͷ͔ɺ(PPHMF͕ޠΔ࠷దͳςετઓུ 6OJU *OUFHSBUJPO &&ͷׂ߹͕όϥϯε͕ྑ͍ Ϣχοτςετͷׂ߹͕࠷΋େ͖͍ˠίετ͕௿͘͘࠷΋ޮՌ͕͋Δ https://testing.googleblog.com/2015/04/just-say-no-to-more-end-to-end-tests.html

Slide 19

Slide 19 text

ϢχοτςετΛ࣮૷͢Δ ΧόϨοδΛ100%ʹͨ͠ํ͕͍͍ͱ͍͏͜ͱͩΖ͏͔ʁ ͨ͠΄͏͕͍͍͡Όͳ͍ɻͦ͏͠Ζͱ͍͍ͬͯΔΜͩɻ ॻ͍ͨίʔυ͸͢΂ͯςετ͠ͳ͚Ε͹͍͚ͳ͍ɻ·Δɻ `` l ΑΓߴ͍ΧόϨοδ͕๬·͍͕͠ίετ͕ߴ͍ ޙํޓ׵ੑ͕ͳ͍Օॴʢจࣈྻ΍আࢉʣʹಛʹؾΛ͚ͭͯςετΛ͔͘ͱΑ͍

Slide 20

Slide 20 text

Ϣχοτςετͷॻ͖ํ ઌਓํͷ৺ڧ͍ࢿྉ ɾޮՌతͳVOJUUFTU·ͨ͸ɺDBMM'65ͷൿີ ɾͰ͖Δ%KBOHPͰςετ ɾςετۦಈ1ZUIPO http://pelican.aodag.jp/xiao-guo-de-naunittest-mataha-callfutnomi-mi.html https://tell-k.github.io/djangocongressjp2018

Slide 21

Slide 21 text

1Z$PO+1Ͱͷςετʹؔ͢ΔτʔΫ ɾQZUFTUʹΑΔ$*ϨϘϦϡʔγϣϯ ɾVOJUUFTUͰ࢝ΊΔϢχοτςετೖ໳ ɾ1ZUIPOΛ࢖ͬͨ"1*αʔόʔ։ൃΛ࢝ΊΔࡍʹ੔උͨ͠$* ͱςετػߏ https://speakerdeck.com/abenben/pytestniyorucireboriyusiyon https://docs.google.com/presentation/d/1F0fkcbuuQBCbVDLD2v8YQlMOqEMnF_PpI2AAR5nwhfI https://speakerdeck.com/hgsgtk/python-api-ci-test Ϣχοτςετͷॻ͖ํ

Slide 22

Slide 22 text

3. ܧଓతΠϯςάϨʔγϣϯ Ϣχοτςετͷ࣮ߦ΍ΧόϨοδͷܭଌΛࣗಈԽ͠ܧଓతʹ࣮ߦ͢Δ ΧόϨοδ͸ৗʹՄࢹԽͰ͖ΔΑ͏ʹ͢Δ ΠϯϑϥCIͷϓϩηεʹैͬͯ࡞ۀΛߦ͏͜ͱͰɺ Ұఆͷ඼࣭͕୲อ͞Εɺ৘ใڞ༗ͷํ๏͕ඪ४Խ͞Εɺ ैདྷͱ͸ൺֱͰ͖ͳ͍΄Ͳ࡞ۀͷޮ཰Խ͕࣮ݱͰ͖·͢ɻ `` l

Slide 23

Slide 23 text

ઌʹςετΛॻ͘จԽ ͋ͱͰॻ͍ͨςετ͸๷ޚͳͷͩɻઌʹॻ͘ςετ͸߈ܸͰ͋Δɻ ͋ͱͰॻ͘ςετ͸ɺίʔυΛॻ͍ͨਓ΍໰୊ͷղܾํ๏Λ஌͍ͬͯ Δਓ͕ॻ͘΋ͷͩɻ͜͏ͨ͠ςετ͸ɺઌʹॻ͘ςετ΄ͲӶ͍΋ͷ Ͱ͸ͳ͍ɻ `` l ςετ͸ͦͷͱ͖ʹॻ͘ͷ͕࠷΋ίετ͕௿͍ɻޙճ͠ʹ͠ͳ͍ɻ ςετΛॻ͘ϝϦοτΛڞ༗͠ɺςετ΍ΧόϨοδΛ$*ʹ૊ΈࠐΈ࢓૊ΈԽ͢Δ͜ͱͰ ઌʹςετΛॻ͘จԽΛ࡞Δɻ

Slide 24

Slide 24 text

4. αʔυύʔςΟϥΠϒϥϦͷબఆ ґଘ͍ͯ͠ΔαʔυύʔςΟ͕ҠߦͷதͰ΋େ͖ͳোนʹͳΓ͏Δ ґଘ͍ͯ͠ΔαʔυύʔςΟͷ਺͕ଟ͍΄ͲҠߦͷϦεΫ͕ߴ͘ίετ ΋ߴ͍ αʔυύʔςΟΛಋೖ͢Δҙࢥܾఆ͸৻ॏʹ ɾඪ४ϥΠϒϥϦͰ͸ղܾͰ͖ͳ͍ͷ͔ ɾαʔυύʔςΟҎ֎ͰղܾͰ͖Δํ๏͸ͳ͍ͷ͔

Slide 25

Slide 25 text

ͦΕͰ΋ಋೖ͍ͨ͠ʂ ͲͷαʔυύʔςΟ͕Α͍ͷ͔ɺࠓޙ΋ϝϯςφϯε͞Εଓ͚Δݟࠐ Έ͸͋Δͷ͔൑அ͢Δ ɾ௚ۙͷϦϦʔε͸͍͔ͭ ɾͲΕ͘Β͍ͷස౓ͰϦϦʔε͞Ε͍ͯΔ͔ ɾίϛολʔ΍ίϯτϦϏϡʔλʔͷਓ਺͸Կਓ͔ ɾͲΕ͘Β͍ར༻͞Ε͍ͯΔͷ͔ʢ1F1Zʣ ɾελʔ਺

Slide 26

Slide 26 text

5. αʔυύʔςΟͷΞοϓάϨʔυࣗಈԽ ɾόʔδϣϯΞοϓͷ1VMMΛࣗಈͰ࡞੒ͯ͘͠ΕΔ ɾςετͷ$*͕ߏஙͰ͖͍ͯΕ͹$*͕ύεͨ͠Βجຊతʹ͸Ϛʔδ͢Ε͹ Α͍͚ͩ ɾϝδϟʔόʔδϣϯͷΞοϓάϨʔυ͸ςετ͕ύε͍ͯͯ͠΋ؾΛ͚ͭΔ ҰؾʹόʔδϣϯΛ্͛Δͷ͸ϦεΫ͕ߴ͍ ৺ཧతͳෛ୲΋େ͖͍ͷͰ୭΋΍Γͨ͘ͳ͍͞Βʹ์ஔ͞ΕΔͱ͍͏ѱ॥؀ ೔ʑίπίπͱ্͚͛ͭͮΔ͜ͱ͕ॏཁ

Slide 27

Slide 27 text

5. αʔυύʔςΟͷΞοϓάϨʔυࣗಈԽ ɾ%FQFOEBCPU ೥ʹ(JU)VCʹങऩ͞Εͨ"VUPNBUFEEFQFOEFODZVQEBUFTαʔϏε 1JQFOW 1PFUSZ SFRVJSFNFOUTUYUΛαϙʔτ ɾ3FOPWBUF #JUCVDLFU (JU-BC΋αϙʔτ https://dependabot.com/ https://renovate.whitesourcesoftware.com/

Slide 28

Slide 28 text

Python3ҠߦͰͷڭ܇ όʔδϣϯΞοϓΛεϙοτͷ࡞ۀͱଊ͑ͳ͍ ܧଓతͳऔΓ૊ΈΛߦ͏͜ͱͰҠߦͷϦεΫ΋ίετ΋Լ͛Δ

Slide 29

Slide 29 text

ࢀߟจݙ ɾ1PSUJOH1ZUIPO$PEFUP1ZUIPO ɾ"VUPNBUJDDPOWFSTJPOUP1Z https://docs.python.org/3/howto/pyporting.html http://python-future.org/automatic_conversion.html