Slide 1

Slide 1 text

"DUJWF4VQQPSU$PODFSO Ͱ։͘ ϝλϓϩάϥϛϯάͷ൶ ฏ੒3VCZձٞ 4IV0("8"3" !FYQBKQ

Slide 2

Slide 2 text

มߋཤྺ ❑ ❏ ฏ੒3VCZձٞ ॳ൛ެ։ ❑ ❏ JODMVEFͱFYUFOEΛऔΓҧ͍͑ͯͨՕॴ͕ ෳ਺͋ͬͨͷΛमਖ਼ ❏ ޡͬͨαϯϓϧίʔυΛमਖ਼

Slide 3

Slide 3 text

ࣗݾ঺հ ❑ 4IV0("8"3" !FYQBKQ ❏ ϦϯΧʔζגࣜձࣾ ❏ ग़਎ɿௗऔɺֶੜ࣌୅ɿਆށ ❏ झຯ͸ΫϥγοΫܥͷ߹এ ❏ ฏ੒2೥ੜ·Ε ❏ ઙాਅԝɺถ௡ݰࢣͱಉ͍೥

Slide 4

Slide 4 text

ࠓ೔͸ਪ͠ͷ࿩Λ͠ʹ͖·ͨ͠

Slide 5

Slide 5 text

Slide 6

Slide 6 text

Slide 7

Slide 7 text

"DUJWF4VQQPSU$PODFSO ʢ"4$ͱུ͠·͢ʣ

Slide 8

Slide 8 text

"DUJWF4VQQPSU$PODFSO ❑ 3BJMT͔Βಋೖ͞Εͨػೳ ❑ ؔ৺ࣄΛ.PEVMFʹ෼཭͠΍͘͢͢Δ ❑ ϝλϓϩάϥϛϯά3VCZͰݸผͷষ ͕ઃ͚ΒΕ͍ͯΔ ❏ ࣮૷ʹ͸ϝλϓϩάϥϛϯά͕;ΜͩΜʹ ༻͍ΒΕ͍ͯΔ

Slide 9

Slide 9 text

ͳͥਪ͍ͯ͠Δ͔ ❑ ͨͬͨߦͷγϯϓϧͳίʔυͰ ੈքதͷ໰୊Λղܾ͍ͯ͠Δ ඒ͍͠࢓૊Έ͔ͩΒ

Slide 10

Slide 10 text

Ҿ༻ɿ03FJMMZ+BQBO ϝλϓϩάϥϛϯά3VCZୈ൛ IUUQTXXXPSFJMMZDPKQCPPLT

Slide 11

Slide 11 text

“ ຊॻ͸ϝλϓϩάϥϛϯάͷ ੒ޭ෺ޠ͕ຬࡌͰ͋Δɻ "DUJWF4VQQPSU$PODFSO΋ ͦ͏ͨ͠෺ޠͷͻͱͭͩɻ ϝλϓϩάϥϛϯά3VCZୈ൛ Q

Slide 12

Slide 12 text

ϝλϓϩάϥϛϯά ❑ ݴޠཁૉΛ࣮ߦ࣌ʹૢ࡞͢ΔίʔυΛ هड़͢Δ͜ͱ ❏ ϝιου ❏ είʔϓ ❏ ܧঝπϦʔ

Slide 13

Slide 13 text

"4$͸ϝλϓϩͷๅݿ ❑ ίʔυ͕ධՁ͞ΕΔείʔϓ͕ Ί·͙Δ͘͠มΘΔ ❑ 3VCZඪ४ಈ࡞͕ॻ͖׵͑ΒΕΔ

Slide 14

Slide 14 text

͔͠͠ ϝλϓϩάϥϛϯάͱ͍͏ͱ

Slide 15

Slide 15 text

ϝλϓϩάϥϛϯά΁ͷҙݟ ❑ ॳ৺ऀ ❏ ೉ͦ͠͏ɺ͜Θ͍ ❑ தڃऀҎ্ ❏ ࢓ࣄͰॻ͍ͨΒౖΒΕΔ͔Βɺ ࢖͏ػձ͕ͳ͍

Slide 16

Slide 16 text

΋͍ͬͨͳ͍

Slide 17

Slide 17 text

ϝλϓϩ࢖͍Λ૿΍͍ͨ͠ͷͰ ਪ͠Λ঺հ͠·͢

Slide 18

Slide 18 text

ࠓ೔ͷ໨త ❑ "DUJWF4VQQPSU$PODFSOͷ࣮૷ͷ ੌ͞Λ஌ͬͯ΋Β͏ ❑ ͦΕΛ௨ͯ͠ɺϝλϓϩάϥϛϯάΛ ֶͿͷʹ఍߅Λײ͍ͯ͡Δਓʹ ʮֶΜͰΈΑ͏ʯͱࢥͬͯ΋Β͏ ❏ ಡΉͱ͜Ζ͔Β࢝Ίͯ΋Β͏

Slide 19

Slide 19 text

Ͱ͸ɺ࢝Ί͍͖ͯ·͠ΐ͏

Slide 20

Slide 20 text

"DUJWF4VQQPSU$PODFSO ͬͯͲΜͳػೳʁ

Slide 21

Slide 21 text

ͦ΋ͦ΋Կʹࠔ͍͔ͬͯͨ ❑ ᶃݸͷϞδϡʔϧͰ͸ɺ Πϯελϯεϝιουɾ Ϋϥεϝιουͷยํ͔͠ఆٛͰ͖ͳ͍ ❏ ਖ਼֬ʹ͸ʮ͢ΔͱಡΈͮΒ͘ͳΔʯ ❑ ᶄϞδϡʔϧ͕ґଘ͍ͯ͠ΔϞδϡʔϧ ΋FYUFOE͠ͳͯ͘͸ͳΒͳ͍

Slide 22

Slide 22 text

Ϟδϡʔϧ͕ґଘ͢ΔϞδϡʔϧ module SecondLevelModule def second_method p 'second' end end module FirstLevelModule extend SecondLevelModule def first_method self.class.second_method p 'first' end end class BaseClass include FirstLevelModule end BaseClass.new.first_method # => NoMethodError JODMVEFͨ͠ϞδϡʔϧͷதͰ ͞ΒʹผͷϞδϡʔϧͰఆٛ͞Εͨ ΫϥεϝιουΛݺͼग़͢ͱ /P.FUIPE&SSPS

Slide 23

Slide 23 text

Ϟδϡʔϧ͕ґଘ͢ΔϞδϡʔϧ module SecondLevelModule def second_method p 'second’ end end module FirstLevelModule include SecondLevelModule def first_method self.class.second_method p 'first’ end end class BaseClass extend SecondLevelModule include FirstLevelModule end BaseClass.new.first_method # => “second” # “first” ͜ΕͳΒͪΌΜͱಈ͘

Slide 24

Slide 24 text

΋ͱ΋ͱ Ͳ͏ղܾ͍͔ͯͨ͠

Slide 25

Slide 25 text

ᶃΫϥεϝιουΛಉ࣌ʹఆٛ module M def self.included(base) base.extend ClassMethods base.class_eval do scope :disabled, -> { where(disabled: true) } end end module ClassMethods ... end end JODMVEF͞Εͨͱ͖ʹൃՐ Ҿ༻ɿ"DUJWF4VQQPSU$PODFSO IUUQTBQJSVCZPOSBJMTPSHDMBTTFT"DUJWF4VQQPSU$PODFSOIUNM

Slide 26

Slide 26 text

ᶃΫϥεϝιουΛಉ࣌ʹఆٛ module M def self.included(base) base.extend ClassMethods base.class_eval do scope :disabled, -> { where(disabled: true) } end end module ClassMethods ... end end ΫϥεϚΫϩͱΫϥεϝιουΛ ແཧ΍ΓJODMVEF͞ΕͨઌͰ ఆٛ͢Δ

Slide 27

Slide 27 text

ᶄϞδϡʔϧ͕ґଘ͢ΔϞδϡʔϧ module SecondLevelModule ... end module FirstLevelModule extend SecondLevelModule def self.included(base) base.send :extend, SecondLevelModule end ... end class BaseClass include FirstLevelModule ... end BaseClass.new.first_method # => “second” # “first” ґଘϞδϡʔϧΛແཧ΍Γ FYUFOE͢Δ

Slide 28

Slide 28 text

"4$ͷػೳ ❑ ᶃϞδϡʔϧͰશ෦ੜ΍ͤΔ ❏ Πϯελϯεϝιουɾ ΫϥεϝιουɾΫϥεϚΫϩΛ ݸͷϞδϡʔϧͰੜ΍ͤΔ ❑ ᶄґଘϞδϡʔϧಡࠐෆཁ ❏ ϞδϡʔϧͷதͰFYUFOEͨ͠ ผϞδϡʔϧΛಡΈࠐ·ͳ͍Ͱྑ͘ͳΔ

Slide 29

Slide 29 text

ᶃ ϞδϡʔϧͰશ෦ੜ΍ͤΔ module M extend ActiveSupport::Concern included do scope :disabled, -> { where(disabled: true) } end class_methods do ... end end ΫϥεϚΫϩΛ *ODMVEFEͷϒϩοΫʹॻ͘

Slide 30

Slide 30 text

ᶃ ϞδϡʔϧͰશ෦ੜ΍ͤΔ module M extend ActiveSupport::Concern included do scope :disabled, -> { where(disabled: true) } end class_methods do ... end end ΫϥεϝιουΛ DMBTT@NFUIPETͷϒϩοΫʹॻ͘ $MBTT.FUIPETϞδϡʔϧ΋Մ

Slide 31

Slide 31 text

ᶄ ґଘϞδϡʔϧಡࠐෆཁ module SecondLevelModule extend ActiveSupport::Concern def second_method p 'second' end end module FirstLevelModule extend ActiveSupport::Concern extend SecondLevelModule def first_method self.class.second_method p 'first' end end class BaseClass include FirstLevelModule end BaseClass.new.first_method # => “second” # “first” ґଘϞδϡʔϧΛ FYUFOE͠ͳͯ͘΋ ͪΌΜͱಈ͘

Slide 32

Slide 32 text

Կ͕͏Ε͍͔͠ ❑ ᶃϞδϡʔϧͰશ෦ੜ΍ͤΔ ❏ Ϟδϡʔϧͷڽू౓্͕͕Δ ❏ ͜ͷಈ࡞Λॻͨ͘Ίͷ$POWFOUJPO͕ఆ·Δ ❑ ᶄґଘϞδϡʔϧಡࠐෆཁ ❏ Ϟδϡʔϧͷڽू౓্͕͕Δ ❏ %3:ʹͳΔ

Slide 33

Slide 33 text

ΑΓΦϒδΣΫτࢦ޲ʹ஧࣮Ͱ ΑΓ3BJMTΒ͘͠ॻ͚Δ

Slide 34

Slide 34 text

"4$͸͜ΕΛͨͬͨߦͰ࣮ݱ # frozen_string_literal: true module ActiveSupport module Concern class MultipleIncludedBlocks < StandardError def initialize super "Cannot define multiple 'included' blocks for a Concern" end end def self.extended(base) base.instance_variable_set(:@_dependencies, []) end def append_features(base) if base.instance_variable_defined?(:@_dependencies) base.instance_variable_get(:@_dependencies) << self false else return false if base < self @_dependencies.each { |dep| base.include(dep) } super base.extend const_get(:ClassMethods) if const_defined?(:ClassMethods) base.class_eval(&@_included_block) if instance_variable_defined?(:@_included_block) end end def included(base = nil, &block) if base.nil? if instance_variable_defined?(:@_included_block) if @_included_block.source_location != block.source_location raise MultipleIncludedBlocks end else @_included_block = block end else super end end def class_methods(&class_methods_module_definition) mod = const_defined?(:ClassMethods, false) ? const_get(:ClassMethods) : const_set(:ClassMethods, Module.new) mod.module_eval(&class_methods_module_definition) end end end

Slide 35

Slide 35 text

͘͢͝ͳ͍͔͢ʁ

Slide 36

Slide 36 text

͍͢͝ͱࢥͬͨਓ

Slide 37

Slide 37 text

"DUJWF4VQQPSU$PODFSO ͷ࣮૷ΛಡΈղ͘

Slide 38

Slide 38 text

ᶃϞδϡʔϧͰશ෦ੜ΍ͤΔ ͷίʔυ def included(base = nil, &block) if base.nil? if instance_variable_defined?(:@_included_block) if @_included_block.source_location != block.source_location raise MultipleIncludedBlocks end else @_included_block = block end else super end end def class_methods(&class_methods_module_definition) mod = const_defined?(:ClassMethods, false) ? const_get(:ClassMethods) : const_set(:ClassMethods, Module.new) mod.module_eval(&class_methods_module_definition) end

Slide 39

Slide 39 text

ᶃϞδϡʔϧͰશ෦ੜ΍ͤΔ ͷίʔυ ❑ DMBTT@NFUIPETϝιου ❏ "4$Ͱಠࣗఆٛͷϝιου ❏ ΫϥεϝιουΛੜ΍͢ ❑ JODMVEFEϝιου ❏ 3VCZ૊ࠐɿJODMVEF͞ΕΔͱൃՐ͢Δ ❏ ΫϥεϚΫϩΛੜ΍͢

Slide 40

Slide 40 text

DMBTT@NFUIPET ϝιου def class_methods(&class_methods_module_definition) mod = const_defined?(:ClassMethods, false) ? const_get(:ClassMethods) : const_set(:ClassMethods, Module.new) mod.module_eval(&class_methods_module_definition) end

Slide 41

Slide 41 text

DMBTT@NFUIPET ϝιου def class_methods(&class_methods_module_definition) mod = const_defined?(:ClassMethods, false) ? const_get(:ClassMethods) : const_set(:ClassMethods, Module.new) mod.module_eval(&class_methods_module_definition) end $MBTT.FUIPET͕͋Ε͹୅ೖ ͳ͚Ε͹ఆٛ

Slide 42

Slide 42 text

DMBTT@NFUIPET ϝιου def class_methods(&class_methods_module_definition) mod = const_defined?(:ClassMethods, false) ? const_get(:ClassMethods) : const_set(:ClassMethods, Module.new) mod.module_eval(&class_methods_module_definition) end DMBTT@NFUIPET͕ಋ͘ ϒϩοΫͷத਎Λ $MBTT.FUIPETͷείʔϓͰධՁ ʹ$MBTT.FUIPETʹϝιου͕ੜ͑Δ

Slide 43

Slide 43 text

JODMVEFEϝιου def included(base = nil, &block) if base.nil? if instance_variable_defined?(:@_included_block) if @_included_block.source_location != block.source_location raise MultipleIncludedBlocks end else @_included_block = block end else super end end

Slide 44

Slide 44 text

JODMVEFEͷຊདྷͷ࢖͍ํ module Foo def self.included(mod) p "#{mod} include #{self}" end end class Bar include Foo end # => "Bar include Foo" TFMGJODMVEFEͷܗͰɺ JODMVEF͞Εͨͱ͖ͷ ಈ࡞Λॻ͘ Ҿ༻ɿJOTUBODFNFUIPE.PEVMFJODMVEFE 3VCZ IUUQTSVSFNBDMFBSDPEFDPNNFUIPE.PEVMFJJODMVEFEIUNM

Slide 45

Slide 45 text

JODMVEFEϝιου def included(base = nil, &block) if base.nil? if instance_variable_defined?(:@_included_block) if @_included_block.source_location != block.source_location raise MultipleIncludedBlocks end else @_included_block = block end else super end end Ϩγʔό͕͋Δ ʹຊདྷͷ࢖͍ํΛ͍ͯ͠Δ

Slide 46

Slide 46 text

JODMVEFEϝιου def included(base = nil, &block) if base.nil? if instance_variable_defined?(:@_included_block) if @_included_block.source_location != block.source_location raise MultipleIncludedBlocks end else @_included_block = block end else super end end Ϩγʔόͳ͠ͷJODMVEFE͕ ݸҎ্͋ͬͨΒΤϥʔ

Slide 47

Slide 47 text

JODMVEFEϝιου def included(base = nil, &block) if base.nil? if instance_variable_defined?(:@_included_block) if @_included_block.source_location != block.source_location raise MultipleIncludedBlocks end else @_included_block = block end else super end end !@JODMVEFE@CMPDL ʹϒϩοΫΛ֨ೲ

Slide 48

Slide 48 text

͜͜·Ͱͷ·ͱΊ ❑ ҎԼ͕ఆٛ͞Εͨ ❏ $MBTT.FUIPET ʹΫϥεϝιου ❏ !@JODMVEFE@CMPDL ʹΫϥεϚΫϩ ❑ ࣮ࡍʹੜ΍͢ಈ࡞͸ BQQFOE@GFBUVSFTͷΦʔόϥΠυ Ͱߦ͏

Slide 49

Slide 49 text

BQQFOE@GFBUVSFT ❑ Ϟδϡʔϧ͕JODMVEF͞Εͨͱ͖ʹ ݺ͹ΕΔϞδϡʔϧͷϝιου ❑ ΠϯελϯεϝιουΛੜ΍͢ಈ࡞ ❑ ͜ΕΛΦʔόʔϥΠυ͢Ε͹ɺ JODMVEF͞Εͨͱ͖ͷಈ࡞Λ ॻ͖׵͑ΒΕΔ

Slide 50

Slide 50 text

ΫϥεϝιουͱΫϥεϚΫϩΛ ੜ΍͢෦෼ def append_features(base) if base.instance_variable_defined?(:@_dependencies) base.instance_variable_get(:@_dependencies) << self false else return false if base < self @_dependencies.each { |dep| base.include(dep) } super base.extend const_get(:ClassMethods) if const_defined?(:ClassMethods) base.class_eval(&@_included_block) if instance_variable_defined?(:@_included_block) end end CBTFFYUFOEͰ $MBTT.FUIPETΛΫϥεϝιουͱͯ͠ੜ΍͠ CBTFDMBTT@FWBMͰ !@JODMVEFE@CMPDLΛΫϥεϚΫϩͱ࣮ͯ͠ߦͨ͠

Slide 51

Slide 51 text

ᶄґଘϞδϡʔϧಡࠐෆཁ ͷίʔυ def self.extended(base) base.instance_variable_set(:@_dependencies, []) end def append_features(base) if base.instance_variable_defined?(:@_dependencies) base.instance_variable_get(:@_dependencies) << self false else return false if base < self @_dependencies.each { |dep| base.include(dep) } super base.extend const_get(:ClassMethods) if const_defined?(:ClassMethods) base.class_eval(&@_included_block) if instance_variable_defined?(:@_included_block) end end

Slide 52

Slide 52 text

ᶄґଘϞδϡʔϧಡࠐෆཁ ͷίʔυ ❑ TFMGFYUFOEFE ϝιου ❏ 3VCZ૊ࠐɿFYUFOE͞ΕΔͱൃՐ͢Δ ❏ ʮ"4$ΛFYUFOEͨ͠ʯͱϚʔΩϯά ❑ BQQFOE@GFBUVSFT ϝιου ❏ 3VCZ૊ࠐɿJODMVEFͷ࣮ମ ❏ Ϟδϡʔϧͷಡࠐ࣌ʹґଘϞδϡʔϧ΋ ҰॹʹJODMVEF͢Δ

Slide 53

Slide 53 text

TFMGFYUFOEFE ϝιου ❑ ಡࠐݩʹ !@EFQFOEFODJFTੜ΍͚ͩ͢ def self.extended(base) base.instance_variable_set(:@_dependencies, []) end

Slide 54

Slide 54 text

BQQFOE@GFBUVSFT ϝιου def append_features(base) if base.instance_variable_defined?(:@_dependencies) base.instance_variable_get(:@_dependencies) << self false else return false if base < self @_dependencies.each { |dep| base.include(dep) } super base.extend const_get(:ClassMethods) if const_defined?(:ClassMethods) base.class_eval(&@_included_block) if instance_variable_defined?(:@_included_block) end end

Slide 55

Slide 55 text

Α͘Θ͔Βͳ͍ͷͰ ਤʹͯ͠Έͨ

Slide 56

Slide 56 text

"4$ΛFYUFOE ;ͭ͏ͷΫϥε " # $ % NPEVMF NPEVMF NPEVMF DMBTT

Slide 57

Slide 57 text

"4$ΛFYUFOE ;ͭ͏ͷΫϥε ᶃ $ΛJODMVEF ᶄ "ΛJODMVEF " # $ % NPEVMF NPEVMF NPEVMF DMBTT

Slide 58

Slide 58 text

"4$ΛFYUFOE ;ͭ͏ͷΫϥε ᶃ $ΛJODMVEF ᶄ "ΛJODMVEF ᶅ $ͷ!@EFQʹ "Λ௥Ճ !@EFQ <"> " # $ % NPEVMF NPEVMF NPEVMF DMBTT

Slide 59

Slide 59 text

"4$ΛFYUFOE ;ͭ͏ͷΫϥε ᶃ $ΛJODMVEF ᶄ "ΛJODMVEF ᶅ $ͷ!@EFQʹ "Λ௥Ճ !@EFQ <"> ᶆ #ΛJODMVEF " # $ % NPEVMF NPEVMF NPEVMF DMBTT

Slide 60

Slide 60 text

"4$ΛFYUFOE ;ͭ͏ͷΫϥε !@EFQ <"> " # $ % NPEVMF NPEVMF NPEVMF DMBTT ͔͜͜Β͕ຊ൪

Slide 61

Slide 61 text

"4$ΛFYUFOE ;ͭ͏ͷΫϥε !@EFQ <"> ᶇ !@EFQΛ%ʹJODMVEF " # $ % NPEVMF NPEVMF NPEVMF DMBTT

Slide 62

Slide 62 text

"4$ΛFYUFOE ;ͭ͏ͷΫϥε !@EFQ <"> ᶇ !@EFQΛ%ʹJODMVEF ᶈ $Λ%ʹJODMVEF " # $ % NPEVMF NPEVMF NPEVMF DMBTT

Slide 63

Slide 63 text

"4$ΛFYUFOE ;ͭ͏ͷΫϥε !@EFQ <"> ᶇ !@EFQΛ%ʹJODMVEF ᶈ $Λ%ʹJODMVEF ᶉ $ͷ$MBTT.FUIPET !@JODMVEFE@CMPDLΛ %ʹੜ΍͢ " # $ % NPEVMF NPEVMF NPEVMF DMBTT

Slide 64

Slide 64 text

• "ͷΠϯελϯεϝιου͕ݺ΂Δ • "ఆٛͷΫϥεϝιου͕ݺ΂Δ • #͕ݺ΂Δ " # $ % NPEVMF NPEVMF NPEVMF DMBTT

Slide 65

Slide 65 text

• $ఆٛͷΫϥεϝιου͕ݺ΂Δ • "ͷΠϯελϯεϝιου͕ ݺ΂Δ • "ఆٛͷΫϥεϝιου͕ݺ΂Δ • #ͷΠϯελϯεϝιου͸ ݺ΂ͳ͍ " # $ % NPEVMF NPEVMF NPEVMF DMBTT

Slide 66

Slide 66 text

͜Ε͚ͩͷίʔυ͕ͨͬͨߦ ͍͢͝Ͱ͢ΑͶʁ

Slide 67

Slide 67 text

ֶΜͰΈΑ͏ͱࢥͬͨਓ ʢ·ͨ͸ֶΜͰ͍Δਓ ʣ

Slide 68

Slide 68 text

ϝλϓϩΛֶͿਓ͕૿͑Ε͹ ࠓ೔ͷൃද͸੒ޭͰ͢

Slide 69

Slide 69 text

ͱ͜ΖͰ

Slide 70

Slide 70 text

ͳͥϝλϓϩ࢖͍Λ૿΍͍͔ͨ͠ʁ

Slide 71

Slide 71 text

ͳͥϝλϓϩ࢖͍Λ૿΍͍͔ͨ͠ʁ ❑ 3VCZΛ࢖͏ϓϩάϥϛϯάॳ৺ऀ͕ ૿͍͑ͯΔ͔Β ❑ ϝλϓϩ͕Ͱ͖Δ͜ͱ͕ 3VCZΛ࢖͏ڧྗͳಈػʹͳΔ͔Β

Slide 72

Slide 72 text

3VCZΛ࢖Θͳ͘ͳΔཧ༝ ❑ స৬ͨ͠Βผݴޠͩͬͨ ❑ ΄͍͠ϥΠϒϥϦ͕ͳ͔ͬͨ ❑ Θ͔Βͳ͍͜ͱ͕͋ͬͨͱ͖ɺ ฉ͚Δਓ͕͍ͳͯͦ͘ͷ··࠳ં

Slide 73

Slide 73 text

ͲͷݴޠͰ΋Ͱ͖Δ͜ͱ͸ ݪཧతʹ͸มΘΒͳ͍Ҏ্ ͲΕΛ࢖͏͔͸޷Έͷ໰୊

Slide 74

Slide 74 text

Ͱ΋ɺॳ৺ऀʹ࢖͍ଓ͚ͯ΋Β͑ͳ͍ͱ ❑ ͭΑ͍3VCZΤϯδχΞͱͳΓ͏Δਓ͕ ผݴޠͷίϛϡχςΟʹ͍ͬͯ͠·͏ ❏ ϓϩάϥϛϯάεΫʔϧͷོ੝Λ νϟϯεʹม͑ΒΕͳ͍

Slide 75

Slide 75 text

ίϛϡχςΟʹͱͬͯ ॏେͳଛࣦ

Slide 76

Slide 76 text

࢖͍ଓ͚ͯ΋Β͏ʹ͸ʁ ❑ 3VCZͷίϯηϓτʹڞײͯ͠΋Β͏

Slide 77

Slide 77 text

“ 3VCZ͸܅Λ৴པ͢Δɻ 3VCZ͸܅Λ෼ผͷ͋ΔϓϩάϥϚͱ͠ ͯѻ͏ɻ 3VCZ͸ϝλϓϩάϥϛϯάͷΑ͏ͳڧ ྗͳྗΛ༩͑Δɻ ϝλϓϩάϥϛϯά3VCZୈ൛ ংจ ·ͭ΋ͱΏ͖ͻΖ

Slide 78

Slide 78 text

·ͭ΋ͱ͞Μͷ৴པʹ Ԡ͑ΒΕΔΑ͏ʹͳΔ͜ͱ͕ 3VCZΛ࢖͍ଓ͚Δ ཧ༝ʹͳΔͷͰ͸

Slide 79

Slide 79 text

ϝλϓϩͷֶशΛ࢝ΊΔͷ͸ ॳڃऀͷ࠷ޙͷน

Slide 80

Slide 80 text

นͷதʹ൶Λݟग़ͤ͹ Ͱ͖Δ͜ͱ͕૿͑Δ ΋ͬͱͨͷ͍͠

Slide 81

Slide 81 text

“ ͦΕͰ͸ɺ 3VCZͰͨͷ͍͠ϓϩάϥϛϯάΛɻ ϝλϓϩάϥϛϯά3VCZୈ൛ ংจ ·ͭ΋ͱΏ͖ͻΖ

Slide 82

Slide 82 text

ϝλϓϩάϥϛϯάͷ ൶Λ։͍ͯ େ͍ͳΔྗΛखʹೖΕΑ͏ 'JO