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

CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム

Avatar for ternbusty ternbusty
November 19, 2025

CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム

Avatar for ternbusty

ternbusty

November 19, 2025
Tweet

More Decks by ternbusty

Other Decks in Programming

Transcript

  1. ˜-:$PSQPSBUJPO  "ZBLP)BZBTBLB -*/&Ϡϑʔגࣜձࣾ 4PGUXBSF&OHJOFFS ೥౓ೖࣾ 48"5ͱͯ͠ 8FCόοΫΤϯυྖҬͰશࣾԣஅతͳ ٕज़ࢧԉΛ࣮ࢪ ϝΠϯ͸

    4QSJOH#PPU +BWB,PUMJO • 3"(ٕज़Λར༻ͨ͠ۀ຿ޮ཰Խπʔϧ 4FFL"* ։ൃ • :BIPP஌ܙାͷ "*ճ౴ػೳʮΈΜͳͷ஌ܙାʯ։ൃ • ੜ੒"*Λར༻ͨ͠ 2"ྖҬͷੜ࢈ੑ޲্πʔϧ։ൃ • :BIPP͖ͬͣϑΟϧλϦϯάػೳ "*ಋೖ ˜-:$PSQPSBUJPO
  2. ˜-:$PSQPSBUJPO  ͦ΋ͦ΋ίϯςφͱ͸ʁ ਤ͸ಙӬߤฏ ΠϥετͰΘ͔Δ %PDLFSͱ ,VCFSOFUFT ٕज़ධ࿦ࣾ  QΛݩʹ࡞੒

    ϗετ͔Βִ཭͞Εͨɺಠཱ࣮ͨ͠ߦ؀ڥ • ϓϩηεͱ࣮ͯ͠ߦ͞Ε͍ͯΔ • Χʔωϧ͸ϗετͷ΋ͷΛڞ༗͢Δ ϋʔυ΢ΣΞ 04 ϓϩ ηε ϓϩ ηε
  3. ˜-:$PSQPSBUJPO  ʮִ཭ʯͬͯͲ͏͍͏͜ͱʁ • ϗετ͔ΒऔΓѻ͑ΔϦιʔεͱɺίϯςφ͔ΒऔΓѻ͑ΔϦιʔεΛ෼͚ͯɺ ผͷ໊લۭؒͰ؅ཧ͢Δ • -JOVYͷOBNFTQBDFػೳ͕༻͍ΒΕΔ • ྫ1*%OBNFTQBDF

    ϓϩηε *%ͷ OBNFTQBDF  ͦͷίϯςφ಺Ͱಈ࡞͍ͯ͠ΔϓϩηεͷΈ͕ දࣔ͞Εɺϗετͷϓϩηε͸ݟ͑ͳ͍ ϗετ͔Βίϯςφͷϓϩηε͸ݟ͑Δ͕ Pid ͸ҟͳΔ
  4. ˜-:$PSQPSBUJPO  -JOVYʹଘࡏ͢Δ OBNFTQBDF OBNFTQBDF ҙٛ 1*%OBNFTQBDF ϓϩηε܈ͷִ཭ 654OBNFTQBDF ϗετ໊ͳͲͷִ཭

    ϗετͱҟͳΔϗετ໊Λ͚ͭΒΕΔΑ͏ʹͳΔ *1$OBNFTQBDF ϓϩηεؒ௨৴ʹؔ͢ΔϦιʔεͷִ཭ OFUXPSLOBNFTQBDF ωοτϫʔΫؔ࿈ͷϦιʔεͷִ཭ NPVOUOBNFTQBDF Ϛ΢ϯτϙΠϯτϦετͷִ཭ VTFSOBNFTQBDF Ϣʔβɾάϧʔϓ΍ݖݶͳͲͷִ཭ ϓϨθϯޙ൒Ͱৄड़ DHSPVQOBNFTQBDF ϓϩηε͔Βݟ͑Δ DHSPVQͷ֊૚Λִ཭ UJNFOBNFTQBDF γεςϜىಈ͔Βͷܦա࣌ؒΛִ཭
  5. ˜-:$PSQPSBUJPO  ʮҟͳΔϧʔτϑΝΠϧγεςϜΛ࣋ͭʯͬͯ Ͳ͏͍͏͜ͱʁ • ίϯςφ಺͔ΒϗετͷϑΝΠϧγεςϜશମ ͕ݟ͑ͨΓɺૢ࡞͕Ͱ͖ͨΓͨ͠Β·͍ͣ • -JOVYͰ͸ɺQJWPU@SPPU 

    Λߦ͏ͱɺݱࡏͷ ϓϩηεͷϧʔτσΟϨΫτϦΛมߋͰ͖Δ • ίϯςφ಺෦͔ΒݟΔͱɺͦͷσΟϨΫτϦ͕ ϧʔτσΟϨΫτϦʹݟ͑ΔΑ͏ʹͳΓɺͦΕ ΑΓ্ʹ͸ΞΫηεͰ͖ͳ͍ ϗετ্ͷϑΝΠϧγεςϜ • IPHFGVHBQJZPUFTUUYU • IPHFGVHBFYBNQMFTI • IPHFTBNQMFQZ IPHFGVHBΛϧʔτσΟϨΫτϦʹ มߋͨ͠ϓϩηε͔Β͸͜͏ݟ͑Δ • QJZPUFTUUYU • FYBNQMFTI
  6. ˜-:$PSQPSBUJPO  ʮҟͳΔϧʔτϑΝΠϧγεςϜΛ࣋ͭʯͬͯ Ͳ͏͍͏͜ͱʁ • ίϯςφ಺͔ΒϗετͷϑΝΠϧγεςϜશମ ͕ݟ͑ͨΓɺૢ࡞͕Ͱ͖ͨΓͨ͠Β·͍ͣ • -JOVYͰ͸ɺQJWPU@SPPU 

    Λߦ͏ͱɺݱࡏͷ ϓϩηεͷϧʔτσΟϨΫτϦΛมߋͰ͖Δ • ίϯςφ಺෦͔ΒݟΔͱɺͦͷσΟϨΫτϦ͕ ϧʔτσΟϨΫτϦʹݟ͑ΔΑ͏ʹͳΓɺͦΕ ΑΓ্ʹ͸ΞΫηεͰ͖ͳ͍ ϗετ্ͷϑΝΠϧγεςϜ • IPHFGVHBQJZPUFTUUYU • IPHFGVHBFYBNQMFTI • IPHFTBNQMFQZ IPHFGVHBΛϧʔτσΟϨΫτϦʹ มߋͨ͠ϓϩηε͔Β͸͜͏ݟ͑Δ • QJZPUFTUUYU • FYBNQMFTI
  7. ˜-:$PSQPSBUJPO DHSPVQʹΑΔ੍ݶ͸ͲͷΑ͏ʹઃఆͰ͖Δͷʁ [Ubuntu2404-template:/sys/fs/cgroup] $ tree . ├── test │ ├──

    cgroup.procs │ ├── cgroup.controllers │ ├── cgroup.subtree_control │ ├── cpu.max │ ├── memory.max │ $ cat cgroup.controllers cpuset cpu io memory hugetlb pids rdma misc ͜ͷάϧʔϓͰ੍ݶՄೳͳϦιʔεͷछྨͷҰཡ $ cat cgroup.procs 3200627 3201166 ੍ݶΛద༻ͤ͞Δର৅ͷϓϩηε *%ͷཏྻ ͜ͷԼͷαϒσΟϨΫτϦͰ੍ޚΛ༗ޮʹ͢Δ ϦιʔεΛࢦఆ͢ΔͨΊͷϑΝΠϧ ͜͜Ͱ͸ػೳ͍ͯ͠ͳ͍ $ cat cpu.max 50000 100000 $ cat memory.max 536870912 1SPDFTTɺ͓Αͼͦͷࢠϓϩηεશ෦ͷ߹ܭʹ͍ͭͯ $16N NFNPSZ.#੍ݶΛద༻͍ͯ͠Δ
  8. ˜-:$PSQPSBUJPO ྫ͑͹ίϯςφʹ NFNPSZͷ੍ݶΛ ͔͚͍ͨͱ͖͸Ͳ͏͢Δͷʁ • ϗετ͸ɺTZTGTDHSPVQDHSPVQTVCUSFF@DPOUSPM ʹ l NFNPSZzΛॻ͖ࠐΉ •

    ͦͷޙɺTZTGTDHSPVQʹ UFTUͳͲద౰ͳ໊લͰσΟϨΫτϦΛ੾Δ • TZTGTDHSPVQUFTUDHSPVQQSPDT ʹίϯςφͷϓϩηε *%Λهೖ • TZTGTDHSPVQUFTUNFNPSZNBY ʹ .#  Λॻ͖ࠐΉ • ͜ΕΒͷϑΝΠϧૢ࡞͕׬ྃ͢Ε͹ɺ੍ݶ͸༗ޮͳঢ়ଶʂ • ίϯςφ಺෦͔Βࣗ਎ʹ͔͚ΒΕ͍ͯΔϦιʔε੍ݶΛ஌Δʹ͸ʁ • DHSPVQOBNFTQBDFΛར༻͢Δઃఆʹࢦఆ͞Ε͍ͯΕ͹ͦΕΛ෼཭͢Δ͔ɺ ͋Δ͍͸TZTGTDHSPVQUFTUͷ಺༰Λίϯςφ಺ͷTZTGTDHSPVQʹ CJOENPVOU ͢Δඞཁ͕͋Δ
  9. ˜-:$PSQPSBUJPO • ίϯςφ಺ͰɺϗετͷϦιʔεΛ ރׇͤ͞ΔΑ͏ͳૢ࡞͕ߦΘΕΔͱࠔΔ • ΊͪΌͪ͘ΌେྔͷϝϞϦΛ࢖͏ͱ͔ • ίϯςφ಺ͰɺϗετʹӨڹΛ༩͑ΔΑ͏ͳ ૢ࡞͕ߦΘΕΔͱࠔΔ •

    4IVUEPXOૢ࡞ͱ͔ DHSPVQΛ࢖͑͹ ੍ݶΛ͔͚ΒΕΔ DBQBCJMJUZͷ੍ݶ TFDDPNQ  "QQ"SNPS 4&-JOVY ͳͲͷ ࢓૊Έ͕ଘࡏ͢Δ ຊϓϨθϯͷޙ൒Ͱ͜ͷ͏ͪ TFDDPNQʹ GPDVT͢Δ༧ఆ ίϯςφ͕ѱ͞Λ͢ΔͱࠔΔʂ
  10. ˜-:$PSQPSBUJPO ͜͜·Ͱͷ·ͱΊ • ίϯςφ͸ϓϩηε͕ͩɺී௨ͷϓϩηεͱ͸Ұຯҧ͏ • ϗετͱִ཭͞Ε࣮ͨߦ؀ڥΛ࣋ͭ-JOVYͷ OBNFTQBDFػೳΛ༻͍࣮ͯݱ • ϗετͱҟͳΔϧʔτϑΝΠϧγεςϜΛ࣋ͭQJWPU@SPPU Λ͢Ε͹

    ίϯςφ͔Βݟ͑ΔϧʔτσΟςΫτϦΛม͑ΒΕΔ • Ϧιʔεͷ࢖͍͗͢Λ༧๷Ͱ͖ΔDHSPVQͷػೳΛ༻͍࣮ͯݱ • ֤छηΩϡϦςΟͷద༻ίϯςφʹ࣮ߦ͞Εͨ͘ͳ͍ૢ࡞Λ੍ݶͰ͖Δ
  11. ˜-:$PSQPSBUJPO  ௿ϨΠϠίϯςφϥϯλΠϜͬͯԿʁ ߴϨΠϠϥϯλΠϜ (CRI ϥϯλΠϜ) ௿ϨΠϠϥϯλΠϜ (OCI ϥϯλΠϜ) ࢦࣔ

    ίϯςφͷ DSFBUF TUBSU LJMM EFMFUF TUBUF ίϯςφɾΠϝʔδɾωοτϫʔΫ౳ͷ શൠతͳ؅ཧΛߦ͏ɻEPDLFS DPOUBJOFSE ͳͲ Ϣʔβɾkubelet ͳͲʹΑΔࢦࣔ ಙӬߤฏ, ΠϥετͰΘ͔Δ Docker ͱ Kubernetes, ٕज़ධ࿦ࣾ (2020), p97 ͷਤΛࢀߟʹ࡞੒ ϗετ͔Βִ཭͞Ε࣮ͨߦ؀ڥΛ ίϯςφͱͯ͠࡞Γग़͠ɺૢ࡞Մೳʹ͢Δ SVOD ZPVLJ H7JTPS ͳͲ
  12. ˜-:$PSQPSBUJPO  ௿ϨΠϠίϯςφϥϯλΠϜͬͯԿʁ ߴϨΠϠϥϯλΠϜ (CRI ϥϯλΠϜ) ௿ϨΠϠϥϯλΠϜ (OCI ϥϯλΠϜ) ࢦࣔ

    ίϯςφͷ DSFBUF TUBSU LJMM EFMFUF TUBUF ίϯςφɾΠϝʔδɾωοτϫʔΫ౳ͷ શൠతͳ؅ཧΛߦ͏ɻEPDLFS DPOUBJOFSE ͳͲ Ϣʔβɾkubelet ͳͲʹΑΔࢦࣔ ಙӬߤฏ, ΠϥετͰΘ͔Δ Docker ͱ Kubernetes, ٕज़ධ࿦ࣾ (2020), p97 ͷਤΛࢀߟʹ࡞੒ ϗετ͔Βִ཭͞Ε࣮ͨߦ؀ڥΛ ίϯςφͱͯ͠࡞Γग़͠ɺૢ࡞Մೳʹ͢Δ SVOD ZPVLJ H7JTPS ͳͲ
  13. ˜-:$PSQPSBUJPO ௿ϨΠϠϥϯλΠϜ͸ͲͷΑ͏ͳࢦࣔΛड͚Δʁ • ߴϨΠϠϥϯλΠϜ͸ɺ௿ϨΠϠϥϯλΠϜͷόΠφϦΛ࣮ߦ͢Δ͜ͱʹΑΓ ίϯςφૢ࡞ͷࢦࣔΛग़͢ • ͜ͷ JOUFSGBDF࢓༷͸ɺ0QFO$POUBJOFS*OJUJBUJWFʹΑΓ 0QFO $POUBJOFS*OUFSGBDF

    0$* 3VOUJNF4QFDJGJDBUJPOͱͯ͠ఆΊΒΕ͍ͯΔ • DSFBUF TUBSU LJMM EFMFUF TUBUFͷछྨͷૢ࡞ͱͦͷ ೖग़ྗ࢓༷Λఆٛ • ௿ϨΠϠϥϯλΠϜ͸͜ͷ࢓༷ʹ४ڌͨ͠ JOUFSGBDFΛఏڙ͢Δඞཁ͕͋Δͷ Ͱɺ0$*3VOUJNFͱ΋ݺ͹ΕΔ IUUQTHJUIVCDPNPQFODPOUBJOFSTSVOUJNFTQFD 
  14. ˜-:$PSQPSBUJPO ௿ϨΠϠϥϯλΠϜ͸ͲͷΑ͏ͳࢦࣔΛड͚Δʁ • ίϯςφ࡞੒࣌ͷ࣮ߦํ๏Λৄ͘͠ݟͯΈΑ͏ $ sudo runc create --bundle test-bundle

    test-container ௿ϨΠϠϥϯλΠϜͷ όΠφϦ ࣮ߦ͍ͨ͠ૢ࡞ ࡞Γ͍ͨίϯςφ໊ σΟϨΫτϦΛ ࢦఆ • #VOEMFʹ͸ɺҎԼͷ΋ͷؚ͕·ΕΔ • ίϯςφͷϧʔτϑΝΠϧγεςϜ • ίϯςφͷઃఆ͕ೖͬͨDPOGJHKTPO ϑΝΠϧ
  15. ˜-:$PSQPSBUJPO ௿ϨΠϠϥϯλΠϜ͸ͲͷΑ͏ͳࢦࣔΛड͚Δʁ • ίϯςφ࡞੒࣌ͷ࣮ߦํ๏Λৄ͘͠ݟͯΈΑ͏ $ sudo runc create --bundle test-bundle

    test-container ௿ϨΠϠϥϯλΠϜͷ όΠφϦ ࣮ߦ͍ͨ͠ૢ࡞ ࡞Γ͍ͨίϯςφ໊ σΟϨΫτϦΛ ࢦఆ • #VOEMFʹ͸ɺҎԼͷ΋ͷؚ͕·ΕΔ • ίϯςφͷϧʔτϑΝΠϧγεςϜ • ίϯςφͷઃఆ͕ೖͬͨDPOGJHKTPO ϑΝΠϧ
  16. ˜-:$PSQPSBUJPO ௿ϨΠϠϥϯλΠϜ͸ͲͷΑ͏ͳࢦࣔΛड͚Δʁ • ίϯςφ࡞੒࣌ͷ࣮ߦํ๏Λৄ͘͠ݟͯΈΑ͏ $ sudo runc create --bundle test-bundle

    test-container ௿ϨΠϠϥϯλΠϜͷ όΠφϦ ࣮ߦ͍ͨ͠ૢ࡞ ࡞Γ͍ͨίϯςφ໊ σΟϨΫτϦΛ ࢦఆ • #VOEMFʹ͸ɺҎԼͷ΋ͷؚ͕·ΕΔ • ίϯςφͷϧʔτϑΝΠϧγεςϜ • ίϯςφͷઃఆ͕ೖͬͨDPOGJHKTPO ϑΝΠϧ
  17. ˜-:$PSQPSBUJPO DSFBUFͨ͠ޙʹTUBSU͕ඞཁʂ $ sudo runc start test-container ௿ϨΠϠϥϯλΠϜͷ όΠφϦ ࣮ߦ͍ͨ͠ૢ࡞

    ىಈ͍ͨ͠ίϯςφ໊ • ͨͩDSFBUF͚ͨͩ͠Ͱ͸ɺίϯςφʹͳΔϓϩηεͷ४උ͕Ͱ͖͚ͨͩͰɺ ·ͩίϯςφ͸࣮ߦ͞Ε͍ͯͳ͍ • ίϯςφىಈ࣌ʹ࣮ߦ͢ΔίϚϯυΛͦͷϓϩηε಺Ͱ࣮ߦ͢Δ͜ͱͰɺॳΊͯ ίϯςφͱͯ͠ىಈ͢Δ • ͦΕΛࢦࣔ͢Δͷ͕ TUBSUίϚϯυ
  18. ˜-:$PSQPSBUJPO ίϯςφ͕ DSFBUFTUBSU͞ΕΔྲྀΕ ϢʔβɾLVCFMFU ͳͲʹΑΔࢦࣔ ίϯςφΠϝʔδΛల։ͯ͠ ϧʔτϑΝΠϧγεςϜͷ४උɾ DPOGJHKTPO ͷ࡞੒ CVOEMFΛࢦఆͯ͠

    SVOD DSFBUFΛ࣮ߦ DPOGJHKTPO ʹैͬͯ OBNFTQBDF෼཭΍ QJWPU@SPPU ͳͲΛ ߦ͍ίϯςφϓϩηεΛ࡞੒ ωοτϫʔΫͷઃఆͳͲΛ ࣮ࢪ SVOD TUBSUΛ࣮ߦ  ࡞੒͞Ε͍ͯͨίϯςφϓϩηεͰ ىಈ࣌ͷίϚϯυΛ࣮ߦ ίϯςφ্ཱ͕͕ͪΔ ߴϨΠϠϥϯλΠϜ $3*ϥϯλΠϜ ௿ϨΠϠϥϯλΠϜ 0$*ϥϯλΠϜ DSFBUFίϚϯυ࣮ߦ͕੒ޭ
  19. ˜-:$PSQPSBUJPO ,PUMJO/BUJWF͸Ͳ͏ಈ͍͍ͯΔͷ͔ .kt Frontend Kotlin IR Backend LLVM IR LLVM

    .kexe • --7.ΛόοΫΤϯυͱͯ͠ར༻͠ɺωΠςΟϒόΠφϦ ͭ·Γ +7. ͕ͳͯ͘΋ಈ͘ʂ Λੜ੒͢Δ
  20. ˜-:$PSQPSBUJPO ,PUMJO/BUJWF͸Ͳ͏ಈ͍͍ͯΔͷ͔ .kt Frontend Kotlin IR Backend LLVM IR LLVM

    .kexe • --7.ΛόοΫΤϯυͱͯ͠ར༻͠ɺωΠςΟϒόΠφϦ ͭ·Γ +7. ͕ͳͯ͘΋ಈ͘ʂ Λੜ੒͢Δ • ϥϯλΠϜͷੑ࣭ • όΠφϦ͕࣮ߦ͞ΕΔͱɺϝΠϯεϨου͚ͩͰͳ͘ ($༻εϨου΋ ্ཱ͕ͪΓɺϚϧνεϨουͰಈ࡞͢Δ • (Pͱಉ͡Α͏ͳ࢓૊Έ
  21. ˜-:$PSQPSBUJPO  $*OUFSPQFSBCJMJUZͷ༷ࢠ import kotlinx.cinterop.ExperimentalForeignApi import platform.linux.__NR_getpid import platform.posix.getpid import

    platform.posix.syscall @OptIn(ExperimentalForeignApi::class) fun basicExample() { // Using POSIX getpid() println(getpid()) // Using syscall to invoke getpid() val pid = syscall(__NR_getpid.toLong()) println("pid = $pid") } libc ͷؔ਺͕ී௨ʹݺ΂Δ syscall ௚ݺͼ΋Ͱ͖Δ IUUQTHJUIVCDPNUFSOCVTUZLPUMJOOBUJWFQMBZHSPVOECMPCNBJOTSDOBUJWF.BJOLPUMJOFYBNQMFT$*OUFSPQ&YBNQMFLU
  22. ˜-:$PSQPSBUJPO  NFN4DPQFEͷར༻ ͜͜Ͱ $ͷؔ਺ʹ ϙΠϯλΛ౉͍ͯ͠Δ @OptIn(ExperimentalForeignApi::class) fun memScopedFileWriteExample() {

    memScoped { val path = /tmp/memscoped_example.txt val content = Hello from Kotlin/Native! val fd = open(path, O_WRONLY or O_CREAT or O_TRUNC, (S_IRUSR or S_IWUSR).toUInt()) if (fd < 0) { perror(open) return } val cContent = content.cstr.getPointer(this) val written = write(fd, cContent, content.length.toULong()) if (written < 0) { // ޙུ ྫ͑͹ ,PUMJOͷ 4USJOHΛ $ʹ͸ ͦͷ··౉ͤͳ͍ $ͱ΍ΓऔΓ͢ΔࡍʹҰ࣌తͳωΠςΟϒ ϝϞϦྖҬΛ֬อ͍ͨ͠ͱ͖ʹ࢖͏ ͜ͷϒϩοΫΛൈ͚ͨ࣌఺Ͱɺ֬อͨ͠ ϝϞϦ͸ղ์͞ΕΔ
  23. ˜-:$PSQPSBUJPO  MJCDʹͳ͍΋ͷ΋ݺ΂Δ ,PUMJOίʔυ಺͔Β ͦͷϥΠϒϥϦͷؔ਺Λ ݺͼग़ͤΔΑ͏ʹͳΔ headers = seccomp.h headerFilter

    = seccomp.h package = libseccomp compilerOpts = -I/usr/include -I/usr/include/x86_64-linux- gnu linkerOpts = -L/usr/lib/x86_64-linux-gnu -lseccomp libseccomp.def import libseccomp.* // தུ val ctx = seccomp_init(defaultAction) ?: run { IUUQTHJUIVCDPNUFSOCVTUZLPOUBJOFSSVOUJNFCMPCNBJOTSDOBUJWF.BJOLPUMJOTFDDPNQ4FDDPNQLU ར༻͍ͨ͠ $ϥΠϒϥϦͷ )FBEFS౳Λ EFGϑΝΠϧʹهࡌ͢Δ
  24. ˜-:$PSQPSBUJPO ࣗ࡞ίϯςφϥϯλΠϜͷ঺հ • ,PUMJO/BUJWF੡ࣗ࡞ίϯςφϥϯλΠϜ LPOUBJOFSSVOUJNF • IUUQTHJUIVCDPNUFSOCVTUZLPOUBJOFSSVOUJNF • Y@ͷ -JOVYͰ͔͠ಈ͖·ͤΜ

    • ݱ࣌఺Ͱɺ0$*3VOUJNF4QFD׬શ४ڌͰ͸͋Γ·ͤΜ • ஫ҙ • DHSPVQOBNFTQBDF UJNFOBNFTQBDFະରԠ • 3PPUMFTT࣮ߦͰ͖·ͤΜ TZTUFNE ࿈ܞͳ͠ • ίϯςφ΁ͷϑΝΠϧ σΟϨΫτϦϚ΢ϯτະରԠ • )PPLTະରԠ • DHSPVQDQV NFNPSZͷ੍ݶͷΈ DHSPVQQBUI͕֊૚తʹͳΔͱ DHSPVQ͕ਖ਼͘͠ػೳ͠ͳ͍ • "QQ"SNPS 4&-JOVY ະରԠ
  25. ˜-:$PSQPSBUJPO • લఏઌड़ͷ௨Γɺ,PUMJO/BUJWF͸ ($εϨου΋ؚΊͨϚϧνεϨουͰىಈ͢Δ • ໊લۭؒ෼཭ͷͨΊVOTIBSF  Λୟ͘ͱͲ͏ͳΔʜʜʁ • ྫ͑͹

    VTFSOBNFTQBDFΛ෼཭͠Α͏ͱ͢ΔͱΤϥʔʹͳΔ  ,PUMJO/BUJWFͷϚϧνεϨουੑʹΑΔ໰୊  ී௨ʹ͸ VOTIBSF  ͕Ͱ͖ͳ͍ʂ IUUQTNBOPSHMJOVYNBOQBHFTNBOVOTIBSFIUNM
  26. ˜-:$PSQPSBUJPO • લఏઌड़ͷ௨Γɺ,PUMJO/BUJWF͸ ($εϨου΋ؚΊͨϚϧνεϨουͰىಈ͢Δ • ໊લۭؒ෼཭ͷͨΊVOTIBSF  Λୟ͘ͱͲ͏ͳΔʜʜʁ  ,PUMJO/BUJWFͷϚϧνεϨουੑʹΑΔ໰୊

     VOTIBSF  ͰΤϥʔʹͳΔέʔε͕͋Δʂ IUUQTHJUIVCDPNUFSOCVTUZLPUMJOOBUJWFQMBZHSPVOE • ΤϥʔʹͳΒͳ͍·Ͱ΋ɺݺͼग़ͨ͠ εϨουͷΈ͕৽͍͠OBNFTQBDFʹೖΓɺ ଞͷεϨου͸ݩͷ OBNFTQBDFʹ࢒ͬͨ ··ͱ͍͏͓͔͠ͳঢ়ଶʹͳΔέʔε͕͋Δ • ӈਤOFUXPSLOBNFTQBDF෼཭ޙʹ ֤εϨουͷ OBNFTQBDFΛදࣔͨ͠΋ͷ ͜ͷεϨου͚ͩ ҧ͏ OBNFTQBDFʹ Ҡಈ͍ͯ͠Δ
  27. ˜-:$PSQPSBUJPO • લఏQJE OBNFTQBDF͸ɺ୯ʹ VOTIBSF ͚ͨͩ͠Ͱ͸ OBNFTQBDFҠಈ͸ൃੜͤͣɺͦͷ ޙʹ GPSLͨ͠ޙͷϓϩηε͕৽͍͠OBNFTQBDFʹೖΔɻͭ·ΓGPSL͕ඞਢ •

    ,PUMJO/BUJWF্Ͱ GPSLͦͷλΠϛϯάͰӡѱ͘ ($͕ൃੜ͢ΔͱͲ͏ͳΔʜʜʁ • GPSL࣌ͷڍಈ • ਌ϓϩηεͷϝϞϦ͸શͯίϐʔ • ਌ϓϩηε͕ϚϧνεϨουͩͬͨ৔߹͸ɺݺͼग़͠ݩεϨουͷΈ͕ίϐʔ • ͭ·Γɺࢠϓϩηε͔Β͢Δͱɺ($ͷ࣌ʹऔΒΕͨϩοΫঢ়ଶ͸ίϐʔ͞ΕΔ͕ɺ ͦͷϩοΫΛղআ͢Δ͸ͣͷ ($εϨου͸΋͸΍ଘࡏ͠ͳ͍ঢ়ଶʹͳͬͯ͠·͏ • ݁ՌతʹɺӬٱʹϩοΫΛղআͰ͖ͣʹ IBOHͯ͠͠·͏  ,PUMJO/BUJWFͷϚϧνεϨουੑʹΑΔ໰୊  GPSL͢Δͱ IBOHͯ͠͠·͏Մೳੑ͕͋Δʂ IUUQTHJUIVCDPNUFSOCVTUZLPUMJOOBUJWFQMBZHSPVOE
  28. ˜-:$PSQPSBUJPO • OBNFTQBDF෼཭͓Αͼ GPSL෦෼͸ ,PUMJO/BUJWFͰ΍ΔͷΛܿ͘ఘΊΑ͏ʂ • ,PUMJOϥϯλΠϜ͕ىಈ͢Δલʹɺ$ͷϓϩάϥϜ͕ىಈ͢ΔΑ͏ʹઃఆ͓ͯ͘͠ • @@BUUSJCVUF@@ DPOTUSVDUPS

    Λ෇༩ͨ͠ $ͷؔ਺͸ɺ FMGόΠφϦͷ JOJU@BSSBZ ͱ͍͏ηΫγϣϯʹ഑ஔ͞ΕɺϓϩάϥϜͷ ϝΠϯؔ਺Λݺͼग़͢લʹ࣮ߦ͞ΕΔ • ͭ·ΓɺγϯάϧεϨουঢ়ଶͰ࣮ߦ͢Δ͜ͱ͕Մೳ • ͕ͩɺDPOGJHKTPO ͷ QBSTFͳͲJOJUJBMͳॲཧΛ $Ͱॻ͘ͷ͸ઈରʹආ͚͍ͨ • ·ͣ͸ී௨ʹ ,PUMJOϥϯλΠϜΛىಈͨ͠ͷͪɺࣗ෼ࣗ਎Λࢦఆͯ͠࠶࣮ߦͤ͞Δ ͜ͱʹΑΓ $ͷϓϩάϥϜ͕ಈ͘Α͏ʹ޻෉ͨ͠  ,PUMJO/BUJWFͷϚϧνεϨουੑʹΑΔ໰୊ 5SJDLZͳղܾࡦ
  29. ˜-:$PSQPSBUJPO • ࣮͸(PͰॻ͔Εͨ SVOD Ͱ΋ಉ͡໰୊ʹۤ͠ΜͰ͍Δ • (P΋σϑΥϧτͰϚϧνεϨουͰಈ࡞͢ΔͨΊ • ಉ༷ʹҰ෦Λ $Ͱ࣮૷͢Δ͜ͱʹΑΓϚϧνεϨου໰୊Λճආ͍ͯ͠Δ

     ,PUMJO/BUJWFͷϚϧνεϨουੑʹΑΔ໰୊ ࣮͸ SVOD Ͱ΋ಉ͡໰୊ʹۤ͠ΜͰ͍Δ IUUQTHJUIVCDPNPQFODPOUBJOFSTSVODCMPCGDGGEFFEGMJCDPOUBJOFSOTFOUFSOTFYFDD
  30. ˜-:$PSQPSBUJPO $SFBUFͷྲྀΕ ུ֓൛ɺ్த·Ͱ .BJO1SPDFTT 4UBHF 4UBHF $POGJHͷύʔεͳͲ DMPOFͯ͠ ࣗ෼ࣗ਎Λ࠶࣮ߦ ֤छOBNFTQBDF

    ͷ෼཭ QJE OBNFTQBDF෼཭ޙ ΋͏Ұ౓ DMPOF ϗετଆͰ ࣮ߦ͢΂͖͋Ε͜Ε ίϯςφϓϩηεଆͰ ࣮ߦ͢΂͖͋Ε͜Ε 4UBSUγάφϧ଴ͪ Stage1 ͸ C Ͱॻ͔Ε͍ͯΔ Parse ݁Ռ͸؀ڥม਺ʹ ॻ͖ࠐΜͰ͓͘
  31. ˜-:$PSQPSBUJPO $SFBUFͷྲྀΕ ུ֓൛ɺ్த·Ͱ .BJO1SPDFTT 4UBHF 4UBHF $POGJHͷύʔεͳͲ DMPOFͯ͠ ࣗ෼ࣗ਎Λ࠶࣮ߦ ֤छOBNFTQBDF

    ͷ෼཭ QJE OBNFTQBDF෼཭ޙ ΋͏Ұ౓ DMPOF ϗετଆͰ ࣮ߦ͢΂͖͋Ε͜Ε ίϯςφϓϩηεଆͰ ࣮ߦ͢΂͖͋Ε͜Ε 4UBSUγάφϧ଴ͪ Stage1 ͸ C Ͱॻ͔Ε͍ͯΔ ͜ΕΒʹؔΘͬͯ͘Δ User Namespace ʹ͍ͭͯ Ұൠ࿦͔Βਂ۷Γ͍͖ͯ͠·͢ Parse ݁Ռ͸؀ڥม਺ʹ ॻ͖ࠐΜͰ͓͘
  32. ˜-:$PSQPSBUJPO • ྫ͑͹ී௨ʹOHJOYΛ্ཱͪ͛ͨ࣌ɺίϯςφ಺ͷϓϩηεΛ࣮ߦ͍ͯ͠ΔϢʔβ͸୭ʁ  ίϯςφΛ࣮ߦ͍ͯ͠ΔϢʔβͬͯ୭ʜʜʁ 6TFS/BNFTQBDF͸ͳͥඞཁ͔ $ docker run -d

    --name nginx-test nginx $ docker top nginx-test UID PID CMD root 3151279 nginx: master process nginx -g daemon off; • ϗετଆ͔Βݟͯ SPPUͰ࣮ߦ͞Εͯ͠·͍ͬͯΔʂ • OBNFTQBDFִ཭͕͋ΔͷͰ௨ৗ͸໰୊ʹͳΒͳ͍͕ɺ੬ऑੑΛಥ͍ͯίϯςφΤεέʔϓ ͞Εͨ৔߹ɺͦͷϓϩηε͸ϗετͷϦιʔεΛ SPPUݖݶͰૢ࡞Ͱ͖ͯ͠·͏ݖݶΛ ࣋ͭ͜ͱʹͳΓɺةͳ͍ʂ
  33. ˜-:$PSQPSBUJPO • ίϯςφͷϓϩηεΛ SPPUͰ͸ͳ͘ɺҰൠϢʔβͷJEΛࢦఆ࣮ͯ͠ߦͤ͞Ε͹͍͍ͷͰ͸ʁ  ͡Ό͋ҰൠϢʔβΛར༻ͨ͠Β͍͍ͷͰ͸ʁ • 3PPU࣮ߦ͕લఏͷΠϝʔδͳͷͰɺࠓ౓͸ίϯςφ಺Ͱݖݶ͕଍Γͣɺ্ཱͪ͛ʹࣦഊ 😭 •

    ͜Μͳ࢓૊Έ͕͋ͬͨΒ͍͍ͷʹʜʜ • ϗετଆ͔ΒݟΔͱɺͦͷϓϩηεͷ VJE ͸ҰൠϢʔβ ϗετଆͰͷಛݖͳ͠ • ίϯςφ಺Ͱ͸ɺͦͷϓϩηε͸ SPPUͱͯ͠ৼΔ෣͑Δ ίϯςφ಺Ͱͷಛݖ͋Γ $ docker run --rm -u 10000 nginx # தུ nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied) 6TFS/BNFTQBDF͸ͳͥඞཁ͔
  34. ˜-:$PSQPSBUJPO • ϓϩηε͕Ϣʔβ͓Αͼάϧʔϓ *%ͷಠࣗͷϏϡʔΛ࣋ͯΔΑ͏ʹ͢Δ࢓૊Έ • ྫ͑͹ɺίϯςφ಺ͷSPPUϢʔβ *% Λɺϗετ্ͷඇSPPUϢʔβ ྫ͑͹ *%

     ʹ NBQQJOH ͢Δͱ • ίϯςφ͔ΒݟΔͱ VJE ɺϗετ͔Βݟ͑Δͱ VJE  • ͭ·Γɺίϯςφ಺Ͱ͸SPPUͱͯ͠ৼΔ෣͍ɺ͕ͩϗετ͔ΒݟΔͱҰൠϢʔβɺ ͱ͍͏ঢ়ଶΛ࣮ݱͰ͖Δʂ 6TFS/BNFTQBDFΛಋೖͯ͠ΈΔ
  35. ˜-:$PSQPSBUJPO • NBQQJOHઃఆ͸ QSPDQJEVJE@NBQ ʹଘࡏ͠ɺϗετͷSPPUݖݶͰฤूͰ͖Δ ྫίϯςφ্ͷ r Λ ϗετ্ͷ r

    ʹ NBQQJOH͢Δઃఆ  6TFS/BNFTQBDFΛಋೖͯ͠ΈΔ Ͳ͏΍ͬͯઃఆ͢Δͷʁ 0 100000 65536 ࢠϓϩηε͔Βݟͨ NBQQJOH͢Δ࠷খ *% ϗετ্Ͱ NBQQJOH ͞ΕΔ΂͖࠷খ *% NBQQJOH ͞ΕΔ *%ͷ਺ • ৽ن 6TFS/BNFTQBDFΛ੾ͬͨͷͪɺ্هϑΝΠϧΛॻ͖ࠐΉ͜ͱʹΑΓ NBQQJOH͕ ઃఆ͞ΕΔ ͡Ό͋ɺVTFSOBNFTQBDFͷ VOTIBSF Λͨ͋͠ͱ ϑΝΠϧॻ͖ࠐΈΛ͢Ε͹͍͍ΜͩͶʂ
  36. ˜-:$PSQPSBUJPO • ৽͍͠6TFS/BNFTQBDFʹೖͬͨϓϩηε͕ࣗ਎ͷ VJEHJENBQQJOHΛ ॻ͖ࠐΉࣄ͸Ͱ͖ͳ͍ɻͦͷͨΊϗετʹॻ͍ͯ΋Β͏ඞཁ͕͋Δ • ͕ɺTUBHFϓϩηε͕ VTFSOBNFTQBDFͷ෼཭Λߦ͏ΑΓલͷλΠϛϯάͰ ϗετ͕ NBQQJOHΛهೖ͠Α͏ͱ͢ΔͱɺΤϥʔʹͳΔ

    • ҎԼͷॱংΛकΒͤΔʹ͸ .BJOͱ 4UBHFͰڠௐΛ͢Δ͔͠ͳ͍  .BJO DMPOFͯ͠ 4UBHFϓϩηεΛ࡞੒  4UBHF VTFSOBNFTQBDF෼཭  .BJO VJEHJENBQQJOHॻ͖ࠐΈ  6TFS/BNFTQBDFΛಋೖͯ͠ΈΔ ͍ͭ୭͕ͦͷ NBQQJOHΛॻ͖ࠐΉͷ͔ʁ
  37. ˜-:$PSQPSBUJPO $SFBUFͷྲྀΕ ུ֓൛ɺ్த·Ͱ .BJO1SPDFTT 4UBHF 4UBHF $POGJHͷύʔεͳͲ DMPOFͯ͠ ࣗ෼ࣗ਎Λ࠶࣮ߦ ͦͷଞ

    OBNFTQBDFͷ෼཭ QJE OBNFTQBDF෼཭ޙ ΋͏Ұ౓ DMPOF VJEHJENBQQJOHΛ ॻ͖ࠐΉ ίϯςφϓϩηεଆͰ ࣮ߦ͢΂͖͋Ε͜Ε 4UBSUγάφϧ଴ͪ 6TFS 6TFSOBNFTQBDFͷ෼཭ VJEHJENBQQJOH SFRVFTUΛૹ৴ NBQQJOH׬ྃ௨஌ DHSPVQͷઃఆͳͲ
  38. ˜-:$PSQPSBUJPO  OBNFTQBDF෼཭Λ֬ೝͯ͠ΈΑ͏ ϗετଆ͔ΒݟΔͱɺVJE  1*%͸ ʹͳ͍ͬͯΔ ίϯςφ಺Ͱ QT BVY

    VJENBQ lzΛઃఆ͠ίϯςφΛىಈ ίϯςφ಺͔ΒΈΔͱ 64&3͸ SPPU 1*%͸  VJE QJE
  39. ˜-:$PSQPSBUJPO $SFBUF 4UBSUͷྲྀΕ ్த͔Β࠷ޙ·Ͱ .BJO1SPDFTT 4UBHF 4UBHF ͦͷଞ OBNFTQBDFͷ෼཭ QJE

    OBNFTQBDF෼཭ޙ ΋͏Ұ౓ DMPOF ίϯςφϓϩηεଆͰ ࣮ߦ͢΂͖͋Ε͜Ε QJWPU@SPPU  ݖݶͷ์غͳͲ 4UBSUγάφϧ଴ͪ 4UBHFQJE Λ௨஌ TFDDPNQ/PUJGZ3FRVFTU TFDDPNQ/PUJGZ%POF *OJU3FBEZ ίϯςφͷঢ়ଶΛ KTPO ʹॻ͖ग़͢ FYFDWF 4UBSUγάφϧ Ҏ߱͸ ίϯςφͷΞϓϦέʔγϣϯʹ ஔ͖׵ΘΔ
  40. ˜-:$PSQPSBUJPO  ίϯςφϓϩηεଆͰ΍Δ΂͖͜ͱ͸ʁ LPOUBJOFSSVOUJNFͰ࣮૷ࡁΈͷॲཧͷΈ࣌ܥྻॱʹྻڍ͠·ͨ͠ ൈਮ ॲཧ આ໌ ϋϚͬͨϙΠϯτ QJWPU@SPPU ϧʔτϑΝΠϧγεςϜͷ੾Γସ͑

    Ϛ΢ϯτ఻೻ͷมߋ͕ඞਢͩͬͨ TFUIPTUOBNF ϗετ໊Λมߋ͢Δ $"1@4:4@"%.*/Λ ESPQ͢Δલ ʹ΍Βͳ͍ͱࣦഊ͢Δ OPOFXQSJWJMFHFઃఆ TFUTJE ܦ༝౳Ͱͷݖݶঢ֨ېࢭ ͜ΕΛ΍Βͳ͍ͱޙͷ TFDDPNQͰ ࣦഊ DBQBCJMJUZCPVOEJOHTFU ϓϩηε͕ࠓޙઈରʹอ࣋͠ͳ͍ DBQBCJMJUZΛ ESPQ TFUVJE ΑΓલʹ࣮ߦ͢Δඞཁ͋Γ TFUVJE VJE ͕ࢦఆ͞Ε͍ͯΔ৔߹ͷΈ࣮ࢪ ಛݖΛ૕ࣦ͢ΔͷͰॱংʹ஫ҙ DBQBCJMJUZCPVOEJOHTFU Ҏ֎ อ࣋͢Δ DBQBCJMJUZΛઃఆ 13@4&5@,&&1$"14ͷ͋Γ͕ͨΈ Λײͨ͡ TFDDPNQGJMUFSద༻ ࣮ߦͰ͖Δ TZTDBMM Λ੍ݶ SPPUͷঢ়ଶ͔ΒݖݶΛࣺͯଓ͚Δ ਖ਼͍͠ॱংͰݖݶΛࣺͯͳ͍ͱɺݖݶΛࣺͯΔݖݶ͕ͳࣦͯ͘ഊɺͳͲ͕ੜ͡ΔͷͰ஫ҙ
  41. ˜-:$PSQPSBUJPO • ϓϩηε͕࣮ߦ͢ΔγεςϜίʔϧΛ੍ݶ͢Δػೳ • ͦͷγεςϜίʔϧ͕࣮ߦ͞Εͨ࣌ɺ୯ʹΤϥʔΛฦ͚ͩ͢Ͱͳ͘ ʮϓϩηεΛऴྃͤ͞ΔʯʮτϨʔαʔΛݺͼग़͢ʯͳͲͷΞΫγϣϯ͕Մೳ • ࠓճͷ࣮૷ͱͯ͠͸ MJCTFDDPNQ ͷؔ਺Λݺͼग़͠·͘Δܗ

    • Ϧετʹ͋Δ֤ TZTDBMM ʹ͍ͭͯ TFDDPNQ@SVMF@BEE  Λݺͼग़͢ • ࠷ޙʹ TFDDPNQ@MPBE  ͯ͠ద༻ • ͜ΕʹΑΓɺ͢΂ͯͷϧʔϧ͕#1'ϓϩάϥϜͱͯ͠ίϯύΠϧ͞ΕɺΧʔωϧʹϩʔυ ͞ΕͯTZTDBMM ؂ࢹ͕։࢝͞ΕΔ  TFDDPNQͱ͸ʁ
  42. ˜-:$PSQPSBUJPO • ϓϩηε͕࣮ߦ͢ΔγεςϜίʔϧΛ੍ݶ͢Δػೳ • ͦͷγεςϜίʔϧ͕࣮ߦ͞Εͨ࣌ɺ୯ʹΤϥʔΛฦ͚ͩ͢Ͱͳ͘ ʮϓϩηεΛऴྃͤ͞ΔʯʮτϨʔαʔΛݺͼग़͢ʯͳͲͷΞΫγϣϯ͕Մೳ • ࠓճͷ࣮૷ͱͯ͠͸ MJCTFDDPNQ ͷؔ਺Λݺͼग़͠·͘Δܗ

    • Ϧετʹ͋Δ֤ TZTDBMM ʹ͍ͭͯ TFDDPNQ@SVMF@BEE  Λݺͼग़͢ • ࠷ޙʹ TFDDPNQ@MPBE  ͯ͠ద༻ • ͜ΕʹΑΓɺ͢΂ͯͷϧʔϧ͕#1'ϓϩάϥϜͱͯ͠ίϯύΠϧ͞ΕɺΧʔωϧʹϩʔυ ͞ΕͯTZTDBMM ؂ࢹ͕։࢝͞ΕΔ  TFDDPNQͱ͸ʁ
  43. ˜-:$PSQPSBUJPO • ͋Δ TZTDBMM ͕ݺ͹Εͨ࣌ʹɺϢʔβۭؒʹ͋ΔτϨʔαʔΛಈ࡞͍ͤͨ࣌͞ʹ༻͍Δ • τϨʔαʔ͸ɺίϯςφ্ཱͪ͛࣌ʹ͋Β͔͡Ί DPOGJHKTPO ͷ MJTUFOFS1BUI

    ʹ ࢦఆͨ͠ιέοτΛ MJTUFO͓ͯ͘͠ • 4UBHFϓϩηε͸ɺTFDDPNQϑΟϧλΛϩʔυͨ࣌͠఺ͰɺΧʔωϧ͔Β௨஌Λ ड͚औΔͨΊͷ OPUJGZ'E ΛऔಘͰ͖Δ  ʮτϨʔαʔΛݺͼग़͢ʯʜʜʁ ͡Ό͋ɺ଴ػ͍ͯ͠ΔτϨʔαʔʹ ͜ͷ OPUJGZ'E Λڭ͑ͯ͋͛Ε͹ྑͦ͞͏ʂ ྫSVONZUSBDFSTPDLFU
  44. ˜-:$PSQPSBUJPO  OPUJGZ'E ΛͲ͏సૹ͢Δʁ • 4UBHFϓϩηε͔Β௚઀τϨʔαʹ OPJUGZ'E Λసૹ͢Δ͜ͱ͸Ͱ͖ͳ͍ • ྫ͑͹ϑΝΠϧσΟεΫϦϓλύογϯάͷ࢓૊ΈΛ༻͍ͯ

    GE Λసૹ͠Α͏ʹ΋ɺ TUBHFϓϩηε͸ MJTUFOFS1BUI ʹΞΫηεͰ͖Δͱ͸ݶΒͳ͍ • QJWPU@SPPU ޙͷ TUBHFϓϩηε͸ྫ͑͹ϗετͷ SVONZUSBDFSTPDLFU ʹΞΫηεͰ͖ͳ͍ • ࢓ํ͕ͳ͍ͷͰ GE ͷసૹΛ .BJO1SPDFTT͕஥հ͢Δඞཁ͕͋Δ ਤ͸࠶ܝ .BJO1SPDFTT 4UBHF1SPDFTT
  45. ˜-:$PSQPSBUJPO ͦͷଞ OBNFTQBDFͷ෼཭ QJE OBNFTQBDF෼཭ޙ ΋͏Ұ౓ DMPOF QJWPU@SPPU  ݖݶͷ์غͳͲ

    4UBSUγάφϧ଴ͪ *OJU3FBEZ ίϯςφͷঢ়ଶΛ KTPO ʹॻ͖ग़͢ FYFDWF 4UBSU γάφϧ .BJO1SPDFTT 4UBHF 4UBHF $POGJHͷύʔεͳͲ DMPOFͯ͠ ࣗ෼ࣗ਎Λ࠶࣮ߦ VJEHJENBQQJOHΛ ॻ͖ࠐΉ 6TFS 6TFSOBNFTQBDFͷ෼཭ VJEHJENBQQJOH SFRVFTUΛૹ৴ NBQQJOH׬ྃ௨஌ DHSPVQͷઃఆͳͲ TFDDPNQOPUJGZ'E ͷड͚౉͠
  46. ˜-:$PSQPSBUJPO • ,PUMJO/BUJWFͰࣗ࡞ͨ͠௿ϨΠϠίϯςφϥϯλΠϜʹ͍ͭͯɺ࣮૷தʹ௚໘ͨ͠՝୊΍ ͦͷղܾࡦʹ͍ͭͯڞ༗ͨ͠ • /BNFTQBDF෼཭ॲཧͰ͸ ,PUMJO/BUJWFͷϚϧνεϨουಛੑʹɺ෼཭Ҏ߱Ͱ͸ ݖݶΛࣺͯΔॲཧͷෳࡶࣗ͞ମʹۤ͠ΊΒΕͨ • ,PUMJO/BUJWFͰγεςϜϓϩάϥϛϯάΛ͢Δ͜ͱʹ͍ͭͯ

    • ݁࿦ҙ֎ͱͰ͖Δ • ,PUMJOͷϞμϯͳݴޠػೳΛ࢖͍ͳ͕Βɺطଘ࣮૷ͷ 3VTU΍(PͰॻ͔Ε͍ͯΔػೳ͕ ࣮૷ՄೳͰ͋Δ͜ͱ͕Θ͔ͬͨ • ,PUMJO͸͓ͦΒ͘ 3VTU΍$ΑΓ͸ଟ͘ͷਓʹͱͬͯಡΈ΍͘͢ɾॻ͖΍͍͢ݴޠͳͷͰɺ γεςϜϓϩάϥϛϯά΁ͷϋʔυϧΛԼ͛ΔҙຯͰ͸ྑ͍͔΋͠Εͳ͍  ·ͱΊ