ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

エラーと警告についてのコードのチェック

MATLAB® コード アナライザーは、以下の節で説明するように、コードの問題についてコードを自動的にチェックできます。

エディターでのコードの自動チェック - コード アナライザー

コードについて警告とエラー メッセージを表示し、そのメッセージに基づいてファイルを変更できます。メッセージ内に記された問題を変更した場合、メッセージが自動的かつ連続的に更新されます。メッセージによっては、追加情報と自動コード修正のいずれかまたは両方が提供されています。

エディターで MATLAB コード ファイルの連続コード チェックを使用するには、次の操作を実行します。

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

  2. [MATLAB][コード アナライザー] を選択し、[統合された警告とエラー メッセージを有効にする] チェック ボックスをオンにします。

  3. [下線] オプションを [警告とエラーに下線を引く] に設定し、[OK] をクリックします。

  4. エディターで MATLAB コード ファイルを開きます。この例のサンプル ファイル lengthofline.m は MATLAB に提供されています。

    1. 例のファイルを開きます。

      open(fullfile(matlabroot,'help','techdoc','matlab_env',...
           'examples','lengthofline.m'))
      
    2. 書き込み権限をもつフォルダーに例ファイルを保存します。たとえば、lengthofline.mC:\my_MATLAB_files に保存されています。

  5. メッセージ バーの先頭のメッセージ インジケーターで、ファイルに対してレポートされたコード アナライザー メッセージを確認します。

    • 赤色は構文エラーが検出されたことを意味します。これらのエラーの一部を検出する方法として、未終了の文字列を特定する構文の強調表示と、キーワード、丸かっこ、中かっこ、大かっこの不一致を識別する "区切り記号の一致" を使用できます。

    • オレンジ色は警告または改善すべき点が検出され、エラーは検出されなかったことを意味します。

    • 緑色は、エラー、警告、改善すべき点が検出されなかったことを意味します。

    この例では、インジケーターが赤色で、ファイル内に少なくとも 1 つのエラーがあることを示します。

  6. メッセージ インジケーターをクリックしてメッセージを含む次のコード部分に移動します。次のコード部分は、ステータス バーに表示される現在のカーソル位置に対応します。

    lengthofline の例では、最初のメッセージは 22 行目にあります。カーソルは 22 行目の先頭に移動します。

    メッセージがあるコード部分は、エラーの場合に赤色、警告および改善点の場合にオレンジ色で下線が引かれています。

  7. メッセージを表示するには、下線が引かれているコード部分にマウス ポインターを移動します。

    メッセージは、ツールヒントで開かれ、メッセージを拡張して追加情報へのアクセスを提供する [詳細] ボタンが含まれます。すべてのメッセージに追加メッセージがあるとは限りません。

  8. [詳細] ボタンをクリックします。

    ウィンドウが拡張され、説明とユーザー アクションが表示されます。

  9. 必要であれば、コードを変更します。

    メッセージ インジケーターと下線は自動更新されて、ファイルを保存しなくても変更を反映します。

  10. 28 行目の、prod の上にマウスを置きます。

    コードには下線が付けられ強調表示されています。これは警告メッセージがあり、自動修正が可能であるためです。メッセージを表示すると、自動修正を行うボタンが表示されます。

  11. 次のいずれかを行って、問題を解決します。

    • 過去の経験から、この修正が何であるかわかっている場合は、[修正] をクリックします。

    • この修正が不明な場合は、以下のようにして確認と適用を行います。

      1. 強調表示されているコードを右クリック (シングルボタン マウスでは Ctrl キーを押したままクリック) し、コンテキスト メニューの最初の項目を表示します。

      2. [修正] をクリックします。

        MATLAB は自動的にコードを訂正します。

        この例では、MATLAB は prod(size(hline))numel(hline) で置き換えます。

  12. 次のいずれかを行って、別のメッセージに移動します。

    • 次のメッセージに移動するには、メッセージ インジケーターまたは次の下線のあるコード部分をクリックします。

    • マーカーのある行に移動するには、インジケーター バーの赤またはオレンジ色の行をクリックします。

      lengthofline の最初のエラーを表示するには、メッセージ バーの最初の赤いマーカーをクリックします。カーソルが、48 行目の最初に検出されたコード部分に移動します。[詳細] ボタンと [修正] ボタンは淡色表示され、このメッセージに関する情報がこれ以上存在しないことと、自動修正はないことが示されます。

      複数のメッセージが 1 つの問題あるいは複数の問題を表す場合があります。1 つのメッセージがすべての問題に対応したり、あるいは 1 つのメッセージを対処した後で他のメッセージが変更されたり、行うべきことが明確になる場合があります。

  13. メッセージに示された問題を解決するために変更を行います。メッセージ インジケーターは自動更新されます。

    メッセージは 48 行目の区切り記号の不整合を示しています。次のようにして調べることができます。

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

    2. [MATLAB][キーボード] を選択します。

    3. [区切り文字の一致] で、[矢印で一致] を選択し、[OK] をクリックします。

    4. エディターで、方向キーを各区切り記号に移動して、MATLAB が不一致を検出していないかを確認します。

      この例では区切り記号に不一致がないことが表示されます。ただし、コード解析でかっこ内のセミコロンが見つかりました。data{3}(;) で、これはステートメントの終わりを意味します。メッセージは 48 行目の 2 つのステートメントに区切り記号の不一致があることをレポートします。

    5. 48 行目で data{3}(;)data{3}(:) に変更します。

      これで、48 行目に下線が表示されなくなります。この 1 回の変更により 48 行目の両方のメッセージの問題が解決されます。

      変更によってファイル内のエラーが削除されたため、バーの最上部のメッセージ インジケーターの色は赤からオレンジに変化し、警告と潜在的な改善点のみが残っていることが示されます。

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

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

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

