Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

コード アナライザーを使用したエラーと警告についてのコードのチェック

MATLAB® コード アナライザーは、コードの問題についてコードを自動的にチェックできます。コードについて警告とエラー メッセージを表示し、そのメッセージに基づいてファイルを変更できます。メッセージに示された問題が修正されているかを確認できるように、メッセージは自動的かつ連続的に更新されます。メッセージによっては、追加情報と自動コード修正のいずれかまたは両方が提供されています。

継続的なコード チェックの有効化

継続的なコード チェックを有効にするには、[ホーム] タブの [環境] セクションで [基本設定] をクリックします。[MATLAB][コード アナライザー] を選択し、[統合された警告とエラー メッセージを有効にする] チェック ボックスをオンにします。[下線] オプションを [警告とエラーに下線を引く] に設定します。

継続的なコード チェックが有効な場合、MATLAB は、エディターおよびライブ エディターにコードについての警告とエラー メッセージを表示します。たとえば、サンプル ファイル lengthofline.m には、エラーと警告がいくつか含まれています。そのファイルを現在のフォルダーにコピーしてから、エディターで開きます。

copyfile(fullfile(matlabroot,'help','techdoc','matlab_env','examples','lengthofline.m'))
fileattrib('lengthofline.m','+w');
edit('lengthofline.m')

ファイルのコード アナライザー ステータスの表示

エディターまたはライブ エディターでファイルを開くと、インジケーター バーの先頭のメッセージ インジケーターに、ファイルの全体的なコード アナライザー ステータスが表示されます。

メッセージ インジケーター説明
Red error symbol

ファイルに構文エラーまたはその他の重大な問題が含まれています。

Yellow warning symbol

ファイルに警告または改善点が含まれていますが、エラーは含まれていません。

Green check mark symbol

ファイルにエラー、警告、改善点はいずれも含まれていません。

たとえば、lengthofline.m では、メッセージ インジケーターは Red error symbol で、ファイルに少なくとも 1 つのエラーが含まれていることを示しています。

lengthofline file in the Editor with the red error symbol displayed in the indicator bar

コード アナライザー メッセージの表示

メッセージを含む最初のコード部分に移動するには、メッセージ インジケーターをクリックします。特定されたコード部分は、エラーの場合に赤色、警告および改善点の場合にオレンジ色で下線が引かれています。ファイルにエラーが含まれている場合は、メッセージ インジケーターをクリックすると最初のエラーに移動します。

たとえば、lengthofline.m では、メッセージ インジケーターをクリックすると、最初のエラーが発生している 47 行目にカーソルが移動します。MATLAB は、インジケーター バーのエラー マーカーの横にその行のエラーを表示します。複数のメッセージが 1 つの問題あるいは複数の問題を表す場合があります。1 つのメッセージに対処するとそのすべてが解決する場合があります。あるいは、1 つのメッセージに対処した後で他のメッセージが変更されたり、行うべきことが明確になる場合があります。

lengthofline file in the Editor after clicking the message indicator. Three errors display next to the error marker in the indicator bar.

メッセージを含む次のコード部分に移動するには、メッセージ インジケーターをクリックします。また、インジケーター バーのマーカーをクリックすると、マーカーのある行に移動できます。たとえば、lengthofline.m でインジケーター バーの最初のマーカーをクリックします。カーソルは 21 行目の先頭に移動します。

コード部分のメッセージを表示するには、下線が引かれているコード部分にマウス ポインターを移動します。あるいは、下線が引かれているコード部分にカーソルを置いて Ctrl+M を押します。メッセージに追加情報がある場合は、メッセージに [詳細] ボタンが含まれます。このボタンをクリックすると追加情報が表示され、推奨されるユーザー アクションがある場合はそのアクションも表示されます。

lengthofline file in the Editor showing a warning message with a details button

コード内の問題の修正

コード ファイル内の各メッセージについて、メッセージに示された問題を解決するためにコードを変更します。コードを変更すると、メッセージ インジケーターと下線は更新されて、ファイルを保存しなくても変更を反映します。

たとえば、lengthofline.m の 47 行目で、メッセージは区切り記号の不均衡を示しています。方向キーを各区切り記号上に移動すると、MATLAB は不一致を示していないように見えます。しかし、コード解析は data{3}(;) 内のセミコロンを検知しており、ステートメントの終わりとして解釈しています。

lengthofline file in the Editor after clicking the message indicator. Three errors display next to the error marker in the indicator bar.

