Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Droidkaigi 2017
kazy1991
March 09, 2017
Technology
5
11k
Droidkaigi 2017
kazy1991
March 09, 2017
Tweet
Share
More Decks by kazy1991
See All by kazy1991
基本のAndroid View開発ドキュメント
kazy1991
1
2.1k
Cookpad.apk#1-ReactNativeについて
kazy1991
1
5.8k
いつか使ってみたいOperatorたち
kazy1991
0
410
Cookpad TechKitchen#6-android-with-ml-and-scheduler
kazy1991
0
630
RxJava Droidkaigi
kazy1991
1
31
rx.pdf
kazy1991
0
110
はじめてのvimscipt
kazy1991
1
380
Other Decks in Technology
See All in Technology
スポーツ・エンタメにおける映像伝送技術の実装と挑戦 〜車載カメラ、5G〜
mixi_engineers
PRO
1
160
OSS ことはじめ
hsbt
3
600
AWS ChatbotでEC2インスタンスを 起動できるようにした
iwamot
0
180
我々はなぜテストをするのか?
kawaguti
PRO
0
640
ニフティでSRE推進活動を始めて取り組んできたこと
niftycorp
2
890
⚡Lightdashを試してみた
k_data_analyst
0
220
testing journey / テストが嫌いでIT業界を離れるはずだったのに〜テスト嫌いが現場で品質改善を実施するまでの物語〜
aki_moon
1
450
runn is a package/tool for running operations following a scenario. / golang.tokyo #32
k1low
1
240
長年運用されてきたモノリシックアプリケーションをコンテナ化しようとするとどんな問題に遭遇するか? / SRE NEXT 2022
nulabinc
PRO
15
8.2k
220521_SFN_品質文化試論と『LEADING QUALITY』/220521_SFN_Essay_of_Quality_Culture_and_LEADING_QUALITY
mkwrd
0
340
Spotify物理コントローラーがほしい
miso
0
180
NestJS + Prisma2 で歩む RLS の世界
ynaka81
1
110
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
324
54k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
62k
The Most Common Mistakes in Cover Letters
jrick
PRO
4
24k
GitHub's CSS Performance
jonrohan
1020
410k
Scaling GitHub
holman
451
140k
Writing Fast Ruby
sferik
612
57k
Keith and Marios Guide to Fast Websites
keithpitt
404
21k
What’s in a name? Adding method to the madness
productmarketing
11
1.5k
The Invisible Customer
myddelton
110
11k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
38
12k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
212
11k
The World Runs on Bad Software
bkeepers
PRO
56
5.2k
Transcript
"OESPJEఆظ࣮ߦॲཧೖ LB[Z LB[VLJZPTIJEB
ࣗݾհ ࢯ໊٢ాສً ॴଐDPPLQBE*OD 5XJUUFS!LB[ HJUIVCLB[Z %SPJELBJHJͷൃදࢿྉ
ఆظ࣮ߦॲཧͱʜ Ϣʔβʔͷૢ࡞ͱؔͳ͘ɺ ҰఆͷִؒͰॲཧΛ࣮ߦ͢Δ ఆظ࣮ߦॲཧͷྫ ϑΟʔυͷߋ৽ ϩʔΧϧ͔Βͷ௨
ఆظ࣮ߦॲཧͷࣄྫ ʮྉཧ͖Ζ͘ʯ ྉཧࣸਅ͚ͩ͋ͭΊͯه͢Δ
ྉཧ͖Ζ͘ͷΈ ʹࣸਅ͕Ճ͞ΕΔ ҰఆִؒͰ৽نࣸਅΛ୳͢ ࣸਅΛྉཧఆ͢Δ ࣸਅΛΞοϓϩʔυ͢Δ ͜͜ʹఆظ࣮ߦॲཧ
༨ஊ #SPBEDBTU3FDFJWFSͰ/&8@1*$563&ΠϕϯτΛ ड͚औΕ͍͍ͷͰʁ w ॳظͷϓϩτλΠϓͰ͜ͷํͰ࣮͍ͯͨ͠ w ఆظ࣮ߦॲཧ͕ෆཁͳͷͰ࣮͕γϯϓϧͰྑ͔ͬͨ w શͯͷΧϝϥΞϓϦ͕/&8@1*$563&ΠϕϯτΛૹͬͯ
͘ΕΔΘ͚Ͱͳ͍ w %FQSFDBUFEJO"1*MFWFMͳͷͰ࠾༻͠ʹ͍͘
ఆظ࣮ߦॲཧΛ͍ͨ͠߹ɺ Έͳ͞ΜͲ͏ͯ͠·͔͢ʁ "MBSN.BOBHFS
"MBSN.BOBHFS "QJ-FWFM͔Βར༻Ͱ͖Δ ݹ͔͘Βར༻͞Ε͍ͯΔ"1*Ͱωοτ্ʹݟଟ͍ ΠϯλʔϑΣʔε͕γϯϓϧͰखܰʹ͑Δ ʮ˓˓ͷ࣌ؒʹͳͬͨΒ˚˚Λىͯ͘͜͠Εʯ
"MBSN.BOBHFSαϯϓϧ #SPBEDBTU3FDFJWFS public class AlarmReceiver extends BroadcastReceiver {
private static Intent createIntent(Context context) { return new Intent(context, AlarmReceiver.class); } public static PendingIntent createPendingIntent(Context context) { return PendingIntent.getBroadcast(context, 0, createIntent(context), 0); } @Override public void onReceive(Context context, Intent intent) { // ͜͜ͰServiceΛىಈ͢ΔͳͲ.. } } # AndroidManifest.xml <receiver android:name=".AlarmReceiver" android:exported="false" />
"MBSN.BOBHFSαϯϓϧ εέδϡʔϧ public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { //.. PendingIntent intent = AlarmReceiver.createPendingIntent(this); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, fiveSecondsLater(), intent); } } 1FOEJOH*OUFOUͱىಈ࣌ؒΛ"MBSN.BOBHFSʹ͢
"MBSN.BOBHFS ͪΐͬͱඍົͳ! 04ʹΑͬͯڍಈ͕ҧ͏ ࠶ىಈ͢Δͱεέδϡʔϧ͕ফ͑ΔͷͰରԠ͕ඞཁ ࣌ؒҎ֎ͷ੍ʹରԠͰ͖ͳ͍
ωοτϫʔΫ͕ܨ͕͍ͬͯͳ͍࣌ όοςϦʔ͕ܨ͕͍ͬͯΔ࣌ ࣦഊ࣌ͷϦτϥΠॲཧ͕ͳ͍
"MBSN.BOBHFSͷ͍ॴ ͍ͯΔέʔε ࣌ؒʹݫີͳλεΫͷ࣮ ͍͍ͯͳ͍έʔε ࠶ىಈ࣌ͷαϙʔτ ϦτϥΠػߏ͕΄͍͠߹
ిྗޮΛҙࣝͨ͠ϋΠύϑΥʔϚϯεͳॲཧ
ύϑΥʔϚϯεΛҙࣝͨ͠ ϞμϯͳδϣϒཧͷΈ +PC4DIFEVMFS
+PC4DIFEVMFS -PMMJQPQͰొͨ͠ൺֱత৽͍͠"1* 4FSWJDFΛҙͷλΠϛϯάͰɺىಈ͢Δ͜ͱ͕ग़དྷΔ δϣϒεέδϡʔϥʔ DPPLQBEΞϓϦ ྉཧ͖Ζ͘ Ͱ+PC4DIFEVMFSΛ࠾༻ͨ͠
+PC4DIFEVMFSαϯϓϧ 4FSWJDFଆ public class MyJobService extends JobService { @Override
public boolean onStartJob(JobParameters job) { // ͜͜ʹॲཧΛهड़͢Δ return false; } @Override public boolean onStopJob(JobParameters job) { return false; } } <service android:name=".MyJobService" android:exported="true" android:permission="android.permission.BIND_JOB_SERVICE" />
+PC4DIFEVMFSαϯϓϧ 4FSWJDFଆ public class MyJobService extends JobService { @Override public
boolean onStartJob(JobParameters params) { // ͜͜ϝΠϯεϨου tooHeavyJob() .subscribeOn(Schedulers.io()) .subscribe(result -> { // Կ͔ߋ৽ॲཧͳͲΛߦ͏ jobFinished(params, false); // δϣϒ͕ࣦഊͨ͠߹trueΛ͢ͱ࠶εέδϡʔϧ }); // ಉظॲཧͷ߹false/ඇಉظॲཧͷ߹trueΛฦ͢ return true; } @Override public boolean onStopJob(JobParameters params) { // δϣϒ͕ྃ͢ΔલʹγεςϜ͕Ωϟϯηϧ͢ΔͱݺΕΔ return false; } }
+PC4DIFEVMFSαϯϓϧ εέδϡʔϧॲཧ public class MyJobService extends JobService {
private static final int PERIODIC_JOB_ID = 1; public static void setPeriodicSchedule(Context context) { JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); JobInfo jobInfo = new JobInfo.Builder(PERIODIC_JOB_ID, new ComponentName(context, MyJobService.class)) .setPeriodic(TimeUnit.MINUTES.toMillis(30)) .setPersisted(true) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .build(); scheduler.schedule(jobInfo); } public static void cancelPeriodicSchedule(Context context) { JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); scheduler.cancel(PERIODIC_JOB_ID); } }
+PC4DIFEVMFSͰεέδϡʔϧʹར༻Ͱ͖Δ݅ ࠷େకΊΓ࣌ؒ TFU0WFSSJEF%FBEMJOF ࠷Ԇ࣌ؒ TFU.JOJNVN-BUFODZ
όοΫΦϑϦτϥΠํ TFU#BDLPGG$SJUFSJB ௨৴ڥͷ੍ TFU3FRVJSFE/FUXPSL5ZQF ॆిڥͷ੍ TFU3FRVJSFT$IBSHJOH ΞΠυϧঢ়ଶͷ੍ TFU3FRVJSFT%FWJDF*EMF ܁Γฦ͠ͷεέδϡʔϦϯά TFU1FSJPEJD ࠶ىಈ࣌ͷӬଓԽ TFU1FSTJTUFE
+PC4DIFEVMFSʹύϥϝʔλΛ͢ +PC*OGP#VJMEFSTFU&YUSBT 1FSTJTUBCMF#VOEMFFYUSBT PersistableBundle bundle = new PersistableBundle();
JobInfo jobInfo = new JobInfo.Builder(JOB_TAG, new ComponentName(this, MyJobService.class)) .setExtras(bundle) .build(); public class MyJobService extends JobService { @Override public boolean onStartJob(JobParameters params) { PersistableBundle bundle = params.getExtras(); // PersistableBundleεέδϡʔϧ࣌ʹӬଓԽ͞ΕΔͷͰɺ // ͜͜Ͱॻ͖͑ͯ࣍ճͷjobʹө͞Εͳ͍ return false; } } +PC1BSBNFUFSTHFU&YUSBT
εέδϡʔϧঢ়گΛίʔυͰ֬ೝ͢Δ +PC4DIFEVMFSHFU"MM1FEJOH+PCT εέδϡʔϧ͞Ε͍ͯΔKPC*OGPϦετ͕ड͚औΕΔ εέδϡʔϧͨ͠ࡍʹͨ͠*%Λൺֱ͢Δ public static
boolean isPending(Context context, int serviceId) { JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); List<JobInfo> pendingJobList = scheduler.getAllPendingJobs(); for (JobInfo jobInfo : pendingJobList) { if (serviceId == jobInfo.getId()) { return true; } } return false; }
BECίϚϯυͰ+PC4DIFEVMFSͷঢ়ଶΛ֬ೝ͢Δ δϣϒεέδϡʔϥʔʹొ͞ΕͯΔλεΫҰཡ ࣮ߦͪͷλεΫҰཡ ࣮ߦ͞ΕͨλεΫͷώετϦʔҰཡ 04όʔδϣϯʹΑͬͯද͕ࣔҧ͏
adb shell dumpsys jobscheduler
EVNQTZTKPCTDIFEVMFS 04ͷ߹ Settings: <ͷઃఆ> Started users: [0] Registered 48
jobs: JOB #1000/800 : com.android.server.pm.BackgroundDexOptService <JobInfoʹͨ͠εέδϡʔϧ݅> JOB #1000/20536: com.android.server.backup.FullBackupJob <JobInfoʹͨ͠εέδϡʔϧ݅> [த൫লུ] Job history: -5m54s389ms STOP: u0a69 com.example.BackgroundService -5m51s543ms STOP: u0a83 com.example.AuthService -21s184ms START: u0a15 com.example.ServiceName -20s940ms STOP: u0a15 com.example.ServiceName
+PC4DIFEVMFS ྑ͍" 04ඪ४ͳͷͰ৴པߴ͍ ࡉ͔͍εέδϡʔϧ͕݅ࢦఆͰ͖Δ ࠶ىಈͯ͠ӬଓԽ͞ΕΔΈ͕͋Δ
ϚϧνϢʔβʔʹରԠ ϖϯσΟϯάதͷ+PCҰཡ͕औಘͰ͖Δ ࠷ߴ
+PC4DIFEVMFS ඍົͳ! ཁٻ͞ΕΔ"QJϨϕϧ Ҏ্ ͕ߴ͍ ϓϩμΫγϣϯͰͷར༻࣮͕গͳ͍
ଟগͷ᠘͕͋Δ ޙड़
+PC4DIEVMFS։ൃͰ ؾΛ͚͍ͭͨ᠘ͷ
ҙਤͤͣεέδϡʔϧ͕ফ͍͑ͯΔ ݱ ઃఆͨ͠εέδϡʔϧ͕ಥવফ͍͑ͯΔ ࠶ݱ݅ ܥͷͰΞϓϦΛߋ৽͢ΔͱϦηοτ͞ΕΔ
ରԠࡦ ύοέʔδͷߋ৽Λݕͯ͠࠶ઃఆ͢Δ
ύοέʔδߋ৽ΠϕϯτΛϋϯυϦϯά͢Δ <receiver android:name=".receiver.PackageReplacedBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> </intent-filter> </receiver> @Override
public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); String action = intent.getAction(); if (Intent.ACTION_MY_PACKAGE_REPLACED.equals(action)) { // εέδϡʔϧ͞Ε͍ͯΔ͔֬ೝ͢Δɻ } }
͗͢Δ%FBE-JOF ݱ %FBE-JOFͷ੍͕ҙਤ௨Γಈ͔ͳ͍ ࠶ݱ݅ %FBE-JOFʹͱ͍ͯ࣌ؒΛઃఆ͢Δ T͘Β͍
Ұ෦ͷͰKPCͷىಈʹ͔͔Δ ରࡦ +PC4DIFEVMFSΛଈ࣌ੑΛٻΊ͍͚ͯͬͯͳ͍#
Ұ͖Γͷδϣϒ͕ճىಈ͢Δ ݱ Ұ͖Γͷεέδϡʔϧͷ͕ͣෳճىಈ͢Δ ࠶ݱ݅ /ະຬͷશͯͷ
+PCͷ࣮ߦ࣌ؒΑΓ%FBEMJOF͕͍ͱෳճىಈ͢Δ ରԠࡦ %FBEMJOFΛ৳͢ɺνΣοΫػߏΛ༻ҙ͢Δ IUUQTUBDLPWFSGMPXDPNRVFTUJPOTKPCTDIFEVMFSQPTUJOHKPCTUXJDFOPUFYQFDUFE
աʹαʔϏεΛىಈ͢Δ ݱ Ұ෦ͷͰఆͷेഒͷδϣϒىಈ͢Δ ࠶ݱ݅ ෆ໌ 04
ػछͳͲʹภΓ͕ͳ͍ ରԠࡦ νΣοΫػߏ༻ҙ͢ΔPS͖ͳ࣮Λҙࣝ͢Δ
ΠέͯΔΈ͕ཉ͍͕͠ɺ ະຬʹରԠ͍ͨ͠ (DN/FUXPSL.BOBHFS
(DN/FUXPSL.BOBHFS (PPHMF1MBZTFSWJDFTͰՃ͞Εͨ +PC4DIFEVMFSʹඇৗʹΑ͘ࣅͨεέδϡʔϥʔ ࣮͕ผBQL ։ൃऀαʔϏε ʹ͋ΔͨΊɺδϣϒͷొ ΩϟϯηϧJOUFOUΛ௨্ͯ͡ख͍ͬͯ͘Δ
IUUQTBOESPJEEFWFMPQFSTHPPHMFCMPHDPNBDMPTFSMPPLBUHPPHMFQMBZTFSWJDFTIUNM
($./FUXPSL.BOBHFSαϯϓϧ αʔϏεଆ public class MyTaskService extends GcmTaskService { @Override public
void onInitializeTasks() { // ΞϓϦ͕আ͞ΕͨΓɺߋ৽͞Εͨ߹εέδϡʔϧ͕আ͞ΕΔͷͰɺ // ͜͜ʹ࠶εέδϡʔϧ͢ΔίʔυΛॻ͘(ॳճݺΕͳ͍) } @Override public int onRunTask(TaskParams taskParams) { // ͜͜ʹॲཧΛهड़͢Δ(ϫʔΧʔεϨου) return GcmNetworkManager.RESULT_SUCCESS; } } <service android:name=".MyTaskService" android:exported="true" android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE"> <intent-filter> <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" /> </intent-filter> </service>
($./FUXPSL.BOBHFSαϯϓϧ εέδϡʔϧ public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { // do something.. GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(this); OneoffTask task = new OneoffTask.Builder() .setService(MyTaskService.class) .setTag(TASK_TAG) .setExecutionWindow(0L, 3600L) .setPersisted(true) .build(); gcmNetworkManager.schedule(task); } } 0OFPGG5BTL 1FSJPEJD5BTLͷ#VJMEFSΛͬͯ5BTLΛ࡞͠ɺ (DN/FUXPSL.BOBHFSʹεέδϡʔϧ͢Δ
($./FUXPSL.BOBHFS ྑ͍" (PPHMF1MBZTFSWJDFT ͔Βར༻Ͱ͖Δ ࠶ىಈͯ͠εέδϡʔϧ͕อ࣋͞ΕΔ ࡉ͔͍εέδϡʔϧ͕݅ࢦఆͰ͖Δ
-PMMJQPQҎ߱Ͱ+PC4DIFEVMFSΛར༻͢Δ Β͍͠
($./FUXPSL.BOBHFS ඍົͳ! ؔੑͷബ͍QMBZTFSWJDFTHDN͕ґଘʹඞཁ QMBZTFSWJDFT͕ೖ͍ͬͯͳ͍Ͱར༻Ͱ͖ͳ͍ ຊࠃࢢͰͦ͜·Ͱؾʹ͢Δඞཁແͦ͞͏
কདྷੑ͕Α͘Θ͔Βͳ͍
($./FUXPSL.BOBHFSͷ ସϥΠϒϥϦ 'JSFCBTF+PC%JTQBUDIFS
'JSFCBTF+PC%JTQBUDIFS GJSFCBTFGJSFCBTFKPCEJTQBUDIFSBOESPJE (PPHMF*0ͷলిྗলϝϞϦԽͷηογϣϯͰ +PC4DIFEVMFSͱڞʹհ͞Εͨ ($./FUXPSL.BOBHFSͷସͱͯ͠ར༻Ͱ͖Δ
'JSFCBTF+PC%JTQBUDIFSαϯϓϧ αʔϏεଆ public class MyJobService extends JobService { @Override
public boolean onStartJob(JobParameters job) { Log.d("MyJobService", "onStartJob"); return false; } @Override public boolean onStopJob(JobParameters job) { return false; } } <service android:name=".MyJobService" android:exported="false"> <intent-filter> <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE" /> </intent-filter> </service>
͂ 'JSFCBTF+PC%JTQBUDIFSαϯϓϧ εέδϡʔϧ public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this)); Job myJob = dispatcher.newJobBuilder() .addConstraint(Constraint.ON_ANY_NETWORK) .setService(MyJobService.class) .setTag("my-unique-tag") .setLifetime(Lifetime.FOREVER) .build(); dispatcher.mustSchedule(myJob); } } 'JSFCBTF+PC%JTQBUDIFSOFX+PC#VJMEFSͰɺ+PCΛ࡞͠ NVTU4DIFEVMFPSTDIFEVMFͰεέδϡʔϧ͢Δ
'JSFCBTF+PC%JTQBUDIFS ྑ͍" 04Ҏ্ͷͰར༻Մೳ ࠶ىಈͯ͠εέδϡʔϧ͕อ࣋͞ΕΔ ࡉ͔͍εέδϡʔϧ͕݅ࢦఆͰ͖Δ
044Ͱެ։͞Ε͍ͯͯɺίʔυ͕ಡΊΔ
'JSFCBTF+PC%JTQBUDIFS ඍົͳ! ϝϯςφϯεੑ͕ͪΐͬͱո͍͠ JTTVF͕์ஔ͞Ε͕ͪ ͬͱ࠷ۙNBWFOϨϙδτϦʹެ։͞Εͨ
࣮࣭1MBZ4FSWJDFT͕ඞਢͳঢ়ଶ ޙड़ ίʔυಡΊΔ͕શ༰ΛѲͰ͖ΔΘ͚Ͱͳ͍
+PC%JTQBUDIFSͱ /FUXPSL.BOBHFS ͲͪΒΛ͏͖͔
($./FUXPSL.BOBHFSͷߏ ΞϓϦଆ QMBZTFSWJDFT DPNHPPHMFBOESPJEHNTHDN"$5*0/@5"4,@3&"%: JOUFOUGJMUFSΛ௨ͯ͡ݺͼग़͢ +PCͷىಈ݅Λ*OUFOUʹ٧ΊͯૹΔ
'JSFCBTF+PC%JTQBUDIFSͷߏ ΞϓϦଆ JOUFOUGJMUFSΛ௨ͯ͡ݺͼग़͢ +PCͷىಈ݅Λ%SJWFSʹ͑Δ DPNGJSFCBTFKPCEJTQBUDIFS"$5*0/@&9&$65& %SJWFS
(PPHMF1MBZ%SJWFSͷߏ ΞϓϦଆ (PPHMF1MBZ%SJWFS QMBZTFSWJDFT
(PPHMF1MBZ%SJWFSͷߏ QMBZTFSWJDFT JOUFOUGJMUFSΛ௨ͯ͡ݺͼग़͢ +PCͷىಈ݅Λ*OUFOUʹ٧ΊͯૹΔ (PPHMF1MBZ%SJWFS DPNHPPHMFBOESPJEHNTHDN"$5*0/@5"4,@3&"%:
'JSFCBTF+PC%JTQBUDIFSͷॴײ %SJWFSͱ͍͏நߏ͕͋ΓɺόοΫΤϯυͷΈ ҙͷͷʹஔ͖͑Δ͜ͱ͕Մೳ" ݱࡏ Ͱɺ(PPMF1MBZ%SJWFSͷΈΛఏڙ "MBSN.BOBHFSɺ+PC4DIFEVMFSϕʔεͷόοΫΤϯυ
Λ࣮͢Δܭը͋ΔΒ͍͠ IUUQTHJUIVCDPNGJSFCBTFGJSFCBTFKPCEJTQBUDIFSBOESPJEJTTVFT
($./FUXPSL.BOBHFSΛ͏ͷ͕͓͢͢Ί ެࣜυΩϡϝϯτͰ͍όʔδϣϯͷαϙʔτ͕ ඞཁͳ߹ɺ(DN/FUXPSL.BOBHFS͕ਪ͞Ε͍ͯΔ ࣌Ͱ໎͍ͬͯΔͳΒ IUUQTEFWFMPQFSBOESPJEDPNUPQJDQFSGPSNBODFCBDLHSPVOEPQUJNJ[BUJPOIUNM
͜ͷηογϣϯͷ·ͱΊ "MBSN.BOBHFS Ћ ࣌ؒʹݫີͳεέδϡʔϦϯά͕͍ͨ͠ +PC4DIFEVMFS όοςϦʔύϑΥʔϚϯεΛҙ͍ࣝͨ͠
ଟগΕͯͳ͍όονॲཧ ($.OFUXPSL.BOBHFS 04ҎԼαϙʔτ͍ͨ͠ 1MBZ4FSWJDFT͕ೖ͍ͬͯΔ͚ͩαϙʔτͰ͖ΕΑ͍
ͦͷଞͷબࢶ &WFSOPUFBOESPJEKPC 4ZOD"EBQUFS
&WFSOPUFBOESPJEKPCͱ͍͏બࢶ &WFSOPUF͕ͯ͢ͷҋΛٵऩͯ͠࡞ͬͯ͘Εͨ࠷ڧͷδϣϒ εέδϡʔϥʔ$ 04Ҏ্Ͱར༻Մೳ "MBSN.BOBHFS ($./FUXPSL.BOHFS +PC4DIFEVMFSΛ
όοΫΤϯυͱͯ͠ར༻͍ͯ͠Δ ϥΠϒϥϦଆ͕࠷దͳόοΫΤϯυΛબ͢ΔͷͰ։ൃऀ͕ Կ͕ΘΕΔ͔ҙࣝ͢Δඞཁ͕ͳ͍ IUUQTCMPHFWFSOPUFDPNUFDIVOJGJFEKPCMJCSBSZBOESPJE
ͦͷଞࢀߟʹ͍͍ͤͯͨͩͨ͞هࣄ 4DIFEVMJOH3FQFBUJOH"MBSNT EFWFMPQFSBOESPJEDPNUSBJOJOHTDIFEVMJOHBMBSNTIUNM 4DIFEVMJOHKPCTMJLFBQSPXJUI+PC4DIFEVMFS NFEJVNDPNHPPHMFEFWFMPQFSTFG
4BNQMFT+PC4DIFEVMFS EFWFMPQFSBOESPJEDPNTBNQMFT+PC4DIFEVMFSJOEFYIUNM *NQMFNFOUJOH($./FUXPSL.BOBHFSPO"OESPJE EFWFMPQFSTHPPHMFDPNDMPVENFTTBHJOHOFUXPSLNBOBHFS
͋Γ͕ͱ͏͍͟͝·ͨ͠
None