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