Visual Studio+GitHub Desktopで新しいファイルを追加したときの注意点
Visual StudioでWindowsフォームアプリを作成し、GitHub DesktopでGit管理しているとき、
「変更したファイルを保存して、そのファイルをコミットすればよい」
と考えがちです。
既存のC#ファイルを少し修正しただけなら、基本的にはそれでも問題ありません。
しかし、新しいクラスやフォームなどを追加した場合は注意が必要です。
大切なのは、
自分が編集したファイルだけを見るのではなく、その作業によってVisual Studioが変更・追加したファイル全体を確認してコミットする
という考え方です。
- 1. 既存ファイルを変更した場合
- 2. 新しいファイルを追加した場合はどうなる?
- 3. 「すべて保存」をしてからGitHub Desktopを確認する
- 4. GitHub DesktopのChangesを必ず確認する
- 5. .NET Frameworkでは特に重要
- 6. 現在の.NETでは少し仕組みが違う
- 7. それでもChangesを全部確認する習慣が大切
- 8. Windowsフォームを追加するとさらに注意
- 9. Designer.csは自分で書いていなくても必要
- 10. よくある失敗
- 11. Gitは「Visual Studioのプロジェクト」を理解しているわけではない
- 12. コミット前のおすすめ手順
- 13. 「全部コミットすればよい」ではない
- 14. チーム開発では特に重要
- 15. 初学者におすすめの確認方法
- 16. 覚えておきたい考え方
- 17. まとめ
既存ファイルを変更した場合
例えば、すでに存在している Player.cs を変更したとします。
public class Player
{
public string Name { get; set; }
public void ShowName()
{
Console.WriteLine(Name);
}
}
このファイルを変更した場合は、
- Visual Studioで保存する
- GitHub Desktopを開く
Changesを確認するPlayer.csの変更内容を確認する- コミットする
- Pushする
という流れになります。
比較的分かりやすいケースです。
新しいファイルを追加した場合はどうなる?
今度はVisual Studioで、
Player.cs
という新しいクラスを追加したとします。
この場合、
「Player.csを保存したから、Player.csだけコミットすればよい」
と考えるのは少し危険です。
Visual Studioでは、操作内容によっては新しいファイル以外のファイルも変更されることがあります。
例えば、
Player.cs
SampleApp.csproj
のように、プロジェクトファイルも変更される場合があります。
そのため、
新しく追加したファイルだけを見るのではなく、GitHub DesktopのChangesに何が表示されているか確認する
ことが重要です。
「すべて保存」をしてからGitHub Desktopを確認する
Visual Studioでは、編集したファイルだけでなく、プロジェクトに関係する情報が変更される場合があります。
そのため、Gitへコミットする前には、
[ファイル]→[すべて保存]
または、
Ctrl + Shift + S
などを使って、Visual Studio側の変更を保存しておくと安全です。
そのうえでGitHub Desktopを開きます。
ここで重要なのは、
「どのファイルを保存したか」ではなく、「この作業によって何が変更されたか」
を見ることです。
GitHub DesktopのChangesを必ず確認する
例えば、新しいクラスを追加したあとにGitHub Desktopを見ると、
Changes
✓ Player.cs
✓ SampleApp.csproj
のように複数の変更が表示されることがあります。
この場合、
Player.cs
だけをコミットするのではなく、
Player.cs
SampleApp.csproj
の両方が今回の作業に必要な変更なのか確認します。
必要な変更であれば、一緒にコミットします。
.NET Frameworkでは特に重要
従来の.NET Framework形式のプロジェクトでは、C#ファイルがプロジェクトファイル .csproj に明示的に登録されています。
例えば、
<ItemGroup>
<Compile Include="Player.cs" />
</ItemGroup>
のような情報です。
そのため、
Player.cs
だけをGitへ登録して、
SampleApp.csproj
の変更をコミットし忘れると、
他のメンバーがPullしたときに、
Player.csはフォルダに存在する
↓
しかしプロジェクトに正しく登録されていない
↓
Visual Studioのソリューションエクスプローラーで
期待した状態にならない
という問題が起こる可能性があります。
.NET Frameworkなどの非SDK形式では、ソースファイルをプロジェクトファイル内に明示的に列挙する仕組みになっています。 (Microsoft Learn)
現在の.NETでは少し仕組みが違う
ここは重要です。
.NET 8、.NET 9、.NET 10など、現在のSDK形式の.NETプロジェクトでは、通常、
<Compile Include="Player.cs" />
のように1ファイルずつ .csproj に登録する必要はありません。
.NET SDKでは基本的に、
**/*.cs
というルールによって、プロジェクトフォルダ以下のC#ファイルを自動的にコンパイル対象にします。 (Microsoft Learn)
例えば、
SampleApp
├─ Form1.cs
├─ Program.cs
└─ Player.cs
となっていれば、通常は Player.cs も自動的にプロジェクトへ含まれます。
そのため現在の.NETでは、
新しいC#ファイルを追加したら必ず .csproj が変更される
とは限りません。
ここは.NET Frameworkとの大きな違いです。
それでもChangesを全部確認する習慣が大切
「現在の.NETなら .csproj を気にしなくてよい」
という意味ではありません。
例えば、
- NuGetパッケージを追加した
- プロジェクト参照を追加した
- ビルド設定を変更した
- ファイルのビルドアクションを変更した
- リソースを追加した
といった操作では、.csproj が変更されることがあります。
つまり、環境によって、
Player.csだけ
の場合もあれば、
Player.cs
SampleApp.csproj
になる場合もあります。
だからこそ、
どのファイルをコミットするかを最初から決めつけない
ことが重要です。
Windowsフォームを追加するとさらに注意
Windowsフォームでは、さらに分かりやすい例があります。
Visual Studioで、
Form2
という新しいフォームを追加すると、実際には複数のファイルで構成されます。
例えば、
Form2.cs
Form2.Designer.cs
Form2.resx
です。
MicrosoftのWindows Formsドキュメントでも、フォームは基本的に .cs と .Designer.cs、必要に応じて .resx によって構成されることが説明されています。 (Microsoft Learn)
そのため、
「私はForm2.csしか書いていないから、Form2.csだけコミットする」
としてしまうと、必要なファイルをGitに登録し忘れる可能性があります。
Designer.csは自分で書いていなくても必要
例えばフォームデザイナーでボタンを1個配置すると、Visual Studioが自動的に、
private System.Windows.Forms.Button button1;
などのコードを Form2.Designer.cs に生成します。
自分で直接編集していなくても、
Form2.Designer.cs
はそのフォームを構成する重要なファイルです。
同じように、
Form2.resx
にもフォームで使用するリソースなどの情報が保存されることがあります。
つまり、
「自分が書いたファイル」=「Gitに必要なファイル」ではありません。
よくある失敗
例えばAさんが新しいフォームを追加したとします。
GitHub Desktopには、
Form2.cs
Form2.Designer.cs
Form2.resx
が表示されました。
ところがAさんが、
Form2.cs
だけにチェックを付けてコミット・Pushしたとします。
BさんがPullすると、
Form2.cs
しか受け取れません。
Aさんのパソコンでは正常に動いていたのに、
Bさんの環境ではフォームが正しく表示されない
ビルドエラーになる
デザイナーが開けない
といった問題につながる可能性があります。
Gitが壊れているわけではありません。
Gitは、
コミットされたものを正確に受け取っているだけ
です。
必要なファイルが最初からコミットされていなければ、Pullしても受け取ることはできません。
Gitは「Visual Studioのプロジェクト」を理解しているわけではない
ここも大切なポイントです。
Gitは、
これはWindowsフォームだから、
Designer.csも必要だろう
などとは判断してくれません。
Gitが管理しているのは基本的に、
どのファイルが追加されたか
どのファイルが変更されたか
どのファイルが削除されたか
という情報です。
そのため、
Form2.csだけコミット
すれば、GitHubに送られるのも基本的にはその変更だけです。
GitHub Desktopも、
「このファイルも必要ですよ」
とVisual Studioの設計意図まで理解して自動判断してくれるわけではありません。
コミット前のおすすめ手順
Visual Studio+GitHub Desktopでは、次の流れを習慣にすると安全です。
① Visual Studioで作業する
クラス追加、フォーム追加、コード修正などを行います。
② Visual Studioですべて保存する
すべて保存
を実行します。
③ GitHub Desktopを開く
Changes を確認します。
④ Changesに表示されたファイルを見る
例えば、
Player.cs
Form1.cs
Form1.Designer.cs
SampleApp.csproj
などが表示されていたら、
「なぜこのファイルが変更されたのか」
を考えます。
⑤ 今回の作業に必要な変更をまとめてコミットする
例えば、
プレイヤークラスを追加
という作業で発生した変更なら、その作業に必要なファイルをまとめます。
⑥ Pushする
コミットしただけではGitHubには送られていません。
最後に、
Push origin
します。
「全部コミットすればよい」ではない
ここで注意したいのが、
Changesに出ているものは何でも全部コミットすればよい
という意味ではないことです。
例えば、
Player.cs
Form1.cs
を変更したあと、
まったく関係のない、
Test.cs
も途中で編集していた場合、
すべてを1つのコミットにまとめると、変更内容が分かりにくくなります。
理想は、
1つの目的に必要な変更を1つのコミットにまとめる
ことです。
例えば、
プレイヤークラスを追加
というコミットなら、その機能追加に必要な変更をまとめます。
チーム開発では特に重要
1人で開発していると、
「自分のパソコンでは動いているから大丈夫」
となりがちです。
しかしチーム開発では、
Aさん
Visual Studioで作業
↓
Commit
↓
Push
↓
GitHub
↓
Pull
↓
Bさん
Visual Studioで開く
という流れになります。
Bさんのパソコンには、
AさんがコミットしてPushしたものしか届きません。
Aさんのパソコンにだけ存在するファイルは届きません。
そのため、コミット前のChanges確認は非常に重要です。
初学者におすすめの確認方法
GitHub DesktopでCommitする前に、次の3つを確認してみましょう。
① 追加したはずのファイルがChangesにあるか
② Visual Studioが自動生成した関連ファイルもあるか
③ 今回の作業に関係する変更がそろっているか
特に新しいフォームを作った場合は、
.cs
.Designer.cs
.resx
などを確認します。
.NET Framework形式なら、
.csproj
の変更も確認しましょう。
覚えておきたい考え方
Gitを使い始めたばかりのときは、
「編集したファイルをコミットする」
と考えがちです。
しかし実際の開発では、
「今回の作業で発生した変更をコミットする」
と考える方が適切です。
例えば「商品登録フォームを追加する」という作業なら、
ProductForm.cs
ProductForm.Designer.cs
ProductForm.resx
必要なら .csproj
関連して変更したコード
まで含めて、
商品登録フォームを追加するために必要な変更一式
が1つのコミットになります。
まとめ
Visual Studio+GitHub DesktopでGit管理するとき、
既存ファイルを少し編集しただけなら、そのファイルの変更だけで済むこともあります。
しかし、
- 新しいクラスを追加した
- 新しいフォームを追加した
- ファイルを削除した
- ファイル名を変更した
- NuGetパッケージを追加した
- プロジェクト設定を変更した
といった場合は、複数のファイルが変更される可能性があります。
そのため、
Visual Studioですべて保存 → GitHub DesktopのChangesを確認 → 今回の作業に必要な変更一式をCommit → Push
という流れを習慣にしましょう。
特に覚えておきたいのは、
「自分が書いたファイル」ではなく、「今回の作業で必要になった変更」をコミットする。
という考え方です。
これができるようになると、
「自分のパソコンでは動くのに、他の人がPullすると動かない」
というチーム開発でありがちなトラブルを大幅に減らすことができます。
今回の記事は、GitHub Desktopを使ったチーム開発シリーズの「コミット前の確認」記事としてかなり相性がいい内容です。既存の記事の途中に挟むなら、「新しいファイルを追加した直後〜コミットする前」の位置に入れるのが自然です。









ディスカッション
コメント一覧
まだ、コメントがありません