CN Buildpacksが作る未来

CN Buildpacksが作る未来

builderscon 2019でトークした内容です。以下CFP抜粋

CloudNative Buildpacksは従来、HerokuやCloud Foundationを中心に利用されていたBuildpacksがCNCF Sandboxに追加され、Herokuを中心に仕様を策定したCN Buildpack v3 Lifecycleがリリースされています。

Buildpacksはアプリケーションコードを元に必要なミドルウェアやコンフィグを自動でインストールし、アプリケーションが動作する環境をアプリケーションエンジニアが意識することなく開発できる体験を提供します。
具体的にはアプリケーションリポジトリにindex.phpがあればPHPをインストールするというようにリポジトリにあるソースから必要なミドルウェア、コンフィグが判断されます。

話し手はGMOペパボにおいて、全社で利用できるBuildpacksリポジトリを開発、運用しており、アプリケーションリポジトリでmake build を実行するだけで、そのアプリケーションが動作するコンテナイメージが作成されるという仕組みを構築しています。

今後マイクロサービス化がより加速していくと、それに伴い多くの実行環境を準備する必要があるので、Buildpacksのビルドの仕組み、またはそれを構築したノウハウはこのセッションを聴いてくださる方々にとって今後必要になる知識だと思います。

Buildpacksを使ったことがない方、またCN Buildpacksを検討している方はぜひこのセッションを聞きに来てください。

1b838da2065660793d5b26f2cdc32de7?s=128

Kazuhiko Yamashita

August 30, 2019
Tweet

