
- TOP
- ã¿ã°äžèЧ
- ãµãŒããŒãµã€ã
ãµãŒããŒãµã€ã
ã€ãã³ã
ãã¬ãžã³
æè¡ããã°
ã¯ããã« Gson ã«ã€ã㊠Gson ã®èª²é¡ 1. Null å®å
šãç Žå£ããããªã¹ã¯ 2. ããã©ã«ãåŒæ°ãç¡èŠããã Kotlin Serialization ã«ã€ã㊠å
·äœçãªä¿®æ£å
容 1. Data Class ã®æžãæã 2. Retrofit ã® Converter ã®çœ®ãæã ãŸãšããšä»åŸã®èª²é¡ ã¯ããã« ããã«ã¡ã¯ãæ ªåŒäŒç€ŸãšããªãŒã§ Android ã¢ããªéçºãæ
åœããŠãã岡ç°ã§ãã åŒç€ŸãæäŸãã ããªãã·ã¥ãããã³ ã® Android ã¢ããªã§ã¯ãã¢ããªã®å
ç¢æ§åäžãšã¢ãã³ãªéçºäœéšã®ããã®éžæãšããŠãJSON ããŒãµãŒãåŸæ¥ã® Gson ãã Kotlin Serialization ãžã®ç§»è¡ãæ€èšããŠããŸãã ä»åã¯åŒç€Ÿã§è¡ãªã£ãŠããã€ãã³ããææŠWEEKãã«ãŠãGson ãã Kotlin Serialization ãžã®ç§»è¡ããAndroid ã®ã³ãŒãããŒã¹å€æŽã«éå®ããŠææŠããŠã¿ãŸããããã¡ãã«ã€ããŠãå°ãã話ããããŠããã ããã°ãšæããŸãã åŒç€Ÿã®ææŠWEEKã®åãçµã¿ã«ã€ããŠã¯ä»¥äžã®èšäºãã芧ãã ããïŒ tech.every.tv Gson ã«ã€ã㊠Android ã¢ããªã®éçºã«ãããŠãAPI ãšã®éä¿¡ã§åãåã£ã JSON ãããŒã¿ã¯ã©ã¹ã«å€æãããJSON ããŒã¹ãã¯é¿ããŠã¯éããªãå®è£
ã§ãã ããªãã·ã¥ãããã³ ã® Android ã¢ããªã§ã¯ãé·ãã JSON ããŒãµãŒãšã㊠Google 補ã®ãGsonããå©çšããŠããŸãããGson ã¯éåžžã«æŽå²ãé·ããAndroid ã¢ããªéçºã®é»ææããããã¡ã¯ãã¹ã¿ã³ããŒããšããŠåºã䜿ãããŠãããRetrofit ãªã©ã®ãããã¯ãŒã¯ã©ã€ãã©ãªãšãæšæºã§é£æºãããããšããç¹åŸŽããããŸãã é·å¹Žã¢ããªã®éä¿¡åºç€ãæ¯ããŠããã Gson ã§ããããããžã§ã¯ãã®ãã« Kotlin åãé²ã¿ãããã¢ãã³ãªèšèªä»æ§ã掻çšããŠããäžã§ãå®ã¯ Android ã¢ããªãéçºããäžã§ããã€ãã®å€§ããªèª²é¡ãæ±ããããã«ãªã£ãŠããŸããã Gson ã®èª²é¡ Java æä»£ã«ã¯éåžžã«åªç§ã ã£ã Gson ã§ãããKotlin ã§æ§æãããçŸä»£ã®ã¢ããªã«ãããŠã¯ãKotlin ã®åŒ·ã¿ã§ããèšèªä»æ§ãšã³ã³ããªã¯ããèµ·ããã±ãŒã¹ãç®ç«ã€ããã«ãªã£ãŠããŸããã 1. Null å®å
šãç Žå£ããããªã¹ã¯ Gson ã¯å
éšã§ãªãã¬ã¯ã·ã§ã³ïŒ sun.misc.Unsafe ãªã©ïŒãçšããŠã€ã³ã¹ã¿ã³ã¹ãçæããŸãããã®ãããKotlin ã®ããŒã¿ã¯ã©ã¹ã§ããããã£ããé NullïŒ String ãªã©ïŒãã§å®çŸ©ããŠããŠãããµãŒããŒããè¿ã£ãŠãã JSON åŽã«ãã®ããŒãååšããªãå ŽåãGson ã¯åŒ·å¶çã« null ã代å
¥ããŠããŸããŸãã ããã«ãããKotlin ã³ã³ãã€ã©ãä¿èšŒããŠããã¯ãã®ãNull å®å
šããã©ã³ã¿ã€ã ã§ç Žå£ãããã¢ããªã®æãã¬ãšããã§ NullPointerException ãåŒãèµ·ããåå ãšãªã£ãŠããŸããã 2. ããã©ã«ãåŒæ°ãç¡èŠããã Kotlin ã®ããŒã¿ã¯ã©ã¹ã§ã¯ val isPremium: Boolean = false ã®ããã«ããã©ã«ãåŒæ°ãèšå®ã§ããŸããããããGson ã¯ã³ã³ã¹ãã©ã¯ã¿ãçµç±ããã«ã€ã³ã¹ã¿ã³ã¹ãçæããããšããããããJSON ã«è©²åœã®ããŒãå«ãŸããŠããªãå Žåããã®ããã©ã«ãå€ãé©çšãããŸãããçµæãšããŠãæå³ããªãåã®åæå€ïŒ Int ãªã 0 ãåç
§åãªã null ïŒãå
¥ã£ãŠããŸããšããåé¡ããããŸããã ãããã®æåã¯ãéçºè
ãæå³ããªããäžæ£ãªç¶æ
ãæã£ãã€ã³ã¹ã¿ã³ã¹ããã¢ããªå
ãåéããããšãæå³ããŠãããçµæãšããŠäºæãã¬ã¯ã©ãã·ã¥ã®æž©åºã«ãªãåŸãŸãã Kotlin Serialization ã«ã€ã㊠æçµçã«ããããã®èª²é¡ãæ ¹æ¬ãã解決ããããã«ãKotlin å
¬åŒãæäŸããŠããã·ãªã¢ã©ã€ãºã©ã€ãã©ãªãKotlin SerializationïŒ kotlinx.serialization ïŒããžç§»è¡ãæ€èšããŠããŸãã Kotlin Serialization ã¯ãã³ã³ãã€ã«æã«ã·ãªã¢ã©ã€ãºã»ãã·ãªã¢ã©ã€ãºã®ããã®ã³ãŒããèªåçæããä»çµã¿ãæã£ãŠããŸããå®è¡æã«éããªãã¬ã¯ã·ã§ã³ãè¡ããªããããéåžžã«ã¢ãã³ã§ Kotlin ã©ã€ã¯ãªèšèšãšãªã£ãŠããŸãã ãã®ã©ã€ãã©ãªãžåãæ¿ããããšã§ã以äžã®ãããªå€§ããªæ©æµãåããããšãã§ããŸãã 峿 Œãª Null å®å
šã®ä¿èšŒ é Null ãšããŠå®çŸ©ããããããã£ã«å¯Ÿã㊠JSON ã«å€ãååšããªãå Žåã匷å¶çã« Null ãå
¥ããã®ã§ã¯ãªããããŒã¹æã«æç¢ºã«äŸå€ïŒ SerializationException ïŒãæããŠãããŸããããã«ãããäžæ£ãªããŒã¿ã«ããåŸç¶åŠçã§ã®ã¯ã©ãã·ã¥ãé²ãããšãã§ããŸãã ããã©ã«ãå€ã®å®å
šãªãµããŒã JSON ã«ããŒãååšããªãå ŽåãKotlin åŽã§å®çŸ©ããããã©ã«ãåŒæ°ãæ£ããé©çšãããŸãã ããã©ãŒãã³ã¹åäžãšã¢ããªãµã€ãºåæž ãªãã¬ã¯ã·ã§ã³ã«äŸåããªããããããŒã¹é床ãåäžããŸãããŸããProGuard/R8 ã«ããæé©åãšãçžæ§ãè¯ããã¢ããªã®ãã€ããªãµã€ãºã®åæžã«ãç¹ãããŸãã å
·äœçãªä¿®æ£å
容 å®éã« Gson ãã Kotlin Serialization ãžç§»è¡ããã«ããããè¡ã£ãå
·äœçãªä¿®æ£å
容ãã玹ä»ããŸãã 1. Data Class ã®æžãæã Gson ã® @SerializedName ã¢ãããŒã·ã§ã³ããKotlin Serialization ã® @SerialName ã«å€æŽããã¯ã©ã¹ã« @Serializable ã¢ãããŒã·ã§ã³ãä»äžããŸãã ãåŸæ¥ã® Gson ã§ã®å®è£
ã data class UserResponse( @SerializedName ( "id" ) val id: Long , @SerializedName ( "user_name" ) val userName: String , @SerializedName ( "profile_image_url" ) val profileImageUrl: String ? ) ãæ°ãã Kotlin Serialization ã§ã®å®è£
ã @Serializable data class UserResponse( @SerialName ( "id" ) val id: Long , @SerialName ( "user_name" ) val userName: String , // ãµãŒããŒããããŒãéãããŠããªãå¯èœæ§ãããå Žåã¯ããã©ã«ãå€ãèšå® @SerialName ( "profile_image_url" ) val profileImageUrl: String ? = null , @SerialName ( "is_premium" ) val isPremium: Boolean = false ) 2. Retrofit ã® Converter ã®çœ®ãæã API éä¿¡ã« Retrofit ã䜿çšããŠãããããGson ã® ConverterFactory ã Kotlin Serialization çšã®ãã®ãžå·®ãæ¿ããŸããã ãã®éããµãŒããŒããã®ã¬ã¹ãã³ã¹ã«ãããŠãã¢ããªåŽã§å®çŸ©ããŠããªãæªç¥ã®ããŒãå«ãŸããŠããŠãããŒã¹ãšã©ãŒã«ãªããªãããã ignoreUnknownKeys = true ãèšå®ããŠããŸãã // Json ããŒãµãŒã®èšå® val json = Json { ignoreUnknownKeys = true // æªç¥ã®ããŒãç¡èŠãã coerceInputValues = true // null ãæ¥ãå Žåã«ããã©ã«ãå€ãããã°ãã©ãŒã«ããã¯ãã } val contentType = "application/json" .toMediaType() val retrofit = Retrofit.Builder() .baseUrl( "https://api.example.com/" ) // GsonConverterFactory.create() ããã®çœ®ãæã .addConverterFactory(json.asConverterFactory(contentType)) .build() äž»ã«ãããã®ä¿®æ£ããAPI ã¬ã¹ãã³ã¹ãåãåãå
šãŠã®ããŒã¿ã¯ã©ã¹ãš Retrofit ã¯ã©ã€ã¢ã³ãã«å¯ŸããŠé©çšããæ®µéçã«ç§»è¡ãé²ããŸããã ãŸãä»ã«ã com.google.gson.internal.bind.util.ISO8601Utils ãå©çšããŠããç®æãã JsonUtil ãšãã Android ã¢ããªåŽã§ Json ãæ±ãéã«äœ¿çšããã¯ã©ã¹ã®ä¿®æ£ãªã©ã现ããä¿®æ£ãè¡ããŸããã ç·å·®åãã¡ã€ã«æ°ã¯ããã 500 ãã¡ã€ã«ãšãå€§èŠæš¡ãªæ¹ä¿®ã«ãªããŸããã ãŸãšããšä»åŸã®èª²é¡ ä»åã®æ¹ä¿®ã§ JSON ããŒãµãŒã Kotlin Serialization ã«ç§»è¡ããããšã«ãããKotlin ã®èšèªä»æ§ã«æ²¿ã£ã峿 Œãªåå®å
šæ§ãæ
ä¿ãããŸããAndroid ã®ã³ãŒãããŒã¹äžã§ã®å
ç¢æ§ã¯å€§ããåäžããŸããã ããããã©ã€ãã©ãªãã峿 Œãã«ãªã£ãããããçŽé¢ããæ°ããªèª²é¡ããããŸãã ããã¯ã ãµãŒããŒããã®ã¬ã¹ãã³ã¹ä»æ§ïŒã¹ããŒãïŒã®æ£ç¢ºãªææ¡ ã§ãã Gson ã®æä»£ã¯ãJSON ã«ããŒããªããŠãããšãããã Null ãå
¥ããŠã¯ã©ãã·ã¥ãããªãããšããç·©ãããããŸããããããããããã¯ãé Null ããããã£ã®ããŒã JSON ã«ååšããªããã°ãå³åº§ã«ããŒã¹å€±æãšãªã£ãŠããŸããŸãã ãããé²ãããã«ã¯ã以äžã®ãããªå¯Ÿå¿ããµãŒãã¹å
šäœã§æèããŠããå¿
èŠããããŸãã ãµãŒããŒã¬ã¹ãã³ã¹ã§ Null ãè¿ãããŸãã¯ããŒãçç¥ãããå¯èœæ§ã®ãããã£ãŒã«ãã«ã¯ãé©å㪠Nullable å®çŸ©ãããã©ã«ãå€ãèšå®ãã ã¯ã©ãã·ã¥ãã°ãç£èŠããããŒã¹ãšã©ãŒãçºçããå Žåã¯è¿
éã«ããŒã¿ã¯ã©ã¹ã®å®çŸ©ããã¥ãŒãã³ã°ãã ãµãŒããŒãµã€ãã®ãšã³ãžãã¢ãšå¯ã«é£æºããAPI 仿§æžãšã¯ã©ã€ã¢ã³ãå®è£
ã®ä¹é¢ããªãã ããªãã·ã¥ãããã³ã¯æŽå²ã®ãããµãŒãã¹ã§ããããåå®å
šã« API ã¬ã¹ãã³ã¹ãããŒã¹ããã«ã¯ããã®èŸºãã®èŠçŽãã¯é¿ããŠéããŸããã æéãšæ ¹æ°ãããäœæ¥ã«ã¯ãªããŸãããåŸã
ã«ã§ãæŽåã§ããã°ãšæããŸãã ãããŸã Gson ãå©çšããŠããæ¹ã§ããããŒã¿ã¯ã©ã¹ã® Null å®å
šãæ
ä¿ã§ããã«å°ã£ãŠããããåå äžæã® NullPointerException ã«æ©ãŸãããŠããããšæããŠãããªããäžåºŠ JSON ããŒãµãŒã®ç§»è¡ãæ€èšããŠã¿ãŠã¯ãããã§ããããã ä»åŸããKotlin ã®å³æ Œãªåå®å
šæ§ãæŠåšã«ãããå質ãé«ãå®å®ãã ããªãã·ã¥ãããã³ ããŠãŒã¶ãŒã®çæ§ã«ãå±ãã§ãããããæ¹åãç¶ããŠãããŸãã
察象èªè
Copilot ã® Agent Mode ãæ¥åžžçã«äœ¿ã£ãŠãã人 ãããã°ã§ããšãããããšã©ãŒã貌ã£ãŠèããæ¢ãŸãã®äºº Copilot ãçå€ããªã³ãŒããèªã¿ã«è¡ã£ãŠæ¶èããçµéšããã人 Copilot ã®èšå®ãã¡ã€ã«ã®å
šäœåã¯ã GitHub Copilot ã®èšå®ãã¡ã€ã«5çš® ããåç
§ããŠãã ããã ãããã°èª¿æ»ããã£ããããå§ããŠãªãã ã©ãïŒéŸã¡ããã§ãã ãã°å ±åãæ¥ãŠããã€ãã¿ããã« Agent Mode ã®ãã£ããã«ããã®ãã°èª¿ã¹ãŠããšæããŸãããCopilot ããã¡ã€ã«ã次ã
èªã¿å§ããŠãåŸ
ã€ãé¢ä¿ãªããããªãã¡ã€ã«ãŸã§èªãã§ããè¿ã£ãŠããåæã¯çå€ãã ã£ãã ãéãããããããªãããšè¿œå ã§æç€ºãåºãããŸãèªã¿ã«è¡ãããŸãåŸ
ã€ã3ã¿ãŒã³çµã£ãŠãå
šç¶é²ãŸãªããçµå±èªåã§ãã°èªãã æ¹ãéãã£ãããããªãããšã粟床ãäžããããã«PlanãšãŒãžã§ã³ãã䜿ãæããããã§ããã©ããæç¶æãããããŠã ãã®äœéšãèŠãããã人ã¯å€ãããããªãããªãšæããŸãã ãªããããªãããšãããšãPlan ãšãŒãžã§ã³ããã³ãŒãããŒã¹ãåºç¯å²ã«æ¢çŽ¢ããããã§ããé¢ä¿ãªããã¡ã€ã«ãŸã§èªãã§ã³ã³ããã¹ããŠã£ã³ããŠãåãŸã£ãŠãåŸåããã«ç²ŸåºŠãèœã¡ãããæ
å ±ãè¶³ããªãããåºãæ¢ããâãç¡é§ãªæ
å ±ã§ã³ã³ããã¹ããåãŸããâã粟床ãèœã¡ããã®æªåŸªç°ã§ãã ãããCopilot ãæªãããããªããŠãæž¡ãæ¹ã®åé¡ ãªãã§ãããã ãããã©ããããã Copilot ã«æããåã« Issue.md ã1ææžã ãåé¡ã»ä»®èª¬ã»é¢é£ãã¹ãæŽçããŠããæž¡ãã ãã§ãæ¢çŽ¢ç¯å²ãçµãããŠåæããç確ã«ãªããŸãã ãã®èšäºã§ã¯ãIssue.md ãèµ·ç¹ã«ãã Copilot ãããã°ã¯ãŒã¯ãããŒãå®è·µããŒã¹ã§ç޹ä»ããŠãããŸãã ä»åã®å
容ã§ãã Issue.md ãå¹ã2ã€ã®çç±ïŒæèã®å€éšåãšãã¡ã€ã«èµ·ç¹ã®ã¢ã¯ã·ã§ã³ïŒ Issue.md ãèµ·ç¹ã«ãããããã°ã®4ã¹ããã ä»®æ³ã·ããªãªã§4ã¹ããããèµ°ãå®è·µäŸ 人éãããããš vs Copilot ã«ä»»ããããšã®åœ¹å²åæ
Issue.md ã§ãããã°ãå€ããçç±ãšãããŒã®å
šäœå Issue.md ãšã¯ ãã°çºçæã«ããããžã§ã¯ãã«ãŒãã«äžæçãªèª¿æ»ãã¡ã€ã«ïŒ Issue.md ïŒãäœããŸãã Copilot ã«æž¡ãåã«ã人éãå
ã«ã³ã³ããã¹ããæŽçãã ã®ããã€ã³ãã§ãã æžãã®ã¯3ã€ã ãã§ãã çºçããŠããåé¡ ïŒäœãèµ·ããŠããããåçŸæé ïŒ ä»®èª¬ ïŒèªåãªãã®åå äºæ³ïŒ é¢ä¿ãããã¡ã€ã«ã®ãã¹ ïŒCopilot ã®æ¢çŽ¢ç¯å²ãçµãïŒ ãã³ãã¬ãŒãã¯ãããªæãã§ãã # Issue: [ãã°ã®æŠèŠ] ## çºçããŠããåé¡ - çŸè±¡ïŒ[äœãèµ·ããŠããã] - åçŸæé ïŒ[ã©ããã£ããèµ·ããã] ## 仮説 - [èªåãªãã®åå äºæ³ãããããªããã°ãããããªããââãæªãããã§ãOK] ## é¢ä¿ãããã¡ã€ã« - `src/components/XXX.tsx` - `src/hooks/useXXX.ts` 3è¡ã»ãã¹2ã3åã§ååã§ãã30ç§ã§æžããéãã¡ããã©ããã§ãã ãã¡ããã詳ãããã°è©³ããã»ã©è¯ãã§ãïŒ ä»®èª¬ãæµ®ãã°ãªããšãã¯ãããããªããããããæªãããã ãã§ãæžããŠãã ãããå®ç§ãªä»®èª¬ãæžãã®ãç®çãããªããŠã æžãããšã§é ãæŽçãããã®ãæ¬è³ª ã§ãããåå ã¯ââãããããªãããšæžãããšããéçšã§ããããããããåçŸæ¡ä»¶ã£ãŠäœã ã£ããã¿ããã«æèãåãåºããããã ãã§ Copilot ãžã®æç€ºã®è³ªãå€ãããŸãã ãªããããå¹ãã å¹ãçç±ã¯2ã€ãããŸãã çç±1: æèã®å€éšå ãã£ããã«ããã®ãã°äœïŒããšæããã®ã¯ãæèãã¹ãããããŠãŸããIssue.md ãæžãéçšã§ãäœãèµ·ããŠãã®ãããã©ããæªããã®ãããèªåã®é ã§äžåºŠæŽçããããã®æŽçãããã ãã§ãCopilot ãžã®æç€ºã®è³ªãå€ãããŸãã ãæžãããšããç®çã§ãã£ãŠããå®ç§ãªããã¥ã¡ã³ããäœãããšããç®çãããªãã§ãã æçµçã« Issue.md ã«åå ãšå¯ŸçãŸã§ãŸãšãŸãã®ã§ãã¬ããŒããå¥éäœãå¿
èŠããªããæ¯ãè¿ããããããã§ãã çç±2: ãã¡ã€ã«èµ·ç¹ã§ Copilot ã®ã¢ã¯ã·ã§ã³ãå€ãã ãã£ããã§å£é 説æããã®ãšãMD ãã¡ã€ã«ãšããŠæž¡ãã®ã§ã¯ Copilot ã®æåãéããŸãã ãã£ããã§ããã®ãã°èª¿ã¹ãŠããšèšããšãPlan ãšãŒãžã§ã³ãã¯ããŸãã³ãŒãããŒã¹ãæ¢çŽ¢ããããããå§ããŸãããã¡ã€ã«ãšããŠæž¡ããšããã®ããã¥ã¡ã³ãã«æžããããã¹ãèªãããããå§ãŸãããã®åæã®éããã§ãããã§ãããã ãã¡ã€ã«ã«é¢é£ãã¹ãæžããŠãããšãCopilot ã¯ãã®ãã¹ããèªã¿å§ãããæ¢çŽ¢ç¯å²ãçµãããã®ã§ãã³ã³ããã¹ããŠã£ã³ããŠãç¡é§ã«æ¶è²»ããªããåŸåãŸã§ç²ŸåºŠãæç¶ããŸãã ãã®ã¯ãŒã¯ãããŒèªäœã¯æ±çšçã§ãClaude Code ã§ãåããã¿ãŒã³ã¯äœ¿ããŸãããã ãCopilot ã® Agent Mode 㯠Plan ãšãŒãžã§ã³ãããã¡ã€ã«æ¢çŽ¢ã®ç¯å²ãåºãåããããã¹ã³ãŒããçµã广ãç¹ã«å€§ããã§ãããã¡ããPlanãšãŒãžã§ã³ãã䜿ããªããã¿ãŒã³ã§ãèªã¿èŸŒãŸããããšã§ç²ŸåºŠãç¶ç¶ããŸãã Before/After: ãã£ããã§èã vs Issue.md ãæž¡ã å
·äœçã«ã©ãå€ããããæ¯èŒããŠã¿ãŸãã BeforeïŒãã£ããã§èãïŒ: ããªã: APIãªã¯ãšã¹ããå€éã«èµ°ã£ãŠããã°ã調ã¹ãŠ â Copilot ãã³ãŒãããŒã¹å
šäœãæ¢çŽ¢ â é¢ä¿ãªããã¡ã€ã«ãŸã§èªã â ã³ã³ããã¹ãå§è¿« â çå€ããªåæãè¿ã£ãŠãã AfterïŒIssue.md ãæž¡ãïŒ: ããªã: @Issue.md ãã®ããã¥ã¡ã³ããå
ã«èª¿æ»ã㊠â Copilot ã Issue.md ã«æžãããé¢é£ãã¹ããèªã¿å§ãã â åæããçãçµã£ãåæãè¿ã£ãŠãã åããã°ã®èª¿æ»ãªã®ã«ãåæã®ç²ŸåºŠãå
šç¶éããŸãããã®å·®ã¯ Issue.md ãããããªããã ãã§çãŸããŸãã ãããã°ãããŒã®å
šäœå Issue.md ãèµ·ç¹ã«ãããããã°ã¯ã4ã¹ãããã§é²ããŸãã ã¹ããã ããããš æ
åœ 1. Issue.md ãæžã åé¡ã»ä»®èª¬ã»é¢é£ãã¹ãæŽç 人é 2. Copilot ã«èª¿æ»ãäŸé Œ Issue.md ããšæž¡ããŠçãçµã£ãèª¿æ» Copilot 3. ä»®èª¬âæ€èšŒâãã£ãŒããã㯠人éãæ€èšŒãCopilot ãåæããç¹°ãè¿ã 人é + Copilot 4. ããªãçŽã£ããããç¢ºèª ä¿®æ£åŸã«åå ãèšèªåããŠæ¬¡ã«åãã 人é + Copilot 次ã®ã»ã¯ã·ã§ã³ã§ããã®ãããŒãä»®æ³ã·ããªãªã§å
·äœçã«èµ°ãããŠã¿ãŸãã å®è·µïŒä»®æ³ã·ããªãªã§4ã¹ããããèµ°ã ããããã¯ãå®éã®ãã°èª¿æ»ã»ãã·ã§ã³ïŒ33ã¿ãŒã³ïŒãå
ã«ãä»®æ³ã·ããªãªã«çœ®ãæããŠç޹ä»ããŠãããŸããã¯ãŒã¯ãããŒã®ãã¿ãŒã³ãäŒããããšãç®çãªã®ã§ããããžã§ã¯ãã®è©³çްã¯åºããŸããã ä»®æ³ã·ããªãª: API ãªã¯ãšã¹ãã®å€éçºç« ããã·ã¥ããŒãç»é¢ãéããšãåã API ãªã¯ãšã¹ãã3ã4åé£ãã§ããã DevTools ã®ãããã¯ãŒã¯ã¿ã ã§ç¢ºèªãããšãåããšã³ããã€ã³ããžã® GET ãªã¯ãšã¹ããéè€ããŠããããŠãŒã¶ãŒãããç»é¢ã®è¡šç€ºãé
ãããšå ±åããã£ãã ããã³ããšã³ãããããã§ããã useEffect ã®äŸåé
å ãã¹ã§åã API ãè€æ°åé£ã¶ãã€ã ã¹ããã1: Issue.md ãæžãïŒå顿ŽçïŒ ãã°å ±åãåãããããŸã Issue.md ãæžããŸãã # Issue: ããã·ã¥ããŒãã® API å€éãªã¯ãšã¹ã ## çºçããŠããåé¡ - ããã·ã¥ããŒãç»é¢ãéããšåã API ã3ã4åé£ã¶ - DevTools ã®ãããã¯ãŒã¯ã¿ãã§ GET /api/dashboard ãéè€ããŠããã®ãç¢ºèª - ãŠãŒã¶ãŒããã衚瀺ãé
ãããšå ±åãã ## 仮説 - useEffect ã®äŸåé
åã«äžèŠãªå€ãå
¥ã£ãŠããŠåå®è¡ãããŠããã®ã§ã¯ - ãŸãã¯ãã³ã³ããŒãã³ãã®ããŠã³ã/ã¢ã³ããŠã³ããç¹°ãè¿ãããŠããå¯èœæ§ ## é¢ä¿ãããã¡ã€ã« - `src/pages/Dashboard.tsx` - `src/hooks/useDashboardData.ts` - `src/components/DashboardWidgets.tsx` æžãã®ã«30ç§ãããããŸããããã€ã³ãã¯ã Copilot ã«æããåã«èªåã®é ã§äžåºŠæŽçããããš ã§ãããDevTools ã§èŠããã3ã4åé£ãã§ãããäŸåé
åãããŠã³ããæªããããŒãŒããã ãæžããŠãããšãCopilot ã®åæãå
šç¶éã£ãŠããŸãã ã¡ãªã¿ã«ããã¯ãšã³ãã®å Žåãåãã§ããé¢é£ãã¹ããµãŒãã¹å±€ã DB ã¢ã¯ã»ã¹å±€ã«ãªãã ãã§ãIssue.md ã®ãã©ãŒãããã¯ãã®ãŸãŸäœ¿ããŸãã è£ä»ããšããŠããã°ãã¡ã€ã«ãªã©ãäžãããšä»®èª¬ã®è³ªãæ€èšã®ç²ŸåºŠããã£ãšäžãããŸãã ã¹ããã2: Copilot ã«èª¿æ»ãäŸé Œãã Issue.md ããš Copilot ã«æž¡ããŸãã @Issue.md ãã®ããã¥ã¡ã³ããå
ã«èª¿æ»ããŠã é¢é£ãã¡ã€ã«ãèªãã§ãåé¡ã®åå åè£ãåæããŠã»ãããåæçµæã¯ Issue.md ã«è¿œèšããŠã Issue.md ã«ä»®èª¬ãšé¢é£ãã¹ãæžããŠããã®ã§ãCopilot ã¯ã³ãŒãããŒã¹å
šäœãæ¢çŽ¢ããã«çãçµã£ã調æ»ãå§ããŸãã Dashboard.tsx ãš useDashboardData.ts ãèªã¿èŸŒãã§ã useEffect ã®äŸåé
åã確èªããŠãåå åè£ãåæããŠãããã äœãæžããã«ããã®ãã°çŽããŠãã ãšãããã§å€§éã®ãã¡ã€ã«ãèªã¿ã«è¡ã£ãŠã³ã³ããã¹ããæº¢ããŸãã Issue.md ãã¹ã³ãŒãã®å¶çŽã«ãªã£ãŠãã ããã§ãã ããã§ãåæçµæã¯ Issue.md ã«è¿œèšããŠããšæç€ºããŠããã®ããã€ã³ãã§ããCopilot ã®åæçµæããã£ããã§åãåãããããªããŠãæåãã Issue.md ã«éçŽãããããããããšèª¿æ»ã®çµç·¯ããã¹ãŠ1ãã¡ã€ã«ã«ãŸãšãŸããŸãã Copilot ã Issue.md ã«è¿œèšããå
容ã¯ãããªã€ã¡ãŒãžã§ã: ## 調æ»çµæïŒCopilot 远èšïŒ - `useDashboardData.ts` ã® `useEffect` å
ã§ `fetchData()` ãåŒãã§ãã - äŸåé
åã« `filters` ãªããžã§ã¯ããå«ãŸããŠãã - `filters` ãæ¯åæ°ãããªããžã§ã¯ãåç
§ãçæããŠãããããã¬ã³ããªã³ã°ããšã« `useEffect` ãåå®è¡ - â API ãªã¯ãšã¹ããå€éã«çºçããŠããåå 仮説ã§ãäŸåé
åãæªããããšæžããŠããããããã§ãCopilot ããŸãã«ããã«ãã©ãŒã«ã¹ããŠèª¿æ»ããŠããããã¿ãŒã³ã§ããã ã¹ããã3: ä»®èª¬âæ€èšŒâãã£ãŒãããã¯ã®ãµã€ã¯ã« ãããã人éãš Copilot ã®ãã£ããããŒã«ãå§ãŸããŸããå®éã®ã»ãã·ã§ã³ã§ã¯äžçªã¿ãŒã³æ°ãå€ãã£ããã§ãŒãºã§ãã 人éã仮説ãæãã: filters ã®åç
§ãå€ãã£ãŠãã®ã¯åãã£ãã ããã£ãŠç¹å®ã®ãŠã£ãžã§ããã ãã®åé¡ïŒãããšãå
šäœã§èµ·ããŠãïŒ æåæ€èšŒããŠãçµæã Issue.md ã«è¿œèš: ããã倧äºãªãã€ã³ãã§ããæ€èšŒçµæããã£ããã«çŽæ¥æžãããããªããŠãIssue.md ã«è¿œèšã㊠Copilot ã«æž¡ãããããããš Copilot ã Issue.md ãèµ·ç¹ã«èªã¿çŽããŠãããã®ã§ã調æ»ã®ã³ã³ããã¹ããéåããŸããã ## æ€èšŒçµæïŒè¿œèšïŒ - DevTools ã§ç¢ºèªãå
šãŠã£ãžã§ããå
±éã§çºç - filters ãã³ã³ãœãŒã«ã§èŠããæ¯åæ°ãããªããžã§ã¯ããäœãããŠãã - useMemo ã§ã¡ã¢åããã°çŽãå¯èœæ§ãã ---copilotæç€º--- @Issue.md æ€èšŒçµæã远èšããããããèžãŸããŠåå ãšå¯ŸçãåæããŠãåæçµæã Issue.md ã«è¿œèšããŠã Copilot ãåæçµæã Issue.md ã«è¿œèš: Copilot ã®åæçµæããã£ããã§åãåãããããªããŠãIssue.md ã«æžãããŸãããããããšèª¿æ»ã®çµç·¯ããã¹ãŠ1ãã¡ã€ã«ã«ãŸãšãŸãã®ã§ãåŸããæ¯ãè¿ããããã ## åæçµæïŒCopilot 远èšïŒ - [`useMemo`](https://react.dev/reference/react/useMemo) ã§ `filters` ãã¡ã¢åããã®ãæ£æ»æ³ - ãã ã `DashboardWidgets.tsx` ã§ `filters` ã props ãšããŠæž¡ããŠããç®æã確èªãå¿
èŠ - ïŒã³ãŒãå·®åãæç€ºïŒ 人éãã¹ã³ãŒããçµã: ãµãŒããŒãµã€ããã£ãã·ã¥ã®è¿œå ã¯ä»åã¯äžèŠã ã¯ã©ã€ã¢ã³ãåŽã®å€éãªã¯ãšã¹ã鲿¢ã ãã§ããã ãã€ã³ãã¯ã人éãããããèŠãããããã¯å¯Ÿå¿äžèŠããèšãã ãã§ Copilot ã®ç¡é§ãªæ¢çŽ¢ãæ¿æžããããšã§ãããDevTools ã§ç¢ºèªããçµæã¯ããã ã£ãããå
šãŠã£ãžã§ããå
±éã ã£ãããšããã©ã³ã¿ã€ã ããŒã¿ã¯ Copilot ãèªåã§ã¯åããªãã人éãããŒã¿ãéããŠãCopilot ãåæããããã®åæ¥ãåããšèª¿æ»ãã¹ã ãŒãºã«é²ã¿ãŸãã åå ãç¹å®ã§ããããå¯Ÿå¿æ¹éãæ±ºããã®ã¯äººéã®ä»äºã§ãããuseMemo ã§ããããã«ã¹ã¿ã ããã¯ã«åãåºããã¿ããã«ã2ã3ãã¿ãŒã³ã®å®è£
æ¡ãåºãããŠæ¯èŒããã®ããå§ãã§ãã ã¹ããã4: ããªãçŽã£ãããã確èªãã ä¿®æ£ãé©çšããŠããªã¯ãšã¹ãã1åã«åãŸã£ãããšã確èªãããã§çµããã«ããã«ããã1ã¹ãããå
¥ããŸãã èªåã®çè§£ãåã£ãŠãã確èªãããã filters ãªããžã§ã¯ããæ¯åæ°ããåç
§ãçæããŠããã®ã§ã useEffect ã®äŸåé
åãã§ãã¯ã§ãå€ãã£ãããšå€å®ãããŠåå®è¡ãããŠããã useMemo ã§ã¡ã¢åããŠåç
§ãå®å®ãããããšã§ãäžèŠãªåå®è¡ããªããªã£ãã ãã®çè§£ã§åã£ãŠãïŒ èªåã®èšèã§åå ãèšèªåããŠæããŠãCopilot ã«è£è¶³ã»æŽçããŠããããŸãã ãã®ã¹ããããå
¥ããããšã§ãããªããšãªãçŽã£ããã§çµãããªããªããŸããïŒãŸãã«AIãèªåã®ããã«äœ¿ãã£ãŠãã§ãŒãºã§ãããïŒ ãä¿®æ£ããŠçµãããã«ããªãã®ã倧äºã§ããããªãçŽã£ããããèšèªåããããšã§ã次ã®é¡äŒŒãã°ã«åããããŸããã Copilot ãã£ããå±¥æŽãã Instructions ãš SKILL.md ãæ¹åãã3ã€ã®æ¹æ³ ãã§ç޹ä»ãã lessons ãã¹ãã¢ãŒãã ãšåãçºæ³ã§ããããã®ç解確èªã lessons ãã¡ã€ã«ã«æ®ããŠãããšãåããã¿ãŒã³ã®ãã°ã«äºåºŠããããªããªããŸãã 人éãããããš vs Copilot ã«ä»»ããããš ãããŸã§ã®å®è·µãèžãŸããŠã圹å²åæ
ãæŽçããŠãããŸãã33ã¿ãŒã³ã®ãããã°ã»ãã·ã§ã³ããæœåºããå®çžŸããŒã¹ã®åæ
ã§ãã 人éãããã¹ãããš ããããš å®è·µã§ã®äŸ åæããã¥ã¡ã³ãäœæ ã¹ããã1ã§ Issue.md ã«åé¡ã»ä»®èª¬ã»é¢é£ãã¹ãèšèŒ ã¹ã³ãŒãã®å¶é ããµãŒããŒãµã€ããã£ãã·ã¥ã¯äžèŠãã¯ã©ã€ã¢ã³ãåŽã ãã§ã æåæ€èšŒ DevTools ã§ãããã¯ãŒã¯ã¿ãã確èªãã³ã³ãœãŒã«ã§ filters ã®åç
§ãç¢ºèª ã©ã³ã¿ã€ã ããŒã¿ã®ååŸ HAR ãã¡ã€ã«ããããã¯ãŒã¯ãã°ããã©ãŠã¶äžã®å®è¡æããŒã¿ æ¹éæ±ºå® å¯Ÿçæ¡ã®éžæïŒuseMemo ã§ããïŒ Copilot ã«ä»»ããããš ããããš å®è·µã§ã®äŸ ããã¥ã¡ã³ããå
ã«ããã³ãŒãèª¿æ» ã¹ããã2ã§ Issue.md ã®é¢é£ãã¹ããã³ãŒããèªã¿èŸŒã¿ è€æ°ãã¡ã€ã«ã®äžæ¬èªã¿èŸŒã¿ Dashboard.tsxãuseDashboardData.tsãDashboardWidgets.tsx ãäžåºŠã«ç¢ºèª å¯Ÿçæ¡ã®è€æ°æç€ºã»æ¯èŒ useMemoãuseCallbackãã«ã¹ã¿ã ããã¯ãžã®åãåºããæ¯èŒæç€º ã³ãŒãå·®åã®çæ ä¿®æ£å/ä¿®æ£åŸã® diff ãåºå çè§£ã®è£è¶³ã»æŽç ã¹ããã4ã§äººéã®èšèªåãæ€èšŒã»è£è¶³ ç¹ã«éèŠãªã®ã¯ãAI ãååŸã§ããªãããŒã¿ã人éãè£å®ããããš ã§ãããã©ãŠã¶äžã®ã©ã³ã¿ã€ã ããŒã¿ãèªèšŒãå¿
èŠãª API ã¬ã¹ãã³ã¹ããããã¯ãŒã¯ãã°ãŒãŒããã㯠Copilot ãçŽæ¥ã¢ã¯ã»ã¹ã§ããŸããã人éãååŸã㊠Issue.md ã«è²Œãããšã§ãåã㊠Copilot ã®åæå¯Ÿè±¡ã«ãªããŸãã ã人éãããŒã¿ãéããŠãAI ãåæãããããã®åœ¹å²åæ
ãæèããã ãã§ããããã°ã»ãã·ã§ã³å
šäœã®å¹çãå€ãããŸãã ãŸãšãïŒIssue.md 1æã§å€ããããš ããšã©ãŒè²Œã£ãŠèããããIssue.md æžããŠæž¡ããã«å€ããã ãã§ãCopilot ã®åæç²ŸåºŠãäžãããŸãã 倧äºãªã®ã¯3ã€ã ãã§ãã åé¡ãæžã ïŒäœãèµ·ããŠãããïŒ ä»®èª¬ãæžã ïŒããããªããŠããããæžãããšããããšã倧äºïŒ é¢é£ãã¹ãæžã ïŒCopilot ã®æ¢çŽ¢ç¯å²ãçµãïŒ 30ç§ã§æžããéã§ååã§ããå®ç§ãªããã¥ã¡ã³ããäœãããšãç®çãããªããŠãèªåã®é ãæŽçã㊠Copilot ã«ç確ãªèµ·ç¹ãæž¡ãããšãç®çãªã®ã§ã 調æ»ãçµãã£ã Issue.md 㯠.gitignore ã«å
¥ãããåé€ããããéçšã¯å¥œã¿ã§æ§ããŸãããã³ãããã«æ®ããŠèª¿æ»çµç·¯ã远ããããã«ããæŽŸãããŸãããäžæãã¡ã€ã«ãšããŠäœ¿ãæšãŠã«ããæŽŸãããŸãã ãä¿®æ£ããŠçµãããã«ããªãããšã倧äºã§ããããªãçŽã£ããããŸã§ç¢ºèªããŠæ¬¡ã«æŽ»ãããIssue.md â lessons â copilot-instructions.md / SKILL.md ã®æµããåããšãåããã°ã«äºåºŠããããªããªã£ãŠãããŸãããã®æ¹åãµã€ã¯ã«ã®è©³çްã¯ã Copilot ãã£ããå±¥æŽãã Instructions ãš SKILL.md ãæ¹åãã3ã€ã®æ¹æ³ ãã§ç޹ä»ããŠããã®ã§ãåãããŠèŠãŠãããããšã ãŸãã¯æ¬¡ã®ãã°ã§ Issue.md ã1ææžããŠã¿ãŠãã ããã ã»ãªãŸãã ã芧ããã ãããããšãããããŸãïŒ ãã®æçš¿ã¯ã圹ã«ç«ã¡ãŸãããïŒ åœ¹ã«ç«ã£ã 圹ã«ç«ããªãã£ã 0人ããã®æçš¿ã¯åœ¹ã«ç«ã£ããšèšã£ãŠããŸãã The post GitHub Copilot ãããã°ã®ç²ŸåºŠãäžããã«ã¯ããã¥ã¡ã³ã1æãå
ã«æžã first appeared on SIOS Tech Lab .
ã¯ããã«   ããã«ã¡ã¯ïŒ2026幎2æã« CA Tech Job ã€ã³ã¿ãŒã³çãšããŠå°±æ¥ ...


















