Slide 1

Slide 1 text

J04%$+BQBOEBZ ໌౉ຑҥՖ !N@ZBNBEB J04ʹ͓͚Δ4JSJ4IPSUDVUT ࠷খ࣮૷Ћ

Slide 2

Slide 2 text

ࣗݾ঺հ w ໌౉ຑҥՖ w 5XJUUFS!N@ZBNBEB w 4UVEZQMVT *OD w ʙ w ࣄ຿৬ˠ4*FSˠݱࡏ w J04&OHJOFFS

Slide 3

Slide 3 text

4JSJ4IPSUDVUTػೳΛϦϦʔε ͋ͳͨͷؤுΓΛݟ͑ΔԽ͢Δษڧه࿥ΞϓϦ 4UVEZQMVT

Slide 4

Slide 4 text

ରԠͨ͠ը໘ w Ϣʔβʔͷ23ίʔυը໘ w ॻ੶ͷόʔίʔυಡΈऔΓΧϝ ϥը໘ ͦΕͧΕɺ"QQMF͕4JSJ4IPSUDVUT ͷ࣮૷ΛקΊΔΞϓϦΛར༻͢Δ ্ͰԿճ΋܁Γฦ͠ߦΘΕΔૢ࡞ ʹ֘౰͢Δͱ൑அ࣮ͯ͠૷

Slide 5

Slide 5 text

4JSJ4IPSUDVUTར༻ঢ়گ ˞೥݄೔ʙ݄೔࣌఺ w γϣʔτΧοτܦ༝ͰΞϓϦΛ։͍ͨ w ճ਺ɿ w ਓ਺ɿ w "EEUP4JSJϘλϯ͔ΒΞϓϦΛ։͘γϣʔτΧοτΛొ࿥ͨ͠ w ճ਺ɿ w ਓ਺ɿ

Slide 6

Slide 6 text

ΞδΣϯμ w 4JSJ4IPSUDVUT࠷খ࣮૷ w 4QPUMJHIUͷl4JSJ͔ΒͷఏҊzʹγϣʔτΧοτΛࡌͤΔ w "EEUP4JSJϘλϯΛ഑ஔ͢Δ w ࣮૷ͯ͠Έͨ͏͑Ͱͷࢲతߟ࡯ w "EEUP4JSJϘλϯΛ഑ஔ͢ΔͱΑ͍ը໘ɺ഑ஔ͠ͳ͍΄͏͕Α͍ը໘ w ఏҊϑϨʔζͷબͼ͔ͨ

Slide 7

Slide 7 text

ΞδΣϯμ w 4JSJ4IPSUDVUT࠷খ࣮૷ w 4QPUMJHIUͷl4JSJ͔ΒͷఏҊzʹγϣʔτΧοτΛࡌͤΔ w "EEUP4JSJϘλϯΛ഑ஔ͢Δ w ࣮૷ͯ͠Έͨ͏͑Ͱͷࢲతߟ࡯ w "EEUP4JSJϘλϯΛ഑ஔ͢ΔͱΑ͍ը໘ɺ഑ஔ͠ͳ͍΄͏͕Α͍ը໘ w ఏҊϑϨʔζͷબͼ͔ͨ

Slide 8

Slide 8 text

࠷খ࣮૷ͱ͸ 4JSJ4IPSUDVUTࣗମʹ࣮૷ํ๏͕େ͖͘௨Γ͋Δ w *OUFOUT*OUFOUT6*Λ༻͍Δ w ΞϓϦʹͯ܁Γฦ͠ߦ͏ಈ࡞Λ༷ʑͳ஋Λड͚औΓͭͭ࠶ݱՄೳ w /46TFS"DUJWJUZΛ༻͍Δ w ಛఆͷը໘Λ։͍ͨঢ়ଶͷΞϓϦΛىಈ͢ΔͳͲɺ୯७ͳಈ࡞Λ࠶ݱՄೳ

Slide 9

Slide 9 text