Transcript

  1. ʙՆͷ೔ͷSPBEUPʙ !QZBNB(.01FQBCP *OD ϖύϘςοΫΧϯϑΝϨϯε $/#VJMEQBDLT͕ ࡞Δະདྷ

  2. γχΞɾϓϦϯγύϧΤϯδχΞ ࢁԼ࿨඙!QZBNB ٕज़෦ٕज़ج൫νʔϜ

  3. CVJMEFSTDPO ߴूੵίϯςφϗεςΟϯάʹ͓͚ΔϘτϧωοΫͱͦͷղ๏

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

  5. -JOVY MJCOTTTUOT JEFYBNQMF VJE FYBNQMF HJE FYBNQMF HSPVQT FYBNQMF VTFS

    OBNFFYBNQMF <\ OBNFFYBNQMF  JE   ^> γϯϓϧͰࣗ༝౓ͷߴ͍ઃܭ αʔό࣮૷΋͍ΘΏΔ3&45GVM෩ɺMJCOTTTUOT͔Β೚ҙͷίϚϯυΛ࣮ߦͨ͠ ݁ՌΛར༻Ͱ͖Δ࢓૊Έ΋͋ΔͷͰΫϥΠΞϯτଆͷ֦ு΋ࣗ༝ࣗࡏ <VTFSTFYBNQMF> JE LFZT<TTI> HSPVQ@JE TUOTDPOG
  6. EPDLFSSVOOBNFTUOTETUOTTUOTMBUFTU EPDLFSFYFDJUTUOTCJOCBTI JEFYBNQMF VJE FYBNQMF HJE FYBNQMF HSPVQT FYBNQMF ͙͢ʹࢼͤ·͢

    DVSMGT4-IUUQTSFQPTUOTKQTDSJQUTZVNSFQPTIcTI DVSMGT4-IUUQTSFQPTUOTKQTDSJQUTBQUSFQPTIcTI %PDLFS $FOU04 VCVOUVEFCJBO
  7. ϗεςΟϯάࣄۀ &$ࢧԉࣄۀ ϋϯυϝΠυɾͦͷଞࣄۀ

  8. ೥ ϩϦϙοϓʂϨϯλϧαʔόαʔϏεఏڙ։࢝ ೥ ೥ ೥ ϔςϜϧαʔϏεఏڙ։࢝ 1ࢁ͕ϖύϘʹೖࣾʂʂ̍ ೥݄೔ ࣛࣇౡݝग़ਫࢢʹ͓͍ͯ1ࢁര஀ʂʂ̍ ೥

    ݱࡏɾ૑ۀ೥໨ ϜʔϜʔυϝΠϯαʔϏεఏڙ։࢝
  9. $MPVE/BUJWF #VJMEQBDLT

  10.  $MPVE/BUJWF#VJMEQBDLTʹ͍ͭͯ  %PDLFSpMFͱͷൺֱ  ϖύϘͰͷ׆༻ࣄྫ  $MPVE/BUJWF#VJMEQBDLT͕ى͜͢มԽ  ๻ͷ൒ੜɺՄѪ͔ͬͨ༮গظʹ͍ͭͯ

    ࠓ೔࿩͢͜ͱ
  11. w IFSPLV΍$MPVE'PVOESZͰ։ൃ͞Ε͖ͯͨίϯςφ
 Ϗϧυͷ࢓૊Έ w ΞϓϦέʔγϣϯίʔυΛݩʹίϯςφΠϝʔδΛੜ੒ w ྫDPNQPTFSKTPO͕͋Ε͹1)1ΛΠϯετʔϧ͢Δ #VJMEQBDL

  12. #VJMEQBDLXJUIIFSPLV IUUQTKQIFSPLVDPNFMFNFOUTCVJMEQBDLT

  13. #VJME1BDLͷ՝୊ IFSPLV΍$MPVE'PVOESZͷ࣮૷Ͱ ૬ޓʹඍົʹಈ͔ͳ͍͜ͱ͕͋Δ

  14. w ೥ʹ1JWPUBMͱIFSPLVʹΑͬͯ։࢝ w $/$'$MPVE/BUJWF4BOECPY΁௥Ճ w ݱঢ়͸7FSTJPȌͷ4QFD͕ϦϦʔε͞Ε͍ͯΔ w ඪ४Խ͞Εͨ4QFDʹج͖ͮ0$*ΠϝʔδΛ࡞੒Մೳ $MPVE/BUJWF#VJMEQBDLT $/#

  15. w ۀքඪ४Խஂମ w 0$*Wͱ͍͏ίϯςφͷ3VOUJNF4QFDͱ *NBHF 'PSNBU4QFDΛఆΊͨ w 0$*ΠϝʔδͰ͋Ε͹0$*Wʹ४ڌ͍ͯ͠Δ؀ڥͰಈ࡞͢ Δ͜ͱ͕Ͱ͖Δ 0$*

    0QFO$POUBJOFS*OJUJBUJWF
  16. w MJGFDZDMF QBDLͷࢀߟ࣮૷͕HJUIVCDPNCVJMEQBDLʹͯ ެ։͞Ε͍ͯΔɻQBDLίϚϯυ͸8SBQQFSͰ࣮ଶ͸$/# ͷ4QFDΛ࣮૷ͨ͠MJGFDZDMF͕࣮ߦ͞ΕΔ 5PPMT QBDL DPOUBJOFSQSPDFTT MJGFDZDMF &YFDVUF

  17. #VJMEQBDLMJGFDZDMF IUUQTXXXDODGJPCMPHDODGUPIPTUDMPVEOBUJWFCVJMEQBDLTJOUIFTBOECPY

  18. 3VCZΠϝʔδΛ #VJMEͯ͠ΈΔ

  19. ৄղ $MPVE/BUJWF#VJMEQBDL

  20. ֓ཁ

  21. ϏϧυͷྲྀΕ "QQMJDBUJPO $PEF #VJMEFS*NBHF SVCZDOC OPEFDOC 3VO*NBHF "QQMJDBUJPO $PEF SVCZMBZFS

    QBDLCVJME QIQDOC CVJME CVJME FYQPSU #VJMEFS*NBHFͰ"TTFUTΛ#VJME͠ɺ ࡞੒͞ΕͨMBZFSΛ3VO*NBHFʹॏͶΔ
  22. w ͲͷCVJMEQBDLΛ࢖͏  w ॱং͸  w CVJMEJNBHF͸  w

    SVOJNBHF͸ #VJMEFS*NBHFͷఆٛ
  23. % pack create-builder <builder name> \ --builder-config builder.toml $ docker

    push <builder name> #VJMEFSͷCVJME #VJMEFSࣗ਎΋Πϝʔδͱͯ͠
 CVJMEͰ͖Δ͔ΒՄൖੑ͕ߴ͍
  24. #VJMEQBDLTͷ࣮ߦ SVCZDOC CJOEFUFDU CJOCVJME #VJMEQBDL಺ʹ͋ΔEFUFDU CVJME͕ MJGFDZDMF͔Β࣮ߦ͞ΕΔ QIQDOC CJOEFUFDU CJOCVJME

    OPEFDOC CJOEFUFDU CJOCVJME MJGFDZDMF 3VCZ͸Πϯετʔϧ͢Δʁ 1)1ίϯύΠϧ͠·͢Ͷ
  25. MBZFSTEJS MBZFST SVCZDOC QIQDOC #VJME*NBHFʹ૊Έࠐ·Εͨ$/#͸ MBZFSTσΟϨΫτϦΛى఺ʹ഑ஔ͞ΕΔ EFUFDU CJO EFUFDU CJO

  26. #VJMEFS*NBHF ಄ͷ੔ཧ MBZFST SVCZDOC QIQDOC #VJMEFS*BNBHFͷதʹ͋Δɺ MBZFSTσΟϨΫτϦʹ$/#͕഑ஔ͞Εɺ MJGFDZDMF͕ݺͼग़͢ EFUFDU CJO

    EFUFDU CJO MJGFDZDMF
  27. *OTJEF#VJMEQBDL

  28. %FUFDU #VJME1BDLΛϏϧυʹར༻͢Δ͔ʁ 1BTT  GBJM  PSFSSPS   ͷΑ͏ʹ

    ໭Γ஋Ͱར༻Մ൱ɺΤϥʔΛฦ٫͢Δ
  29. %FUFDU ґଘؔ܎Λࣔͨ͢Ίʹ #VJME1MBOΛఆٛ͢Δ͜ͱ͕Ͱ͖Δ ྫCVOEMFSΛར༻͢Δʹ͸ 3VCZ͕ඞཁ [[provides]] name = "bundler" [[requires]]

    name = "ruby" version = "2.6.3"
  30. w ίϯςφΠϝʔδʹอଘ͞Ε͍ͯΔϝλσʔλ͔Βࠩ෼Λ ݕग़͠ɺݱࡏͷࢿ࢈ͱൺֱ͠ɺ#VJMEͷ࠷దԽΛߦ͏ "OBMZ[F % docker inspect <image_id> | jq

    -r '.[].Config.Labels' # snip "buildpacks": [ { "key": "com.examples.buildpacks.ruby", "version": "0.0.1", "layers": { "ruby": { "sha": "sha256:xxxxxxxxxx", ]
  31. w όΠφϦɺ"TTFUTͷίϯύΠϧͳͲ w ؀ڥม਺ͷઃఆ w ىಈίϚϯυͷઃఆ #VJME

  32. #VJMEόΠφϦɺ"TTFUT MBZFST SVCZDOC QIQDOC 3VCZΛల։͍ͨ͠ྫ SVCZ # rubyΛμ΢ϯϩʔυ͢Δ % wget

    -q -O - "$ruby_url" | tar -xzf - -C "/layers/ ruby-cnb/ruby" # /layers/<layer>/<layerͱͯ͠࢒͍ͨ͠σΟϨΫτϦ໊>.toml % echo -e 'launch = true' > /layers/ruby-cnb/ruby.toml
  33. Launch Layers A buildpack MAY specify that a <layers>/<layer>/ directory

    is a launch layer by placing launch = true in <layers>/ <layer>.toml. The lifecycle MUST include each launch layer in the built OCI image. The lifecycle MUST also store the Layer Content Metadata associated with each layer so that it can be recovered using the layer Diff ID. IUUQTHJUIVCDPNCVJMEQBDLTQFDCMPCNBTUFSCVJMEQBDLNEFOWJSPONFOU
  34. Build Layers A buildpack MAY specify that a <layers>/<layer>/ directory

    is a build layer by placing build = true in <layers>/ <layer>.toml. The lifecycle MUST make all build layers accessible to subsequent buildpacks as described in the Environment section. IUUQTHJUIVCDPNCVJMEQBDLTQFDCMPCNBTUFSCVJMEQBDLNEFOWJSPONFOU
  35. #VJME؀ڥม਺ͷఆٛ IUUQTHJUIVCDPNCVJMEQBDLTQFDCMPCNBTUFSCVJMEQBDLNEFOWJSPONFOU MJGFDZDMFͷ࣮૷Ͱ؀ڥม਺͸ࣗಈఆٛ

  36. #VJME؀ڥม਺ͷఆٛ MBZFST SVCZDOC QIQDOC ؀ڥม਺Λ௥Ճ͍ͨ͠έʔε SVCZ % echo $PATH /layers/ruby-cnb/ruby/bin

    % echo $LD_LIBRARY_PATH /layers/ruby-cnb/ruby/lib % echo "/ruby/bin:" > /layers/ruby-cnb/ruby/env/PATH.append
  37. #VJMEىಈίϚϯυͷઃఆ ىಈ͍ͨ͠ϓϩηεΛ
 MBZFSTMBVODIUPNMͱͯ͠ఆٛ [[processes]] type = "web" command = "bundle

    exec ruby app.rb"
  38. #VJMEىಈίϚϯυͷઃఆ ෳ਺ͷ$/#Λ࣮ߦ͠ಉ͡<UZQF>ͳΒ͹ޙউͪ [[processes]] type = "web" command = "bundle exec

    ruby app.rb" SVCZDOC [[processes]] type = "web" command = "npm start" OQNDOC SVCZDOCͷޙʹ OQNDOCΛ࣮ߦ ⊗ ʮOQNTUBSUʯ͕ ىಈίϚϯυͱͳΔ
  39. &YQPSU ݱঢ়ͷMJGFDZDMF࣮૷ͩͱ %PDLFSͷ"1*ʹґଘ͍ͯ͠Δ % docker save test-ruby-app > test-rb.tar %

    tar zxv test-rb.tar % cd f831edb4ae8ed... % tar zxvf layer.tar tar: Removing leading '/' from member names x workspace x workspace/Gemfile x workspace/Gemfile.lock x workspace/app.rb
  40. &YQPSU ࢀߟ % docker inspect test-ruby-app | jq . |

    grep RootFS -A10 "RootFS": { "Type": "", "Layers": [ "sha256:f831edb4ae8ed4e9c87d8ec195d98334191fd772c40d7375be1df51443dcf0df", "sha256:ce430ae9aaef0810265eb37e374ec448af547fbf0b391a3879140faaf45391fd", "sha256:0670c818350e963326b7655c0ae7fd2e2438a50a46feb2ffd9b4ae05841c1126", "sha256:b0d2839a2e054261cafa3d694db5e548342785313a282020e3b19704b8995328", "sha256:c8a8ddb80dd9923057bd12f9f69c6b093925a8925f3c37550a88b90f02699aa9", "sha256:512ae48a9f9d01cc9eb6a822660ce2cf3ad5a9c6c6fddc315cdcbb191e3b59a3" ] },
  41. ͪΐͬͱͩΔͦ͏ͩͱ ࢥͬͯΔਓ͍Δ͡ΌΜ͔͢ʁ

  42. w HJUIVCDPNCVJMEQBDLMJCCVJMEQBDL w ຊՈCVJMEQBDLͷ(PϥΠϒϥϦ w HJUIVCDPNDMPVEGPVOESZMJCCVJMEQBDL w ຊՈCVJMEQBDLΛDMPVEGPVOESZ͕8SBQ࣮ͨ͠૷ w HJUIVCDPNDMPVEGPVOESZQIQEJTUDOC

    w $MPVE'PVOESZ͕࣮૷͍ͯ͠Δ֤छݴޠͷ$/# #VJMEQBDLT ॆ࣮ͨ͠։ൃ؀ڥ
  43. MJCSBSZ͕4QFDΛӅಗͯ͘͠ΕΔ HJUIVCDPNDMPVEGPVOESZOQNDOC

  44.  ૬ޓʹґଘղܾΛߦ͍ͳ͕ΒɺΞϓ ϦέʔγϣϯΛݩʹϓϩάϥϚϒϧ ʹίϯςφΠϝʔδΛ࡞੒͢Δࣄ͕ Ͱ͖Δ  ىಈίϚϯυ΍؀ڥม਺ͷఆٛ͸ UPNMͰఆΊΒΕͨϑΥʔϚοτʹ ΑͬͯఆٛͰ͖Δ 

    ݴޠͷ$/#ͳͲ͸$MPVE'PVOESZ ͳͲͷઌߦऀ͕044ͱͯ͠ఏڙͯ͠ ͍Δ ͜͜·Ͱͷ·ͱΊ #VJMEFS*NBHF SVCZDOC OPEFDOC QIQDOC CVJME CVJME
  45. %PDLFSpMFͱͷҧ͍

  46. w 4FDVSJUZ'JYͳͲͷରԠ w #VJME"TTFUTͷྲྀ༻ੑ w #VJME؀ڥ %PDLFSpMFͱ$/#ͷൺֱ

  47. %PDLFSpMF w %PDLFSpMF͝ͱʹؤுΔ w #BTF*NBHFΛఆٛ͢Δ 4FDVSJUZ'JY $/# w #VJME*NBHFΛߋ৽͢Δ

  48. ࢄࡏ͕ͪ͠ͳ%PDLFSpMF PSHBQJ %PDLFSpMF PSHXXX %PDLFSpMF PSHJOGSB %PDLFSpMF PSHVTFS %PDLFSpMF PSHCMPH

    %PDLFSpMF ͢΂ͯͷ%PDLFSpMFͷߋ৽ٴͼɺ
 ࣮ଶ֬ೝ͕ඞཁ
  49. FROM ubuntu:latest RUN apt install libssl-dev openssl %PDLFSʹ͓͚Δ#BTF*NBHFӡ༻ FYBNQMFCBTFMBUFTU FROM

    example/base:latest(X.X.X) RUN apt install php httpd FYBNQMFPSJHJOMBUFTU 7FSTJPOॻ͍ͪΌ͏ͱɺ CBTF͕ߋ৽͞ΕͨΒશ ෦ͷ%PDLFSpMFॻ͍ͯճ Βͳ͍ͱߦ͚ͳ͍ CBTFͰ0QFO44- ߋ৽͞Ε͚ͨͲपลϥΠϒ ϥϦಈ͘ʁ
  50. wΞϓϦέʔγϣϯΛݩʹɺίʔυͰϏϧυ͢Δ ͷͰϓϩάϥϚϒϧʹґଘղܾͳͲ͕ߦΘΕΔ wϏϧμʔΛߋ৽͢Ε͹ͦΕΛར༻͢ΔϦϙδτ ϦͷΠϝʔδ͸ࣗಈͰ࠷৽ʹͳΔ $/#ͳΒ͹ʁ

  51. %PDLFSpMF #VJMEҙࢥܾఆͷҧ͍ $/# %PDLFSpMFʹ0QFO44-Λ ࢖͏ͱॻ͘ EPDLFSCVJME˞ $/#ʹɺ؀ڥʹΑͬͯ 0QFO44-ɺΛ࢖͏
 ίʔυΛॻ͘ QBDLCVJE

    0QFO44-Λ࢖͏Πϝʔδ ര஀ 0QFO44-ɺͷར༻͕ΞϓϦ έʔγϣϯίʔυΛج४ͱͨ͠Ͱҙࢥ ܾఆʹΑͬͯબ͹Εͨϝʔδര஀ ˞ɹϏϧυ࣌ʹ؀ڥม਺ͳͲͰڍಈΛมߋ͢Δ͜ͱ͸΍Ζ͏ͱࢥ͑͹Ͱ͖Δ
  52. %PDLFSpMF w LBOJLPCVJMELJUͳͲΛར༻͠
 ඇಛݖ؀ڥʹͯϏϧυͰ͖Δ #VJME؀ڥ $/# w %PDLFSσʔϞϯʹґଘ͍ͯ͠Δ
 ͨΊɺಛݖ͕ඞཁ

  53. $/#͸தԝूݖతʹ ҙࢥܾఆͷఆٛΛߦ͍ ஗Ԇ࣮ߦͰ͖Δ͕ ಛݖ͕ࠓͷͱ͜Ζ͸ඞཁ

  54. (.0ϖύϘʹ͓͚Δ $/#ͷར׆༻ʹ͍ͭͯ

  55. w े਺ݸͷαʔϏεΛ։ൃɺӡ༻͍ͯ͠Δ w ྺ࢙తͳܦҢ΋͋Γɺ1)1ɺ3VCZɺ(PMBOH͕
 ϝΠϯͷ։ൃݴޠͰɺόʔδϣϯ΋༷ʑ w ։ൃ؀ڥ͸7BHSBOU࣌ʑ%PDLFS ϖύϘͷഎܠ

  56. Α͋͘Δ΍ͭ

  57. ʮ։ൃ؀ڥ্ཱ͕͕ͪΒͳ͍Μ
 Ͱ͚͢Ͳʁʯ

  58. CVOEMFFYFDDBQQSPEVDUJPOEFQMPZ ͕ɺͳΜ͔Τϥʔग़ͯࢭ·ΔΜͰ͚͢Ͳʁ

  59. ৺ͷ੠

  60. ͦ͏͍͏ͷ͸શ෦ ,VCFSOFUFT࢖͑͹͍͍ͬͯ Ͳ͔ͬͰฉ͖·ͨ͠

  61. ,VCFSOFUFTXJUI$/# HJUQVTI UFTUCVJME QVTIJNBHF EFQMPZJNBHF TXBQEFQMPZNFOU

  62. ,VCFSOFUFTXJUI$/# HJUQVTI UFTUCVJME QVTIJNBHF EFQMPZJNBHF TXBQEFQMPZNFOU

  63. ίϚϯυͰΠϝʔδ͕ര஀ PSHBQJ QIQ PSHXXX 1)1 PSHJOGSB 1)1 PSHCMPH 1)1 %

    pack build <image name> --builder xxxx/tech-php-builder:0.0.1 #VJMEFS*NBHFΛϓϥΠϕʔτϨδετϦͰ؅ཧ͍ͯ͠ΔͨΊ ίϚϯυҰͭͰɺͲͷ1)1ϦϙδτϦͰ࣮ߦͯ͠΋࠷దͳΠϝʔδ͕Ͱ͖Δ
  64. ୤ઢ 5FMFQSFTFOTF

  65. 5FMFQSFTFOTF

  66. #FGPSF5FMFQSFTFOTF XXX VTFS BQJ EPDLFSDPNQPTF΍7BHSBOUΛ ར༻͠ɺϩʔΧϧͰ͢΂ͯͷؔ࿈αʔϏεΛىಈ

  67. "GUFS5FMFQSFTFOTF XXX VTFS BQJ ඞཁͳαʔϏε͚ͩखݩͰىಈͯ͠ɺ ࢒Γ͸,VCFSOFUFTͷϦιʔεΛ࢖͏ BQJ

  68. w ࠃ಺ʹ৘ใ͕গͳ͍தͰͷ$/#։ൃ w ֤ݴޠͷ࣮૷ϚδͰԶ͕΍ΔΜ͔ʁͱ͍͏ؾ࣋ͪ w $MPVE'PVOEMZ࠷ߴ ۤ࿑ͨ͜͠ͱɺͦͯ͠ݱঢ়ͱ͜Ε͔Β w ϗεςΟϯάࣄۀͷϩϦϙοϓʂͷ։ൃ؀ڥͷओཁՕॴΛ $/#ͱ,VCFSOFUFTج൫΁

    ۤ࿑ͨ͠ɺ΋͏ೋ౓ͱಉ͡ࢥ͍Λͨ͘͠ͳ͍ ً͔͍͠ະདྷ w ݴޠɺ؀ڥࠩҟΛ$/#ͰຒΊɺશࣾల։΁ w ͍݁ࠗͨ͠ ݱঢ়
  69. $/#͕૑Δະདྷ

  70.  ,VCFSOFUFTͷొ৔ʹΑΓɺ͜Ε·ͰΠϯϑϥͱݺ͹Ε ͍ͯͨϨΠϠʔ͕Ұஈந৅Խ͞Εͨ  ίϯςφͷηΩϡϦςΟɺύοέʔδɺґଘੑ؅ཧ͸
 ୭͕΍Δʁ ͍ΘΏΔΠϯϑϥΤϯδχΞͷಇ͖ํ͕มԽ͢Δ͔΋͠Εͳ͍

  71. ͍ΘΏΔΠϯϑϥΤϯδχΞͷಇ͖ํ͕มԽ͢Δ͔΋͠Εͳ͍ ΞϓϦέʔγϣϯΤϯδχΞ ϓϥοτϑΥʔϜΤϯδχΞ ΞϓϦέʔγϣϯ։ൃʹ੹຿Λෛ ͍ɺ༏ΕͨΞϓϦέʔγϣϯΛ
 ։ൃ͢Δ ΞϓϦέʔγϣϯ͕ಈ͘؀ڥͷ։ൃ ӡ༻ʹ੹຿Λෛ͍ɺՄ༻ੑͷߴ͍
 ؀ڥΛఏڙ͢Δ

  72.  ΞϓϦέʔγϣϯΤϯδχΞ͸ΞϓϦ։ൃʹूத͢Δ  ϓϥοτϑΥʔϜΤϯδχΞ͸$/#Λ։ൃ͠ɺ ,VCFSOFUFTҎ্ ΦϯϓϨͳΒ෺ཧ΋ ͷϨΠϠʔͰಈ͘ ΞϓϦέʔγϣϯͷՄ༻ੑʹ੹຿Λ࣋ͭ ϓϥοτϑΥʔϜΤϯδχΞ͕$/#Λར༻ͯ͠
 ίϯςφΠϝʔδʹ੹຿Λ࣋ͭ

    "QQ DPOUBJOFS LVCFSOFUFT DPOUBJOFS ϓϥοτϑΥʔϜΤϯδχΞͷ੹຿ ΞϓϦέʔγϣϯΤϯδχΞͷ੹຿
  73. ΞϓϦέʔγϣϯͱ ϓϥοτϑΥʔϜͷ෼ۀ͕Ճ଎

  74. ·ͱΊ

  75. $/#͸ ෳ਺ͷݴޠɺόʔδϣϯ͕ ࠞࡏ͢Δ؀ڥͰɺ ڧ͘ϨόϨοδ͕ޮ͘

  76. $/#͸ ίϯςφΠϝʔδΛ ϓϩάϥϚϒϧʹߏ੒؅ཧͰ͖Δ

  77. $/#͕ ྲྀߦΓͩ͢ͱɺ ߋʹ෼ۀ͕ਐΉɾɾɾ͔΋ʁ

  78. w !KBDPQFO͞ΜͷԢ੝ͳΞ΢τϓοτʹॿ͚ΒΕ·ͨ͠ w /55ςΫϊΫϩεͷ৿઒͞ΜͷRJJUBهࣄ
 ʮίϯςφඪ४Խ࣌୅ʹ͓͚Δ࣍ੈ୅#VJMEQBDLʰ$MPVE /BUJWF#VJMEQBDLʱʹ͍ͭͯʯ
 ͕ͳ͚Ε͹๻͕#VJMEQBDLTʹ໨֮ΊΔ͜ͱ͸͋Γ·ͤΜͰ ͨ͠ w IUUQTXXXDMPVEGPVOESZPSH


    044Խ͞Εͨ$/#Ͱେมޮ཰Α͘։ൃͰ͖͍ͯ·͢ ँࣙ
  79. None
  80. ܅΋ϖύϘͰಇ͔ͳ͍͔ʁ ࠷৽ͷ࠾༻৘ใΛνΣοΫˠ !QC@SFDSVJU