Slide 1

Slide 1 text

"OESPJEఆظ࣮ߦॲཧೖ໳ LB[Z LB[VLJZPTIJEB

Slide 2

Slide 2 text

ࣗݾ঺հ ࢯ໊٢ాສً
 ॴଐDPPLQBE*OD
 5XJUUFS!LB[
 HJUIVCLB[Z
 %SPJELBJHJͷൃදࢿྉ

Slide 3

Slide 3 text

ఆظ࣮ߦॲཧͱ͸ʜ Ϣʔβʔͷૢ࡞ͱ௚઀ؔ܎ͳ͘ɺ ҰఆͷִؒͰॲཧΛ࣮ߦ͢Δ ఆظ࣮ߦॲཧͷྫ ϑΟʔυͷߋ৽ ϩʔΧϧ͔Βͷ௨஌

Slide 4

Slide 4 text

ఆظ࣮ߦॲཧͷࣄྫ ʮྉཧ͖Ζ͘ʯ ྉཧࣸਅ͚ͩ͋ͭΊͯه࿥͢Δ

Slide 5

Slide 5 text

ྉཧ͖Ζ͘ͷ࢓૊Έ ୺຤ʹࣸਅ͕௥Ճ͞ΕΔ ҰఆִؒͰ৽نࣸਅΛ୳͢ ࣸਅΛྉཧ൑ఆ͢Δ ࣸਅΛΞοϓϩʔυ͢Δ ͜͜ʹఆظ࣮ߦॲཧ

Slide 6

Slide 6 text

༨ஊ 
 #SPBEDBTU3FDFJWFSͰ/&8@1*$563&ΠϕϯτΛ
 ड͚औΕ͹͍͍ͷͰ͸ʁ w ॳظͷϓϩτλΠϓͰ͸͜ͷํ਑Ͱ࣮૷͍ͯͨ͠ w ఆظ࣮ߦॲཧ͕ෆཁͳͷͰ࣮૷͕γϯϓϧͰྑ͔ͬͨ w શͯͷΧϝϥΞϓϦ͕/&8@1*$563&ΠϕϯτΛૹͬͯ ͘ΕΔΘ͚Ͱ͸ͳ͍ w %FQSFDBUFEJO"1*MFWFMͳͷͰ࠾༻͠ʹ͍͘

Slide 7

Slide 7 text

ఆظ࣮ߦॲཧΛ͍ͨ͠৔߹ɺ
 Έͳ͞ΜͲ͏ͯ͠·͔͢ʁ "MBSN.BOBHFS

Slide 8

Slide 8 text

"MBSN.BOBHFS "QJ-FWFM͔Βར༻Ͱ͖Δ ݹ͔͘Βར༻͞Ε͍ͯΔ"1*Ͱωοτ্ʹ஌ݟ΋ଟ͍ ΠϯλʔϑΣʔε͕γϯϓϧͰखܰʹ࢖͑Δ ʮ˓˓ͷ࣌ؒʹͳͬͨΒ˚˚Λىͯ͘͜͠Εʯ

Slide 9

Slide 9 text

"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


Slide 10

Slide 10 text

"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ʹ౉͢

Slide 11

Slide 11 text

"MBSN.BOBHFS ͪΐͬͱඍົͳ఺! 04ʹΑͬͯڍಈ͕ҧ͏ ࠶ىಈ͢Δͱεέδϡʔϧ͕ফ͑ΔͷͰରԠ͕ඞཁ ࣌ؒҎ֎ͷ੍໿ʹ͸ରԠͰ͖ͳ͍ ωοτϫʔΫ͕ܨ͕͍ͬͯͳ͍࣌ όοςϦʔ͕ܨ͕͍ͬͯΔ࣌ ࣦഊ࣌ͷϦτϥΠॲཧ͕ͳ͍

Slide 12

Slide 12 text

"MBSN.BOBHFSͷ࢖͍ॴ ޲͍ͯΔέʔε ࣌ؒʹݫີͳλεΫͷ࣮૷ ޲͍͍ͯͳ͍έʔε ࠶ىಈ࣌ͷαϙʔτ ϦτϥΠػߏ͕΄͍͠৔߹ ిྗޮ཰Λҙࣝͨ͠ϋΠύϑΥʔϚϯεͳॲཧ

Slide 13

Slide 13 text

ύϑΥʔϚϯεΛҙࣝͨ͠
 Ϟμϯͳδϣϒ؅ཧͷ࢓૊Έ +PC4DIFEVMFS

Slide 14

Slide 14 text

+PC4DIFEVMFS -PMMJQPQͰొ৔ͨ͠ൺֱత৽͍͠"1* 4FSWJDFΛ೚ҙͷλΠϛϯάͰɺىಈ͢Δ͜ͱ͕ग़དྷΔ
 δϣϒεέδϡʔϥʔ DPPLQBEΞϓϦ ྉཧ͖Ζ͘ Ͱ͸+PC4DIFEVMFSΛ࠾༻ͨ͠

Slide 15

Slide 15 text

+PC4DIFEVMFSαϯϓϧ 4FSWJDFଆ public class MyJobService extends JobService {
 
 @Override
 public boolean onStartJob(JobParameters job) { // ͜͜ʹॲཧΛهड़͢Δ
 return false;
 }
 
 @Override
 public boolean onStopJob(JobParameters job) {
 return false;
 }
 }

Slide 16

Slide 16 text

+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;
 }
 }

