0.9K Views
January 22, 26
スライド概要
Visual Studio の機能である「GitHub Copilot アプリの最新化」の説明と、実際に動かした様子を共有します。
.NET アプリのモダナイズを動かした結果のサマリーと評価を掲載しています。
.NET 8 ⇒ 10
.NET Stabdard ⇒ .NET
.NET Framework ⇒ .NET
BCL の File によるローカルファイル ⇒ Azure Files
また、今回動作を完了するまで5日間かかった闘いの記録を画像とともにかいつまんで共有します。
mishizaki
GitHub Copilot アプ リの最新化 【登壇者募集中】.NET Conf 2025 後! C# Tokyo カンファレンス 石崎 充良 1 / 76
自己紹介 石崎 充良 ( @mishi_cs ) C# Tokyo コミュニティ管理メンバー GitHub: https://github.com/m-ishizaki blog: https://rksoftware.hatenablog.com/ 2 / 76
目次 • GitHub Copilot アプリの最新化 とは? • 何ができる? • どうやって使う? • 結論 (総評) • 評価 (明細一覧) スライド全体の半分がここ • 検証題材 動作させている最中の様子の画像 • 戦いの記録(抜粋) 高速でページ送り予定 3 / 76
GitHub Copilot アプリの最新化 とは? 4 / 76
GitHub Copilot アプリの最新化 とは? https://learn.microsoft.com/ja-jp/dotnet/core/porting/github-copilot-app-modernization/how-to-upgrade-with-github-copilot 5 / 76
英語で見てみよう 日本語に翻訳してみた https://learn.microsoft.com/en-us/dotnet/core/porting/github-copilot-app-modernization/how-to-upgrade-with-github-copilot 6 / 76
平たく言うと ⚫GitHub Copilot を使用してアプリをアップグレードする機能 ⚫Visual Studio と IntelliJ で使えるらしい ⚫.NET、.NET Framework、Java、(Python)で作られたアプリ をアップグレードできるらしい Python は GA していない? 7 / 76
動かしてみた (1/3) インターフェイスは チャット(Agent モード?) プランをもとにチェッ クリスト形式でタスク を作成してくれる (実ファイル) ソリューションを見て プランをmarkdownで 作成してくれる (実ファイル) 8 / 76
動かしてみた (2/3) タスク定義ファイルを更新しながら コードの変更してくれる 9 / 76
動かしてみた (3/3) コード更新 コマンドの実行 もしてくれる コマンド実行 コード更新 10 / 76
こんな感じ ローカル フォルダ 最新化作業 フォルダ Visual Studio GitHub Copilot 最新化指示 随時 確認 作成 assessment.md 作成 plan.md ソースコード フォルダ 作成 コマンド ツール 随時 実行 tasks.md ファイル ソース 更新 コード 11 / 76
実ファイルも、いいものですね 今回何度もエラーになった が ⚫ エラーで進めなくなって新規セッションにする場合もタスクを再開できる ⚫ 途中から他者が引き継ぐとこもできる 12 / 76
何ができる? 13 / 76
定義済みのタスク? Azure については次ページ https://learn.microsoft.com/ja-jp/dotnet/core/porting/github-copilot-app-modernization/overview 14 / 76
Azure ⚫Azure SQL DB、Azure SQL MI、Azure PostgreSQL など、Azure 上のマネージド ID ベースのデータベー スに移行する ⚫Azure File Storage への移行 ⚫Azure Blob Storage への移行 ⚫Microsoft Entra ID に移行する ⚫マネージド ID と Azure Key Vault を使用してセ キュリティで保護された資格情報に移行する ⚫Azure Service Bus への移行 ⚫Azure Communication Service メールに移行する ⚫Confluent Cloud/Azure Event Hub for Apache Kafka への移行 ⚫Azure で OpenTelemetry に移行する ⚫Azure Cache for Redis への移行 https://learn.microsoft.com/ja-jp/dotnet/azure/migration/appmod/predefined-tasks 15 / 76
どうやって使う? 16 / 76
使い方はとても簡単 ソリューション エクスプローラー > 右クリック > [ 最新化 ] 17 / 76
チャット欄で選択・チャットで指示 多くの場合、 文末に選択肢が示され、 プロンプトに選択を書く 選択肢がでる 場合 ここをクリックしてもいいし、 別のプロンプトしてもいい チャット応答 で選択肢が示 される場合 18 / 76
コード変更 コードが書き換え られる 必要に応じコマンドも実行・ 実行結果も見てくれる タスク定義ファイルに進捗を しながら進めてくれる 19 / 76
最後は気持ちよく終わらない? タスクは最後まで 行ったが まだできることがあって、 やってくれようとしている 20 / 76
結論 (総評) 21 / 76
最初に一つお伝えすること 動作記録として、ステップ(≒ 要ユーザー操作)ごとにとって いた画像の数 167 枚! 動かしきるのに 5 日! 検証題材が相性良くなかった可 能性あり 22 / 76
結論 (総評) ⚫ライブラリの更新/変更での変更先のライブラリの選択 ※ Azure File Strage に変更する場合に File クラスを Azure.Storage.Files.Shares に ⚫ライブラリの更新/変更の改修結果のコード ⚫.NET 8 ⇒ .NET 10 への *.csproj / global.json の書き換え ⚫テストも(あれば)やり切ってくれる ⚫時間がかかりすぎる (今回動かしきるまで 5 日間……) ⚫たまにエラーで止まる (ソリューションが多く複雑すぎたか……) ⚫.NET Framework の ASP.NET ⇒ .NET の ASP.NET はうまくいかなかった ⚫ライブラリ更新時のコード変更がやりきれない場合も 23 / 76
評価 ⚫目的達成に「何をすればよいか」が想像できていない場合の分析・計画にとても良い ⚫既存コードが標準ライブラリのクラスをべた書きで使用時の変更場所の抽出も良い ⚫*.csproj の書き換えやライブラリの書き換えは手でやってしまった方が、今はまだ圧倒 的に早い ※ライブラリを変更して、エラーを手で取っていくなど ⚫ある程度知識のある人が、DI (Dependency injection・依存性注入) されたコードで はまだそれほど活躍しない 24 / 76
評価 (明細一覧) 25 / 76
評価 (明細) ※雰囲気です 合計10 内容 補足 ウェイト Global.json の SDK バージョン書き換え .NET 8 ⇒ .NET 10 に書き換え (存在を見落としがちの ため、ウェイト大) 1.0 5.0 -20.0 -15.0 *.csproj のターゲットフレームワーク書き 換え .NET 8 ⇒ .NET 10 に書き換え (手でも簡単なため小) 0.2 5.0 -40.0 -7.0 バージョンアップすべきライブラリの抽出 ライブラリの抽出のみ(調査が必要なため大) 1.0 5.0 2.0 7.0 最新化に伴い不要になるライブラリの抽出 ValueTask など(地味に面倒、中) 1.0 5.0 2.0 7.0 最新化に伴い変更すべきライブラリの抽出 System.Data.SqlClient ⇒Microsoft.Data.SqlClient に変 更(手でもやりやすい、小) 0.5 5.0 5.0 5.0 最新化に伴い追加すべきライブラリの抽出 SixLabors.ImageSharp など(調査が必要なため大) 1.0 5.0 5.0 10.0 *.csprojの参照ライブラリ書き換え *.csprojの書き換え(手でも簡単、小) 0.2 5.0 0.0 1.0 *.csproj の形式更新 (デスクトップアプ リ) .NET Frameworkプロジェクト⇒.NETプロジェクト(手 でもやりやすい、小) 0.2 5.0 0.0 1.0 *.csproj の形式更新 (ASP.NET) .NET Frameworkプロジェクト⇒.NETプロジェクト(手 でもやりやすい、小) 0.2 0.0 0.0 0.0 ASP.NET の最新化 NET Framework⇒.NET (非常に困難、大) 2.5 0.0 0.0 0.0 ライブラリ変更に伴うコード変更 (1) System.Data.SqlClient ⇒Microsoft.Data.SqlClient に変 更 (手でも簡単、小) 0.2 1.0 3.0 0.8 ライブラリ変更に伴うコード変更 (2) SixLabors.ImageSharp、Azure.Storage.Files.Shares な ど(出ては困難、大) 2.0 5.0 5.0 20.0 5点評価 品質 時間 合計 !注意! 今回の検証題材が、生成 AI と相性の悪いコードの可能性高 点数 29.8 26 / 76
赤枠をウマくやってくれるのは、とても良い 内容 補足 Global.json の SDK バージョン書き換え .NET 8 ⇒ .NET 10 に書き換え (存在を見落としがちの ため、ウェイト大) 1.0 5.0 -20.0 -15.0 *.csproj のターゲットフレームワーク書き 換え .NET 8 ⇒ .NET 10 に書き換え (手でも簡単なため小) 0.2 5.0 -40.0 -7.0 バージョンアップすべきライブラリの抽出 ライブラリの抽出のみ(調査が必要なため大) 1.0 5.0 2.0 7.0 最新化に伴い不要になるライブラリの抽出 ValueTask など(地味に面倒、中) 1.0 5.0 2.0 7.0 最新化に伴い変更すべきライブラリの抽出 System.Data.SqlClient ⇒Microsoft.Data.SqlClient に変 更(手でもやりやすい、小) 0.5 5.0 5.0 5.0 最新化に伴い追加すべきライブラリの抽出 SixLabors.ImageSharp など(調査が必要なため大) 1.0 5.0 5.0 10.0 *.csprojの参照ライブラリ書き換え *.csprojの書き換え(手でも簡単、小) 0.2 5.0 0.0 1.0 *.csproj の形式更新 (デスクトップアプ リ) .NET Frameworkプロジェクト⇒.NETプロジェクト(手 でもやりやすい、小) 0.2 5.0 0.0 1.0 *.csproj の形式更新 (ASP.NET) .NET Frameworkプロジェクト⇒.NETプロジェクト(手 でもやりやすい、小) 0.2 0.0 0.0 0.0 ASP.NET の最新化 NET Framework⇒.NET (非常に困難、大) 2.5 0.0 0.0 0.0 ライブラリ変更に伴うコード変更 (1) System.Data.SqlClient ⇒Microsoft.Data.SqlClient に変 更 (手でも簡単、小) 0.2 1.0 3.0 0.8 ライブラリ変更に伴うコード変更 (2) SixLabors.ImageSharp、Azure.Storage.Files.Shares な ど(出ては困難、大) 2.0 5.0 5.0 20.0 合計 ウェイト 品質 時間 点数 29.8 27 / 76
検証題材 28 / 76
巨大な .NET ソースコード 簡単すぎては面白くない 大きなコードが必要 ビルドが簡単(Clone して何回かの操作でビルド可能) https://github.com/pleasanter-developer-community/Implem.Pleasanter 29 / 76
AGPL 3.0 https://github.com/pleasanter-developer-community/Implem.Pleasanter/blob/main/LICENSE 30 / 76
多彩なプロジェクト https://github.com/pleasanter-developercommunity/Implem.Pleasanter/commits/main/?before=575e3d58851cd1e225e2c5970e9d3510cbe65587+595 31 / 76
ファイル数 7,262 ファイル 32 / 76
過去バージョンに .NET 過渡期の多彩なアプリ .NET Standard ライブラリ 群 .NET の ASP.NET Core アプリ .NET Framework の ASP.NET アプリ .NET Framework の Windows アプリ https://github.com/pleasanter-developer-community/Implem.Pleasanter/tree/95847dbeee3cd7817bca0659d64b048c0053d437 33 / 76
実施内容 次の 3 パターンを実施 1. .NET の最新化 (.NET 8.0⇒.NET 10.0)およびライブラリ のセキュリティ更新 2. .NET Framework ⇒ .NET および .NET 2.2 ⇒ .NET 10 3. .ストレージをローカルファイル⇒Azure Files 今回の動作結果はこちらに次にPushしています https://github.com/m-ishizaki/Fork_Implem.Pleasanter/tree/github-copilot-app-modernization 34 / 76
戦いの記録(抜粋) 35 / 76
最新化 36 / 76
最新化のメニュー 37 / 76
使用するモデルの変更 38 / 76
メニューを選ぶと、プロンプトに張り付くだけ 39 / 76
.NET のアップグレード専用ワークフロー? 40 / 76
分析 – 計画 – 実行 41 / 76
分析 (markdown ファイル作成) 42 / 76
やることについて問い合わせしてくる 43 / 76
ソースを分析して必要なライブラリを教えてくれる (更新もしてくれる) 44 / 76
分析結果表示 専用 UI の場合あり 45 / 76
続き 46 / 76
続き 47 / 76
計画 (markdown ファイル作成) 48 / 76
作成されたファイルは更新されることも 49 / 76
タスク (markdown 作成) 50 / 76
タスクに を付けながら実行 51 / 76
必要に応じコマンドも実行 52 / 76
global.json の変更が必要と見つけたり 53 / 76
コマンドの実行を常に許可 54 / 76
global.json を更新してコマンドをやり直したり 55 / 76
テストも実行してくれる 56 / 76
改修後はコミットまで !ローカルリポジトリなしで試した のでエラーになっている 57 / 76
改修結果 58 / 76
バージョンやライブラリ変更 59 / 76
大量のビルドエラー 60 / 76
ちょっと足りなかった (筆者があきらめたから?) 61 / 76
割と出るエラー 62 / 76
ソリューションを開きなおしてもダメ 63 / 76
Copilot Chat を一度閉じてセッション再開 64 / 76
もう一度初めから 以前作成の markdown が残っている 65 / 76
Visual Studio がエラーを検知 66 / 76
失敗しても、いろいろ考えて頑張る 67 / 76
リクエスト消費しすぎ 以降、有償にして進行 68 / 76
ファイル更新と Visual Studio の認識 69 / 76
再読み込みパターン 70 / 76
画像ライブラリの変更 コードもちゃんと改修 71 / 76
Azure Files を使うように改修 きちんとインターフェイス切って ローカルストレージとの差し替えに 72 / 76
使うところも改修 独特のコードスタイルも踏襲 珍しいコードスタイルでも きちんと踏襲 73 / 76
Service クラス使用にコード改修 74 / 76
まとめ 75 / 76
まとめ ⚫目的達成に「何をすればよいか」が想像できていない場合の分析・計画にとても良い ⚫既存コードが標準ライブラリのクラスをべた書きで使用時の変更場所の抽出も良い ⚫*.csproj の書き換えやライブラリの書き換えは手でやってしまった方が、今はまだ圧倒 的に早い ※ライブラリを変更して、エラーを手で取っていくなど ⚫ある程度知識のある人が、DI (Dependency injection・依存性注入) されたコードで はまだそれほど活躍しない 76 / 76
ありがとうございました。 【登壇者募集中】.NET Conf 2025 後! C# Tokyo カンファレンス 石崎 充良 77 / 76