࠷খ࣮૷ͱ͸ 4JSJ4IPSUDVUTࣗମʹ࣮૷ํ๏͕େ͖͘௨Γ͋Δ w *OUFOUT*OUFOUT6*Λ༻͍Δ w ΞϓϦʹͯ܁Γฦ͠ߦ͏ಈ࡞Λ༷ʑͳ஋Λड͚औΓͭͭ࠶ݱՄೳ w /46TFS"DUJWJUZΛ༻͍Δ w ಛఆͷը໘Λ։͍ͨঢ়ଶͷΞϓϦΛىಈ͢ΔͳͲɺ୯७ͳಈ࡞Λ࠶ݱՄೳ

Slide 10

Slide 10 text

࣮૷ *OGPQMJTUʹΞΫγϣϯͷ*%Λఆٛ NSUserActivityTypes $(BUNDLE_ID).materialBarcodeRead $(BUNDLE_ID).viewQRCode

Slide 11

Slide 11 text

࣮૷ ֘౰ͷΞΫγϣϯΛߦ͏/46TFS"DUJWJUZΦϒδΣΫτΛੜ੒ ˞ҎԼ͸όʔίʔυಡΈऔΓΧϝϥը໘༻ͷΦϒδΣΫτੜ੒ॲཧ import Intents struct MaterialBarcodeReadAction { static var actionName: String { return "\(bundleId).materialBarcodeRead" } static var userActivity: NSUserActivity { let userActivity = NSUserActivity(activityType: actionName) userActivity.persistentIdentifier = actionName userActivity.title = "ڭࡐͷόʔίʔυΛಡΈऔΔ" return userActivity } }

Slide 12

Slide 12 text

࣮૷ ֘౰ͷΞΫγϣϯͰ։͘6*7JFX$POUSPMMFS΁ΦϒδΣΫτΛઃఆ final class MaterialBarcodeReaderViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let activity = MaterialBarcodeReadAction.userActivity userActivity = activity } }

Slide 13

Slide 13 text

࣮૷ "QQ%FMFHBUFʹϋϯυϧ࣌ͷॲཧΛ࣮૷ func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { switch userActivity.activityType { case MaterialBarcodeReadAction.actionName: // όʔίʔυಡΈऔΓΧϝϥը໘දࣔ return true case ViewQRCodeAction.actionName: // QRίʔυը໘දࣔ return true default: return false } }

Slide 14

Slide 14 text

࠷খ࣮૷·Ͱࡁ·ͤΔͱʜ ˠlγϣʔτΧοτzΞϓϦʹͯར༻ՄೳͳΞΫγϣϯͱͯ͠બ୒ࢶ͕දࣔ͞ΕΔ ˞4JSJ4IPSUDVUT࣮૷ͨ͠ޙͷର৅ը໘ΛճҎ্։͍͍ͯΔඞཁ͋Γ

Slide 15

Slide 15 text

γϣʔτΧοτͷొ࿥ํ๏ J04࣌఺

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

γϣʔτΧοτΪϟϥϦʔ͔Β΋ొ࿥Մೳ

Slide 18

Slide 18 text

ΞδΣϯμ w 4JSJ4IPSUDVUT࠷খ࣮૷ w 4QPUMJHIUͷl4JSJ͔ΒͷఏҊzʹγϣʔτΧοτΛࡌͤΔ w "EEUP4JSJϘλϯΛ഑ஔ͢Δ w ࣮૷ͯ͠Έͨ͏͑Ͱͷࢲతߟ࡯ w "EEUP4JSJϘλϯΛ഑ஔ͢ΔͱΑ͍ը໘ɺ഑ஔ͠ͳ͍΄͏͕Α͍ը໘ w ఏҊϑϨʔζͷબͼ͔ͨ

Slide 19

Slide 19 text

࣮૷ /46TFS"DUJWJUZΦϒδΣΫτʹͯఏҊʹࡌͤΔ஋Λઃఆ #if canImport(CoreSpotlight) import CoreSpotlight import MobileCoreServices #endif /* লུ */ static var userActivity: NSUserActivity { let userActivity = NSUserActivity(activityType: actionName) userActivity.persistentIdentifier = actionName userActivity.title = "ڭࡐͷόʔίʔυΛಡΈऔΔ" userActivity.isEligibleForPrediction = true #if canImport(CoreSpotlight) let attributes = CSSearchableItemAttributeSet(itemContentType: kUTTypeContent as String) attributes.title = "ڭࡐͷόʔίʔυΛಡΈऔΔ" attributes.contentDescription = "ొ࿥͍ͨ͠ڭࡐͷόʔίʔυΛಡΈऔΕ·͢" userActivity.contentAttributeSet = attributes #endif return userActivity }

