Slide 1

Slide 1 text

Ҫຊେొ(.01&1"#0JOD ϖύϘςοΫΧϯϑΝϨϯε ແཧ͠ͳ͍3BJMT

Slide 2

Slide 2 text

ΤϯδχΞ Ҫຊେొ!BEBSBQBUB ϗεςΟϯάࣄۀ෦ϩϦϙοϓνʔϜ IUUQTBEBSBQBUBDPN

Slide 3

Slide 3 text

MPMJQPQSCͷϙΤϜͰ͢

Slide 4

Slide 4 text

࿩͢͜ͱ wMPMJQPQSCͱ͸ wMPMJQPQSC͕࡞ΒΕͨཧ༝ wMPMJQPQSCͷ޻෉ wMPMJQPQSCͷ͜Ε͔Β

Slide 5

Slide 5 text

࿩͢͜ͱ wMPMJQPQSCͱ͸ wMPMJQPQSC͕࡞ΒΕͨཧ༝ wMPMJQPQSCͷ޻෉ wMPMJQPQSCͷ͜Ε͔Β

Slide 6

Slide 6 text

MPMJQPQKQ

Slide 7

Slide 7 text

VTFSMPMJQPQKQ

Slide 8

Slide 8 text

೥ଓ͘ αʔϏε

Slide 9

Slide 9 text

ϩϦϙοϓʂͷϑϩϯτ wMPMJQPQKQਃ͠ࠐΈϑΥʔϜͳͲ͕͋Δɻ1)1੡ wVTFSMPMJQPQKQϢʔβͷίϯτϩʔϧύωϧɻ1)1੡ ͲͪΒ΋ɺཪͰMPMJQPQSCͱݺ͹ΕΔ"1*ͱ௨৴͍ͯ͠Δɻ

Slide 10

Slide 10 text

MPMJQPQSCͱ͸ wސ٬%#ٴͼϢʔβͷαʔό৘ใʹΞΫηε͢Δ"1* w3&45GVM wఆظతʹಈ͘όονͷ࣮ߦ΋ߦͳ͍ͬͯΔ wόον༻αʔόͱ"1*༻αʔόΛ෼͚ͯ༻ҙ͠ɺ྆ํʹMPMJQPQSCΛࡌ͍ͤͯΔ

Slide 11

Slide 11 text

MPMJQPQSC֓ཁ w3BJMT wSBJMTBQJ͸࢖Θͣૉͷ3BJMTΛ࢖༻ w3VCP$PQʹΑΔίʔυղੳ wυΩϡϝϯτ͸BVUPEPDHFNͰੜ੒ w"DUJWF+PCʹEFMBZFE@KPCΛ࢖༻ w%#Λ̑ͭѻͬͯΔ

Slide 12

Slide 12 text

MPMJQPQSC֓ཁ wϦιʔε਺ wϧʔςΟϯά਺ wϞσϧ࠷େߦ Ϟσϧʹ੹຿͕ूதͭͭ͋͠Δ  wίϯτϩʔϥ࠷େߦ wMJCʹΫϥε͕૿͖͑ͯͨͷͰݟ௚͕͠ඞཁ ద੾ͳσΟϨΫτϦ੾Γ෼͚  wτϥϯβΫγϣϯܥ͸GBDBEFͰσΟϨΫτϦ੾ͬͯݟͨΓ

Slide 13

Slide 13 text

࿩͢͜ͱ wMPMJQPQSCͱ͸ wMPMJQPQSC͕࡞ΒΕͨཧ༝ wMPMJQPQSCͷ޻෉ wMPMJQPQSCͷ͜Ε͔Β

Slide 14

Slide 14 text

࠷ॳ͔Β"1*ͱͯ͠࡞ΒΕͨΘ͚Ͱ͸ͳ͍

Slide 15

Slide 15 text

ͦͷੲͷϩϦϙοϓ

Slide 16

Slide 16 text

ߏ੒ wϑϩϯτ ίϯύωɺਃࠐ ͱόοΫΤϯυʹ෼͔Ε͍ͯΔɻ wϑϩϯτMPMJQPQKQ VTFSMPMJQPQKQ ސ٬؅ཧશ෦QIQ wόοΫΤϯυMPMJQPQ"QJͪ͜Β΋QIQ wόοΫΤϯυͷ"1*ʹϩδοΫΛू໿ͤ͞ΔελΠϧͬΆ͔ͬͨ wMPMJQPQ"QJͷޙΖʹ͞Βʹ4FSWFS"QJͱ͍͏"1*͕͋Δ w4FSWFS"QJ͸ओʹϢʔβͷαʔόྖҬΛѻ͏"1*