47 行目の問題を解決するには、data{3}(;)data{3}(:) に変更します。この 1 回の変更により 47 行目のすべてのメッセージが解決され、その行に下線が表示されなくなります。変更によってファイル内の唯一のエラーが削除されたため、バーの最上部のメッセージ インジケーターは Red error symbol から Yellow warning symbol に変化し、警告と潜在的な改善点のみが残っていることが示されます。

一部のメッセージでは、問題を修正するために適用できる自動修正が MATLAB によって提示されます。問題に対して自動修正を使用できる場合は、コード部分が強調表示され、メッセージに [修正] ボタンが含まれます。

lengthofline file in the Editor showing a warning message with a fix button

たとえば、lengthofline.m の 27 行目で、下線が付けられ強調表示されたコード部分 prod にカーソルを合わせます。表示されたメッセージに [修正] ボタンが含まれています。

これまでの経験などからこの問題の修正方法がわかっている場合は、[修正] ボタンをクリックします。この問題が不明な場合は、強調表示されているコードを右クリックします。コンテキスト メニューの最初の項目に修正候補が表示されます。その項目を選択して修正を適用します。

lengthofline file in the Editor showing the context menu. The first item in the menu is the suggested fix.

問題のインスタンスが複数存在する場合は、問題のすべてのインスタンスに修正候補を適用するように MATLAB によって提案されることがあります。問題のすべてのインスタンスに修正を適用するには、強調表示されているコードを右クリックして [この問題の (n) のインスタンスをすべて修正] を選択します。このオプションは一部の修正候補では使用できません。

コードを修正してすべてのメッセージに対応するか、表示メッセージを無効にすると、メッセージ インジケーターが緑色になります。例のサンプル ファイルに対してすべてのメッセージの修正を行ったファイルは lengthofline2.m として保存されています。たとえば、サンプル ファイル lengthofline.m の修正バージョンを開くには、次のコマンドを使用します。

open(fullfile(matlabroot,'help','techdoc',...
     'matlab_env', 'examples','lengthofline2.m'))

コード アナライザー メッセージ レポートの作成

フォルダー内のすべてのファイルに対してコード アナライザー メッセージのレポートを作成できます。

フォルダー内のすべてのファイルのレポートを作成するには、次を行います。

  1. 現在のフォルダー ブラウザーで Show Current Folder Actions arrow ボタンをクリックします。

  2. [レポート][コード アナライザー レポート] を選択します。

  3. レポート内のメッセージに基づいてファイルを変更します。

  4. 変更したファイルを保存します。

  5. メッセージに示された問題が修正されているかを確認するためにレポートを再実行します。

個別の MATLAB コード ファイルのレポートを作成するには、関数 mlintrpt を使用します。たとえば、サンプル ファイル lengthofline.m のレポートを作成するには、コマンド ウィンドウで「mlintrpt('lengthofline.m')」と入力します。

詳細については、MATLAB コード アナライザー レポートを参照してください。

コード アナライザー メッセージ インジケーターとメッセージの調整

現在の開発段階に最も適した状態になるように、下線を表示するコーディング問題のタイプを指定できます。たとえばコーディングを始めるとき、下線はエラー部分のみに表示し、警告は非表示にする必要がある場合があります。下線の基本設定を変更するには、[ホーム] タブの [環境] セクションで、 [基本設定] をクリックします。[MATLAB][コード アナライザー] を選択し、[下線] オプションを選択します。

また、コードの解析時に表示されるメッセージも調整できます。コード解析では、すべての状況に対応する完全な情報が提供されるわけではありません。場合によってはメッセージを基にしたコード変更を行わないこともあります。コードを変更せず、特定の行に対するインジケーターとメッセージを表示しないようにする場合は、非表示にできます。たとえば、サンプル ファイル lengthofline.m の 48 行目にある最初のメッセージは、[Terminate statement with semicolon to suppress output (in functions)] です。ステートメントの末尾にセミコロンを付加すると、出力が表示されなくなります。コード解析は出力を生成し、終了セミコロンが欠落している行を通知します。48 行目の出力を表示する場合は、セミコロンを付加しないでください。

警告とエラー メッセージのインジケーターを非表示にするには、次の方法があります。

  • 現在のファイルでメッセージのインスタンスを非表示にする。

  • 現在のファイルでメッセージのすべてのインスタンスを非表示にする。

  • すべてのファイルでメッセージのすべてのインスタンスを非表示にする。

構文エラーなどのエラー メッセージを非表示にすることはできません。

現在のファイルでメッセージのインスタンスを非表示にする