以下のいずれかの方法を使用することで、個別のファイルまたはフォルダー内のすべてのファイルに対して、レポート メッセージを作成できます。

  • 個別の MATLAB コード ファイルのレポートを実行する

    1. エディター ウィンドウで をクリックします。

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

      コード アナライザー レポートが MATLAB Web ブラウザーに表示されます。

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

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

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

  • フォルダー内のすべてのファイルのレポートを実行する

    1. [現在のフォルダー] ブラウザーで をクリックします。

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

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

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

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

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

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

MATLAB ファイル内の修正部分に応じて、コードの下線部分の表示を制限する必要がある場合があります。エラーと警告についてのコードのチェックの手順 1 の説明のコード アナライザー設定を使用すると、これを行うことができます。たとえばコーディングを始めるとき、下線はエラー部分のみに表示し、警告は非表示にする必要がある場合があります。

コード アナライザーはすべての状況に対応する完全な情報を提供するわけではありません。場合によってはメッセージを基にした変更を行いたくない場合があります。コードを変更せず、その行に対するインジケーターとメッセージを表示しないようにする場合は、非表示にします。lengthofline の例の 49 行目の最初のメッセージは、「(関数内で) 出力を非表示にするには、セミコロンを使ってステートメントを終了してください」です。ステートメントの末尾にセミコロンを付加すると、出力が表示されなくなります。コード解析は出力を生成し、終了セミコロンが欠落している行を通知します。49 行目の出力を表示する場合は、セミコロンを付加しないでください。

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

構文エラーなどのエラー メッセージを非表示にすることはできません。そのためメッセージを非表示にする説明は、これらのメッセージタイプには適用されません。

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

現在のファイルで指定したコード アナライザー メッセージの特定インスタンスを非表示にすることができます。たとえば、エラーと警告についてのコードのチェックのコードを使って以下を行います。

  1. 49 行目で最初の下線を右クリックします (シングルボタン マウスの場合は Ctrl キーを押したままクリックします)。

  2. コンテキスト メニューから、["セミコロンを使ってステートメントを終了" を非表示にする][この行で] を選択します。

    コメント %#ok<NOPRT> が行の末尾に追加され、MATLAB がその行の終了セミコロンをチェックしないようになります。インジケーターには、そのメッセージに対する下線とマークが表示されないようになります。

  3. 表示しない行に 2 つのメッセージがある場合は、それぞれの下線を個別に右クリックし、コンテキスト メニューから適切な項目を選択します。

    %#ok 構文が拡張されます。エラーと警告についてのコードのチェックのコードの例では 49 行目の両方のメッセージを無視すると、%#ok<NBRAK,NOPRT> が追加されます。

    コード アナライザー設定でこのメッセージが有効に設定されていても、この方法で非表示に指定されたメッセージのインスタンスは表示されません。%#ok は設定より優先されます。終了セミコロンをその行でチェックするようにする場合は、%#ok<NOPRT> の文字列を行から削除します。

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

現在のファイル内で指定したコード アナライザー メッセージのインスタンスをすべて非表示にすることができます。たとえば、エラーと警告についてのコードのチェックのコードを使って以下を行います。

  1. 49 行目で最初の下線を右クリックします (シングルボタン マウスの場合は Ctrl キーを押したままクリックします)。

  2. コンテキスト メニューから、["セミコロンを使ってステートメントを終了" を非表示にする][このファイルで] を選択します。