Slide 20

Slide 20 text

#if canImport(CoreSpotlight) import CoreSpotlight import MobileCoreServices #endif /* লུ */ static var userActivity: NSUserActivity { let userActivity = NSUserActivity(activityType: actionName) userActivity.persistentIdentifier = actionName userActivity.title = "ڭࡐͷόʔίʔυΛಡΈऔΔ" userActivity.isEligibleForPrediction = true #if canImport(CoreSpotlight) let attributes = CSSearchableItemAttributeSet(itemContentType: kUTTypeContent as String) attributes.title = "ڭࡐͷόʔίʔυΛಡΈऔΔ" attributes.contentDescription = "ొ࿥͍ͨ͠ڭࡐͷόʔίʔυΛಡΈऔΕ·͢" userActivity.contentAttributeSet = attributes #endif return userActivity } ࣮૷ /46TFS"DUJWJUZΦϒδΣΫτʹͯఏҊʹࡌͤΔ஋Λઃఆ *NQPSUΛ௥Ճ 4QPUMJHIUͰ4JSJ͔ΒͷఏҊ΁ͱͯ͠දࣔΛ༗ޮʹ͠ɺ දࣔ͢Δ஋Λઃఆ

Slide 21

Slide 21 text

࣮૷ ֘౰7JFX$POUSPMMFSΛ։͍ͨࡍʹ௨஌͢Δ final class MaterialBarcodeReaderViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let activity = MaterialBarcodeReadAction.userActivity userActivity = activity activity.becomeCurrent() } }

Slide 22

Slide 22 text

࣮૷ ֘౰7JFX$POUSPMMFSΛ։͍ͨࡍʹ௨஌͢Δ final class MaterialBarcodeReaderViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let activity = MaterialBarcodeReadAction.userActivity userActivity = activity activity.becomeCurrent() } } ࣮૷ࡁΈͷ/46TFS"DUJWJUJZΦϒδΣΫτͰ࠶ݱͰ͖Δ ૢ࡞Λͨ͜͠ͱΛ௨஌

Slide 23

Slide 23 text

௨஌ͷ࣮૷·Ͱࡁ·ͤΔͱʜ ˠ֘౰ͷը໘ΛΑ͘࢖͏৔߹ɺ ɹl4JSJ͔ΒͷఏҊzʹදࣔ͞ΕΔ ˞બ୒͢Δͱɺը໘ʹભҠ͢Δ͕γϣʔτΧοτ ͷ௥Ճ͸ෆՄ ˞σόοάʹ͸ɺ୺຤ͷઃఆσϕϩού %JTQMBZ3FDFOU4IPSUDVUTΛ0/

Slide 24

Slide 24 text

ΞδΣϯμ w 4JSJ4IPSUDVUT࠷খ࣮૷ w 4QPUMJHIUͷl4JSJ͔ΒͷఏҊzʹγϣʔτΧοτΛࡌͤΔ w "EEUP4JSJϘλϯΛ഑ஔ͢Δ w ࣮૷ͯ͠Έͨ͏͑Ͱͷࢲతߟ࡯ w "EEUP4JSJϘλϯΛ഑ஔ͢ΔͱΑ͍ը໘ɺ഑ஔ͠ͳ͍΄͏͕Α͍ը໘ w ఏҊϑϨʔζͷબͼ͔ͨ

Slide 25

Slide 25 text

࣮૷ ϘλϯΛ഑ஔ͢Δ final class MaterialBarcodeReaderViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let activity = MaterialBarcodeReadAction.userActivity userActivity = activity activity.becomeCurrent() let addToSiriButton = INUIAddVoiceShortcutButton(style: .automaticOutline) addToSiriButton.shortcut = INShortcut(userActivity: activity) addToSiriButton.delegate = self view.addSubview(addToSiriButton) } }

Slide 26

Slide 26 text