現在のファイルで指定したコード アナライザー メッセージの特定インスタンスを非表示にすることができます。たとえば、サンプル ファイル lengthofline.m の 48 行目にあるメッセージを非表示にするには、48 行目で最初の下線を右クリックして ["(関数内で) 出力を非表示にするには、セミコロンを使って …" を非表示にする][この行で]を選択します。

コメント %#ok<NOPRT> が行の末尾に表示され、MATLAB はこの行に関するコード アナライザー メッセージ Terminate statement with semicolon to suppress output (in functions) を抑制するようになります。インジケーター バーには、そのメッセージに対する下線とマークが表示されなくなります。

表示しない 2 つのメッセージが行に含まれている場合は、それぞれの下線を個別に右クリックし、コンテキスト メニューから適切な項目を選択します。%#ok 構文が拡張されます。たとえば、サンプル ファイル lengthofline.m の 48 行目にある両方のメッセージを非表示にすると、コメント %#ok<NBRAK,NOPRT> が行の末尾に追加されます。

コード アナライザー基本設定でこのメッセージが有効に設定されていても、非表示にしたメッセージの特定インスタンスは表示されません。%#ok は基本設定より優先されます。後に、この行に関するコード アナライザー メッセージ Terminate statement with semicolon to suppress output (in functions) を表示することにした場合は、行から %#ok<NOPRT> を削除します。

現在のファイルでメッセージのすべてのインスタンスを非表示にする

現在のファイル内で指定したコード アナライザー メッセージのインスタンスをすべて非表示にすることができます。たとえば、サンプル ファイル lengthofline.m の 48 行目にあるメッセージのすべてのインスタンスを非表示にするには、48 行目で最初の下線を右クリックして ["(関数内で) 出力を非表示にするには、セミコロンを使って …" を非表示にする][このファイルで]を選択します。

コメント %#ok<*NOPRT> が行の末尾に表示され、MATLAB は現在のファイル内にあるコード アナライザー メッセージ Terminate statement with semicolon to suppress output (in functions) のすべてのインスタンスを抑制するようになります。すべての下線と、このメッセージに対するメッセージ インジケーター バーのマークが非表示になります。

現在のファイルのどこにも表示しない 2 つのメッセージが行に含まれている場合は、それぞれの下線を個別に右クリックし、コンテキスト メニューから適切な項目を選択します。%#ok 構文が拡張されます。たとえば、サンプル ファイル lengthofline.m の 48 行目にある両方のメッセージを非表示にすると、コメント %#ok<*NBRAK,*NOPRT> が追加されます。

コード アナライザー基本設定でこのメッセージが有効に設定されていても、このメッセージのインスタンスは表示されません。%#ok は基本設定より優先されます。後に、現在のファイル内にあるコード アナライザー メッセージ Terminate statement with semicolon to suppress output (in functions) のすべてのインスタンスを表示することにした場合は、行から %#ok<*NOPRT> を削除します。

すべてのファイルでメッセージのすべてのインスタンスを非表示にする

すべてのファイルでコード アナライザー メッセージのすべてのインスタンスを無効にすることができます。たとえば、サンプル ファイル lengthofline.m の 48 行目にあるメッセージのすべてのインスタンスをすべてのファイルで非表示にするには、48 行目で最初の下線を右クリックして ["(関数内で) 出力を非表示にするには、セミコロンを使って …" を非表示にする][すべてのファイルで]を選択します。このオプションによりコード アナライザー基本設定が変更されます。

非表示にするメッセージがわかっている場合は、コード アナライザー基本設定を使用して直接それらを無効にできます。

  1. [ホーム] タブの [環境] セクションで [基本設定] をクリックします。

  2. [MATLAB][コード アナライザー] を選択します。

  3. メッセージを検索して、非表示にするメッセージを検出します。

  4. すべてのファイルで非表示にする各メッセージに関連するチェック ボックスをオフにします。

  5. [OK] をクリックします。

コード アナライザー メッセージ設定の保存と再利用

特定のコード アナライザー メッセージを有効または無効にするオプションを設定し、ファイルにその設定を保存できます。特定のファイルに特定の設定ファイルを使う場合は、コード アナライザー基本設定からその設定ファイルを選択します。他の設定ファイルを選択するまで、その設定ファイルが使用されます。一般的に、特定の設定ファイルをファイルのサブセットに適用する場合に設定ファイルを変更します。

