C#入門編

C#入門編 Visual Studioでビルド時の「エラー・警告・メッセージ」の違いと対策!【初心者向け】

今回はプログラミング初心者が必ず直面する以下のような「ビルド時の診断メッセージ」について解説します。エラー、警告、メッセージの3種類がありますね。

Visual Studioでは以下のように診断メッセージが表示されますね。

この記事では以下について説明します。

  • Visual Studioでアプリ開発をするときのエラー種類の概要
  • ビルド時の診断メッセージの種類と例
  • 診断メッセージごとの対策方針

以下のような方に役立つ内容となっています。

  • C#プログラミングを始めたばかりの方
  • Visual Studioでビルドエラーに悩まされている方
  • 「警告」や「メッセージ」の意味や対応方法がいまいちわからない方
プロ太

実は「メッセージ」は、C#のモダンな書き方の学習方法として、とても有用なのです!

YouTubeの動画は以下です。

アプリ開発をするときのエラーの種類

プログラムを開発する際、大きく分けて(A),(B),(C)3種類のエラーがあります

  • (A)ビルドエラー(コンパイルエラー):プログラムをビルド(コンパイル)する段階で発生するエラー。
  • (B)実行時エラー:プログラムの実行中に発生するエラー
  • (C)論理エラー:プログラムは動くが、期待した結果にならない

この記事では、ビルド段階で発生する「(A)ビルドエラー」を含めた「診断メッセージ」に焦点を当てて解説します。

プロ太

問題が起こりにくく、保守性が高い「より良いコード」にしていくため、「警告」、「メッセージ」の扱いも重要です。

診断メッセージに適切に対応することでコードの品質が向上し、結果的に実行時エラー・論理エラーを減らすことにも繋がるでしょう。

ビルドエラー・実行時エラー・論理エラーの全体像や具体例を交えた解消方法は以下で解説しているので、参考にしてください。

C#入門編(6)エラーの種類とデバッグ方法 ~初心者が最低限覚えておきたいポイント~ 今回は、初心者がプログラミングをするときに、つまづきやすいエラーについての話をします。 プログラミングをしていると、確実にエラー...

ビルド時診断メッセージの種類

Visual Studioでビルドをしたとき、3種類の診断メッセージが表示されることがあります。

  • (1)エラー:修正しないとビルドができない
  • (2)警告:ビルドはできるが、将来問題を引き起こす可能性あり
  • (3)メッセージ:参考情報として表示される、特に問題がない内容
プロ太

ざっくり言うと、(1)は絶対に対応が必要、(2)は必要に応じて(でもなるべくやったほうがよい)というイメージです!

(1)エラー

C#コンパイラが理解できないコードがある状態です。赤色のアイコンと共に表示されます。 必ず修正しないとビルドできません。

以下が具体例です。

// 例1: 変数名の誤り
int number = 10;
Console.WriteLine(numer); // 「numer」は存在しない変数

// 例2: セミコロンの欠落
int value = 5
Console.WriteLine(value);

// 例3: メソッド名の誤り
Console.WritLine("Hello"); // 正しくは WriteLine

次のようにエラーが表示されます。

(2)警告

とりあえずビルドできますが、潜在的な問題がある状態です。黄色のアイコンと共に表示されます。修正することが奨励されます。

以下が具体例です。

// 例1: 使われていない変数
int unusedVariable = 10; // この変数は宣言されているが使われていない

// 例2: nullの可能性がある参照
string? line = Console.ReadLine(); // nullの可能性がある
Console.WriteLine(line.Length); // lineがnullの可能性がある

// 例3: 到達不能コード
return;
Console.WriteLine("This will never be executed"); // returnの後なので実行されない

次のように警告が表示されます。

例1,3は使用されない変数・絶対に実行されないコードであり、このようなものがあると混乱を招き、可読性が低下します。

また、例2はlineがnullの場合に以下のような実行時エラーを引き起こす可能性があります。

プロ美

ただちには問題にならないけど、後々問題になるかもしれないから、修正したほうがよいってことだね!

(3)メッセージ

エラーでも警告でもなく、参考情報として表示されるメッセージです。青色のアイコンと共に表示されます。 知識として知っておくと良い内容です。

以下が具体例です。

class Cat
{
    private readonly string name;
    public Cat(string name) //メッセージ: プライマリコンストラクタでより簡潔に書ける
    {
        this.name = name;
    }
}

次のメッセージが表示されます。

プロ美

「知っておいたほうがよい」ってどういう意味なの?

プロ太

より簡潔に書ける方法・C#的によりよい作法などをアドバイスしてくれているって感じですね。

参考にして修正すると、C#プログラミングにおける新しい記法や使い方など勉強になりますし、よりモダンな書き方になるでしょう。

診断メッセージごとの対策

(1)エラーへの対策

基本的なアプローチは以下になります。

  • エラーメッセージを確認:エラーメッセージで「何が」「どこで」問題なのかを確認する。
  • 問題のある行を特定:エラー一覧の項目をダブルクリックすると、問題のある行にジャンプする。
  • コードを修正:エラー内容に応じて修正する。
  • 一度に1つずつ対処:複数のエラーがある場合は、最初のエラーから順に対処する。
プロ美

コードを修正してたら急にエラーが数十個でてきて焦ったことも。

プロ太

特に括弧「()」や中括弧「{}」の対応に注意しましょう!連鎖的(?)にたくさんエラーが表示されることがあります。

あわてず、1つずつ対処しましょう。1つ修正すると他のエラーも解消されることもあります。

(2)警告への対策