コメント %#ok<*NOPRT> が行の末尾に追加され、MATLAB がファイルを通して終了セミコロンをチェックしないようになります。すべての下線と、このメッセージに対するメッセージ インジケーター バーのマークが非表示になります。

現在のファイルの表示しない行に 2 つのメッセージがある場合は、各下線を個別に右クリックし、コンテキスト メニューから適切な項目を選択します。%#ok 構文が拡張されます。エラーと警告についてのコードのチェックのコードの例では 49 行目の両方のメッセージを無視すると、%#ok<*NBRAK,*NOPRT> が追加されます。

コード アナライザー設定でこのメッセージが有効に設定されていても、このメッセージのインスタンスは表示されません。%#ok は設定より優先されます。終了セミコロンをそのファイルでチェックするようにする場合は、%#ok<*NOPRT> の文字列を行から削除します。

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

すべてのファイルでコード アナライザー メッセージのすべてのインスタンスを無効にすることができます。たとえば、エラーと警告についてのコードのチェックのコードを使って以下を行います。

  1. 49 行目で最初の下線を右クリックします (シングルボタン マウスの場合は Ctrl キーを押したままクリックします)。

  2. コンテキスト メニューから、["セミコロンを使ってステートメントを終了" を非表示にする][すべてのファイルで] を選択します。

これによりコード アナライザー設定が変更されます。

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

  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: に続けてメッセージ ID (手順 1 で検索した ID) のひとつを入力します。

    メッセージのリストにはその ID に対応するメッセージのみが含まれています。そのメッセージがハイパーリンクである場合、クリックしてそのメッセージが示すアクションや説明を表示します。これにより、メッセージが非表示または無効になっている原因を調べることができます。次のイメージは、検索フィールドに msgid:CPROP を入力したときの [設定] ダイアログ ボックスの外観を示しています。

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

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

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

コード解析の制限の理解

コード解析は貴重なツールですが、一部の制限があります。

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

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

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

    追加情報がメッセージと共に提供される場合、[詳細] ボタンをクリックすると、その判断ができます。ほとんどすべてのエラー メッセージは問題です。ただし、警告の多くはコード内で問題となる可能性がある場所を示しており、場合によっては適切なコードである場合もあります。

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

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

次の節では、次の点に関するコード解析の制限について説明します。

関数名と変数名の区別

コード解析では、関数名と変数名を区別できない場合があります。コード解析では、コード アナライザー メッセージが有効になっている場合、以下のコードに対して [コード アナライザーは、xyz が変数または関数であるか特定できないため、関数として仮定します] というメッセージが返されます。コード解析は、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 が構造体かハンドル オブジェクトかを判断できません。不正確なメッセージの数を最低限に抑えるために、コード解析では、微妙なバグや深刻なバグが含まれている場合でも、前のコードのメッセージを返しません。

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

コード解析では、プログラムを編集しているか、実行しているかによって MATLAB パス情報が異なる場合があるため、パス情報を使用しません。一部の組み込み関数がクラスまたはパスにオーバーロードされている場合は、コード アナライザー メッセージが組み込み関数に該当しても、呼び出すオーバーロード関数には該当しない可能性があります。この場合には、表示される行のメッセージを非表示にするか、ファイル全体のメッセージを非表示にします。

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

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

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

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

コード解析は、一度に 1 つのファイルを分析し、パスを使用しないため、スーパークラスを分析する手段をもちません。したがって、コード解析がスーパークラスのクラス定義に対して行うチェックの量が制限されています。一般に、コード解析ではクラスがハンドル クラスであるかどうかを常に判定することはできません。推定はしますが、特定するための十分な情報は得られません。

クラス メソッドの解析

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

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

ファイルに対して、コンパイラの配布メッセージの表示と非表示を切り替えることができます。このためには、このメッセージ カテゴリに対するコード アナライザー設定を変更します。これは、配布されたファイルで作業するかどうかによって選択してください。設定を変更すると、エディターの設定も変更されます。逆も可能です。エディターから設定を変更した場合、その設定が変更されます。ただし、エディターで設定を変更したときにダイアログ ボックスが開いていると、その変更は [設定] ダイアログ ボックスに表示されません。エディターまたは [設定] ダイアログ ボックスのどちらから設定を変更しても、エディターとコード アナライザー レポートに設定が適用されます。

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

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

    [設定] ダイアログ ボックスが開きます。

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

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

  4. [カテゴリを有効にする] ボタンをクリックします。

  5. コードに表示しないメッセージがある場合は、そのメッセージを個別に解除します。

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

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

この情報は役に立ちましたか?