設定をファイルに保存するには、次を行います。

  1. [ホーム] タブの [環境] セクションで [基本設定] をクリックします。

  2. [MATLAB][コード アナライザー] を選択します。

  3. 特定のメッセージまたは特定のメッセージのカテゴリを有効/無効にします。

  4. [アクション] ボタン をクリックして [名前を付けて保存] を選択し、設定を txt ファイルに保存します。

  5. [OK] をクリックします。

任意の MATLAB ファイルの設定を再利用したり、他のユーザーへ設定ファイルを提供することができます。保存した設定を使用するには、次の手順に従います。

  1. [ホーム] タブの [環境] セクションで [基本設定] をクリックします。

  2. [MATLAB][コード アナライザー] を選択します。

  3. [アクティブ設定] リストを開いて [参照] を選択します。

  4. 設定ファイルを選択します。

    他のコード アナライザー設定を選択するまで、すべての MATLAB ファイルにこの設定が適用されます。

非表示のメッセージを含むコードの理解

非表示のメッセージを含むコードを受け取った場合、最初にその非表示を解除せずにメッセージを閲覧することが必要な場合があります。メッセージは以下の理由で非表示にされている可能性があります。

  • 1 つまたは複数の %#ok<message-ID> 命令が <message-ID> で指定されたメッセージを表示するコード行にある。

  • 1 つまたは複数の %#ok<*message-ID> 命令が <message-ID> で指定されたメッセージを表示するファイルにある。

  • メッセージは [コード アナライザー基本設定] ペインで無効にされている。

  • メッセージは既定で無効になっている。

メッセージが非表示にされている原因を調べるには、次を行います。

  1. %#ok 命令があるファイルを検索し、その命令に関連付けられているすべてのメッセージ ID のリストを作成します。

  2. [ホーム] タブの [環境] セクションで [基本設定] をクリックします。

  3. [MATLAB][コード アナライザー] を選択します。

  4. 検索フィールドに、「msgid:」に続けて手順 1 のメッセージ ID の 1 つを入力します。これで、メッセージ リストには、その ID に対応するメッセージのみが含まれます。そのメッセージがハイパーリンクである場合、クリックしてそのメッセージに関する説明と推奨アクションを表示します。その結果から、メッセージが非表示または無効になっている原因がわかります。

    search field containing a search string and the resulting search results

  5. [検索をクリア] ボタン をクリックして検索フィールドをクリアし、手順 1 の各メッセージ ID に対して手順 4 を繰り返します。

  6. 既定の設定で無効になっているメッセージや [基本設定] ウィンドウで無効になっているメッセージを表示するには、検索フィールドの右側にある下向き矢印をクリックします。次に、[無効メッセージを表示] を選択します。

  7. 各メッセージ ID に関連付けられているメッセージを閲覧し、そのメッセージがコード内で非表示にされた原因や基本設定ダイアログで無効にされた原因を調べます。

コード解析の制限の理解

コード解析は貴重なツールですが、いくつかの制限があります。

  • コード解析では、予想されるコード アナライザー メッセージが生成されない場合があります。

    コード解析は、一部の問題が検出されないことになっても、返される不正確なメッセージの数を最低限に抑えるように設計されています。

  • コード解析では、特定の状況に当てはまらないメッセージが生成されることがあります。

    [詳細] ボタンをクリックしてメッセージの追加情報を表示すると、メッセージが特定の状況に当てはまるかどうかを判断できます。ほとんどすべてのエラー メッセージは問題です。ただし、警告の多くはコード内で通常とは異なる場所を示しており、場合によっては適切なコードである場合もあります。

    メッセージが特定の状況に当てはまらないことに確信がある場合は、警告メッセージを非表示にしてください。確信がもてない場合は、コメントを含めて根拠を示します。これにより、コードを読む人が状況を認識することができます。

    詳細については、コード アナライザー メッセージ インジケーターとメッセージの調整を参照してください。

関数名と変数名の区別

コード解析では、関数名と変数名を区別できない場合があります。コード解析では、コード アナライザー メッセージが有効になっている場合、以下のコードに対して Code Analyzer cannot determine whether xyz is a variable or a function, and assumes it is a function というメッセージが返されます。コード解析は、xyz に明確な値が割り当てられていないために、これを特定することができません。しかし、コードによって、コード解析が検出できないような方法でワークスペースに値が配置されている可能性があります。

function y=foo(x)
   .
   .
   .
   y = xyz(x);
end

たとえば、以下のコードでは、xyz は関数、あるいは MAT ファイルから読み込まれた変数になります。コード解析で判断する方法はありません。

function y=foo(x)
    load abc.mat
    y = xyz(x);