基本的なアプローチ(理想的なアプローチ)は以下になります。

  • 警告の内容を理解:何が潜在的な問題なのかを把握する。
  • リスクを評価:この警告を無視した場合、どのような問題が発生する可能性があるか考えます。
  • コードを修正:警告内容に応じて修正します。
  • 意図的に無視する場合は注釈:コメントで警告を無視する理由をつける。
    (もしくは部分的に警告を抑制する方法もある)

理想的にはこのようにすべての警告へ対応できる良いのですが、現実的には時間の制約などで難しい場合もありますね。

例えば、潜在的なセキュリティ問題や重大なバグにつながる可能性がある警告は優先的に解消するなど、重要度に応じて対応を決めるとよいでしょう。

プロ美

「Null参照が云々…」っていう警告がたくさんでてくるんだよね…。

プロ太

最近のC#では実行時のNull参照エラーが発生しないように、Nullチェックが行われていないと厳しく警告がでますね。

基本的には「Nullチェック」を行うコードをきちんと書けばよい…のですが、色々なパターンがありけっこう難しいですよね。

Null関連についてはまた機会があれば別記事でまとめて紹介したいと思います。

C#の参照型は「Null許容型」と「Null非許容型」があります。(C#8.0で導入)

string? name1; //Null許容型
string  name2; //Null非許容型

Null許容型は変数にnull値を代入できる型です、Null非許容型はnull値を代入できない(コンパイラが警告を出す)型です。

Null許容型を使用する場合は、その変数を参照する前に必ずnullチェックが必要になります。こちらの記事も参考にしてください。

(3)メッセージへの対策

  • 提案内容を確認:より良いコードの書き方を学ぶ機会として活用する。
  • 必要に応じて採用:特に学習の場合には積極的に採用するとよい。
    (C#の新しい文法を学ぶよい機会になります)
  • 自動修正を利用:Visual Studioが修正方法を提案してくれる。

メッセージは「よりモダンな書き方」の提案であることが多いです。学習のために取り入れてみると良いでしょう。

Visual Studioの自動修正機能もとても便利です。例えば以下のコードで考えてみましょう。

class Cat
{
    private readonly string name;
    public Cat(string name) //メッセージ: プライマリコンストラクタでより簡潔に書ける
    {
        this.name = name;
    }
}

Visual Studioで「メッセージ」の指摘箇所にカーソルを当てると、以下のように表示されます。

ここで、「考えられる修正内容を表示する」>「プライマリ コンストラクターの使用」を選びます。

以下のようにプライマリコンストラクタを使ったコードへと自動修正されます。

class Cat(string name)
{
    private readonly string name = name;
}
プロ美

クラスのコンストラクタって、こんな書き方ができるんだ!前より簡潔になったよ。

プロ太

「メッセージ」への対応は、C#の学習方法としても、とても有効ですね!

GitHub Copilot・チャット型AIの活用

GitHub Copilotを活用するとエラーや警告が出た箇所について、AIに修正案を提案してもらうことができます。

例えば以下のコードで、警告の箇所にカーソルをあて「考えられる修正内容を表示する」をクリックしてみましょう。

string? line = Console.ReadLine(); // nullの可能性がある
Console.WriteLine(line.Length); // lineがnullの可能性がある

「Copilotで修正する」を選びます。

すると、Copilotが修正案を掲示してくれるので、問題なければ「承認」します。

次のようにコードが修正され、nullチェックが追加されました。

string? line = Console.ReadLine();
if (line != null)
{
    Console.WriteLine(line.Length); 
}
else
{
    Console.WriteLine("入力がnullです");
}

ChatGPT・Claude・Geminiなどのチャット型AIへ「エラー/警告メッセージ」と「原因箇所のコード」をコピーして質問するのもおすすめです。

AI活用については以下の記事も参考にしてください。

プログラミング初心者におすすめのAIツール ~学習を効率化する方法~【ChatGPT、GitHub Copilot(Visual Studio連携)】 プログラミングにおいてChatGPTやGitHub CopilotなどのAIを活用することで、開発効率を大幅に向上でき、学習者にとって...
プログラミング初心者のためのチャット型AI活用ガイド【ChatGPT入門】 プログラミング学習において、ChatGPTなどのチャット型AIは非常に便利なツールです。 しかし、プログラミング初心者がAIを使...

まとめ

Visual Studioにおけるビルド時の診断メッセージについて、その種類と対策を解説しました。

  • エラー:修正必須。修正しないとビルドができない
  • 警告:修正推奨。将来的に問題が発生する可能性がある
  • メッセージ:参考情報。より良いコードになるための提案

いずれのメッセージも、プログラミングスキル向上のための重要な学習機会です。

エラーを恐れず、むしろ「どうしてエラーになるのか」「どう修正すべきか」を考えることで、プログラミングの理解が深まります。

特に初心者のうちは、警告も含めて全ての診断メッセージに対応することで、良いプログラミング習慣が身につきます。

AIツールも上手く活用しながら、効率的にエラー解決ができるようになりましょう。

プロ太

引き続き、C#やプログラミングの考え方を一緒に学んでいきましょう!

ABOUT ME
プロ太
●仕事:現在は個人事業主(メンター・情報発信等)、大手IT企業で技術者・マネージャ(15年以上)、大学の外部講師、学生時代は学習塾で非常勤講師(約4年間) ●博士(工学)の学位取得 ●高校生の頃に独学で始め、プログラミング歴20年以上 ●言語:C# 、Java、C/C++、Python、JavaScript/TypeScript等 ●分野:Webアプリ、テスト自動化、生成AI、デバッガ、コード解析、ドメイン特化言語

ご依頼・ご相談について

プログラミング学習のご相談、お仕事のご依頼については、
こちらのお問い合わせページをご確認ください。