{"meta":{"title":"Go でのビルドとテスト","intro":"Go プロジェクトのビルドとテストのための継続的インテグレーション (CI) ワークフローを作成する方法について説明します。","product":"GitHub Actions","breadcrumbs":[{"href":"/ja/enterprise-cloud@latest/actions","title":"GitHub Actions"},{"href":"/ja/enterprise-cloud@latest/actions/tutorials","title":"チュートリアル"},{"href":"/ja/enterprise-cloud@latest/actions/tutorials/build-and-test-code","title":"コードのビルドとテスト"},{"href":"/ja/enterprise-cloud@latest/actions/tutorials/build-and-test-code/go","title":"Go"}],"documentType":"article"},"body":"# Go でのビルドとテスト\n\nGo プロジェクトのビルドとテストのための継続的インテグレーション (CI) ワークフローを作成する方法について説明します。\n\n## はじめに\n\nこのガイドは、Go パッケージのビルド、テスト、公開の方法を紹介します。\n\nGitHub ホステッド ランナーにはプリインストールされたソフトウェアのあるツール キャッシュがあり、Go 用の依存関係が含まれています。 最新のソフトウェアの完全な一覧と、プレインストールされたバージョンの Go については、「[GitHub ホステッド ランナー](/ja/enterprise-cloud@latest/actions/using-github-hosted-runners/about-github-hosted-runners#preinstalled-software)」を参照してください。\n\n## 前提条件\n\nYAMLの構文と、GitHub ActionsでのYAMLの使われ方に馴染んでいる必要があります。 詳しくは、「[GitHub Actions　のワークフロー構文](/ja/enterprise-cloud@latest/actions/using-workflows/workflow-syntax-for-github-actions)」をご覧ください。\n\nGo 言語の基本を理解しておくことをおすすめします。 詳しくは、「[Go の概要](https://golang.org/doc/tutorial/getting-started)」をご覧ください。\n\n## Go ワークフロー テンプレートの使用\n\nすぐに開始するには、リポジトリの `.github/workflows` ディレクトリにワークフロー テンプレートを追加します。\n\nGitHub では、ほとんどの Go プロジェクトで動作する Go ワークフロー テンプレートが提供されています。 このガイドの以降のセクションでは、このワークフロー テンプレートをカスタマイズする方法の例を示します。\n\n1. GitHub で、リポジトリのメイン ページに移動します。\n\n2. リポジトリ名の下にある **\\[<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-play\" aria-label=\"play\" role=\"img\"><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path></svg> Actions]** をクリックします。\n\n   ![\"github/docs\" リポジトリのタブのスクリーンショット。 \\[アクション\\] タブがオレンジ色の枠線で強調表示されています。](/assets/images/help/repository/actions-tab-global-nav-update.png)\n\n3. ワークフローが既にリポジトリ内にある場合は、 **\\[新しいワークフロー]** をクリックします。\n\n4. \\[ワークフローの選択] ページには、推奨されるワークフロー テンプレートの選択が表示されます。 「go」を検索します。\n\n5. ```\n          **[継続的インテグレーション]** をクリックし、ワークフローの選択肢をフィルター処理します。\n   ```\n\n6. 「Go - by GitHub Actions」ワークフローで、**構成**をクリックします。\n\n   ![「ワークフローの選択」ページのスクリーンショット。 「Go」ワークフローの \\[設定\\] ボタンは、オレンジ色のアウトラインで強調されています](/assets/images/help/actions/starter-workflow-go.png)\n\n7. 必要に応じてワークフローを編集します。 例えば、Go のバージョンを変更します。\n\n8. ```\n          **[Commit changes]** をクリックします。\n   ```\n\n`go.yml` ワークフロー ファイルが使用中リポジトリの `.github/workflows` ディレクトリに追加されます。\n\n## Go バージョンの指定\n\n最も簡単に Go のバージョンを指定する方法は、GitHub によって提供される `setup-go` アクションを使用することです。 詳細については、「[`setup-go` アクション](https://github.com/actions/setup-go/)」を参照してください。\n\nGitHub ホストランナーでプレインストールされたバージョンの Go を使うには、`go-version` アクションの `setup-go` プロパティに関連するバージョンを渡します。 このアクションは、各ランナーのツール キャッシュから特定のバージョンの Go を見つけて、必要なバイナリを `PATH` に追加します。 これらの変更は、作業の残りの部分で維持されます。\n\n```\n          `setup-go` アクションは、異なるランナーや異なるバージョンの Go で一貫した動作を保証するのに役立つため、GitHub Actions で Go を使うときに推奨される方法です。 セルフホスト型ランナーを使用している場合は、Go をインストールし、それを `PATH` に追加する必要があります。\n```\n\n### 複数のバージョンの Go の使用\n\n```yaml copy\nname: Go\n\non: [push]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        go-version: [ '1.19', '1.20', '1.21.x' ]\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup Go ${{ matrix.go-version }}\n        uses: actions/setup-go@v5\n        with:\n          go-version: ${{ matrix.go-version }}\n      # You can test your matrix by printing the current Go version\n      - name: Display Go version\n        run: go version\n```\n\n### 特定のバージョンの Go の使用\n\n```\n          `1.20.8` のような特定のバージョンの Go を使うようにジョブを構成できます。 あるいは、最新のマイナーリリースを取得するためにセマンティックバージョン構文を使うこともできます。 この例では、最新のパッチ リリースである Go 1.21 を使います:\n```\n\n```yaml copy\n      - name: Setup Go 1.21.x\n        uses: actions/setup-go@v5\n        with:\n          # Semantic version range syntax or exact version of Go\n          go-version: '1.21.x'\n```\n\n## 依存関係のインストール\n\n```\n          `go get` を使って依存関係をインストールできます。\n```\n\n```yaml copy\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: '1.21.x'\n      - name: Install dependencies\n        run: |\n          go get .\n          go get example.com/octo-examplemodule\n          go get example.com/octo-examplemodule@v1.3.4\n```\n\n### 依存関係のキャッシング\n\n```\n          [\n          `setup-go` アクション](https://github.com/actions/setup-go)を使うと、依存関係をキャッシュおよび復元できます。 既定では、`setup-go` アクションを使っているとキャッシュが有効になります。\n\n          `setup-go` アクションは、リポジトリ ルートで依存関係ファイル `go.sum` を検索し、依存関係ファイルのハッシュをキャッシュ キーの一部として使います。\n```\n\n依存関係ファイルを複数使っている場合、またはそれらが別のサブディレクトリにある場合、`cache-dependency-path` パラメーターを使うことができます。\n\n```yaml copy\n      - name: Setup Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: '1.17'\n          cache-dependency-path: subdir/go.sum\n```\n\nカスタム要件がある場合、またはキャッシュに対してより細かい制御が必要な場合は、[`cache` アクション](https://github.com/marketplace/actions/cache)を使用できます。 詳しくは、「[依存関係キャッシュのリファレンス](/ja/enterprise-cloud@latest/actions/using-workflows/caching-dependencies-to-speed-up-workflows)」をご覧ください。\n\n## コードのビルドとテスト\n\nローカルで使うのと同じコマンドを、コードのビルドとテストに使えます。 このワークフローの例では、ジョブで `go build` と `go test` を使う方法を示します。\n\n```yaml copy\nname: Go\non: [push]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: '1.21.x'\n      - name: Install dependencies\n        run: go get .\n      - name: Build\n        run: go build -v ./...\n      - name: Test with the Go CLI\n        run: go test\n```\n\n## 成果物としてのワークフローのデータのパッケージ化\n\nワークフローが完了すると、結果の成果物を分析のためにアップロードできます。 たとえば、ログファイル、コアダンプ、テスト結果、スクリーンショットを保存する必要があるかもしれません。 次の例では、`upload-artifact` アクションを使ってテスト結果をアップロードする方法を示します。\n\n詳しくは、「[ワークフロー成果物を使ったデータの格納と共有](/ja/enterprise-cloud@latest/actions/using-workflows/storing-workflow-data-as-artifacts)」をご覧ください。\n\n```yaml copy\nname: Upload Go test results\n\non: [push]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        go-version: [ '1.19', '1.20', '1.21.x' ]\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: ${{ matrix.go-version }}\n      - name: Install dependencies\n        run: go get .\n      - name: Test with Go\n        run: go test -json > TestResults-${{ matrix.go-version }}.json\n      - name: Upload Go test results\n        uses: actions/upload-artifact@v4\n        with:\n          name: Go-results-${{ matrix.go-version }}\n          path: TestResults-${{ matrix.go-version }}.json\n```"}