࣮૷ ϘλϯΛ഑ஔ͢Δ final class MaterialBarcodeReaderViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let activity = MaterialBarcodeReadAction.userActivity userActivity = activity activity.becomeCurrent() let addToSiriButton = INUIAddVoiceShortcutButton(style: .automaticOutline) addToSiriButton.shortcut = INShortcut(userActivity: activity) addToSiriButton.delegate = self view.addSubview(addToSiriButton) } } "EEUP4JSJϘλϯͷΦϒδΣΫτΛੜ੒ γϣʔτΧοτͱͯ͠ొ࿥͢Δૢ࡞ "EEUP4JSJϘλϯΛԡԼͨ͠ࡍʹ ͜Ε͔Βදࣔ͢Δը໘ΦϒδΣΫτΛड͚औΔͨΊઃఆ

Slide 27

Slide 27 text

࣮૷ ϘλϯΛԡԼޙͷॲཧΛ࣮૷ extension MaterialBarcodeReaderViewController: INUIAddVoiceShortcutButtonDelegate { func present(_ addVoiceShortcutViewController: INUIAddVoiceShortcutViewController, for addVoiceShortcutButton: INUIAddVoiceShortcutButton) { addVoiceShortcutViewController.delegate = self present(addVoiceShortcutViewController, animated: true, completion: nil) } func present(_ editVoiceShortcutViewController: INUIEditVoiceShortcutViewController, for addVoiceShortcutButton: INUIAddVoiceShortcutButton) { editVoiceShortcutViewController.delegate = self present(editVoiceShortcutViewController, animated: true, completion: nil) } }

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

࣮૷ 4JSJ4IPSUDVUTͷ௥Ճɾฤू׬ྃ࣌ͷॲཧΛ࣮૷ ௥Ճ extension MaterialBarcodeReaderViewController: INUIAddVoiceShortcutViewControllerDelegate { func addVoiceShortcutViewController( _ controller: INUIAddVoiceShortcutViewController, didFinishWith voiceShortcut: INVoiceShortcut?, error: Error?) { controller.dismiss(animated: true, completion: nil) } func addVoiceShortcutViewControllerDidCancel( _ controller: INUIAddVoiceShortcutViewController) { controller.dismiss(animated: true, completion: nil) } }

Slide 30

Slide 30 text

࣮૷ 4JSJ4IPSUDVUTͷ௥Ճɾฤू׬ྃ࣌ͷॲཧΛ࣮૷ ฤू extension MaterialBarcodeReaderViewController: INUIEditVoiceShortcutViewControllerDelegate { func editVoiceShortcutViewController( _ controller: INUIEditVoiceShortcutViewController, didUpdate voiceShortcut: INVoiceShortcut?, error: Error?) { controller.dismiss(animated: true, completion: nil) } func editVoiceShortcutViewController( _ controller: INUIEditVoiceShortcutViewController, didDeleteVoiceShortcutWithIdentifier deletedVoiceShortcutIdentifier: UUID) { controller.dismiss(animated: true, completion: nil) } func editVoiceShortcutViewControllerDidCancel(_ controller: INUIEditVoiceShortcutViewController) { controller.dismiss(animated: true, completion: nil) } }

Slide 31

Slide 31 text

"EEUP4JSJϘλϯ͕͋Δͱʜ ˠࣗ෼ͷΞϓϦ͔Β4JSJγϣʔτΧοτΛ௥Ճ͢Δಋઢ͕Ͱ͖Δ ˠ࣮ࡍʹͦͷը໘ΛΑ͘ར༻͢ΔϢʔβʔ͕ݟ͚ͭ΍͘͢ͳΔ

Slide 32

Slide 32 text

ΞδΣϯμ w 4JSJ4IPSUDVUT࠷খ࣮૷ w 4QPUMJHIUͷl4JSJ͔ΒͷఏҊzʹγϣʔτΧοτΛࡌͤΔ w "EEUP4JSJϘλϯΛ഑ஔ͢Δ w ࣮૷ͯ͠Έͨ͏͑Ͱͷࢲతߟ࡯ w "EEUP4JSJϘλϯΛ഑ஔ͢ΔͱΑ͍ը໘ɺ഑ஔ͠ͳ͍΄͏͕Α͍ը໘ w ఏҊϑϨʔζͷબͼ͔ͨ

