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

なぜ Scala 3 で変わったのか / Why things are changed in Scala3?

25fb3e7054e52e524817044853c2d4c3?s=47 Taisuke Oe
January 31, 2020

なぜ Scala 3 で変わったのか / Why things are changed in Scala3?

Scala 3で変わった機能の背景事情と、現段階でわかっているマイグレーションの話中心です。

2020/1/31 (株)セプテーニ・オリジナル 社内勉強会 資料

25fb3e7054e52e524817044853c2d4c3?s=128

Taisuke Oe

January 31, 2020
Tweet

Transcript

  1. ͳͥ4DBMBͰมΘͬͨͷ͔ 5BJTVLF0F!0&@VJB

  2. 8IPBN* w 5BJTVLF0F<ˏ0&@VJB> w ϑϦʔϥϯεΤϯδχΞ w ࣮ફ4DBMBೖ໳ڞஶऀ w 4DBMB.BUTVSJ 4DBMBUIPOओ࠵

    w ג ηϓςʔχɾΦϦδφϧٕज़ ΞυόΠβʔ
  3. ࠓ೔͸4DBMBͷ࿩

  4. 4DBMBͷ࣮૷΋େ٧Ί w MBNQFQqEPUUZϦϙδτϦͰ։ൃਐߦத w ೥݄%PUUZ3$ʹͯʮ'FBUVSF$PNQMFUFʯͷΞφ΢ϯε w ೥தʹ4DBMBϦϦʔεΛ༧ఆ w 5IF3PBE5P4DBMB w

    ެࣜαϙʔτ͞ΕΔ*%&͸ݱࡏ7JTVBM4UVEJP$PEFͷΈ w ݱࡏ%PUUZ-BOHVBHF4FSWFS࣮૷Λར༻ w .FUBMT΋αϙʔτ༧ఆ

  5. ຊ೔࿩͢͜ͱ w 4DBMBͰ͸ɺݴޠઃܭશൠʹมߋ͕Ճ͑ΒΕ͍ͯΔ w ܕγεςϜɺ৽ػೳɺΩʔϫʔυɺͦͷ΄͔ߏจͳͲɺର৅΋༷ʑ w େࡶ೺ʹ͍͑͹ɺҰ௨Γ࣮૷׬ྃɻ͕ͩεςʔλε͸༷ʑ w ΄΅࢓༷͕֬ఆͯ͠Δ΋ͷ w

    ࢓༷͕Ұ෦ٞ࿦தͷ΋ͷ w ࠾༻ੋඇ͸ະ֬ఆ͕ͩɺࢼݧతʹ࣮૷ࡁΈ
  6. ຊ೔࿩͢͜ͱ w 4DBMBͷมߋ఺ʹ͍ͭͯɺʮͲ͏มΘΔͷ͔ʯ͸ެࣜ υΩϡϝϯτΛಡΉͷ͕Ұ൪ w %PUUZ%PDVNFOUBUJPO w ʮͳͥมߋ͞ΕΔͷ͔ʯͱ͍͏ετʔϦʔʹয఺Λ͋ ͯͭͭɺղઆ͠·͢ɻ

  7. 4DBMB։ൃͷྺ࢙

  8. 4DBMB։ൃͷྺ࢙

  9. 4DBMB։ൃͷྺ࢙ w MBNQFQqEPUUZ͕೥݄೔ʹग़ݱ

  10. %PUUZͷൃද w .BSUJO0EFSTLZڭतʹΑΔ4USBOHF-PPQͷߨԋ w ౰࣌ɺ%PUUZ͸৽ݴޠͷίʔυωʔϜͩͬͨ

  11. None
  12. ྑ͍ઃܭΛൃݟ͢ΔͨΊͷݴޠ w 4DBMB͸ɺྑ͍ઃܭΛൃݟͰ͖ΔݴޠΛ໨ࢦ͍ͯ͠Δ w ࠓճɺҎԼͷ̎ͭʹϑΥʔΧεͯ͠঺հ͠·͢ w ܕͷઃܭ w Ϟδϡʔϧͷઃܭ

  13. ܕͷઃܭ w ߹ซܕ c  w ަࠩܕ   w

    ܕϥϜμ
  14. ߹ซܕ 6OJPO5ZQF w "c# w ʮ"΋͘͠͸#ʯΛද͢ܕ w "͓Αͼ#ͷTVQFSUZQF w -FBTU6QQFS#PVOEͷܭࢉΛ༗ݶʹͰ͖Δ

    w ࢀߟ4*11SPQPTBMUP"EE6OJPO5ZQFTUPUIF-BOHVBHF w "c##c"
  15. -FBTU6QQFS#PVOE w ࿨༁͢Δͱʮ࠷খ্քʯɻ w MVCͱ΋ུ͞ΕΔɻ w ʮ͋Δܕͷू߹9ʹ͍ͭͯɺ9ͷ্ݶڥք͔ΒͳΔू߹& ʹ࠷খݩ͕ଘࡏ͢Δ৔߹ɺͦͷ࠷খݩʯͷ͜ͱΛࢦ͢ɻ w 4DBMBͰ͸ܕਪ࿦ͷࡍͳͲɺසൟʹܭࢉ͞ΕΔɻ

  16. -FBTU6QQFS#PVOE ֓આ w ͬ͘͟Γݴ͑͹ʮෳ਺ͷܕʹڞ௨͢ΔTVQFSUZQFͷ͏ͪɺ࠷΋TVCUZQFʯ w ྫ )PHFͱ'VHBͷMVC͸1SPEVDUXJUI4FSJBMJ[BCMF w 4DBMBYͰ͸MVCͰແݶͷܭࢉ͕ඞཁʹͳΔέʔε͕͋Γɺۙࣅ஋Λ࢖͏ͳͲ ͍ͯ͠Δɻ

    w 4DBMBͰ͸߹ซܕʹΑΓɺ͠͹͠͹༗ݶͷܭࢉͰ͓͞ΊΒΕΔɻ case class Hoge() case class Fuga() val list = List(Hoge(), Fuga()) //Scala 2.13.1 //list: List[Product with java.io.Serializable] = List(Hoge(), Fuga())
  17. MVCܭࢉͰ߹ซܕ͕໾ཱͭ trait C[+T] trait D trait E class A extends

    C[A] with D class B extends C[B] with D with E val list = List(new A(), new B()) //Scala 2.13.1 //list: List[C[C[D] with D] with D] = List(A@456b140f, B@2459333a) //Dotty 0.21.0-RC1 //val list: List[C[A | B] & D] = List(A@2737a1e5, B@7bebb2d0)
  18. w 4DBMB w ༨ஊ ίϯύΠϧ௨Γ·͢ scala> list.head res9: C[C[D] with

    D] with D = A@6e00d737 scala> val a: C[C[D] with D] with D = new A() a: C[C[D] with D] with D = A@10b7b5f0
  19. ަࠩܕ *OUFSTFDUJPOBM5ZQF w "# w "͓Αͼ#ͷTVCUZQF w "##" w "XJUI##XJUI"ͱͳΔέʔε͕͋Δ

    w "XJUI#ܕ DPNQPVOEUZQF Λஔ͖׵͑Δ༧ఆ w OFX FYUFOETʹ͸Ҿ͖ଓ͖࢒Δ
  20. ܕϥϜμ

  21. 4DBMBͷߴ֊(FOFSJDT w 4DBMB͸ߴ֊ͷ(FOFSJDTΛαϙʔτ͍ͯ͠Δ w ܕύϥϝʔλʹܕίϯετϥΫλ౉͢৔߹ɺܕίϯετ ϥΫλύϥϝʔλͷ਺͕Ұக͢Δඞཁ͕͋Δɻ w scala> //ߴ֊ͷGenericsɻܕίϯετϥΫλFΛड͚औΔɻ scala>

    class A[F[_]] defined class A scala> //ListΛܕίϯετϥΫλͱͯ͠౉͢ɻ scala> new A[List]() res0: A[List] = A@188b6035 scala> //MapΛܕίϯετϥΫλͱͯ͠౉͢ɻ scala> new A[Map]() ^ error: Map takes two type parameters, expected: one
  22. w 4DBMBͰܕίϯετϥΫλΛఆٛ͢ΔͨΊʹɺຖճUZQFఆٛ͢Δͷ͕৑௕ʜͱ͍͏͜ͱͰੜΈग़͞ΕͨΠ σΟΦϜ w ߏ଄త෦෼ܕʴந৅ܕϝϯόʴܕࣹӨΛར༻͍ͯ͠Δ͕ɺ෼͔Γʹ͍͘ߏจͳͷ͕೉఺ɻ w 4DBMBɺίϯύΠϥϓϥάΠϯͳ͠ w trait MyFunctor[F[_]]{

    def map[T, U](f: F[T])(func: T => U):F[U] } class EitherMyFunctor[L] extends MyFunctor[({ type λ[R] = Either[L, R]})#λ]{ def map[T, U](f: Either[L, T])(func: T => U): Either[L, U] = f match { case Right(r) => Right(func(r)) case Left(l) => Left(l) } } ແ໊ܕίϯετϥΫλ
  23. w UZQFMFWFMLJOEQSPKFDUPS͸ɺܕϥϜμ ͰܕίϯετϥΫλ Λهड़͢ΔͨΊͷίϯύΠϥϓϥάΠϯ w ͜͜Ͱ ͸ɺܕϥϜμͷQMBDFIPMEFSߏจɻ w ࢀߟ஋ϨϕϧͷQMBDFIPMEFSߏจʜ-JTU 

    NBQ G @  w trait MyFunctor[F[_]]{ def map[T, U](f: F[T])(func: T => U):F[U] } class EitherMyFunctor[L] extends MyFunctor[λ[R => Either[L, R]]]{ def map[T, U](f: Either[L, T])(func: T => U): Either[L, U] = f match { case Right(r) => Right(func(r)) case Left(l) => Left(l) } } class AnotherEitherMyFunctor[L] extends MyFunctor[Either[L, *]]{ def map[T, U](f: Either[L, T])(func: T => U): Either[L, U] = f match { case Right(r) => Right(func(r)) case Left(l) => Left(l) } } ,JOEQSPKFDUPS
  24. ܕϥϜμ5ZQF-BNCEB w 4DBMBͰ͸ɺσϑΥϧτͰܕϥϜμ͕αϙʔτ͞ΕΔ w trait MyFunctor[F[_]]{ def map[T, U](f: F[T])(func:

    T => U):F[U] } class EitherMyFunctor[L] extends MyFunctor[[R] =>> Either[L, R]] { def map[T, U](f: Either[L, T])(func: T => U): Either[L, U] = f match { case Right(r) => Right(func(r)) case Left(l) => Left(l) } }
  25. ܕϥϜμ5ZQF-BNCEB w %PUUZ͔ΒɺNJHSBUJPOͷͨΊʹ:LJOEQSPKFDUPSϑϥά ͰLJOEQSPKFDUPSޓ׵ͷQMBDFIPMEFSߏจ͕௥Ճ͞ΕΔɻ w ࢀߟ'JY*NQMFNFOULJOEQSPKFDUPS DPNQBUJCJMJUZ w trait MyFunctor[F[_]]{

    def map[T, U](f: F[T])(func: T => U):F[U] } class EitherMyFunctor[L] extends MyFunctor[Either[L, *]]{ def map[T, U](f: Either[L, T])(func: T => U): Either[L, U] = f match { case Right(r) => Right(func(r)) case Left(l) => Left(l) } }
  26. ϫΠϧυΧʔυܕมߋͷఏҊ w 1SF4*1VTJOHVOEFSTDPSFTGPSUZQFMBNCEBT w 4DBMBYͰ͸ɺΞϯμʔείΞ ྫ'<@> ͸ϫΠϧυΧʔυܕΛද͢ɻ w ܕϥϜμͷQMBDFIPMEFSߏจͰ΋ɺΞϯμʔείΞΛ࢖͍͍ͨ w

    ϫΠϧυΧʔυܕʹׂΓ౰ͯΔه߸Λม͑Ε͹Α͍ͷͰ͸  w +BWBಉ༷ ʹ͢ΔҊ w /* ҎԼͷίʔυ͸·ͩίϯύΠϧ௨Βͳ͍͕ɺ΋࣮͠ݱ͢Δͱ͜͏ͳΔɻ Dotty-0.21.0-RC1ݱࡏͷঢ়گ: - ? ΋ɺϫΠϧυΧʔυܕͱͯ͠࢖͑Δ - _ ΛɺܕϥϜμͷplaceholderߏจͱͯ͠࢖͑ͳ͍ɻ */ trait MyFunctor[F[?]]{ def map[T, U](f: F[T])(func: T => U):F[U] } class EitherMyFunctor[L] extends MyFunctor[Either[L, _]]{ def map[T, U](f: Either[L, T])(func: T => U): Either[L, U] = f match { case Right(r) => Right(func(r)) case Left(l) => Left(l) } }
  27. ϫΠϧυΧʔυܕมߋͷಓఔ w ΋࣮͠ݱ͢ΔͱɺΞϯμʔείΞ@ͷར༻৔ॴ͕ಉ͡Ͱɺ༻్͚ͩมΘΔɻ w ιʔεͷޓ׵ੑΛഁյ͢Δɻ w ౓ͷมߋͰࡁ·ͳ͍ w ௕ظʹΘͨΔNJHSBUJPOϓϥϯ͕ఏҊ͞Ε͍ͯΔʢ͕ɺ·ͨະ֬ఆ 

    w 4DBMBYLJOEQSPKFDUPSʜܕϥϜμQMBDFIPMEFSΛ ͔Β ΁มߋ ࡁ  w 4DBMBʜ@ͱ ΛϫΠϧυΧʔυܕͱͯ͠ڐ༰ @͸TUSJDUͰඇਪ঑ ΠϚίί w 4DBMBʜϫΠϧυΧʔυܕͱͯ͠ͷ@ར༻Λඇਪ঑ w 4DBMBʜϫΠϧυΧʔυܕͱͯ͠ͷ@Λ࡟আ w 4DBMBʜܕϥϜμͷQMBDFIPMEFSͱͯ͠@Λ௥Ճ
  28. Ϟδϡʔϧͷઃܭ

  29. ܧঝΑΓ߹੒ w &⒎FDUJWF+BWBOEFEJUJPOΑΓҾ༻ w *UFN'BWPSDPNQPTJUJPOPWFSJOIFSJUBODF w 6OMJLFNFUIPEJOWPDBUJPO JOIFSJUBODFWJPMBUFTFODBQTVMBUJPO w *UFN%FTJHOBOEEPDVNFOUGPSJOIFSJUBODFPSFMTFQSPIJCJUJU

    w ܧঝͰTVQFSUZQFͷ࣮૷Λमਖ਼͢ΔͱɺͦͷΧϓηϧԽΛഁյ͢ΔՄೳੑ͕͋Δɻ w ܧঝ͢Δඞཁ͕ͳ͍ݶΓɺ߹੒ͱϝιουݺͼग़͠Λར༻͢Δ΂͠ɻ w ܧঝ͍ͤͨ͞ΫϥεΛ໌ࣔ͠ɺద੾ʹઃܭ͢Δɻͦͷ΄͔͸ܧঝΛආ͚Δɻ
  30. ܧঝΑΓ߹੒ w ʰࠓ·Ͱͷͱ͜Ζɺ4DBMBΛؚΉΦϒδΣΫτࢦ޲ݴޠ ͸ɺ߹੒ΑΓ΋ܧঝͷํ͕؆୯Ͱ͋ΔɻܧঝͰ͸ FYUFOETઅ͚͕ͩඞཁͳҰํɺ߹੒Ͱ͸ɺҰ࿈ͷҕৡͷ ͨΊʹ৑௕ͳ࿑ۤΛඞཁͱ͢Δɻʱ w ʰͦͷҙຯʹ͓͍ͯɺΦϒδΣΫτࢦ޲ݴޠ͸ɺϓϩά ϥϚΛڧྗ͗͢Δख๏΁ͱۦΓཱ͍ͯͯΔɻʱ w

    IUUQTEPUUZFQqDIEPDTSFGFSFODFPUIFSOFXGFBUVSFTFYQPSUIUNMNPUJWBUJPOΑ Γൈਮɾ຋༁
  31. ܧঝΑΓ߹੒͢ΔͨΊͷػೳ w ܧঝ͍ͤͨ͞ΫϥεΛ໌ࣔͤ͞ΔPQFO w ҕৡΛ؆୯ʹ͢ΔFYQPSU

  32. 0QFO w DMBTTͷ৽ͨͳΞΫηεम০ࢠ w ܧঝ͞ΕΔ͜ͱΛҙਤͨ͠DMBTTʹ͚ͭΔ w PQFODMBTTͰ͸ͳ͍۩৅ΫϥεΛಉҰιʔε֎͔Βܧ ঝ͢Δͱɺܯࠂ͞ΕΔ w 4DBMBͰ͸TUSJDUϑϥά͕༗ޮͳ͚࣌ͩܯࠂ

    w JNQPSUTDBMBMBOHVBHFBEIPD&YUFOTJPOTͰܯࠂ཈੍
  33. 0QFO //openclass.scala package p open class PleaseExtendMe { def hello(name:

    String): String = s"Hello, ${name}!" } class DontWantToExtendMe { def hello(name: String): String = s"Hello, ${name}!" } //subtype.scala package p class A extends PleaseExtendMe { override def hello(name: String): String = super.hello(name) + " " } class B extends DontWantToExtendMe { override def hello(name: String): String = super.hello(name) + " "
  34. 0QFO w EPUDTUSJDU w [warn] -- Feature Warning: /Users/{my path}/DottySandbox/src/main/scala/oop/subtype.scala:

    7:16 [warn] 7 |class B extends DontWantToExtendMe { [warn] | ^^^^^^^^^^^^^^^^^^ [warn] |Unless class DontWantToExtendMe is declared 'open', its extension in a separate file should be enabled [warn] |by adding the import clause 'import scala.language.adhocExtensions' [warn] |or by setting the compiler option -language:adhocExtensions. [warn] |See the Scala docs for value scala.language.adhocExtensions for a discussion [warn] |why the feature should be explicitly enabled.
  35. ܧঝؔ࿈ͷम০ࢠ੔ཧ w ಉҰιʔεϑΝΠϧ֎͔ΒͷܧঝΛ૝ఆ w PQFODMBTT w BCTUSBDUDMBTT w USBJU w

    ಉҰιʔεϑΝΠϧ֎͔Βͷܧঝ΋Մೳ ܯࠂ  w DMBTT w ಉҰιʔεϑΝΠϧ֎͔ΒͷܧঝΛېࢭ ίϯύΠϧΤϥʔ  w TFBMFE w ܧঝΛېࢭ w pOBM
  36. &YQPSU w ҕৡΛ؆ศʹ͢Δػೳ w ͋ΔΦϒδΣΫτΛFYQPSU͢ΔͱɺΤΠϦΞεͷϝϯόʔ͕ࣗ ಈతʹ௥Ճ͞ΕΔ w class DontWantToExtendMe {

    def hello(name: String): String = s"Hello, ${name}!" } class Wrapper(dont: DontWantToExtendMe) { export dont._ // ্هͷexport͸ɺҎԼͱ౳Ձ // def hello(name: String): String = dont.hello(name) } val wrapper = new Wrapper(new DontWantToExtendMe()) println(wrapper.hello("world"))
  37. &YQPSU w FYQPSUͰɺଞͷϝϯόͱিಥ͢ΔͱίϯύΠϧΤϥʔ w class DontWantToExtendMe { def hello(name: String):

    String = s"Hello, ${name}!" } class Wrapper(dont: DontWantToExtendMe) { export dont._ def hello(name: String): String = s"Hello, ${name} from wrapper!" } [error] -- [E120] Duplicate Symbol Error: /Users/{my_path}/DottySandbox/src/main/scala/oop/ OpenClass.scala:13:16 [error] 13 | export dont._ [error] | ^ [error] | Double definition: [error] | def hello(name: String): String in class Wrapper at line 14 and [error] | final def hello(name: String): String in class Wrapper at line 13 [error] | have the same type after erasure. [error] one error found
  38. 4DBMB΁ͷҠߦ

  39. 4DBMB΁ͷҠߦ w 5IF3PBE5P4DBMB w 4DBMBͷޓ׵ੑ w ϚΠάϨʔγϣϯ w ࠓͰ͖Δ͜ͱ

  40. 4DBMBͷόΠφϦޓ׵ੑ w 4DBMB͔Βɺ4DBMBͷʢϚΫϩҎ֎ͷʣόΠφϦΛར༻ Ͱ͖Δ w কདྷతʹɺ4DBMBͷόΠφϦ 5"45Z Λ4DBMB͔Β ར༻Ͱ͖ΔΑ͏ʹ͢Δ༧ఆ ࢀߟ

     w ͞Βʹ4DBMBYܥͰ͸ɺ5"45ZʹΑΓόΠφϦޓ׵ੑ͕ҡ࣋ ͞ΕΔΒ͍͠  ʜࢀߟ w ඪ४ϥΠϒϥϦ JFίϨΫγϣϯ ͸4DBMBͰมߋͳ͠ w 4DBMBͷඪ४ϥΠϒϥϦΛར༻͢Δ
  41. 4DBMBͷιʔεޓ׵ੑ w 4DBMBͷߏจͷେ෦෼͸ɺ4DBMBͰ΋ίϯύΠ ϧ͸Ͱ͖Δ w 4DBMBͰมߋ͞ΕͨߏจͰ͸ɺچߏจ͕ඇਪ঑ͱ ͳΔɻݱࡏɺچߏจͳͲΛܯࠂ͢ΔͨΊͷTUSJDUϑϥ ά͕༻ҙ͞Ε͍ͯΔɻ w ͢ͰʹͰඇਪ঑ͱͳ͍ͬͯΔߏจ΍ػೳ͸࡟আ͞Ε

    Δ
  42. 4DBMBͷϚΫϩͷޓ׵ੑ w 5IF3PBE5P4DBMB8IBUBCPVUNBDSP  w ൈਮ5IFNBDSPTZTUFNGSPN4DBMBJTEFFQMZ UJFEUPUIFJOUFSOBMTPGUIF4DBMBDPNQJMFSBOE DBOOPUCFNJHSBUFEJOBDPNQBUJCMFGBTIJPOUP 4DBMB w

    ϚΫϩΛར༻͍ͯ͠ΔϥΠϒϥϦ͸ɺ4DBMB޲͚ʹॻ ͖׵͕͑ඞཁɻॻ͖׵͑πʔϧ౳ͷิॿ͸͓ͦΒ͘ͳ ͍ɻ 4DBMBίϯύΠϥͱͷີ݁߹ͷ͍ͤͰͰ͖ͳ͍
  43. ϚΠάϨʔγϣϯ w 4DBMBpYͷ׆༻͕த৺ͱͳΔ༧ఆ w 4DBMBҠߦͷͨΊʹ։ൃ͕࢝·ͬͨɺ੩తղੳʹΑΔ 3FXSJUFπʔϧ w 4DBMBpYࣗମ͸ɺ͞·͟ͳϓϩδΣΫτͰϓϩμΫγϣϯ౤ೖ ͞Ε͍ͯΔ w

    4DBMBpY༻ͷ4DBMBSFXSJUFSVMF͸ɺ·ͩ͋·Γ࣮૷͞Εͯ ͍ͳ͍ ࣌఺  w 4DBMB$FOUFSओମͰɺSFXSJUFSVMFͷ࣮૷ʹऔΓ૊Ή༧ఆ
  44. ϚΠάϨʔγϣϯ w EPUDʹ΋SFXSJUFϑϥά͕༻ҙ͞Ε͍ͯΔ w 4JHOJpDBOU*OEFOUBUJPOͷॻ͖׵͑ʹར༻͞Ε͍ͯΔ w ࠓޙͲͷఔ౓׆༻͢Δͷ͔ɺ4DBMBpYͱͷ࢖͍෼͚͸ ෆ໌

  45. ϥΠϒϥϦϝϯςφ͕ ࠓऔΓ૊ΜͰ͍Δ͜ͱ w ࢼݧతʹEPUUZରԠΛ͸͡Ί͍ͯΔਓ͕ͪΒ΄Β͍·͢ଟँ w $BUT $JSDFͷϚΫϩҎ֎͸େৎ෉ͦ͏ w 4DBMJLF+%#$DPSF ϚΫϩͳ͠

    ͸େৎ෉ͦ͏  w .6OJU͸%PUUZ.BDSPʹରԠɺϦϦʔε͍ͯ͠Δ w ௥ه 044BOE1SPGFTTJPOBMUIPVHIUTPONJHSBUJOHUP4DBMB w $SPTTCVJME༻ͷόʔδϣϯґଘιʔεͰॏෳίʔυ͕૿͑ͦ͏ɺͳ Ͳͷݒ೦Λද໌͍ͯ͠Δ
  46. ɹۀ຿4DBMBϢʔβ͕ ɹɹɹɹɹɹࠓͰ͖Δ͜ͱɹɹɹ w ·ͣ͸4DBMBܥ΁ͷΞοϓσʔτ͠·͠ΐ͏ɻ w 4DBMBϚΠάϨʔγϣϯͷΤίγεςϜʹ৐ΔͨΊ w ݱ࣌఺Ͱඇਪ঑ͷػೳɾߏจ΋मਖ਼͠·͠ΐ͏ w ීஈ͓ੈ࿩ʹͳ͍ͬͯΔ044΁ͷߩݙνϟϯεʂ

  47. w 5IFCJHHFTUUIJOH4DBMBOFFETGSPNUIFDPNNVOJUZJTGPS FWFSZPOFUPCFHJOQPSUJOHUIFJSDPEF w ʮͥͻ4DBMBΛΈͳ͞ΜͷϓϩδΣΫτͰࢼ͍ͯͩ͘͠͞ʂʯ w ͨͩ·ͩ4DBMBϚΫϩʹରԠͯ͠ΔϥΠϒϥϦ͕গͳ͍ɻ ґଘϥΠ ϒϥϦؚΊ ϚΫϩΛ࢖ͬͯͳ͍ϓϩδΣΫτ͡Όͳ͍ͱݫͦ͠

    ͏ʜʜ  w ۀ຿ίʔυͰ4DBMBΛࢼͤΔͷ͸ɺ΋͏গ͠ޙʹͳΓͦ͏ɻ w ۀ຿ίʔυͷຊ֨4DBMBରԠ͸ɺ۩ମతͳϚΠάϨʔγϣϯͷ৘ใ͕ ग़͔ͯΒͰ΋஗͘ͳ͍ɻ ɹۀ຿4DBMBϢʔβ͕ ɹɹɹɹɹɹࠓͰ͖Δ͜ͱɹɹɹ
  48. 4DBMBY΁ͷҠߦ ਪଌ w ϚΫϩΛར༻͍ͯ͠ΔґଘϥΠϒϥϦͷঢ়گ࣍ୈ w TDBMB7FSTJPOΛ4DBMBʹ্͛Δ͚ͩͳΒ೉͘͠ͳͦ͞͏ w 4DBMBͷؒʹɺ4DBMB४ڌͷιʔεʹΞοϓσʔτ͕͢Δͷ͕େม͔ ΋ʁ w

    4DBMBpYͷSFXSJUFͷΧόϨοδ࣍ୈ w 4DBMB ͷείʔϓ࣍ୈ w ඇਪ঑ػೳɾߏจͷ࡟আ w 4DBMBYͱͷόΠφϦޓ׵ੑ
  49. 4DBMBJTBMSFBEZ PWFSGVMMXJUIDIBOHFT IUUQTDPOUSJCVUPSTTDBMBMBOHPSHUTJQNBLFDMBTTFTTFBMFECZEFGBVMU

  50. ࠓճѻΘͳ͔ͬͨ΋ͷ w Χόʔ͠ͳ͔ͬͨ΋ͷ ෼͔Γ΍͍͢ศར͕͋͞Δ΋ͷʣ w 5VQMF'VODUJPO੍ݶఫഇ w 0QBRVFUZQF w FOVN

    w 5SBJUQBSBNFUFST w ͳͲ
  51. w ࡉʑͨ͠΋ͷ w 0QFSBUPST w $POUSPM4ZOUBY w .BUDI&YQSFTTJPOT w ͳͲ

    ࠓճѻΘͳ͔ͬͨ΋ͷ
  52. w %PUUZҎ߱Ͱ·ͩߏจ͕มΘΓͦ͏ͳ΋ͷ w *NQMJDJUGVODUJPOUZQF w HJWFO w 4JHOJpDBOUJOEFOUBUJPO w ผͷػձʹ͠Ό΂Γ͍ͨ

    ࠓճѻΘͳ͔ͬͨ΋ͷ
  53. w ·ͩ௥͍͖Εͯͳ͍΋ͷ w )JHIFSLJOEQPMZNPSQIJTNؔ࿈ w .FUB1SPHSBNNJOHT w %PUUZNBDSP w $PNQJMFS1MVHJOT

    w 5"45Zؔ࿈ w ผͷػձʹ͠Ό΂Γ͍ͨ ࠓճѻΘͳ͔ͬͨ΋ͷ
  54. ·ͱΊ

  55. (PPE-BOHVBHFGPS%FTJHO IUUQTXXXJOGPRDPNQSFTFOUBUJPOTEBUBUZQFTJTTVFT

  56. ྑ͍ઃܭΛൃݟ͢ΔͨΊͷݴޠ w 4DBMB͸ɺྑ͍ઃܭΛൃݟͰ͖ΔΑ͏σβΠϯ͞Ε͍ͯΔɻྫ ͱͯ͠ w ΑΓਖ਼֬Ͱɺදݱྗͷ͋ΔܕγεςϜ w ΑΓ҆શͳϞδϡʔϧઃܭ w ۀ຿Ͱ4DBMBରԠΛຊ֨తʹ࢝ΊΔʹ͸·ͩૣ͍ɻ

    w ΁ͷΞοϓσʔτ w 044ߩݙɹͳͲ΍͍͖ͬͯ·͠ΐ͏