å°ã倧ãããªããããã¢ããªã±ãŒã·ã§ã³ã®éçºè
ãçŽé¢ããåé¡ã®1ã€ã¯ãç»é¢éã®ããã²ãŒã·ã§ã³ã§ãã ã¹ã¯ãªãããéç·åœ¢ã«ãªã£ãå Žåãæšæºã®startActivityãšchangeFragmentã䜿çšããŠååŸããããšã¯ãã§ã«å°é£ã§ãã äžäººäžäººããã®åé¡ãç¬èªã®æ¹æ³ã§è§£æ±ºããŸããïŒåœŒã¯ããã²ãŒã·ã§ã³ã«ã€ããŠç¬èªã®æ±ºå®ãäžãããµãŒãããŒãã£ïŒããšãã°Cicerone ïŒã䜿çšããŸããã ããã¯æ¬åœã«Googleãšã³ãžãã¢ãæ··ä¹±ãããçŸåšã¯Google I / O 2018ã«ããã²ãŒã·ã§ã³ãœãªã¥ãŒã·ã§ã³ãç»å ŽããŸããã
ãã®èšäºã§ã¯ãããã²ãŒã·ã§ã³ã®ãã¬ãŒã ã¯ãŒã¯ã«äžè¬çã«å¿
èŠãªãã®ãç解ããGoogleã®ãœãªã¥ãŒã·ã§ã³ãã©ã®ããã«é
眮ãããã©ã®ãããªæœè±¡åãæ©èœããããç解ããŸãã

