[{"data":1,"prerenderedAt":1131},["ShallowReactive",2],{"/ja-jp/blog/a-ci-component-builders-journey":3,"navigation-ja-jp":360,"banner-ja-jp":777,"footer-ja-jp":786,"blog-post-authors-ja-jp-Darwin Sanoy":1027,"blog-related-posts-ja-jp-a-ci-component-builders-journey":1044,"blog-promotions-ja-jp":1068,"next-steps-ja-jp":1122},{"id":4,"title":5,"authors":6,"body":8,"category":338,"date":339,"description":340,"extension":341,"externalUrl":342,"featured":343,"heroImage":344,"meta":345,"navigation":346,"path":347,"seo":348,"slug":352,"stem":353,"tags":354,"template":358,"updatedDate":342,"__hash__":359},"blogPosts/ja-jp/blog/a-ci-component-builders-journey.md","CI/CDコンポーネント開発者が歩んだ道",[7],"Darwin Sanoy",{"type":9,"value":10,"toc":312},"minimark",[11,15,18,28,36,39,59,63,66,76,79,88,91,100,108,117,124,133,136,145,148,157,160,169,175,181,184,187,198,201,205,230,234,246,249,271,274,277],[12,13,14],"p",{},"父は重機整備士でしたが、業界にまだ専用ツールが存在しない難しい作業のために、自ら道具を作ってしまうことがよくありました。その姿が、いつも不思議で印象的でした。まさか自分がIT分野でツール作りに情熱を注ぐようになるとは、当時は思いもしませんでしたが、今やそれが長年にわたる喜びの一つになっています。",[12,16,17],{},"GitLab を使い始めてから4年以上、CI/CDのインクルード可能な共有テンプレートを作り続けてきました。これらのテンプレートは、Node.js の NPM、Python の PyPI、.NET の NuGet といったアプリケーション言語の依存関係マネージャーと同様に、他のユーザーが直接依存できる形で設計されています。",[12,19,20,21,27],{},"GitLab 自体も、",[22,23,26],"a",{"href":24,"rel":25},"https://docs.gitlab.com/ee/topics/autodevops/",[],"Auto DevOps"," やセキュリティスキャンツール群を通じて、こうした共有CI依存関係の構築に長年の実績を持っています。",[12,29,30,35],{},[22,31,34],{"href":32,"rel":33},"https://about.gitlab.com/blog/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/",[],"GitLab CI/CDカタログ","の登場により、この長年のアプローチが正式な仕組みとして整備され、誰もがGitLab CI/CDコンポーネントを世界中のユーザーに向けて公開できるようになりました。",[12,37,38],{},"共有テンプレートアプローチと比較した場合の主なアップグレードポイントは次のとおりです。",[40,41,42,50,53],"ul",{},[43,44,45,49],"li",{},[46,47,48],"strong",{},"コンポーネントの独立バージョン管理","は、コンテナバージョンの継承に依存しない新しいバージョニングの仕組みです。GitLab CI/CDコンポーネントのバージョンは、CIコードと任意の数のコンテナ（またはコンテナなし）を一つのCI/CDコンポーネントバージョンとしてまとめます。本番グレードのDevSecOpsでは、依存関係のバージョンを固定する機能が不可欠です。これは、本番グレードのアプリケーションコードで依存バージョンを固定するのと、まったく同じ理由・メリットによるものです。",[43,51,52],{},"**グローバルな可視性（制御付き）**は、GitLab.comのカタログ（またはセルフマネージドインスタンスでは社内全体）を通じて利用できます。個々のコンポーネントの可視性は、ソースプロジェクトのセキュリティ設定にも依存するため、セキュアなグループにコンポーネントを公開することも可能です。",[43,54,55,58],{},[46,56,57],{},"カタログメタデータ","は、ほとんどのコード共有の仕組みと同様に、どのコンポーネントを使用するかを判断するために必要なデータです。",[60,61,62],"h2",{"id":62},"コードを見てみましょう",[12,64,65],{},"説明よりも実例を示すのが好みなので、いくつかのコンポーネント例を見てみましょう。いずれもソースを公開しています（タイトルをクリックするとコンポーネントにアクセスできます）。",[67,68,70,71],"h3",{"id":69},"_1-hello-world","1. ",[22,72,75],{"href":73,"rel":74},"https://gitlab.com/explore/catalog/guided-explorations/ci-components/hello-world",[],"Hello World",[12,77,78],{},"最小構成のコンポーネントとして、その結果とソースの両方を示せる Hello World コンポーネントがまだ存在しないことに気づいたため、作成しました。この例では、CIコードのみを「コンポーネント化」する方法を示しています。",[67,80,82,83],{"id":81},"_2-hello-world-container","2. ",[22,84,87],{"href":85,"rel":86},"https://gitlab.com/explore/catalog/guided-explorations/ci-components/hello-world-container",[],"Hello World Container",[12,89,90],{},"CI/CDコンポーネントが完全に機能するためにコンテナが必要な場合があります。この例では、コンポーネント自体と同じプロジェクトで公開されるコンテナが含まれています。",[67,92,94,95],{"id":93},"_3-gitversion-ultimate-auto-semversioning","3. ",[22,96,99],{"href":97,"rel":98},"https://gitlab.com/explore/catalog/guided-explorations/ci-components/ultimate-auto-semversioning",[],"GitVersion Ultimate Auto Semversioning",[12,101,102,103,107],{},"このコンポーネントは、老舗の「GitVersion」ユーティリティを自動化するものです。GitVersion は、最後のバージョンを保存することなく、次のセマンティックバージョンを完全に自動で選択します。多くの本番候補が同時に進行しているような忙しいリポジトリでも対応できます。このコンポーネントが従う設計原則の一つは「最小設定」、つまり「設定ゼロで最も有用なことをデフォルトで行う」というものです。プロジェクトに ",[104,105,106],"code",{},"GitVersion.yml"," が存在しない場合、GitVersion に不慣れなユーザーにとって最も有用な出発点となるファイルをコンポーネントが自動生成します。",[67,109,111,112],{"id":110},"_4-amazon-codeguru-secure-sast-scanner","4. ",[22,113,116],{"href":114,"rel":115},"https://gitlab.com/explore/catalog/guided-explorations/ci-components/aws/amazon-codeguru-secure-sast",[],"Amazon CodeGuru Secure SAST Scanner",[12,118,119,120,123],{},"このコンポーネントはセキュリティスキャナーであり、近年実践してきたセキュリティスキャンのベストプラクティスに従っています。たとえば、GitLab Ultimate のライセンスが検出された場合、スキャナーは GitLab の SAST JSON 形式で出力し、ネイティブの GitLab スキャナーと同様にマージリクエストやダッシュボードに結果を統合します。また、セキュリティポリシーによるマージ承認の対象にもなります。GitLab Ultimate のライセンスがない場合は、パイプラインの「テスト結果」タブで基本的な差分なしの検出結果を確認できる JUNIT XML 形式で出力します。さらに、スキャン可能なファイル種別が存在する場合にのみ動作し、GitLab の ",[104,121,122],{},"SAST_DISABLED"," プロパティがオンになっている場合は無効化されます。",[67,125,127,128],{"id":126},"_5-checkov-iac-sast","5. ",[22,129,132],{"href":130,"rel":131},"https://gitlab.com/explore/catalog/guided-explorations/ci-components/checkov-iac-sast",[],"Checkov IaC SAST",[12,134,135],{},"Checkov IaC SAST も同様のセキュリティスキャナーコンポーネントで、上記のセキュリティスキャナー原則に従いつつ、スキャン可能なファイル種別に特化しています。これらのコンポーネントの重要なベストプラクティスの一つは、安定性のためにコンテナタグを固定することです。ただし、デフォルト値を持つ「コンポーネントインプット」を通じて行うことで、コンポーネントユーザーが最後にテストされたバージョンより新しいまたは古いバージョンでテストしたり、特定バージョンに固定したりできるようにしています。つまり、共有依存関係として安定性を提供しつつ、柔軟性も兼ね備えているということです。",[67,137,139,140],{"id":138},"_6-super-linter","6. ",[22,141,144],{"href":142,"rel":143},"https://gitlab.com/guided-explorations/ci-components/super-linter",[],"Super-Linter",[12,146,147],{},"Super-Linter は、多くの言語向けのリンターを集めたコミュニティ主導のコンポーネントです。もともと GitHub Action として始まったため、この例はオープンソースの GitHub Action を GitLab CI/CDコンポーネントに移植する手軽さを示すものでもあります。私のコンポーネントの多くで大切にしているベストプラクティスの一つは、コンポーネントが動作している状態のサンプルコードへのリンクを必ず提供することです。これにより、アップデート時のテストも容易になります。",[67,149,151,152],{"id":150},"_7-kaniko","7. ",[22,153,156],{"href":154,"rel":155},"https://gitlab.com/explore/catalog/guided-explorations/ci-components/kaniko",[],"Kaniko",[12,158,159],{},"Kaniko は、Docker-in-Docker（DinD）の特権モードを必要とせずにコンテナをビルドできるコンテナです。このコンポーネントは、多くの OpenContainers ラベルとマルチアーキテクチャビルドをサポートしています。",[67,161,163,164],{"id":162},"_8-ci-component-publishing-utilities","8. ",[22,165,168],{"href":166,"rel":167},"https://gitlab.com/explore/catalog/guided-explorations/ci-components/ci-component-pub",[],"CI Component Publishing Utilities",[12,170,171,172,174],{},"コンポーネントを作るにつれ、「コンポーネント公開用のCIコード」が何度も重複していることに気づき、それ自体をコンポーネント化する候補になりました。ここに挙げた他のコンポーネントはすべて、このコンポーネントを活用しています。また、このコンポーネント自身もコンポーネントを使用しており、",[46,173,99],{}," を使って次のバージョンを取得しています。",[12,176,177,178,180],{},"なお、CI Component Publishing Utilities は自分自身を公開します。私の多くのコンポーネントでは、標準の「インプット」READMEセクションを「インプットと設定」に拡張し、設定がインプット経由かどうかを示す列を追加しています。インプットを優先するのが原則ですが、変数の方が柔軟性が高い場合や、ユーティリティがすでにサポートしている環境変数を通じてユーザーが主要な設定を行えることを文書化したい場合もあります。CI Component Publishing Utilities は ",[46,179,156],{}," CI コンポーネントも使用しており、プロジェクトのルートに Dockerfile が見つかった場合（または変数でパスを指定した場合）に、同じバージョンのコンテナをビルドします。これにより、コンポーネントとそれをサポートするコンテナのバージョンが同期されます。マルチアーキテクチャのコンテナビルドにも対応しています。詳細は上記のドキュメントをご覧ください！",[60,182,183],{"id":183},"コンポーネントテンプレートを使って始める",[12,185,186],{},"Hello World コンポーネントは、新しいコンポーネントを始める際の個人的なテンプレートとして活用しています。CI Component Publishing Utilities と適切な README が組み込まれています。",[12,188,189,190,193,194,197],{},"CIコードのみのコンポーネントには ",[22,191,75],{"href":73,"rel":192},[]," のソースをコピーして始め、コンテナが必要なものには ",[22,195,87],{"href":85,"rel":196},[]," から始めます。クリーンなコミット履歴を保つため、基本的にソースだけを新しいプロジェクトにコピーしています。",[12,199,200],{},"コンポーネントが安定して十分に開発されたと感じたら、手動でパイプラインを実行し、バージョンを 1.1.0 以上に強制設定します。その後は CI Component Publishing Utilities が自動でバージョンをインクリメントしていきます。",[60,202,204],{"id":203},"ci-コンポーネント開発者のガイドとプラクティス","CI コンポーネント開発者のガイドとプラクティス",[12,206,207,212,213,217,218,223,224,229],{},[22,208,211],{"href":209,"rel":210},"https://gitlab.com/guided-explorations/ci-components/gitlab-profile",[],"Darwin の CI コンポーネント開発者ガイド"," — コンポーネント構築のアプローチを広く公開したいと考え、CI/CDコンポーネントとして公開するという方法を選びました。また、CI/CDコンポーネントのアーキテクチャと ",[22,214,216],{"href":32,"rel":215},[],"CI/CDカタログ","を作成した ",[22,219,222],{"href":220,"rel":221},"https://docs.gitlab.com/ci/components/",[],"GitLab パイプラインオーサリング","チームが、",[22,225,228],{"href":226,"rel":227},"https://docs.gitlab.com/ee/ci/components/#best-practices",[],"CI コンポーネントのベストプラクティス","として優れた内容を公開しています。私のプラクティスはこれらを参照しつつ、自分自身の経験から得た独自のものも多数含まれています。",[60,231,233],{"id":232},"cicdコンポーネントとソースを探す","CI/CDコンポーネントとソースを探す",[12,235,236,239,240,245],{},[22,237,34],{"href":32,"rel":238},[],"の検索機能はまだ改善中ですが、ソースプロジェクトの説明文は自由テキストで検索できます。そこで、すべてのコンポーネントソースプロジェクトの説明に共通テキストを含めることで、",[22,241,244],{"href":242,"rel":243},"https://gitlab.com/explore/catalog?search=Part+of+the+DarwinJS+Builder+Component+Library",[],"カタログ内で作成したコンポーネントを一覧表示","できるようにしました。",[12,247,248],{},"GitLab.com 上の場所にかかわらず、コンポーネントソースを見つけやすくするために次の対策を行っています。",[40,250,251,260],{},[43,252,253,254,259],{},"すべてのプロジェクトに ",[22,255,258],{"href":256,"rel":257},"https://gitlab.com/explore/projects/topics/DarwinJS+Component+Builder+Libary",[],"DarwinJS Component Builder Library"," というリポジトリトピックを追加しています。",[43,261,262,263,270],{},"有機的に発見した ",[22,264,267],{"href":265,"rel":266},"https://gitlab.com/explore/projects/topics/GitLab+CICD+Components",[],[104,268,269],{},"GitLab CICD Components"," タグも付与しています。",[12,272,273],{},"上記の方法はどちらも、コンポーネントとそのソースへのインデックスを提供するのに役立ちます。",[12,275,276],{},"私の CI/CDコンポーネント開発の歩みが、今後の皆さんのお役に立てれば幸いです。",[278,279,280,283],"blockquote",{},[12,281,282],{},"CI/CDカタログとコンポーネントについてさらに詳しく：",[40,284,285,291,298,305],{},[43,286,287],{},[22,288,290],{"href":32,"rel":289},[],"CI/CDカタログがGAに：パイプラインをゼロから作る時代は終わった",[43,292,293],{},[22,294,297],{"href":295,"rel":296},"https://about.gitlab.com/blog/faq-gitlab-ci-cd-catalog/",[],"FAQ: GitLab CI/CDカタログ",[43,299,300],{},[22,301,304],{"href":302,"rel":303},"https://docs.gitlab.com/ee/ci/components/",[],"ドキュメント: CI/CDコンポーネントとCI/CDカタログ",[43,306,307],{},[22,308,311],{"href":309,"rel":310},"https://about.gitlab.com/blog/introducing-ci-components/",[],"GitLabのCI/CDコンポーネントの紹介と活用方法",{"title":313,"searchDepth":314,"depth":314,"links":315},"",2,[316,335,336,337],{"id":62,"depth":314,"text":62,"children":317},[318,321,323,325,327,329,331,333],{"id":69,"depth":319,"text":320},3,"1. Hello World",{"id":81,"depth":319,"text":322},"2. Hello World Container",{"id":93,"depth":319,"text":324},"3. GitVersion Ultimate Auto Semversioning",{"id":110,"depth":319,"text":326},"4. Amazon CodeGuru Secure SAST Scanner",{"id":126,"depth":319,"text":328},"5. Checkov IaC SAST",{"id":138,"depth":319,"text":330},"6. Super-Linter",{"id":150,"depth":319,"text":332},"7. Kaniko",{"id":162,"depth":319,"text":334},"8. CI Component Publishing Utilities",{"id":183,"depth":314,"text":183},{"id":203,"depth":314,"text":204},{"id":232,"depth":314,"text":233},"open-source","2024-06-04","共有可能なインクルード型テンプレートを作成してきた開発者が、テンプレートをGitLab CI/CDコンポーネントとCI/CDカタログへ移行した実体験をご紹介します。独立したバージョン管理やグローバルな可視性など、移行によって得られた具体的なメリットも解説します。","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663857/Blog/Hero%20Images/blog-image-template-1800x945__12_.png",{},true,"/ja-jp/blog/a-ci-component-builders-journey",{"title":5,"description":340,"ogTitle":5,"ogDescription":340,"noIndex":343,"ogImage":344,"ogUrl":349,"ogSiteName":350,"ogType":351,"canonicalUrls":349},"https://about.gitlab.com/blog/a-ci-component-builders-journey","https://about.gitlab.com","article","a-ci-component-builders-journey","ja-jp/blog/a-ci-component-builders-journey",[355,356,357],"CI/CD","CI","CD","BlogPost","gFrZZHSptM410WKcuSZZerO9RBwYw8-miZ_DibbMbbU",{"logo":361,"freeTrial":366,"sales":371,"login":376,"items":381,"search":697,"minimal":730,"duo":747,"switchNav":756,"pricingDeployment":767},{"config":362},{"href":363,"dataGaName":364,"dataGaLocation":365},"/ja-jp/","gitlab logo","header",{"text":367,"config":368},"無料トライアルを開始",{"href":369,"dataGaName":370,"dataGaLocation":365},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp&glm_content=default-saas-trial/","free trial",{"text":372,"config":373},"お問い合わせはこちら",{"href":374,"dataGaName":375,"dataGaLocation":365},"/ja-jp/sales/","sales",{"text":377,"config":378},"サインイン",{"href":379,"dataGaName":380,"dataGaLocation":365},"https://gitlab.com/users/sign_in/","sign in",[382,411,512,517,621,677],{"text":383,"config":384,"menu":386},"プラットフォーム",{"dataNavLevelOne":385},"platform",{"type":387,"columns":388},"cards",[389,395,403],{"title":383,"description":390,"link":391},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":392,"config":393},"プラットフォームの詳細はこちら",{"href":394,"dataGaName":385,"dataGaLocation":365},"/ja-jp/platform/",{"title":396,"description":397,"link":398},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":399,"config":400},"GitLab Duoのご紹介",{"href":401,"dataGaName":402,"dataGaLocation":365},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":404,"description":405,"link":406},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":407,"config":408},"詳細はこちら",{"href":409,"dataGaName":410,"dataGaLocation":365},"/ja-jp/why-gitlab/","why gitlab",{"text":412,"left":346,"config":413,"menu":415},"製品",{"dataNavLevelOne":414},"solutions",{"type":416,"link":417,"columns":421,"feature":491},"lists",{"text":418,"config":419},"すべてのソリューションを表示",{"href":420,"dataGaName":414,"dataGaLocation":365},"/ja-jp/solutions/",[422,446,469],{"title":423,"description":424,"link":425,"items":430},"自動化","CI/CDと自動化でデプロイを加速",{"config":426},{"icon":427,"href":428,"dataGaName":429,"dataGaLocation":365},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[431,434,437,442],{"text":355,"config":432},{"href":433,"dataGaLocation":365,"dataGaName":355},"/ja-jp/solutions/continuous-integration/",{"text":396,"config":435},{"href":401,"dataGaLocation":365,"dataGaName":436},"gitlab duo agent platform - product menu",{"text":438,"config":439},"ソースコード管理",{"href":440,"dataGaLocation":365,"dataGaName":441},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":443,"config":444},"自動化されたソフトウェアデリバリー",{"href":428,"dataGaLocation":365,"dataGaName":445},"Automated software delivery",{"title":447,"description":448,"link":449,"items":454},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":450},{"href":451,"dataGaName":452,"dataGaLocation":365,"icon":453},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[455,459,464],{"text":456,"config":457},"アプリケーションセキュリティテスト",{"href":451,"dataGaName":458,"dataGaLocation":365},"Application security testing",{"text":460,"config":461},"ソフトウェアサプライチェーンセキュリティ",{"href":462,"dataGaLocation":365,"dataGaName":463},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":465,"config":466},"ソフトウェアコンプライアンス",{"href":467,"dataGaName":468,"dataGaLocation":365},"/ja-jp/solutions/software-compliance/","software compliance",{"title":470,"link":471,"items":476},"測定",{"config":472},{"icon":473,"href":474,"dataGaName":475,"dataGaLocation":365},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[477,481,486],{"text":478,"config":479},"可視性と測定",{"href":474,"dataGaLocation":365,"dataGaName":480},"Visibility and Measurement",{"text":482,"config":483},"バリューストリーム管理",{"href":484,"dataGaLocation":365,"dataGaName":485},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":487,"config":488},"分析とインサイト",{"href":489,"dataGaLocation":365,"dataGaName":490},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":492,"type":416,"items":493},"GitLabが活躍する場所",[494,500,506],{"text":495,"config":496},"大企業",{"icon":497,"href":498,"dataGaLocation":365,"dataGaName":499},"Building","/ja-jp/enterprise/","enterprise",{"text":501,"config":502},"スモールビジネス",{"icon":503,"href":504,"dataGaLocation":365,"dataGaName":505},"Work","/ja-jp/small-business/","small business",{"text":507,"config":508},"公共部門",{"icon":509,"href":510,"dataGaLocation":365,"dataGaName":511},"Organization","/ja-jp/solutions/public-sector/","public sector",{"text":513,"config":514},"価格",{"href":515,"dataGaName":516,"dataGaLocation":365,"dataNavLevelOne":516},"/ja-jp/pricing/","pricing",{"text":518,"config":519,"menu":521},"関連リソース",{"dataNavLevelOne":520},"resources",{"type":416,"link":522,"columns":526,"feature":610},{"text":523,"config":524},"すべてのリソースを表示",{"href":525,"dataGaName":520,"dataGaLocation":365},"/ja-jp/resources/",[527,560,582],{"title":528,"items":529},"はじめに",[530,535,540,545,550,555],{"text":531,"config":532},"インストール",{"href":533,"dataGaName":534,"dataGaLocation":365},"/ja-jp/install/","install",{"text":536,"config":537},"クイックスタートガイド",{"href":538,"dataGaName":539,"dataGaLocation":365},"/ja-jp/get-started/","quick setup checklists",{"text":541,"config":542},"学ぶ",{"href":543,"dataGaLocation":365,"dataGaName":544},"https://university.gitlab.com/","learn",{"text":546,"config":547},"製品ドキュメント",{"href":548,"dataGaName":549,"dataGaLocation":365},"https://docs.gitlab.com/","product documentation",{"text":551,"config":552},"ベストプラクティスビデオ",{"href":553,"dataGaName":554,"dataGaLocation":365},"/ja-jp/getting-started-videos/","best practice videos",{"text":556,"config":557},"インテグレーション",{"href":558,"dataGaName":559,"dataGaLocation":365},"/ja-jp/integrations/","integrations",{"title":561,"items":562},"検索する",[563,568,573,577],{"text":564,"config":565},"お客様成功事例",{"href":566,"dataGaName":567,"dataGaLocation":365},"/ja-jp/customers/","customer success stories",{"text":569,"config":570},"ブログ",{"href":571,"dataGaName":572,"dataGaLocation":365},"/ja-jp/blog/","blog",{"text":574,"config":575},"The Source",{"href":576,"dataGaName":572,"dataGaLocation":365},"/ja-jp/the-source/",{"text":578,"config":579},"リモート",{"href":580,"dataGaName":581,"dataGaLocation":365},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":583,"items":584},"つなげる",[585,590,595,600,605],{"text":586,"config":587},"GitLabサービス",{"href":588,"dataGaName":589,"dataGaLocation":365},"/ja-jp/services/","services",{"text":591,"config":592},"コミュニティ",{"href":593,"dataGaName":594,"dataGaLocation":365},"/community/","community",{"text":596,"config":597},"フォーラム",{"href":598,"dataGaName":599,"dataGaLocation":365},"https://forum.gitlab.com/","forum",{"text":601,"config":602},"イベント",{"href":603,"dataGaName":604,"dataGaLocation":365},"/events/","events",{"text":606,"config":607},"パートナー",{"href":608,"dataGaName":609,"dataGaLocation":365},"/ja-jp/partners/","partners",{"config":611,"title":614,"text":615,"link":616},{"background":612,"textColor":613},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","GitLabの最新情報","最新の機能と改善点に関する情報をお届けします。",{"text":617,"config":618},"最新情報を読む",{"href":619,"dataGaName":620,"dataGaLocation":365},"/ja-jp/whats-new/","whats new",{"text":622,"config":623,"menu":625},"企業情報",{"dataNavLevelOne":624},"company",{"type":416,"columns":626},[627],{"items":628},[629,634,640,642,647,652,657,662,667,672],{"text":630,"config":631},"GitLabについて",{"href":632,"dataGaName":633,"dataGaLocation":365},"/ja-jp/company/","about",{"text":635,"config":636,"footerGa":639},"採用情報",{"href":637,"dataGaName":638,"dataGaLocation":365},"/jobs/","jobs",{"dataGaName":638},{"text":601,"config":641},{"href":603,"dataGaName":604,"dataGaLocation":365},{"text":643,"config":644},"経営陣",{"href":645,"dataGaName":646,"dataGaLocation":365},"/company/team/e-group/","leadership",{"text":648,"config":649},"ハンドブック",{"href":650,"dataGaName":651,"dataGaLocation":365},"https://handbook.gitlab.com/","handbook",{"text":653,"config":654},"投資家向け情報",{"href":655,"dataGaName":656,"dataGaLocation":365},"https://ir.gitlab.com/","investor relations",{"text":658,"config":659},"トラストセンター",{"href":660,"dataGaName":661,"dataGaLocation":365},"/ja-jp/security/","trust center",{"text":663,"config":664},"AI Transparency Center",{"href":665,"dataGaName":666,"dataGaLocation":365},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":668,"config":669},"ニュースレター",{"href":670,"dataGaName":671,"dataGaLocation":365},"/company/contact/#contact-forms","newsletter",{"text":673,"config":674},"プレス",{"href":675,"dataGaName":676,"dataGaLocation":365},"/press/","press",{"text":678,"config":679,"menu":680},"お問い合わせ",{"dataNavLevelOne":624},{"type":416,"columns":681},[682],{"items":683},[684,687,692],{"text":372,"config":685},{"href":374,"dataGaName":686,"dataGaLocation":365},"talk to sales",{"text":688,"config":689},"サポートを受ける",{"href":690,"dataGaName":691,"dataGaLocation":365},"https://support.gitlab.com","support portal",{"text":693,"config":694},"カスタマーポータル",{"href":695,"dataGaName":696,"dataGaLocation":365},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":698,"login":699,"suggestions":706},"閉じる",{"text":700,"link":701},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":702,"config":703},"GitLab.com",{"href":379,"dataGaName":704,"dataGaLocation":705},"search login","search",{"text":707,"default":708},"提案",[709,711,716,718,722,726],{"text":396,"config":710},{"href":401,"dataGaName":396,"dataGaLocation":705},{"text":712,"config":713},"コード提案（AI）",{"href":714,"dataGaName":715,"dataGaLocation":705},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":355,"config":717},{"href":433,"dataGaName":355,"dataGaLocation":705},{"text":719,"config":720},"GitLab on AWS",{"href":721,"dataGaName":719,"dataGaLocation":705},"/ja-jp/partners/technology-partners/aws/",{"text":723,"config":724},"GitLab on Google Cloud",{"href":725,"dataGaName":723,"dataGaLocation":705},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":727,"config":728},"GitLabを選ぶ理由",{"href":409,"dataGaName":729,"dataGaLocation":705},"Why GitLab?",{"freeTrial":731,"mobileIcon":735,"desktopIcon":740,"secondaryButton":743},{"text":367,"config":732},{"href":733,"dataGaName":370,"dataGaLocation":734},"https://gitlab.com/-/trials/new/","nav",{"altText":736,"config":737},"GitLabアイコン",{"src":738,"dataGaName":739,"dataGaLocation":734},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":736,"config":741},{"src":742,"dataGaName":739,"dataGaLocation":734},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":528,"config":744},{"href":745,"dataGaName":746,"dataGaLocation":734},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/get-started/","get started",{"freeTrial":748,"mobileIcon":752,"desktopIcon":754},{"text":749,"config":750},"GitLab Duoの詳細について",{"href":401,"dataGaName":751,"dataGaLocation":734},"gitlab duo",{"altText":736,"config":753},{"src":738,"dataGaName":739,"dataGaLocation":734},{"altText":736,"config":755},{"src":742,"dataGaName":739,"dataGaLocation":734},{"button":757,"mobileIcon":762,"desktopIcon":764},{"text":758,"config":759},"/switch",{"href":760,"dataGaName":761,"dataGaLocation":734},"#contact","switch",{"altText":736,"config":763},{"src":738,"dataGaName":739,"dataGaLocation":734},{"altText":736,"config":765},{"src":766,"dataGaName":739,"dataGaLocation":734},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":768,"mobileIcon":773,"desktopIcon":775},{"text":769,"config":770},"料金ページに戻る",{"href":515,"dataGaName":771,"dataGaLocation":734,"icon":772},"back to pricing","GoBack",{"altText":736,"config":774},{"src":738,"dataGaName":739,"dataGaLocation":734},{"altText":736,"config":776},{"src":742,"dataGaName":739,"dataGaLocation":734},{"title":778,"button":779,"config":784},"エージェント型AIがソフトウェアデリバリーをどのように変革するかをご覧ください",{"text":780,"config":781},"6月18日のGitLab Transcend日本開催版に申し込む",{"href":782,"dataGaName":783,"dataGaLocation":365},"/ja-jp/events/transcend/virtual/","transcend event",{"layout":785,"disabled":343},"release",{"data":787},{"text":788,"source":789,"edit":795,"contribute":800,"config":805,"items":810,"minimal":1018},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":790,"config":791},"ページのソースを表示",{"href":792,"dataGaName":793,"dataGaLocation":794},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":796,"config":797},"このページを編集",{"href":798,"dataGaName":799,"dataGaLocation":794},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":801,"config":802},"ご協力をお願いします",{"href":803,"dataGaName":804,"dataGaLocation":794},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":806,"facebook":807,"youtube":808,"linkedin":809},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[811,856,909,953,985],{"title":513,"links":812,"subMenu":827},[813,817,822],{"text":814,"config":815},"プランの表示",{"href":515,"dataGaName":816,"dataGaLocation":794},"view plans",{"text":818,"config":819},"Premiumを選ぶ理由",{"href":820,"dataGaName":821,"dataGaLocation":794},"/ja-jp/pricing/premium/","why premium",{"text":823,"config":824},"Ultimateを選ぶ理由",{"href":825,"dataGaName":826,"dataGaLocation":794},"/ja-jp/pricing/ultimate/","why ultimate",[828],{"title":678,"links":829},[830,832,834,836,841,846,851],{"text":678,"config":831},{"href":374,"dataGaName":375,"dataGaLocation":794},{"text":688,"config":833},{"href":690,"dataGaName":691,"dataGaLocation":794},{"text":693,"config":835},{"href":695,"dataGaName":696,"dataGaLocation":794},{"text":837,"config":838},"ステータス",{"href":839,"dataGaName":840,"dataGaLocation":794},"https://status.gitlab.com/","status",{"text":842,"config":843},"利用規約",{"href":844,"dataGaName":845,"dataGaLocation":794},"/terms/","terms of use",{"text":847,"config":848},"プライバシーに関する声明",{"href":849,"dataGaName":850,"dataGaLocation":794},"/ja-jp/privacy/","privacy statement",{"text":852,"config":853},"Cookie 優先設定",{"dataGaName":854,"dataGaLocation":794,"id":855,"isOneTrustButton":346},"cookie preferences","ot-sdk-btn",{"title":412,"links":857,"subMenu":866},[858,862],{"text":859,"config":860},"DevSecOpsプラットフォーム",{"href":394,"dataGaName":861,"dataGaLocation":794},"devsecops platform",{"text":863,"config":864},"AI支援開発",{"href":401,"dataGaName":865,"dataGaLocation":794},"ai-assisted development",[867],{"title":868,"links":869},"トピック",[870,874,879,884,889,894,899,904],{"text":355,"config":871},{"href":872,"dataGaName":873,"dataGaLocation":794},"/ja-jp/topics/ci-cd/","cicd",{"text":875,"config":876},"GitOps",{"href":877,"dataGaName":878,"dataGaLocation":794},"/ja-jp/topics/gitops/","gitops",{"text":880,"config":881},"DevOps",{"href":882,"dataGaName":883,"dataGaLocation":794},"/ja-jp/topics/devops/","devops",{"text":885,"config":886},"バージョン管理",{"href":887,"dataGaName":888,"dataGaLocation":794},"/ja-jp/topics/version-control/","version control",{"text":890,"config":891},"DevSecOps",{"href":892,"dataGaName":893,"dataGaLocation":794},"/ja-jp/topics/devsecops/","devsecops",{"text":895,"config":896},"クラウドネイティブ",{"href":897,"dataGaName":898,"dataGaLocation":794},"/ja-jp/topics/cloud-native/","cloud native",{"text":900,"config":901},"コーディングのためのAI",{"href":902,"dataGaName":903,"dataGaLocation":794},"/ja-jp/topics/devops/ai-for-coding/","ai for coding",{"text":905,"config":906},"エージェント型AI",{"href":907,"dataGaName":908,"dataGaLocation":794},"/ja-jp/topics/agentic-ai/","agentic ai",{"title":910,"links":911},"ソリューション",[912,915,917,922,926,929,932,935,938,940,943,948],{"text":456,"config":913},{"href":451,"dataGaName":914,"dataGaLocation":794},"Application Security Testing",{"text":443,"config":916},{"href":428,"dataGaName":429,"dataGaLocation":794},{"text":918,"config":919},"アジャイル開発",{"href":920,"dataGaName":921,"dataGaLocation":794},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":923,"config":924},"SCM",{"href":440,"dataGaName":925,"dataGaLocation":794},"source code management",{"text":355,"config":927},{"href":433,"dataGaName":928,"dataGaLocation":794},"continuous integration & delivery",{"text":482,"config":930},{"href":484,"dataGaName":931,"dataGaLocation":794},"value stream management",{"text":875,"config":933},{"href":934,"dataGaName":878,"dataGaLocation":794},"/ja-jp/solutions/gitops/",{"text":936,"config":937},"エンタープライズ",{"href":498,"dataGaName":499,"dataGaLocation":794},{"text":501,"config":939},{"href":504,"dataGaName":505,"dataGaLocation":794},{"text":941,"config":942},"公共機関",{"href":510,"dataGaName":511,"dataGaLocation":794},{"text":944,"config":945},"教育",{"href":946,"dataGaName":947,"dataGaLocation":794},"/ja-jp/solutions/education/","education",{"text":949,"config":950},"金融サービス",{"href":951,"dataGaName":952,"dataGaLocation":794},"/ja-jp/solutions/finance/","financial services",{"title":954,"links":955},"リソース",[956,958,960,962,966,968,971,973,975,977,979,981,983],{"text":531,"config":957},{"href":533,"dataGaName":534,"dataGaLocation":794},{"text":536,"config":959},{"href":538,"dataGaName":539,"dataGaLocation":794},{"text":541,"config":961},{"href":543,"dataGaName":544,"dataGaLocation":794},{"text":546,"config":963},{"href":964,"dataGaName":965,"dataGaLocation":794},"https://docs.gitlab.com/ja-jp/","docs",{"text":569,"config":967},{"href":571,"dataGaName":572,"dataGaLocation":794},{"text":969,"config":970},"新着情報",{"href":619,"dataGaName":620,"dataGaLocation":794},{"text":564,"config":972},{"href":566,"dataGaName":567,"dataGaLocation":794},{"text":578,"config":974},{"href":580,"dataGaName":581,"dataGaLocation":794},{"text":586,"config":976},{"href":588,"dataGaName":589,"dataGaLocation":794},{"text":591,"config":978},{"href":593,"dataGaName":594,"dataGaLocation":794},{"text":596,"config":980},{"href":598,"dataGaName":599,"dataGaLocation":794},{"text":601,"config":982},{"href":603,"dataGaName":604,"dataGaLocation":794},{"text":606,"config":984},{"href":608,"dataGaName":609,"dataGaLocation":794},{"title":986,"links":987},"会社情報",[988,990,992,994,996,998,1002,1007,1009,1011,1013],{"text":630,"config":989},{"href":632,"dataGaName":624,"dataGaLocation":794},{"text":635,"config":991},{"href":637,"dataGaName":638,"dataGaLocation":794},{"text":643,"config":993},{"href":645,"dataGaName":646,"dataGaLocation":794},{"text":648,"config":995},{"href":650,"dataGaName":651,"dataGaLocation":794},{"text":653,"config":997},{"href":655,"dataGaName":656,"dataGaLocation":794},{"text":999,"config":1000},"Sustainability",{"href":1001,"dataGaName":999,"dataGaLocation":794},"/sustainability/",{"text":1003,"config":1004},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":1005,"dataGaName":1006,"dataGaLocation":794},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":658,"config":1008},{"href":660,"dataGaName":661,"dataGaLocation":794},{"text":668,"config":1010},{"href":670,"dataGaName":671,"dataGaLocation":794},{"text":673,"config":1012},{"href":675,"dataGaName":676,"dataGaLocation":794},{"text":1014,"config":1015},"現代奴隷制の透明性に関する声明",{"href":1016,"dataGaName":1017,"dataGaLocation":794},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1019},[1020,1022,1025],{"text":842,"config":1021},{"href":844,"dataGaName":845,"dataGaLocation":794},{"text":1023,"config":1024},"Cookieの設定",{"dataGaName":854,"dataGaLocation":794,"id":855,"isOneTrustButton":346},{"text":847,"config":1026},{"href":849,"dataGaName":850,"dataGaLocation":794},[1028],{"id":1029,"title":7,"body":342,"config":1030,"content":1032,"description":342,"extension":1038,"meta":1039,"navigation":346,"path":1040,"seo":1041,"stem":1042,"__hash__":1043},"blogAuthors/en-us/blog/authors/darwin-sanoy.yml",{"template":1031},"BlogAuthor",{"role":1033,"name":7,"config":1034},"Field Chief Cloud Architect",{"headshot":1035,"linkedin":1036,"ctfId":1037},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659751/Blog/Author%20Headshots/Darwin-Sanoy-headshot-395-square-gitlab-teampage-avatar.png","https://linkedin.com/in/darwinsanoy","DarwinJS","yml",{},"/en-us/blog/authors/darwin-sanoy",{},"en-us/blog/authors/darwin-sanoy","UkMMwmU5o2e6Y-wBltA9E_z96LvHuB-bG6VW9DsLzIY",[1045,1053,1061],{"title":1046,"description":1047,"heroImage":1048,"category":338,"date":1049,"authors":1050,"slug":1052,"externalUrl":342},"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",[1051],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"title":1054,"description":1055,"heroImage":1056,"category":338,"date":1057,"authors":1058,"slug":1060,"externalUrl":342},"git mergeコマンドの基本を徹底解説","この記事では、git mergeコマンドについてコマンドの基本的な使い方からリクエストコードまで解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1754287290/averr2ecwl01q2f9lknf.jpg","2025-08-04",[1059],"GitLab Team","git-merge-command-overview",{"title":1062,"description":1063,"heroImage":1064,"category":338,"date":1065,"authors":1066,"slug":1067,"externalUrl":342},"オープンソースソフトウェア（OSS）とは？詳しく解説​","オープンソースの意味や、メリットとデメリットについて、分かりやすく解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752720740/g9x8oi988xuhioglpczi.jpg","2025-07-17",[1059],"what-is-open-source",{"promotions":1069},[1070,1084,1096,1108],{"id":1071,"categories":1072,"header":1074,"text":1075,"button":1076,"image":1081},"ai-modernization",[1073],"ai","AIの真価、組織全体で発揮できていますか？","所要時間は5分以内です",{"text":1077,"config":1078},"AI成熟度スコアを確認する",{"href":1079,"dataGaName":1080,"dataGaLocation":572},"/ja-jp/assessments/ai-modernization-assessment/","modernization assessment",{"config":1082},{"src":1083},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1085,"categories":1086,"header":1088,"text":1075,"button":1089,"image":1093},"devops-modernization",[1087,893],"product","単にツールを管理するだけでなく、イノベーションを提供していますか？",{"text":1090,"config":1091},"DevOps成熟度スコアを確認しましょう",{"href":1092,"dataGaName":1080,"dataGaLocation":572},"/ja-jp/assessments/devops-modernization-assessment/",{"config":1094},{"src":1095},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1097,"categories":1098,"header":1100,"text":1075,"button":1101,"image":1105},"security-modernization",[1099],"security","スピードのためにセキュリティを犠牲にしていませんか？",{"text":1102,"config":1103},"セキュリティ成熟度スコアを確認しましょう",{"href":1104,"dataGaName":1080,"dataGaLocation":572},"/ja-jp/assessments/security-modernization-assessment/",{"config":1106},{"src":1107},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1109,"paths":1110,"header":1113,"text":1114,"button":1115,"image":1120},"github-azure-migration",[1111,1112],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","チームはGitHubのAzure移行に対応できていますか？","GitHubはすでにAzureを基盤として再構築を進めています。それがあなたのチームにとって何を意味するのか、ご確認ください。",{"text":1116,"config":1117},"GitLabとGitHubの比較を見る",{"href":1118,"dataGaName":1119,"dataGaLocation":572},"/ja-jp/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1121},{"src":1095},{"header":1123,"blurb":1124,"button":1125,"secondaryButton":1129},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":367,"config":1126},{"href":1127,"dataGaName":370,"dataGaLocation":1128},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/ja-jp/","feature",{"text":678,"config":1130},{"href":374,"dataGaName":375,"dataGaLocation":1128},1781392796032]