Upgrade to Pro — share decks privately, control downloads, hide ads and more …

メドレー開発部TechLunch メタプログラミングRuby入門

メドレー開発部TechLunch メタプログラミングRuby入門

メドレー開発部TechLunchで発表した内容を掲載しました。

メドレーで開発部では、隔週で社内勉強会が開かれています。
今回は、「メタプログラミングRuby入門」というタイトルで発表し、社内のエンジニアのRubyに対する知見を深めることを目指しました。

発表者:後藤 拓馬

参考図書:
メタプログラミングRuby
https://www.oreilly.co.jp/books/9784873117430/

D879794ea42768ea417f970914430d56?s=128

Medley Inc.

March 14, 2017
Tweet

More Decks by Medley Inc.

Other Decks in Technology

Transcript

  1. ҩྍϔϧεέΞ෼໺ͷ՝୊Λղܾ͢Δ ޙ౻ɹ୓അ ϝυϨʔ։ൃ෦5FDI-VODI
 ϝλϓϩάϥϛϯά3VCZೖ໳ גࣜձࣾϝυϨʔ

  2. ޙ౻ɹ୓അ ✓ גࣜձࣾϝυϨʔ ✓ גࣜձࣾ"$$&44 w δϣϒϝυϨʔͷΤϯδχΞ w झຯ͸εʔύʔમ౬ @takuma510

  3.  ࠓճͷλʔήοτɾΰʔϧ cλʔήοτ cΰʔϧ ✓ 3P3͸ීஈ৮͍ͬͯͯ͋Δఔ౓3VCZ͸͔͚Δ ✓ पΓͷίʔυݟͯͦΕͬΆ͘ಈ͘ίʔυ͸͔͚Δ ✓ 3VCZͰͷϝλϓϩάϥϛϯά͸͋·ΓΑ͘஌Βͳ͍

    ✓ 3VCZͷΦϒδΣΫτϞσϧʹ͍ͭͯཧղ͢Δ ✓ #BTJD0CKFDUNFUIPE@NJTTJOHʹ͍ͭͯཧղ͢Δ ✓ ීஈ࢖͍ͬͯΔHFNΛਂ͘ཧղͯ͠࢖͍͜ͳͤΔΑ͏ʹͳΔʢ͸ͣʣ ✓ ΑΓ3VCZͷݴޠಛੑΛੜ͔ͨ͠ίʔυΛॻ͚ΔΑ͏ʹͳΔʢ͸ͣʣ ✓ ϝλϓϩάϥϛϯά3VCZຊΛಡΈͨ͘ͳΔʢ͸ͣʣ
  4. ͳͥ3VCZͰϝλϓϩάϥϛϯάʁ 3VCZͰϝλϓϩάϥϛϯάΛษڧ͢Δ͜ͱͷϝϦοτʹ͍ͭͯ

  5.  ࠓճ࿩͢͜ͱɾ࿩͞ͳ͍͜ͱ c࿩͢͜ͱ c࿩͞ͳ͍͜ͱ ✓ 3VCZͷΦϒδΣΫτϞσϧʹ͍ͭͯ ✓ ΫϥεɺϞδϡʔϧɺΠϯελϯεม਺ɺʢಛҟΫϥεʣ ✓ ϝιου୳ࡧ

    ✓ #BTJD0CKFDUNFUIPE@NJTTJOHΛ༻͍࣮ͨྫ ✓ HIFFHFN ✓ ϝλϓϩάϥϛϯάͦͷ΋ͷʹ͍ͭͯ ✓ FWBM଒ ✓ ,FSOFMFWBM #BTJD0CKFDUJOTUBODF@FWBM ౳ʑ ✓ ϑοΫϝιου ✓ $MBTTJOIFSJUFE .PEVMFJODMVEFE ౳ʑ
  6.  ϝλϓϩάϥϛϯάͱ͸ʜ cίʔυΛهड़͢Δίʔυ l.FUBQSPHSBNNJOHJTBQSPHSBNNJOHUFDIOJRVFJOXIJDIDPNQVUFS QSPHSBNTIBWFUIFBCJMJUZUPUSFBUQSPHSBNTBTUIFJSEBUB*UNFBOTUIBUB QSPHSBNDPVMECFEFTJHOFEUPSFBE HFOFSBUF BOBMZTFPSUSBOTGPSNPUIFS QSPHSBNT BOEFWFONPEJGZJUTFMGXIJMFSVOOJOHz8JLJQFEJB

    FO ΑΓ c੩తϝλϓϩάϥϛϯά ίʔυδΣωϨʔλʔ΍ίϯύΠϥΛ࢖ͬͨ΋ͷ cಈతϝλϓϩάϥϛϯά ࣮ߦ࣌ʹࣗ෼ࣗ਎Λૢ࡞͢Δɻ+BWBͰ+7.ͷόΠτίʔυΛૢ࡞͢Δ౳ ˞ϝλϓϩάϥϛϯά3VCZͷݴ༿ͷఆٛΛ༻͍͍ͯ·͢
  7.  ͳͥ3VCZͰͷϝλϓϩάϥϛϯάΛֶश͢Δͷ͔ lҰݟ͢ΔͱͱΒ͑Ͳ͜Ζ͕ͳ͍3VCZͷෳࡶ ͳಈ࡞΋ɺಥ͖٧ΊΕ͹͍͔ͭ͘ͷ؆୯ͳϧʔ ϧʹԊͬͨ΋ͷͰ͋Δɻϝλϓϩάϥϛϯά Λֶश͢Ε͹ɺ3VCZͱ஥ྑ͘ͳΓɺϧʔϧ͕ ཧղͰ͖ΔΑ͏ʹͳΓɺʜz
 ൈਮɿ1BPMP1FSSPUUBϝλϓϩάϥϛϯά 3VCZୈ൛

  8. None
  9. 3VCZͷΦϒδΣΫτϞσϧ 3VCZͷݴޠཁૉΛཧղ͢Δ

  10.  ΦϒδΣΫτϞσϧʁ cݴޠཁૉ͕ଘࡏ͍ͯ͠ΔγεςϜ ✓ ݴޠཁૉͱ͸ɺΫϥεɺϞδϡʔϧɺΠϯελϯεม਺ͳͲ ✓ ϝλϓϩάϥϛϯά͸͜͏ͨ͠ݴޠཁૉΛૢ࡞͢Δ΋ͷ ✓ ʮ͜ͷϝιου͸ͲͷΫϥεʹॴଐ͢Δ΋ͷͳͷ͔ʁʯʮ͜ͷϞδϡʔϧΛΠϯ Ϋϧʔυͨ͠ΒԿ͕ى͖Δͷ͔ʯͱ͍࣭ͬͨ໰ͷ౴͕͑ݟ͔ͭΔ৔ॴ

    ˞ϝλϓϩάϥϛϯά3VCZͷݴ༿ͷఆٛΛ༻͍͍ͯ·͢
  11.  Πϯελϯεม਺ 㾎 3VCZͷΦϒδΣΫτͷΫϥεͱΠϯελϯεม਺ʹ͸Կ΋ؔΘΓ͕ͳ͍

  12.  ϝιου ˞ϝλϓϩάϥϛϯά3VCZΑΓҾ༻

  13.  ϝιουͱΠϯελϯεϝιου 㾎 Ϋϥεʹண໨͢Δͱ͖͸Πϯελϯεϝιου 㾎 ΦϒδΣΫτʹண໨͢Δͱ͖͸ϝιου

  14.  Ϋϥε Ϋϥε͸ΦϒδΣΫτͰ͋Δɻ

  15.  $MBTTΫϥε 㾎 ͓ͳ͡ΈͷOFXϝιου͸$MBTTΫϥεͷΠϯελϯεϝ ιου 㾎 ΦϒδΣΫτ͸ࣗ਎ͷΫϥεͷࢀরΛ࣋ͭ 㾎 4USJOHΫϥεΦϒδΣΫτͷΫϥε͸$MBTTΫϥε

  16.  3VCZͷΫϥε֊૚ 㾎 #BTJD0CKFDUΫϥε͸3VCZͷΫϥε֊૚ͷϧʔτ 㾎 0CKFDUΫϥεʹ֤ΦϒδΣΫτڞ௨ͷॾʑͷϝιου͕ఆٛ ͞Ε͍ͯΔ

  17.  Ϟδϡʔϧ 㾎 $MBTTΫϥεͷ਌Ϋϥε͸.PEVMF 㾎 JODMVEF΍BODFTUPST΋.PEVMFͷΠϯελϯεϝιου

  18.  ུ֓ਤ ˞ϝλϓϩάϥϛϯά3VCZΑΓҾ༻

  19.  ϝιουݺͼग़͠ cϝιουݺͼग़͠Λͨ͠ࡍʹ3VCZ͕΍͍ͬͯΔ͜ͱ ✓ ϝιουΛ୳͢ɻ͜Ε͸ϝιου୳ࡧͱݺ͹ΕΔ ✓ ϝιουΛ࣮ߦ͢Δɻ͜Εʹ͸TFMGͱݺ͹ΕΔ΋ͷ͕ඞཁ

  20.  ϝιου୳ࡧ ˞ϝλϓϩάϥϛϯά3VCZΑΓҾ༻ wϨγʔόɿݺͼग़͢ϝιου͕ଐ͢ΔΦϒδΣΫτ wܧঝνΣʔϯɿDMBTTTVQFSDMBTT

  21.  ϝιου୳ࡧͱϞδϡʔϧ

  22.  ϝιου୳ࡧͱϞδϡʔϧ ˞ϝλϓϩάϥϛϯά3VCZΑΓҾ༻

  23.  ϝιουͷ࣮ߦ ˞ϝλϓϩάϥϛϯά3VCZΑΓҾ༻ 㾎 ϝιου୳ࡧͰͨͲΓண͍ͨઌͷఆ͕ٛ͜Εͩͬͨ 㾎 !YͱNZ@PUIFS@NFUIPE͸Ͳ͏͢Ε͹ྑ͍͔ 㾎 Ϩγʔό͕!Y΋NZ@PUIFS@NFUIPE UFNQ

    ΋஌͍ͬͯ Δ 㾎 ϨγʔόͷࢀরΛ3VCZ͸஌Βͳͯ͘͸ͳΒͳ͍TFMG
  24.  ϝιουݺͼग़͠ʢ·ͱΊʣ cϝιουݺͼग़͠Λͨ͠ࡍʹ3VCZ͕΍͍ͬͯΔ͜ͱ ✓ ϝιουΛ୳͢ɻ͜Ε͸ϝιου୳ࡧͱݺ͹ΕΔ ✓ ʮҰาӈ΁ɺͦΕ͔Β্΁ʯͷϧʔϧʹैͬͯϝιουΛ୳͢ ✓ ϝιουΛ࣮ߦ͢Δɻ͜Εʹ͸TFMGͱݺ͹ΕΔ΋ͷ͕ඞཁ ✓

    ϝιου͕ݟ͔ͭΔͱɺϨγʔόΛTFMGʹͯ͠ϝιουΛݺͼग़͢
  25.  ʢิ଍ʣಛҟϝιου 㾎 NZ@NFUIPE@͸Ͳ͜ʹ͍ΔͰ͠ΐ͏

  26.  ʢิ଍ʣಛҟϝιουɾಛҟΫϥε 㾎 NZ@NFUIPE@͸PCKͷಛҟΫϥεʢγϯάϧτϯΫϥεʣʹ

  27.  ʢิ଍ʣಛҟϝιουɾಛҟΫϥε

  28.  ʢิ଍ʣಛҟΫϥε ˞ϝλϓϩάϥϛϯά3VCZΑΓҾ༻

  29.  ʢิ଍ʣେ౷Ұཧ࿦ c3VCZΦϒδΣΫτͷͭͷϧʔϧ ✓ ΦϒδΣΫτ͸छྨ͔͠ͳ͍ɻͦΕ͕௨ৗͷΦϒδΣΫτ͔ϞδϡʔϧʹͳΔɻ ✓ Ϟδϡʔϧ͸छྨ͔͠ͳ͍ɻͦΕ͕௨ৗͷϞδϡʔϧɺΫϥεɺಛҟΫϥεͷ͍ͣ Ε͔ʹͳΔɻ ✓ ϝιου͸छྨ͔͠ͳ͍ɻϝιου͸Ϟδϡʔϧʢେ൒͸ΫϥεʣʹॅΜͰ͍Δɻ

    ✓ ͢΂ͯͷΦϒδΣΫτ͸ʢΫϥε΋ؚΊͯʣʮຊ෺ͷΫϥεʯΛ͍࣋ͬͯΔɻ ✓ ͢΂ͯͷΫϥε͸ʢ#BTJD0CKFDUΛআ͍ͯʣͻͱͭ૆ઌʢεʔύʔΫϥε͔Ϟδϡʔ ϧʣΛ͍࣋ͬͯΔɻͭ·Γɺ͋ΒΏΔΫϥε͕#BTJD0CKFDUʹ޲͔ͬͯຊͷܧঝν ΣʔϯΛ͍࣋ͬͯΔɻ ✓ ΦϒδΣΫτͷಛҟΫϥεͷεʔύʔΫϥε͸ΦϒδΣΫτͷΫϥεͰ͋ΔɻΫϥ εͷಛҟΫϥεͷεʔύʔΫϥε͸ΫϥεͷεʔύʔΫϥεͷಛҟΫϥεͰ͋Δ ✓ ϝιουΛݺͼग़͢ͱ͖͸ɺ3VCZ͸Ϩγʔόͷຊ෺ͷΫϥεʹ޲͔ͬͯʮӈ΁ʯਐ ΈɺܧঝνΣʔϯΛʮ্΁ʯਐΉɻ ˞ϝλϓϩάϥϛϯά3VCZΑΓҾ༻
  30. ϝιουΛఆٛ͢ΔίʔυΛॻ͘ NFUIPE@NJTTJOHͱͦΕΛ࢖ͬͨHFNͷίʔυ঺հ

  31.  #BTJD0CKFDUNFUIPE@NJTTJOH 㾎 3VCZ͸UBML@TJNQMFϝιουΛܧঝνΣʔϯʹԊͬͯ୳͢ 㾎 3VCZ͸UBML@TJNQMFϝιου͕ݟ͔ͭΒͳ͔ͬͨͷͰOJDLΦϒδΣΫτΛϨγʔό ͱͯ͠NFUIPE@NJTTJOHΛݺͼग़͢ 㾎 3VCZ͸NFUIPE@NJTTJOHϝιουΛܧঝνΣʔϯʹԊͬͯ୳͢ 㾎

    3VCZ͸#BTJD0CKFDUNFUIPE@NJTTJOHʹͨͲΓண͖ɺྫ֎Λ౤͛Δ
  32.  NFUIPE@NJTTJOHͷΦʔόʔϥΠυ 㾎 #BTJD0CKFDUNFUIPE@NJTTJOH͕ݺͼग़͞ΕΔલʹࣗલͷॲཧΛ ௥Ճ͢Δ͜ͱ͕Ͱ͖Δ 㾎 <஫ҙ>ຊདྷ͸0CKFDUSFTQPOE@UP ͕ਅΛฦ͢Α͏ʹ࣮૷͢΂͖ 㾎 ͜Μͳײ͡ͰNFUIPE@NJTTJOHΛΦʔόʔϥΠυ͢Δͱ

  33.  0QFO4USVDU 㾎 0QFO4USVDUͷΠϯελϯεʹରͯ͠ະఆٛͳϝιουGPPΛݺͿͱ 0QFO4USVDUNFUIPE@NJTTJOHͰัଊ͞ΕΔ 㾎 ัଊ͞ΕͨΠϯελϯεʹΠϯελϯεϝιουGPP GPP͕ఆٛ͞ΕΔ 㾎 ͜ͷڍಈʹΑͬͯཁૉΛಈతʹมߋతͰ͖Δߏ଄ମͱͯ͠ಇ͘

  34.  (IFFHFN (JUIVC"1*Λૢ࡞͢ΔϥΠϒϥϦ HFNJOTUBMMHIFFW HFNVOQBDLHIFFW

  35.  (IFFHFN cར༻ྫ 㾎 OVTDPͷHJTUҰཡΛऔಘͯͦ͠ͷதͷҰͭͷVSMͱEFTDSJQUJPOΛ֬ೝ 㾎 TUBSΛ͚ͭΔ

  36.  (IFFHFN

  37.  (IFFHFN 㾎 ֤"1*ຖʹ1SPYZΫϥεΛఆٛͦ͠ ΕͧΕͷΠϯελϯεͰ QBUI@QSFpYΛ࣋ͭ 㾎 3FTPVSDF1SPYZTVCKFDUͰ QBUI@QSFpYʹԠͨ͡"1*QBUIͷ +40/SFTQPOTFΛ࣋ͭ

    㾎 ͜ͷ+40/SFTQPOTFΛಛघͳ)BTI ʢ)BTIJF.BTIʣͰอ࣋ͯ͠Ξτ ϦϏϡʔτΞΫηεͰ͖Α͏ʹ͢Δ 㾎 ֎෦"1*ͷ+40/SFTQPOTFͷ݁Ռ औಘϝιουΛಈతʹϝιου VSM ͱ͔ Ͱఆٛ
  38.  (IFFHFN

  39.  (IFFHFN cHIFFMJCHIFFBQJVTFSTSC

  40.  (IFFHFN cHIFFMJCHIFFBQJVTFSTSC

  41.  (IFFHFN cHIFFMJCHIFFSFTPVSDF@QSPYZSC

  42.  (IFFHFN cHIFFMJCHIFFBQJHJTUTSC

  43. ·ͱΊ

  44.  ·ͱΊ c3VCZͷΦϒδΣΫτϞσϧ 3VCZͷݴޠཁૉͱϝιου࣮ߦͷ࢓૊ΈͷཧղΛਂΊͨɻ cNFUIPE@NJTTJOH ϝιου୳ࡧͷ࢓૊Έͷ্ʹཱͭNFUIPE@NJTTJOHΛཧղ͠ɺͦΕΛ࢖ͬͨHFNͷ ίʔυΛಡΈਐΊͨɻ cϝλϓϩάϥϛϯά3VCZຊΦεεϝ ࠓ೔঺հͨ͠಺༰͸΄΅ϝλϓϩάϥϛϯά3VCZຊ͔Βഈआ͍ͯ͠Δɻ͜ͷ΄͔ ʹ΋είʔϓͷ࿩΍FWBMͷ࿩౳ɺͨΊʹͳΔ಺༰ΛΘ͔Γ΍͘͢ղઆ͍ͯ͠ΔͷͰ

    Φεεϝɻ