Droidkaigi 2017

11f1c6f9a26793f33d93eed3a97f4a6c?s=47 kazy1991
March 09, 2017

Droidkaigi 2017

11f1c6f9a26793f33d93eed3a97f4a6c?s=128

kazy1991

March 09, 2017
Tweet

Transcript

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

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

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

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

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

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

    ͘ΕΔΘ͚Ͱ͸ͳ͍ w %FQSFDBUFEJO"1*MFWFMͳͷͰ࠾༻͠ʹ͍͘
  7. ఆظ࣮ߦॲཧΛ͍ͨ͠৔߹ɺ
 Έͳ͞ΜͲ͏ͯ͠·͔͢ʁ "MBSN.BOBHFS

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

  9. "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" />
  10. "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ʹ౉͢
  11. "MBSN.BOBHFS  ͪΐͬͱඍົͳ఺!  04ʹΑͬͯڍಈ͕ҧ͏  ࠶ىಈ͢Δͱεέδϡʔϧ͕ফ͑ΔͷͰରԠ͕ඞཁ  ࣌ؒҎ֎ͷ੍໿ʹ͸ରԠͰ͖ͳ͍ 

    ωοτϫʔΫ͕ܨ͕͍ͬͯͳ͍࣌  όοςϦʔ͕ܨ͕͍ͬͯΔ࣌  ࣦഊ࣌ͷϦτϥΠॲཧ͕ͳ͍
  12. "MBSN.BOBHFSͷ࢖͍ॴ  ޲͍ͯΔέʔε  ࣌ؒʹݫີͳλεΫͷ࣮૷  ޲͍͍ͯͳ͍έʔε  ࠶ىಈ࣌ͷαϙʔτ ϦτϥΠػߏ͕΄͍͠৔߹

     ిྗޮ཰Λҙࣝͨ͠ϋΠύϑΥʔϚϯεͳॲཧ
  13. ύϑΥʔϚϯεΛҙࣝͨ͠
 Ϟμϯͳδϣϒ؅ཧͷ࢓૊Έ +PC4DIFEVMFS

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

  15. +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" />
  16. +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;
 }
 }
  17. +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);
 } }
  18. +PC4DIFEVMFSͰεέδϡʔϧʹར༻Ͱ͖Δ৚݅  ࠷େకΊ੾Γ࣌ؒ TFU0WFSSJEF%FBEMJOF   ࠷௿஗Ԇ࣌ؒ TFU.JOJNVN-BUFODZ  

    όοΫΦϑϦτϥΠํ਑ TFU#BDLPGG$SJUFSJB   ௨৴؀ڥͷ੍໿ TFU3FRVJSFE/FUXPSL5ZQF   ॆి؀ڥͷ੍໿ TFU3FRVJSFT$IBSHJOH   ΞΠυϧঢ়ଶͷ੍໿ TFU3FRVJSFT%FWJDF*EMF   ܁Γฦ͠ͷεέδϡʔϦϯά TFU1FSJPEJD   ࠶ىಈ࣌ͷӬଓԽ TFU1FSTJTUFE
  19. +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
  20. εέδϡʔϧঢ়گΛίʔυͰ֬ೝ͢Δ  +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;
 }
  21. BECίϚϯυͰ+PC4DIFEVMFSͷঢ়ଶΛ֬ೝ͢Δ  δϣϒεέδϡʔϥʔʹొ࿥͞ΕͯΔλεΫҰཡ  ࣮ߦ଴ͪͷλεΫҰཡ  ࣮ߦ͞ΕͨλεΫͷώετϦʔҰཡ  04όʔδϣϯʹΑͬͯද͕ࣔ΍΍ҧ͏ 


    adb shell dumpsys jobscheduler

  22. 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

  23. +PC4DIFEVMFS  ྑ͍఺"  04ඪ४ͳͷͰ৴པ౓͸ߴ͍  ࡉ͔͍εέδϡʔϧ৚͕݅ࢦఆͰ͖Δ  ࠶ىಈͯ͠΋ӬଓԽ͞ΕΔ࢓૊Έ͕͋Δ 

    ϚϧνϢʔβʔʹରԠ  ϖϯσΟϯάதͷ+PCҰཡ͕औಘͰ͖Δ ࠷ߴ
  24. +PC4DIFEVMFS  ඍົͳ఺!  ཁٻ͞ΕΔ"QJϨϕϧ Ҏ্ ͕ߴ͍  ϓϩμΫγϣϯͰͷར༻࣮੷͕গͳ͍ 

    ଟগͷ᠘͕͋Δ ޙड़
  25. +PC4DIEVMFS։ൃͰ
 ؾΛ͚͍ͭͨ᠘ͷ࿩

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

    ରԠࡦ  ύοέʔδͷߋ৽Λݕ஌ͯ͠࠶ઃఆ͢Δ
  27. ύοέʔδߋ৽ΠϕϯτΛϋϯυϦϯά͢Δ <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)) {
 // εέδϡʔϧ͞Ε͍ͯΔ͔֬ೝ͢Δɻ
 }
 }
  28. ୹͗͢Δ%FBE-JOF  ݱ৅  %FBE-JOFͷ੍໿͕ҙਤ௨Γಈ͔ͳ͍  ࠶ݱ৚݅  %FBE-JOFʹͱͯ΋୹͍࣌ؒΛઃఆ͢Δ T͘Β͍

      Ұ෦ͷ୺຤ͰKPCͷىಈʹ਺෼͔͔Δ  ରࡦ  +PC4DIFEVMFSΛଈ࣌ੑΛٻΊͯ࢖ͬͯ͸͍͚ͳ͍#
  29. Ұ౓͖Γͷδϣϒ͕ճىಈ͢Δ  ݱ৅  Ұ౓͖Γͷεέδϡʔϧͷ͸͕ͣෳ਺ճىಈ͢Δ  ࠶ݱ৚݅  /ະຬͷશͯͷ୺຤ 

    +PCͷ࣮ߦ࣌ؒΑΓ%FBEMJOF͕୹͍ͱෳ਺ճىಈ͢Δ  ରԠࡦ  %FBEMJOFΛ৳͹͢ɺνΣοΫػߏΛ༻ҙ͢Δ IUUQTUBDLPWFSGMPXDPNRVFTUJPOTKPCTDIFEVMFSQPTUJOHKPCTUXJDFOPUFYQFDUFE
  30. ա৒ʹαʔϏεΛىಈ͢Δ୺຤  ݱ৅  Ұ෦ͷ୺຤Ͱ૝ఆͷ਺ेഒͷδϣϒىಈ͢Δ  ࠶ݱ৚݅  ෆ໌ 04

    ػछͳͲʹภΓ͕ͳ͍   ରԠࡦ  νΣοΫػߏ༻ҙ͢ΔPS΂͖౳ͳ࣮૷Λҙࣝ͢Δ
  31. ΠέͯΔ࢓૊Έ͕ཉ͍͕͠ɺ
 ະຬʹ΋ରԠ͍ͨ͠ (DN/FUXPSL.BOBHFS

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

    IUUQTBOESPJEEFWFMPQFSTHPPHMFCMPHDPNBDMPTFSMPPLBUHPPHMFQMBZTFSWJDFTIUNM
  33. ($./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>
  34. ($./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ʹεέδϡʔϧ͢Δ
  35. ($./FUXPSL.BOBHFS  ྑ͍఺"  (PPHMF1MBZTFSWJDFT ͔Βར༻Ͱ͖Δ  ࠶ىಈͯ͠΋εέδϡʔϧ͕อ࣋͞ΕΔ  ࡉ͔͍εέδϡʔϧ৚͕݅ࢦఆͰ͖Δ

     -PMMJQPQҎ߱Ͱ͸+PC4DIFEVMFSΛར༻͢Δ Β͍͠
  36. ($./FUXPSL.BOBHFS  ඍົͳ఺!  ؔ܎ੑͷബ͍QMBZTFSWJDFTHDN͕ґଘʹඞཁ  QMBZTFSWJDFT͕ೖ͍ͬͯͳ͍୺຤Ͱ͸ར༻Ͱ͖ͳ͍  ೔ຊࠃ಺ࢢ৔Ͱ͸ͦ͜·Ͱؾʹ͢Δඞཁແͦ͞͏ 

    কདྷੑ͕Α͘Θ͔Βͳ͍
  37. ($./FUXPSL.BOBHFSͷ
 ୅ସϥΠϒϥϦ 'JSFCBTF+PC%JTQBUDIFS

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

  39. '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>
  40. ͂ '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Ͱεέδϡʔϧ͢Δ
  41. 'JSFCBTF+PC%JTQBUDIFS  ྑ͍఺"  04Ҏ্ͷ୺຤Ͱར༻Մೳ  ࠶ىಈͯ͠΋εέδϡʔϧ͕อ࣋͞ΕΔ  ࡉ͔͍εέδϡʔϧ৚͕݅ࢦఆͰ͖Δ 

    044Ͱެ։͞Ε͍ͯͯɺίʔυ͕ಡΊΔ
  42. 'JSFCBTF+PC%JTQBUDIFS  ඍົͳ఺!  ϝϯςφϯεੑ͕ͪΐͬͱո͍͠  JTTVF͕์ஔ͞Ε͕ͪ  ΍ͬͱ࠷ۙNBWFOϨϙδτϦʹެ։͞Εͨ 

    ࣮࣭1MBZ4FSWJDFT͕ඞਢͳঢ়ଶ ޙड़   ίʔυ͸ಡΊΔ͕શ༰Λ೺ѲͰ͖ΔΘ͚Ͱ͸ͳ͍
  43. +PC%JTQBUDIFSͱ
 /FUXPSL.BOBHFS
 ͲͪΒΛ࢖͏΂͖͔

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

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

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

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

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


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

  50. ͜ͷηογϣϯͷ·ͱΊ  "MBSN.BOBHFS Ћ  ࣌ؒʹݫີͳεέδϡʔϦϯά͕͍ͨ͠  +PC4DIFEVMFS  όοςϦʔύϑΥʔϚϯεΛҙ͍ࣝͨ͠

     ଟগ஗Εͯ΋໰୊ͳ͍όονॲཧ  ($.OFUXPSL.BOBHFS  04ҎԼ΋αϙʔτ͍ͨ͠  1MBZ4FSWJDFT͕ೖ͍ͬͯΔ୺຤͚ͩαϙʔτͰ͖Ε͹Α͍
  51. ͦͷଞͷબ୒ࢶ
 &WFSOPUFBOESPJEKPC 4ZOD"EBQUFS

  52. &WFSOPUFBOESPJEKPCͱ͍͏બ୒ࢶ  &WFSOPUF͕͢΂ͯͷҋΛٵऩͯ͠࡞ͬͯ͘Εͨ࠷ڧͷδϣϒ
 εέδϡʔϥʔ$  04Ҏ্Ͱར༻Մೳ  "MBSN.BOBHFS ($./FUXPSL.BOHFS +PC4DIFEVMFSΛ


    όοΫΤϯυͱͯ͠ར༻͍ͯ͠Δ  ϥΠϒϥϦଆ͕࠷దͳόοΫΤϯυΛબ୒͢ΔͷͰ։ൃऀ͕
 Կ͕࢖ΘΕΔ͔ҙࣝ͢Δඞཁ͕ͳ͍ IUUQTCMPHFWFSOPUFDPNUFDIVOJGJFEKPCMJCSBSZBOESPJE
  53. ͦͷଞࢀߟʹ͍͍ͤͯͨͩͨ͞هࣄ  4DIFEVMJOH3FQFBUJOH"MBSNT  EFWFMPQFSBOESPJEDPNUSBJOJOHTDIFEVMJOHBMBSNTIUNM  4DIFEVMJOHKPCTMJLFBQSPXJUI+PC4DIFEVMFS  NFEJVNDPNHPPHMFEFWFMPQFSTFG 

    4BNQMFT+PC4DIFEVMFS  EFWFMPQFSBOESPJEDPNTBNQMFT+PC4DIFEVMFSJOEFYIUNM  *NQMFNFOUJOH($./FUXPSL.BOBHFSPO"OESPJE  EFWFMPQFSTHPPHMFDPNDMPVENFTTBHJOHOFUXPSLNBOBHFS
  54. ͋Γ͕ͱ͏͍͟͝·ͨ͠

  55. None