GoLand 2026.1 ヘルプ

コードインスペクション

GoLand には、プロジェクトをコンパイルする前に、プロジェクト内の異常なコードを検出して修正する一連のコードインスペクションがあります。IDE は、さまざまな問題を見つけてハイライトし、デッドコードを見つけ、考えられるバグやスペルの問題を見つけ、全体的なコード構造を改善することができます。

インスペクションは、すべてのプロジェクトファイルまたは特定のスコープでのみ(たとえば、本番コードまたは変更されたファイルでのみ)コードをスキャンできます。

すべてのインスペクションには、問題がコードに影響を与える可能性がある程度の重大度レベルがあります。重大度はエディター内で異なる方法でハイライトされるため、重大な問題と重要性の低いものとをすばやく区別できます。GoLand には事前定義された重大度のセットが付属しており、独自のものを作成できます。

インスペクションとその設定は、プロファイルにグループ化されています。各プロファイルには、有効にされたインスペクション、それらが分析するファイルのスコープ、それらの重大度レベルに関する情報が含まれています。

利用可能なすべてのインスペクションとその設定にアクセスする

  • 設定ダイアログ(Ctrl+Alt+S)で、エディター | インスペクションに移動します。

    Ctrl+Alt+Shift+H を押して、表示されるポップアップでインスペクションの構成を選択することもできます。

    The list of inspections and their settings

the Filter icon を使用してインスペクションリストをフィルタリングします。例: 重大度または言語によってインスペクションをフィルタリングできます。

データフロー分析

データフロー解析(DFA)は、プログラム内でデータがどのように移動するかを理解するためにプログラミングで使用される手法です。プログラムを、複数の点が点在する地図だと想像してみてください。それぞれの点は、コードの一部(ステートメントや命令など)を表します。これらの点は線で結ばれ、プログラムの実行経路を示します。GoLand では、データフロー解析はこの地図を参照してコードを解析します。

The list of DFA inspections and their settings

nil 参照のデータフロー解析

nil ポインタ参照は Go 言語でよく見られるエラーです。本番環境システムでは、予期せぬパニック、クラッシュ、デッドロックを引き起こす可能性があります。典型的な原因としては、nil ポインタのフィールドへのアクセスや nil チャネルへの書き込みなどが挙げられます。

GoLand は静的コード解析を用いて nil 参照の問題を検出します。標準的な nil 参照検出機能であるインスペクションは個々の関数内(手続き内解析)で動作し、単純なケースを検出できます。

nil 値が関数、ファイル、パッケージ間を移動すると、より複雑な問題が発生します。こうした状況に対処するため、GoLand は手続き間 DFA を提供しています。この機能は、関数呼び出しを通じて値がどのように伝播するかを追跡し、コードベース全体にわたって潜在的な nil 参照の問題を検出することを可能にします。

手順内分析の詳細については、blog.jetbrains.com のブログ投稿(英語)を参照してください。

潜在的な nil 参照を説明する

GoLand は、nil 参照の可能性のある問題をエディター内で直接ハイライト表示します。このような警告が表示された場合は、潜在的な nil 参照を説明するアクションを使用できます。

  • 警告の上にマウスを移動するか、警告をクリックして Alt+Enter を押し、潜在的な nil 参照を説明するを選択します。

    Explain potential nil dereferencee

    このアクションにより、問題ツールウィンドウのデータフロー分析タブが開きます。ツールは、nil 値がコード内でどのように伝播し、どこで使用されているかを段階的に説明します。これにより、コードベース全体を検索することなく、問題を理解し、効率的に修正することができます。

    Explain potential nil dereference in GoLand

クイックドキュメントでナラビリティ情報を表示する

GoLand は、クイックドキュメントポップアップに nil 可能性の情報を直接表示するようになりました。これにより、関数が nil を返す可能性があるかどうか、nil 以外のパラメーターやレシーバーを期待しているかどうかをすぐに確認できます。

  1. コード内の関数、パラメーター、レシーバーにキャレットを置きます。

  2. Ctrl+Q を押すとクイックドキュメントポップアップが表示されます。ポップアップ内でナラビリティ情報セクションを探してください。

    Nilability info in quick documentation

リソースリーク分析

リソースリーク分析は、開かれたものの適切に閉じられていないファイルやネットワーク接続などのリソースを特定できます。Go 言語では、このような問題はメモリリーク、パフォーマンスの低下、微細なバグ、システムリソースの枯渇につながり、重大なランタイムエラーにつながる可能性があります。

GoLand では、このインスペクションがコードをローカルで解析し、単一の関数内で潜在的なリソースリークを検出します。io.Closer インターフェースを実装し、他の関数から返されるリソースを検出します。

The resource leak inspection settings

分析の仕組み

インスペクションは関数内のすべての制御フローパスをチェックし、リソースが適切に閉じられていることを確認します。リソースが閉じられていないパスが少なくとも 1 つある場合、GoLand はそれをハイライト表示し、潜在的なリソースリークに関する警告を表示します。

例:

