[{"data":1,"prerenderedAt":1896},["ShallowReactive",2],{"/ja-jp/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery":3,"navigation-ja-jp":1116,"banner-ja-jp":1545,"footer-ja-jp":1553,"blog-post-authors-ja-jp-Daniel Helfand":1794,"blog-related-posts-ja-jp-how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery":1809,"blog-promotions-ja-jp":1833,"next-steps-ja-jp":1887},{"id":4,"title":5,"authors":6,"body":8,"category":1092,"date":1093,"description":1094,"extension":1095,"externalUrl":1096,"faq":1096,"featured":1097,"heroImage":1098,"meta":1099,"navigation":1100,"path":1101,"seo":1102,"slug":1106,"stem":1107,"tags":1108,"template":1114,"updatedDate":1096,"__hash__":1115},"blogPosts/ja-jp/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery.md","継続的デリバリーにおける信頼できる情報源としてOCIイメージを活用する方法",[7],"Daniel Helfand",{"type":9,"value":10,"toc":1080},"minimark",[11,22,27,41,79,94,98,101,110,119,123,143,146,151,166,170,182,185,188,195,217,253,264,268,271,462,476,514,539,548,565,569,578,999,1019,1037,1054,1058,1061,1076],[12,13,14,15,21],"p",{},"gitリポジトリをデプロイメントアーティファクトとして使用しない場合でも、それを",[16,17,20],"a",{"href":18,"rel":19},"https://about.gitlab.com/ja-jp/topics/gitops/",[],"GitOps","と呼ぶのは適切なのでしょうか？gitは依然としてGitOpsワークフローの中心的な要素ですが、近年では、インフラ定義をOpen Container Initiative（OCI）アーティファクトとしてコンテナレジストリに保存し、それをGitOpsデプロイのソース（情報源）とする手法が広まりつつあります。この記事では、この傾向の背後にある考え方、およびGitLabの機能がどのようにGitOpsワークフローの進化を支えているのかについて詳しくご説明します。",[23,24,26],"h2",{"id":25},"gitopsとは","GitOpsとは？",[12,28,29,34,35,40],{},[16,30,33],{"href":31,"rel":32},"https://opengitops.dev/",[],"OpenGitOps","プロジェクトでは、GitOpsの実践に関する以下の",[16,36,39],{"href":37,"rel":38},"https://opengitops.dev/#principles",[],"4つの原則","を定義しています。",[42,43,44,59,62,65],"ul",{},[45,46,47,52,53,58],"li",{},[16,48,51],{"href":49,"rel":50},"https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#software-system",[],"GitOpsで管理されるシステム","は、",[16,54,57],{"href":55,"rel":56},"https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#declarative-description",[],"望ましい状態が宣言的に表現","されていること。",[45,60,61],{},"望ましい状態は、不変性とバージョン管理が保証される形で保存され、完全なバージョン履歴が保持されていること。",[45,63,64],{},"ソフトウェアエージェントは、望ましい状態の宣言をソースから自動的にプルすること。",[45,66,67,68,73,74,78],{},"ソフトウェアエージェントは、実際のシステム状態を",[16,69,72],{"href":70,"rel":71},"https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#continuous",[],"継続的","に監視し、",[16,75,77],{"href":70,"rel":76},[],"望ましい状態の適用を試みる","こと。",[12,80,81,82,87,88,93],{},"GitOpsの一例として、マイクロサービスのKubernetesマニフェストをGitLabプロジェクトに保存することが挙げられます。これらのKubernetesリソースは、マイクロサービスがデプロイされたKubernetesクラスター上で実行されている",[16,83,86],{"href":84,"rel":85},"https://kubernetes.io/docs/concepts/architecture/controller/",[],"コントローラー","によって継続的に調整されます。これにより、エンジニアは通常のコード作業と同じワークフローを使用してインフラを管理できます。たとえば、マージリクエストを作成し、変更を加えてレビューしたり、変更にバージョン管理を適用することができます。GitOpsは、",[16,89,92],{"href":90,"rel":91},"https://about.gitlab.com/topics/gitops/#cicd",[],"構成ドリフトを防ぐ","といった運用上の利点もあり、エンジニアが特定の展開結果に至った変更を監査するのにも役立ちます。",[23,95,97],{"id":96},"gitopsワークフローにおけるgitの利点と制限","GitOpsワークフローにおけるgitの利点と制限",[12,99,100],{},"gitはGitOpsワークフローにおいて不可欠な要素ではありますが、もともとgitリポジトリはGitOpsコントローラによってデプロイされることを前提に設計されたものではありません。gitによってエンジニア同士が連携しながらインフラに変更を加えたり、その後変更を監査したりすることはできます。しかし、コントローラーが正常にデプロイを実行するために、gitリポジトリ全体をダウンロードする必要はありません。GitOpsコントローラーが必要とするのは、特定の環境のインフラ定義だけです。",[12,102,103,104,109],{},"さらに、デプロイプロセスにおいて重要なのは、デプロイの変更が信頼できるソースから行われたものであることを確認するために、",[16,105,108],{"href":106,"rel":107},"https://docs.sigstore.dev/about/overview/#why-cryptographic-signing",[],"デプロイに署名して検証","することです。Gitのコミットは、GitOpsコントローラーによって署名・検証することが可能ですが、コミットはデプロイに関連しない他の詳細（ドキュメントの変更、他の環境の更新、Gitリポジトリの再構成など）を含むこともあります。また、1回のデプロイが複数のコミットにまたがる場合があるため、デプロイ全体が十分に反映しきれないこともあります。これもまた、このgit機能が設計されていないケースのように感じます。",[12,111,112,113,118],{},"GitOpsワークフローにおけるgitのもう一つの課題は、想定以上に自動化が進んでしまう可能性があることです。監視しているブランチに変更をマージすると、すぐにデプロイされてしまいます。これは、gitの外側にプロセスを制御する仕組みがないためです。たとえば、金曜日の午後遅くにデプロイが行われないようにするにはどうすればよいでしょうか？あるいは、デプロイ担当のチームが特定のGitLabプロジェクトで変更をマージする権限を持っていない場合、どう対処すればよいのでしょうか？OCIイメージを使用することで、プロセスにパイプラインが追加され、",[16,114,117],{"href":115,"rel":116},"https://docs.gitlab.com/ja-jp/ci/environments/protected_environments/",[],"承認やデプロイの停止","といったデリバリー制御の機能を活用できるようになります。",[23,120,122],{"id":121},"ociイメージ","OCIイメージ",[12,124,125,130,131,136,137,142],{},[16,126,129],{"href":127,"rel":128},"https://opencontainers.org/",[],"Open Container Initiative","は、コンテナ形式に関する標準を定義するために貢献してきました。多くのエンジニアは、Dockerfileを使用してコンテナイメージを作成することに慣れていますが、Kubernetesマニフェストをコンテナレジストリに保存することにはあまり馴染みがないかもしれません。",[16,132,135],{"href":133,"rel":134},"https://docs.gitlab.com/ja-jp/user/packages/container_registry/",[],"GitLabのコンテナレジストリ","はOCI準拠であるため、特定の環境向けのKubernetesマニフェストをコンテナレジストリにプッシュすることができます。これにより、",[16,138,141],{"href":139,"rel":140},"https://about.gitlab.com/blog/why-did-we-choose-to-integrate-fluxcd-with-gitlab/",[],"Flux CD","のようなGitOpsコントローラーは、gitリポジトリ全体をクローンすることなく、このOCIアーティファクトに保存されたマニフェストを利用してデプロイを実行できます。",[12,144,145],{},"GitOpsワークフローでは、gitリポジトリにマイクロサービスがデプロイされるすべての環境のインフラ定義が含まれていることがよくあります。特定の環境向けのKubernetesマニフェストをパッケージ化することで、Flux CDはデプロイに必要な最小限のファイルだけをダウンロードして、特定の環境へのデプロイを実行できます。",[147,148,150],"h3",{"id":149},"ociアーティファクトのセキュリティ上の利点","OCIアーティファクトのセキュリティ上の利点",[12,152,153,154,159,160,165],{},"前述のとおり、環境にデプロイされるアーティファクトに署名し、検証することで、ソフトウェアプロジェクトのセキュリティが一層強化されます。Kubernetesマニフェストがコンテナレジストリにプッシュされた後、",[16,155,158],{"href":156,"rel":157},"https://docs.sigstore.dev/quickstart/quickstart-cosign/",[],"Sigstore Cosign","のようなツールを使用してOCIイメージに秘密鍵で署名できます。この秘密鍵は、GitLabプロジェクト内の",[16,161,164],{"href":162,"rel":163},"https://docs.gitlab.com/ja-jp/ci/variables/",[],"CI/CD変数","として安全に保存できます。その後、Flux CDはKubernetesクラスターに保存された公開鍵を使用して、デプロイが信頼できるソースから来ていることを確認できます。",[23,167,169],{"id":168},"gitlabを使ってociイメージをプッシュして署名する方法","GitLabを使ってOCIイメージをプッシュして署名する方法",[12,171,172,173,177,178,181],{},"GitLabは、OCIイメージのパッケージ化、署名、デプロイのプロセスを簡素化する多くの機能を提供しています。GitOpsワークフローにおけるGitLabプロジェクト構成の一般的な方法は、各マイクロサービスのコード用に個別のGitLabプロジェクトを用意し、すべてのマイクロサービスに共通する単一のインフラリポジトリを持つというものです。アプリケーションが",[174,175,176],"code",{},"n","個のマイクロサービスで構成されている場合、アプリケーションには",[174,179,180],{},"n + 1","個のGitLabプロジェクトが必要になります。",[12,183,184],{},"コードプロジェクトで作成されるアーティファクトは、通常、アプリケーションをパッケージ化するために使用されるコンテナイメージです。インフラプロジェクトまたはデリバリープロジェクトには、各マイクロサービスをスケールさせ、トラフィックを提供するために必要なリソースを定義したKubernetesマニフェストが含まれます。このプロジェクトで作成されるアーティファクトは通常、アプリケーションと他のマニフェストをKubernetesにデプロイするために使用されるOCIイメージです。",[12,186,187],{},"この構成では、環境の分離はKubernetesマニフェストを別々のフォルダに定義することで行われます。これらのフォルダは、アプリケーションをホストする環境（開発、ステージング、本番など）を表します。コードプロジェクトに変更が加えられ、新しいコンテナイメージがプッシュされた場合、その変更をGitLabのFlux CDとのインテグレーションを使ってデプロイするために必要なのは、環境フォルダ内のマニフェストを編集して新しいイメージ参照を追加し、マージリクエストを作成することだけです。マージリクエストのレビュー、承認、マージが実行されると、デリバリープロジェクトのCI/CDジョブが新しいOCIイメージをプッシュし、Flux CDがそれを受け取って新しい環境にデプロイします。",[12,189,190],{},[191,192],"img",{"alt":193,"src":194},"OCIイメージ - フローチャート","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097611/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097611046.png",[12,196,197,198,203,204,210,211,216],{},"OCIイメージへの署名は、CosignをプロジェクトのCI/CDジョブに組み込むだけで簡単に行えます。以下のコマンドをローカルで実行することで、Cosignを使って新しい公開鍵と秘密鍵を生成できます。その際は、",[16,199,202],{"href":200,"rel":201},"https://gitlab.com/gitlab-org/cli/#installation",[],"glab CLI","を使ってGitLabインスタンスにログインし、Cosignコマンド内の",[205,206,207],"span",{},[174,208,209],{},"PROJECT_ID","を",[16,212,215],{"href":213,"rel":214},"https://docs.gitlab.com/ja-jp/user/project/working_with_projects/#access-a-project-by-using-the-project-id",[],"デリバリープロジェクトのID","に置き換えてください。",[218,219,224],"pre",{"className":220,"code":221,"language":222,"meta":223,"style":223},"language-shell shiki shiki-themes github-light","glab auth login\ncosign generate-key-pair gitlab://[PROJECT_ID]\n","shell","",[174,225,226,241],{"__ignoreMap":223},[205,227,230,234,238],{"class":228,"line":229},"line",1,[205,231,233],{"class":232},"s7eDp","glab",[205,235,237],{"class":236},"sYBdl"," auth",[205,239,240],{"class":236}," login\n",[205,242,244,247,250],{"class":228,"line":243},2,[205,245,246],{"class":232},"cosign",[205,248,249],{"class":236}," generate-key-pair",[205,251,252],{"class":236}," gitlab://[PROJECT_ID]\n",[12,254,255,256,259,260,263],{},"cosignコマンドが正常に実行されると、",[174,257,258],{},"COSIGN_PUBLIC_KEY","と",[174,261,262],{},"COSIGN_PRIVATE_KEY","という名前で、プロジェクトのCI/CD変数セクションにCosignキーが追加されていることが確認できます。",[147,265,267],{"id":266},"cicdジョブの例","CI/CDジョブの例",[12,269,270],{},"OCIイメージをプッシュするためのGitLab CI/CDジョブは、以下のような形になります。",[218,272,276],{"className":273,"code":274,"language":275,"meta":223,"style":223},"language-yaml shiki shiki-themes github-light","frontend-deploy:\n  rules:\n  - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n    changes:\n      paths: \n      - manifests/dev/frontend-dev.yaml\n  trigger:\n    include:\n      - component: gitlab.com/components/fluxcd/oci-artifact@0.3.1\n        inputs:\n          version: 0.3.1\n          kubernetes_agent_reference: gitlab-da/projects/tanuki-bank/flux-config:dev\n          registry_image_url: \"oci://$CI_REGISTRY_IMAGE/frontend\"\n          image_tag: dev\n          manifest_path: ./manifests/dev/frontend-dev.yaml\n          flux_oci_repo_name: frontend\n          flux_oci_namespace_name: frontend-dev\n          signing_private_key: \"$COSIGN_PRIVATE_KEY\" \n\n","yaml",[174,277,278,288,295,310,318,327,336,344,352,365,373,385,396,407,418,429,440,451],{"__ignoreMap":223},[205,279,280,284],{"class":228,"line":229},[205,281,283],{"class":282},"shJU0","frontend-deploy",[205,285,287],{"class":286},"sgsFI",":\n",[205,289,290,293],{"class":228,"line":243},[205,291,292],{"class":282},"  rules",[205,294,287],{"class":286},[205,296,298,301,304,307],{"class":228,"line":297},3,[205,299,300],{"class":286},"  - ",[205,302,303],{"class":282},"if",[205,305,306],{"class":286},": ",[205,308,309],{"class":236},"$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n",[205,311,313,316],{"class":228,"line":312},4,[205,314,315],{"class":282},"    changes",[205,317,287],{"class":286},[205,319,321,324],{"class":228,"line":320},5,[205,322,323],{"class":282},"      paths",[205,325,326],{"class":286},": \n",[205,328,330,333],{"class":228,"line":329},6,[205,331,332],{"class":286},"      - ",[205,334,335],{"class":236},"manifests/dev/frontend-dev.yaml\n",[205,337,339,342],{"class":228,"line":338},7,[205,340,341],{"class":282},"  trigger",[205,343,287],{"class":286},[205,345,347,350],{"class":228,"line":346},8,[205,348,349],{"class":282},"    include",[205,351,287],{"class":286},[205,353,355,357,360,362],{"class":228,"line":354},9,[205,356,332],{"class":286},[205,358,359],{"class":282},"component",[205,361,306],{"class":286},[205,363,364],{"class":236},"gitlab.com/components/fluxcd/oci-artifact@0.3.1\n",[205,366,368,371],{"class":228,"line":367},10,[205,369,370],{"class":282},"        inputs",[205,372,287],{"class":286},[205,374,376,379,381],{"class":228,"line":375},11,[205,377,378],{"class":282},"          version",[205,380,306],{"class":286},[205,382,384],{"class":383},"sYu0t","0.3.1\n",[205,386,388,391,393],{"class":228,"line":387},12,[205,389,390],{"class":282},"          kubernetes_agent_reference",[205,392,306],{"class":286},[205,394,395],{"class":236},"gitlab-da/projects/tanuki-bank/flux-config:dev\n",[205,397,399,402,404],{"class":228,"line":398},13,[205,400,401],{"class":282},"          registry_image_url",[205,403,306],{"class":286},[205,405,406],{"class":236},"\"oci://$CI_REGISTRY_IMAGE/frontend\"\n",[205,408,410,413,415],{"class":228,"line":409},14,[205,411,412],{"class":282},"          image_tag",[205,414,306],{"class":286},[205,416,417],{"class":236},"dev\n",[205,419,421,424,426],{"class":228,"line":420},15,[205,422,423],{"class":282},"          manifest_path",[205,425,306],{"class":286},[205,427,428],{"class":236},"./manifests/dev/frontend-dev.yaml\n",[205,430,432,435,437],{"class":228,"line":431},16,[205,433,434],{"class":282},"          flux_oci_repo_name",[205,436,306],{"class":286},[205,438,439],{"class":236},"frontend\n",[205,441,443,446,448],{"class":228,"line":442},17,[205,444,445],{"class":282},"          flux_oci_namespace_name",[205,447,306],{"class":286},[205,449,450],{"class":236},"frontend-dev\n",[205,452,454,457,459],{"class":228,"line":453},18,[205,455,456],{"class":282},"          signing_private_key",[205,458,306],{"class":286},[205,460,461],{"class":236},"\"$COSIGN_PRIVATE_KEY\"\n",[12,463,464,469,470,475],{},[16,465,468],{"href":466,"rel":467},"https://about.gitlab.com/blog/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/",[],"GitLab CI/CDカタログ","には、GitLabが管理する",[16,471,474],{"href":472,"rel":473},"https://gitlab.com/explore/catalog/components/fluxcd",[],"CI/CDコンポーネント（OCIアーティファクトおよびFlux CD向け）","が用意されています。このコンポーネントにより、開発チームはKubernetesマニフェストをOCIイメージとしてGitLabのコンテナレジストリや外部コンテナレジストリにプッシュし、Cosignを使用してOCIイメージに署名を行い、Flux CDを通じて新しくプッシュされたイメージをすぐに環境に同期することができます。",[12,477,478,479,481,482,485,486,259,489,492,493,496,497,500,501,506,507,259,510,513],{},"上記の例では、Flux CD ",[174,480,359],{},"がGitLabプロジェクトの",[174,483,484],{},".gitlab-ci.yml","ファイル内に含まれています。コンポーネントの入力パラメータを使って、ユーザーはイメージのプッシュ先レジストリ（すなわち",[174,487,488],{},"registry_image_url",[174,490,491],{},"image tag","）、プッシュ対象となるKubernetesマニフェストのファイルパス（すなわち",[174,494,495],{},"manifest_path","）、イメージの署名に使用するCosignの秘密鍵（すなわち",[174,498,499],{},"signing_private_key","）、そして環境への更新同期に必要なKubernetes名前空間とFlux CDの ",[16,502,505],{"href":503,"rel":504},"https://fluxcd.io/flux/components/source/ocirepositories/",[],"OCIRepository","名（すなわち",[174,508,509],{},"flux_oci_namespace_name",[174,511,512],{},"flux_oci_repo_name","）を定義できます。",[12,515,516,519,520,523,524,526,527,532,533,538],{},[174,517,518],{},"kubernetes_agent_reference","を使用することで、各GitLabプロジェクトに",[174,521,522],{},"kubeconfig"," CI/CD変数を個別に保存することなく、GitLab CI/CDジョブがKubernetesクラスターへアクセスするために必要な",[174,525,522],{},"の権限を継承できるようになります。",[16,528,531],{"href":529,"rel":530},"https://docs.gitlab.com/ja-jp/user/clusters/agent/",[],"Kubernetes向けGitLabエージェント","をセットアップすることで、同じ",[16,534,537],{"href":535,"rel":536},"https://docs.gitlab.com/ja-jp/user/group/",[],"GitLabグループ","内のすべてのプロジェクトのCI/CDジョブに、Kubernetesクラスターへのデプロイ権限を継承させるように設定できます。",[12,540,541,542,547],{},"Kubernetesエージェントのコンテキストは、通常、GitLabグループ内でKubernetes向けGitLabエージェントを設定している場所で構成されます。この設定は、通常、Flux CDを管理しているプロジェクトで行うことが推奨されています。CI/CDアクセス向けのエージェント設定について詳しくは、",[16,543,546],{"href":544,"rel":545},"https://docs.gitlab.com/ja-jp/user/clusters/agent/ci_cd_workflow/",[],"CI/CDワークフローのドキュメント","をご覧ください。",[12,549,550,553,554,553,557,560,561,564],{},[174,551,552],{},"$COSIGN_PRIVATE_KEY","、",[174,555,556],{},"$FLUX_OCI_REPO_NAME",[174,558,559],{},"$FRONTEND_DEV_NAMESPACE","といった変数は、機密性の高い情報をCI/CDログ上でマスキングしつつ、簡単にアクセスできるようにするためにCI/CD変数として保存されています。",[174,562,563],{},"$CI_REGISTRY_IMAGE","は、GitLabジョブでデフォルトで利用可能な変数で、対象のGitLabプロジェクトのコンテナレジストリを示します。",[147,566,568],{"id":567},"ociイメージのデプロイ","OCIイメージのデプロイ",[12,570,571,572,577],{},"Flux CDをGitLabプロジェクトと組み合わせて使用することで、マイクロサービスの各環境へのデプロイと署名の検証を自動化できます。Flux CDをGitLabプロジェクトと連携するように設定したら、プッシュしたOCIイメージを同期するために、以下のKubernetesカスタムリソース定義 ",[16,573,576],{"href":574,"rel":575},"https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/",[],"CRD","をプロジェクトに追加できます。",[218,579,581],{"className":273,"code":580,"language":275,"meta":223,"style":223},"apiVersion: v1\nkind: Namespace\nmetadata:\n  name: frontend-dev\n  labels:\n    name: frontend-dev\n---\napiVersion: bitnami.com/v1alpha1\nkind: SealedSecret\nmetadata:\n  name: cosign-public-key\n  namespace: frontend-dev\nspec:\n  encryptedData:\n    cosign.pub: AgAKgLf4VbVzJOmr6++k81LlFayx88AELaUQFNOaXmBF4G+fBfBYeABl0skNvMAa1UrPVNSfMIHgFoYHoO96g576a+epk6V6glOI+++XvYbfsygof3GGxe0nL5Qh2b3ge0fNpyd0kTPSjTj0YUhRhKtMGMRSRw1jrwhNcGxCHK+Byibs52v8Np49KsIkeZKbzLdgYABkrv+k0j7hQM+jR180NpG+2UiRvaXpPuogxkbj61FEqWGrJHk8IVyfl3eh+YhoXxOHGDqko6SUC+bUZPDBlU6yKegO0/8Zq3hwulrSEsEjzRZNK+RFVMOLWWuC6h+WGpYhAMcsZPwjjJ/y29KLNa/YeqkN/cdk488QyEFc6ehCxzhH67HxIn2PDa+KkEOTv2TuycGF+Q00jKIizXF+IwLx/oRb3pTCF0AoAY8D8N3Ey+KfkOjsBON7gGID8GbQiJqX2IgIZxFMk0JRzxbRKOEqn+guLd5Shj7CD1a1Mkk0DxBdbqrGv2XNYUaFPI7xd3rZXUJZlnv+fsmwswsiGWRuXwim45HScWzQnfgLAe7tv3spVEGeaO5apl6d89uN21PBQnfE/zyugB//7ZW9tSp6+CSMyc5HynxI8diafqiwKPgvzLmVWRnkvxJijoXicRr3sCo5RudZPSlnjfd7CKdhwEVvLl7dRR4e/XBMdxCzk1p52Pl+3/kJR+LJii5+iwOpYrpVltSZdzc/3qRd19yMpc9PWpXYi7HxTb24EOQ25i21eDJY1ceplDN6bRtop2quzkjlwVeE2i4cEsX/YG8QBtQbop/3fjiAjKaED3QH3Ul0PECS9ARTScSkcOL3I00Xpp8DyD+xH0/i9wCBRDmH3yKX18C8VrMq02ALSnlP7WCVVjCPzubqKx2LPZRxK9EG0fylwv/vWQzTUUwfbPQZsd4c75bSTsTvxqp/UcFaXA==\n  template:\n    metadata:\n      name: cosign-public-key\n      namespace: frontend-dev\n---\napiVersion: source.toolkit.fluxcd.io/v1beta2\nkind: OCIRepository\nmetadata:\n    name: frontend\n    namespace: frontend-dev\nspec:\n    interval: 1m\n    url: oci://registry.gitlab.com/gitlab-da/projects/tanuki-bank/tanuki-bank-delivery/frontend\n    ref:\n        tag: dev\n    verify:\n      provider: cosign\n      secretRef:\n        name: cosign-public-key\n---\napiVersion: kustomize.toolkit.fluxcd.io/v1\nkind: Kustomization\nmetadata:\n    name: frontend\n    namespace: frontend-dev\nspec:\n    interval: 1m\n    targetNamespace: frontend-dev\n    path: \".\"\n    sourceRef:\n        kind: OCIRepository\n        name: frontend\n    prune: true\n\n",[174,582,583,593,603,610,619,626,635,640,649,658,664,673,682,689,696,706,713,720,729,739,744,754,764,771,780,790,797,808,819,827,837,845,856,864,874,879,889,899,906,915,924,931,940,950,961,969,979,988],{"__ignoreMap":223},[205,584,585,588,590],{"class":228,"line":229},[205,586,587],{"class":282},"apiVersion",[205,589,306],{"class":286},[205,591,592],{"class":236},"v1\n",[205,594,595,598,600],{"class":228,"line":243},[205,596,597],{"class":282},"kind",[205,599,306],{"class":286},[205,601,602],{"class":236},"Namespace\n",[205,604,605,608],{"class":228,"line":297},[205,606,607],{"class":282},"metadata",[205,609,287],{"class":286},[205,611,612,615,617],{"class":228,"line":312},[205,613,614],{"class":282},"  name",[205,616,306],{"class":286},[205,618,450],{"class":236},[205,620,621,624],{"class":228,"line":320},[205,622,623],{"class":282},"  labels",[205,625,287],{"class":286},[205,627,628,631,633],{"class":228,"line":329},[205,629,630],{"class":282},"    name",[205,632,306],{"class":286},[205,634,450],{"class":236},[205,636,637],{"class":228,"line":338},[205,638,639],{"class":232},"---\n",[205,641,642,644,646],{"class":228,"line":346},[205,643,587],{"class":282},[205,645,306],{"class":286},[205,647,648],{"class":236},"bitnami.com/v1alpha1\n",[205,650,651,653,655],{"class":228,"line":354},[205,652,597],{"class":282},[205,654,306],{"class":286},[205,656,657],{"class":236},"SealedSecret\n",[205,659,660,662],{"class":228,"line":367},[205,661,607],{"class":282},[205,663,287],{"class":286},[205,665,666,668,670],{"class":228,"line":375},[205,667,614],{"class":282},[205,669,306],{"class":286},[205,671,672],{"class":236},"cosign-public-key\n",[205,674,675,678,680],{"class":228,"line":387},[205,676,677],{"class":282},"  namespace",[205,679,306],{"class":286},[205,681,450],{"class":236},[205,683,684,687],{"class":228,"line":398},[205,685,686],{"class":282},"spec",[205,688,287],{"class":286},[205,690,691,694],{"class":228,"line":409},[205,692,693],{"class":282},"  encryptedData",[205,695,287],{"class":286},[205,697,698,701,703],{"class":228,"line":420},[205,699,700],{"class":282},"    cosign.pub",[205,702,306],{"class":286},[205,704,705],{"class":236},"AgAKgLf4VbVzJOmr6++k81LlFayx88AELaUQFNOaXmBF4G+fBfBYeABl0skNvMAa1UrPVNSfMIHgFoYHoO96g576a+epk6V6glOI+++XvYbfsygof3GGxe0nL5Qh2b3ge0fNpyd0kTPSjTj0YUhRhKtMGMRSRw1jrwhNcGxCHK+Byibs52v8Np49KsIkeZKbzLdgYABkrv+k0j7hQM+jR180NpG+2UiRvaXpPuogxkbj61FEqWGrJHk8IVyfl3eh+YhoXxOHGDqko6SUC+bUZPDBlU6yKegO0/8Zq3hwulrSEsEjzRZNK+RFVMOLWWuC6h+WGpYhAMcsZPwjjJ/y29KLNa/YeqkN/cdk488QyEFc6ehCxzhH67HxIn2PDa+KkEOTv2TuycGF+Q00jKIizXF+IwLx/oRb3pTCF0AoAY8D8N3Ey+KfkOjsBON7gGID8GbQiJqX2IgIZxFMk0JRzxbRKOEqn+guLd5Shj7CD1a1Mkk0DxBdbqrGv2XNYUaFPI7xd3rZXUJZlnv+fsmwswsiGWRuXwim45HScWzQnfgLAe7tv3spVEGeaO5apl6d89uN21PBQnfE/zyugB//7ZW9tSp6+CSMyc5HynxI8diafqiwKPgvzLmVWRnkvxJijoXicRr3sCo5RudZPSlnjfd7CKdhwEVvLl7dRR4e/XBMdxCzk1p52Pl+3/kJR+LJii5+iwOpYrpVltSZdzc/3qRd19yMpc9PWpXYi7HxTb24EOQ25i21eDJY1ceplDN6bRtop2quzkjlwVeE2i4cEsX/YG8QBtQbop/3fjiAjKaED3QH3Ul0PECS9ARTScSkcOL3I00Xpp8DyD+xH0/i9wCBRDmH3yKX18C8VrMq02ALSnlP7WCVVjCPzubqKx2LPZRxK9EG0fylwv/vWQzTUUwfbPQZsd4c75bSTsTvxqp/UcFaXA==\n",[205,707,708,711],{"class":228,"line":431},[205,709,710],{"class":282},"  template",[205,712,287],{"class":286},[205,714,715,718],{"class":228,"line":442},[205,716,717],{"class":282},"    metadata",[205,719,287],{"class":286},[205,721,722,725,727],{"class":228,"line":453},[205,723,724],{"class":282},"      name",[205,726,306],{"class":286},[205,728,672],{"class":236},[205,730,732,735,737],{"class":228,"line":731},19,[205,733,734],{"class":282},"      namespace",[205,736,306],{"class":286},[205,738,450],{"class":236},[205,740,742],{"class":228,"line":741},20,[205,743,639],{"class":232},[205,745,747,749,751],{"class":228,"line":746},21,[205,748,587],{"class":282},[205,750,306],{"class":286},[205,752,753],{"class":236},"source.toolkit.fluxcd.io/v1beta2\n",[205,755,757,759,761],{"class":228,"line":756},22,[205,758,597],{"class":282},[205,760,306],{"class":286},[205,762,763],{"class":236},"OCIRepository\n",[205,765,767,769],{"class":228,"line":766},23,[205,768,607],{"class":282},[205,770,287],{"class":286},[205,772,774,776,778],{"class":228,"line":773},24,[205,775,630],{"class":282},[205,777,306],{"class":286},[205,779,439],{"class":236},[205,781,783,786,788],{"class":228,"line":782},25,[205,784,785],{"class":282},"    namespace",[205,787,306],{"class":286},[205,789,450],{"class":236},[205,791,793,795],{"class":228,"line":792},26,[205,794,686],{"class":282},[205,796,287],{"class":286},[205,798,800,803,805],{"class":228,"line":799},27,[205,801,802],{"class":282},"    interval",[205,804,306],{"class":286},[205,806,807],{"class":236},"1m\n",[205,809,811,814,816],{"class":228,"line":810},28,[205,812,813],{"class":282},"    url",[205,815,306],{"class":286},[205,817,818],{"class":236},"oci://registry.gitlab.com/gitlab-da/projects/tanuki-bank/tanuki-bank-delivery/frontend\n",[205,820,822,825],{"class":228,"line":821},29,[205,823,824],{"class":282},"    ref",[205,826,287],{"class":286},[205,828,830,833,835],{"class":228,"line":829},30,[205,831,832],{"class":282},"        tag",[205,834,306],{"class":286},[205,836,417],{"class":236},[205,838,840,843],{"class":228,"line":839},31,[205,841,842],{"class":282},"    verify",[205,844,287],{"class":286},[205,846,848,851,853],{"class":228,"line":847},32,[205,849,850],{"class":282},"      provider",[205,852,306],{"class":286},[205,854,855],{"class":236},"cosign\n",[205,857,859,862],{"class":228,"line":858},33,[205,860,861],{"class":282},"      secretRef",[205,863,287],{"class":286},[205,865,867,870,872],{"class":228,"line":866},34,[205,868,869],{"class":282},"        name",[205,871,306],{"class":286},[205,873,672],{"class":236},[205,875,877],{"class":228,"line":876},35,[205,878,639],{"class":232},[205,880,882,884,886],{"class":228,"line":881},36,[205,883,587],{"class":282},[205,885,306],{"class":286},[205,887,888],{"class":236},"kustomize.toolkit.fluxcd.io/v1\n",[205,890,892,894,896],{"class":228,"line":891},37,[205,893,597],{"class":282},[205,895,306],{"class":286},[205,897,898],{"class":236},"Kustomization\n",[205,900,902,904],{"class":228,"line":901},38,[205,903,607],{"class":282},[205,905,287],{"class":286},[205,907,909,911,913],{"class":228,"line":908},39,[205,910,630],{"class":282},[205,912,306],{"class":286},[205,914,439],{"class":236},[205,916,918,920,922],{"class":228,"line":917},40,[205,919,785],{"class":282},[205,921,306],{"class":286},[205,923,450],{"class":236},[205,925,927,929],{"class":228,"line":926},41,[205,928,686],{"class":282},[205,930,287],{"class":286},[205,932,934,936,938],{"class":228,"line":933},42,[205,935,802],{"class":282},[205,937,306],{"class":286},[205,939,807],{"class":236},[205,941,943,946,948],{"class":228,"line":942},43,[205,944,945],{"class":282},"    targetNamespace",[205,947,306],{"class":286},[205,949,450],{"class":236},[205,951,953,956,958],{"class":228,"line":952},44,[205,954,955],{"class":282},"    path",[205,957,306],{"class":286},[205,959,960],{"class":236},"\".\"\n",[205,962,964,967],{"class":228,"line":963},45,[205,965,966],{"class":282},"    sourceRef",[205,968,287],{"class":286},[205,970,972,975,977],{"class":228,"line":971},46,[205,973,974],{"class":282},"        kind",[205,976,306],{"class":286},[205,978,763],{"class":236},[205,980,982,984,986],{"class":228,"line":981},47,[205,983,869],{"class":282},[205,985,306],{"class":286},[205,987,439],{"class":236},[205,989,991,994,996],{"class":228,"line":990},48,[205,992,993],{"class":282},"    prune",[205,995,306],{"class":286},[205,997,998],{"class":383},"true\n",[12,1000,1001,1008,1009,1011,1012,259,1015,1018],{},[16,1002,1005],{"href":1003,"rel":1004},"https://fluxcd.io/flux/components/kustomize/kustomizations/",[],[174,1006,1007],{},"Kustomization","リソースを使用することで、Kubernetesマニフェストをさらにカスタマイズできるほか、リソースをデプロイする対象のネームスペースも指定することができます。Flux CDの",[174,1010,505],{},"リソースでは、定期的に同期する対象となるOCIイメージのリポジトリ参照およびタグを指定できます。また、",[174,1013,1014],{},"verify.provider",[174,1016,1017],{},"verify.secretRef","というプロパティがあることに気づくでしょう。これらのフィールドを使うことで、クラスターにデプロイされるOCIイメージが、先ほどのCI/CDジョブで使用されたCosignの秘密鍵によって署名されたものであることを検証できます。",[12,1020,1021,1022,1024,1025,1030,1031,1036],{},"公開鍵は、",[174,1023,505],{},"リソースと同じネームスペース内に格納する必要がある、",[16,1026,1029],{"href":1027,"rel":1028},"https://kubernetes.io/docs/concepts/configuration/secret/",[],"Kubernetesシークレット","に保存しなければなりません。このシークレットをFlux CDによって管理し、平文で保存しないようにするには、値を暗号化してクラスター側のコントローラーで復号させるために、",[16,1032,1035],{"href":1033,"rel":1034},"https://fluxcd.io/flux/guides/sealed-secrets/",[],"SealedSecrets","の使用を検討しましょう。",[12,1038,1039,1040,1047,1048,1053],{},"SealedSecretsを使わないより簡単な方法としては、",[16,1041,1044],{"href":1042,"rel":1043},"https://kubernetes.io/docs/reference/kubectl/",[],[174,1045,1046],{},"kubectl CLI","を使用して",[16,1049,1052],{"href":1050,"rel":1051},"https://docs.gitlab.com/ja-jp/user/clusters/agent/getting_started_deployments/",[],"GitLab CI/CDジョブでシークレットをデプロイする","方法があります。SealedSecretを使用しない方法では、上記で使用していたSealedSecretを削除し、新しいOCIイメージをプッシュするジョブを実行する前に、公開鍵のシークレットをデプロイするジョブを実行するだけです。これにより、シークレットがGitLab上で安全に管理され、クラスター内でOCIRepositoryから正常にアクセスできるようになります。このアプローチは比較的シンプルですが、本番環境でのシークレット管理には適していないことにご留意ください。",[23,1055,1057],{"id":1056},"ocigitlabおよびgitopsの利点","OCI、GitLab、およびGitOpsの利点",[12,1059,1060],{},"OCIアーティファクトを活用することで、GitOpsチームはセキュリティ面での利点を得ながら、デプロイを最小限に抑えることができます。ユーザーは、インフラの信頼できる情報源としてgitを活用できる点や、プロジェクトでのコラボレーションが可能になる点など、gitがもたらすあらゆる利点を引き続き享受できます。OCIイメージは、GitOpsにおけるデプロイの側面を強化する新たなパッケージ化手法を提供します。",[12,1062,1063,1064,1069,1070,1075],{},"GitLab は、GitOpsワークフローをよりシンプルにするための利用体験を提供できるよう、ユーザーやクラウドネイティブコミュニティから継続的に学び続けています。このブログでご紹介した機能をお使いになるには、",[16,1065,1068],{"href":1066,"rel":1067},"https://about.gitlab.com/ja-jp/free-trial/",[],"GitLab Ultimateの無料トライアル","にお申込みください。これらのツールに関する皆さまのご利用体験についても、ぜひお聞かせください。フィードバックは",[16,1071,1074],{"href":1072,"rel":1073},"https://forum.gitlab.com/t/oci-images-as-source-of-truth-for-gitops-with-gitlab/120965",[],"コミュニティフォーラム","にて受け付けています。",[1077,1078,1079],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":223,"searchDepth":243,"depth":243,"links":1081},[1082,1083,1084,1087,1091],{"id":25,"depth":243,"text":26},{"id":96,"depth":243,"text":97},{"id":121,"depth":243,"text":122,"children":1085},[1086],{"id":149,"depth":297,"text":150},{"id":168,"depth":243,"text":169,"children":1088},[1089,1090],{"id":266,"depth":297,"text":267},{"id":567,"depth":297,"text":568},{"id":1056,"depth":243,"text":1057},"open-source","2025-02-19","GitOpsワークフローの一環としてOpen Container Initiative（OCI）イメージを活用する利点、およびKubernetesへのデプロイを簡素化するためにGitLabが提供する多くの機能について詳しくご紹介します。","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097601/Blog/Hero%20Images/Blog/Hero%20Images/REFERENCE%20-%20Use%20this%20page%20as%20a%20reference%20for%20thumbnail%20sizes_76Tn5jFmEHY5LFj8RdDjNY_1750097600692.png",{},true,"/ja-jp/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery",{"title":5,"description":1094,"ogTitle":5,"ogDescription":1094,"noIndex":1097,"ogImage":1098,"ogUrl":1103,"ogSiteName":1104,"ogType":1105,"canonicalUrls":1103},"https://about.gitlab.com/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery","https://about.gitlab.com","article","how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery","ja-jp/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery",[1109,1110,1111,20,1112,1113],"CI/CD","open source","kubernetes","git","tutorial","BlogPost","dnJkxha9lerAR7UFYQmRaYksuKBajY9-Y3rjyRvKbCE",{"logo":1117,"freeTrial":1122,"sales":1127,"login":1132,"items":1137,"search":1465,"minimal":1498,"duo":1515,"switchNav":1524,"pricingDeployment":1535},{"config":1118},{"href":1119,"dataGaName":1120,"dataGaLocation":1121},"/ja-jp/","gitlab logo","header",{"text":1123,"config":1124},"無料トライアルを開始",{"href":1125,"dataGaName":1126,"dataGaLocation":1121},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp&glm_content=default-saas-trial/","free trial",{"text":1128,"config":1129},"デモをリクエスト",{"href":1130,"dataGaName":1131,"dataGaLocation":1121},"/ja-jp/sales/?contact-topic=request-demo","sales",{"text":1133,"config":1134},"サインイン",{"href":1135,"dataGaName":1136,"dataGaLocation":1121},"https://gitlab.com/users/sign_in/","sign in",[1138,1167,1268,1273,1387,1443],{"text":1139,"config":1140,"menu":1142},"プラットフォーム",{"dataNavLevelOne":1141},"platform",{"type":1143,"columns":1144},"cards",[1145,1151,1159],{"title":1139,"description":1146,"link":1147},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":1148,"config":1149},"プラットフォームの詳細はこちら",{"href":1150,"dataGaName":1141,"dataGaLocation":1121},"/ja-jp/platform/",{"title":1152,"description":1153,"link":1154},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":1155,"config":1156},"GitLab Duoのご紹介",{"href":1157,"dataGaName":1158,"dataGaLocation":1121},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1160,"description":1161,"link":1162},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":1163,"config":1164},"詳細はこちら",{"href":1165,"dataGaName":1166,"dataGaLocation":1121},"/ja-jp/why-gitlab/","why gitlab",{"text":1168,"left":1100,"config":1169,"menu":1171},"製品",{"dataNavLevelOne":1170},"solutions",{"type":1172,"link":1173,"columns":1177,"feature":1247},"lists",{"text":1174,"config":1175},"すべてのソリューションを表示",{"href":1176,"dataGaName":1170,"dataGaLocation":1121},"/ja-jp/solutions/",[1178,1202,1225],{"title":1179,"description":1180,"link":1181,"items":1186},"自動化","CI/CDと自動化でデプロイを加速",{"config":1182},{"icon":1183,"href":1184,"dataGaName":1185,"dataGaLocation":1121},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[1187,1190,1193,1198],{"text":1109,"config":1188},{"href":1189,"dataGaLocation":1121,"dataGaName":1109},"/ja-jp/solutions/continuous-integration/",{"text":1152,"config":1191},{"href":1157,"dataGaLocation":1121,"dataGaName":1192},"gitlab duo agent platform - product menu",{"text":1194,"config":1195},"ソースコード管理",{"href":1196,"dataGaLocation":1121,"dataGaName":1197},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":1199,"config":1200},"自動化されたソフトウェアデリバリー",{"href":1184,"dataGaLocation":1121,"dataGaName":1201},"Automated software delivery",{"title":1203,"description":1204,"link":1205,"items":1210},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":1206},{"href":1207,"dataGaName":1208,"dataGaLocation":1121,"icon":1209},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1211,1215,1220],{"text":1212,"config":1213},"アプリケーションセキュリティテスト",{"href":1207,"dataGaName":1214,"dataGaLocation":1121},"Application security testing",{"text":1216,"config":1217},"ソフトウェアサプライチェーンセキュリティ",{"href":1218,"dataGaLocation":1121,"dataGaName":1219},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":1221,"config":1222},"ソフトウェアコンプライアンス",{"href":1223,"dataGaName":1224,"dataGaLocation":1121},"/ja-jp/solutions/software-compliance/","software compliance",{"title":1226,"link":1227,"items":1232},"測定",{"config":1228},{"icon":1229,"href":1230,"dataGaName":1231,"dataGaLocation":1121},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[1233,1237,1242],{"text":1234,"config":1235},"可視性と測定",{"href":1230,"dataGaLocation":1121,"dataGaName":1236},"Visibility and Measurement",{"text":1238,"config":1239},"バリューストリーム管理",{"href":1240,"dataGaLocation":1121,"dataGaName":1241},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":1243,"config":1244},"分析とインサイト",{"href":1245,"dataGaLocation":1121,"dataGaName":1246},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":1248,"type":1172,"items":1249},"GitLabが活躍する場所",[1250,1256,1262],{"text":1251,"config":1252},"大企業",{"icon":1253,"href":1254,"dataGaLocation":1121,"dataGaName":1255},"Building","/ja-jp/enterprise/","enterprise",{"text":1257,"config":1258},"スモールビジネス",{"icon":1259,"href":1260,"dataGaLocation":1121,"dataGaName":1261},"Work","/ja-jp/small-business/","small business",{"text":1263,"config":1264},"公共部門",{"icon":1265,"href":1266,"dataGaLocation":1121,"dataGaName":1267},"Organization","/ja-jp/solutions/public-sector/","public sector",{"text":1269,"config":1270},"価格",{"href":1271,"dataGaName":1272,"dataGaLocation":1121,"dataNavLevelOne":1272},"/ja-jp/pricing/","pricing",{"text":1274,"config":1275,"menu":1277},"関連リソース",{"dataNavLevelOne":1276},"resources",{"type":1172,"link":1278,"columns":1282,"feature":1376},{"text":1279,"config":1280},"すべてのリソースを表示",{"href":1281,"dataGaName":1276,"dataGaLocation":1121},"/ja-jp/resources/",[1283,1316,1343],{"title":1284,"items":1285},"はじめに",[1286,1291,1296,1301,1306,1311],{"text":1287,"config":1288},"インストール",{"href":1289,"dataGaName":1290,"dataGaLocation":1121},"/ja-jp/install/","install",{"text":1292,"config":1293},"クイックスタートガイド",{"href":1294,"dataGaName":1295,"dataGaLocation":1121},"/ja-jp/get-started/","quick setup checklists",{"text":1297,"config":1298},"学ぶ",{"href":1299,"dataGaLocation":1121,"dataGaName":1300},"https://university.gitlab.com/","learn",{"text":1302,"config":1303},"製品ドキュメント",{"href":1304,"dataGaName":1305,"dataGaLocation":1121},"https://docs.gitlab.com/ja-jp/","product documentation",{"text":1307,"config":1308},"ベストプラクティスビデオ",{"href":1309,"dataGaName":1310,"dataGaLocation":1121},"/ja-jp/getting-started-videos/","best practice videos",{"text":1312,"config":1313},"インテグレーション",{"href":1314,"dataGaName":1315,"dataGaLocation":1121},"/ja-jp/integrations/","integrations",{"title":1317,"items":1318},"検索する",[1319,1324,1329,1334,1338],{"text":1320,"config":1321},"お客様成功事例",{"href":1322,"dataGaName":1323,"dataGaLocation":1121},"/ja-jp/customers/","customer success stories",{"text":1325,"config":1326},"ブログ",{"href":1327,"dataGaName":1328,"dataGaLocation":1121},"/ja-jp/blog/","blog",{"text":1330,"config":1331},"Demo Hub",{"href":1332,"dataGaName":1333,"dataGaLocation":1121},"/ja-jp/demo-hub/","demo hub",{"text":1335,"config":1336},"The Source",{"href":1337,"dataGaName":1328,"dataGaLocation":1121},"/ja-jp/the-source/",{"text":1339,"config":1340},"リモート",{"href":1341,"dataGaName":1342,"dataGaLocation":1121},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1344,"items":1345},"つなげる",[1346,1351,1356,1361,1366,1371],{"text":1347,"config":1348},"GitLabサービス",{"href":1349,"dataGaName":1350,"dataGaLocation":1121},"/ja-jp/services/","services",{"text":1352,"config":1353},"コントリビュート",{"href":1354,"dataGaName":1355,"dataGaLocation":1121},"https://contributors.gitlab.com","contribute",{"text":1357,"config":1358},"コミュニティ",{"href":1359,"dataGaName":1360,"dataGaLocation":1121},"/community/","community",{"text":1362,"config":1363},"フォーラム",{"href":1364,"dataGaName":1365,"dataGaLocation":1121},"https://forum.gitlab.com/","forum",{"text":1367,"config":1368},"イベント",{"href":1369,"dataGaName":1370,"dataGaLocation":1121},"/events/","events",{"text":1372,"config":1373},"パートナー",{"href":1374,"dataGaName":1375,"dataGaLocation":1121},"/ja-jp/partners/","partners",{"config":1377,"title":1380,"text":1381,"link":1382},{"background":1378,"textColor":1379},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","GitLabの最新情報","最新の機能と改善点に関する情報をお届けします。",{"text":1383,"config":1384},"最新情報を読む",{"href":1385,"dataGaName":1386,"dataGaLocation":1121},"/ja-jp/whats-new/","whats new",{"text":1388,"config":1389,"menu":1391},"企業情報",{"dataNavLevelOne":1390},"company",{"type":1172,"columns":1392},[1393],{"items":1394},[1395,1400,1406,1408,1413,1418,1423,1428,1433,1438],{"text":1396,"config":1397},"GitLabについて",{"href":1398,"dataGaName":1399,"dataGaLocation":1121},"/ja-jp/company/","about",{"text":1401,"config":1402,"footerGa":1405},"採用情報",{"href":1403,"dataGaName":1404,"dataGaLocation":1121},"/jobs/","jobs",{"dataGaName":1404},{"text":1367,"config":1407},{"href":1369,"dataGaName":1370,"dataGaLocation":1121},{"text":1409,"config":1410},"経営陣",{"href":1411,"dataGaName":1412,"dataGaLocation":1121},"/company/team/e-group/","leadership",{"text":1414,"config":1415},"ハンドブック",{"href":1416,"dataGaName":1417,"dataGaLocation":1121},"https://handbook.gitlab.com/","handbook",{"text":1419,"config":1420},"投資家向け情報",{"href":1421,"dataGaName":1422,"dataGaLocation":1121},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1424,"config":1425},"トラストセンター",{"href":1426,"dataGaName":1427,"dataGaLocation":1121},"/ja-jp/security/","trust center",{"text":1429,"config":1430},"AI Transparency Center",{"href":1431,"dataGaName":1432,"dataGaLocation":1121},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":1434,"config":1435},"ニュースレター",{"href":1436,"dataGaName":1437,"dataGaLocation":1121},"/company/contact/#contact-forms","newsletter",{"text":1439,"config":1440},"プレス",{"href":1441,"dataGaName":1442,"dataGaLocation":1121},"/press/","press",{"text":1444,"config":1445,"menu":1446},"お問い合わせ",{"dataNavLevelOne":1390},{"type":1172,"columns":1447},[1448],{"items":1449},[1450,1455,1460],{"text":1451,"config":1452},"お問い合わせはこちら",{"href":1453,"dataGaName":1454,"dataGaLocation":1121},"/ja-jp/sales/","talk to sales",{"text":1456,"config":1457},"サポートを受ける",{"href":1458,"dataGaName":1459,"dataGaLocation":1121},"https://support.gitlab.com/hc/en-us","support portal",{"text":1461,"config":1462},"カスタマーポータル",{"href":1463,"dataGaName":1464,"dataGaLocation":1121},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1466,"login":1467,"suggestions":1474},"閉じる",{"text":1468,"link":1469},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":1470,"config":1471},"GitLab.com",{"href":1135,"dataGaName":1472,"dataGaLocation":1473},"search login","search",{"text":1475,"default":1476},"提案",[1477,1479,1484,1486,1490,1494],{"text":1152,"config":1478},{"href":1157,"dataGaName":1152,"dataGaLocation":1473},{"text":1480,"config":1481},"コード提案（AI）",{"href":1482,"dataGaName":1483,"dataGaLocation":1473},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1109,"config":1485},{"href":1189,"dataGaName":1109,"dataGaLocation":1473},{"text":1487,"config":1488},"GitLab on AWS",{"href":1489,"dataGaName":1487,"dataGaLocation":1473},"/ja-jp/partners/technology-partners/aws/",{"text":1491,"config":1492},"GitLab on Google Cloud",{"href":1493,"dataGaName":1491,"dataGaLocation":1473},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":1495,"config":1496},"GitLabを選ぶ理由",{"href":1165,"dataGaName":1497,"dataGaLocation":1473},"Why GitLab?",{"freeTrial":1499,"mobileIcon":1503,"desktopIcon":1508,"secondaryButton":1511},{"text":1123,"config":1500},{"href":1501,"dataGaName":1126,"dataGaLocation":1502},"https://gitlab.com/-/trials/new/","nav",{"altText":1504,"config":1505},"GitLabアイコン",{"src":1506,"dataGaName":1507,"dataGaLocation":1502},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1504,"config":1509},{"src":1510,"dataGaName":1507,"dataGaLocation":1502},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1284,"config":1512},{"href":1513,"dataGaName":1514,"dataGaLocation":1502},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/get-started/","get started",{"freeTrial":1516,"mobileIcon":1520,"desktopIcon":1522},{"text":1517,"config":1518},"GitLab Duoの詳細について",{"href":1157,"dataGaName":1519,"dataGaLocation":1502},"gitlab duo",{"altText":1504,"config":1521},{"src":1506,"dataGaName":1507,"dataGaLocation":1502},{"altText":1504,"config":1523},{"src":1510,"dataGaName":1507,"dataGaLocation":1502},{"button":1525,"mobileIcon":1530,"desktopIcon":1532},{"text":1526,"config":1527},"/switch",{"href":1528,"dataGaName":1529,"dataGaLocation":1502},"#contact","switch",{"altText":1504,"config":1531},{"src":1506,"dataGaName":1507,"dataGaLocation":1502},{"altText":1504,"config":1533},{"src":1534,"dataGaName":1507,"dataGaLocation":1502},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1536,"mobileIcon":1541,"desktopIcon":1543},{"text":1537,"config":1538},"料金ページに戻る",{"href":1271,"dataGaName":1539,"dataGaLocation":1502,"icon":1540},"back to pricing","GoBack",{"altText":1504,"config":1542},{"src":1506,"dataGaName":1507,"dataGaLocation":1502},{"altText":1504,"config":1544},{"src":1510,"dataGaName":1507,"dataGaLocation":1502},{"title":1546,"button":1547,"config":1551},"GitLab Orbitが登場: AIエージェントのためのコンテキストレイヤー",{"text":1163,"config":1548},{"href":1549,"dataGaName":1550,"dataGaLocation":1121},"/ja-jp/gitlab-orbit/","orbit",{"layout":1552,"disabled":1097},"release",{"data":1554},{"text":1555,"source":1556,"edit":1562,"contribute":1567,"config":1572,"items":1577,"minimal":1785},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":1557,"config":1558},"ページのソースを表示",{"href":1559,"dataGaName":1560,"dataGaLocation":1561},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1563,"config":1564},"このページを編集",{"href":1565,"dataGaName":1566,"dataGaLocation":1561},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1568,"config":1569},"ご協力をお願いします",{"href":1570,"dataGaName":1571,"dataGaLocation":1561},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1573,"facebook":1574,"youtube":1575,"linkedin":1576},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1578,1623,1675,1718,1752],{"title":1269,"links":1579,"subMenu":1594},[1580,1584,1589],{"text":1581,"config":1582},"プランの表示",{"href":1271,"dataGaName":1583,"dataGaLocation":1561},"view plans",{"text":1585,"config":1586},"Premiumを選ぶ理由",{"href":1587,"dataGaName":1588,"dataGaLocation":1561},"/ja-jp/pricing/premium/","why premium",{"text":1590,"config":1591},"Ultimateを選ぶ理由",{"href":1592,"dataGaName":1593,"dataGaLocation":1561},"/ja-jp/pricing/ultimate/","why ultimate",[1595],{"title":1444,"links":1596},[1597,1599,1601,1603,1608,1613,1618],{"text":1444,"config":1598},{"href":1453,"dataGaName":1131,"dataGaLocation":1561},{"text":1456,"config":1600},{"href":1458,"dataGaName":1459,"dataGaLocation":1561},{"text":1461,"config":1602},{"href":1463,"dataGaName":1464,"dataGaLocation":1561},{"text":1604,"config":1605},"ステータス",{"href":1606,"dataGaName":1607,"dataGaLocation":1561},"https://status.gitlab.com/","status",{"text":1609,"config":1610},"利用規約",{"href":1611,"dataGaName":1612,"dataGaLocation":1561},"/terms/","terms of use",{"text":1614,"config":1615},"プライバシーに関する声明",{"href":1616,"dataGaName":1617,"dataGaLocation":1561},"/ja-jp/privacy/","privacy statement",{"text":1619,"config":1620},"Cookie 優先設定",{"dataGaName":1621,"dataGaLocation":1561,"id":1622,"isOneTrustButton":1100},"cookie preferences","ot-sdk-btn",{"title":1168,"links":1624,"subMenu":1633},[1625,1629],{"text":1626,"config":1627},"DevSecOpsプラットフォーム",{"href":1150,"dataGaName":1628,"dataGaLocation":1561},"devsecops platform",{"text":1630,"config":1631},"AI支援開発",{"href":1157,"dataGaName":1632,"dataGaLocation":1561},"ai-assisted development",[1634],{"title":1635,"links":1636},"トピック",[1637,1641,1645,1650,1655,1660,1665,1670],{"text":1109,"config":1638},{"href":1639,"dataGaName":1640,"dataGaLocation":1561},"/ja-jp/topics/ci-cd/","cicd",{"text":20,"config":1642},{"href":1643,"dataGaName":1644,"dataGaLocation":1561},"/ja-jp/topics/gitops/","gitops",{"text":1646,"config":1647},"DevOps",{"href":1648,"dataGaName":1649,"dataGaLocation":1561},"/ja-jp/topics/devops/","devops",{"text":1651,"config":1652},"バージョン管理",{"href":1653,"dataGaName":1654,"dataGaLocation":1561},"/ja-jp/topics/version-control/","version control",{"text":1656,"config":1657},"DevSecOps",{"href":1658,"dataGaName":1659,"dataGaLocation":1561},"/ja-jp/topics/devsecops/","devsecops",{"text":1661,"config":1662},"クラウドネイティブ",{"href":1663,"dataGaName":1664,"dataGaLocation":1561},"/ja-jp/topics/cloud-native/","cloud native",{"text":1666,"config":1667},"コーディングのためのAI",{"href":1668,"dataGaName":1669,"dataGaLocation":1561},"/ja-jp/topics/devops/ai-for-coding/","ai for coding",{"text":1671,"config":1672},"エージェント型AI",{"href":1673,"dataGaName":1674,"dataGaLocation":1561},"/ja-jp/topics/agentic-ai/","agentic ai",{"title":1676,"links":1677},"ソリューション",[1678,1681,1683,1688,1692,1695,1698,1701,1703,1705,1708,1713],{"text":1212,"config":1679},{"href":1207,"dataGaName":1680,"dataGaLocation":1561},"Application Security Testing",{"text":1199,"config":1682},{"href":1184,"dataGaName":1185,"dataGaLocation":1561},{"text":1684,"config":1685},"アジャイル開発",{"href":1686,"dataGaName":1687,"dataGaLocation":1561},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":1689,"config":1690},"SCM",{"href":1196,"dataGaName":1691,"dataGaLocation":1561},"source code management",{"text":1109,"config":1693},{"href":1189,"dataGaName":1694,"dataGaLocation":1561},"continuous integration & delivery",{"text":1238,"config":1696},{"href":1240,"dataGaName":1697,"dataGaLocation":1561},"value stream management",{"text":20,"config":1699},{"href":1700,"dataGaName":1644,"dataGaLocation":1561},"/ja-jp/solutions/gitops/",{"text":1251,"config":1702},{"href":1254,"dataGaName":1255,"dataGaLocation":1561},{"text":1257,"config":1704},{"href":1260,"dataGaName":1261,"dataGaLocation":1561},{"text":1706,"config":1707},"公共機関",{"href":1266,"dataGaName":1267,"dataGaLocation":1561},{"text":1709,"config":1710},"教育",{"href":1711,"dataGaName":1712,"dataGaLocation":1561},"/ja-jp/solutions/education/","education",{"text":1714,"config":1715},"金融サービス",{"href":1716,"dataGaName":1717,"dataGaLocation":1561},"/ja-jp/solutions/finance/","financial services",{"title":1719,"links":1720},"リソース",[1721,1723,1725,1727,1731,1733,1736,1738,1740,1742,1744,1746,1748,1750],{"text":1287,"config":1722},{"href":1289,"dataGaName":1290,"dataGaLocation":1561},{"text":1292,"config":1724},{"href":1294,"dataGaName":1295,"dataGaLocation":1561},{"text":1297,"config":1726},{"href":1299,"dataGaName":1300,"dataGaLocation":1561},{"text":1302,"config":1728},{"href":1729,"dataGaName":1730,"dataGaLocation":1561},"https://docs.gitlab.com/ja-jp","docs",{"text":1325,"config":1732},{"href":1327,"dataGaName":1328,"dataGaLocation":1561},{"text":1734,"config":1735},"最新リリース",{"href":1385,"dataGaName":1386,"dataGaLocation":1561},{"text":1320,"config":1737},{"href":1322,"dataGaName":1323,"dataGaLocation":1561},{"text":1339,"config":1739},{"href":1341,"dataGaName":1342,"dataGaLocation":1561},{"text":1347,"config":1741},{"href":1349,"dataGaName":1350,"dataGaLocation":1561},{"text":1352,"config":1743},{"href":1354,"dataGaName":1355,"dataGaLocation":1561},{"text":1357,"config":1745},{"href":1359,"dataGaName":1360,"dataGaLocation":1561},{"text":1362,"config":1747},{"href":1364,"dataGaName":1365,"dataGaLocation":1561},{"text":1367,"config":1749},{"href":1369,"dataGaName":1370,"dataGaLocation":1561},{"text":1372,"config":1751},{"href":1374,"dataGaName":1375,"dataGaLocation":1561},{"title":1753,"links":1754},"会社情報",[1755,1757,1759,1761,1763,1765,1769,1774,1776,1778,1780],{"text":1396,"config":1756},{"href":1398,"dataGaName":1390,"dataGaLocation":1561},{"text":1401,"config":1758},{"href":1403,"dataGaName":1404,"dataGaLocation":1561},{"text":1409,"config":1760},{"href":1411,"dataGaName":1412,"dataGaLocation":1561},{"text":1414,"config":1762},{"href":1416,"dataGaName":1417,"dataGaLocation":1561},{"text":1419,"config":1764},{"href":1421,"dataGaName":1422,"dataGaLocation":1561},{"text":1766,"config":1767},"Sustainability",{"href":1768,"dataGaName":1766,"dataGaLocation":1561},"/sustainability/",{"text":1770,"config":1771},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":1772,"dataGaName":1773,"dataGaLocation":1561},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1424,"config":1775},{"href":1426,"dataGaName":1427,"dataGaLocation":1561},{"text":1434,"config":1777},{"href":1436,"dataGaName":1437,"dataGaLocation":1561},{"text":1439,"config":1779},{"href":1441,"dataGaName":1442,"dataGaLocation":1561},{"text":1781,"config":1782},"現代奴隷制の透明性に関する声明",{"href":1783,"dataGaName":1784,"dataGaLocation":1561},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1786},[1787,1789,1792],{"text":1609,"config":1788},{"href":1611,"dataGaName":1612,"dataGaLocation":1561},{"text":1790,"config":1791},"Cookieの設定",{"dataGaName":1621,"dataGaLocation":1561,"id":1622,"isOneTrustButton":1100},{"text":1614,"config":1793},{"href":1616,"dataGaName":1617,"dataGaLocation":1561},[1795],{"id":1796,"title":7,"body":1096,"config":1797,"content":1799,"description":1096,"extension":1803,"meta":1804,"navigation":1100,"path":1805,"seo":1806,"stem":1807,"__hash__":1808},"blogAuthors/en-us/blog/authors/daniel-helfand.yml",{"template":1798},"BlogAuthor",{"name":7,"config":1800},{"headshot":1801,"ctfId":1802},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662418/Blog/Author%20Headshots/dhelfand.png","b9sRP0HJhdPsOEruWUfih","yml",{},"/en-us/blog/authors/daniel-helfand",{},"en-us/blog/authors/daniel-helfand","U_csW5bNItyLp5wX6zV8xvC4yi-USG4wFxbnBMasIFw",[1810,1818,1826],{"title":1811,"description":1812,"heroImage":1813,"category":1092,"date":1814,"authors":1815,"slug":1817,"externalUrl":1096},"GitLab AIハッカソン2026：受賞者発表","約7,000人の開発者がGitLab Duo Agent Platform上で600以上のAIエージェントとフローを構築したハッカソンの結果をご紹介。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-04-22",[1816],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"title":1819,"description":1820,"heroImage":1821,"category":1092,"date":1822,"authors":1823,"slug":1825,"externalUrl":1096},"git mergeコマンドの基本を徹底解説","この記事では、git mergeコマンドについてコマンドの基本的な使い方からリクエストコードまで解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1754287290/averr2ecwl01q2f9lknf.jpg","2025-08-04",[1824],"GitLab Team","git-merge-command-overview",{"title":1827,"description":1828,"heroImage":1829,"category":1092,"date":1830,"authors":1831,"slug":1832,"externalUrl":1096},"オープンソースソフトウェア（OSS）とは？詳しく解説​","オープンソースの意味や、メリットとデメリットについて、分かりやすく解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752720740/g9x8oi988xuhioglpczi.jpg","2025-07-17",[1824],"what-is-open-source",{"promotions":1834},[1835,1849,1861,1873],{"id":1836,"categories":1837,"header":1839,"text":1840,"button":1841,"image":1846},"ai-modernization",[1838],"ai","AIの真価、組織全体で発揮できていますか？","所要時間は5分以内です",{"text":1842,"config":1843},"AI成熟度スコアを確認する",{"href":1844,"dataGaName":1845,"dataGaLocation":1328},"/ja-jp/assessments/ai-modernization-assessment/","modernization assessment",{"config":1847},{"src":1848},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1850,"categories":1851,"header":1853,"text":1840,"button":1854,"image":1858},"devops-modernization",[1852,1659],"product","単にツールを管理するだけでなく、イノベーションを提供していますか？",{"text":1855,"config":1856},"DevOps成熟度スコアを確認しましょう",{"href":1857,"dataGaName":1845,"dataGaLocation":1328},"/ja-jp/assessments/devops-modernization-assessment/",{"config":1859},{"src":1860},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1862,"categories":1863,"header":1865,"text":1840,"button":1866,"image":1870},"security-modernization",[1864],"security","スピードのためにセキュリティを犠牲にしていませんか？",{"text":1867,"config":1868},"セキュリティ成熟度スコアを確認しましょう",{"href":1869,"dataGaName":1845,"dataGaLocation":1328},"/ja-jp/assessments/security-modernization-assessment/",{"config":1871},{"src":1872},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1874,"paths":1875,"header":1878,"text":1879,"button":1880,"image":1885},"github-azure-migration",[1876,1877],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","チームはGitHubのAzure移行に対応できていますか？","GitHubはすでにAzureを基盤として再構築を進めています。それがあなたのチームにとって何を意味するのか、ご確認ください。",{"text":1881,"config":1882},"GitLabとGitHubの比較を見る",{"href":1883,"dataGaName":1884,"dataGaLocation":1328},"/ja-jp/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1886},{"src":1860},{"header":1888,"blurb":1889,"button":1890,"secondaryButton":1894},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":1123,"config":1891},{"href":1892,"dataGaName":1126,"dataGaLocation":1893},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/ja-jp/","feature",{"text":1444,"config":1895},{"href":1453,"dataGaName":1131,"dataGaLocation":1893},1786803752892]