ビルド制約とベンダリング
ビルド制約とベンダリングモードは、ビルドプロセスを微調整するために使用できるツールです。ビルド制約では、パッケージに含めるファイルを決定するルールを定義します。ベンダリングモードを有効にすると、プロジェクト内に保存されている依存関係パッケージのみを使用してアプリケーションがビルドされるようになります。このアプローチにより、パッケージに特定のファイルセットを含め、ローカルで変更またはパッチを適用した依存関係を使用できます。
ビルド制約
ビルド制約 (ビルドタグとも呼ばれる) は、パッケージにファイルが含まれる条件を概説する行コメントです。これらのタグは、オペレーティングシステム、アーキテクチャ、Go バージョン、コンパイラー、cgo サポート、その他のターゲットシステムのニーズなどの要件を指定できます。以下の例では、このファイルが次の基準を満たすターゲットシステム用であることを宣言しています。
//+build darwin,cgo linux
はビルドタグの古い構文で、Go ではまだ認識されています。次の 2 つの条件セットを指定します。darwin,cgo
:darwin
プラットフォーム (macOS) 用にコンパイルするとき、およびcgo
が有効なときにビルドに含めます。cgo
を使用すると、Go プログラムに C コードを組み込むことができます。linux
: Linux プラットフォーム用にコンパイルするときに含めます。
スペースは OR 演算子として機能します。つまり、cgo が有効になっている macOS または Linux の場合、ファイルを含める必要があります。
//go:build (darwin && cgo) || linux
は、Go 1.17 で導入されたビルドタグの新しい構文で、より明示的なブール式形式を使用します。(darwin && cgo) || linux
: ファイルは、上記の条件と同じように、cgo が有効になっている macOS のビルド、または Linux のビルドに含まれている必要があります。
![ビルド制約 Build constraints](https://resources.jetbrains.com/help/img/idea/2024.1/go_example_build_constraints.png)
GoLand は、これらの制約を使用して、検証、解決、シンボルの提案中にどのファイルを無視する必要があるかを決定できます。ファイルがターゲットシステムの要件を満たしていない場合、GoLand は通知を表示します。例: スクリーンショット上の次の条件は、「プロジェクトのビルド制約を構成する」手順の設定と競合します。
![ビルドの制約に関する通知 Notification about build constraints](https://resources.jetbrains.com/help/img/idea/2024.1/go_example_build_constraints_invalid.png)
プロジェクトのビルド制約を構成する
Go の go build コマンドは、ビルド制約に基づいてファイルを条件付きでコンパイルするための -tags
引数によるカスタムタグの使用をサポートしています。これらのタグを使用すると、ビルドプロセスに含めるファイルの条件を指定できます。
Go ソースファイルでは、ファイルの先頭に // +build
または //go:build
ディレクティブとそれに続くカスタムタグを含むコメントを配置することで、ビルド制約を定義できます。
設定を開き(Ctrl+Alt+S)、
に移動します。ドロップダウンリストから、ターゲットシステムの期待値を選択します。カスタムタグがある場合は、カスタムタグフィールドで指定します(タグとしてスペースを区切りとして使用します)。
OK をクリックします。
Go 実験の使用
Ctrl+Alt+S を押して設定を開き、
に移動します。いずれかのフィールドに Go Experiments のタグを入力します。
カスタムタグ : タグを次の形式で入力します:
goexperiment.rangefunc goexperiment.loopvar
タグ同士を区切るにはスペースを使用します。実験 : 次の形式でタグを入力します:
rangefunc,loopvar
タグ同士を区切るにはコンマを使用します。
タグ名は対応するパッケージ内にあります。たとえば、
iter
パッケージにアクセスすると、go:build
タグの直後にタグ名が表示されます。特にiter
パッケージの場合、タグはgoexperiment.rangefunc
です。カスタムタグフィールドには完全なタグを入力し、実験フィールドにはgoexperiment.
に続くセグメントのみを入力します。
ビルドタグフィールドの説明
ビルドタグまたは制約の詳細については、pkg.go.dev でのビルド制約(英語)を参照してください。
フィールド | ビルドタグ | 説明 |
---|---|---|
オペレーティングシステム |
| |
アーキテクチャー |
| |
Go バージョン |
| インストールされている Go のバージョンを示します。これは、 |
コンパイラー | ランタイムで使用可能なものに基づいて、 | |
CGO サポート |
| cgo が有効 (1) か無効 (0) かを示し、C コードを含めることができるかどうかに影響します。 |
カスタムタグ | 例: 次のスクリーンショットでは、 ![]() | |
実験 |
| オンまたはオフにできる Go ツールチェーン実験のリスト。主に Go 自体に取り組んでいる開発者向けです。 |
ビルド制約に複数の条件を使用する
ビルド制約の新しい構文が導入されたため、複数の条件を使用する場合の 2 つの構文の違いを示す次の表を考慮してください。
|
|
---|---|
//+build darwin,cgo linux コンマ(論理積として)と空白 (論理和として) | //go:build (darwin && cgo) || linux |
ベンダリング
ベンダリングモードを有効にして、プロジェクト内の vendor ディレクトリに格納されている依存関係パッケージのみを使用してアプリケーションを構築します。このモードでは、Go コマンドは go.mod の依存関係の説明を無視し、vendor ディレクトリに依存関係の正しいコピーがあると見なします。デフォルトでは、Go モジュールを使用すると、vendor ディレクトリはビルド中に無視されます。
Go 1.14 RC では、自動ベンダリングモードが Go の組み込み機能になりました。Go 1.14 RC 以降、GoLand ではデフォルトで自動ベンダリングモードも有効になります。たとえば、別の言語で使用されている vendor フォルダーを含むモノリポジトリがある場合、プロジェクトごとにベンダリングを無効にすることができます。
ベンダリングサポートを自動的に有効にするチェックボックスを使用して自動ベンダリングを制御できます。チェックボックスを選択すると、自動ベンダリングが有効になります。vendor ディレクトリをモジュールに追加すると、IDE はそれを使用します。ディレクトリを削除すると、GoLand はグローバル Go モジュールキャッシュを使用します。
ベンダリングモードを切り替える
Ctrl+Alt+S を押して設定を開き、
に移動します。ベンダリングサポートを自動的に有効にするチェックボックスをオフまたは選択して、OK をクリックします。
関連ページ:
![](https://resources.jetbrains.com/help/img/idea/2024.1/go_select_an_asdf_go_version_for_the_project.png)
GOROOT および GOPATH
Go ツールはソースコードの特定のレイアウトを期待している: GOROOT と GOPATH は、このレイアウトを定義する環境変数です。GOROOT は、Go SDK の場所を定義する変数です。異なる Go バージョンを使用する予定がない限り、この変数を変更する必要はありません。Go 開発では、GOPATH 変数は、Unix ではデフォルトで、Windows ではデフォルトでに設定され、いくつかの目的に使用されます。バイナリは go install によってにインストールされ、はデフォルトでにイ...
![](https://pleiades.io/icons/goland.png)
コンテンツルート
GoLand では、コンテンツは現在作業しているファイルの集まりであり、おそらくサブフォルダーの階層に編成されています。この階層の最上位にあるフォルダーは、コンテンツルートフォルダーまたはコンテンツルート (と表示) と呼ばれます。プロジェクトには少なくとも 1 つのコンテンツルートフォルダーがあり、既定ではプロジェクトフォルダー自体です。いくつかのコンテンツルートを持つことで、共通の直系親を持たない複数のディレクトリからのファイルを扱うことができます。これは、静的コンテンツ(アイコンなど)を使用...