Slide 33

Slide 33 text

"EEUP4JSJϘλϯΛ ഑ஔ͢ΔͱΑ͍ը໘ w ഑ஔ͢Δ͜ͱͰຊདྷͷ໾ׂΛશ͏͢Δͷʹࢧো͕ग़ͳ͍ w ΋ͱ΋ͱ༨ന͕े෼ʹ͋ΓɺӬଓతʹදࣔ͠ଓ͚ͯ΋໰୊ͳ͍ w Ϋογϣϯϖʔδͱͯ͠ผը໘ΛڬΉܗͰදࣔͯ͠΋ࠩ͠ࢧ͑ͳ͍ ഑ஔ͠ͳ͍΄͏͕Α͍ը໘ w ഑ஔ͢Δͱຊདྷͷ໾ׂΛશ͏͢ΔͨΊͷྖҬ͕ڱ͘ͳΔը໘ w ༷ʑͳ৘ใΛݟΔͨΊͷը໘ͳͲ

Slide 34

Slide 34 text

ΞδΣϯμ w 4JSJ4IPSUDVUT࠷খ࣮૷ w 4QPUMJHIUͷl4JSJ͔ΒͷఏҊzʹγϣʔτΧοτΛࡌͤΔ w "EEUP4JSJϘλϯΛ഑ஔ͢Δ w ࣮૷ͯ͠Έͨ͏͑Ͱͷࢲతߟ࡯ w "EEUP4JSJϘλϯΛ഑ஔ͢ΔͱΑ͍ը໘ɺ഑ஔ͠ͳ͍΄͏͕Α͍ը໘ w ఏҊϑϨʔζͷબͼ͔ͨ

Slide 35

Slide 35 text

ఏҊϑϨʔζͱ͸ /46TFS"DUJWJUZͷTVHHFTUFE*OWPDBUJPO1ISBTF import Intents struct MaterialBarcodeReadAction { static var actionName: String { return "\(bundleId).materialBarcodeRead" } static var userActivity: NSUserActivity { let userActivity = NSUserActivity(activityType: actionName) userActivity.persistentIdentifier = actionName userActivity.title = “ڭࡐͷόʔίʔυΛಡΈऔΔ” userActivity.suggestedInvocationPhrase = "όʔίʔυΛಡΈऔΔ" return userActivity } }

Slide 36

Slide 36 text

ఏҊϑϨʔζ͕දࣔ͞ΕΔ৔ॴ w "EEUP4JSJϘλϯԡԼޙ w γϣʔτΧοτΪϟϥϦʔܦ༝ ͰͷγϣʔτΧοτొ࿥ Ի੠ίϚϯυཝͷσϑΥϧτ஋ɻೖΕ ͓ͯ͘ͱϢʔβʔ͸ࣗ෼ͰʮԿͯݺͼ ͔͚Α͏ʁʯͱߟ͑ΔखؒΛল͍ͯొ ࿥Ͱ͖ͯศར

Slide 37

Slide 37 text

ఏҊϑϨʔζ͕දࣔ͞ΕΔ৔ॴ w "EEUP4JSJϘλϯԡԼޙ w γϣʔτΧοτΪϟϥϦʔܦ༝ ͰͷγϣʔτΧοτొ࿥ Ի੠ίϚϯυཝͷσϑΥϧτ஋ɻೖΕ ͓ͯ͘ͱϢʔβʔ͸ࣗ෼ͰʮԿͯݺͼ ͔͚Α͏ʁʯͱߟ͑ΔखؒΛল͍ͯొ ࿥Ͱ͖ͯศར ˠ4JSJ͕ฉ͖औΓͮΒ͍ݴ༿ɺϢʔβʔ͕࢖͍ʹ͍͘ݴ༿ΛΛઃఆͯ͠͠·͏ͱɺ࢖ΘΕͳ͘ͳΔ

Slide 38

Slide 38 text

ΑΓϢʔβʔ͕ར༻͠΍͍͢ ϑϨʔζΛબͿʹ͸ʁ

Slide 39

Slide 39 text

w ଞΞϓϦͷγϣʔτΧοτͱॏෳ͠ͳ͍ w ݕূ͢Δ୺຤ w ݕূ͢Δ؀ڥ

