{"meta":{"title":"ワークフロー成果物を使ったデータの格納と共有","intro":"成果物を使って、ワークフロー内のジョブ間でデータを共有し、ワークフローが完了したらデータを格納します。","product":"GitHub Actions","breadcrumbs":[{"href":"/ja/enterprise-server@3.18/actions","title":"GitHub Actions"},{"href":"/ja/enterprise-server@3.18/actions/tutorials","title":"チュートリアル"},{"href":"/ja/enterprise-server@3.18/actions/tutorials/store-and-share-data","title":"データを格納して共有する"}],"documentType":"article"},"body":"# ワークフロー成果物を使ったデータの格納と共有\n\n成果物を使って、ワークフロー内のジョブ間でデータを共有し、ワークフローが完了したらデータを格納します。\n\n## 前提条件\n\nこのチュートリアルを完了する前に、ワークフロー成果物を理解しておく必要があります。 「[ワークフロー成果物](/ja/enterprise-server@3.18/actions/concepts/workflows-and-actions/workflow-artifacts)」を参照してください。\n\n## ビルドおよびテストの成果物をアップロードする\n\nコードのビルドおよびテストからの出力によって、多くの場合、エラーのデバッグに使用できるファイルと、デプロイできる本番コードが生成されます。 リポジトリにプッシュされるコードをビルドしてテストし、成功または失敗のステータスをレポートするワークフローを構成することができます。 デプロイメントに使用するビルドおよびテスト出力をアップロードし、失敗したテストまたはクラッシュをデバッグしてテストスイートのカバレッジを確認できます。\n\n成果物をアップロードするには、`upload-artifact` アクションを使用できます。 成果物をアップロードする場合は、単一のファイルまたはディレクトリ、あるいは複数のファイルまたはディレクトリを指定できます。 また、特定のファイルやディレクトリを除外したり、ワイルドカードパターンを使用したりすることもできます。 成果物の名前を指定することをお勧めしますが、名前を指定しない場合は、`artifact` が既定の名前として使用されます。 構文の詳細については、`actions/upload-artifact` actionGitHub Enterprise Server アクションを参照してください。\n\n### 例\n\nたとえば、リポジトリあるいはWebアプリケーションにはCSSやJavaScriptに変換しなければならないSASSやTypeScriptが含まれているかもしれません。 ビルド構成で `dist` ディレクトリにコンパイル後のファイルを出力すると仮定すると、テストがすべて正常に完了した場合、`dist` ディレクトリにあるファイルが Web アプリケーション サーバーにデプロイされます。\n\n```text\n|-- hello-world (repository)\n|   └── dist\n|   └── tests\n|   └── src\n|       └── sass/app.scss\n|       └── app.ts\n|   └── output\n|       └── test\n|\n```\n\nこの例で示しているのは、`src` ディレクトリにコードをビルドして、`tests` ディクトリでテストを実行する Node.js プロジェクトのワークフローを作成する方法です。 実行中の `npm test` によって、`code-coverage.html` という名前で、`output/test/` ディレクトリに保存されるコード カバレッジ レポートが生成されると想定できます。\n\nこのワークフローでは、`dist` ディレクトリに運用環境の成果物をアップロードしますが、Markdown ファイルはその対象外です。 また、`code-coverage.html` レポートも別の成果物としてアップロードされます。\n\n```yaml copy\nname: Node CI\n\non: [push]\n\njobs:\n  build_and_test:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v6\n      - name: npm install, build, and test\n        run: |\n          npm install\n          npm run build --if-present\n          npm test\n      - name: Archive production artifacts\n        uses: actions/upload-artifact@v3\n        with:\n          name: dist-without-markdown\n          path: |\n            dist\n            !dist/**/*.md\n      - name: Archive code coverage results\n        uses: actions/upload-artifact@v3\n        with:\n          name: code-coverage-report\n          path: output/test/code-coverage.html\n```\n\n## カスタムの成果物の保持期間を設定する\n\nワークフローによって作成された個々の成果物のカスタム保存期間を定義できます。 ワークフローを使用して新しい成果物を作成する場合、`retention-days` アクションで `upload-artifact` を使用できます。 この例は、`my-artifact` という名前の成果物に 5 日間のカスタム保存期間を設定する方法を示しています。\n\n```yaml copy\n  - name: 'Upload Artifact'\n    uses: actions/upload-artifact@v3\n    with:\n      name: my-artifact\n      path: my_file.txt\n      retention-days: 5\n```\n\n`retention-days` の値は、リポジトリ、Organization、または Enterprise によって設定された保持制限を超えることはできません。\n\n## ワークフロー実行中の成果物のダウンロード\n\n以前にアップロードした成果物は、ワークフロー実行中に [`actions/download-artifact`](https://github.com/actions/download-artifact) アクションを使ってダウンロードできます。\n\n> \\[!NOTE]\n> 同じワークフロー実行中にアップロードされたワークフロー内の成果物のみをダウンロードできます。\n\n個々の成果物をダウンロードするには、成果物の名前を指定します。 名前を指定せずに成果物をアップロードした場合、既定の名前は `artifact` です。\n\n```yaml\n- name: Download a single artifact\n  uses: actions/download-artifact@v3\n  with:\n    name: my-artifact\n```\n\nまた、名前を指定しないことで、ワークフロー実行のすべての成果物をダウンロードすることもできます。 これは、多数の成果物を扱っている場合に便利です。\n\n```yaml\n- name: Download all workflow run artifacts\n  uses: actions/download-artifact@v3\n```\n\nワークフロー実行のすべての成果物をダウンロードすると、各成果物のディレクトリがその名前を使用して作成されます。\n\n構文の詳細については、`actions/download-artifact` アクションGitHub Enterprise Serverアクションを参照してください。\n\n## ワークフロー内のジョブ間でのデータの受け渡し\n\n`upload-artifact` アクションと `download-artifact` アクションを使用すると、ワークフローのジョブ間でデータを共有できます。 以下のワークフローの例では、同じワークフローのジョブ間でデータを受け渡す方法を説明しています。 詳細については、`actions/upload-artifact`および`download-artifact`GitHub Enterprise Serverに対するアクションを参照してください。\n\n前のジョブの成果物に依存するジョブは、前のジョブが正常に完了するまで待つ必要があります。 このワークフローでは、`needs` キーワードを使用して、`job_1`、`job_2`、`job_3` を順次実行できます。 たとえば、`job_2` では `job_1` 構文を使用することにより `needs: job_1` が必要となっています。\n\nジョブ1は、以下のステップを実行します。\n\n* 数式の計算を実行し、その結果を `math-homework.txt` というテキスト ファイルに保存します。\n* `upload-artifact` アクションを使用して、アーティファクト名が`math-homework.txt``homework`された ファイルをアップロードします。\n\nジョブ2は、前のジョブの結果を利用して、次の処理を実行します。\n\n* 前のジョブでアップロードした `homework` 成果物をダウンロードします。 既定では、`download-artifact` アクションで、ステップが実行されているワークスペース ディレクトリに成果物をダウンロードします。\n  `path` 入力パラメータを使用すると、別のダウンロード ディレクトリを指定できます。\n* `math-homework.txt` ファイル内の値を読み取り、数式の計算を実行して、結果を `math-homework.txt` に再度保存し、その内容を上書きします。\n* `math-homework.txt` ファイルをアップロードします。\n  として渡されます。このアップロードでは、以前にアップロードされた成果物が同じ名前を共有しているため、上書きされます。\n\nジョブ3は、前のジョブでアップロードされた結果を表示して、次の処理を実行します。\n\n* ジョブ 2 から `homework` アーティファクト。\n* 数式の結果をログに出力します。\n\nこのワークフロー例で実行される完全な数式は、`(3 + 7) x 9 = 90` です。\n\n```yaml copy\nname: Share data between jobs\n\non: [push]\n\njobs:\n  job_1:\n    name: Add 3 and 7\n    runs-on: ubuntu-latest\n    steps:\n      - shell: bash\n        run: |\n          expr 3 + 7 > math-homework.txt\n      - name: Upload math result for job 1\n        uses: actions/upload-artifact@v3\n        with:\n          name: homework\n          path: math-homework.txt\n\n  job_2:\n    name: Multiply by 9\n    needs: job_1\n    runs-on: windows-latest\n    steps:\n      - name: Download math result for job 1\n        uses: actions/download-artifact@v3\n        with:\n          name: homework\n      - shell: bash\n        run: |\n          value=`cat math-homework.txt`\n          expr $value \\* 9 > math-homework.txt\n      - name: Upload math result for job 2\n        uses: actions/upload-artifact@v3\n        with:\n          name: homework\n          path: math-homework.txt\n\n  job_3:\n    name: Display results\n    needs: job_2\n    runs-on: macOS-latest\n    steps:\n      - name: Download math result for job 2\n        uses: actions/download-artifact@v3\n        with:\n          name: homework\n      - name: Print the final result\n        shell: bash\n        run: |\n          value=`cat math-homework.txt`\n          echo The result is $value\n```\n\nワークフローの実行により、生成された成果物がアーカイブされます。 アーカイブされた成果物のダウンロードについて詳しくは、「[ワークフローの成果物をダウンロードする](/ja/enterprise-server@3.18/actions/how-tos/manage-workflow-runs/download-workflow-artifacts)」をご覧ください。"}