RubyからPHPへ -エンジニアのための思考移行ガイド-

Cecbcb223526079b30493a8c4f946f42?s=47 kuromatu
September 14, 2013

RubyからPHPへ -エンジニアのための思考移行ガイド-

社会人になって幸運にも4年間Ruby + Ruby on Railsを使った開発に慣れ親しんだ後に、 PHPを使った歴史あるシステムに2年間携わってきました。 その中で、
* RubyからPHPを使うようになってどう考えが変わったか
* RubyとPHPの両方を見れて良かったこと
* 今後RubyからPHPへ移行する方々へのメッセージ
をお話します。

Cecbcb223526079b30493a8c4f946f42?s=128

kuromatu

September 14, 2013
Tweet

Transcript

  1. Ruby͔Β PHP΁ @kuromatu ൃද -ΤϯδχΞͷͨΊͷࢥߟҠߦΨΠυ-

  2. ͸ͳ͢ͻͱ • ຀໺༟೭ʢ@kuromatuʣ • גࣜձࣾVOYAGE GROUP ECφϏॴଐ • ΤϯδχΞ7೥໨ʢRuby4೥ɺPHP2೥ʣ •

    ήʔϚʔʢఏಜɺङਓɺͳͲͳͲʣ
  3. ΤϯδχΞͱͯ͠Ͳ͏Αʁ • ࣾձਓʹͳ͔ͬͯΒຊ֨తʹϓϩάϥϛϯά Λ࢝Ί·ͨ͠ • ൃදͰ͖ΔΑ͏ͳେͦΕͨ͜ͱ͸΍ͬͯͳ͍ ͚Ͳɺͦͦ͜͜ͷ͓࢓ࣄΛ͖ͯͨͭ͠΋Γ • ߴͦ͏Ͱߴ͘ͳ͍গ͠ߴ͍ҙࣝ

  4. Ruby(Rails)ͷ͓͠͝ͱྺ • SNSύοέʔδɾडୗ։ൃ(Rails1.2)Λ2೥ؒ • ๭өըϝσΟΞαΠτ(Rails2.2)Λ2೥ؒ • Rubyόʔδϣϯ͸1.8.6 / 1.8.7

  5. PHPͷ͓͠͝ͱྺ • ECφϏ(PHP5)Ͱ3೥໨ɻ৭ʑͱ΍ͬͯ·͢ ࠓ͸ࣗࣾϙΠϯτίϯςϯπ෦໳୲౰ ϨΨγʔίʔυ -> ΦϨΦϨϑϨʔϜϫʔΫ Ͱͷ࠶ߏங͕࠷ۙͷओͳ͓͠͝ͱ

  6. ͜ͷτʔΫͷͬ͘͟Γ಺༰ • ৽ଔ͔Β࢓ࣄͰRubyɾRuby on RailsͰ։ൃ͠ ͯࢥͬͨ͜ͱɺ᩵୔ͳ೰Έ • ྺ࢙͋ΔPHP੡αʔϏεʹܞΘΓࢥͬͨ͜ͱ • ʲຊ୊ʳPHPʹܞΘΔํʑʹݴ͍͍ͨ͜ͱ

  7. ͜ͷτʔΫΛฉ͍ͯ΄͍͠ਓ • Ruby౳ͷΑ͘ग़དྷͨݴޠ͔ΒPHPʹҠͬͨਓ • Pͷͭ͘ݴޠʹܞΘΔͷʹগ͠ർΕͨํ • ຾͍ਓɺ΅ʔͬͱ͍ͨ͠ਓ • Ϟϯϋϯ4Λ΍Γ͍ͨਓʢ΍ͬͯ΋͍͍Ͱ͢ʣ

  8. session_start();

  9. ৽ଔ͔ΒRubyͰ

  10. Railsͷ্ͷ։ൃ

  11. Railsͷ্ͷ։ൃ • ؀ڥ͸ࠓఔܙ·Εͯͳ͍͚ͲRubyͳͷͰշద • RailsͷίΞ͕೉ͯ͘͠Α͘Θ͔Μͳ͍ • Rails͔Β֎Εͨ͜ͱ͸͋·Γ΍ͬͯͳ͍ • ઃܭ͢ΔԼ஍͕ແ͍ɾςετ͕ແ͍ͷͰɺ Ϟσϧ΋ίϯτϩʔϥ΋Ϗϡʔ΋Ԛ͍͜ͱ…

  12. Railsͷ্ͷ։ൃ • ৽ଔ΍Rails࢖ͬͨ͜ͱແ͍ਓ͕ଟΊͰɺ׆ ༻ɾઃܭʹशख़ͨ͠ΤϯδχΞͱͷ࡞ۀ͸๬ Έʹ͍͘ঢ়گʹ͋ͬͨ • ΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭͰ ݴ͏ʮརޱͳUIʯʹͳΓ͕ͪͩͬͨ ->ϏδωεϩδοΫΛUIʹͿͪ͜Ή΍Γํ

  13. Rails࢖͍ͬͯͯ͜͏ࢥͬͨ • 2+2=4೥ಇ͍ͯRubyɾRails͸ͦͦ͜͜Θ͔ͬ ͚ͨͲɺଞͷٕज़ͱൺֱ͍ͨ͠ΑͶ • θϩ͔Βઃܭ࣮ͯ͠૷Ͱ͖ΔΑ͏ʹͳΓ͍ͨ • ͪΌΜͱςετॻ͍࣮ͯ૷͍ͨ͠ • ΋͏ͪΐͬͱۤ࿑ͨ͠ํ͕͍͍Μ͡Όͳ͍͔

  14. ͱ͍͏Θ͚Ͱɺ ྺ࢙͋ΔPHP੡αʔϏεͷ ͋Δձࣾʹస৬͠·ͨ͠ɻ

  15. RailsΛ߱ΓͯPHP΁

  16. Θ͔ͬͯ͸͍͚ͨͲPHP͸ • ؔ਺͕ΞϨͩ͠ଟ͖֮͗ͯ͑͢Εͳ͍ (php.netͱstackoverflow.com͕ແ͍ͱ٧Ή) • ௚ײɾ੎͍ɾߟ͑Λίʔυʹ൓ө͠ʹ͍͘ ൓ө͢Δ·Ͱʹ͕͔͔࣌ؒΓ͗͢Δ

  17. ϓϩμΫτ΋݁ߏେม • ྺ࢙ -> Ҩ࢈ -> ϨΨγʔίʔυ • ΦϨΦϨϑϨʔϜϫʔΫɺSymfony1ܥɺૉͷ PHPʹحົͳໟ͕ੜ͑ͨΑ͏ͳ΋ͷɺetc...

    • །ҰΦϨΦϨϑϨʔϜϫʔΫ͕Ұ൪·ͱ΋ͳͷ ͰɺͦΕʹ౷Ұ͍͖ͯͬ͘͠Όͳ͍
  18. ͜͏͍͏ΞϓϩʔνΛऔͬͨ • ૉ๿ͳ࡞ΓͷΦϨΦϨϑϨʔϜϫʔΫ͕Ұ௨Γ ͷػೳΛ͍࣋ͬͯͨͷͰɺͦΕΛ֦ு͠࢖͏ • ݴޠ΋طଘίʔυ΋੍໿ͩΒ͚Ͱઃܭେࣄʹ • ୯ମςετʢPHPUnit + PhakeʣΛॻ͍ͯ͘

    • දࣔ֬ೝ͸͓޷͖ʹʢthor + selenium, etcʣ
  19. Ͱ΋Rails࢖ͬͯ͜͏ࢥͬͯͨ • 2+2=4೥ಇ͍ͯRubyɾRails͸ͦͦ͜͜Θ͔ͬ ͚ͨͲɺଞͷٕज़ͱൺֱ͍ͨ͠ΑͶ • θϩ͔Βઃܭ࣮ͯ͠૷Ͱ͖ΔΑ͏ʹͳΓ͍ͨ • ͪΌΜͱςετॻ͍࣮ͯ૷͍ͨ͠ • ΋͏ͪΐͬͱۤ࿑ͨ͠ํ͕͍͍Μ͡Όͳ͍͔

  20. ࠓͷ͓͠͝ͱ͔ΒݟΔͱ • RubyɾRailsҎ֎ͷٕज़ͱൺֱ͍ͨ͠ => OK • θϩ͔Βઃܭ࣮ͯ͠૷ => OK •

    ͪΌΜͱςετॻ͍࣮ͯ૷͢Δ => OK • ΋͏ͪΐͬͱۤ࿑͢Δ => OK
  21. ๬Μͩ௨Γ͡Όͳ͍͔ʂ

  22. ͦΕʹ͜Μͳ͍͍͜ͱ΋͋Δ • ݴޠͱΦϨΦϨϑϨʔϜϫʔΫͷ੍໿্ɺૉ๿ ͳ࡞Γʹͤ͟ΔΛಘͳ͍ ->νʔϜͱͯ͠͸ίʔυڞ༗͠΍͍͢ • WebΞϓϦέʔγϣϯͷجૅ͔Βߟ͑௚ͤΔ

  23. ͦΕʹ͜Μͳ͍͍͜ͱ΋͋Δ • ෆ۩߹ʹख͔ͭͣͷ؅ཧը໘Λͪΐ͍ͱ࡞Γ ௚͚ͨͩ͠Ͱӡ༻ෛՙେ෯ܰݮ -> େײँ • ػೳͱͯ͠͸े෼ͳͷʹ௨஌͕଍Γͯͳ͍ͷ Ͱγϯϓϧͳ௨஌ػೳ௥Ճ ->

    PVര্͛ • ϨΨγʔίʔυ͕ແ͘ͳͬͨͱ͖ͷṖͷײಈ
  24. ͱ͍͏Θ͚Ͱ·ͱΊ • Ruby͔ΒPHPʹҠ͍͍ͬͯษڧʹͳͬͯΔ • ྲྀߦͷٕज़ʹ௥͍ͭ͘ͷ΋େࣄ͚ͩͲɺͦΕ ΛטΈࡅ͍ͯཧղ͢ΔϑΣʔζ΋େࣄͩΑ • ݹͯ͘ݱ໾ͳϏδωεϩδοΫΛ͍͍ײ͡ʹ ॻ͖׵͑Δ͓࢓ࣄ͸Ձ஋͕͋ΔΑ

  25. ͱ͍͏ɺ ݸਓతͳ;Γ͔͑ΓͰͨ͠ɻ

  26. ʲຊ୊ʳ PHPʹܞΘΔΑ͏ʹ ͳͬͨ OR ͳΔํʑʹ ݴ͍͍ͨ͜ͱ

  27. ʲ݁࿦ʳ PHP͸΍ͬͺΓ࢖͍ʹ͍͘ Ϟνϕʔγϣϯ͕Լ͕Δͷ͸ ͠ΐ͏͕ͳ͍ʂ

  28. Ϟνϕʔγϣϯ͸ ߟ͑ํΛม͑Ε͹OK • ࢹ఺Λม͑Α͏ • ϏδωεΛֶ΅͏ • ਓΛ஌Ζ͏ • PHPΛ࠶ධՁ͠Α͏

  29. ࢹ఺Λม͑Α͏ • ϐϯν͸νϟϯε • ίʔυ͕Ԛ͗ͯ͢ϝϯςͰ͖ͳ͍ʁςετΛ ॻ͍ͯϦϑΝΫλϦϯά͢Δͱ͖ͩʂ • ͍ͭͰʹઃܭΛֶͿઈ޷ͷػձͰ͢

  30. ࢹ఺Λม͑Α͏ • ࢓ࣄͰ΋ͳ͍ͱઃܭͱֶ͔͹ͳ͍Ͱ͠ΐʂ • ר͖ࠐ·Εܕͷड͚਎ମ࣭ͩͬͨΓɺՆٳΈ ͷ॓୊Λ࠷ऴ೔ʹ΍Δਓؒʹ͸͍͍͔΋ • ҙࣝͷߴ͍օ͞Μ͝ΊΜͳ͍͞

  31. ϏδωεΛֶ΅͏ • ϓϩάϥϛϯάͷ੒ޭ ≠ Ϗδωεͷ੒ޭ • ʲॏཁʳେଟ਺ͷਓʹͱͬͯେࣄͳͷ͸ίʔυ ϕʔεͰ͸ͳ͘Ϗδωε • ໨తͱखஈΛऔΓҧ͑ͪΌμϝ

    • ޿͘࢖ΘΕ͖ͯͨྺ࢙ͱݱঢ়͸ֶͿՁ஋͕͋Δ
  32. ਓΛ஌Ζ͏ • શһ͕ϓϩάϥϛϯάLOVEͳΘ͚͡Ό͋ͳ͍ • ҙࣝͷ௿͍ਓ΋౰વ͍Δ • ޷͖ͳϓϩάϥϛϯά≠ۚͷՔ͛Δϓϩάϥϛϯά ͱ͍͏ߟ͑ͷํ΋͍Δ • ൴Β൴ঁΒͷࢥ͍Λେࣄʹ͢Δͷ͸ɺؾ࣋ͪΑ͘

    ͓͠͝ͱ͢Δ্Ͱେࣄͳ͜ͱ
  33. PHPΛ࠶ධՁ͠Α͏ • PHP5.5͸͍ͩͿਐԽͨ͠ • ઃܭ΁ͷҙࣝɾऔΓ૊ΈΛධՁ͠Α͏ • SlimɺSymfony2ɺBEAR.SundayɺComposer • ֶशίετͷ௿͞͸νʔϜ։ൃͰͷϝϦοτ

  34. ͋ͱ͕͖

  35. Rubyist͕PHPΛDISΔͷ͸ ݟ๞͖ͨ͠΋͏΍ΊΑ͏Α • ͦ΋ͦ΋ྺ࢙ɾจ຺͕ҧ͏͜ͱΛߟྀ͠Α͏ • DisΔՋ͕ͳ͍͙Β͍ʹ͸ݟॴ͕͋Γ·͢Α • PHPΛ࢖ͬͯ΋ΩϨͳ͍͙Β͍ʹ͸͓͓Β͔ ͳؾ࣋ͪΛཆ͓͏

  36. ͓ΘΓ