Slide 40

Slide 40 text

ଞΞϓϦͷྨࣅγϣʔτΧοτͱॏෳͤ͞ͳ͍ w ಉ͡୺຤಺ʹڞଘ͍ͯ͠ΔՄೳੑ͕ߴ͍ΞϓϦͷγϣʔτΧοτΛ֬ೝ w ྨࣅͷγϣʔτΧοτ͕͋Δ৔߹ɺڞଘͯ͠΋ݺͼ෼͚Ͱ͖ΔΑ͏ΞϓϦ ໊ΛؚΊΔͷ͕Φεεϝ w ΞϓϦ໊͸༏ઌͯ͠ฉ͖औΓͯ͘͠ΕΔ༷ࢠ w ΞϓϦ໊Ͱ΋ུশͳͲ͸ཁݕূ

Slide 41

Slide 41 text

ݕূ͢Δ୺຤ w αϙʔτ͍ͯ͠Δ04όʔδϣϯͷ͏ͪɺҰ൪௿͍ϝδϟʔόʔδϣϯͷ୺຤ Ͱ֬ೝ w 04όʔδϣϯ͕ਐΉຖʹฉ͖औΓੑೳ͕େ͖͘޲্͍ͯ͠Δ w αϙʔτ͍ͯ͠Δ04όʔδϣϯͷൣғͰۃྗεϖοΫͷ௿͍୺຤Ͱ֬ೝ w ϋʔυ໘Ͱ΋ฉ͖औΓੑೳ͕ҟͳΔ

Slide 42

Slide 42 text

ݕূ͢Δ؀ڥ w Ͱ͖Δ͚ͩϢʔβʔ͕࣮ࡍʹར༻͠͏Δ؀ڥʹ͍ۙঢ়ଶͰࢼ͢ w εϙʔπδϜͰར༻͢ΔΞϓϦͳΒ࣮ࡍʹ͍͖࣋ͬͯฉ͖औΓΛࢼ͢ͳͲ w صͷ্ʹฏஔ͖ͨ͠ঢ়ଶͰࢼ͢ w ֯౓΍୺຤΁ͷ઀஍໘ͷ౎߹͔Β͔ɺखͰ࣋ͭΑΓҙਤ͠ͳ͍ࡶԻ͕रΘ Ε͕ͪ

Slide 43

Slide 43 text

Α͍4JSJ4IPSUDVUTରԠΛ

Slide 44

Slide 44 text

ࢀߟ /46TFS"DUJWJUZUJUMF /46TFS"DUJWJUZDPOUFOU"UUSJCVUF4FUDPOUFOU%FTDSJQUJPO γϣʔτΧοτ 4JSJ͔ΒͷఏҊ 4JSJʹ௥Ճ /46TFS"DUJWJUZDPOUFOU"UUSJCVUF4FUUIVNCOBJM%BUB /46TFS"DUJWJUZTVHHFTUFE*OWPDBUJPO1ISBTF ᶃ ᶃ ᶃ ᶃ ᶃ ᶄ ᶄ ᶄ ᶅ ᶅ ᶅ ᶅ ᶅ ᶆ ᶆ

Slide 45

Slide 45 text

ࢀߟ w "EEJOH6TFS*OUFSBDUJWJUZXJUI4JSJ4IPSUDVUTBOEUIF4IPSUDVUT"QQ w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOTJSJLJU BEEJOH@VTFS@JOUFSBDUJWJUZ@XJUI@TJSJ@TIPSUDVUT@BOE@UIF@TIPSUDVUT@BQ Q w %FTJHOJOH(SFBU4IPSUDVUT w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

Slide 46

Slide 46 text

ࢀߟ w 4PVQ$IFG αϯϓϧίʔυ w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOTJSJLJU TPVQ@DIFG@BDDFMFSBUJOH@BQQ@JOUFSBDUJPOT@XJUI@TIPSUDVUT w 4JSJ4IPSUDVUT·ͱΊ w IUUQTLVSPIBUFOBCMPHDPNFOUSZ w J1IPOF΍J1BEͰγϣʔτΧοτ"QQΛ࢖͏c"QQMF w IUUQTTVQQPSUBQQMFDPNKBKQ)5