Slide 17

Slide 17 text

౰࣌ͷߏ੒Λ؆ུԽͨ͠΋ͷ ཧ૝ MPMJQPQKQ VTFSMPMJQPQKQ ސ٬؅ཧ -PMJQPQ"1* 4FSWFS"1* αʔόαΠυ όοΫΤϯυ ϑϩϯτ Ϣʔβʹఏڙ͢ΔྖҬΛѻ͏ ɾ8&#αʔό ɾ.BJMαʔό ɾ.Z42-αʔόFUD Ϣʔβͷސ٬৘ใͳͲΛѻ͏ ɾΞΧ΢ϯτ৘ใ ɾݸਓ৘ใ ɾܖ໿৘ใFUD

Slide 18

Slide 18 text

՝୊ wͲ͜ͷ؀ڥ΋ϨΨγʔ wςετ΋΄΅ͳ͠ɺ໨ࢹ֬ೝ w࣮ࡍʹ͸ϑϩϯτʹ΋͕ͬͭΓϩδοΫ͕ॻ͔Ε͓ͯΓॲཧ͕ॏෳ͍ͯ͠Δ w"1*͕ޙൃͱ͍͏ͷ΋ཧ༝ w-PMJQPQ"QJΛແࢹͯ͠௚઀4FSWFS"QJୟ͍ͯͨΓ΋͢Δ w৽نͷॲཧΛͲ͜ʹॻ͍ͯ΋ۤ࿑ͯͨ͠ wطଘͷվम͸΋ͬͱۤ࿑ͨ͠

Slide 19

Slide 19 text

౰࣌ͷߏ੒Λ؆ུԽͨ͠΋ͷ ݱ࣮ MPMJQPQKQ VTFSMPMJQPQKQ ސ٬؅ཧ -PMJQPQ"1* 4FSWFS"1* αʔόαΠυ όοΫΤϯυ ϑϩϯτ Ϣʔβʹఏڙ͢ΔྖҬΛѻ͏ ɾ8&#αʔό ɾ.BJMαʔό ɾ.Z42-αʔόFUD Ϣʔβͷސ٬৘ใͳͲΛѻ͏ ɾΞΧ΢ϯτ৘ใ ɾݸਓ৘ใ ɾܖ໿৘ใFUD ςετ΄΅ແ͠ ςετແ͠ ςετແ͠ ςετແ͠ ϩδοΫ ϩδοΫ ϩδοΫ

Slide 20

Slide 20 text

Ͳ͏͢Ε͹҆৺ͯ͠։ൃ͕Ͱ͖Δʁ

Slide 21

Slide 21 text

৭ʑग़͕ͨɺ͔ͬ͠Γணख͸ग़དྷͣ wॗʑͱطଘʹςετ௥Ճͯ͠ߦ͘ w౰࣌͸QIQͰςετͷ௥Ճ΋ҰےೄͰ͸͍͔ͳ͍ঢ়ଶͩͬͨ wࢥ͍੾ͬͯ৽نͰ࡞Γ௚͢ wςϯγϣϯ͸্͕Δ͚Ͳɺ͋·Γ࣌ؒΛ͔͚ΒΕͳ͍ɻ w-PMJQPQ"1*͕ͳΜͱ͔ςετॻ͚Δঢ়ଶͩͬͨͷͰɺͦͪΒʹد͍ͤͯͬͨ

Slide 22

Slide 22 text

Ұํͦͷࠒ wMPMJQPQSCͱ͍͏ϦϙδτϦ͕͋ͬͨ w3BJMT੡ΞϓϦέʔγϣϯ w"DUJWF3FDPSEΛ࢖ͬͯαΫοͱސ٬৘ใΛݟ͍ͨͱ͍͏ئ͍͔Β࢈·Εͨ wͦͷଞɺαΫοͱόονॻ͍ͨΓͳͲʹ΋׆༻ wجຊతʹ3BJMTDPOTPMFͰԿ͔͢ΔҎ֎ͷ༻్͸ͳ͔ͬͨ

Slide 23

Slide 23 text

౰࣌ͷ3&"%.&NEͷίϛοτ