Slide 17

Slide 17 text

+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);
 } }

Slide 18

Slide 18 text

+PC4DIFEVMFSͰεέδϡʔϧʹར༻Ͱ͖Δ৚݅ ࠷େకΊ੾Γ࣌ؒ TFU0WFSSJEF%FBEMJOF ࠷௿஗Ԇ࣌ؒ TFU.JOJNVN-BUFODZ όοΫΦϑϦτϥΠํ਑ TFU#BDLPGG$SJUFSJB ௨৴؀ڥͷ੍໿ TFU3FRVJSFE/FUXPSL5ZQF ॆి؀ڥͷ੍໿ TFU3FRVJSFT$IBSHJOH ΞΠυϧঢ়ଶͷ੍໿ TFU3FRVJSFT%FWJDF*EMF ܁Γฦ͠ͷεέδϡʔϦϯά TFU1FSJPEJD ࠶ىಈ࣌ͷӬଓԽ TFU1FSTJTUFE

Slide 19

Slide 19 text

+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

Slide 20

Slide 20 text

εέδϡʔϧঢ়گΛίʔυͰ֬ೝ͢Δ +PC4DIFEVMFSHFU"MM1FEJOH+PCT εέδϡʔϧ͞Ε͍ͯΔKPC*OGPϦετ͕ड͚औΕΔ εέδϡʔϧͨ͠ࡍʹ౉ͨ͠*%Λൺֱ͢Δ 
 public static boolean isPending(Context context, int serviceId) {
 JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
 List pendingJobList = scheduler.getAllPendingJobs();
 for (JobInfo jobInfo : pendingJobList) {
 if (serviceId == jobInfo.getId()) {
 return true;
 }
 }
 return false;
 }

Slide 21

Slide 21 text

BECίϚϯυͰ+PC4DIFEVMFSͷঢ়ଶΛ֬ೝ͢Δ δϣϒεέδϡʔϥʔʹొ࿥͞ΕͯΔλεΫҰཡ ࣮ߦ଴ͪͷλεΫҰཡ ࣮ߦ͞ΕͨλεΫͷώετϦʔҰཡ 04όʔδϣϯʹΑͬͯද͕ࣔ΍΍ҧ͏ 
 adb shell dumpsys jobscheduler


Slide 22

Slide 22 text

EVNQTZTKPCTDIFEVMFS 04ͷ৔߹ 
 Settings: <୺຤ͷઃఆ> Started users: [0]
 Registered 48 jobs:
 JOB #1000/800 : com.android.server.pm.BackgroundDexOptService JOB #1000/20536: com.android.server.backup.FullBackupJob
 
 [த൫͸লུ]
 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


Slide 23

Slide 23 text

+PC4DIFEVMFS ྑ͍఺" 04ඪ४ͳͷͰ৴པ౓͸ߴ͍ ࡉ͔͍εέδϡʔϧ৚͕݅ࢦఆͰ͖Δ ࠶ىಈͯ͠΋ӬଓԽ͞ΕΔ࢓૊Έ͕͋Δ ϚϧνϢʔβʔʹରԠ ϖϯσΟϯάதͷ+PCҰཡ͕औಘͰ͖Δ ࠷ߴ

Slide 24

Slide 24 text

+PC4DIFEVMFS ඍົͳ఺! ཁٻ͞ΕΔ"QJϨϕϧ Ҏ্ ͕ߴ͍ ϓϩμΫγϣϯͰͷར༻࣮੷͕গͳ͍ ଟগͷ᠘͕͋Δ ޙड़

Slide 25

Slide 25 text

+PC4DIEVMFS։ൃͰ
 ؾΛ͚͍ͭͨ᠘ͷ࿩