end
関数 evalevalcevalinassignin を使用する場合にも、コード解析で変数が検出されないことがあります。

コード解析で誤って変数が関数とされる場合は、以下のいずれかを行います。

  • コード解析により関数として処理されないように変数を初期化します。

  • 関数 load の場合は、load コマンド ラインで明示的に変数を指定します。以下に例を示します。

     function y=foo(x)
         load abc.mat xyz
         y = xyz(x);
     end

構造体とハンドル オブジェクトの区別

コード解析は、構造体とハンドル オブジェクトを区別できない場合があります。次のコードで x が構造体の場合、コード アナライザー メッセージによりコードが構造体の更新した値を使用しないと示されることが予想されます。しかし、x がハンドル オブジェクトの場合は、このコードは正確です。

function foo(x)
		x.a = 3;
end

コード解析では、x が構造体かハンドル オブジェクトかを判断できません。不正確なメッセージの数を最低限に抑えるために、コード解析では、微妙なバグや深刻なバグが含まれている場合でも、前のコードのメッセージを返しません。

組み込み関数とオーバーロード関数の区別

一部の組み込み関数がクラスまたはパスにオーバーロードされている場合は、コード アナライザー メッセージが組み込み関数に該当しても、呼び出すオーバーロード関数には該当しない可能性があります。この場合には、表示される行のメッセージを非表示にするか、ファイル全体のメッセージを非表示にします。

メッセージを非表示にする方法の詳細は、コード アナライザー メッセージ インジケーターとメッセージの調整を参照してください。

変数のサイズまたは形状の判断

コード解析では、変数の型および行列の形状を判断する能力が制限されています。これによりコード解析では、ベクトルなど、最も一般的なケースに該当するメッセージが生成される場合があります。ただし、これらのメッセージは、行列などのまれなケースには当てはまらない可能性があります。

スーパークラスのクラス定義の解析

コード アナライザーではスーパークラスのクラス定義をチェックする機能が限られています。たとえば、コード アナライザーはクラスがハンドル クラスであるかどうか判断できないことがありますが、属性をスーパークラスから継承している場合はクラスで使用されているカスタム属性を検証できる場合もあります。クラス定義を解析する際、コード アナライザーはスーパークラスの情報を使用しようとしますが、特定の判断を行うのに十分な情報が得られない場合が多くあります。

クラス メソッドの解析

ほとんどのクラス メソッドには、同じクラスのオブジェクトである引数が少なくとも 1 つはメソッドとして含まれていなければなりません。しかし、この引数は常に最初の引数である必要はありません。最初の引数の場合、コード解析は、引数が定義しているクラスのオブジェクトであるかどうかを判断でき、さまざまなチェックを実行できます。たとえば、コード解析は、そのプロパティとメソッド名が存在することと、スペルが正しいことをチェックできます。しかし、コード解析は、オブジェクトが定義しているクラスの引数であるかどうかを判断できず、これらのチェックを実行することができません。

MATLAB Compiler 配布メッセージを有効にする

ファイルを扱う際、このメッセージ カテゴリのコード アナライザー基本設定を変更して、MATLAB Compiler 配布メッセージの表示と非表示を切り替えることができます。これは、配布されたファイルで作業するかどうかによって選択してください。この基本設定を変更すると、エディターの設定も変更されます。同様に、エディターの設定を変更すると、この基本設定も変更されます。ただし、エディターで設定を変更したときにコード アナライザー基本設定が開いていると、その変更は [基本設定] ウィンドウに反映されません。エディターまたは [基本設定] ウィンドウのどちらから設定を変更しても、エディターとコード アナライザー レポートに変更が適用されます。

MATLAB Compiler™ 配布メッセージを有効にするには、以下の手順を実行します。

  1. [ホーム] タブの [環境] セクションで [基本設定] をクリックします。

  2. [MATLAB][コード アナライザー] を選択します。

  3. 検索フィールドの隣にある下向き矢印をクリックし、[カテゴリ内のメッセージを表示][MATLAB Compiler (配布) メッセージ] を選択します。

  4. [MATLAB Compiler (配布) メッセージ] カテゴリ タイトルの右側の [カテゴリを有効にする] ボタンをクリックします。

  5. コードに表示しないメッセージを個別に解除します。

  6. これらの設定を保存すると決定した場合は、ファイルを配布する作業を次回行うときにそれらの設定を再利用できます。

txt ファイル (コード アナライザー メッセージ設定の保存と再利用での説明のようにして作成できます) の設定は設定のステータスも含みます。

参考

|

関連するトピック