func processLogFile(filename string) error { file, err := os.Open(filename) // resource leak if err != nil { return err } info, err := file.Stat() if err != nil { return err // the file is not closed } if info.Size() == 0 { return fmt.Errorf("empty file") // the file is not closed } defer file.Close() _, _ = io.Copy(io.Discard, file) return nil }

ここでの問題は、ファイルが閉じられていない早期リターンが発生することです。

警告が表示されない場合

インスペクションは誤検知を回避するように設計されています。関数がリソースの所有権を譲渡する場合、つまりリソースがプログラムの別の部分に渡され、後で閉じられる可能性がある場合、警告は表示されません。このような場合、GoLand はリソースが正しく処理されたとみなします。

リソースが次の場合には警告は表示されません:

  • 現在の関数から返される

  • 匿名関数で使用される

  • グローバル変数に代入

  • 構造体、スライス、マップに格納される

例: 次の関数は警告をトリガーしません。

func createFile() io.Closer { f, _ := os.Open("/data/source.db") return f // ownership is transferred }

再割り当てによる漏洩の検出

インスペクションは、再割り当てによって生じたリークも検出できます。例:

func _() { f, _ := os.Open("/data/source.db") // resource leak! if true { f, _ = os.Open("/data/source.db") } f.Close() }

ここで、変数 fClose() が呼び出される前に再割り当てされるため、最初の openFile() 呼び出しによって返されるリソースは決して閉じられません。

コードインスペクションと Qodana

Qodana プラグインをインストールする

この機能は、インストールして有効にする必要がある Qodana(英語) プラグインに依存しています。

  1. Ctrl+Alt+S を押して設定を開き、プラグインを選択します。

  2. マーケットプレースタブを開き、Qodana プラグインを見つけて、インストールをクリックします (プロンプトが表示されたら、IDE を再起動します)。

IDE でコードインスペクションを実行することに加えて、Qodana を使用してコードをインスペクションできます。

  • GoLand インスペクションを IDE を含めてローカルで実行し、CI/CD パイプラインの一部として実行します。

  • CI/CD インフラストラクチャを使用して、リソースを消費するインスペクションを実行します。

  • CI システムの品質ゲートを使用して品質基準を強化します。

  • IDE と CI ツールの両方で同じインスペクションプロファイルを共有します。

  • セキュリティチェックやライセンス監査など、Qodana でのみ利用できるインスペクションにアクセスします。

  • インスペクション結果の履歴概要にアクセスします。

    コミット間でインスペクションの結果を比較して、進行状況をよりよく理解できます。

詳細は、Qodana を参照してください。

Qodana report
2026 年 2 月 27 日

関連ページ:

スコープとファイルの色

スコープは、プロジェクト内のファイルとフォルダーの名前付きセットです。スコープを使用すると、IDE のさまざまなビューでプロジェクト項目を視覚的に区別し、特定の操作の範囲を制限できます。スコープを使用すると、ファイルを論理的に整理できます。たとえば、テストソースをテストスコープに配置し、本番環境のコードを本番環境スコープに配置することができます。これにより、大スコーププロジェクトでの作業が容易になります。インスペクションをテストのみで実行すると、コードベース全体で実行するよりも高速になります。G...

インスペクションの重大度を変更する

インスペクション重大度レベルは、検出されたコードの問題がプロジェクトに与える影響の深刻度を示します。GoLand には、定義済みの一連の重大度レベルがあります。エラー構文エラー警告バグを引き起こす可能性がある、または拡張が必要なコードの断片弱い警告改善または最適化できるコードの断片 (冗長なコード、重複したコードフラグメントなど) サーバーの問題外部ビルドサーバー (TeamCity など) に起因する問題文法エラー文法の間違い。この重大度は、バンドルされている自然言語プラグインに起因します。詳細...

インスペクションプロファイル

インスペクションプロファイルには、有効なインスペクション、これらのインスペクションが分析するファイルの範囲、およびインスペクションの重大度設定に関する情報が保持されます。IntelliJ IDEA には、次の 2 種類のプロファイルがあります。グローバルですべてのプロジェクト (IDE レベル) で使用できるプロファイル IDE に保管。1 つのプロジェクト (プロジェクトレベル) でのみ使用可能なプロファイルプロジェクトに保管。レベル間でプロファイルを移動する詳細を参照してください。GoLand...

Qodana について

Qodana は、チームでの作業に最適な JetBrains によるスマートコード品質プラットフォームです。Java、JavaScript、TypeScript、PHP、Kotlin、Python、Go、C# など 60 以上の言語で記述されたコードを分析できます。Qodana を CI/CD パイプラインまたはローカルで実行する:Qodana は、Azure パイプライン、CircleCI、GitHub、TeamCity のネイティブソリューションを提供します。他の CI/CD システムでは、D...

安全な削除

GoLand を使用すると、安全な削除リファクタリングを使用して、ソースコードからファイルを安全に削除できます。GoLand はファイルを削除する前に、使用箇所を検索し、見つかった場合は、GoLand でチェックして必要な調整を行うことができます。安全な削除を呼び出すリファクタリング削除する項目を選択します。メインメニューまたはコンテキストメニューからを選択するか、を押します。表示されるダイアログで、必要なオプションを選択し、OK をクリックします。利用可能なオプションは以下のとおりです。コメン...

ファイルとプロジェクト全体の分析

GoLand は、エディターで現在開いているファイル内のコードを分析し、入力中に検出された問題をハイライト表示します。また、プロジェクト全体のエラーを自動的にチェックします。さらに、選択したファイルスコープでインスペクションまたはインスペクションのグループを手動で実行できます。この場合、検出されたすべての問題の包括的なレポートが表示されます。現在のファイル:IDE は継続的にコードをチェックし、問題を検索します。エディターの右上隅にあるウィジェットには、現在のファイルで検出された各重大度の問題...