Slide 26

Slide 26 text

ҙਤͤͣεέδϡʔϧ͕ফ͍͑ͯΔ ݱ৅ ઃఆͨ͠εέδϡʔϧ͕ಥવফ͍͑ͯΔ ࠶ݱ৚݅ ܥͷ୺຤ͰΞϓϦΛߋ৽͢ΔͱϦηοτ͞ΕΔ ରԠࡦ ύοέʔδͷߋ৽Λݕ஌ͯ͠࠶ઃఆ͢Δ

Slide 27

Slide 27 text

ύοέʔδߋ৽ΠϕϯτΛϋϯυϦϯά͢Δ 
 
 
 
 @Override
 public void onReceive(Context context, Intent intent) {
 super.onReceive(context, intent);
 String action = intent.getAction();
 if (Intent.ACTION_MY_PACKAGE_REPLACED.equals(action)) {
 // εέδϡʔϧ͞Ε͍ͯΔ͔֬ೝ͢Δɻ
 }
 }

Slide 28

Slide 28 text

୹͗͢Δ%FBE-JOF ݱ৅ %FBE-JOFͷ੍໿͕ҙਤ௨Γಈ͔ͳ͍ ࠶ݱ৚݅ %FBE-JOFʹͱͯ΋୹͍࣌ؒΛઃఆ͢Δ T͘Β͍ Ұ෦ͷ୺຤ͰKPCͷىಈʹ਺෼͔͔Δ ରࡦ +PC4DIFEVMFSΛଈ࣌ੑΛٻΊͯ࢖ͬͯ͸͍͚ͳ͍#

Slide 29

Slide 29 text

Ұ౓͖Γͷδϣϒ͕ճىಈ͢Δ ݱ৅ Ұ౓͖Γͷεέδϡʔϧͷ͸͕ͣෳ਺ճىಈ͢Δ ࠶ݱ৚݅ /ະຬͷશͯͷ୺຤ +PCͷ࣮ߦ࣌ؒΑΓ%FBEMJOF͕୹͍ͱෳ਺ճىಈ͢Δ ରԠࡦ %FBEMJOFΛ৳͹͢ɺνΣοΫػߏΛ༻ҙ͢Δ IUUQTUBDLPWFSGMPXDPNRVFTUJPOTKPCTDIFEVMFSQPTUJOHKPCTUXJDFOPUFYQFDUFE

Slide 30

Slide 30 text

ա৒ʹαʔϏεΛىಈ͢Δ୺຤ ݱ৅ Ұ෦ͷ୺຤Ͱ૝ఆͷ਺ेഒͷδϣϒىಈ͢Δ ࠶ݱ৚݅ ෆ໌ 04 ػछͳͲʹภΓ͕ͳ͍ ରԠࡦ νΣοΫػߏ༻ҙ͢ΔPS΂͖౳ͳ࣮૷Λҙࣝ͢Δ

Slide 31

Slide 31 text