Slide 24

Slide 24 text

Slide 25

Slide 25 text

MPMJQPQSCͷ੒௕ w$POTPMFͰศརʹѻ͏ͨΊʹɺΈΜͳ͕উखʹϩδοΫΛ௥Ճͯ͘͠ΕΔ wϢχοτςετ΋͔ܽͣ͞௥Ճ͞Ε͍ͯ͘ wͨͩͷศརπʔϧతଘࡏ͕ͩͬͨɺؾ͚ͮ͹ͲΜͲΜίΞ͕֦ு͞Ε͍ͯ͘

Slide 26

Slide 26 text

MPMJQPQSCɺδϣϒαʔόʹͳΔ wఆظతʹॲཧ͢ΔόονΛ࡞Δඞཁ͕ग़͖ͯͨɻ wࠓ·Ͱ͸QIQ ςετίʔυͳ͠ Ͱॻ͍ͯͨɻ wखಈ֬ೝʹ΋ద੾ͳϨίʔυΛ࡞ͬͯ͋͛ͨΓͱ݁ߏେม wMPMJQPQSCͳΒSBLFUBTL͕࢖͑Δ wGBDUPSZ(JSMͰςετ༻Ϩίʔυ΋αΫοͱ࡞ΕΔ wͬͪ͜Ͱॻ͍ͨ΄͏͕͍͍ͷͰ͸ʁ

Slide 27

Slide 27 text

QIQͱͷόον࣮૷ͱൺֱͯ͠ wςετͰಈ࡞͕อূͰ͖ΔͷͰɺಈ࡞֬ೝΑΓ΋ίʔυϨϏϡʔʹଟ࣌ؒ͘Λ ׂ͚ΔΑ͏ʹͳͬͨ w݁Ռɺ։ൃ଎౓͸্͕ͬͨ wϦϦʔεޙͷෆ۩߹͕શ͘ൃੜ͠ͳ͔ͬͨ ͍͍͜ͱ͔͠ͳ͔ͬͨ

Slide 28

Slide 28 text

ͲΜͲΜ׆༻͢΂͖Ͱ͸ʁ

Slide 29

Slide 29 text

MPMJQPQSC"1*αʔόʹͳΔ w৽نͰॻ͘ϩδοΫΛMPMJQPQSCʹҠߦͯ͠ϑϩϯτΛബ͍ͯ͘͘͠ wϩδοΫΛSCʹू໿͍͚ͯ͠͹֤؀ڥ͝ͱͷॏෳΛݮΒͤΔ w3BJMTͷͨΊςετ؀ڥ͸੔͓ͬͯΓ҆ఆͤ͞΍͍͢ wطଘͷ"1*ʹ͸ࠓޙ৽ن࣮૷͸ۃྗ͠ͳ͍ɻ͠͹Β͘ฒߦӡ༻ʹ͸ͳΔ wطଘ"1*ͷػೳ΋ॱ࣍MPMJQPQSCʹҠߦ͍ͯ͘͠

Slide 30

Slide 30 text

͜͏͢Δͧʂ MPMJQPQKQ VTFSMPMJQPQKQ ސ٬؅ཧ "1* 4FSWFS"1* αʔόαΠυ όοΫΤϯυ ϑϩϯτ Ϣʔβʹఏڙ͢ΔྖҬΛѻ͏ ɾ8&#αʔό ɾ.BJMαʔό ɾ.Z42-αʔόFUD Ϣʔβͷސ٬৘ใͳͲΛѻ͏ ɾΞΧ΢ϯτ৘ใ ɾݸਓ৘ใ ɾܖ໿৘ใFUD ςετ΄΅ແ͠ ςετແ͠ ςετແ͠ ςετແ͠ MPMMJQPQSC

Slide 31

Slide 31 text

MPMJQPQSC͕࡞ΒΕͨཧ༝·ͱΊ w"1*ϦχϡʔΞϧܭը͕͋ͬͨΘ͚Ͱ͸ͳ͘ɺطଘͷϦιʔεΛ׆༻͚ͨͩ͠ wʮ҆৺ͯ͠։ൃ͢Δʹ͸ʯͷམͱ͠ॴͱͯͪ͠ΐ͏ͲΑ͔ͬͨ w̍ͭͷػೳΛSCʹҠ২ɺ௥Ճ͸े෼࣮ݱՄೳͳ࿩ͳͷͰɺͲ͏΍Δ͔͕Πϝʔ δ͠΍͍͢ wʮ͜ͷਏ͍ͱ͜ΖɺSCʹ͍͚࣋ͬͯ͹ָʹͳΔͳɾɾʯͱಓے͕ݟ͑Δ͚ͩͰ ΋։ൃϞνϕʔγϣϯ͸ҡ࣋Ͱ͖ͨ

Slide 32

Slide 32 text

࿩͢͜ͱ wMPMJQPQSCͱ͸ wMPMJQPQSC͕࡞ΒΕͨཧ༝ wMPMJQPQSCͷ޻෉ wMPMJQPQSCͷ͜Ε͔Β

Slide 33

Slide 33 text

MPMJQPQSC"1*ͷํ਑ wݫີʹํ਑ΛఆΊ͍ͯΔΘ͚Ͱ͸ͳ͍ wΦʔιυοΫεͳ3BJMTXBZɺ೉͍͜͠ͱ͸͠ͳ͍ wϩδοΫ͸ϞσϧʹɻDPODFSO DBMMCBDL WBMJEBUPSʹద੾ʹ෼ׂ wίϯτϩʔϥ͸$36%ΞΫγϣϯ͚ͩ࣋ͭ wHFNΛ׆༻͢Δ wݹ͍αʔϏε࢓༷ʹ͸ҾͬுΒΕͣɺͲ͏͋Δ΂͖͔Ͱߟ͑Δ w%))ͷߟ͑ํΛࢀߟʹ͢Δ͜ͱ͕ଟ͍

Slide 34

Slide 34 text

ۃྗ3BJMTͷ࡞๏ʹ৐͔ͬΔ͜ͱͰ ։ൃʹඞཁͳ৘ใΛݮΒ͠ ෑډΛԼ͍͛ͨ

Slide 35

Slide 35 text

͕

Slide 36

Slide 36 text

%#͕3BJMTͬΆ͘ͳ͍໰୊ wϢχʔΫ*%Λಠࣗʹੜ੒ׂͯ͠Γ౰ͯΔ࢓૊Έ ࠾൪ςʔϒϧ  w೔෇Λอ࣋͢ΔΧϥϜ͕l::::..%%zͷ7"3$)"3 w໊લ͔ΒԿ΋఻ΘΒͳ͍ΧϥϜ͕ଟ͍ɻ௨শFUDΧϥϜ wͦ΋ͦ΋ෳ਺%# wͳͲͳͲɾɾ ͜ΕΒΛࠓ͔Βม͑Δ͜ͱ͸೉͍͠

Slide 37

Slide 37 text

3BJMTͬΆ͘ͳ͍ͱ͜ΖΛ 3BJMTͷ࢓૊ΈͰٵऩͯ͠ 3BJMTͬΆ͘ॻ͚ΔΑ͏ʹ͢Δ

Slide 38

Slide 38 text

ΧϥϜ͸BMJBT@BUUSJCVUFͰ͓खܰʹରԠ͢Δ alias_attribute :feedback_message, :etc8 # ਓؒʹΘ͔Γ΍͘͢ alias_attribute :updated_at, :update_date # railsͬΆ͘

Slide 39

Slide 39 text

ಠࣗϧʔϧ͸$PODFSOʹ·ͱΊͯΈΔ module LegacyDateFormattable extend ActiveSupport::Concern included do class << self attr_reader :legacy_dates def legacy_dates=(dates) @legacy_dates = dates define_methods_for_generize_date end def define_methods_for_generize_date # ΧϥϜ໊Λ্ॻ͖ͯ͠DateΦϒδΣΫτฦ͢ϝιουΛੜ੒ end end end end class Contract < ActiveRecord::Base include LegacyDateFormattable self.legacy_dates = %i( start_date end_date ) end w ྫ͑͹ಠࣗͷ೔෇ΧϥϜ͸ɺ4USJOH%BUFͰ ૬ޓʹม׵͢Δ$PDFSOϞδϡʔϧΛ࣮૷͍ͯ͠ Δ w ࠾൪ॲཧͳͲ΋BQQNPEFMTDPODFSOTԼʹϞ δϡʔϧΛ௥Ճ͍ͯ͠Δ w ϞδϡʔϧΛ௥Ճ͓͚ͯ͠͹ɺಠࣗϧʔϧΛ͋· Γؾʹͤͣී௨ͷϞσϧͱͯ͠;Δ·͑Δ w ΍΍ϝλϓϩʹͳΓ͕ͪ

Slide 40

Slide 40 text

w΋ͱ΋ͱ࢖ͬͯͨϝΠϯͷސ٬%#Λ௨ৗͷ%#ͱͯ͠ߟ͑Δ wͦͷଞ%#ͷϞσϧͱ઀ଓ৘ใΛͲ͔͜ʹఆٛ͠ͳ͍ͱ͍͚ͳ͍ wϞσϧͱ઀ଓ৘ใͱεΩʔϚΛద੾ͳҐஔʹ഑ஔͯ͋͛͠Δ wϞσϧ͸BQQNPEFMTIPHF@ECCBTFSCʹఆٛ w઀ଓ৘ใ͸EBUBCBTFZNMͱಉ͡֊૚ʹIPHF@EBUBCBTFZNMΛఆٛ wεΩʔϚ͸ECPUIFSTIPHF@ECTUSVDUVSFTRMΛஔ͘ wҰׅͰηοτΞοϓͰ͖ΔλεΫΛ࡞Δ ෳ਺%#ͷ؅ཧ

Slide 41

Slide 41 text

Ϟσϧͷఆٛ class Hogedb::Base < ActiveRecord::Base self.abstract_class = true establish_connection Lolipop::Database.load_configuration(:hoge_db)[Rails.env.to_s] end w Ҿ਺ͰΑ͠ͳʹ઀ଓ৘ใͷ:".-Λϩʔυͯ͠઀ଓ͢Δ w ֤ςʔϒϧͷϞσϧ͸#BTFΛܧঝ࣮ͯ͠૷͢Δ

Slide 42

Slide 42 text

઀ଓ৘ใͱεΩʔϚΛ഑ஔ config ├── application.rb ├── environment.rb ├── environments/ ├── database.yml ├── hogedb_database.yml ├── fugadb_database.yml ├── foodb_database.yml ├── bardb_database.yml ├── routes.rb └── secrets.yml db ├── others │ ├── hogedb │ │ └── structure.sql │ ├── fugadb │ │ └── structure.sql │ ├── foodb │ │ └── structure.sql │ └── bardb │ ├── seeds.rb │ └── structure.sql ├── seeds.rb └── structure.sql

Slide 43

Slide 43 text

PUIFS@ECͷηοτΞοϓλεΫΛ࡞Δ other_databases = %w(hogedb fugadb) other_databases.each do |db| current_namespace = namespace db.to_sym do task :load_config do end desc "Creates the #{db}" task :create => [:load_config] do end desc "Drops the #{db}" task :drop => [:load_config] do end namespace :structure do task :load => [:create, :environment, :load_config] do end end desc "Creates the #{db} and load schema" task :setup => ["#{db}:structure:load"] end end جຊ͸3BJMTͷ%BUBCBTFSBLFΛࢀߟʹ͢Δ

Slide 44

Slide 44 text

ෳ਺%#ΛҰׅηοτΞοϓ namespace :multi_db do @databases = %w(hogedb fugadb foodb) desc 'Sets up all databases' task :setup do @databases.each { |database| Rake::Task["#{database}:setup"].invoke } end desc 'Creates all databases' task :create do @databases.each { |database| Rake::Task["#{database}:create"].invoke } end desc 'Drops all databases' task :drop do @databases.each { |database| Rake::Task["#{database}:drop"].invoke } end end NVMUJ@ECTFUVQͰશ%#͕࡞ΒΕγʔυ஋͕ྲྀ͠ࠐ·ΕΔ

Slide 45

Slide 45 text

3BJMTʹͳ͖ͬͯͨ

Slide 46

Slide 46 text

݄೔͸ྲྀΕ wSCΛ։ൃ͍ͯ͠Δؒʹϑϩϯτ؀ڥ΋վળ͞Ε͍ͯͬͨ wQIQͷόʔδϣϯ্͕͕ͬͨ wͲ͜΋ςετ͕ॻ͚Δঢ়ଶ STQFD QIQVOJU UBQF MPMJQPQSC͚͕ͩ҆ఆͨ͠؀ڥͱ͍͏ঢ়ଶͰ͸ͳ͘ͳͬͨͷͰ ։ൃͷબ୒ࢶ͕૿͖͑ͯͨ

Slide 47

Slide 47 text

ͦΕͰ΋"1*ϑΝʔετ wϩδοΫΛू໿͢Δͱ͍͏͜ͱʹՁ஋͕͋Δ wྫ֎Λআ͖ɺϑϩϯτʹॻ͘͜ͱ͸ආ͚͍ͯ͘ w௚઀%#ΛݺΜͰϨεϙϯεΛૣ͍ͨ͘͠ͳͲ ϑϩϯτʹ͕ͬͭΓॻ͘৔߹͸ɺͦΕͰੜ·ΕΔՁ஋Λ͔ͬ͠Γۛຯ͢Δɻ ٸ͔͗ͩΒϑϩϯτʹʙ͸কདྷతʹอकͷ೉қ౓্͕͕Γ͕ͪɻ ͨͱ͑਺ߦͰ΋ɺʮͳΜͰ͜͜ʹʁʯͷٙ໰Λ෷১͢Δௐࠪ͸݁ߏେมɻ

Slide 48

Slide 48 text

࿩͢͜ͱ wMPMJQPQSCͱ͸ wMPMJQPQSC͕࡞ΒΕͨཧ༝ wMPMJQPQSCͷ޻෉ wMPMJQPQSCͷ͜Ε͔Β

Slide 49

Slide 49 text

Ҿ͖ଓ͖"1*Խ wϩδοΫΛSCʹҠߦ͍͖ͯ͠ɺϑϩϯτΛܰྔԽ wԿॲ͔ͷλΠϛϯάͰϑϩϯτΛ৽͘͠࡞Γ௚͢ɻ wQIQͰ΋KTͰ΋ͳΜͰ΋͍͍ɻબఆͷ෯͕޿͕Δɻ wࠓ΍ΔͳΒ41"

Slide 50

Slide 50 text

׬શͳ3BJMTԽ wٯʹϑϩϯτͱόοΫΤϯυΛ͚ͬͭͯ͘͠·͏ wMPMJQPQSCʹ$POUSPMMFSͱ7JFX΋௥Ճ͍ͯ͘͠ w֤ϑϩϯτΛ໊લۭؒͰ෼͚ͯશ෦SCʹ࣮૷͢Δ w8&#"1*Ͱ΍ΓͱΓ͢ΔΑΓॲཧ଎౓͕଎͘ͳΔ͔΋ w3BJMTͱӡ໋Λڞʹ͢Δ֮ޛ

Slide 51

Slide 51 text

׬શ3BJMTԽ αʔόαΠυ ϑϩϯτ MPMJQPQKQ MPMJQPQSC VTFSMPMJQPQKQ MPMJQPQSC ސ٬؅ཧ MPMJQPQSC 4FSWFS"1* Ϣʔβʹఏڙ͢ΔྖҬΛѻ͏ ɾ8&#αʔό ɾ.BJMαʔό ɾ.Z42-αʔόFUD

Slide 52

Slide 52 text

Ͳ͕͍͍͔ͬͪ͸Θ͔Βͳ͍ wઌͷ͜ͱ͸Θ͔Βͳ͍ͷͰɾɾ wͦΕ͸ະདྷͰߟ͑·͠ΐ͏ wͲͪΒͰ΋ରԠͰ͖ΔΑ͏ʹɺίΞΛॆ࣮͍ͤͯ͘͞ wϩϦϙοϓʂͷػೳMPMJQPQSCʹͳΔ·Ͱ͍͚࣋ͬͯΕ͹ͳΜͰ΋Ͱ͖Δ

Slide 53

Slide 53 text

ण໋ΛԆ͹ͨ͢Ίʹ w࢖͍қ͍ɺཧղ͠қ͍ઃܭʹ͢Δ wMPMJQPQSCͳΒ3BJMT8BZɺڻ͖࠷খͷݪଇ wಓΛ֎ΕΔͱɺগͮͭ͠໘౗ͩͱײ࢝͡ΊΔ w໘౗͕ੵΈॏͳΔͱɺ৮Γͨ͘ͳ͘ͳΓ࢝ΊΔ wʮ৽͘͠࡞Γ௚ͨ͠΄͏͕͍͍Μ͡ΌͶʂʯͷ࠶དྷ wΈΜͳͰίʔυϨϏϡʔͰ༧๷͠Α͏ʂ

Slide 54

Slide 54 text

͓ΘΓ