TECH PLAY

サヌバヌサむド

むベント

マガゞン

技術ブログ

はじめに 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 むンタヌン生ずしお就業 ...

動画

曞籍