このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
コード アナライザーを使用したエラーと警告についてのコードのチェック
MATLAB® コード アナライザーは、コードの問題についてコードを自動的にチェックできます。コードについて警告とエラー メッセージを表示し、そのメッセージに基づいてファイルを変更できます。メッセージに示された問題が修正されているかを確認できるように、メッセージは自動的かつ連続的に更新されます。メッセージによっては、追加情報と自動コード修正のいずれかまたは両方が提供されています。
MATLAB コード アナライザーによって実行されるすべてのチェックのリストは、こちらのIndex of Code Analyzer Checksにあります。
継続的なコード チェックの有効化
継続的なコード チェックを有効にするには、[ホーム] タブの [環境] セクションで [基本設定] をクリックします。[MATLAB] 、 [コード アナライザー] を選択し、[統合された警告とエラー メッセージを有効にする] チェック ボックスをオンにします。[下線] オプションを [警告とエラーに下線を引く]
に設定します。
継続的なコード チェックが有効な場合、MATLAB は、エディターおよびライブ エディターにコードについての警告とエラー メッセージを表示します。たとえば、サンプル ファイル lengthofline.m
には、エラーと警告がいくつか含まれています。コードをエディターにコピーし、ファイルを lengthofline.m
として保存します。
ファイルのコード アナライザー ステータスの表示
エディターまたはライブ エディターでファイルを開くと、インジケーター バーの先頭のメッセージ インジケーターに、ファイルの全体的なコード アナライザー ステータスが表示されます。
メッセージ インジケーター | 説明 |
---|---|
ファイルに構文エラーまたはその他の重大な問題が含まれています。 | |
ファイルに警告または改善点が含まれていますが、エラーは含まれていません。 | |
ファイルにエラー、警告、改善点はいずれも含まれていません。 |
たとえば、lengthofline.m
では、メッセージ インジケーターは で、ファイルに少なくとも 1 つのエラーが含まれていることを示しています。
コード アナライザー メッセージの表示
メッセージを含む最初のコード部分に移動するには、メッセージ インジケーターをクリックします。特定されたコード部分は、エラーの場合に赤色、警告および改善点の場合にオレンジ色で下線が引かれています。ファイルにエラーが含まれている場合は、メッセージ インジケーターをクリックすると最初のエラーに移動します。
たとえば、lengthofline.m
では、メッセージ インジケーターをクリックすると、最初のエラーが発生している 47 行目にカーソルが移動します。MATLAB は、インジケーター バーのエラー マーカーの横にその行のエラーを表示します。複数のメッセージが 1 つの問題あるいは複数の問題を表す場合があります。1 つのメッセージに対処するとそのすべてが解決する場合があります。あるいは、1 つのメッセージに対処した後で他のメッセージが変更されたり、行うべきことが明確になる場合があります。
メッセージを含む次のコード部分に移動するには、メッセージ インジケーターをクリックします。また、インジケーター バーのマーカーをクリックすると、マーカーのある行に移動できます。たとえば、lengthofline.m
でインジケーター バーの最初のマーカーをクリックします。カーソルは 21 行目の先頭に移動します。
コード部分のメッセージを表示するには、下線が引かれているコード部分にマウス ポインターを移動します。あるいは、下線が引かれているコード部分にカーソルを置いて Ctrl+M を押します。メッセージに追加情報がある場合は、メッセージに [詳細] ボタンが含まれます。このボタンをクリックすると追加情報が表示され、推奨されるユーザー アクションがある場合はそのアクションも表示されます。
コード内の問題の修正
コード ファイル内の各メッセージについて、メッセージに示された問題を解決するためにコードを変更します。コードを変更すると、メッセージ インジケーターと下線は更新されて、ファイルを保存しなくても変更を反映します。
たとえば、lengthofline.m
の 47 行目で、メッセージは区切り記号の不均衡を示しています。方向キーを各区切り記号上に移動すると、MATLAB は不一致を示していないように見えます。しかし、コード解析は data{3}(;)
内のセミコロンを検知しており、ステートメントの終わりとして解釈しています。
47 行目の問題を解決するには、data{3}(;)
を data{3}(:)
に変更します。この 1 回の変更により 47 行目のすべてのメッセージが解決され、その行に下線が表示されなくなります。変更によってファイル内の唯一のエラーが削除されたため、バーの最上部のメッセージ インジケーターは から に変化し、警告と潜在的な改善点のみが残っていることが示されます。
一部のメッセージでは、問題を修正するために適用できる自動修正が MATLAB によって提示されます。問題に対して自動修正を使用できる場合は、コード部分が強調表示され、メッセージに [修正] ボタンが含まれます。
たとえば、lengthofline.m
の 27 行目で、下線が付けられ強調表示されたコード部分 prod
にカーソルを合わせます。表示されたメッセージに [修正] ボタンが含まれています。
これまでの経験などからこの問題の修正方法がわかっている場合は、[修正] ボタンをクリックするか、Alt+Enter を押します。この問題が不明な場合は、強調表示されているコードを右クリックします。コンテキスト メニューの最初の項目に修正候補が表示されます。その項目を選択して修正を適用します。
問題のインスタンスが複数存在する場合は、問題のすべてのインスタンスに修正候補を適用するように MATLAB によって提案されることがあります。問題のすべてのインスタンスに修正を適用するには、強調表示されているコードを右クリックして [この問題の (n
) のインスタンスをすべて修正] を選択します。このオプションは一部の修正候補では使用できません。
コードを修正してすべてのメッセージに対応するか、表示メッセージを無効にすると、メッセージ インジケーターが緑色になります。すべてのメッセージに対応済みのサンプル ファイル lengthofline2.m
を参照してください。
コード アナライザー アプリを使用したファイルの解析
R2022b 以降
コード アナライザー アプリを使用して、フォルダー内のすべてのファイルに対してコード アナライザー メッセージのレポートを作成できます。
アプリを開くには、以下のようにします。
MATLAB ツールストリップ: [アプリ] タブの [MATLAB] で、アプリのアイコン をクリックします。
MATLAB コマンド プロンプト: 「
codeAnalyzer
」と入力します。
codeIssues
オブジェクトを使用したファイル内の問題の特定および保存
R2022b 以降
codeIssues
を使用して、コード内の問題をプログラムによって検出して保存できます。codeIssues
オブジェクトは、MATLAB コード アナライザーで検出された問題を保存します。1 つ以上の指定されたファイルまたはフォルダーで検出された問題の並べ替えおよびフィルター処理を、コマンド ラインでプログラムによって、またはコード アナライザー アプリで対話的に行うことができます。
たとえば、指定したファイル内の問題が含まれた codeIssues
オブジェクトを生成できます。
issues = codeIssues("test.m")
issues = codeIssues with properties: Date: 18-Oct-2022 14:18:54 Release: "R2023a" Files: "C:\MyCode\test.m" CodeAnalyzerConfiguration: "active" Issues: [3×10 table] SuppressedIssues: [0×11 table] Issues table preview Location Severity Fixability Description CheckID LineStart LineEnd ColumnStart ColumnEnd FullFilename ________ ________ __________ ____________________________________________________________________________________________ _______ _________ _______ ___________ _________ __________________ "test.m" info manual "Variable appears to change size on every loop iteration. Consider preallocating for speed." AGROW 3 3 1 3 "C:\MyCode\test.m" "test.m" info auto "Add a semicolon after the statement to hide the output (in a script)." NOPTS 6 6 3 3 "C:\MyCode\test.m" "test.m" info auto "string('...') is not recommended. Use "..." instead." STRQUOT 8 8 1 13 "C:\MyCode\test.m"
R2023b において: codeIssues
オブジェクトに含まれる情報は、export
を使用してエクスポートできます。
MATLAB Online での [コードの問題] パネルを使用したファイルの解析
MATLAB Online™ では、[コードの問題] パネルを使用して、コードに関するエラーおよび警告メッセージを表示できます。[コードの問題] パネルでは、MATLAB コード アナライザーがコードの自動チェック時に検出したコーディングの問題が表示されます。
[コードの問題] パネルを開くには、[エディター] タブまたは [ライブ エディター] タブに移動し、[解析] セクションで [コードの問題] をクリックします。あるいは、サイドバーの [パネルをさらに開く] ボタン () を使用してパネルを開くこともできます。既定では、[コードの問題] パネルはデスクトップの右側に開きます。[コードの問題] パネルを非表示にするには、サイドバーの [コードの問題] アイコン をクリックします。
[コードの問題] パネルで表示するメッセージを、ツールの上部にあるオプションを使用して変更できます。
現在のファイルまたはすべての開いているファイルのメッセージを表示する - [コードの問題] パネルの左上にあるドロップダウン リストを使用して、現在のファイルのエラーおよび警告を表示するのか、すべての開いているファイルのエラーおよび警告を表示するのかを選択します。たとえば、すべての開いているファイルのエラーおよび警告を表示するには、ドロップダウン リストで
[開いているファイル]
を選択します。エラーおよび警告の表示/非表示を切り替える - [コードの問題] パネルの右上にある [エラー] ボタン および [警告] ボタン を使用して、エラーおよび警告の表示/非表示を切り替えます。たとえば、エラーのみを表示するには、[エラー] ボタン をクリックしてオンにし、[警告] ボタン をオフにします。
テキストでメッセージをフィルター処理する - ドロップダウン リストの下の検索フィールドを使用して、テキストでメッセージのリストをフィルター処理します。たとえば、
Variable
という単語が含まれているメッセージのみを表示するには、検索フィールドにVariable
という単語を入力します。
コード アナライザー メッセージ インジケーターとメッセージの調整
現在の開発段階に最も適した状態になるように、下線を表示するコーディング問題のタイプを指定できます。たとえばコーディングを始めるとき、下線はエラー部分のみに表示し、警告は非表示にする必要がある場合があります。下線の基本設定を変更するには、[ホーム] タブの [環境] セクションで、 [基本設定] をクリックします。[MATLAB] 、 [コード アナライザー] を選択し、[下線] オプションを選択します。
また、コードの解析時に表示されるメッセージも調整できます。コード解析では、すべての状況に対応する完全な情報が提供されるわけではありません。場合によってはメッセージを基にしたコード変更を行わないこともあります。コードを変更せず、特定の行に対するインジケーターとメッセージを表示しないようにする場合は、非表示にできます。たとえば、サンプル ファイル lengthofline.m
の 48 行目にある最初のメッセージは、[(関数内で) 出力を非表示にするには、セミコロンを使ってステートメントを終了してください]
です。ステートメントの末尾にセミコロンを付加すると、出力が表示されなくなります。コード解析は出力を生成し、終了セミコロンが欠落している行を通知します。48 行目の出力を表示する場合は、セミコロンを付加しないでください。
警告とエラー メッセージのインジケーターを非表示にするには、次の方法があります。
現在のファイルでメッセージのインスタンスを非表示にする。
現在のファイルでメッセージのすべてのインスタンスを非表示にする。
すべてのファイルでメッセージのすべてのインスタンスを非表示にする。
構文エラーなどのエラー メッセージを非表示にすることはできません。
現在のファイルでメッセージのインスタンスを非表示にする
現在のファイルで指定したコード アナライザー メッセージの特定インスタンスを非表示にすることができます。たとえば、サンプル ファイル lengthofline.m
の 48 行目にあるメッセージを非表示にするには、48 行目で最初の下線を右クリックして ["(関数内で) 出力を非表示にするには、セミコロンを使って …" を非表示にする] 、 [この行で]を選択します。
コメント %#ok<NOPRT>
が行の末尾に表示され、MATLAB はこの行に関するコード アナライザー メッセージ [(関数内で) 出力を非表示にするには、セミコロンを使ってステートメントを終了してください]
を抑制するようになります。インジケーター バーには、そのメッセージに対する下線とマークが表示されなくなります。
表示しない 2 つのメッセージが行に含まれている場合は、それぞれの下線を個別に右クリックし、コンテキスト メニューから適切な項目を選択します。%#ok
構文が拡張されます。たとえば、サンプル ファイル lengthofline.m
の 48 行目にある両方のメッセージを非表示にすると、コメント %#ok<NBRAK,NOPRT>
が行の末尾に追加されます。
コード アナライザー基本設定でこのメッセージが有効に設定されていても、非表示にしたメッセージの特定インスタンスは表示されません。%#ok
は基本設定より優先されます。後で、この行に関するコード アナライザー メッセージ [(関数内で) 出力を非表示にするには、セミコロンを使ってステートメントを終了してください]
を表示することにした場合は、行から %#ok<NOPRT>
を削除します。
現在のファイルでメッセージのすべてのインスタンスを非表示にする
現在のファイル内で指定したコード アナライザー メッセージのインスタンスをすべて非表示にすることができます。たとえば、サンプル ファイル lengthofline.m
の 48 行目にあるメッセージのすべてのインスタンスを非表示にするには、48 行目で最初の下線を右クリックして ["(関数内で) 出力を非表示にするには、セミコロンを使って …" を非表示にする] 、 [このファイルで]を選択します。
コメント %#ok<*NOPRT>
が行の末尾に表示され、MATLAB は現在のファイル内にあるコード アナライザー メッセージ [(関数内で) 出力を非表示にするには、セミコロンを使ってステートメントを終了してください]
のすべてのインスタンスを抑制するようになります。すべての下線と、このメッセージに対するメッセージ インジケーター バーのマークが非表示になります。
現在のファイルのどこにも表示しない 2 つのメッセージが行に含まれている場合は、それぞれの下線を個別に右クリックし、コンテキスト メニューから適切な項目を選択します。%#ok
構文が拡張されます。たとえば、サンプル ファイル lengthofline.m
の 48 行目にある両方のメッセージを非表示にすると、コメント %#ok<*NBRAK,*NOPRT>
が追加されます。
コード アナライザー基本設定でこのメッセージが有効に設定されていても、このメッセージのインスタンスは表示されません。%#ok
は基本設定より優先されます。後で、現在のファイル内にあるコード アナライザー メッセージ [(関数内で) 出力を非表示にするには、セミコロンを使ってステートメントを終了してください]
のすべてのインスタンスを表示することにした場合は、行から %#ok<*NOPRT>
を削除します。
すべてのファイルでメッセージのすべてのインスタンスを非表示にする
すべてのファイルでコード アナライザー メッセージのすべてのインスタンスを無効にすることができます。たとえば、サンプル ファイル lengthofline.m
の 48 行目にあるメッセージのすべてのインスタンスをすべてのファイルで非表示にするには、48 行目で最初の下線を右クリックして ["(関数内で) 出力を非表示にするには、セミコロンを使って …" を非表示にする] 、 [すべてのファイルで]を選択します。このオプションによりコード アナライザー基本設定が変更されます。
非表示にするメッセージがわかっている場合は、コード アナライザー基本設定を使用して直接それらを無効にできます。
[ホーム] タブの [環境] セクションで [基本設定] をクリックします。
[MATLAB] 、 [コード アナライザー] を選択します。
メッセージを検索して、非表示にするメッセージを検出します。
すべてのファイルで非表示にする各メッセージに関連するチェック ボックスをオフにします。
[OK] をクリックします。
コード アナライザー メッセージ設定の保存と再利用
特定のコード アナライザー メッセージを有効または無効にするオプションを設定し、ファイルにその設定を保存できます。特定のファイルに特定の設定ファイルを使う場合は、コード アナライザー基本設定からその設定ファイルを選択します。他の設定ファイルを選択するまで、その設定ファイルが使用されます。一般的に、特定の設定ファイルをファイルのサブセットに適用する場合に設定ファイルを変更します。
設定をファイルに保存するには、次を行います。
[ホーム] タブの [環境] セクションで [基本設定] をクリックします。
[MATLAB] 、 [コード アナライザー] を選択します。
特定のメッセージまたは特定のメッセージのカテゴリを有効/無効にします。
[アクション] ボタン をクリックして [名前を付けて保存] を選択し、設定を
txt
ファイルに保存します。[OK] をクリックします。
任意の MATLAB ファイルの設定を再利用したり、他のユーザーへ設定ファイルを提供することができます。保存した設定を使用するには、次の手順に従います。
[ホーム] タブの [環境] セクションで [基本設定] をクリックします。
[MATLAB] 、 [コード アナライザー] を選択します。
[アクティブ設定] リストを開いて [参照] を選択します。
設定ファイルを選択します。
他のコード アナライザー設定を選択するまで、すべての MATLAB ファイルにこの設定が適用されます。
カスタム チェックの有効化および既存のチェックの構成
R2023a 以降
リソース フォルダーに codeAnalyzerConfiguration.json
という名前のファイルを配置することで、コード アナライザーによって MATLAB エディターで表示される既存のチェックを構成したり、カスタム チェックを追加したりすることができます。構成ファイルは、リソース フォルダーおよび任意のサブフォルダーが含まれているフォルダーで有効です。
チェックが有効になっているかどうか、チェックの重大度、メッセージ テキスト、パラメーター (チェックにある場合) など、既存のコード アナライザーのチェックを変更できます。たとえば、関数の入出力引数の数を制限します。特定の関数が使用されている場合にトリガーするカスタム チェックを作成することもできます。コード アナライザーのチェックの構成の詳細については、Configure Code Analyzerを参照してください。
関数 matlab.codeanalysis.validateConfiguration
を使用して、codeAnalyzerConfiguration.json
構成ファイルの形式が適切であることを検証します。
非表示のメッセージを含むコードの理解
非表示のメッセージを含むコードを受け取った場合、最初にその非表示を解除せずにメッセージを閲覧することが必要な場合があります。メッセージは以下の理由で非表示にされている可能性があります。
1 つ以上の
%#ok<message-ID>
命令が<message-ID>
で指定されたメッセージを表示するコード行にある。1 つ以上の
%#ok<*message-ID>
命令が<message-ID>
で指定されたメッセージを表示するファイルにある。メッセージは [コード アナライザー基本設定] ペインで無効にされている。
メッセージは既定で無効になっている。
メッセージが非表示にされている原因を調べるには、入力としてファイルを指定して codeIssues
を呼び出します。
issues = codeIssues("myFile.m")
出力 issues
には、プロパティ SuppressedIssues
があり、ファイル内のすべての非表示にされている問題のリストを示した table が含まれています。各問題に関連付けられているメッセージを閲覧し、非表示にされた原因を調べます。
コード解析の制限の理解
コード解析は貴重なツールですが、いくつかの制限があります。
コード解析では、予想されるコード アナライザー メッセージが生成されない場合があります。
コード解析は、一部の問題が検出されないことになっても、返される不正確なメッセージの数を最低限に抑えるように設計されています。
コード解析では、特定の状況に当てはまらないメッセージが生成されることがあります。
[詳細] ボタンをクリックしてメッセージの追加情報を表示すると、メッセージが特定の状況に当てはまるかどうかを判断できます。ほとんどすべてのエラー メッセージは問題です。ただし、警告の多くはコード内で通常とは異なる場所を示しており、場合によっては適切なコードである場合もあります。
メッセージが特定の状況に当てはまらないことに確信がある場合は、警告メッセージを非表示にしてください。確信がもてない場合は、コメントを含めて根拠を示します。これにより、コードを読む人が状況を認識することができます。
詳細については、コード アナライザー メッセージ インジケーターとメッセージの調整を参照してください。
関数名と変数名の区別
コード解析では、関数名と変数名を区別できない場合があります。コード解析では、コード アナライザー メッセージが有効になっている場合、以下のコードに対して 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
eval
、evalc
、evalin
、assignin
を使用する場合にも、コード解析で変数が検出されないことがあります。コード解析で誤って変数が関数とされる場合は、以下のいずれかを行います。
コード解析により関数として処理されないように変数を初期化します。
関数
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™ デプロイ メッセージを有効にするには、以下の手順を実行します。
[ホーム] タブの [環境] セクションで [基本設定] をクリックします。
[MATLAB] 、 [コード アナライザー] を選択します。
検索フィールドの隣にある下向き矢印をクリックし、[カテゴリ内のメッセージを表示] 、 [MATLAB Compiler (デプロイ) メッセージ] を選択します。
[MATLAB Compiler (デプロイ) メッセージ] カテゴリ タイトルの右側の [カテゴリを有効にする] ボタンをクリックします。
コードに表示しないメッセージを個別に解除します。
これらの設定を保存すると決定した場合は、ファイルを展開する作業を次回行うときにそれらの設定を再利用できます。
txt
ファイル (コード アナライザー メッセージ設定の保存と再利用での説明のようにして作成できます) の設定は設定のステータスも含みます。
参考
コード アナライザー | codeIssues
| checkcode