ΠέͯΔ࢓૊Έ͕ཉ͍͕͠ɺ
 ະຬʹ΋ରԠ͍ͨ͠ (DN/FUXPSL.BOBHFS

Slide 32

Slide 32 text

(DN/FUXPSL.BOBHFS (PPHMF1MBZTFSWJDFTͰ௥Ճ͞Εͨ +PC4DIFEVMFSʹඇৗʹΑ͘ࣅͨεέδϡʔϥʔ ࣮૷͕ผBQL ։ൃऀαʔϏε ʹ͋ΔͨΊɺδϣϒͷొ࿥
 ΍Ωϟϯηϧ͸JOUFOUΛ௨্ͯ͡ख͘΍͍ͬͯΔ IUUQTBOESPJEEFWFMPQFSTHPPHMFCMPHDPNBDMPTFSMPPLBUHPPHMFQMBZTFSWJDFTIUNM

Slide 33

Slide 33 text

($./FUXPSL.BOBHFSαϯϓϧ αʔϏεଆ public class MyTaskService extends GcmTaskService {
 @Override
 public void onInitializeTasks() {
 // ΞϓϦ͕࡟আ͞ΕͨΓɺߋ৽͞Εͨ৔߹͸εέδϡʔϧ͕࡟আ͞ΕΔͷͰɺ
 // ͜͜ʹ࠶εέδϡʔϧ͢ΔίʔυΛॻ͘(ॳճ͸ݺ͹Εͳ͍)
 }
 
 @Override
 public int onRunTask(TaskParams taskParams) {
 // ͜͜ʹॲཧΛهड़͢Δ(ϫʔΧʔεϨου಺)
 return GcmNetworkManager.RESULT_SUCCESS;
 }
 } 
 
 
 


Slide 34

Slide 34 text

($./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ʹεέδϡʔϧ͢Δ

Slide 35

Slide 35 text

($./FUXPSL.BOBHFS ྑ͍఺" (PPHMF1MBZTFSWJDFT͔Βར༻Ͱ͖Δ ࠶ىಈͯ͠΋εέδϡʔϧ͕อ࣋͞ΕΔ ࡉ͔͍εέδϡʔϧ৚͕݅ࢦఆͰ͖Δ -PMMJQPQҎ߱Ͱ͸+PC4DIFEVMFSΛར༻͢Δ Β͍͠

Slide 36

Slide 36 text

($./FUXPSL.BOBHFS ඍົͳ఺! ؔ܎ੑͷബ͍QMBZTFSWJDFTHDN͕ґଘʹඞཁ QMBZTFSWJDFT͕ೖ͍ͬͯͳ͍୺຤Ͱ͸ར༻Ͱ͖ͳ͍ ೔ຊࠃ಺ࢢ৔Ͱ͸ͦ͜·Ͱؾʹ͢Δඞཁແͦ͞͏ কདྷੑ͕Α͘Θ͔Βͳ͍

Slide 37

Slide 37 text

($./FUXPSL.BOBHFSͷ
 ୅ସϥΠϒϥϦ 'JSFCBTF+PC%JTQBUDIFS

Slide 38

Slide 38 text

'JSFCBTF+PC%JTQBUDIFS GJSFCBTFGJSFCBTFKPCEJTQBUDIFSBOESPJE (PPHMF*0ͷলిྗলϝϞϦԽͷηογϣϯͰ
 +PC4DIFEVMFSͱڞʹ঺հ͞Εͨ ($./FUXPSL.BOBHFSͷ୅ସͱͯ͠ར༻Ͱ͖Δ

Slide 39

Slide 39 text

'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;
 }
 } 
 
 
 


Slide 40

Slide 40 text

͂ '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Ͱεέδϡʔϧ͢Δ

Slide 41

Slide 41 text

'JSFCBTF+PC%JTQBUDIFS ྑ͍఺" 04Ҏ্ͷ୺຤Ͱར༻Մೳ ࠶ىಈͯ͠΋εέδϡʔϧ͕อ࣋͞ΕΔ ࡉ͔͍εέδϡʔϧ৚͕݅ࢦఆͰ͖Δ 044Ͱެ։͞Ε͍ͯͯɺίʔυ͕ಡΊΔ

Slide 42

Slide 42 text

'JSFCBTF+PC%JTQBUDIFS ඍົͳ఺! ϝϯςφϯεੑ͕ͪΐͬͱո͍͠ JTTVF͕์ஔ͞Ε͕ͪ ΍ͬͱ࠷ۙNBWFOϨϙδτϦʹެ։͞Εͨ ࣮࣭1MBZ4FSWJDFT͕ඞਢͳঢ়ଶ ޙड़ ίʔυ͸ಡΊΔ͕શ༰Λ೺ѲͰ͖ΔΘ͚Ͱ͸ͳ͍

Slide 43

Slide 43 text

+PC%JTQBUDIFSͱ
 /FUXPSL.BOBHFS
 ͲͪΒΛ࢖͏΂͖͔

Slide 44

Slide 44 text

($./FUXPSL.BOBHFSͷߏ଄ ΞϓϦଆ QMBZTFSWJDFT DPNHPPHMFBOESPJEHNTHDN"$5*0/@5"4,@3&"%: JOUFOUGJMUFSΛ௨ͯ͡ݺͼग़͢ +PCͷىಈ৚݅Λ*OUFOUʹ٧ΊͯૹΔ

Slide 45

Slide 45 text

'JSFCBTF+PC%JTQBUDIFSͷߏ଄ ΞϓϦଆ JOUFOUGJMUFSΛ௨ͯ͡ݺͼग़͢ +PCͷىಈ৚݅Λ%SJWFSʹ఻͑Δ DPNGJSFCBTFKPCEJTQBUDIFS"$5*0/@&9&$65& %SJWFS

Slide 46

Slide 46 text

(PPHMF1MBZ%SJWFSͷߏ଄ ΞϓϦଆ (PPHMF1MBZ%SJWFS QMBZTFSWJDFT

Slide 47

Slide 47 text

(PPHMF1MBZ%SJWFSͷߏ଄ QMBZTFSWJDFT JOUFOUGJMUFSΛ௨ͯ͡ݺͼग़͢ +PCͷىಈ৚݅Λ*OUFOUʹ٧ΊͯૹΔ (PPHMF1MBZ%SJWFS DPNHPPHMFBOESPJEHNTHDN"$5*0/@5"4,@3&"%:

Slide 48

Slide 48 text

'JSFCBTF+PC%JTQBUDIFSͷॴײ %SJWFSͱ͍͏ந৅ߏ଄͕͋ΓɺόοΫΤϯυͷ࢓૊Έ͸
 ೚ҙͷ΋ͷʹஔ͖׵͑Δ͜ͱ͕Մೳ" ݱࡏ Ͱ͸ɺ(PPMF1MBZ%SJWFSͷΈΛఏڙ "MBSN.BOBHFS΍ɺ+PC4DIFEVMFSϕʔεͷόοΫΤϯυ
 Λ࣮૷͢Δܭը͸͋ΔΒ͍͠ IUUQTHJUIVCDPNGJSFCBTFGJSFCBTFKPCEJTQBUDIFSBOESPJEJTTVFT

Slide 49

Slide 49 text

($./FUXPSL.BOBHFSΛ࢖͏ͷ͕͓͢͢Ί ެࣜυΩϡϝϯτͰ΋௿͍όʔδϣϯͷαϙʔτ͕
 ඞཁͳ৔߹͸ɺ(DN/FUXPSL.BOBHFS͕ਪ঑͞Ε͍ͯΔ ࣌఺Ͱ໎͍ͬͯΔͳΒ IUUQTEFWFMPQFSBOESPJEDPNUPQJDQFSGPSNBODFCBDLHSPVOEPQUJNJ[BUJPOIUNM

Slide 50

Slide 50 text

͜ͷηογϣϯͷ·ͱΊ "MBSN.BOBHFSЋ ࣌ؒʹݫີͳεέδϡʔϦϯά͕͍ͨ͠ +PC4DIFEVMFS όοςϦʔύϑΥʔϚϯεΛҙ͍ࣝͨ͠ ଟগ஗Εͯ΋໰୊ͳ͍όονॲཧ ($.OFUXPSL.BOBHFS 04ҎԼ΋αϙʔτ͍ͨ͠ 1MBZ4FSWJDFT͕ೖ͍ͬͯΔ୺຤͚ͩαϙʔτͰ͖Ε͹Α͍

Slide 51

Slide 51 text

ͦͷଞͷબ୒ࢶ
 &WFSOPUFBOESPJEKPC 4ZOD"EBQUFS

Slide 52

Slide 52 text

&WFSOPUFBOESPJEKPCͱ͍͏બ୒ࢶ &WFSOPUF͕͢΂ͯͷҋΛٵऩͯ͠࡞ͬͯ͘Εͨ࠷ڧͷδϣϒ
 εέδϡʔϥʔ$ 04Ҏ্Ͱར༻Մೳ "MBSN.BOBHFS ($./FUXPSL.BOHFS +PC4DIFEVMFSΛ
 όοΫΤϯυͱͯ͠ར༻͍ͯ͠Δ ϥΠϒϥϦଆ͕࠷దͳόοΫΤϯυΛબ୒͢ΔͷͰ։ൃऀ͕
 Կ͕࢖ΘΕΔ͔ҙࣝ͢Δඞཁ͕ͳ͍ IUUQTCMPHFWFSOPUFDPNUFDIVOJGJFEKPCMJCSBSZBOESPJE

Slide 53

Slide 53 text

ͦͷଞࢀߟʹ͍͍ͤͯͨͩͨ͞هࣄ 4DIFEVMJOH3FQFBUJOH"MBSNT EFWFMPQFSBOESPJEDPNUSBJOJOHTDIFEVMJOHBMBSNTIUNM 4DIFEVMJOHKPCTMJLFBQSPXJUI+PC4DIFEVMFS NFEJVNDPNHPPHMFEFWFMPQFSTFG 4BNQMFT+PC4DIFEVMFS EFWFMPQFSBOESPJEDPNTBNQMFT+PC4DIFEVMFSJOEFYIUNM *NQMFNFOUJOH($./FUXPSL.BOBHFSPO"OESPJE EFWFMPQFSTHPPHMFDPNDMPVENFTTBHJOHOFUXPSLNBOBHFS

Slide 54

Slide 54 text

͋Γ͕ͱ͏͍͟͝·ͨ͠

Slide 55

Slide 55 text

No content