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

mruby-2017-yeah

 mruby-2017-yeah

「ここまで出来るmruby」
builderscon Tokyo 2017

1b838da2065660793d5b26f2cdc32de7?s=128

Kazuhiko Yamashita

August 05, 2017
Tweet

More Decks by Kazuhiko Yamashita

Other Decks in Technology

Transcript

  1. !QZBNB(.01FQBCP *OD CVJMEFSTDPO5PLZP ͜͜·Ͱग़དྷΔNSVCZ

  2. None
  3. νʔϑςΫχΧϧϦʔυ ࢁԼ࿨඙!QZBNB ϗεςΟϯάࣄۀ෦ IUUQTUFOTOBQPODPN

  4. None
  5. -JOVYͷ౷߹Ϣʔβʔ؅ཧ 50.-ܗࣜ )551 +40/ -%"1΍%#ͷ؅ཧͷӡ༻ෛՙ ѻ͍΍͍͢ϑΥʔϚοτ ൚༻ੑɾ֦ுੑ

  6. Ͳ͜·Ͱग़དྷΔͷ  NSVCZ

  7. NSVCZͷಛ௃ ܰྔ3VCZ ૊ΈࠐΈ Մൖੑ

  8. ܰྔ3VCZ $ valgrind ruby -e 'puts “buildercon Tokyo 2017 Yeah!!!!”

    ==3537== HEAP SUMMARY: ==3537== in use at exit: 2,719,641 bytes in 23,303 blocks ==3537== total heap usage: 48,117 allocs, 8,876,176 bytes allocated $ valgrind mruby -e 'puts “buildercon Tokyo 2017 Yeah!!!!” ==3638== HEAP SUMMARY: ==3638== in use at exit: 0 bytes in 0 blocks ==3638== total heap usage: 4,468 allocs, 483,579 bytes allocated লϝϞϦ
  9. ܰྔ3VCZ $3VCZͱͷҧ͍ ૊ΈࠐΈ༻్ ඪ४ϞδϡʔϧɾΫϥε HFNNSCHFN 3FHFYQ΍'JMFͳͲNSVCZͰ͸֦ுѻ͍ OPHFNJOTUBMM

  10. ૊ΈࠐΈ লϝϞϦΛ׆͔ͯ͠ϛυϧ΢ΣΞ΁ ૊ΈࠐΈ NPE@NSVCZ OHY@NSVCZ "QBDIF)551%4FSWFSͷઃఆ΍τϥϑΟοΫΛNSVCZͰ੍ޚ NPE@NSVCZ૬౰ͷಈ࡞ΛOHJOYͰ࣮ݱ

  11. NPE@NSVCZ "QBDIF)551% mrubyFixupsFirst (ap_hook_fixups) mrubyLogTransactionLast (ap_hook_log_transaction) ɾ ɾ ɾ request

    *G.PEVMFNPE@NSVCZD NSVCZ'JYVQT'JSTUFUDIUUQEDPOGEIPPLSCDBDIF *G.PEVMF # hook.rb Apache.echo "hello world!" "QBDIFͷϑοΫΛར༻͠ɺNSVCZΛ࣮ߦ
  12. Մൖੑ ΫϩείϯύΠϧ ΦϖϨʔγϣϯπʔϧ NSVCZDMJ IUUQTHJUIVCDPNIPOFNSVCZDMJ

  13. NSVCZΛར༻ͨ͠։ൃ NSCHFN

  14. HFNͱNSCHFNͷҧ͍ ࢀর ಺แ ίϯύΠϧ ಈ࡞؀ڥ NSCHFN͸ίϯύΠϧ࣌ʹNSVCZʹ ૊ΈࠐΈ ϑΝΠϧγεςϜ͕ଘࡏ͠ͳ͍ಈ࡞؀ڥ΋ ͋ΔͨΊɺSFRVJSF΍MPBE͸ඪ४Ͱ͸ αϙʔτ֎

    gem CRuby CRuby mruby mrbgem
  15. NSCHFN SFRVJSF͕ͳͯ͘΋ϑΝΠϧΛ෼ׂͰ͖Δ ࠶ར༻ੑ ίϯύΠϧͰߟྀ͞ΕΔͷͰɺϑΝΠϧΛ෼ׂͯ͠؅ཧग़དྷΔ HFNͱߟ͑ํ͸ࣅ͍ͯΔ 3VCZ(FNTʹ͋ͨΔNHFNMJTU

  16. NSCHFNΛ։ൃ͢Δ ݴޠ͸3VCZ͔$ݴޠΛओʹར༻ 3VCZ ᶃ ܭࢉίετͷ௿͍ॲཧΛ
 ੜ࢈ੑߴ͘։ൃ ᶄ $ݴޠͰ։ൃͨ͠ΫϥεΛ
 ར༻ͨ͠ϏδωεϩδοΫ ᶃ

    ܭࢉίετͷߴ͍ॲཧΛ࣮૷ ᶄ γεςϜɾίʔϧ΍"1*Λར༻ $ݴޠ
  17. NSCHFNΛ։ൃ͢Δ NSVCZNSCHFNUFNQMBUF /mruby-builderscon |--mrblib | |—mrb_builderscon.rb |—Rakefile |--src | |--mrb_builderscon.c

    | |--mrb_builderscon.h |--test | |--mrb_builderscon.rb |--mrbgem.rake NSVCZͷ֦ுϞδϡʔϧͰ͋ΔNSCHFNͷςϯϓϨʔτΛࣗಈͰੜ੒͢ΔNSCHFN࡞ͬͨʯ IUUQCMPHNBUTVNPUPSKQ Q ਺ߦͷઃఆϑΝΠϧͰίʔυͷ਽ܗɺ ίϯύΠϧఆٛɺςετɺ3FBENFɺ ϥΠηϯεϑΝΠϧΛ࡞੒
  18. ͳͥ๻͸ɺNSVCZͳͷ͔

  19. NSVCZ͸ -JHIU-BOHVBHFͷ΋͏Ұาઌ΁ ΤϯδχΞΛ੒௕ͤ͞Δ

  20. $ݴޠ΍γεςϜϨΠϠʔͱͷ ग़ձ͍

  21. ࠶ܝ NSVCZͷಛ௃ ܰྔ3VCZ ૊ΈࠐΈ Մൖੑ

  22. NSVCZͷಛੑΛ׆͔͢ͳΒ ௿ϨΠϠʔ

  23. ΑΓਂ͘જΔͨΊʹ NSVCZTJHOBMUISFBE εϨουηʔϑͳ4JHOBMΫϥε ॲཧ͍ͨ͠γάφϧҎ֎ΛTJHNBTLͨ͠εϨουͰ
 TJHXBJU͢Δ 4QFDJBM5IBOLTIUUQTHJUIVCDPNLTTTNSVCZTJHOBM

  24. ΑΓਂ͘જΔͨΊʹ main thread(pid:X) signal thread kill -HUP X SignalThread.trap(:HUP) do

    configure.reload end reload ᶃγάφϧىಈ ᶄ)61γάφϧΛϝΠϯεϨουͷ1*%΁ૹΔ NSVCZTJHOBMUISFBE
  25. ΑΓਂ͘જΔͨΊʹ

  26. NSVCZ4ZNCPM hash = { key: “ઈର༏উ͢Δͧ” } LFZ͸ͲͷΑ͏ʹղܾ͞Ε͍ͯΔʁ

  27. ͦ͜ʹίʔυ͕͋Ε͹ ෼͔Εͳ͍͜ͱ͸Ұͭ΋ͳ͍

  28. NSVCZ͸௥͍΍͍͢ /mruby-builderscon |--mrblib | |—mrb_builderscon.rb |—Rakefile |--src | |--mrb_builderscon.c |

    |--mrb_builderscon.h |--test | |—mrb_builderscon.rb |--build_config.rb |--mruby CVJME@DPOpHSC NSVCZ 3VCZͷ%4-ͰNSVCZͷϏϧυઃఆ NSVCZͷιʔεҰࣜ .#  HJUIVCDPNNSVCZNSVCZ
  29. σόοάͷ͠΍͢͞ ࠷దԽఀࢭ NSVCZͱNSCHFNΛڥͳ͘σόοά DUBHTඞܞ DPOGDDqBHT0H

  30. HEC $ gdb mruby/bin/mruby (gdb) b mrb_sym2name (gdb) run example/builderscon.rb

    (gdb) p name $3 = 0x70d4b0 “Lazy” … (gdb) p mrb->symtbl[0] $6 = {lit = 1 '\001', len = 9, name = 0x474950 "inherited"} (gdb) p mrb->symtbl[1] $7 = {lit = 1 '\001', len = 12, name = 0x4748b2 "__attached__"} (gdb) p mrb->symtbl[2] $8 = {lit = 0 '\000', len = 11, name = 0x6c1e20 "BasicObject"}
  31. mrb->symtbl [0] name =>inherited [1] name => __attached__ … [10]

    name => Lazy … [31] name => USR1 NSVCZ4ZNCPM 4ZNCPM5BCMF mrb_value :USR1 => sym => 10
  32. OBNFUP@T

  33. ໰୊ͷઌૹΓΛಉ྅͕ϑΥϩʔ͢Δ νʔϜϓϨΠ͕ϖύϘʹ͸͋Γ·͢ SFGTIUUQTHJUIVCDPNNBUUONSVCZUISFBEQVMM

  34. NSCHFNͷσόοά͸ NSVCZͱͷͭͳ͕Γ͕ڧ͍ ͭ·Γ ݴޠ΁ͷཧղ͕ਂ·Δ

  35. 4&(7

  36. Նͷ෩෺ࢻηάϝϯςʔγϣϯϑΥʔϧτ ϝϞϦͷΞΫηεҧ൓ ม਺ॳظԽ࿙Ε Ṗόά

  37. CFGPSFNSVCZ

  38. BGUFSNSVCZ # gdb /usr/sbin/nginx core.11528 GNU gdb (GDB) Red Hat

    Enterprise Linux 7.6.1-94.el7 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details.
  39. HECͰσόοά ม਺͕/6-- ίϯύΠϧ Φϓγϣϯʁ ϚΫϩʁ FUD HECͷ͋Δ฻Β͠ ௐ΂Δ ෼͔Δ ରॲ͢Δ

  40. CFGPSF BGUFS

  41. ਂ͘ཧղ͢Δͱ͍͏͜ͱ NSVCZ͚ͩͰ͸ͳ͍ීวత஌ࣝ *OUFSOFUΑΓԶͷ΄͏͕ৄ͍͠ମݧ HECσόοά͚ͩͰ͸ͳ͘ɺ,FSOFMɺ$ϥΠϒϥϦपลͷ஌ࣝ ϛυϧ΢ΣΞ΍ɺ04ͷϘτϧωοΫ΍ύϥϝʔλʔʹഭΕΔΑ͏ʹͳΔ ݕࡧͯ͠΋ग़ͯ͜ͳ͍஌ࣝΛಘΔաఔͰֶͿ͜ͱ΍ɺ ໰୊ʹରͯ͠ɺ௥͍੾Δͱ͍͏͜ͱ

  42. NSVCZʹݟग़͢ ΤϯδχΞͱͯ͠ͷνϟϯε

  43. NHFNMJTU NSCHFNΛެ։͢ΔϦϙδτϦ

  44. NSCHFNSBLF NSCHFNͷґଘؔ܎ ίϯύΠϧΦϓγϣϯΛఆٛ MRuby::Gem::Specification.new('mruby-signal-thread') do |spec| spec.license = 'MIT' spec.authors

    = 'pyama86' spec.cc.flags << "-DMRB_THREAD_COPY_VALUES" spec.add_dependency 'mruby-thread' spec.add_test_dependency 'mruby-process' end
  45. 

  46.  ࣌఺ͷNHFNMJTU SVCZHFNTPSHͷొ࿥਺

  47.  NSCHFNԽ͞Εͯͳ͍ϥΠϒϥϦ (FNUPNSCHFN PQFOTTM UIPS GBSBEBZ NSVCZBDNFDMJFOU

  48. 'BTU$FSUJpDBUF ngx_mruby acme-client Redis client ʮOHY@NSVCZͰ࠷ॳͷ)5514ΞΫηε࣌ʹࣗಈͰূ໌ॻΛઃఆՄೳʹ͢Δ ɹ'BTU$FSUJpDBUFͷఏҊͱ1P$ʯ ɹɹIUUQICNBUTVNPUPSKQFOUSZ ᶃΫϥΠΞϯτ͔ΒΞΫηε ᶄOHY@NSVCZ͔Β3FEJTʹΞΫηε͠ɺূ໌ॻͷ༗ແΛ֬ೝ

    ᶅূ໌ॻ͕ͳ͍৔߹ɺ-FU`T&ODSZQUΛར༻ͯ͠৽نൃߦ ᶆൃߦͨ͠ূ໌ॻΛ3FEJTʹॻ͖ࠐΉ ᶇΫϥΠΞϯτ͸IUUQT௨৴Ͱ͖Δ
  49. NSVCZBDNFDMJFOU VOJYDIBSMFTBDNFDMJFOU SVCZPQFOTTM -FU`T&ODSZQUΛར༻ͨ͠ূ໌ॻൃߦ ূ໌ॻͷൃߦʹඞཁͳϞδϡʔϧɺΫϥεΛDMPOF

  50. (FNUPNSCHFN $3VCZͱͷࠩҟ͸ϚΫϩͰରॲ͢Δ $3VCZͷ࣮૷ʹҾ͖ͮΒΕ͗͢ͳ͍

  51. $3VCZͱͷࠩҟ͸ϚΫϩͰରॲ͢Δ #define VALUE mrb_value #define ID mrb_sym #define SYM2ID(mrb, o)

    mrb_sym2str(mrb, mrb_symbol(o)) #define ID2SYM(o) mrb_symbol(o) $3VCZͰ͸ఆٛࡁΈɺNSVCZͰ͸ະఆٛͳ ϚΫϩ΍ϝιου͸ͦΕͳΓʹ͋Δ
  52. όουϊ΢ϋ΢ ஔ׵

  53. όουϊ΢ϋ΢ த్൒୺ͳ࠷దԽ

  54. $3VCZͷ࣮૷ʹҾ͖ͮΒΕ͗͢ͳ͍ Linux Ruby on Rails CRuby Linux nginx mruby ద༻ྖҬ͕ҟͳΔͷͰ

    ࣅͯඇͳΔ΋ͷͱߟ͑Δ
  55. ͱ͖ʹ͸ׂΓ੾Δ ڱ͍ͱ͜ΖͰ࢖͏ͳΒ͹ແཧʹ޿͘αϙʔτ͠ͳ͍ ΠϯλʔϑΣʔε΋؀ڥʹ߹Θͤͯ΍͍͖ͬͯ

  56. NSVCZͰ΍͍͖ͬͯ ͋ͳͨ΋ஶ໊ͳϥΠϒϥϦͷ࡞ऀʹ NSVCZ͔Β޿͕ΔϨΠϠʔͷੈքɺͦͷઌʹ

  57. զʑ͸Ͳ͏΍ͬͯདྷ͔ͨ

  58. None
  59. ΍͍͖ͬͯن໛ Ϣʔβʔ਺ສਓ αΠτ਺ສαΠτ ΞΫηε਺ԯΞΫηε೔ ௒ߴूੵϨϯλϧαʔό 1SPYZ͸OHJOYɺ6TFST͸"QBDIF)551%Λ࠾༻

  60. None
  61. ϦϦʔεޙɺ ̍िؒͰ ສαΠτҎ্͕ )5514 )551

  62. 44-ূ໌ॻͷ؅ཧ TJUFFYBNQMFDPN ൿີ伴 ূ໌ॻ ̍ສຕͷূ໌ॻ؅ཧ ഑෍ํࣜ ෳ਺ͷαʔόʹͲͷΑ͏ʹ഑෍͢Δ͔ ߋ৽ ߋ৽ظݶͷ؅ཧ΍ɺߋ৽͸Ͳ͏ߦ͏͔ ཤྺ

    όʔδϣχϯάͲ͏͢Δ͔ɺ੾Γ໭͠ σʔλ͸͋Δ͔
  63. server { listen 443 ssl http2; ssl on; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; server_name example.com; root /var/www/releases; } º 
  64. ಈతূ໌ॻಡΈࠐΈ

  65. OHY@NSVCZূ໌ॻͷಈతಡΈࠐΈ ਃ͠ࠐΈ ϖʔδ HPMBOH &DIP TJEFLJR .Z42- OHY@NSVCZ SFEJT NSVCZ@TTM@IBOETIBLF@IBOEMFS@DPEF

    TTM/HJOY44-OFX EPNBJOTTMTFSWFSOBNF SFEJT6TFSEBUBOFXSFEJT TTMDFSUJpDBUF@EBUBSFEJT<\EPNBJO^DSU> TTMDFSUJpDBUF@LFZ@EBUBSFEJT<\EPNBJO^LFZ> 
  66. OHY@NSVCZ ಈతϓϩΩγ σʔλΞΫηεͷNSCHFNԽ

  67. ಈతϓϩΩγ OHY@NSVCZ VTFST FYBNQMFDPN VTFST FYBNQMFDPN .Z42- MPDBUJPO\ NSVCZ@TFUCBDLFOEWBSMJCNSVCZIPPLSCDBDIF JG

    CBDLFOE \ SFUVSO ^ QSPYZ@QBTTIUUQTCBDLFOE ^
  68. ಈతϓϩΩγ αʔόͷઃఆมߋ͕ෆཁ ҠઃΛ$IBU0QT ৼΓ෼͚ઌͷࣗ༝౓

  69. σʔλΞΫηεΛNSCHFNԽ Inmemory KVS Redis MySQL fetch fetch cache cache IUUQTHJUIVCDPNQFQBCPNSVCZNTE

    සൟʹΞΫηε͢Δ৘ใ΄ͲΦϯϝϞϦͰॲཧ
  70. αʔόෛՙࣗಈ੍ޚ

  71. αʔόෛՙରԠ ͍͢͝τϥϑΟοΫ ߈ܸɾԌ্ ಉ࣌઀ଓ਺੍ݶ αʔό ಉډऀ ؂ࢹһ BQBIDF)551%

  72. ෛՙ੍ޚͷࣗಈԽ (PMBOHͰϩάύʔαʔΛ࣮૷ NSVCZIUUQBDDFTTMJNJUFS NSVCZDHSPVQ

  73. (PMBOHͰϩάύʔαʔΛ࣮૷ 1SPEVDUOBNFBMCB ໷໌͚ ᶃ աڈ/෼ͷϩάΛ5BJM ᶄ 8FCαʔόͷॲཧ࣌ؒΛΞΧ΢ϯτɺWIPTU͝ͱʹूܭ ᶅ ᮢ஋ɺαϯϓϦϯά਺ͳͲͷ৚݅෇

  74. NSVCZBDDFTTMJNJUUFS NPE@NSVCZͱ૊Έ߹Θͤͯɺ NSVCZͰಉ࣌ΞΫηε਺Λ੍ޚ͢ΔNSCHFN BQBIDF)551%    CMPDL

  75. NSVCZBDDFTTMJNJUUFS ༨ஊ 7JSUVBM)PTU  %PDVNFOU3PPUIPNFVTFSTFYBNQMFDPNXFC 4FSWFS/BNFFYBNQMFDPN 7IPTU.BY$MJFOUT "EE)BOEMFSBQQMJDBUJPOYIUUQEQIQQIQ "EE5ZQFBQQMJDBUJPOYIUUQEQIQQIQ 7JSUVBM)PTU

    Ҏલ͸NPE@WIPTU@NBYDMJFOUTΛ ར༻ͯ͠઀ଓ਺੍ޚ IUUQTHJUIVCDPNNBUTVNPUPSZNPE@WIPTU@NBYDMJFOUT WIPTU͝ͱʹಉ࣌઀ଓ਺Λهड़Մೳ
  76. NSVCZBDDFTTMJNJUUFS ༨ஊ NPE@WIPTU@NBYDMJFOUTͰ͸(SBDFGVM3FTUBSU͕ඞཁ (SBDFGVM3FTUBSUʹ͓͚ΔҰ࣌తͳෛՙ૿୆ ੤໿ͱ੍໿͔Βɺͦͷଞͷιϑτ΢ΣΞ͔Βѻ͍ͮΒ͍ঢ়ଶ NPE@WIPTU@NBYDMJFOUTΛར༻ͨ͠ ઀ଓ੍ݶͷ՝୊

  77. ੤໿ͱ੍໿ "QBDIF)551%ͷϢʔβʔ͝ͱͷઃఆϑΝΠϧͷมߋͷ ࢓༷͕ݱࡏͷઃఆϑΝΠϧΛύʔεͯ͠ɺઃఆͷ௥Ճ࡟আΛ
 ߦ͍ͬͯΔ 7JSUVBM)PTU  %PDVNFOU3PPUIPNFVTFSTFYBNQMFDPNXFC 4FSWFS/BNFFYBNQMFDPN "EE)BOEMFSBQQMJDBUJPOYIUUQEQIQQIQ "EE5ZQFBQQMJDBUJPOYIUUQEQIQQIQ

    7JSUVBM)PTU %PDVNFOU3PPUIPNFVTFSTFYBNQMFDPNXFC 4FSWFS/BNFFYBNQMFDPN "EE)BOEMFSBQQMJDBUJPOYIUUQEQIQQIQ
  78. ઃఆϑΝΠϧΛมߋ͢Δ͜ͱͳ͘ ಈతʹ੍ޚ

  79. NPE@NSVCZ NSVCZBDDFTTMJNJUUFS BMCB BDDFTTMPH MJNJUZNM MPDBM NFNDBDIF BDDFTT MJNJUUFS ϩάղੳ

    ੍ݶઃఆ࡞੒ ੍ݶઃఆ͕ଘࡏ͢Δ৔߹ʹϝϞϦಡΈࠐΈ MPDBMNFNDBDIF ΠϯϝϞϦ,74  Λར༻͢Δ͜ͱͰઃఆͷ࠶ಡࠐΛෆཁʹ IUUQTHJUIVCDPNNBUTVNPUPSZNSVCZMPDBMNFNDBDIF
  80. NSVCZDHSPVQ

  81. DHSPVQ$POUSPM(SPVQ ϓϩηεΛάϧʔϓԽ͠ɺάϧʔϓʹରͯ͠ $16ར༻࣌ؒ΍ɺϝϞϦར༻ྔͷ੍ݶΛ ߦ͏͜ͱ͕ग़དྷΔ

  82. NSVCZDHSPVQ IUUQE IUUQE $16 ར༻࣌ؒ ಉ࣌઀ଓ੍ݶͰ཈੍Ͱ͖ͳ͍ɺ ஶ͘͠ෛՙͷߴ͍εΫϦϓτ΍ ϓϥάΠϯΛ$16੍ݶ͢Δ MJNJUFE@DHSPVQ$HSPVQ$16OFX lIUUQEz

     MJNJUFE@DHSPVQDSFBUFVOMFTTMJNJUFE@DHSPVQFYJTU  MJNJUFE@DHSPVQBUUBDI
  83. ࣗಈ੍ޚͷ͋Δੈք ͍͢͝τϥϑΟοΫʜ ߈ܸɾԌ্ αʔό ಉډऀ ؂ࢹһ BQBIDF)551% ࣗಈ੍ޚ͡Όʂʂʂ

  84. None
  85. ίϯςφܕΫϥ΢υϗεςΟϯά NSVCZ࣮૷ͷίϯςφϥϯλΠϜIBDPOJXB 'BTU$POUBJOFSΞʔΩςΫνϟ ΫϩʔζυЋॱ࣍Ҋ಺த ͱʹ͔͘৭ʑ΍͹͍αʔϏε IUUQTNDMPMJQPQKQ

  86. None
  87. IBDPOJXB 3VCZ%4-Λ༻͍ͯɺDISPPU΍OBNFTQBDFͳͲίϯςφͷ
 ఆٛΛهड़ ෳ਺ͷϑοΫϙΠϯτ͕͋Γɺίϯςφͷىಈ࣌΍ɺऴྃ࣌ɺ λΠϚʔॲཧͳͲγεςϜ࿈ܞ͕ࣗ༝ࣗࡏ ୈճϑΫΦΧ3VCZେ৆ड৆ ৆ۚສԁ IUUQSVCZLBJHJPSHQSFTFOUBUJPOTVE[VSBIUNM

  88. )BDPOJXBEFpOFEPcDPOpHc DPOpHOBNFlCVJMEFSTDPOz DPOpHDHSPVQ<DQVDGT@QFSJPE@VT> DPOpHDHSPVQ<DQVDGT@RVPUB@VT> DPOpHJOJU@DPNNBOE<CJOCBTI> DPOpHOBNFTQBDFVOTIBSFJQD DPOpHOBNFTQBDFVOTIBSFVUT DPOpHOBNFTQBDFVOTIBSFNPVOU DPOpHOBNFTQBDFVOTIBSFQJE DPOpHDBQBCJMJUJFTBMMPXBMM

    DPOpHDBQBCJMJUJFTESPQDBQ@TZT@BENJO FOE DHSPVQʹΑΔϦιʔε্ݶΛఆٛ OBNFTQBDFͷ෼཭ DBQBCJMJUZͷ෇༩
  89. 1SPYZ DPOUBJOFS MJTUFO DPOUBJOFS ىಈ ఀࢭ DPOUBJOFS Ԡ౴ 'BTU$POUBJOFSΞʔΩςΫνϟ 'BTU$(*͔Βண૝

    ϦΫΤετܖػʹ௒ߴ଎ʹ
 ίϯςφΛىಈ ੜ·ΕมΘΓͷաఔͰ
 ΑΓڧ͘ɺ૿͑Δ
  90. 'BTU$POUBJOFSΞʔΩςΫνϟ γεςϜӡ༻্ͰͷϝϦοτ ෆཁͳίϯςφ͸ࣗಈͰఀࢭ͢Δ ੜ·ΕมΘΓΛܖػʹϑϨΩγϒϧͳϗετબ୒ ίϯςφͷੜ·ΕมΘΓϓϩηεͷੜ·ΕมΘΓ

  91. ϚωʔδυΫϥ΢υͱNSVCZ IBDPOJXB NSVCZOFUXPSLBOBMZ[FS NSVCZJQWTBEN NBEBN 

  92. NSVCZOFUXPSLBOBMZ[FS /FUXPSL"OBMZ[FSDPMMFDU FUI   <  \  

    TSD@IPTU    ETU@IPTU    TSD@QPSU    ETU@QPSU    UPUBM@TFOU    UPUBM@SFDW    TFOU@IJTUPSZ<>    SFDW@IJTUPSZ<>  ^ > ࢦఆͨ͠ΠϯλʔϑΣʔεΛ ࢦఆͨ͠ඵ਺Ωϟϓνϟ͠ɺ ίϯςφͷར༻ঢ়گΛ೺Ѳ IUUQTHJUIVCDPNQZBNBNSVCZOFUXPSLBOBMZ[FS
  93. NSVCZOFUXPSLBOBMZ[FS σόΠεΦʔϓϯ JG EBUBQEQDBQ@PQFO@MJWF JG@OBNF $"1563&@-&/(5)   FCVG /6--

    \ NSC@SBJTFG NSC &@36/5*.&@&3303 QDBQPQFOFSSPS4 NSC@TUS@OFX@DTUS NSC FCVG  ^ EMUQDBQ@EBUBMJOL EBUBQE  JG EMU%-5@&/.# \ ࢦఆඵ਺଴ͭ TMFFQ TFD  QBDLFU@MPPQ@DPOGD\NSC EBUB^ ࢦఆඵ਺όοϑΝʹ஝ੵͨ͠ύέοτΛίʔϧόοΫϝιουͰूܭ͢Δ QDBQ@EJTQBUDI EBUBQE NBY IBOEMF@FUI@QBDLFU D  QDBQ@DMPTF EBUBQE  ^
  94. NSVCZJQWTBEN 1SPYZ DPOUBJOFS TTI TTI DPOUBJOFS TTI 1SPYZ DPOUBJOFS TTI

    TTI DPOUBJOFS TTI TTI ίϯςφύέοτϧʔςΟϯά τϥϯεϙʔτ૚ͷ૊Έ߹Θͤ͸
  95. NSVCZJQWTBEN IUUQTHJUIVCDPNQZBNBNBEBN NBEBNBQQMZ DBUTBNQMFTBNQMFKTPO  JQWTBEN-O *17JSUVBM4FSWFSWFSTJPO TJ[F  1SPU-PDBM"EESFTT1PSU4DIFEVMFS'MBHT

    3FNPUF"EESFTT1PSU'PSXBSE8FJHIU"DUJWF$POO*O"DU$POO 5$1SS 3PVUF 3PVUF +40/Ͱ*174Λߏ੒
  96. NSVCZJQWTBEN 1SPYZ $POTVM8BUDI NBEBN $POTVM,7 "1* ίϯςφͷ௥Ճ ϙʔτͷ௥Ճ *1ͷ௥Ճ $POTVM,7͔Β+40/ΛऔΓग़͠ɺ

    ಈతʹϧʔςΟϯά௥Ճ
  97. ཁૉٕज़։ൃʹNSVCZ

  98. ೥಺ϦϦʔε༧ఆ ༧ఆ

  99. ·ͱΊ

  100. NSVCZΛར༻͢Δ͜ͱͰ ௿ϨΠϠʔʹڧ͘ͳΔ

  101. ։ൃ్্Ͱ͋Δ NSVCZʹͷ͍͖ͬͯ

  102. NJEEMFXBSF NSVCZڧ͍

  103. ͝ਗ਼ௌ༗೉͏͍͟͝·ͨ͠