ããã²ãŒã·ã§ã³èŠä»¶
ããã²ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã«èšå®ããèŠä»¶ããå§ããŸãããã äžé£ã®èšäºã§ã¯ãããããå®è£
ãããŠãããã©ããã«æ°ä»ãããšãã«ãããã«æ»ããŸãã
åªå
床1 ïŒå¿
é ïŒïŒ
[1]ã©ã€ããµã€ã¯ã«ããã®åé¢ã
[2]ãã¹ããããããã²ãŒã·ã§ã³ãå®è¡ããæ©èœã
[3]ãæ»ããã³ãã³ãã§åã®ç»é¢ãèªåçã«éããŸãã
[4]ã¢ãã¡ãŒã·ã§ã³ãè¿œå ããŠç»é¢ãå€æŽããããšãã§ããŸãã
[5]åŒæ°ãæž¡ãã
[6]ã©ã³ã¿ã€ã ããã²ãŒã·ã§ã³ãåæ§ç¯ããæ©èœã
[7]å
±æèŠçŽ ã®ãµããŒãã
[8]äžé£ã®ç»é¢ãééããæ©èœã
åªå
床2 ïŒæãŸããïŒïŒ
[9]ãã£ãŒããªã³ã¯ãæäœããããã®äŸ¿å©ãªã¡ã«ããºã ã
[10]ã¢ã¯ãã£ããã£ããã©ã°ã¡ã³ãããã¥ãŒã§ã®å®è£
ã®å¯èœæ§ã
[11]ããã²ãŒã·ã§ã³ã®ãã¹ãã
[12]å€æŽã®æè»æ§ã
[13]ããžãã¹ããžãã¯ããããã²ãŒãããæ©èœã
[14]ããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã«ããç»é¢ã眮ãæããæ©èœã
[15]ã³ã³ãã€ã«æã«åŒæ°ããã§ãã¯ããŸãã
[16]ã·ã³ãã«ãªãã¶ã€ã³ã®ããã®èŠèŠçè¡šçŸããããŸãã
ããã²ãŒã·ã§ã³ã®ä»®å®
ãã®ãããæåã«ãGoogleãæ瀺ããæ°ããååã«å¯ŸåŠããŸãã
åå1. éå§ç¹ãä¿®æ£
ã¢ããªã±ãŒã·ã§ã³å
ã®ãã¹ãŠã®ãªã³ã¯ã¯1ã€ã®ãã€ã³ãã«ã€ãªãããŸããã€ãŸããåžžã«1ã€ã®ç»é¢ïŒæ¬è³ªçã«ã¯SplashScreenïŒããéå§ããã¢ããªã±ãŒã·ã§ã³ã®ã©ãã«ç§»åãããã決å®ããŸãã
åå2ã ããã²ãŒã·ã§ã³ã¯LIFOã¹ã¿ãã¯ãšããŠæ©èœããŸã
ããã·ã¥ãšãããã®æäœã®ã¿ãè¡ãããšãã§ããã¹ã¿ãã¯ã®äžå€®ã«ããç»é¢ã¯æäœã§ããŸããã
åå3. [ æ»ã]ãã¿ã³ãš[äžãž]ãã¿ã³ã¯åãããã«æ©èœããŸã
æåŸã«ãããŒã«ããŒã®ç¢å°ãšããŒãããã¯ã®ç¢å°ã¯åãããã«æ©èœããŸãã ãã以äžæ··ä¹±ãããŠãŒã¶ãŒã¯ããŸããïŒ
åå4. ã¢ããªã±ãŒã·ã§ã³ã®ãã£ãŒããªã³ã¯ã¯ãèªåã§ç»é¢ã«å°éããå Žåãšåæ§ã«ãç»é¢ã®ã¹ã¿ãã¯ãçæããŸã
ãæ»ãããã¿ã³ãã¯ãªãã¯ããŠãã£ãŒããªã³ã¯ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãéããšããã£ãŒããªã³ã¯ãªãã§éããå Žåãšåãããã«ããã¹ãŠã®ç»é¢ã衚瀺ãããŸãã
å®çŸ©
ã¯ã€ãã¯ã¹ã¿ãŒãã®ããã«ã¯ã€ãã¯ãã€ãã³ã°ã®ããã«ã Githubãããµã³ãã«ãããŠã³ããŒãããŠãå®éã®ãã¹ãŠãéäžã§èŠãããšãã§ããŸãã
èšäºã®æåŸã«ã¯ãAndroid Studioãããã«èµ·åããªãã£ãå Žåã«Android Studioãå
æããæ¹æ³ãèšèŒãããŠããŸãã
ã§ã¯ãæ°ããããã²ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã¯ã©ã®ããã«æ©èœããŸããïŒ æ¬¡ã®ã³ã³ããŒãã³ãã§æ§æãããŠããŸãã
ç®çå° -ããã²ãŒããããšéãç»é¢ã ããã¥ã¡ã³ãã䟿å©ã«åç
§ã§ããããã«ããã®æå®ãä¿æããŠããŸãã Fragment ã Activity ã Viewã®ã»ã ãäžè¬çã«ããã²ãŒã·ã§ã³ç»é¢ã§æå³ãããã¹ãŠã®ãã®ãæå®ã§ããŸãã å°æ¥ããã©ã°ã¡ã³ãã«ã€ããŠè©±ããŸããããã©ã°ã¡ã³ãã ãã§ãªã䜿çšã§ããããšãå¿ããªãã§ãã ããã
NavHostã€ã³ã¿ãŒãã§ãŒã¹ã¯ããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãããã²ãŒããããšãã«ç»é¢ïŒ Destination ïŒãåãæ¿ãããã¥ãŒã³ã³ãããŒã§ãã ããã©ã«ãã®å®è£
ã¯NavHostFragmentã§ãã ããã²ãŒã·ã§ã³çšã«xmlãèšå®ãããŠããŸãã
NavGraphã¯xmlããã²ãŒã·ã§ã³éä¿¡ã§ãã å®å
ç»é¢ãšãããã®éã®æ¥ç¶ã«ã€ããŠèª¬æããŸãã
NavControllerã¯ãããã²ãŒã·ã§ã³ã¡ã«ããºã ãå®è£
ãããšã³ãã£ãã£ã§ãã ç»é¢ãåãæ¿ãããšãã«æ¹åãå€ããã®ã¯åœŒã«ãšã£ãŠã§ãïŒ Destination ïŒã NavControllerã¯NavHostã«ã€ã³ã¹ããŒã«ãããŸã ã æ¢è£œã®NavHostFragmentãæ±ã£ãŠããå Žåã¯ã NavControllerãäœæããŠæäŸããããã®ãã¹ãŠã®ããžãã¯ããã§ã«è¡ãããŠããŸãã
ã¢ã¯ã·ã§ã³ -å¥ã®ç»é¢ã«åãæ¿ããã³ãã³ãã å®å
ãå€æŽããããã«NavControllerã«éä¿¡ããŸã
FragmentNavigator-ãã©ã°ã¡ã³ããã©ã³ã¶ã¯ã·ã§ã³èªäœãã«ãã»ã«åããå
éšã¯ã©ã¹ã
åäœåç
æ§ç¯ãããNavGraphã¯NavHostFragmentã«èšå®ãããŸã ïŒ NavHostã®ç¹æ®ãªã±ãŒã¹ãšããŠïŒã ããã§ã ã¢ã¯ã·ã§ã³ãšã¯äœãããããã«å¯Ÿå¿ããç»é¢ãããããŸããã
NavHostFragmentã¯ãä»åŸã®ãã©ã³ã¶ã¯ã·ã§ã³ãéç¥ããNavControllerãæäŸããŸãã ç®çã®ã¢ã¯ã·ã§ã³ã³ãã³ããçºè¡ããŠãã³ãŒãããNavControllerã«ã¢ã¯ã»ã¹ããŸã ã NavHostFragmentã察話ããFragmentNavigatorã¯ãæçµçãªç»é¢åãæ¿ããæ
åœããŸãã
å®è£
ãã®ç£ãæ±ãæ¹æ³ãç解ããæãæ¥ãŸããã
ãŸããå¿
èŠãªãã¹ãŠã®ã©ã€ãã©ãªãšãã©ã°ã€ã³ãæ¥ç¶ããŸãã Googleã®é©åãªã»ã¯ã·ã§ã³ã§é¢é£æ
å ±ã確èªããŠãã ããã
ã«ãŒã** build.gradle **
buildscript { ext.kotlin_version = '1.2.41' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0-alpha14' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
ã¢ããªå
/ build.gradle
dependencies { def nav_version = '1.0.0-alpha01' implementation "android.arch.navigation:navigation-fragment:$nav_version" implementation "android.arch.navigation:navigation-ui:$nav_version" // }
ããã²ãŒã·ã§ã³ã°ã©ããäœæãã
次ã«ãããã²ãŒã·ã§ã³ããããäœæããŸãã å¥ã®ãªãœãŒã¹ã¿ã€ããä¿®æ£ãããŸãã- ããã²ãŒã·ã§ã³ ãç¹å¥ãªãšãã£ã¿ãŒãæäŸãããŠããŸãã
ãããè¡ãã«ã¯ãå
容ãå«ããã¡ã€ã«res / navigation / nav_graph.xmlãäœæããŸãã ããã¯æã§ã¯ãªãã æšæºã®ã³ã³ã¹ãã©ã¯ã¿ãŒãä»ããŠè¡ãããšãã§ããŸã
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> </navigation>
ãšãã£ã¿ãŒãã èšèšãã¿ãã«åãæ¿ãããã®äžã«ç»é¢ïŒ Destination ïŒãåã蟌ã¿ã ã¢ã¯ã·ã§ã³ç¢å°ã䜿çšããŠããããæ¥ç¶ããŸãã
ä»çµã¿ã¯éåžžã«çŽæçã§ãConstraintLayoutãšã®ããåãã«äŒŒãŠããŸãã åé¡ãããå Žåã¯ãGoogleã®è©³çŽ°ãªã¬ã€ããã芧ãã ããã ïŒèŠä»¶[3]ã¯æºããããŠããŸãïŒã
ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ã å®å
ïŒç»é¢ïŒãšã¢ã¯ã·ã§ã³ ïŒç¢å°ïŒã®2çš®é¡ã®ãšã³ãã£ãã£ã§æ§æãããŠããŸãã
å®å
ã«ã¯äžé£ã®å±æ§ããããŸãã
- ID-ã¢ã¯ã·ã§ã³ãéããŠä»ã®äººãšéä¿¡ããããã®ç»é¢èå¥åã
- ã¯ã©ã¹ -ãã®ç»é¢ã®ã¯ã©ã¹ïŒããšãã°ãLoginFragmentïŒã
ããã«ããã©ã¡ãŒã¿ã®3ã€ã®ã°ã«ãŒãããããŸãã - åŒæ°ã¯ããã©ã¡ãŒã¿åããåŒæ°ã§ãã
- ã¢ã¯ã·ã§ã³ -çŸåšã®ç»é¢ããã©ããžè¡ããã決å®ããã³ãã³ãã
- ãã£ãŒããªã³ã¯ -ã¢ããªã±ãŒã·ã§ã³ã®å€éšããç»é¢ã«ç§»åããããã®ãã£ãããªã³ã¯ã
ãã®ç»é¢ãéå§ç»é¢ã«ããããšãã§ããŸãã
ãšãã£ã¿ãŒã§ã¯ããã®ããã«èŠããŸã ã¢ã¯ã·ã§ã³ã«ã¯äžé£ã®å±æ§ããããŸãã
- ID-ã¢ã¯ã·ã§ã³èå¥åïŒç»é¢ãåãæ¿ããããã«äœ¿çšããŸãã
- å®å
-ã¢ã¯ã·ã§ã³ãå°ãå®å
IDã
ããã«ããã©ã¡ãŒã¿ãŒã®4ã€ã®ã°ã«ãŒãããããŸãã - é·ç§» -åãæ¿ãã®ã¢ãã¡ãŒã·ã§ã³ã ã¢ã¯ã·ã§ã³ã®ããŸããŸãªã¿ã€ããæå®ã§ããŸãïŒEnterãExitãPop EnterãPop Exitã ã¢ãã¡ãŒã·ã§ã³ã¯xmlãªãœãŒã¹ããååŸãããŸãã ç¬èªã«å®çŸ©ããã®ã¯ç°¡åã§ããé©åãªãªãœãŒã¹ãres / animãã©ã«ããŒã«è¿œå ããã ãã§ãã ïŒnav_custom_enter_anim.xmlã®äŸãåç
§ïŒ
- ArgumentDefaultValue-ããã©ã«ãã§ãã©ã°ã¡ã³ãã®åŒæ°ã®å€ã
- PopBehavior-ãã©ã°ã¡ã³ããéãããšãã®ããã²ãŒã·ã§ã³ã®åäœã ããšãã°ãã¹ã¿ãã¯ã®ãã¹ãŠã®ç»é¢ãéããŠãéå§ç»é¢ã«æ»ãããšãã§ããŸãã ïŒAction action_notificationFragment_to_dashboardFragmentã®äŸãåç
§ããŠãã ãã-ã¡ã€ã³ç»é¢ã«ç§»åããŸãïŒã ïŒæºããããèŠä»¶[16]ïŒ
- LaunchOption-ã¹ã¿ãã¯ãæäœããããã®ãªãã·ã§ã³ãã¢ã¯ãã£ããã£ã¹ã¿ãã¯ãæäœãããšãã®èµ·åã¢ãŒããé£æ³ãããŸãã
ãšãã£ã¿ãŒã§ã¯ããã®ããã«èŠããŸã çµæã¯ãèšäºã®ã¿ã€ãã«ã«äŒŒãç»åã§ãã
ããã²ãŒã·ã§ã³ã°ã©ããã³ã³ããã«ãã€ã³ãããŸã
ããã²ãŒã·ã§ã³ã°ã©ãããããŸãããããã³ã³ããã«ãã€ã³ãããŸãã ãããè¡ãã«ã¯ã NavHostFragmentããã²ãŒã·ã§ã³å
šäœã®ãã«ããŒãšããŠæ©èœããMainActivityãxmlã«è¿œå ãã å±æ§ãèšå®ããŸã ã
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout android:id="@+id/container" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <fragment android:id="@+id/nav_host_fragment" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:navGraph="@navigation/nav_graph" app:defaultNavHost="true" /> </FrameLayout>
æåŸãã2çªç®ã®è¡ã¯ãäœæããããã²ãŒã·ã§ã³ã°ã©ãã«åŸã£ãŠããã²ãŒã·ã§ã³ãå®è¡ãããããšã瀺ããŠããŸãã
æåŸã®è¡ã¯ã NavHostFragmentãããã©ã«ãã«èšå®ãããŠããããšãæå³ããŸããããã«ãããã·ã¹ãã ã®ãæ»ããåŠçãä¿èšŒãããŸãã ããã²ãŒã·ã§ã³ã®åå3ãæºããããã«ã Activityã®æ»ãç¢å°ã®ã¢ã¯ã·ã§ã³ãåå®çŸ©ããå¿
èŠããããŸãã
äž»ãªæŽ»å
override fun onSupportNavigateUp() = findNavController(R.id.nav_host_fragment).navigateUp()
ããã²ãŒã·ã§ã³ã³ãã³ãã®å®è¡
å¥ã®ãã©ã°ã¡ã³ãã«åãæ¿ããã«ã¯ãNavigatorãååŸããå¿
èŠããããŸãã
ããã«ã¯ããã€ãã®æ¹æ³ããããŸãã
NavHostFragment.findNavController(Fragment) Navigation.findNavController(View) Navigation.findNavController(Activity, @IdRes int viewId)
å®éããããã¯NavHostãå®è£
ãããã¥ãŒãæ€çŽ¢ãã ããããNavControllerãååŸããããã®ããŸããŸãªã³ã³ããã¹ãããã®ã³ãã³ãã§ãã
次ã«ãããã²ãŒã·ã§ã³ã®ã¡ãœããã®1ã€ããçµæã®NavControllerã§åŒã³åºãããŸãã
Homefragment
fragment_home_button_dashboard.setOnClickListener { activity?.let { findNavController(it, R.id.nav_host_fragment) .navigate(R.id.action_homeFragment_to_dashboardFragment) } }
NavControllerã䜿çšããŠããã²ãŒãããã«ã¯
ç§ãã¡ã¯èªç±ã«äœ¿ããïŒ
- ãªãŒããŒããŒããããããã€ãã®ã¡ãœããnavigateïŒïŒ ã ãããã®ãã©ã¡ãŒã¿ãŒã¯
- ActionId-xmlããã®åãã¢ã¯ã·ã§ã³ID
- ãã³ãã«-åŒæ°ã®ã»ãã
- NavOptions-ã¢ãã¡ãŒã·ã§ã³ãã¹ã¿ãã¯ãªã©ã決å®ããActionã®åŒæ°ã
- NavDirections-ãã³ãã«ãšActionIdãã©ããããæœè±¡å
- çŸåšã®ã¹ã¿ãã¯ããç»é¢ã«ãžã£ã³ãããããã®ãªãŒããŒããŒããããpopBackStackïŒïŒã¡ãœããã®ã«ããã«ã
ãã®äŸã§ã¯ã ã¢ã¯ã·ã§ã³ã®ã¿ã䜿çšãããŠå
ã«é²ã¿ãŸãã ãæ»ããã³ãã³ãã¯èªåçã«åŠçããã ã¢ã¯ã·ã§ã³ã®å察ã®ã¢ã¯ã·ã§ã³ãåŒãèµ·ãããŸãïŒåãPopBehaviorå±æ§ïŒ
ãã®ããã DashboardFragmentç»é¢ããAction ïŒã³ãã³ãïŒ action_notificationFragment_to_dashboardFragmentã®åŸã«æ»ããšã NotificationFragmentã§ã¯ãªãHomeFragmentã«å°éããŸãã
nav_graph.xml
<action android:id="@+id/action_notificationFragment_to_dashboardFragment" app:destination="@id/dashboardFragment" app:enterAnim="@anim/nav_custom_enter_anim" app:popUpTo="@+id/homeFragment" />
ãŸãšã
äžèŠãããšãããGoogleã®ãã¬ãŒã ã¯ãŒã¯ã¯éãéé£ãåŒãèµ·ãããããã詳现ã«æ€èšããå¿
èŠãããããã«èŠããŸãã
ãã®ããŒãã§ã¯ã[3]ãš[16]ã®èŠä»¶ãæºããããŠããããšã確èªããŸããã äžèŠãããšãGoogleã®ãœãªã¥ãŒã·ã§ã³ã®ããã²ãŒã·ã§ã³èŠä»¶ã®è¡šã¯æ¬¡ã®ããã«ãªããŸãã
åªå
床1 ïŒå¿
é ïŒïŒ
[1]ã©ã€ããµã€ã¯ã«ããã®åé¢ã
[2]ãã¹ããããããã²ãŒã·ã§ã³ãå®è¡ããæ©èœã
[3]ãæ»ããã³ãã³ãã§åã®ç»é¢ãèªåçã«éããŸã [â]ã
[4]ã¢ãã¡ãŒã·ã§ã³ãè¿œå ããŠç»é¢ãå€æŽããããšãã§ããŸãã
[5]åŒæ°ãæž¡ãã
[6]ã©ã³ã¿ã€ã ããã²ãŒã·ã§ã³ãåæ§ç¯ããæ©èœã
[7]å
±æèŠçŽ ã®ãµããŒãã
[8]äžé£ã®ç»é¢ãééããæ©èœã
åªå
床2 ïŒæãŸããïŒïŒ
[9]ãã£ãŒããªã³ã¯ãæäœããããã®äŸ¿å©ãªã¡ã«ããºã ã
[10]ã¢ã¯ãã£ããã£ããã©ã°ã¡ã³ãããã¥ãŒã§ã®å®è£
ã®å¯èœæ§ã
[11]ããã²ãŒã·ã§ã³ã®ãã¹ãã
[12]å€æŽã®æè»æ§ã
[13]ããžãã¹ããžãã¯ããããã²ãŒãããæ©èœã
[14]ããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã«ããç»é¢ã眮ãæããæ©èœã
[15]ã³ã³ãã€ã«æã«åŒæ°ããã§ãã¯ããŸãã
[16]ã·ã³ãã«ãªãã¶ã€ã³ã®èŠèŠçè¡šçŸããããŸã [â]ã
次ã¯ïŒ
次ã®éšåã§æ€èšããŸãïŒé åºãå€ããå¯èœæ§ããããŸãïŒã
- åŒæ°ä»ãã®ãã©ã°ã¡ã³ããéããã©ã³ã¶ã¯ã·ã§ã³ã
- ãã£ãŒããªã³ã¯ã
- BottomNavigationããã³ããŒã«ããŒãæäœããããã®çµã¿èŸŒã¿ããŒã«ã
- ããŸããŸãªçš®é¡ã®ããã²ãŒã·ã§ã³ïŒãã¹ããããã¢ã¯ãã£ããã£ãšè€æ°ã®ã¢ã¯ãã£ããã£ã
- å
éšã§ãã¹ãŠãã©ã®ããã«é
眮ãããã©ã€ããµã€ã¯ã«ã§ã©ã®ããã«æ©èœãããã
- ãã¥ãŒããã²ãŒã·ã§ã³ãäœæããæ¹æ³ã
- ã³ãŒãããããã²ãŒã·ã§ã³ã°ã©ããçµã¿ç«ãŠãæ¹æ³ã
- ããã²ãŒã·ã§ã³ããã¹ãããæ¹æ³ã
- ããããã¹ãŠãæŠãã®æºåãã§ããŠããããã©ã®ãããªæœè±¡åãè¿œå ããå¿
èŠããããŸãã
ä»ããå§ããæ¹æ³
説æããäŸã¯ãç§ã®Githubã«ãããŸãã å®è¡ããã«ã¯ãå°ãªããšã3.2 Canaryã®Android Studioãå¿
èŠã§ãã
Android Studioã§ããã²ãŒã·ã§ã³ã°ã©ãã衚瀺ããæ¹æ³ãã«ãããŒã«28.0.0-rc1ã®SDKããŒãžã§ã³ã§ã®ã¿å§ããŸããïŒ28.0.0-rc2ã§ã¯ããã¹ãŠãç¡éã«ããŠã³ããŒããããŸããïŒ

çªç¶ããã圹ã«ç«ããªãå Žåã¯ããããã«ããŠãã ãã-ç§ã¯ããã€ãã®ã±ãŒã¹ã§å©ããããŸããã