[{"data":1,"prerenderedAt":1481},["ShallowReactive",2],{"/en-us/blog/tags/ci-cd":3,"navigation-ja-jp":20,"banner-ja-jp":435,"footer-ja-jp":448,"footer-source-/en-us/blog/tags/ci-cd/":658,"CI/CD-tag-page-ja-jp":661},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"content":8,"config":11,"_id":13,"_type":14,"title":15,"_source":16,"_file":17,"_stem":18,"_extension":19},"/en-us/blog/tags/ci-cd","tags",false,"",{"tag":9,"tagSlug":10},"CI/CD","ci-cd",{"template":12},"BlogTag","content:en-us:blog:tags:ci-cd.yml","yaml","Ci Cd","content","en-us/blog/tags/ci-cd.yml","en-us/blog/tags/ci-cd","yml",{"_path":21,"_dir":22,"_draft":6,"_partial":6,"_locale":7,"data":23,"_id":431,"_type":14,"title":432,"_source":16,"_file":433,"_stem":434,"_extension":19},"/shared/ja-jp/main-navigation","ja-jp",{"logo":24,"freeTrial":29,"sales":34,"login":39,"items":44,"search":375,"minimal":409,"duo":422},{"config":25},{"href":26,"dataGaName":27,"dataGaLocation":28},"/ja-jp/","gitlab logo","header",{"text":30,"config":31},"無料トライアルを開始",{"href":32,"dataGaName":33,"dataGaLocation":28},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":35,"config":36},"お問い合わせ",{"href":37,"dataGaName":38,"dataGaLocation":28},"/ja-jp/sales/","sales",{"text":40,"config":41},"サインイン",{"href":42,"dataGaName":43,"dataGaLocation":28},"https://gitlab.com/users/sign_in/","sign in",[45,89,186,191,297,357],{"text":46,"config":47,"cards":49,"footer":72},"プラットフォーム",{"dataNavLevelOne":48},"platform",[50,56,64],{"title":46,"description":51,"link":52},"最も包括的かつAIで強化されたDevSecOpsプラットフォーム",{"text":53,"config":54},"プラットフォームを詳しく見る",{"href":55,"dataGaName":48,"dataGaLocation":28},"/ja-jp/platform/",{"title":57,"description":58,"link":59},"GitLab Duo（AI）","開発のすべてのステージでAIを活用し、ソフトウェアをより迅速にビルド",{"text":60,"config":61},"GitLab Duoのご紹介",{"href":62,"dataGaName":63,"dataGaLocation":28},"/ja-jp/gitlab-duo/","gitlab duo ai",{"title":65,"description":66,"link":67},"GitLabが選ばれる理由","GitLabが大企業に選ばれる理由10選",{"text":68,"config":69},"詳細はこちら",{"href":70,"dataGaName":71,"dataGaLocation":28},"/ja-jp/why-gitlab/","why gitlab",{"title":73,"items":74},"利用を開始：",[75,80,85],{"text":76,"config":77},"プラットフォームエンジニアリング",{"href":78,"dataGaName":79,"dataGaLocation":28},"/ja-jp/solutions/platform-engineering/","platform engineering",{"text":81,"config":82},"開発者の経験",{"href":83,"dataGaName":84,"dataGaLocation":28},"/ja-jp/developer-experience/","Developer experience",{"text":86,"config":87},"MLOps",{"href":88,"dataGaName":86,"dataGaLocation":28},"/ja-jp/topics/devops/the-role-of-ai-in-devops/",{"text":90,"left":91,"config":92,"link":94,"lists":98,"footer":168},"製品",true,{"dataNavLevelOne":93},"solutions",{"text":95,"config":96},"すべてのソリューションを表示",{"href":97,"dataGaName":93,"dataGaLocation":28},"/ja-jp/solutions/",[99,124,146],{"title":100,"description":101,"link":102,"items":107},"自動化","CI/CDと自動化でデプロイを加速",{"config":103},{"icon":104,"href":105,"dataGaName":106,"dataGaLocation":28},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[108,111,115,120],{"text":9,"config":109},{"href":110,"dataGaLocation":28,"dataGaName":9},"/ja-jp/solutions/continuous-integration/",{"text":112,"config":113},"AIアシストによる開発",{"href":62,"dataGaLocation":28,"dataGaName":114},"AI assisted development",{"text":116,"config":117},"ソースコード管理",{"href":118,"dataGaLocation":28,"dataGaName":119},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":121,"config":122},"自動化されたソフトウェアデリバリー",{"href":105,"dataGaLocation":28,"dataGaName":123},"Automated software delivery",{"title":125,"description":126,"link":127,"items":132},"セキュリティ","セキュリティを損なうことなくコードをより迅速に完成",{"config":128},{"href":129,"dataGaName":130,"dataGaLocation":28,"icon":131},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[133,137,142],{"text":134,"config":135},"Application Security Testing",{"href":129,"dataGaName":136,"dataGaLocation":28},"Application security testing",{"text":138,"config":139},"ソフトウェアサプライチェーンの安全性",{"href":140,"dataGaLocation":28,"dataGaName":141},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":143,"config":144},"Software Compliance",{"href":145,"dataGaName":143,"dataGaLocation":28},"/ja-jp/solutions/software-compliance/",{"title":147,"link":148,"items":153},"測定",{"config":149},{"icon":150,"href":151,"dataGaName":152,"dataGaLocation":28},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[154,158,163],{"text":155,"config":156},"可視性と測定",{"href":151,"dataGaLocation":28,"dataGaName":157},"Visibility and Measurement",{"text":159,"config":160},"バリューストリーム管理",{"href":161,"dataGaLocation":28,"dataGaName":162},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":164,"config":165},"分析とインサイト",{"href":166,"dataGaLocation":28,"dataGaName":167},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":169,"items":170},"GitLabが活躍する場所",[171,176,181],{"text":172,"config":173},"Enterprise",{"href":174,"dataGaLocation":28,"dataGaName":175},"/ja-jp/enterprise/","enterprise",{"text":177,"config":178},"スモールビジネス",{"href":179,"dataGaLocation":28,"dataGaName":180},"/ja-jp/small-business/","small business",{"text":182,"config":183},"公共機関",{"href":184,"dataGaLocation":28,"dataGaName":185},"/ja-jp/solutions/public-sector/","public sector",{"text":187,"config":188},"価格",{"href":189,"dataGaName":190,"dataGaLocation":28,"dataNavLevelOne":190},"/ja-jp/pricing/","pricing",{"text":192,"config":193,"link":195,"lists":199,"feature":284},"関連リソース",{"dataNavLevelOne":194},"resources",{"text":196,"config":197},"すべてのリソースを表示",{"href":198,"dataGaName":194,"dataGaLocation":28},"/ja-jp/resources/",[200,233,256],{"title":201,"items":202},"はじめに",[203,208,213,218,223,228],{"text":204,"config":205},"インストール",{"href":206,"dataGaName":207,"dataGaLocation":28},"/ja-jp/install/","install",{"text":209,"config":210},"クイックスタートガイド",{"href":211,"dataGaName":212,"dataGaLocation":28},"/ja-jp/get-started/","quick setup checklists",{"text":214,"config":215},"学ぶ",{"href":216,"dataGaLocation":28,"dataGaName":217},"https://university.gitlab.com/","learn",{"text":219,"config":220},"製品ドキュメント",{"href":221,"dataGaName":222,"dataGaLocation":28},"https://docs.gitlab.com/","product documentation",{"text":224,"config":225},"ベストプラクティスビデオ",{"href":226,"dataGaName":227,"dataGaLocation":28},"/ja-jp/getting-started-videos/","best practice videos",{"text":229,"config":230},"インテグレーション",{"href":231,"dataGaName":232,"dataGaLocation":28},"/ja-jp/integrations/","integrations",{"title":234,"items":235},"検索する",[236,241,246,251],{"text":237,"config":238},"お客様成功事例",{"href":239,"dataGaName":240,"dataGaLocation":28},"/ja-jp/customers/","customer success stories",{"text":242,"config":243},"ブログ",{"href":244,"dataGaName":245,"dataGaLocation":28},"/ja-jp/blog/","blog",{"text":247,"config":248},"リモート",{"href":249,"dataGaName":250,"dataGaLocation":28},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":252,"config":253},"TeamOps",{"href":254,"dataGaName":255,"dataGaLocation":28},"/ja-jp/teamops/","teamops",{"title":257,"items":258},"つなげる",[259,264,269,274,279],{"text":260,"config":261},"GitLabサービス",{"href":262,"dataGaName":263,"dataGaLocation":28},"/ja-jp/services/","services",{"text":265,"config":266},"コミュニティ",{"href":267,"dataGaName":268,"dataGaLocation":28},"/community/","community",{"text":270,"config":271},"フォーラム",{"href":272,"dataGaName":273,"dataGaLocation":28},"https://forum.gitlab.com/","forum",{"text":275,"config":276},"イベント",{"href":277,"dataGaName":278,"dataGaLocation":28},"/events/","events",{"text":280,"config":281},"パートナー",{"href":282,"dataGaName":283,"dataGaLocation":28},"/ja-jp/partners/","partners",{"backgroundColor":285,"textColor":286,"text":287,"image":288,"link":292},"#2f2a6b","#fff","ソフトウェア開発の未来への洞察",{"altText":289,"config":290},"ソースプロモカード",{"src":291},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":293,"config":294},"最新情報を読む",{"href":295,"dataGaName":296,"dataGaLocation":28},"/ja-jp/the-source/","the source",{"text":298,"config":299,"lists":301},"会社情報",{"dataNavLevelOne":300},"company",[302],{"items":303},[304,309,315,317,322,327,332,337,342,347,352],{"text":305,"config":306},"GitLabについて",{"href":307,"dataGaName":308,"dataGaLocation":28},"/ja-jp/company/","about",{"text":310,"config":311,"footerGa":314},"採用情報",{"href":312,"dataGaName":313,"dataGaLocation":28},"/jobs/","jobs",{"dataGaName":313},{"text":275,"config":316},{"href":277,"dataGaName":278,"dataGaLocation":28},{"text":318,"config":319},"経営陣",{"href":320,"dataGaName":321,"dataGaLocation":28},"/company/team/e-group/","leadership",{"text":323,"config":324},"チーム",{"href":325,"dataGaName":326,"dataGaLocation":28},"/company/team/","team",{"text":328,"config":329},"ハンドブック",{"href":330,"dataGaName":331,"dataGaLocation":28},"https://handbook.gitlab.com/","handbook",{"text":333,"config":334},"投資家向け情報",{"href":335,"dataGaName":336,"dataGaLocation":28},"https://ir.gitlab.com/","investor relations",{"text":338,"config":339},"トラストセンター",{"href":340,"dataGaName":341,"dataGaLocation":28},"/ja-jp/security/","trust center",{"text":343,"config":344},"AI Transparency Center",{"href":345,"dataGaName":346,"dataGaLocation":28},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":348,"config":349},"ニュースレター",{"href":350,"dataGaName":351,"dataGaLocation":28},"/company/contact/","newsletter",{"text":353,"config":354},"プレス",{"href":355,"dataGaName":356,"dataGaLocation":28},"/press/","press",{"text":35,"config":358,"lists":359},{"dataNavLevelOne":300},[360],{"items":361},[362,365,370],{"text":35,"config":363},{"href":37,"dataGaName":364,"dataGaLocation":28},"talk to sales",{"text":366,"config":367},"サポートを受ける",{"href":368,"dataGaName":369,"dataGaLocation":28},"/support/","get help",{"text":371,"config":372},"カスタマーポータル",{"href":373,"dataGaName":374,"dataGaLocation":28},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":376,"login":377,"suggestions":384},"閉じる",{"text":378,"link":379},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":380,"config":381},"GitLab.com",{"href":42,"dataGaName":382,"dataGaLocation":383},"search login","search",{"text":385,"default":386},"提案",[387,390,395,397,401,405],{"text":57,"config":388},{"href":62,"dataGaName":389,"dataGaLocation":383},"GitLab Duo (AI)",{"text":391,"config":392},"コード提案（AI）",{"href":393,"dataGaName":394,"dataGaLocation":383},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":9,"config":396},{"href":110,"dataGaName":9,"dataGaLocation":383},{"text":398,"config":399},"GitLab on AWS",{"href":400,"dataGaName":398,"dataGaLocation":383},"/ja-jp/partners/technology-partners/aws/",{"text":402,"config":403},"GitLab on Google Cloud",{"href":404,"dataGaName":402,"dataGaLocation":383},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":406,"config":407},"GitLabを選ぶ理由",{"href":70,"dataGaName":408,"dataGaLocation":383},"Why GitLab?",{"freeTrial":410,"mobileIcon":414,"desktopIcon":419},{"text":30,"config":411},{"href":412,"dataGaName":33,"dataGaLocation":413},"https://gitlab.com/-/trials/new/","nav",{"altText":415,"config":416},"GitLabアイコン",{"src":417,"dataGaName":418,"dataGaLocation":413},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":415,"config":420},{"src":421,"dataGaName":418,"dataGaLocation":413},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":423,"mobileIcon":427,"desktopIcon":429},{"text":424,"config":425},"GitLab Duoの詳細について",{"href":62,"dataGaName":426,"dataGaLocation":413},"gitlab duo",{"altText":415,"config":428},{"src":417,"dataGaName":418,"dataGaLocation":413},{"altText":415,"config":430},{"src":421,"dataGaName":418,"dataGaLocation":413},"content:shared:ja-jp:main-navigation.yml","Main Navigation","shared/ja-jp/main-navigation.yml","shared/ja-jp/main-navigation",{"_path":436,"_dir":22,"_draft":6,"_partial":6,"_locale":7,"title":437,"button":438,"config":443,"_id":445,"_type":14,"_source":16,"_file":446,"_stem":447,"_extension":19},"/shared/ja-jp/banner","GitLab Duo Agent Platformがパブリックベータ版で利用可能になりました！",{"text":439,"config":440},"ベータ版を試す",{"href":441,"dataGaName":442,"dataGaLocation":28},"/ja-jp/gitlab-duo/agent-platform/","duo banner",{"layout":444},"release","content:shared:ja-jp:banner.yml","shared/ja-jp/banner.yml","shared/ja-jp/banner",{"_path":449,"_dir":22,"_draft":6,"_partial":6,"_locale":7,"data":450,"_id":654,"_type":14,"title":655,"_source":16,"_file":656,"_stem":657,"_extension":19},"/shared/ja-jp/main-footer",{"text":451,"source":452,"edit":458,"contribute":463,"config":468,"items":473,"minimal":646},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":453,"config":454},"ページのソースを表示",{"href":455,"dataGaName":456,"dataGaLocation":457},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":459,"config":460},"このページを編集",{"href":461,"dataGaName":462,"dataGaLocation":457},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":464,"config":465},"ご協力をお願いします",{"href":466,"dataGaName":467,"dataGaLocation":457},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":469,"facebook":470,"youtube":471,"linkedin":472},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[474,497,551,583,618],{"title":46,"links":475,"subMenu":480},[476],{"text":477,"config":478},"DevSecOpsプラットフォーム",{"href":55,"dataGaName":479,"dataGaLocation":457},"devsecops platform",[481],{"title":187,"links":482},[483,487,492],{"text":484,"config":485},"プランの表示",{"href":189,"dataGaName":486,"dataGaLocation":457},"view plans",{"text":488,"config":489},"Premiumを選ぶ理由",{"href":490,"dataGaName":491,"dataGaLocation":457},"/ja-jp/pricing/premium/","why premium",{"text":493,"config":494},"Ultimateを選ぶ理由",{"href":495,"dataGaName":496,"dataGaLocation":457},"/ja-jp/pricing/ultimate/","why ultimate",{"title":498,"links":499},"ソリューション",[500,505,508,510,515,520,524,527,530,535,537,539,541,546],{"text":501,"config":502},"デジタルトランスフォーメーション",{"href":503,"dataGaName":504,"dataGaLocation":457},"/ja-jp/topics/digital-transformation/","digital transformation",{"text":506,"config":507},"セキュリティとコンプライアンス",{"href":129,"dataGaName":136,"dataGaLocation":457},{"text":121,"config":509},{"href":105,"dataGaName":106,"dataGaLocation":457},{"text":511,"config":512},"アジャイル開発",{"href":513,"dataGaName":514,"dataGaLocation":457},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":516,"config":517},"クラウドトランスフォーメーション",{"href":518,"dataGaName":519,"dataGaLocation":457},"/ja-jp/topics/cloud-native/","cloud transformation",{"text":521,"config":522},"SCM",{"href":118,"dataGaName":523,"dataGaLocation":457},"source code management",{"text":9,"config":525},{"href":110,"dataGaName":526,"dataGaLocation":457},"continuous integration & delivery",{"text":159,"config":528},{"href":161,"dataGaName":529,"dataGaLocation":457},"value stream management",{"text":531,"config":532},"GitOps",{"href":533,"dataGaName":534,"dataGaLocation":457},"/ja-jp/solutions/gitops/","gitops",{"text":172,"config":536},{"href":174,"dataGaName":175,"dataGaLocation":457},{"text":177,"config":538},{"href":179,"dataGaName":180,"dataGaLocation":457},{"text":182,"config":540},{"href":184,"dataGaName":185,"dataGaLocation":457},{"text":542,"config":543},"教育",{"href":544,"dataGaName":545,"dataGaLocation":457},"/ja-jp/solutions/education/","education",{"text":547,"config":548},"金融サービス",{"href":549,"dataGaName":550,"dataGaLocation":457},"/ja-jp/solutions/finance/","financial services",{"title":192,"links":552},[553,555,557,559,562,564,567,569,571,573,575,577,579,581],{"text":204,"config":554},{"href":206,"dataGaName":207,"dataGaLocation":457},{"text":209,"config":556},{"href":211,"dataGaName":212,"dataGaLocation":457},{"text":214,"config":558},{"href":216,"dataGaName":217,"dataGaLocation":457},{"text":219,"config":560},{"href":221,"dataGaName":561,"dataGaLocation":457},"docs",{"text":242,"config":563},{"href":244,"dataGaName":245},{"text":565,"config":566},"お客様の成功事例",{"href":239,"dataGaLocation":457},{"text":237,"config":568},{"href":239,"dataGaName":240,"dataGaLocation":457},{"text":247,"config":570},{"href":249,"dataGaName":250,"dataGaLocation":457},{"text":260,"config":572},{"href":262,"dataGaName":263,"dataGaLocation":457},{"text":252,"config":574},{"href":254,"dataGaName":255,"dataGaLocation":457},{"text":265,"config":576},{"href":267,"dataGaName":268,"dataGaLocation":457},{"text":270,"config":578},{"href":272,"dataGaName":273,"dataGaLocation":457},{"text":275,"config":580},{"href":277,"dataGaName":278,"dataGaLocation":457},{"text":280,"config":582},{"href":282,"dataGaName":283,"dataGaLocation":457},{"title":584,"links":585},"Company",[586,588,590,592,594,596,598,602,607,609,611,613],{"text":305,"config":587},{"href":307,"dataGaName":300,"dataGaLocation":457},{"text":310,"config":589},{"href":312,"dataGaName":313,"dataGaLocation":457},{"text":318,"config":591},{"href":320,"dataGaName":321,"dataGaLocation":457},{"text":323,"config":593},{"href":325,"dataGaName":326,"dataGaLocation":457},{"text":328,"config":595},{"href":330,"dataGaName":331,"dataGaLocation":457},{"text":333,"config":597},{"href":335,"dataGaName":336,"dataGaLocation":457},{"text":599,"config":600},"Sustainability",{"href":601,"dataGaName":599,"dataGaLocation":457},"/sustainability/",{"text":603,"config":604},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":605,"dataGaName":606,"dataGaLocation":457},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":338,"config":608},{"href":340,"dataGaName":341,"dataGaLocation":457},{"text":348,"config":610},{"href":350,"dataGaName":351,"dataGaLocation":457},{"text":353,"config":612},{"href":355,"dataGaName":356,"dataGaLocation":457},{"text":614,"config":615},"現代奴隷制の透明性に関する声明",{"href":616,"dataGaName":617,"dataGaLocation":457},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":35,"links":619},[620,622,624,626,631,636,641],{"text":35,"config":621},{"href":37,"dataGaName":38,"dataGaLocation":457},{"text":366,"config":623},{"href":368,"dataGaName":369,"dataGaLocation":457},{"text":371,"config":625},{"href":373,"dataGaName":374,"dataGaLocation":457},{"text":627,"config":628},"ステータス",{"href":629,"dataGaName":630,"dataGaLocation":457},"https://status.gitlab.com/","status",{"text":632,"config":633},"利用規約",{"href":634,"dataGaName":635,"dataGaLocation":457},"/terms/","terms of use",{"text":637,"config":638},"プライバシーに関する声明",{"href":639,"dataGaName":640,"dataGaLocation":457},"/ja-jp/privacy/","privacy statement",{"text":642,"config":643},"Cookieの設定",{"dataGaName":644,"dataGaLocation":457,"id":645,"isOneTrustButton":91},"cookie preferences","ot-sdk-btn",{"items":647},[648,650,652],{"text":632,"config":649},{"href":634,"dataGaName":635,"dataGaLocation":457},{"text":637,"config":651},{"href":639,"dataGaName":640,"dataGaLocation":457},{"text":642,"config":653},{"dataGaName":644,"dataGaLocation":457,"id":645,"isOneTrustButton":91},"content:shared:ja-jp:main-footer.yml","Main Footer","shared/ja-jp/main-footer.yml","shared/ja-jp/main-footer",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"content":659,"config":660,"_id":13,"_type":14,"title":15,"_source":16,"_file":17,"_stem":18,"_extension":19},{"tag":9,"tagSlug":10},{"template":12},[662,690,713,733,761,784,804,828,850,868,887,908,928,946,966,986,1006,1027,1050,1068,1089,1111,1132,1154,1174,1190,1210,1231,1252,1272,1297,1317,1340,1363,1384,1403,1424,1443,1462],{"_path":663,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":664,"content":672,"config":683,"_id":686,"_type":14,"title":687,"_source":16,"_file":688,"_stem":689,"_extension":19},"/ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem",{"ogTitle":665,"schema":666,"ogImage":667,"ogDescription":668,"ogSiteName":669,"noIndex":6,"ogType":670,"ogUrl":671,"title":665,"canonicalUrls":671,"description":668},"gitlab-triage gemを使ったアジャイルワークフローの自動化","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"gitlab-triage gemを使ったアジャイルワークフローの自動化\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2025-03-13\",\n      }","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659525/Blog/Hero%20Images/blog-getting-started-with-gitlab-banner-0497-option4-fy25.png","「GitLab入門」シリーズでは、イシューやマージリクエストのトリアージなどの繰り返し発生するタスクを自動化して、デベロッパーの貴重な時間を確保する方法をご紹介します。","https://about.gitlab.com","article","https://about.gitlab.com/blog/automating-agile-workflows-with-the-gitlab-triage-gem",{"heroImage":667,"body":673,"authors":674,"updatedDate":676,"date":677,"title":665,"tags":678,"description":668,"category":681},"*「GitLab入門」シリーズへようこそ。このシリーズでは新たにGitLabを使い始める方向けに、GitLab\nDevSecOpsプラットフォームに慣れ親しむために役立つ内容をお届けします。*\n\n\n今回の記事では、[`gitlab-triage`](https://gitlab.com/gitlab-org/ruby/gems/gitlab-triage)\ngemを取り上げます。この非常に強力なツールを使用すると、アジャイルワークフローを自動化するボットを作成できます。自動化により、手作業を排除して作業効率を向上させましょう。\n\n\n## ワークフローを自動化すべき理由\n\n\nソフトウェア開発では効率性は重要です。イシューやマージリクエストのトリアージなどの繰り返し発生するタスクを自動化できれば、チームの貴重な時間を確保し、一番重要な作業である「素晴らしいソフトウェアの開発」に集中できるようになります。\n\n\n`gitlab-triage`を使用すれば、次のことを実現できます。\n\n\n* **一貫性の確保**：定義済みのルールに基づいて、自動的にラベルを適用し、イシューを自動的に割り当てる  \n\n* **レスポンスタイムの短縮**：新たなイシューやマージリクエストに関するフィードバックを即座に得られる  \n\n* **手作業の削減**：手作業でトリアージや更新を行う必要がなくなる  \n\n* **生産性の向上**：チームが、コーディング作業やイノベーションの創出に集中できるようになる\n\n\n## `gitlab-triage`のご紹介\n\n\n`gitlab-triage`\ngemは、GitLabプロジェクトとやり取りするボットを作成できるRubyのライブラリです。作成したボットを使用すると、次のようなさまざまなアクションの実行を自動化できます。\n\n\n* **ラベル付け**：イシューやマージリクエストを自動的に分類する  \n\n* **コメントの追加**：最新情報やフィードバックの提供、または情報の提供依頼を行う  \n\n* **割り当て**：イシューやマージリクエストを適切なチームメンバーに割り当てる  \n\n* **クローズ**：解決済み、または古くなったイシューやマージリクエストをクローズする  \n\n* **作成**：特定のイベントや条件に基づいて新しいイシューを作成する  \n\n* **ほかにもさまざまなことを行えます！**\n\n\nぜひ[`gitlab-triage`\ngemリポジトリ](https://gitlab.com/gitlab-org/ruby/gems/gitlab-triage)をチェックしてみてください。\n\n\n## トリアージボットのセットアップ\n\n\nでは、最初のトリアージボットをセットアップして動かしてみましょう！\n\n\n1. gemをインストールします。（注：gemコマンドは、プログラミング言語のRubyがインストールされている場合に利用できます）。\n\n\n```bash\n\ngem install gitlab-triage\n\n```\n\n\n2. GitLab APIトークンを取得します。\n\n\n* GitLab[プロファイル設定](https://gitlab.com/-/profile/preferences)に移動します。  \n\n* 「**アクセストークン**」に移動します。  \n\n* `api`スコープを指定して、新しいトークンを作成します。  \n\n* **作成したトークンを安全な場所に保存し、このガイドがいつ頃終わるかに基づいて有効期限を設定します。**\n\n\n3. トリアージポリシーを定義します。\n\n\nプロジェクトのルートディレクトリに`.triage-policies.yml`という名前のファイルを作成します。このファイルには、ボットの動作を制御するルールを含めます。以下に簡単な例をご紹介します。\n\n\n```yaml\n\n\n---\n\n- name: \"Apply 'WIP' label\"\n  condition:\n    draft: true\n  action:\n    labels:\n      - status::wip\n\n- name: \"Request more information on old issue\"\n  condition:\n   date:\n    attribute: updated_at\n    condition: older_than\n    interval_type: months\n    interval: 12\n  action:\n    comment: |\n      {{author}} This issue has been open for more than 12 months, is this still an issue?\n```\n\n\n上記の設定では、2つのポリシーを定義しています。\n\n\n* 1つ目のポリシーは、ドラフトモードにあるすべてのイシューに`status::wip`ラベルを適用します。  \n\n* 2つ目のポリシーは、12か月間更新がないイシューに、その旨のコメントを追加します。\n\n\n4. ボットを実行します。\n\n\n以下のコマンドを使用すると、手動でボットを実行できます。\n\n\n```bash\n\ngitlab-triage -t \u003Cyour_api_token> -p \u003Cyour_project_id>\n\n```\n\n\n`\u003Cyour_api_token>`の部分をご自身のGitLab\nAPIトークンに、また`\u003Cyour_project_id>`を[ご自身のGitLabプロジェクトID](https://docs.gitlab.com/user/project/working_with_projects/#access-a-project-by-using-the-project-id)に変更してください。実行前にこれらのアクションの影響を確認したい場合は、`-n`または`--dry-run`を追加すれば、ポリシーをまずはテストできます。\n\n\n## GitLab CI/CDによる自動化\n\n\nトリアージボットの実行を自動化するには、[GitLab\nCI/CD](https://about.gitlab.com/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation/)と統合します。以下は`.gitlab-ci.yml`の設定例です。\n\n\n```yaml\n\n\ntriage:\n  script:\n    - gem install gitlab-triage\n    - gitlab-triage -t $GITLAB_TOKEN -p $CI_PROJECT_ID\n  only:\n    - schedules\n```\n\n\n上記の設定では、「triage」という名前のジョブを定義しています。このジョブは、`gitlab-triage`\ngemをインストールし、`$GITLAB_TOKEN`（定義済みの[CI/CD変数](https://docs.gitlab.com/ci/variables/)）変数と`$CI_PROJECT_ID`変数を使用してボットを実行します。`only:\nschedules`によって、ジョブが必ずスケジュールに従って実行されることを保証します。\n\n\n[スケジュール](https://docs.gitlab.com/ee/ci/pipelines/schedules.html)を設定するには、プロジェクトの「**CI/CD**」設定にアクセスし、「**スケジュール**」に進みます。新しいスケジュールを作成したら、ボットを実行する頻度（毎日、毎時間など）を設定します。\n\n\n## 高度なトリアージポリシー\n\n\n`gitlab-triage`には、さらに複雑なトリアージポリシーを作成できるように、次のような高度な機能が用意されています。\n\n\n* **正規表現**：正規表現を使用すると、より強力なパターン一致を実現できます。  \n\n* **サマリーポリシー**：関連する複数のイシューを1つのサマリーイシューにまとめます。  \n\n*\n**カスタムアクション**：[Rubyコードブロック](https://gitlab.com/gitlab-org/ruby/gems/gitlab-triage#can-i-customize)を使用してカスタムアクションを定義し、GitLab\nAPI を使ったより複雑な操作を実行できます。\n\n\nGitLabのデベロッパーアドボカシーチームによる、高度なトリアージボットの実際の使用例をご紹介します。全ポリシーは、[こちらのファイル](https://gitlab.com/gitlab-da/projects/devrel-bot/-/blob/master/.triage-policies.yml?ref_type=heads)でご覧いただけます。\n\n\n```yaml\n\n- name: Issues where DA team member is an assignee outside DA-Meta project\ni.e. DevRel-Influenced\n  conditions:\n    assignee_member:\n      source: group\n      condition: member_of\n      source_id: 1008\n    state: opened\n    ruby: get_project_id != 18 \n    forbidden_labels:\n      - developer-advocacy\n  actions:   \n    labels:\n      - developer-advocacy\n      - DevRel-Influenced\n      - DA-Bot::Skip\n```\n\n\nこちらの例では、グループ全体のイシュー（IDが18のプロジェクトに含まれるイシューを除く）から、IDが1008のグループに所属し、`developer-advocacy`というラベルが付いていないメンバーが担当者であるイシューを割り出し、ラベルを適用しています。GitLabデベロッパーアドボカシーチームは、このポリシーを使用して、チームメンバーが担当しているものの、チームのプロジェクトとして割り当てられていないイシューを探し出しています。チームのラベルを追加することで、チーム外からのコントリビュートを特定・追跡しやすくなります。\n\n\n```\n\n- name: Missing Due Dates\n  conditions:\n    ruby: missing_due_date\n    state: opened\n    labels:\n      - developer-advocacy\n    forbidden_labels:\n      - DA-Due::N/A\n      - DA-Bot::Skip\n      - DA-Status::FYI\n      - DA-Status::OnHold\n      - CFP\n      - DA-Bot::Triage\n  actions:\n    labels:\n      - DA-Bot-Auto-Due-Date\n    comment: |\n      /due #{get_current_quarter_last_date}\n```\n\n\n上記の2つ目の例では、forbidden_labelsに含まれるラベルが適用されておらず、期限を過ぎていて、`developer-advocacy`ラベルが付いているイシューをすべて探し出します。スラッシュコマンドとRubyを使って生成した日付を用いてイシューにコメントすることで、自動的に期限が更新されます。\n\n\nポリシーで使用されているRubyスクリプトは、以下のように別のファイルで定義しています。この機能を使用すれば、フィルターとアクションを柔軟に扱えます。ご覧のように、ポリシーで使用したさまざまなRubyコマンド用に関数を作成しています。\n\n\n```\n\nrequire 'json'\n\nrequire 'date'\n\nrequire \"faraday\"\n\nrequire 'dotenv/load'\n\n\nmodule DATriagePlugin\n  def last_comment_at\n    conn = Faraday.new(\n      url: notes_url+\"?sort=desc&order_by=created_at&pagination=keyset&per_page=1\",\n      headers: {'PRIVATE-TOKEN' => ENV.fetch(\"PRIV_KEY\"), 'Content-Type' => 'application/json' }\n    )\n\n    response = conn.get()\n    if response.status == 200\n      jsonData = JSON.parse(response.body)\n      if jsonData.length > 0\n        Date.parse(jsonData[0]['created_at'])\n      else\n        Date.parse(resource[:created_at])\n      end\n    else\n      Date.parse(resource[:created_at])\n    end\n  end\n\n  def notes_url\n    resource[:_links][:notes]\n  end\n\n  def get_project_id\n    resource[:project_id]\n  end\n\n  def get_current_quarter_last_date()\n    yr = Time.now.year\n    case Time.now.month\n    when 2..4\n      lm = 4\n    when 5..7\n      lm = 7\n    when 8..10\n      lm = 10\n    when 11..12\n      lm = 1\n      yr = yr + 1\n    else\n      lm = 1    \n    end\n\n    return Date.new(yr, lm, -1) \n  end\n\n  def one_week_to_due_date\n    if(resource[:due_date] == nil)\n      false\n    else\n      days_to_due = (Date.parse(resource[:due_date]) - Date.today).to_i\n      if(days_to_due > 0 && days_to_due \u003C 7)\n        true\n      else\n        false\n      end\n    end\n  end\n\n  def due_date_past\n    if(resource[:due_date] == nil)\n      false\n    else\n      Date.today > Date.parse(resource[:due_date])\n    end\n  end\n\n  def missing_due_date\n    if(resource[:due_date] == nil)\n      true\n    else\n      false\n    end\n  end\n\nend\n\n\nGitlab::Triage::Resource::Context.include DATriagePlugin\n\n\n```\n\nトリアージボットを実行する際は、次のコマンドを使用します。\n\n\n``` \n\n`gitlab-triage -r ./triage_bot/issue_triage_plugin.rb --debug --token\n$PRIV_KEY --source-id gitlab-com --source groups`  \n\n```\n\n\n- `-r`：トリアージを実行するための要件ファイルを渡します。この場合は、Ruby関数を渡します。  \n\n- `--debug`：出力の一部としてデバッグ情報を表示します。  \n\n- `--token`：有効なGitLab APIトークンを渡すために使用します。  \n\n- `--source`：検索対象のイシューのソースがグループ内またはプロジェクト内かを指定します。  \n\n- `--source-id`:： 選択したソースタイプのID（この場合はグループ）を受け取ります。\n\n\n\nもう1つの実際の活用例としては、GitLab\n[triage-ops](https://gitlab.com/gitlab-org/quality/triage-ops)プロジェクトが挙げられます。こちらはさらに複雑で、専用のトリアージボットの作成方法を学ぶのに最適です。\n\n\n## ベストプラクティス\n\n\n* **まずは簡単なものから始める**：基本的なポリシーから始めて、必要に応じて徐々に複雑な設定にしていきましょう。 \n\n* **テストは徹底的に行う**：本番環境にデプロイする前に、ステージング環境でポリシーをテストします。  \n\n* **定期的にモニタリングする**：ボットの動作をモニタリングし、想定どおりに機能しているか確認してください。 \n\n* **わかりやすい名前を付ける**：メンテナンスしやすいように、ポリシーには明確でわかりやすい名前を付けましょう。 \n\n*\n**フィルターの適用範囲に注意する**：何千ものイシューが存在する全グループを対象に、イシューを絞り込むのはおすすめしません。トリアージに時間がかかってしまう可能性があるだけでなく、GitLab\nAPIのレート制限によってプロセス自体が失敗に終わることもあります。  \n\n*\n**トリアージの際にはラベルを使って優先順位付けする**：関係ないコメントやイシューがあふれて、ほかのユーザーの邪魔になることのないよう、トリアージを行う際はラベルを使用することをおすすめします。\n\n\n## ワークフローを制御する\n\n\n`gitlab-triage`\ngemを使用すれば、GitLabワークフローを自動化して、新たなレベルの効率化を実現できます。まずはシンプルなトリアージボットの作成から始めて、徐々に高度な機能を使ってみてください。どれだけ多くの時間や作業負荷を削減できるか、きっと驚かれると思います！\n\n\n## GitLab入門シリーズ\n\n\n「GitLab入門」シリーズのその他の記事をぜひご覧ください。\n\n\n* [GitLab入門：ユーザーの管理方法](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-mastering-project-management/)\n* [GitLab入門：プロジェクトをGitLabにインポートする方法](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-how-to-import-your-projects-to-gitlab/)\n* [GitLab入門：プロジェクト管理をマスターする](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-mastering-project-management/)\n* [gitlab-triage gemを使ったアジャイルワークフローの自動化](https://about.gitlab.com/ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem/)\n* [GitLab入門：CI/CDについて理解する](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-understanding-ci-cd/)\n* [GitLab入門：CI/CD変数を使用する](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-working-with-ci-cd-variables/)\n\n",[675],"GitLab","2025-10-07","2025-03-13",[679,680,681,682,9],"DevSecOps platform","tutorial","product","agile",{"slug":684,"featured":6,"template":685},"automating-agile-workflows-with-the-gitlab-triage-gem","BlogPost","content:ja-jp:blog:automating-agile-workflows-with-the-gitlab-triage-gem.yml","Automating Agile Workflows With The Gitlab Triage Gem","ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem.yml","ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem",{"_path":691,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":692,"content":698,"config":707,"_id":709,"_type":14,"title":710,"_source":16,"_file":711,"_stem":712,"_extension":19},"/ja-jp/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab",{"title":693,"description":694,"ogTitle":693,"ogDescription":694,"noIndex":6,"ogImage":695,"ogUrl":696,"ogSiteName":669,"ogType":670,"canonicalUrls":696,"schema":697},"Amazon ECRからGitLabへのコンテナイメージ移行の自動化","プラットフォームチームがCI/CDをGitLabに移行する際、コンテナイメージの移行がボトルネックになってはなりません。このガイドでは、パイプライン移行を自動化する方法を詳しく解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663129/Blog/Hero%20Images/blog-image-template-1800x945__28_.png","https://about.gitlab.com/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Amazon ECRからGitLabへのコンテナイメージ移行の自動化\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tim Rizzi\"}],\n        \"datePublished\": \"2025-02-13\",\n      }",{"title":693,"description":694,"authors":699,"heroImage":695,"date":701,"body":702,"category":703,"tags":704},[700],"Tim Rizzi","2025-02-13","「Amazon Elastic Container\nRegistry（ECR）からGitLabに数百ものコンテナイメージを移行する必要があるのですが、手伝ってもらえますか？」これまでのプラットフォームエンジニアとの会話の中で、何度もこの質問が出てきました。彼らは、DevSecOpsツールチェーンをGitLabに統合してモダナイズしようとしていたものの、コンテナイメージの移行の箇所でつまずいていました。個々のイメージの移行は簡単でも、数が多すぎると、手作業で行うのは現実的ではありません。\n\n\nまさに、あるエンジニアは「やるべきことはわかっています。プルして、再タグ付けして、プッシュするだけです。しかし、マイクロサービスが200個もあり、それぞれに複数のタグがあります。インフラストラクチャ関連の重要な仕事が山積みの中、この移行作業に何週間も費やすわけにはいきません」と話していました。\n\n\n## 課題\n\n\nこの会話をきっかけに、プロセス全体を自動化できないかと考えました。[CI/CD](https://about.gitlab.com/ja-jp/topics/ci-cd/)をGitLabに移行する際、コンテナイメージの移行がボトルネックになってはなりません。手作業はシンプルですが、繰り返しが多すぎます。各イメージをプルし、再タグ付けし、GitLabのコンテナレジストリにプッシュする…これを数十のリポジトリ、各イメージの何百ものタグに対して行うとなると、数日から数週間かかる途方もない作業になります。\n\n\n## 解決策\n\n\nそこで、こういった大変な作業を自動処理するGitLabパイプラインの作成に取り掛かりました。目標はシンプルです。プラットフォームエンジニアが数分でセットアップできて、一晩放置すればすべてのイメージの移行が完了している、そんなツールを作ることでした。\n\n\n### アクセス権の設定\n\n\nまずはセキュリティです。チームが最小限のAWS権限でこの移行作業を実行できるようにすることを重視しました。以下の読み取り専用のアイデンティティおよびアクセス管理（IAM）ポリシーを用意しました。\n\n\n```json\n\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"ecr:GetAuthorizationToken\",\n                \"ecr:BatchCheckLayerAvailability\",\n                \"ecr:GetDownloadUrlForLayer\",\n                \"ecr:DescribeRepositories\",\n                \"ecr:ListImages\",\n                \"ecr:DescribeImages\",\n                \"ecr:BatchGetImage\"\n            ],\n            \"Resource\": \"*\"\n        }\n    ]\n}\n\n```\n\n\n### GitLabの設定\n\n\nセキュリティの次はGitLab側の設定です。最小限の構成で済むようにしました。CI/CD設定で以下の変数を設定します。\n\n\n```\n\nAWS_ACCOUNT_ID: AWSのアカウントID\n\nAWS_DEFAULT_REGION: ECRのリージョン\n\nAWS_ACCESS_KEY_ID: [マスク]\n\nAWS_SECRET_ACCESS_KEY: [マスク]\n\nBULK_MIGRATE: true\n\n```\n\n\n### 移行パイプライン\n\n\nここからが本番です。このパイプラインはDocker-in-Dockerを使って構築し、すべてのイメージ操作を安定して実行できるようにしました。\n\n\n```yaml\n\nimage: docker:20.10\n\nservices:\n  - docker:20.10-dind\n\nbefore_script:\n  - apk add --no-cache aws-cli jq\n  - aws sts get-caller-identity\n  - aws ecr get-login-password | docker login --username AWS --password-stdin\n  - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}\n```\n\n\nこのパイプラインは3つのフェーズで構成され、それぞれが前のフェーズをベースにします。\n\n\n1. 検出\n\n\nまず、すべてのECRリポジトリを取得します。\n\n\n```bash\n\nREPOS=$(aws ecr describe-repositories --query\n'repositories[*].repositoryName' --output text)\n\n```\n\n\n2. タグの列挙\n\n\n次に、各リポジトリの全タグを取得します。\n\n\n```bash\n\nTAGS=$(aws ecr describe-images --repository-name $repo --query\n'imageDetails[*].imageTags[]' --output text)\n\n```\n\n\n3. 移行\n\n\n最後に、実際にイメージ移行を実行します。\n\n\n```bash\n\ndocker pull\n${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag}\n\ndocker tag\n${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag}\n${CI_REGISTRY_IMAGE}/${repo}:${tag}\n\ndocker push ${CI_REGISTRY_IMAGE}/${repo}:${tag}\n\n```\n\n\n## 期待できる成果\n\n\n移行に何週間もかける時間がないというプラットフォームエンジニアのために、このソリューションは次のような成果を提供します。\n\n\n- すべてのリポジトリとタグを自動的に検出・移行\n\n- ECRとGitLabのイメージ命名規則を統一\n\n- 転送失敗時のエラーハンドリング\n\n- 進捗を追跡できる明確なログ\n\n\n\n移行スクリプトを書いたり、移行作業を監視したりする必要がなくなり、プラットフォームエンジニアは他の重要な作業に集中できるようになります。\n\n\n## 使い方\n\n\n手順はシンプルです。\n\n\n1. `.gitlab-ci.yml`をリポジトリにコピー\n\n2. AWSとGitLabの変数を設定\n\n3. `BULK_MIGRATE`を「true」に設定して、移行を開始\n\n\n## ベストプラクティス\n\n\nさまざまなチームの移行を支援する中で、いくつかの重要なポイントが見えてきました。\n\n\n- ピーク時以外に実行し、チームへの影響を最小限に抑える\n\n- パイプラインのログを確認し、必要な対応がないかチェックする\n\n- すべてのイメージが正常に転送されたことを確認するまで、ECRを廃止しない\n\n- 大規模な移行の場合、ネットワーク負荷を避けるためにレート制限の適用を検討する\n\n\nこのパイプラインは、GitLabの公開リポジトリでオープンソースとして提供しています。プラットフォームエンジニアがコンテナイメージの移行に時間を取られるのではなく、本来の業務に専念できるよう設計されています。ニーズに応じてカスタマイズしてお使いください。実装についてのご質問もお待ちしています。\n\n\n> ####\nこのパッケージおよびその他のコンポーネントの詳細については、[CI/CDカタログのドキュメント](https://gitlab.com/explore/catalog/components/package)をご覧ください。\n","engineering",[9,705,680,679,681,706],"AWS","solutions architecture",{"slug":708,"featured":91,"template":685},"automating-container-image-migration-from-amazon-ecr-to-gitlab","content:ja-jp:blog:automating-container-image-migration-from-amazon-ecr-to-gitlab.yml","Automating Container Image Migration From Amazon Ecr To Gitlab","ja-jp/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab.yml","ja-jp/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab",{"_path":714,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":715,"content":721,"config":727,"_id":729,"_type":14,"title":730,"_source":16,"_file":731,"_stem":732,"_extension":19},"/ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way",{"title":716,"description":717,"ogTitle":716,"ogDescription":717,"noIndex":6,"ogImage":718,"ogUrl":719,"ogSiteName":669,"ogType":670,"canonicalUrls":719,"schema":720},"モノレポ用のGitLab CI/CDパイプラインを簡単に構築する方法","単一のリポジトリで複数のアプリケーションをホストするモノレポ用に、GitLab CI/CDパイプラインを作成する方法についてご紹介します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660151/Blog/Hero%20Images/blog-image-template-1800x945__26_.png","https://about.gitlab.com/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"モノレポ用のGitLab CI/CDパイプラインを簡単に構築する方法\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sam Morris\"}],\n        \"datePublished\": \"2024-07-30\",\n      }",{"title":716,"description":717,"authors":722,"heroImage":718,"date":724,"body":725,"category":703,"tags":726},[723],"Sam Morris","2024-07-30","モノレポを使用すると、単一のリポジトリで複数のアプリケーションのコードをホストできます。GitLabでこれを実現しようとすると、プロジェクト内の各ディレクトリに異なるアプリケーションのソースコードを配置することになります。この方法だとコードの保存場所をバージョン管理できるものの、GitLabの[CI/CD](https://about.gitlab.com/ja-jp/topics/ci-cd/)パイプライン機能を最大限に活用するのは困難でした。しかしながら、新たな方法が登場しました！\n\n\n## モノレポにおけるCI/CDの理想的な実例\n\n\n通常、リポジトリには複数のアプリケーションのコードが格納されているため、複数のパイプライン設定が必要となります。たとえば、.NETアプリケーションとSpringアプリケーションがあるプロジェクトの場合、アプリケーションごとに異なるビルドジョブとテストジョブを実施している可能性があります。この場合、パイプラインを完全に切り離し、特定のアプリケーションのソースコードの変更が発生した場合のみ、各パイプラインを実行するのが理想的です。\n\n\nこのようなプロセスを技術的に実現するには、特定のディレクトリの変更に基づいて特定のYAMLファイルをインクルードする、プロジェクトレベルのパイプライン設定ファイル`.gitlab-ci.yml`を用意します。`.gitlab-ci.yml`パイプラインは、コードに加えられた変更に基づき、適切なパイプラインをトリガーするコントロールプレーンとして機能します。\n\n\n## 従来のアプローチ\n\n\nGitLab\n16.4より前のバージョンでは、プロジェクト内のディレクトリまたはファイルへの変更に基づいてYAMLファイルをインクルードすることはできませんでした。ただし、回避策を使えばこの機能を実現することは可能でした。\n\n\nこれからご紹介するモノレポプロジェクトの例では、異なるアプリケーション用に2つのディレクトリがあるとします。それぞれJavaアプリ用の`java`ディレクトリとPythonアプリ用の`python`ディレクトリがあります。それぞれのディレクトリには、各アプリをビルドするためのアプリケーション固有のYAMLファイルが含まれています。シンプルにプロジェクトのパイプラインファイルに両アプリケーションのパイプラインファイルをインクルードし、それらのファイルで直接ロジック処理を行います。\n\n\n`.gitlab-ci.yml`：\n\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n\ntop-level-job:\n  stage: build\n  script:\n    - echo \"Hello world...\"\n\ninclude:\n  - local: '/java/j.gitlab-ci.yml'\n  - local: '/python/py.gitlab-ci.yml'\n\n```\n\n\nアプリケーション固有の各パイプラインファイルで「.java-common」もしくは「.python-common」という名前の非表示ジョブを作成します。これらのジョブは対応するアプリのディレクトリに変更が加えられた場合にのみ実行されます。デフォルトでは[非表示ジョブ](https://docs.gitlab.com/ee/ci/jobs/#hide-jobs)は実行されず、通常は特定のジョブ設定を再利用するために使用されます。各パイプラインは、非表示ジョブを拡張して変更がないか監視するファイルを定めたルールを継承してから、パイプラインジョブを開始します。\n\n\n`j.gitlab-ci.yml`：\n\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n\n.java-common:\n  rules:\n    - changes:\n      - '../java/*'\n\njava-build-job:\n  extends: .java-common\n  stage: build\n  script:\n    - echo \"Javaのビルド\"\n\njava-test-job:\n  extends: .java-common\n  stage: test\n  script:\n    - echo \"Javaのテスト\"\n\n```\n\n\n`py.gitlab-ci.yml`：\n\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n\n.python-common:\n  rules:\n    - changes:\n      - '../python/*'\n\npython-build-job:\n  extends: .python-common\n  stage: build\n  script:\n    - echo \"Pythonのビルド\"\n\npython-test-job:\n  extends: .python-common\n  stage: test\n  script:\n    - echo \"Pythonのテスト\"\n\n```\n\n\nこの方法にはいくつかのデメリットがあります。たとえば、確実にルールに準拠するために、YAMLファイル内の他のジョブ用にそれぞれジョブを拡張しなければならないため、多くの冗長なコードが発生し、ヒューマンエラーが起きやすくなります。さらに拡張されたジョブでは重複するキーは持てないため、各ジョブにおいて独自の`rules`ロジックを定義できません。定義しようとした場合、キーの競合が発生し、[キーの値はマージされません](https://docs.gitlab.com/ee/ci/yaml/index.html#extends)。\n\n\n結果として、`java/`が更新されると、j.gitlab-ci.ymlジョブを含むパイプラインが実行され、`python/`が更新されると、py.gitlab-ci.ymlジョブを含むパイプラインが実行されます。\n\n\n## 新たなアプローチ：パイプラインファイルを条件付きでインクルードする\n\n\n\u003C!-- 空白行 -->\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/6phvk8jioAo?si=y6ztZODvUtM-cHmZ\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\n\u003C!-- 空白行 -->\n\n\nGitLab\n16.4では、[パイプライン向けに`rules:changes`を含む`include`](https://docs.gitlab.com/ee/ci/yaml/includes.html#include-with-ruleschanges)が導入されました。それまでは`include`に`rules:if`を使用することはできたものの、`rules:changes`は使用できませんでした。これは非常に強力なアップデートです。これにより、プロジェクトのパイプライン設定で`include`キーワードを使用するだけで、モノレポのルールを定義できるようになりました。\n\n\n新たな`.gitlab-ci.yml`：\n\n\n```\n\nstages:\n  - build\n  - test\n\ntop-level-job:\n  stage: build\n  script:\n    - echo \"Hello world...\"\n\ninclude:\n  - local: '/java/j.gitlab-ci.yml'\n    rules:\n      - changes:\n        - 'java/*'\n  - local: '/python/py.gitlab-ci.yml'\n    rules:\n      - changes:\n        - 'python/*'\n\n```\n\n\nその後、各アプリケーションのYAMLファイルにおいて非表示ジョブを何度も拡張せずに済むため、アプリケーションコードのビルドとテストだけに集中できます。これによって、より柔軟にジョブを定義できるようになり、エンジニアによるコードの書き直し作業が軽減します。\n\n\n新たな`j.gitlab-ci.yml`：\n\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n\njava-build-job:\n  stage: build\n  script:\n    - echo \"Javaのビルド\"\n\njava-test-job:\n  stage: test\n  script:\n    - echo \"Javaのテスト\"\n\n```\n\n\n新たな`py.gitlab-ci.yml`：\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n\npython-build-job:\n  stage: build\n  script:\n    - echo \"Pythonのビルド\"\n\npython-test-job:\n  stage: test\n  script:\n    - echo \"Pythonのテスト\"\n\n```\n\n\n上記の設定により、JavaとPythonのディレクトリがそれぞれ変更された場合にのみ、JavaまたはPythonのジョブをインクルードするという同じタスクを実行できます。実装時に考慮すべき点は、[`changes`を使用すると、ジョブが予期せぬタイミングで実行される可能性がある](https://docs.gitlab.com/ee/ci/jobs/job_troubleshooting.html#jobs-or-pipelines-run-unexpectedly-when-using-changes)ということです。新しいブランチやタグをGitLabにプッシュすると、changesルールは必ず「true」と評価されるため、`rules:changes`の定義内容にかかわらず、ブランチへの最初のプッシュ時に、含まれるすべてのジョブが実行されます。こういった事態がなるべく起こらないようにするために、まずはフィーチャーブランチを作成してからマージリクエストを開いて開発を始めることをおすすめします。ブランチの作成時に最初にプッシュすることで、すべてのジョブが強制的に実行されるためです。\n\n\n総括すると、モノレポはGitLabおよびCI/CDと組み合わせて、戦略的に利用できる手法です。新たな`rules:changes`機能を含む`include`キーワードの登場により、GitLab\nCIにおいてモノレポを使う際に適用できる優れたベストプラクティスができました。モノレポの利用をお考えの場合は、ぜひGitlab\nUltimateの無料トライアルをご利用ください。\n\n\n## CI/CDに関するその他のリソース\n\n\n*\n[GitLabでモノレポを管理するためのヒント5選](https://about.gitlab.com/blog/tips-for-managing-monorepos-in-gitlab/)\n\n*\n[CI/CDについて素早く学ぶ方法](https://about.gitlab.com/blog/how-to-learn-ci-cd-fast/)\n",[9,680],{"slug":728,"featured":6,"template":685},"building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way","content:ja-jp:blog:building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way.yml","Building A Gitlab Ci Cd Pipeline For A Monorepo The Easy Way","ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way.yml","ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way",{"_path":734,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":735,"content":739,"config":755,"_id":757,"_type":14,"title":758,"_source":16,"_file":759,"_stem":760,"_extension":19},"/ja-jp/blog/claude-code-gitlab-ai-development-workflow",{"noIndex":6,"title":736,"description":737,"ogImage":738},"エージェンティックAI Claude CodeとGitLab CLIの開発フロー","Claude CodeとGLabを組み合わせてローカル環境から効率的にIssue作成・MR操作・レビュー依頼などを自動化し、生成AIのコード補助を活かした開発フローを構築する方法を紹介","https://res.cloudinary.com/about-gitlab-com/image/upload/v1751953181/rtejicnkhd9oslaxsoo5.jpg",{"heroImage":738,"category":740,"body":741,"date":742,"authors":743,"description":745,"title":746,"tags":747},"ai-ml","## 目次\n\n1. はじめに: AI活用の新時代を切り拓く効率的なソフトウェア開発\n2. Claude Codeとは何か？\n3. GitLabのCLIであるGLabの紹介\n4. Claude CodeとGLabを組み合わせた開発の流れ\n5. AIを使った開発の今後の広がりについて\n6. まとめ\n7. よくある質問\n\n\n\n## はじめに: AI活用の新時代を切り拓く効率的なソフトウェア開発\n\nこの記事を読むと、エージェント型AIであるClaude CodeとGitLab CLIツール「GLab」を組み合わせて、ローカル環境から効率的にIssue作成・MR操作・レビュー依頼などを自動化し、生成AIによるコード補助を活かした実践的な開発フローを構築する方法がわかるようになります。\n\n## Claude Codeとは何か？\n\nClaude Codeとはエージェント型AIで、ターミナル上でAIにコマンドを実行させることで既存ツールを使いながら効率的に開発できます。\n\n## GitLabのCLIであるGLabの紹介\n\nGLabはオープンソースのGitLab CLIツールです。GLabをターミナルに統合し、作業中のコマンドラインツールや、IDEの中に表示できます。GitLabのWebUIにアクセスするためにブラウザのウィンドウやタブに切り替える必要がなくなり、マージリクエストの作成やパイプラインの状況の確認など、様々なことを直感的にコマンドラインで実行可能になります。\n\n## Claude CodeとGLabを組み合わせた開発の流れ\n\n### **Claude Codeとglabのインストール**\n\nここでは個別のインストール方法や導入の仕方については割愛しますが、下記の公式サイトが参考になると思いますのでご確認ください。\n\nClaude Code: \u003Chttps://docs.anthropic.com/ja/docs/claude-code/overview>\n\nGLab: \u003Chttps://gitlab.com/gitlab-org/cli/-/blob/main/README.md>\n\n### [](https://gitlab.com/gitlab-org/cli/-/blob/main/README.md)**GitLabの認証情報を設定**\n\nまずはGLabのセットアップをしていきましょう。GLabでGitLabサーバーにログインします。\n\n`$ glab auth login`\n\n上記を実行すると、ログインするサーバーの先を問われるので、選びます。続いて、Tokenによるログインか、Webブラウザを使って認証するか聞かれるため、これも好きな方を選んでください。下記は、Webを選んだ場合の画面です。\n\n![Webログイン](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198573/tl81t9qzwhqjnrro3lrb.png)\n\n次に、Gitクライアントが通信するデフォルトのプロトコルを聞かれるので、これも好きなものを選んでください。環境によってはSSHプロトコルの通信が制限されている場合もあるかと思うので、そのような場合はHTTPSを選ぶことをおすすめします。\n\n最後に、Gitの認証にもCredentialsの認証情報使うかを問われるため、これも選んでいただければと思います。\nYesの場合は、GitのHTTPS認証にもglabのPersonal Access Token（PAT）を使うよう.gitconfigに設定され、Noを選んだ場合は、glabでIssueやMRの操作をする一方で、Gitのpush/pullは従来通りのSSHや別途設定した認証方式で行う必要があります。\n\n初期の設定が終わった画面を下記に示します。\n\n![初期設定完了画面](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198582/xtpheeez1gcwr8sfjmdv.png)\n\n### **開発対象プロジェクトのclone**\n\n次に、Claude Codeに指示を与えて、glabコマンドを使って、リモートリポジトリからcloneします。下記のコマンドでClaude Codeを起動します。\n\n`$ claude`\n\n既にGLabで認証は終わっているため、作業するプロジェクトのリポジトリをcloneするように指示を与えます。\n\n`> GitLab上で自分が参加しているプロジェクトを表示してください`\n\n上記のようにプロンプトするとClaude Codeが\n\n`$ glab repo list`\n\nなどを実行してくれると思います。次に、作業したいリポジトリを上記から選び、Cloneします。プロジェクト名は各自の環境に合わせて指定してください。\n\n`> プロジェクト naosasaki-demo/study/spring-demo をcloneしてください`\n\nClaude Codeの処理が終わると、一度Claude Codeを終了し、ターミナルでディレクトリを確認すると、cloneされたディレクトリが作られていることがわかると思います。\n\n**新しいIssueの作成**\n\n次に、このプロジェクトに新しくイシューを作りたいと思います。通常であればWebブラウザでGitLabにアクセスしイシューを登録しますが、GLabとClaude Codeを使って、IDEやターミナル画面から作ってみたいと思います。\n\n`> このプロジェクトに新しいイシューを作ってください。内容は、今の東京の温度と天気を返すWebAPIのエンドポイントを作成します。`\n\n![イシュー作成](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198573/iizlucpfxgsa0nrdsvqn.png)\n\n\n上記のようにglabを使ってイシューを作成するコマンドが提案されます。またイシューのなかの記載もある程度書いてくれていることがわかります。\n\n![イシュー作成](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198579/ye2wtupp6nf8ljzja2yh.png)\n\nブラウザでアクセスしても、正しく作られていることがわかります。\n\n![イシュー作成](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198582/vbo22zzdzzanvnrbsszq.png)\n\n### **マージリクエストとブランチの作成と作業開始**\n\n次に、実際のこのIssueの内容を実装していきたいと思います。ここからはIDEのVisual Studio Codeも利用していきたいと思います。Visual Studio Codeを起動し、内蔵されたターミナルを開き、そこでClaude Codeを起動します。\n\n早速、先ほど作ったイシューからマージリクエストを作って、その中で作業をしていきたいと思います。\n\n`> このリポジトリのプロジェクトのissue 53を実装したいので、glabでMRを作って、そのブランチをチェックアウトして`\n\n![マージリクエストとブランチの作成と作業開始](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198573/or6l5si3k4dbprcnnfgq.png)\n\n**コードの編集と検証**\n\n`> イシューの記載に基づいて実装してください。また、リポジトリ内部のドキュメントも追加に伴って更新してください。`\n\n![コードの編集と検証](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198573/dlgq0j60n2jfk24vxaj3.png)\n\nOpenWeatherMap APIを使うことを提案してくれています。そのほかにも、いくつかのクラスを作成することを提案されるので、中身を確認しつつ、それを受け入れ、git pushなども依頼します。\n\n![CC_8_git push](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198584/esdeisz4mzyyjlerlahl.png)\n\n### **レビューとCI/CDの確認**\n\n実際にマージリクエストを確認すると、ローカルで作成した変更がプッシュされ、GitLab側のCI/CDでの単体テストや、セキュリティスキャンなども正常に実行され、問題なく終了していることがわかりました。\n\n![レビュー](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198573/e7hyheb5gkpvb7iixrro.png)\n\nしかし、テストが通っていても、それが適切な方法で実装されているか、非機能的な観点で問題がないかは別途確認する必要があります。ここで[GitLab Duo in merge requests](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/)という機能を利用して、GitLabのAI機能であるGitLab Duoにレビューを依頼してみたいと思います。\n\nマージリクエストのコメントでレビューをリクエストし、レビュアーとしてDuoを指定します。この時、レビューの観点なども同時に与えることができます。下記のようにコメントでレビューをDuoに依頼します。\n\n`/request_review @GitLabDuo`\n\n`マージリクエストのコードを下記の観点でレビューしてください：`\n\n`拡張性：将来的な機能追加や変更に対応しやすい設計・実装になっているか  \n可読性：他の開発者が理解しやすいコードになっているか  \n安全性：バグやセキュリティリスクを引き起こす可能性がないか  \nパフォーマンス：必要以上にリソースを消費していないか`\n\n![Duoレビュー](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198581/tnkt52hpapm8cyi4qplw.png)\n\n上記をコメントすることで、Duoにレビューを依頼できます。\n\n実際にレビュー指摘がありました。\n\n![Duoレビュー指摘](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752198573/vehscyu2beo4pz9ns3y2.png)\n\nDuoの指摘のとおり、Claude Codeが生成した元のコードでは、translateWeatherToJapanese メソッドが呼ばれるたびに HashMap が新しく作成されています。これはパフォーマンスの低下や不要なオブジェクト生成につながります。Duoは「このマップは不変であり、再利用可能なので static final にすべき」と提案しています。これの指摘は確かにその通りなので、マージリクエスト上でこの指摘と、変更の提案を受け入れます。\n\nこの変更の受け入れ自体も、ソースコードの変更なので、受け入れたらCI/CDパイプラインが動き出して、再度自動的にセキュリティスキャンや単体テスト実施されます。再度CI/CDパイプラインが動き、問題がなかったためmainブランチにマージしました。これでこの機能の開発は完了です。\n\n## AIを使った開発の今後の広がりについて\n\n### **AIは「補助ツール」から「実行の主体」へ**\n\n従来のチャットベースのインタラクティブな開発支援、すなわち一問一答のやり取りを繰り返しながら人間が主導で手を動かしていた開発スタイルから、いま大きな転換が始まっています。\n\nGLabのようなCLIツールやWebAPIと、エージェンティックAIを組み合わせることで、「命令→実行→ステータス確認→再試行」といった一連の開発オペレーションを、AIが自律的かつ反復的に担う、まさに実行主体としてのAIへの進化が進んでいます。\n\nこれは単なる補助からの脱却であり、ソフトウェア開発における人と機械の役割分担そのものを再定義しつつあります。人間は「何を実現したいか」を定義し、AIは「どう実現するか」を粘り強く試行錯誤していく、そんな協働の形が、現実の開発現場に静かに浸透し始めています。\n\n**レビューとガバナンスの重要性**\n\nAIによってコードが自動生成されるようになった今、開発効率が飛躍的に向上する一方で、「そのコードは本当に安全か？」「人間はAIの出力を正しくレビューできるのか？」といった新たな課題が生まれています。\n\n人間の作業と同様に、AIによって生成されたコードは、動作するからといって、品質が担保されているとは限りません。\n\nこうした背景から、組織的にAIを活用していくには、**コードの品質・セキュリティ・コンプライアンスを保証する仕組みを開発プロセスに組み込む**ことが不可欠です。\n\n今回は、コードの生成にClaude Codeを利用しましたが、そのコードに含まれる性能的な懸念をGitLab Duoによるレビューで摘出することができました。\n\nその他にも、GitLabでは「パイプライン実行ポリシー」を用いることで、プロジェクト単位ではなくグループやサブグループに対して、**SASTや依存関係スキャン、シークレット検出などのセキュリティジョブを強制適用**することが可能です。\n\nこのように、**AIによる開発支援とセキュリティ・品質管理の自動化を同時に実現できる**のは、DevSecOpsを包括的に支援するプラットフォームであるGitLabの強みといえます。\n\n## まとめ\n\nこの記事では、Claude CodeのようなAIエージェントと、GitLab公式CLIツールGLabを組み合わせることで、自然言語によるコード生成からGitLab上でのイシュー管理やマージリクエスト作成までをAIエージェントにやってもらうことで、開発効率を向上させる例を紹介しました。一方で、AIエージェントが生成するコードの品質を担保するには、GitLabのセキュリティスキャンやパイプライン実行ポリシーを活用した自動検証の仕組みが欠かせません。AIと人間、それぞれの強みを活かした開発フローが、今後ますます重要になっていくでしょう。\n\n> 今すぐ始められる：GitLabでAIを使ったソフトウェア開発を体験しよう\n>\n> [GitLab Duoの無料トライアルに申し込む](https://about.gitlab.com/ja-jp/solutions/gitlab-duo-pro/sales/)\n\n## よくある質問\n\n### Q1: GitLabのAI機能にはどのようなものがありますか？\n\nA1: GitLabのAI機能「GitLab Duo」には、ソースコードの提案、テストケース/コードの生成はもちろん、脆弱性の自動修復や、CI/CD失敗時の根本原因分析など、ソフトウェア開発全体に対するAIによる支援機能群が含まれています。\n\n\n### Q2: GitLab Duoはユーザーのソースコードを学習に使いますか？\n\nA2: いいえ。GitLab Duoは利用者のコードやデータをモデルの再学習には使用しません。GitLabはユーザーデータのプライバシーとセキュリティを重視しており、企業向けにも安心して利用できる設計となっています。詳細については、[GitLab AI Transparency Center](https://about.gitlab.com/ai-transparency-center/)をご確認ください。\n\n### Q3: Claude Codeとは何ですか？\n\nA3: Claude Codeとはエージェント型AIで、ターミナル上でAIにコマンドを実行させることで既存ツールを使いながら効率的に開発できます。\n\n### Q4: GitLab CLIのGLabとは何ですか？\n\nA4: GLabは、GitLab公式が提供するオープンソースのCLIツールです。GLabをターミナルに統合し、作業中のコマンドラインツールや、IDEの中に表示できます。","2025-07-14",[744],"Naoharu Sasaki","エージェント型AIであるClaude CodeとGitLab CLIツール「GLab」を組み合わせて、ローカル環境から効率的にIssue作成・MR操作・レビュー依頼などを自動化し、生成AIによるコード補助を活かした実践的な開発フローを構築する方法をご紹介します。","Claude Code × GitLab：AI活用を加速する、エージェンティックAIとGitLab CLIによる効率的なソフトウェア開発フロー",[748,9,749,750,751,752,531,232,753,680,754],"AI/ML","code review","collaboration","DevSecOps","features","security","workflow",{"featured":91,"template":685,"slug":756},"claude-code-gitlab-ai-development-workflow","content:ja-jp:blog:claude-code-gitlab-ai-development-workflow.yml","Claude Code Gitlab Ai Development Workflow","ja-jp/blog/claude-code-gitlab-ai-development-workflow.yml","ja-jp/blog/claude-code-gitlab-ai-development-workflow",{"_path":762,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":763,"content":769,"config":778,"_id":780,"_type":14,"title":781,"_source":16,"_file":782,"_stem":783,"_extension":19},"/ja-jp/blog/customers-sourcenext",{"title":764,"description":765,"ogTitle":764,"ogDescription":765,"noIndex":6,"ogImage":766,"ogUrl":767,"ogSiteName":669,"ogType":670,"canonicalUrls":767,"schema":768},"外部開発パートナーを含む開発プロセスを、GitLabによるオールインワン開発環境に統合し最適化","社内にあるECを含む最も大きなシステムの開発・運用プロジェクトにおいて、GitLabのすべての機能を有効に活用し、DevSecOpsを実現したソースネクスト株式会社様の事例をご紹介します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665427/Blog/Hero%20Images/_NYG2730.jpg","https://about.gitlab.com/blog/customers-sourcenext","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"外部開発パートナーを含む開発プロセスを、GitLabによるオールインワン開発環境に統合し最適化\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab Japan Team\"}],\n        \"datePublished\": \"2024-08-21\",\n      }",{"title":764,"description":765,"authors":770,"heroImage":766,"date":772,"body":773,"category":774,"tags":775},[771],"GitLab Japan Team","2024-08-21","ソースネクスト株式会社（以下、ソースネクスト）は、社内にあるECを含む最も大きなシステムの開発・運用プロジェクトにおいて、GitLabのすべての機能を有効に活用し、DevSecOpsを実現しました。社内の開発メンバーと外部の開発パートナー企業がGitLabをひとつの開発プラットフォームとして駆使し、プロセスの厳格化によるビジネスリスク低減に成功。同時に、Deploy工程の9割を自動化するなどの工数削減効果を得て、生産性250％アップという成果に結びつけることができました。\n\n## 目次\n1. 3つの開発環境をGitLabでひとつに統合\n2. オールインワン開発環境のGitLabをフルに使ってやってみる\n3. Deploy工程の9割を自動化、生産性は250％アップ\n4. 「気づいていないリスク」を可視化する価値\n\n## 3つの開発環境をGitLabでひとつに統合\n\nソースネクストは、パソコン・スマートフォンソフトウェアおよびハードウェア製品の企画・開発・販売を行う東証プライム市場上場企業です。「製品を通じて、喜びと感動を、世界中の人々に広げる」という創業以来の思いから、消費者とメーカーにとって最適なプライシング戦略が強み。近年はIoT製品の取り扱いを広げ、AIを活用した取り組みも積極化させるなど、最新テクノロジーをうまくビジネスに取り入れながら成長を続けています。\n\n同社では、ソフトウェア開発において、少数精鋭の社内エンジニアと外部開発パートナー企業との協業体制を取っています。長年一緒にやる中で関係性は深まり、優れたチーム同士が役割分担しながらシステムをブラッシュアップしてきました。しかし、セキュリティとガバナンスが大きな経営課題としてクローズアップされる中、より密にチーム同士を連携させ、一貫した厳格な開発プロセスへと移行とすることで、ビジネスへのリスクを極小化したいというニーズが出てきました。\n\n同社 CIO 高沢 冬樹氏は、「開発環境刷新の対象としたシステムを担当する外部開発パートナーは2社で、どちらもスキルが高く、信頼できるメンバーがそろっている企業です。ただ、以前の開発プロセスは、社内のものと2社のものが同時に走る状態で、いわば3つのDevOpsが並立していたようなイメージだったのです」と話します。\n\nこれら3つの開発環境を統合するとともに、セキュリティを開発プロセスに取り込む __DevSecOps__  \u003Csup>*\u003C/sup>へと昇華させたい――。高沢氏も経営層も意見は同じでしたが、管理を厳格化すると現場がやらなければならないことが増え、結果として現場に負担を強いることになります。そこで、DevSecOpsを定着させて経営の求める厳格な開発プロセスへと移行しながら、同時に現場を楽にする自動化をやり遂げ、負担をトレードオフするという発想が生まれました。\n\n\u003Csup>*\u003C/sup>*開発と運用を統合するDevOpsにセキュリティを加え、運用を視野に入れながら開発とセキュリティを同時に進め、安心・安全なソフトウェアを迅速にリリースするというコンセプト。*\n\n## オールインワン開発環境のGitLabをフルに使ってやってみる\n![DSC2776](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687819/Blog/Content%20Images/_DSC2776.jpg)\nソースネクスト株式会社 CIO 高沢 冬樹氏\n\nDevSecOpsを検討するにあたり、ソースネクストは株式会社トレンドソリューションズ（以下、トレンドソリューションズ）に協力を依頼しました。そして、市場にあるDevSecOpsソリューションの中から、GitLabを本格的に調査することになりました。検討初期において、GitLabの最大の魅力は強力な脆弱性スキャン能力でした。ただ、DevSecOpsのコンセプトを深く理解するようになるにつれ、「1つの製品でDevSecOpsのすべてのプロセスに対応できる」ことと、「豊富なドキュメント系の機能を備えていて、振り返りをしやすい仕組み」こそが、求めている仕様にマッチしていることがわかってきたといいます。\n\n「GitLabだけがあればDevSecOpsを実現できる、というトータルソリューションになっている点は、初めて取り組む上で重要でした。開発コードのセキュリティスキャン、CI/CDなど開発リリース時に必須の個別プロセスに対応できるツールを組み合わせて“DevSecOpsのDIY”をするというアプローチもあるのかもしれませんが、詳細な機能比較をするにしても、だれも体感したことのない機能に優劣をつけようがありません。ですから、まずはGitLabをフルに使ってやりたいことをすべてやってみて、どうしても足りなければそのときに考えようという方向で意見が一致しました」（高沢氏）\n\n今回のプロジェクトで対象となったのは、社内で最も大きなECを含むフロントエンドシステムです。高沢氏は、「スモールスタートでテストしたかったわけではありません。最も難しいところからスタートしたのは、動機が“DevSecOpsを使ってみたい”ではなく、“ビジネスの品質を高めたい”という真剣なものだったから。最初から成果が求められました」と振り返ります。\n\nGitLabの採用を決め、半年をかけてじっくりと新たな開発プロセスを整備していきました。経験豊富なトレンドソリューションズのスペシャリストがプロジェクトをリードし、社内エンジニアが外部開発パートナーを巻き込んで議論を重ね、さまざまな決めごとをクリアしていったのです。\n\n具体的には、GitLabとDevSecOpsのコンセプト理解および共有からスタートし、to beモデルを作成。それに向けた課題をリスト化し、順次プロセスの中に落とし込んでいくイメージです。ワークフローの整備やCI/CDの仕様策定など、専門的な知見が生きる分野はトレンドソリューションズが主導したことで、プロジェクトはスムーズに進みました。\n\n巨大で複雑なシステムであるために、苦労した点もありました。Microsoft Azureベースのシステムであり、「自動化のための呪文（笑）を唱えるとうまくいくところ」（高沢氏）を切り抜ける必要がありました。システムの中にCMSパッケージがあり、その部分と連携するシステム開発においてサーバ側で独特な手法を取りながら自動化するという調整も実施しました。AzureとCMS、GitLabのすべてを深く理解しているメンバーはおらず、最適な着地点を見い出すために全員がプロジェクトの成功にコミットして知識を持ち寄る必要もありました。\n\nプロジェクトメンバーは、これらの課題に立ち向かい、稼働時にはGitLabを使う新たな開発プロセスへと移行することができました。プロジェクト初期から、課題管理にGitLabのイシュー機能を利用したことも、スムーズな移行に役立ちました。これはトレンドソリューションズがGitLab導入プロジェクトでよく使う手法で、初期からすべてのメンバーが仕事の中でGitLabを使う習慣が自然と身につくという点で価値は高かったといいます。\n\n## Deploy工程の9割を自動化、生産性は250％アップ\n![DSC2726](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687819/Blog/Content%20Images/_DSC2726.jpg)\n\n実は、無理をして自動化しなかった部分や、あえて手作業を残した部分もあります。たとえば、CI/CDを工夫し、一部に手作業を加えることでよりセキュアな開発をできるようにしました。Deployにかかわる全工程は、現状で9割の自動化にとどめています。\n\n高沢氏は、「Deploy部分は、もっと自動化しようと思えばできます。ただ、実務を考えると自動化しない部分を残しておいた方が良いと判断したケースもあるのです。たとえば、最後の検証作業はパフォーマンスチェックも含むので、自動化したとしても結局は目視することになります。やろうと思えば95％までならいけるのですが、やめておいた方がより良さそう、というせめぎあいです。もう少し慣れてくると、現場と相談して自動化部分を増やすかもしれません。ただ、現場がやりやすい開発プロセスを目指すなら、9割くらいが最適解かもしれませんし、9割は十分に良い数字だと自負しています」と話しています。\n\nGitLabの稼働後、そのほかにも多くの成果が顕在化しています。エラー検知とセキュリティ診断がプロセスに取り込まれた上に自動化されたことで、作業効率を高めながらプロセスを厳格化することに成功しました。手作業でやっていった際には時間のかかっていたパッケージングプロセスは完全に自動化できました。これらを含め、トータルな作業負荷を低減できたため、エンジニアの生産性は250％以上アップしている感覚があるといいます。\n\nこれまでの“3つのDevOps”は、“ひとつのDevSecOps”になり、自社が担当する部分と開発パートナーに任せる部分をすべてソースコードレベルから、イシューを含めて管理できます。これにより、初期開発時の思想を含めてすべての情報を管理できるようになりました。また、以前は時間を要していた組織をまたいだマージリクエスト処理でも、“組織”という壁はもはやありません。\n\n## 「気づいていないリスク」を可視化する価値\n![DSC2722](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687819/Blog/Content%20Images/_DSC2722.jpg)\n\n高沢氏は、「開発における最大の課題は、“気づいていないリスク”です」と話します。あらゆるシステムは、「将来にわたって絶対にリスクがない」と言えませんが、それ以上に、「今リスクがあるのかどうかも不確かであり、確かめようがなかった」のです。「例えば、サードパーティのJSライブラリを、ユーザー体験をより良くするためにWebサイトのごく一部で使っていた、などのケースはよくあることです。これらは存在すら見つけにくい上に、コールするライブラリの先の先にリスクが潜んでいる場合もあります。ソースコードチェックだけでリスク発見することはほぼ不可能です」。\n\nGitLabで一貫したDevSecOpsを実現したことで、コールするライブラリの先の先までを自動検証し、リスクを避けることができます。目指していた姿は、「100％安全なシステムはありえないけれど、“ここまできちんとやっている”と自信を持って説明できる状態」（高沢氏）です。そして、それを実現することができました。今回の成功を受けて、販売する製品別のシステム開発プロジェクトや、社内業務システムの開発・運用プロジェクトにも、今後GitLabを展開する計画も出てきました。\n\nソースネクストがDevSecOpsを推進している、という噂は、IT関係者に伝わり始めているようです。そのため、高沢氏は各社のCIOが集まる場で意見を求められるケースが増えてきたといいます。\n\n高沢氏は、「DevSecOpsは国内企業からも大きな注目を集めていて、私たちがGitLabを使って __シフトレフト__ \u003Csup>**\u003C/sup>に全力で取り組んでいるという話をすると、みなさん興味津々です。ただ、実際に取り組んでいる企業の数となるとまだまだかもしれません。ですから、まずはDevSecOpsというコンセプトを理解すること。そして、それに共感するのであれば、いちはやくスタートすることをおすすめしています」と話してくれました。\n\n\u003Csup>**\u003C/sup> *開発の各フェーズにセキュリティ対策を組み込み、開発効率を向上させながらセキュリティリスクを低減しようとする考え方。GitLabはコード解析、脅威モデリング、テストなどシフトレフトに役立つ機能を提供している。*\n\u003Cbr>\n\u003Cbr>\n\n## ▶️事例PDFを[無料でダウンロードする](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752463863/xmtslzjkrk9noyv7bio1.pdf)\n\u003Cbr>\u003Cbr>","customer-stories",[679,776,9,753,751,777],"customers","user stories",{"slug":779,"featured":91,"template":685},"customers-sourcenext","content:ja-jp:blog:customers-sourcenext.yml","Customers Sourcenext","ja-jp/blog/customers-sourcenext.yml","ja-jp/blog/customers-sourcenext",{"_path":785,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":786,"content":792,"config":798,"_id":800,"_type":14,"title":801,"_source":16,"_file":802,"_stem":803,"_extension":19},"/ja-jp/blog/data-driven-devsecops-exploring-gitlab-insights-dashboards",{"title":787,"description":788,"ogTitle":787,"ogDescription":788,"noIndex":6,"ogImage":789,"ogUrl":790,"ogSiteName":669,"ogType":670,"canonicalUrls":790,"schema":791},"データドリブンのDevSecOps：GitLabインサイトダッシュボードのご紹介","主要なメトリクスの可視化、プロジェクトの進捗状況の追跡、カスタマイズ可能なデータドリブンビューを使ったチームの生産性の改善など、GitLabインサイトダッシュボードの活用方法について説明します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097210/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2811%29_78Dav6FR9EGjhebHWuBVan_1750097210214.png","https://about.gitlab.com/blog/data-driven-devsecops-exploring-gitlab-insights-dashboards","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"データドリブンのDevSecOps：GitLabインサイトダッシュボードのご紹介\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ricardo Amarilla Villalba\"}],\n        \"datePublished\": \"2024-11-20\",\n      }",{"title":787,"description":788,"authors":793,"heroImage":789,"date":795,"body":796,"category":681,"tags":797},[794],"Ricardo Amarilla Villalba","2024-11-20","メトリクスおよび分析は、生産性や品質を高め、成功を収める上で極めて重要な要素です。包括的なDevSecOpsプラットフォームであるGitLabでは、こういった重要なメトリクスを追跡・可視化するための強力なツールをインサイトダッシュボード上で提供しています。この記事では、ご利用の環境でのインサイトダッシュボードの使用方法についてご紹介します。\n\n\n## GitLabのメトリクスと分析ツールのご紹介 \n\n\nGitLabでは、DevSecOpsライフサイクルのさまざまな側面に対応したメトリクスおよび分析ツール群をご用意しています。\n\n\n1.\n[生産性分析](https://docs.gitlab.com/ee/user/analytics/productivity_analytics.html)：チームの開発速度、サイクルタイム、リードタイムを追跡します。  \n\n2.\n[コードレビュー分析](https://docs.gitlab.com/ee/user/analytics/code_review_analytics.html)：コード品質、テストカバレッジ、レビュー効率を測定します。  \n\n3.\n[CI/CD分析](https://docs.gitlab.com/ee/user/analytics/ci_cd_analytics.html)：パイプラインのパフォーマンスとデプロイ頻度をモニタリングします。  \n\n4.\n[バリューストリーム分析](https://docs.gitlab.com/ee/user/group/value_stream_analytics/)：アイデア出しから本番稼働までの作業の流れを可視化します。  \n\n5.\n[インサイト](https://docs.gitlab.com/ee/user/project/insights/)：プロジェクトやグループに関するデータを調べて可視化します。\n\n\n開発プロセスに関する貴重なインサイトを得られるこれらのメトリクスを参考にして、ボトルネックの特定、ワークフローの最適化、データドリブンな意思決定を行えます。\n\n\n## 特定のメトリクスへのラベルの活用\n\n\nあまり目立たないものの、GitLabの特に強力な機能の1つがラベルです。ラベルを使うと、特定のメトリクスに絞り込んで、極めて正確に焦点を当てられます。イシューやマージリクエスト、エピックに戦略的にラベルを適用することで、プロジェクトのパフォーマンスや進捗について的確なインサイトを得られるカスタムビューを作成できます。\n\n\n用途の広い識別子として機能するGitLabのラベルを使用すれば、作業アイテムを柔軟に分類・整理できます。機能開発やバグ修正、チーム固有のタスクなど、追跡対象が何であれ、ラベルを使用すれば、プロジェクトデータをスライスして、別の視点から分析して意味のあるパターンや傾向を特定することが可能です。この概念は、クラウドのデプロイにおいて、管理やコスト配分、運用上のインサイト取得をスムーズに行うためにタグを使用するのと似ています。\n\n\nしっかりと考えながら作業アイテムにラベルを付けていくことで、カスタムダッシュボードやレポートの生成に活用できる高度なラベリングシステムが実質的に構築されます。このアプローチにより、チームや関係者にとって最も重要なメトリクスを重点的に取り上げられるとともに、プロジェクトの健全性と勢いに焦点を絞ってわかりやすく可視化できます。\n\n\n## GitLabインサイトの設定方法\n\n\nGitLabインサイトを使用すると、プロジェクトやグループに関するデータを調べて可視化できます。特定の期間内に作成された、または完了したイシュー、マージリクエストのマージが完了するまでの平均時間、トリアージの健全性など、さまざまな側面に関する有用な分析情報を得られます。インサイトは、プロジェクトとグループのどちらにも設定できます。\n\n\nインサイトの設定手順は次のとおりです。\n\n\n1. プロジェクトにインサイトを設定する場合：  \n   * プロジェクトのルートディレクトリ内に`.gitlab/insights.yml`という名前のファイルを作成します。  \n2. グループにインサイトを設定する場合：  \n   * グループに属するプロジェクト内に`.gitlab/insights.yml`ファイルを作成します。  \n   * グループの**設定 > 一般**の順に移動します。\n   * **分析セクション**を展開し、**インサイトセクション**を見つけます。  \n   * 設定ファイルが含まれるプロジェクトを選択し、変更を保存します。\n\n`.gitlab/insights.yml`は、レポート内のチャートの構造や順序に加え、表示されるチャートの形式を定義できるYAMLファイルです。各チャートの定義には、タイトル、説明、タイプ、データソースやフィルタリング条件を指定するクエリなどのパラメータを含められます。\n\n\nインサイトを表示するには、プロジェクトまたはグループで**分析 > インサイト**の順に移動します。\n\n\n![デフォルトのインサイトダッシュボードの表示](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097218/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750097217972.png)\n\n\n## マージリクエストインサイトのカスタマイズ\n\n\nデフォルトビューでは有用な情報が未加工で表示されますが、インサイトダッシュボードをカスタマイズすれば、各マージリクエストの担当チームや、マージリクエストごとに解決された問題の種類など、より多くの情報が明らかになります。\n\n\n## スクワッドおよび要件タイプごとのマージリクエストインサイト\n\n\nGitLabでスクワッドの生産性を測定するのは、難しい場合があります。GitLabのグループとサブグループの構造が、実際のスクワッドの構成と完全に一致していない場合は特に困難です。こういった課題に対処し、効果的にスクワッドの生産性を追跡する方法をご紹介します。\n\n\n### **スクワッドベースのメトリクスの設定**\n\n\n1.\n**ラベルの作成**：スクワッドごと（例：`squad::alpha`、`squad::beta`）および要件タイプ（例：`type::bug`、`type::feature`、`type::maintenance`）ごとに範囲指定した一意のラベルを作成します。\n\n\n\u003C!-- 空白行 -->\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/ZUOzORIUJeU?si=T8eHeGizS3blYFHB\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\n\u003C!-- 空白行 -->\n\n\n2.\n**ラベルの適用**：所属するプロジェクトやグループに関係なく、各スクワッドが対応するすべてのイシューおよびマージリクエストにこれらのスクワッドラベルを一貫して適用します。  \n\n\n\u003C!-- 空白行 -->\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/fJ9entEBZG8?si=MlM6mKirEdkmwDDJ\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\n\u003C!-- 空白行 -->\n\n\n**ヒント**：  \n   * GitLab APIを使用すれば、既存のMR（未解決、マージ済み、完了したもの）に一括でラベルを適用できます。  \n   * GitLab CIパイプラインの一環としてラベルの追加や削除、更新を行えます。  \n   * GitLabトリアージボットを活用すれば、ラベルの適用プロセスを自動化できます。  \n\n3.\nダッシュボードの設定：プロジェクトのリポジトリに`.gitlab/insights.yml`ファイルを作成し、チームやタイプ固有のマージリクエストインサイト用のカスタムチャートを定義します。\n\n\n```\n\n\n## Default Merge Requests insights.yml \n\nmergeRequests:\n  title: Merge requests dashboard\n  charts:\n    - title: Merge requests merged per week \n      type: bar\n      query:\n        data_source: issuables\n        params:\n          issuable_type: merge_request\n          issuable_state: merged\n          group_by: week\n          period_limit: 12\n    - title: Merge requests merged per month\n      type: bar\n      query:\n        data_source: issuables\n        params:\n          issuable_type: merge_request\n          issuable_state: merged\n          group_by: month\n          period_limit: 3\n\n## Per-teams Merge Requests insights.yml\n\nmergeRequestsTeams:\n  title: Merge requests dashboard per teams\n  charts:\n    - title: Merge requests merged per week \n      type: stacked-bar\n      query:\n        data_source: issuables\n        params:\n          issuable_type: merge_request\n          issuable_state: merged\n          group_by: week\n          period_limit: 12\n          collection_labels:\n            - squad::alpha\n            - squad::beta\n    - title: Merge requests merged per month\n      type: stacked-bar\n      query:\n        data_source: issuables\n        params:\n          issuable_type: merge_request\n          issuable_state: merged\n          group_by: month\n          period_limit: 3\n          collection_labels:\n            - squad::alpha\n            - squad::beta\n\n## Per-teams and Type Merge Requests insights.yml\n\nmergeRequestsTeamsAndType:\n  title: Per Teams and Type - Merge requests dashboard\n  charts:\n    - title: Merge requests merged per week - Squad Alpha\n      type: stacked-bar\n      query:\n        data_source: issuables\n        params:\n          issuable_type: merge_request\n          issuable_state: merged\n          filter_labels: squad::alpha\n          collection_labels:\n            - type::feature\n            - type::bug\n            - type::maintenance\n          group_by: week\n          period_limit: 12\n    - title: Merge requests merged per month - Squad Alpha\n      type: stacked-bar\n      query:\n        data_source: issuables\n        params:\n          issuable_type: merge_request\n          issuable_state: merged\n          filter_labels: squad::alpha\n          collection_labels:\n            - type::feature\n            - type::bug\n            - type::maintenance\n          group_by: month\n          period_limit: 3\n    - title: Merge requests merged per week - Squad Beta\n      type: stacked-bar\n      query:\n        data_source: issuables\n        params:\n          issuable_type: merge_request\n          issuable_state: merged\n          filter_labels: squad::beta\n          collection_labels:\n            - type::feature\n            - type::bug\n            - type::maintenance\n          group_by: week\n          period_limit: 12\n    - title: Merge requests merged per month - Squad Beta\n      type: stacked-bar\n      query:\n        data_source: issuables\n        params:\n          issuable_type: merge_request\n          issuable_state: merged\n          filter_labels: squad::beta\n          collection_labels:\n            - type::feature\n            - type::bug\n            - type::maintenance\n          group_by: month\n          period_limit: 3\n\n```\n\n\nこのようにカスタマイズすることで、チームおよび要件タイプごとのマージリクエストアクティビティがわかりやく表示される、役に立つ情報満載のダッシュボードを作成できます。それをもとに、長期的なトレンドの可視化、各スクワッドのパフォーマンスの比較、スクワット単位での作業タイプの分布の分析を行えます。\n\n\n![チームおよび要件タイプごとにMRアクティビティが表示されているダッシュボード](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097218/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750097217972.png)\n\n\n![各スクワッドのパフォーマンスが比較されているダッシュボード](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097218/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097217974.png)\n\n\n## 無料トライアルで今すぐスタート！\n\n\nGitLabには、GitLabインサイト以外にも、メトリクスおよび分析関連のツールや機能が多数あります。ぜひ以下のバリューストリーム管理製品ツアーで、バリューストリーム分析やCI/CD分析、コードレビューメトリクスなど、GitLabの強力な分析機能の全容をご確認ください。\n\n\n[![バリューストリーム管理製品ツアー](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097218/Blog/Content%20Images/Blog/Content%20Images/Screenshot_2024-11-20_at_12.28.08_PM_aHR0cHM6_1750097217976.png)](https://gitlab.navattic.com/vsm)\n\n\n> カスタムメトリクスの作成を始める準備ができたら、[今すぐGitLab\nUltimateの無料トライアル](https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com%2F)にご登録ください。データドリブンのDevSecOpsを最大限に活用しましょう。\n\n\n## 関連リンク\n\n-\n[スケジュール設定できるレポート生成ツールでバリューストリーム管理を簡単に実施](https://about.gitlab.com/blog/new-scheduled-reports-generation-tool-simplifies-value-stream-management/)\n\n-\n[新たなGitLabバリューストリームダッシュボードを使い始める](https://about.gitlab.com/blog/getting-started-with-value-streams-dashboard/)\n\n-\n[AIインパクト分析ダッシュボードによるAIのROI測定](https://about.gitlab.com/ja-jp/blog/developing-gitlab-duo-ai-impact-analytics-dashboard-measures-the-roi-of-ai/)\n",[9,679,681,752,680,706],{"slug":799,"featured":91,"template":685},"data-driven-devsecops-exploring-gitlab-insights-dashboards","content:ja-jp:blog:data-driven-devsecops-exploring-gitlab-insights-dashboards.yml","Data Driven Devsecops Exploring Gitlab Insights Dashboards","ja-jp/blog/data-driven-devsecops-exploring-gitlab-insights-dashboards.yml","ja-jp/blog/data-driven-devsecops-exploring-gitlab-insights-dashboards",{"_path":805,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":806,"content":812,"config":822,"_id":824,"_type":14,"title":825,"_source":16,"_file":826,"_stem":827,"_extension":19},"/ja-jp/blog/demystifying-ci-cd-variables",{"title":807,"description":808,"ogTitle":807,"ogDescription":808,"noIndex":6,"ogImage":809,"ogUrl":810,"ogSiteName":669,"ogType":670,"canonicalUrls":810,"schema":811},"GitLabの環境変数をわかりやすく解説","CI/CD変数はジョブやパイプラインを制御するのに便利（かつ柔軟に利用可能）なツールです。この記事では、GitLabの環境変数について知っておくべき情報をすべてご紹介します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664679/Blog/Hero%20Images/blog-image-template-1800x945__24_.png","https://about.gitlab.com/blog/demystifying-ci-cd-variables","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLabの環境変数をわかりやすく解説\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Veethika Mishra\"}],\n        \"datePublished\": \"2021-04-09\",\n      }",{"title":807,"description":808,"authors":813,"heroImage":809,"date":815,"body":816,"category":703,"tags":817,"updatedDate":821},[814],"Veethika Mishra","2021-04-09","[CI/CD](https://about.gitlab.com/ja-jp/topics/ci-cd/)変数は、さまざまな方法で定義・使用でき、高い柔軟性を持っています。変数はジョブやパイプラインを制御する上で非常に便利で、`.gitlab-ci.yml`設定ファイルに値をハードコーディングせずに済みます。このブログ記事では、変数のスコープや機能を分かりやすくお伝えするため、変数の定義や使い方に関する情報を網羅的に整理し、全体像をご紹介します。記事全体をとおして、関連するドキュメントがリンクされています。\n\n\n[GitLab\nCI/CD](https://docs.gitlab.com/ee/ci/)では、値を定義して保存することで、変数を使用してジョブをカスタマイズできます。変数を使用すれば、値をハードコーディングする必要はありません。GitLabでCI/CD変数を定義するには、**「設定」>>「CI/CD」>>「変数」**の順に移動します。または`.gitlab-ci.yml`ファイルで定義することも可能です。\n\n\n変数は、異なるデプロイ環境（`testing`、`staging`、`production`など）におけるサードパーティサービスの設定に役立ちます。それらの環境に紐づけられたサービスは、必要なAPIエンドポイントを指す変数を変更するだけで、簡単に変更できます。また、変数を使用してジョブを設定し、ジョブ実行時にジョブ内で環境変数として利用できるようにすることも可能です。\n\n\n![GitLabは、.gitlab-ci.ymlファイルを読み込んで、参照される変数をスキャンし、GitLab\nRunnerにその情報を送信します。変数情報はRunnerに渡され、Runnerによって出力されます。](https://about.gitlab.com/images/blogimages/demystifying-ci-cd-variables/variables_processing.jpeg)\n\n\n## 変数と環境の関係\n\n\nソフトウェア開発プロセスには、製品をユーザー向けにリリースする前にテストするステージが含まれます。[環境](https://docs.gitlab.com/ee/ci/environments/)は、これらのステージの内容を定義するために使用されるもので、チームや組織によって異なる可能性があります。\n\n\n一方、変数とは、ユーザーによる製品の操作によって変化する可能性のあるデータ値を指します。これには、年齢や好み、またはタスクフローにおける次のステップを決定する要素となるあらゆる入力が該当します。\n\n\n[環境変数](https://docs.gitlab.com/ee/administration/environment_variables.html)という言葉は、皆さんもよく耳にされると思います。これは、ある環境で定義されているものの、アプリケーションの外部に存在する変数を指します。GitLab\nCI/CD変数を使用すると、デベロッパーはコード内で値を設定できます。変数の使用には、コードの柔軟性が保証されるという利点があります。GitLab\nCI/CD変数を使用すれば、コードに変更を加えることなく、特定の環境にデプロイされたアプリケーションを変更できます。これにより、アプリケーションの外部で設定の環境変数を変更するだけで、テストの実行やサードパーティサービスの統合を簡単に行えます。\n\n\n## CI/CD変数のスコープ\n\n\n![CI/CD変数の優先順位：1) 手動によって実行、トリガー、スケジュールされたパイプライン変数、2)\nプロジェクトレベル、グループレベル、インスタンスレベルの保護変数、3) 継承されたCI/CD変数、4)\nymlに定義された、ジョブレベルのグローバル変数、5) デプロイ変数、6)\n定義済みのCI/CD変数](https://about.gitlab.com/images/blogimages/demystifying-ci-cd-variables/variables_precedence.jpeg)\n\n\n### `.gitlab-ci.yml`に定義された変数\n\n\nGitLabには、ジョブ環境で利用する必要がある変数を追加できます。これらのCI/CD変数は、`.gitlab-ci.yml`ファイルのデータベースURLのような、機密性の低いプロジェクト設定を保存するために使用されます。この変数は、複数のジョブやスクリプトで再利用でき、必要な場所で値を参照できます。値を変更する場合は、変数を一度更新するだけで、変数が使用されているすべての箇所に変更が反映されます。\n\n\n### プロジェクトのCI/CD変数\n\n\nリポジトリ固有の要件に縛られることなく、[プロジェクト設定](https://docs.gitlab.com/ee/ci/variables/#for-a-project)でCI/CD変数を定義できます。これにより、CI/CDパイプラインで利用できるようになります。これらの変数は、リポジトリの外部（`.gitlab-ci.yml`ファイルには保存されません）に保存されますが、CI/CDの設定やスクリプトで引き続き利用可能です。変数を`.gitlab-ci.yml`ファイル外に保存することで、これらの値のスコープをプロジェクト内のみに限定し、プロジェクトにプレーンテキストとして保存されることを防ぎます。\n\n\n### グループおよびインスタンスのCI/CD変数\n\n\n一部の変数は、グループレベル、あるいはインスタンスレベルで適用でき、グループやインスタンス内のすべてのプロジェクトで有用となる可能性があります。[グループまたはインスタンス設定](https://docs.gitlab.com/ee/ci/variables/#for-a-group)で変数を定義することで、それらのスコープ内にあるすべてのプロジェクトにおいて、実際の値がわからなくても、変数を使用できるようになります。下位スコープの変数を作成する必要もありません。たとえば、複数のプロジェクトにおいて更新が必要な共通の値がある場合、1か所で最新の状態に保つことで管理しやすくなります。また、パスワードの値を実際に知らなくても、複数のプロジェクトで特定のパスワードを使用することも可能です。\n\n\n## 環境としてのジョブとパイプライン\n\n\nGitLab\nCI/CDの変数は、環境変数としてだけでなく、`.gitlab-ci.yml`設定ファイル内でパイプラインの動作を設定するためにも使用されます。この場合、特定の環境に依存しない状況でも利用できます。また、プロジェクト、グループ、インスタンスの設定に保存しておくことで、パイプライン内のジョブで利用可能になります。\n\n\n以下に例を示します。\n\n\n```  \n\njob:  \n  rules:  \n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH  \n  script:  \n  - echo \"This job ran on the $CI_COMMIT_BRANCH branch.\"  \n```\n\n\nスクリプトセクション内で使用されている変数（例：`$CI_COMMIT_BRANCH`）は、定義されたジョブのスコープ内で実行されます。このスコープは「ジョブ環境」と呼ばれます。つまり、ジョブが開始されると、GitLab\nRunnerはDockerコンテナを起動し、その環境でジョブを実行します。Runnerはその変数（および他のすべての定義済み変数やカスタム変数）をジョブに提供します。さらに、その値をログ出力に表示することも可能です。\n\n\nただし、この変数は、ジョブの実行タイミングを決定するために、`if:`セクション**でも**使用されます。ただし、そのセクション自体は環境ではないため、これらの変数を「CI/CD変数」と呼びます。CI/CDジョブを動的に設定する際に使用できるのは**もちろん**、ジョブの実行時に環境変数としても利用できます。\n\n\n## 定義済み変数\n\n\nGitLab\nCI/CDパイプラインが開始されたタイミングで、[定義済み変数](https://docs.gitlab.com/ee/ci/variables/predefined_variables.html)がすでに存在します。ユーザーは変数自体を定義せずに、コミットやプロジェクト、パイプラインの詳細などの値にすぐにアクセスできます。\n\n\n## カスタムCI/CD変数\n\n\n![Runnerは、2種類のカスタムCI/CD変数（タイプとファイル）を作成できます。](https://about.gitlab.com/images/blogimages/demystifying-ci-cd-variables/variable_types.jpeg)\n\n\nGitLabでは、設定でCI/CD変数を作成する際に、変数に対してより詳細な設定オプションを利用できます。次のような追加の設定オプションを使用して、機密性の高い変数をより厳密に管理することが可能です。\n\n\n**環境スコープ**：ある変数を特定の環境でのみ使用する必要がある場合に、その環境でのみ使用できるように設定します。たとえば、デプロイトークンを`production`環境でのみ使用できるように設定できます。\n\n\n**保護変数**：環境スコープと同様に、デフォルトブランチなどの保護ブランチでパイプラインが実行される場合にのみ、変数を使用できるように設定できます。\n\n\n**変数タイプ**：一部のアプリケーションでは、設定をファイル形式で渡す必要があります。そうした設定が必要なアプリケーションを利用する場合は、変数タイプを「File」に設定します。この方法でCI/CD変数を設定する場合、Runnerが環境内で変数を利用できるようにする際に、実際に一時ファイルに変数を書き出し、そのファイルパスを変数の値として保存します。その後、アプリケーションに必要なファイルパスを渡すことで設定が適用されます。\n\n\nご紹介した変数の定義方法や使用方法に加えて、GitLabでは、手動でパイプラインを実行する必要がある場合に、事前入力済みの変数を生成する機能が導入されました。事前入力済みの変数が生成されることで、エラーの発生リスクが軽減され、パイプラインを実行しやすくなります。\n\n\n**マスクされた変数**：[マスクされた変数](https://docs.gitlab.com/ee/ci/variables/#mask-a-cicd-variable)は、変数の値が表示されないように**ジョブログに隠された**CI変数です。\n\n\n**マスクおよび非表示化された変数**：[GitLab\n17.4](https://about.gitlab.com/ja-jp/blog/gitlab-17-4-released/)で導入された[マスクおよび非表示化された](https://docs.gitlab.com/ee/ci/variables/#hide-a-cicd-variable)変数は、ジョブログと同じマスキング機能を利用し、**設定UI**でも**値を非表示**にします。これらの変数を機密データ（シークレットなど）に使用した場合、誤って公開されてしまう可能性があるため、推奨されません。\n\n\n## シークレット\n\n\nシークレットとは、機密性が高く、秘密に保つべき認証情報のことを指し、以下のようなものが該当します。\n\n\n* パスワード\n\n* SSH鍵\n\n* アクセストークン\n\n* その他、漏洩すると組織に害を及ぼす可能性のある認証情報\n\n\nGitLabでは現在、キーやトークン、その他のシークレットをプロジェクトレベルで安全に管理するために、HashiCorp Vault、Google\nCloud Secret Manager、Azure Key\nVaultを活用できます。これにより、[CIで外部シークレットを使用](https://docs.gitlab.com/ee/ci/secrets/)することが可能です。そのため、セキュリティ上の理由から、これらのシークレットを他のCI/CD変数から分離して管理できます。\n\n\n### GitLabシークレットマネージャー\n\n\nGitLabでは、CIにおける外部シークレットのサポートに加えて、GitLab内でシークレットを安全かつ便利に保存するための[ネイティブなシークレット管理ソリューション](https://gitlab.com/groups/gitlab-org/-/epics/10108)の導入にも取り組んでいます。このソリューションは、お客様がGitLab固有のコンポーネントや環境で保存されたシークレットを使用したり、ネームスペースグループやプロジェクトレベルでのアクセスを簡単に管理したりする上でも役立ちます。\n\n\n## 関連リンク\n\n*\n[GitLabネイティブシークレットマネージャーでソフトウェアサプライチェーンのセキュリティを強化](https://about.gitlab.com/blog/gitlab-native-secrets-manager-to-give-software-supply-chain-security-a-boost/)\n\n\n***免責事項**：このブログには、今後リリース予定の製品、機能、および機能性に関する情報が記載されています。ただし、それらの情報はあくまで参考のために提供されているため、購入や計画の判断材料として使用することはお控えください。すべてのプロジェクトと同様に、このブログおよびリンク先のページに記載されている項目は、変更または遅延される場合があります。製品、機能、機能性の開発、リリース、およびタイミングに関する決定権は、GitLabに帰属します。*\n",[818,752,819,820,9,680],"CD","inside GitLab","CI","2025-01-13",{"slug":823,"featured":6,"template":685},"demystifying-ci-cd-variables","content:ja-jp:blog:demystifying-ci-cd-variables.yml","Demystifying Ci Cd Variables","ja-jp/blog/demystifying-ci-cd-variables.yml","ja-jp/blog/demystifying-ci-cd-variables",{"_path":829,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":830,"content":836,"config":844,"_id":846,"_type":14,"title":847,"_source":16,"_file":848,"_stem":849,"_extension":19},"/ja-jp/blog/from-code-to-production-a-guide-to-continuous-deployment-with-gitlab",{"ogTitle":831,"schema":832,"ogImage":833,"ogDescription":834,"ogSiteName":669,"noIndex":6,"ogType":670,"ogUrl":835,"title":831,"canonicalUrls":835,"description":834},"コードから本番環境へ：GitLabを活用した継続的デプロイのガイド","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"コードから本番環境へ：GitLabを活用した継続的デプロイのガイド\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Benjamin Skierlak\"},{\"@type\":\"Person\",\"name\":\"James Wormwell\"}],\n        \"datePublished\": \"2025-01-28\",\n      }","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659478/Blog/Hero%20Images/REFERENCE_-_Use_this_page_as_a_reference_for_thumbnail_sizes.png","GitLabを活用して堅牢な継続的デプロイパイプラインを構築する方法をご紹介します。具体的な手順や例、ベストプラクティスを通して段階的にプロセスを理解できます。","https://about.gitlab.com/blog/from-code-to-production-a-guide-to-continuous-deployment-with-gitlab",{"heroImage":833,"body":837,"authors":838,"updatedDate":841,"date":842,"title":831,"tags":843,"description":834,"category":681},"継続的デプロイは、チームがより迅速かつ高い信頼性で価値を生み出せる画期的な手法です。しかし、GitOpsやKubernetesを用いたコンテナオーケストレーション、動的環境などの高度なデプロイワークフローに取り組むのは、継続的デプロイの導入を始めたばかりのチームにとってはハードルが高いと感じられるかもしれません。\n\n\nGitLabでは、シームレスかつスケーラブルなデリバリーを実現することに注力しています。チームが基本に集中できるようにすることで、時間をかけてより複雑な戦略へと発展できる、強固な基盤を構築できます。このガイドでは、GitLabを活用した継続的デプロイの導入に必要な基本的なステップを紹介し、長期的な成功のための土台作りをサポートします。\n\n\n## まずはワークフローの計画から\n\n\n技術的な実装に入る前に、デプロイワークフローをしっかりと設計する時間を取りましょう。成功の鍵は、慎重な計画と体系的なアプローチにあります。\n\n\n### アーティファクト管理戦略\n\n\n継続的デプロイにおいて、アーティファクトとは、ビルドプロセスによって生成されるパッケージ化された成果物を指し、保存、バージョン管理、デプロイが必要です。アーティファクトには、次のようなものが含まれます。\n\n\n* アプリケーション用のコンテナイメージ\n\n* パッケージ\n\n* コンパイル済みのバイナリや実行ファイル\n\n* ライブラリ\n\n* 設定ファイル\n\n* ドキュメントパッケージ\n\n* その他のアーティファクト\n\n\n各アーティファクトは、デプロイプロセスにおいて特定の役割を果たします。たとえば、一般的なWebアプリケーションでは、次のようなアーティファクトが生成されることがあります。\n\n\n* バックエンドサービス用のコンテナイメージ\n\n* コンパイル済みフロントエンドアセットのZIPアーカイブ\n\n* データベース変更用のSQLファイル\n\n* 環境ごとの設定ファイル\n\n\nアーティファクトの適切な管理はデプロイを成功させる鍵となります。ここからは、アーティファクト管理のアプローチについて詳しく見ていきましょう。\n\n\n#### アーティファクトとリリースのバージョニング戦略\n\n\nクリーンで整理された構造を保つためのベストプラクティスとして、アーティファクトの明確なバージョニング戦略を確立することが重要です。リリース作成時のポイントは以下のとおりです。\n\n\n* リリースタグにセマンティックバージョニング（major.minor.patch）を使用する\n\n  * 例：安定版リリースが`myapp:1.2.3`の場合\n  * 破壊的な変更がある場合は、メジャーバージョン変更（2.0.0）\n  * 新機能を追加する場合は、マイナーバージョン変更（1.3.0）\n  * バグ修正を行う場合は、パッチバージョン変更（1.2.4）\n* 最新の安定版を示す「latest」タグを維持する\n\n  * 例：`myapp:latest`（自動デプロイ用）\n* コミットSHAを含めることで、正確なバージョン追跡を行う\n\n  * 例：`myapp:1.2.3-abc123f`（デバッグ用）\n* 開発環境向けにブランチベースのタグを使用する\n\n  * 例：`myapp:feature-user-auth`（新機能テスト用）\n\n#### ビルドアーティファクトの保持\n\n\n明確な保持ルールを実装しましょう。\n\n\n* 一時的なアーティファクトの明確な有効期限を設定する\n\n* 永続的に保持する必要があるアーティファクトを定義する\n\n* ストレージ管理のためのクリーンアップポリシーを設定する\n\n\n#### レジストリアクセスと認証\n\n\n適切なアクセス制御でアーティファクトのセキュリティを確保しましょう。\n\n\n* デベロッパーのアクセス用にパーソナルアクセストークンを実装する\n\n* パイプラインの認証にCI/CD変数を設定する\n\n* 適切なアクセススコープを設定する\n\n\n### 環境戦略\n\n\n環境設計はデプロイパイプライン全体の構成に影響を与えるため、早い段階で検討しましょう。\n\n\n* 開発、ステージング環境、本番環境の設定\n\n* 環境ごとの変数とシークレットの管理\n\n* アクセス制御と保護ルールの設定\n\n* デプロイの追跡とモニタリングのアプローチ\n\n\n### デプロイターゲット\n\n\nどこに、どのようにデプロイするのかを慎重に検討しましょう。これらの決定は重要であり、それぞれのメリットとデメリットを考慮する必要があります。\n\n\n* インフラ要件（仮想マシン、コンテナ、クラウドサービス）\n\n* ネットワークアクセスとセキュリティ設定\n\n* 認証メカニズム（SSH鍵、アクセストークン）\n\n* リソースの割り当てとスケーリングの考慮\n\n\nこれで戦略が定まり、基盤となる決定が完了したので、これらの計画を実際に動作するパイプラインに落とし込んでいきます。それでは、実際に機能する例を作ることで概念を深掘りしていきましょう。まずはシンプルなアプリケーションから始め、徐々にデプロイの機能を追加していきます。\n\n\n## CDパイプラインの実装\n\n\n### 具体的な手順\n\n\nWebアプリケーション向けの基本的な継続的デプロイ（CD）パイプラインの実装手順を順を追って説明します。例としてシンプルなHTMLアプリケーションを使用しますが、ここで紹介する原則はどのタイプのアプリケーションにも応用できます。今回は、アプリケーションをDockerイメージとしてパッケージ化し、シンプルな仮想マシン上にデプロイします。これにより、最小限の依存関係を持つ厳選されたイメージを活用し、環境依存の要件が意図せず混入するのを防ぐことができます。また、仮想マシン上で動作させることで、GitLabのネイティブなインテグレーション機能を活用しない設定となります。複雑で本格的な環境ではなく、理解しやすい簡易的な環境から始めてみましょう。\n\n\n#### 前提条件\n\n\nこの例では、クラウドプロバイダーの仮想マシン上で実行するアプリケーションをコンテナ化することを目指します。また、ローカル環境でもこのアプリケーションをテストします。以下の前提条件は、このシナリオにおいてのみ必要なものです。\n\n\n##### [仮想マシン（VM）](https://about.gitlab.com/ja-jp/blog/what-is-vm/)のセットアップ\n\n\n* お好みのクラウドプロバイダーで[VM](https://about.gitlab.com/ja-jp/blog/what-is-vm/)をプロビジョニングします（例：GCP、AWS、Azure）\n\n* ネットワークルールを設定し、ポート22、80、443へのアクセスを許可します\n\n* デプロイ用にマシンのパブリックIPアドレスを記録します\n\n\n##### SSH認証のセットアップ：\n\n\n* マシン用の公開鍵と秘密鍵のペアを生成します\n\n* GitLabで**設定 > CI/CD > 変数**を開きます\n\n* `GITLAB_KEY`という変数を作成します\n\n* タイプを「ファイル」に設定します（SSH認証に必須）\n\n* 秘密鍵を「値」フィールドに貼り付けます\n\n* 「ユーザー」変数を定義します（VMにログインしてスクリプトを実行するユーザー）\n\n\n##### デプロイ変数の設定\n\n\n* デプロイターゲット用の変数を作成します\n\n  * `STAGING_TARGET`：ステージング環境のサーバーIPまたはドメイン\n  * `PRODUCTION_TARGET`：本番環境のサーバーIPまたはドメイン\n\n##### ローカル開発環境のセットアップ\n\n\n* デプロイのテスト用に、ローカルマシンにDockerをインストールします\n\n\n##### GitLabコンテナレジストリへのアクセス\n\n\n* レジストリパスを確認します：\n\n  * **デプロイ > コンテナレジストリ**を開きます\n  * レジストリパスをコピーします（例：registry.gitlab.com/group/project）\n* 認証の設定：\n\n  * **設定 > アクセストークン**を開きます\n  * レジストリアクセス権を持つ新しいトークンを作成します\n  * トークンの有効期限を最大1年に設定します\n  * トークンを安全に保存します\n* ローカルレジストリのアクセス設定：\n\n\n```\n\ndocker login registry.gitlab.com\n\n\n# パーソナルアクセストークンを使用する場合のユーザー名はgitlab-ci-tokenです\n\n\n# Password:（ここにアクセストークンを入力）\n\n```\n\n\n#### 1. アプリケーションを作成する\n\n\n基本的なWebアプリケーションから始めましょう。今回の例では、シンプルなHTMLページを使用します。\n\n\n```\n\n\u003C!|||UNTRANSLATED_CONTENT_START|||-- index.html -->\n\n\n\u003Chtml>\n  \u003Chead>\n    \u003Cstyle>\n      body {\n        background-color: #171321; /* GitLab dark */\n      }\n    \u003C/style>\n  \u003C/head>\n  \u003Cbody>\n    \u003C!|||UNTRANSLATED_CONTENT_END|||-- ここにコンテンツを追加 -->\n  \u003C/body>\n\u003C/html>\n\n```\n\n\n#### 2. アプリケーションをコンテナ化する\n\n\nアプリケーションをパッケージ化するために、Dockerfileを作成します：\n\n\n```\n\nFROM nginx:1.26.2\n\n\nCOPY index.html /usr/share/nginx/html/index.html\n\n```\n\n\nこのDockerfileは\n\n\n* nginxをベースイメージとして使用し、Webコンテンツを配信できるようにします\n\n* 作成したindex.htmlをnginxのディレクトリ構造内の適切な場所にコピーします\n\n\n#### 3. CI/CDパイプラインを設定する\n\n\nGitLabのパイプラインステージを定義するために、`.gitlab-ci.yml`ファイル を作成します：\n\n\n```\n\nvariables:\n  TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest\n  TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHA\n\nstages:\n  - publish\n  - deploy\n```\n\n\n解説：\n\n\n`TAG_LATEST`は、次の3つの要素で構成されています：\n\n\n* `$CI_REGISTRY_IMAGE`：GitLabのプロジェクトのコンテナレジストリのパス\n\n\n例：`registry.gitlab.com/your-group/your-project`\n\n\n* `$CI_COMMIT_REF_NAME`：ブランチ名またはタグ名\n\n\n例：ブランチの場合は`/main`、フィーチャーブランチの場合は`/feature-login`\n\n\n* `:latest`：固定のサフィックス\n\n\nこれにより、mainブランチの`TAG_LATEST`は次のようになります：`registry.gitlab.com/your-group/your-project/main:latest`\n\n\n`TAG_COMMIT`は`TAG_LATEST`とほぼ同じですが、`:latest`の代わりにコミット識別子の`$CI_COMMIT_SHA`を使います。例：`:abc123def456`\n\n\nしたがって、同じmainブランチでの`TAG_COMMIT`は次のようになります：`registry.gitlab.com/your-group/your-project/main:abc123def456`\n\n\n両方のタグを使用する理由は、`TAG_LATEST`が常に最新バージョンを取得しやすくするのに対し、`TAG_COMMIT`は必要に応じて特定のバージョンに戻れるようにするためです。\n\n\n#### 4. コンテナレジストリに公開する\n\n\nパイプラインに公開ジョブを追加します：\n\n\n```\n\npublish:\n  stage: publish\n  image: docker:latest\n  services:\n    - docker:dind\n  script:\n    - docker build -t $TAG_LATEST -t $TAG_COMMIT .\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - docker push $TAG_LATEST\n    - docker push $TAG_COMMIT\n```\n\n\nこのジョブは\n\n\n* Docker-in-Dockerを使用してイメージをビルドします\n\n* 2つのタグを付けたイメージを作成します\n\n* GitLabレジストリへの認証を行います\n\n* 両方のイメージをレジストリにプッシュします \n\n\nこれで、コンテナイメージが安全にレジストリに保存されました。次は、ターゲット環境へのデプロイを進めていきます。本番環境へ移行する前に、まずローカル環境でテストを行い、設定が正しく機能していることを確認しましょう。 \n\n\n#### 5. 環境へデプロイする\n\n\n本番環境にデプロイする前に、ローカル環境でテストできます。先ほどGitLabレジストリにイメージを公開したので、それをローカル環境でプルしてテストします。コンテナイメージのパスが分からない場合は、GitLabの\\*\\*デプロイ\n\n\n> コンテナレジストリ\\*\\*に移動し、該当のコンテナイメージの行末にあるアイコンをクリックすると、パスをコピーできます。\n\n\n```\n\ndocker login registry.gitlab.com \n\n\ndocker run -p 80:80 registry.gitlab.com/your-project-path/main:latest\n\n```\n\n\nこれにより、Webブラウザからlocalhostにアクセスし、ローカル環境でアプリケーションを確認できるようになります。\n\n\nそれでは、パイプラインにデプロイジョブを追加しましょう：\n\n\n```\n\ndeploy:\n  stage: deploy\n  image: alpine:latest\n  script:\n    - chmod 400 $GITLAB_KEY\n    - apk add openssh-client\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - ssh -i $GITLAB_KEY -o StrictHostKeyChecking=no $USER@$TARGET_SERVER \n      docker pull $TAG_COMMIT &&\n      docker rm -f myapp || true &&\n      docker run -d -p 80:80 --name myapp $TAG_COMMIT\n```\n\n\nこのジョブは\n\n\n* デプロイ先のサーバーへのSSHアクセスを確立します\n\n* 最新のコンテナイメージをプルします\n\n* 既存のコンテナを削除します\n\n* 新しいバージョンのコンテナをデプロイします\n\n\n#### 6. デプロイを追跡する\n\n\n環境設定を追加してデプロイの追跡を有効にします：\n\n\n```\n\ndeploy:\n  environment:\n    name: production\n    url: https://your-application-url.com \n```\n\n\nこれにより、GitLabの**オペレーション > 環境**セクションに環境オブジェクトが作成され、以下の情報が提供されます：\n\n\n* デプロイ履歴\n\n* 現在のデプロイ状況\n\n* アプリケーションへのクイックアクセス\n\n\n単一の環境向けのパイプラインは、最初のステップとしては有効ですが、ほとんどのチームでは適切なテストやステージングを行うために複数の環境を管理する必要があります。このより実践的なシナリオに対応するために、パイプラインを拡張していきましょう。\n\n\n#### 7. 複数環境をセットアップする\n\n\nより堅牢なパイプラインを構築するために、ステージング環境と本番環境のデプロイを設定します：\n\n\n```\n\nstages:\n  - publish\n  - staging\n  - release\n  - version\n  - production\n\nstaging:\n  stage: staging\n  rules:\n    - if: $CI_COMMIT_BRANCH == \"main\" && $CI_COMMIT_TAG == null\n  environment:\n    name: staging\n    url: https://staging.your-app.com\n  # デプロイスクリプトを記述\n\nproduction:\n  stage: production\n  rules:\n    - if: $CI_COMMIT_TAG\n  environment:\n    name: production\n    url: https://your-app.com\n  # デプロイスクリプトを記述\n```\n\n\nこの設定は\n\n\n* mainブランチからステージ環境へデプロイします\n\n* GitLabのタグを利用して本番環境へのデプロイをトリガーします\n\n* 環境ごとに分けてデプロイの状況を管理できるようにします\n\n\nこのステップと次のステップでは、GitLabの非常に便利な機能であるタグを活用しています。GitLabの**コード >\n\nタグ**セクションで手動でタグを作成すると、'$ CI_COMMMIT_TAG\n\n`変数が設定され、本番環境へのデプロイジョブが適切にトリガーされるようになります。\n\n\n#### 8. 自動リリースノートを作成する\n\n\nCI/CDパイプラインを通じてGitLabのリリース機能を使用します。まず、`.gitlab-ci.yml`のstagesを更新 します：\n\n\n```\n\nstages:\n\n\n\n- publish\n\n\n- staging\n\n\n- release # New stage for releases\n\n\n- version\n\n\n- production\n\n```\n\n\n次に、リリースジョブを追加します：\n\n\n```\n\nrelease_job:\n  stage: release\n  image: registry.gitlab.com/gitlab-org/release-cli:latest\n  rules:\n    - if: $CI_COMMIT_TAG                  # タグが作成された場合のみ実行する\n  script:\n    - echo \"Creating release for $CI_COMMIT_TAG\"\n  release:                                # リリース設定\n    name: 'Release $CI_COMMIT_TAG'\n    description: 'Release created from $CI_COMMIT_TAG'\n    tag_name: '$CI_COMMIT_TAG'           # タグを作成する\n    ref: '$CI_COMMIT_TAG'                # リリースのベースとなるタグ\n```\n\n\nコンテナイメージのリンクを追加することで、さらに内容を充実させることができます：\n\n\n```\n\nrelease:\n  name: 'Release $CI_COMMIT_TAG'\n  description: 'Release created from $CI_COMMIT_TAG'\n  tag_name: '$CI_COMMIT_TAG'\n  ref: '$CI_COMMIT_TAG'\n  assets:\n    links:\n      - name: 'Container Image'\n        url: '$CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG'\n        link_type: 'image'\n```\n\n\nコミットメッセージに基づいて自動リリースノートを生成する場合は次のようにします：\n\n\n```\n\nrelease:\n  name: 'Release $CI_COMMIT_TAG'\n  description: 'Release notes for version $CI_COMMIT_TAG'\n  tag_name: '$CI_COMMIT_TAG'\n  ref: '$CI_COMMIT_TAG'\n  auto_generate_release_notes: true    # Enables automatic notes\n```\n\n\n自動リリースノートを充実させるには\n\n\n* 規則的なコミットメッセージを使用する（例：feat:, fix:）\n\n* イシュー番号を含める（例：#123）\n\n* 件名と本文の間に空行を入れる\n\n\nデプロイ時の情報をリリースノートに記載したい場合は、以下のように設定できます：\n\n\n```\n\nrelease_job:\n  script:\n    - |\n      DEPLOY_TIME=$(date '+%Y-%m-%d %H:%M:%S')\n      CHANGES=$(git log $(git describe --tags --abbrev=0 @^)..@ --pretty=format:\"- %s\")\n      cat > release_notes.md \u003C\u003C EOF\n      ## デプロイ情報\n      - デプロイ日時: $DEPLOY_TIME\n      - 環境: 本番環境\n      - バージョン: $CI_COMMIT_TAG\n\n      ## 変更内容\n      $CHANGES\n\n      ## アーティファクト\n      - コンテナイメージ: \\`$CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG\\`\n      EOF\n  release:\n    description: './release_notes.md'\n```\n\n\nこの設定を行うと、Gitタグの作成時に自動でリリースが作成されるようになります。作成されたリリースは、GitLabの**デプロイ >\n\nリリース**で確認できます。\n\n\n#### 9. すべてをまとめる\n\n\n最終的なYAMLファイルは以下のようになります：\n\n\n```\n\nvariables:\n  TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest\n  TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHA\n  STAGING_TARGET: $STAGING_TARGET    # CI/CD変数で設定\n  PRODUCTION_TARGET: $PRODUCTION_TARGET  # CI/CD変数で設定\n\nstages:\n  - publish\n  - staging\n  - release\n  - version\n  - production\n\n# ビルドとレジストリへの公開\n\n\npublish:\n  stage: publish\n  image: docker:latest\n  services:\n    - docker:dind\n  rules:\n    - if: $CI_COMMIT_BRANCH == \"main\" && $CI_COMMIT_TAG == null\n  script:\n    - docker build -t $TAG_LATEST -t $TAG_COMMIT .\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - docker push $TAG_LATEST\n    - docker push $TAG_COMMIT\n\n# stagingへデプロイ\n\n\nstaging:\n  stage: staging\n  image: alpine:latest\n  rules:\n    - if: $CI_COMMIT_BRANCH == \"main\" && $CI_COMMIT_TAG == null\n  script:\n    - chmod 400 $GITLAB_KEY\n    - apk add openssh-client\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - ssh -i $GITLAB_KEY -o StrictHostKeyChecking=no $USER@$STAGING_TARGET \"\n        docker pull $TAG_COMMIT &&\n        docker rm -f myapp || true &&\n        docker run -d -p 80:80 --name myapp $TAG_COMMIT\"\n  environment:\n    name: staging\n    url: http://$STAGING_TARGET\n\n# リリースの作成\n\n\nrelease_job:\n  stage: release\n  image: registry.gitlab.com/gitlab-org/release-cli:latest\n  rules:\n    - if: $CI_COMMIT_TAG\n  script:\n    - |\n      DEPLOY_TIME=$(date '+%Y-%m-%d %H:%M:%S')\n      CHANGES=$(git log $(git describe --tags --abbrev=0 @^)..@ --pretty=format:\"- %s\")\n      cat > release_notes.md \u003C\u003C EOF\n      ## デプロイ情報\n      - デプロイ日時：$DEPLOY_TIME\n      - 環境：本番環境\n      - バージョン：$CI_COMMIT_TAG\n\n      ## 変更内容\n      $CHANGES\n\n      ## アーティファクト\n      - コンテナイメージ：\\`$CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG\\`\n      EOF\n  release:\n    name: 'Release $CI_COMMIT_TAG'\n    description: './release_notes.md'\n    tag_name: '$CI_COMMIT_TAG'\n    ref: '$CI_COMMIT_TAG'\n    assets:\n      links:\n        - name: 'コンテナイメージ'\n          url: '$CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG'\n          link_type: 'image'\n\n# リリースタグ付きのバージョンを作成\n\n\nversion_job:\n  stage: version\n  image: docker:latest\n  services:\n    - docker:dind\n  rules:\n    - if: $CI_COMMIT_TAG\n  script:\n    - docker pull $TAG_COMMIT\n    - docker tag $TAG_COMMIT $CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - docker push $CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG\n\n# 本番環境へデプロイ\n\n\nproduction:\n  stage: production\n  image: alpine:latest\n  rules:\n    - if: $CI_COMMIT_TAG\n  script:\n    - chmod 400 $GITLAB_KEY\n    - apk add openssh-client\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - ssh -i $GITLAB_KEY -o StrictHostKeyChecking=no $USER@$PRODUCTION_TARGET \"\n        docker pull $CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG &&\n        docker rm -f myapp || true &&\n        docker run -d -p 80:80 --name myapp $CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG\"\n  environment:\n    name: production\n    url: http://$PRODUCTION_TARGET\n```\n\n\n完成したパイプラインは\n\n\n* mainブランチでの変更をレジストリに公開します\n\n* mainブランチでの変更をstagingへデプロイします\n\n* タグが作成された際にリリースを作成します\n\n* リリースタグを付けたイメージを作成します\n\n* タグを基に本番環境へデプロイします\n\n\n主なメリット：\n\n\n* クリーンで再現性のあるローカル開発およびテスト環境が完成します\n\n* 構造化された本番環境へのデプロイフローにより、信頼性の高いデプロイを実現できます\n\n* 予期しない障害からの復旧パターンを確立します\n\n* より複雑なデプロイ戦略への拡張/導入に対応できます\n\n*\n\n\n### ベストプラクティス\n\n\n実装の際は、以下の原則を守りましょう：\n\n\n* 変数の使用方法からデプロイ手順まで、すべてを文書化する\n\n* GitLabのビルトイン機能（環境管理、リリース、レジストリ）を活用する\n\n* 適切なアクセス制御とセキュリティ対策を実施する\n\n* 強固なロールバック手順を計画し、障害に備える\n\n* パイプラインの設定はDRY（Don't Repeat Yourself：重複を避ける）を意識する\n\n\n## デプロイ戦略をスケールさせる\n\n\n次は何をすべきでしょうか？ここでは、継続的デプロイ戦略をさらに成熟させるために、検討すべきポイントを紹介します。\n\n\n### 高度なセキュリティ対策\n\n\n以下の方法でセキュリティを強化しましょう：\n\n\n* アクセスを制限した保護環境を設定する\n\n* 本番環境へのデプロイに承認を必須とする\n\n* セキュリティスキャンをパイプラインに統合する\n\n* 自動脆弱性評価を導入する\n\n* デプロイ関連の変更に対するブランチ保護ルールを適用する\n\n\n### 段階的なデリバリー戦略\n\n\n以下のような高度なデプロイ戦略を実装しましょう。\n\n\n* 機能フラグを活用して制御されたロールアウトを行う\n\n* リスクを軽減するためにカナリアデプロイを実施する\n\n* ブルーグリーンデプロイ戦略を導入する\n\n* A/Bテストを実施する\n\n* 動的環境管理を行う\n\n\n### モニタリングと最適化\n\n\n強固なモニタリング体制を確立しましょう：\n\n\n* デプロイ指標を追跡する\n\n* パフォーマンスモニタリングをセットアップする\n\n* デプロイアラートを設定する\n\n* デプロイのサービスレベル目標（SLO）を確立する\n\n* 定期的にパイプラインを最適化する\n\n\n## GitLabが選ばれる理由\n\n\nGitLabの継続的デプロイ機能は、現代のデプロイワークフローに最適です。GitLabは、コンテナレジストリ、環境管理、デプロイ追跡などの機能が1つのインターフェースに集約されており、コードから本番環境へのプロセスを効率化します。また、環境ごとの変数、デプロイ承認ゲート、ロールバック機能を備えており、本番環境へのデプロイ時に求められるセキュリティと管理を実現します。さらに、Review\n\nApps（レビューアプリ）や機能フラグを活用することで、段階的なデリバリー（プログレッシブデリバリー）戦略も可能です。GitLabのDevSecOpsプラットフォームの一部として、これらのCD機能はソフトウェアライフサイクル全体とシームレスに連携します。\n\n\n## 無料トライアルで今すぐスタート！\n\n\n継続的デプロイへの道のりは、革命ではなく進化のプロセスです。まずは基本を押さえ、しっかりとした基盤を築き、チームの成長に応じて徐々に高度な機能を取り入れていきましょう。GitLabは、最初の自動デプロイから、複数環境にまたがる複雑なデリバリーパイプラインまで、あらゆる段階でサポートするためのツールと柔軟性を提供します。 \n\n\n> [GitLab\n\n> Ultimateの無料トライアル](https://about.gitlab.com/ja-jp/free-trial/devsecops/)で、今日から継続的デプロイメントを始めましょう。\n\n\n\u003Cbr>\u003Cbr>\n\n\n\\*監修：川瀬 洋平 [@ykawase](https://gitlab.com/ykawase)\u003Cbr>\n\n\n（GitLab合同会社 カスタマーサクセス本部 シニアカスタマーサクセスマネージャー）*\n",[839,840],"Benjamin Skierlak","James Wormwell","2025-06-11","2025-01-28",[818,9,752,681,680],{"slug":845,"featured":6,"template":685},"from-code-to-production-a-guide-to-continuous-deployment-with-gitlab","content:ja-jp:blog:from-code-to-production-a-guide-to-continuous-deployment-with-gitlab.yml","From Code To Production A Guide To Continuous Deployment With Gitlab","ja-jp/blog/from-code-to-production-a-guide-to-continuous-deployment-with-gitlab.yml","ja-jp/blog/from-code-to-production-a-guide-to-continuous-deployment-with-gitlab",{"_path":851,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":852,"content":857,"config":862,"_id":864,"_type":14,"title":865,"_source":16,"_file":866,"_stem":867,"_extension":19},"/ja-jp/blog/getting-started-with-gitlab-understanding-ci-cd",{"ogTitle":853,"schema":854,"ogImage":667,"ogDescription":855,"ogSiteName":669,"noIndex":6,"ogType":670,"ogUrl":856,"title":853,"canonicalUrls":856,"description":855},"GitLab入門：CI/CDについて理解する","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab入門：CI/CDについて理解する\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2025-04-25\",\n      }","この初心者向けガイドでは、継続的インテグレーション（CI）／継続的デリバリー（CD）の基本（CI/CDコンポーネントの概要や作成方法など）を解説します。","https://about.gitlab.com/blog/getting-started-with-gitlab-understanding-ci-cd",{"heroImage":667,"body":858,"authors":859,"updatedDate":676,"date":860,"title":853,"tags":861,"description":855,"category":681},"すべてのコード変更が自動的にビルドおよびテストされ、そのうえでユーザーにデプロイされる。そんなワークフローを想像してみてください。それを可能にするのが、[継続的インテグレーション／継続的デリバリー（CI/CD）](https://about.gitlab.com/ja-jp/topics/ci-cd/)です。CI/CDは、バグの早期発見、コード品質の確保、および迅速かつ頻繁なソフトウェアデリバリーの実現に役立ちます。\n\n\n### CI/CDとは\n\n\n*\n**継続的インテグレーション（CI）**は、デベロッパーがコード変更を頻繁に（1日に数回が理想とされる）共有リポジトリに統合する開発手法です。各統合は自動化されたビルドとテストのプロセスによって検証されるため、早い段階で問題を検出できます。\n\n*\n**継続的デリバリー（CD）**はCIを拡張した開発手法で、リリースパイプラインを自動化することで、コードを*常に*デプロイ可能な状態に保ちます。アプリケーションをさまざまな環境（stagingステージ、本番環境など）に自動的に、またはワンクリックでデプロイできます。\n\n*\n**継続的デプロイ**はさらにもう一歩踏み込み、本番環境に*成功したビルドをすべて*デプロイする手法です。継続的デプロイは、自動化されたテストとデプロイのプロセスに十分な信頼性がある場合にのみ、有効です。\n\n\n### GitLab CI/CDが選ばれる理由\n\n\nGitLab\nCI/CDは、GitLabに組み込まれた強力な統合システムです。これを利用することで、ソフトウェア開発ライフサイクル全体をシームレスに自動化できます。GitLab\nCI/CDによって、以下のことを実現できます。\n\n\n* **あらゆるプロセスの自動化**：アプリケーションのビルド、テスト、デプロイを簡単に行えます。\n\n* **バグの早期発見**：問題が本番環境に到達する前に検出し、修正できます。\n\n* **フィードバックループの高速化**：コード変更に関するフィードバックを即座に受け取れます。\n\n* **コラボレーションの向上**：自動化されたワークフローによって、より効果的に共同作業を行えます。\n\n* **デリバリーの高速化**：ソフトウェアをより迅速かつ頻繁にリリースできます。\n\n* **リスクの低減**：デプロイ時のエラーやロールバックを最小限に抑えられます。\n\n\n### GitLab CI/CDの構成要素\n\n\n*\n`.gitlab-ci.yml`：プロジェクトのルートディレクトリにある[YAMLファイル](https://docs.gitlab.com/ee/ci/yaml/)です。ステージやジョブ、Runnerなど、CI/CDパイプラインの構成を定義します。\n\n* [**GitLab\nRunner**](https://docs.gitlab.com/runner/)：任意のインフラストラクチャ（物理マシン、仮想マシン、Dockerコンテナ、Kubernetesクラスターなど）上でCI/CDジョブを実行するエージェントです。\n\n*\n[**ステージ**](https://docs.gitlab.com/ee/ci/yaml/#stages)：ジョブ（ビルド、テスト、デプロイなど）の実行順序を定義します。\n\n*\n[**ジョブ**](https://docs.gitlab.com/ee/ci/yaml/#job-keywords)：ステージ内の個々の作業単位（コードのコンパイル、テストの実行、stagingステージへのデプロイなど）を指します。\n\n\n### GitLab CIの設定\n\n\nGitLab CIは簡単に使い始められます。以下は`.gitlab-ci.yml`ファイルの基本的な設定例です。\n\n\n```yaml\n\n\nstages:\n  - build\n  - test\n  - deploy\n\nbuild_job:\n  stage: build\n  script:\n    - echo \"アプリケーションをビルド中...\"\n\ntest_job:\n  stage: test\n  script:\n    - echo \"テストを実行中...\"\n\ndeploy_job:\n  stage: deploy\n  script:\n    - echo \"本番環境へデプロイ中...\"\n  environment:\n    name: production\n\n```\n\n\nこの設定では、「build」「test」「deploy」の3つのステージを定義しています。それぞれのステージには、単純なスクリプトを実行するジョブが含まれています。\n\n\n### CI/CDの設定例\n\n\n次に、より実践的な例をいくつか見てみましょう。\n\n\n**Node.jsアプリケーションのビルドとデプロイ**\n\n\n以下のパイプライン定義では、npmを使用してNode.jsアプリケーションのビルドおよびテストを行い、[dpl](https://docs.gitlab.com/ci/examples/deployment/)を用いてアプリケーションをHerokuにデプロイする方法を説明しています。パイプラインのdeployステージでは、[GitLab\nCI/CD変数](https://docs.gitlab.com/ci/variables/)を使用しています。デベロッパーは機密情報（認証情報など）をこの変数に格納して、CI/CDプロセスで安全に使用できます。この例では、Herokuにデプロイする際にdplツールが使用するAPIキーが、`$HEROKU_API_KEY`という名前の変数キーに格納されます。\n\n\n```yaml\n\n\nstages:\n  - build\n  - test\n  - deploy\n\nbuild:\n  stage: build\n  image: node:latest\n  script:\n    - npm install\n    - npm run build\n\ntest:\n  stage: test\n  image: node:latest\n  script:\n    - npm run test\n\ndeploy:\n  stage: deploy\n  image: ruby:latest\n  script:\n    - gem install dpl\n    - dpl --provider=heroku --app=$HEROKU_APP_NAME --api-key=$HEROKU_API_KEY\n\n```\n\n\n**異なる環境へのデプロイ（stagingステージや本番環境）**\n\n\nGitLabではさらに、CI/CDを使用した[環境](https://docs.gitlab.com/ci/environments/)という機能もご用意しています。この機能を使用すると、CI/CDから対象のインフラストラクチャへのデプロイを追跡できます。以下の例では、パイプラインにおいてstagingステージと本番環境の環境プロパティを持つステージが追加されます。deploy_stagingステージでは必ず指定したスクリプトが実行される一方、deploy_productionステージでは手動による承認が必要となります。これは誤って本番環境へのデプロイが行われるのを防ぐためです。\n\n\n```yaml\n\n\nstages:\n  - build\n  - test\n  - deploy_staging\n  - deploy_production\n\nbuild:\n  # ...\n\ntest:\n  # ...\n\ndeploy_staging:\n  stage: deploy_staging\n  script:\n    - echo \"stagingステージへのデプロイ中...\"\n  environment:\n    name: staging\n\ndeploy_production:\n  stage: deploy_production\n  script:\n    - echo \"本番環境へのデプロイ中...\"\n  environment:\n    name: production\n  when: manual  # 手動による承認が必要\n\n```\n\n\n### GitLab Auto DevOps\n\n\n[GitLab Auto\nDevOps](https://docs.gitlab.com/ee/topics/autodevops/)は、アプリケーションを自動的にビルド、テスト、デプロイするためのあらかじめ定義された設定を提供することで、CI/CDを簡素化します。ベストプラクティスと業界標準に基づいてワークフローを効率化する仕組みです。\n\n\nAuto DevOpsを有効にする方法：\n\n\n1. プロジェクトの**設定 > CI/CD > 一般パイプライン**の順にアクセスします。\n\n2. **Auto DevOps**オプションを有効にします。\n\n\nAuto\nDevOpsを有効にすると、プロジェクトの言語とフレームワークが自動的に検出され、必要なビルド、テスト、デプロイのステージが設定されます。そのため、`.gitlab-ci.yml`ファイルを作成する必要すらありません。\n\n\n### CI/CDカタログ\n\n\n[CI/CDカタログ](https://about.gitlab.com/blog/faq-gitlab-ci-cd-catalog/)には、CI/CDワークフローを拡張するために使用可能な、公開済みの[CI/CDコンポーネント](https://docs.gitlab.com/ee/ci/components/)をまとめたプロジェクトが一覧で記載されています。誰でもコンポーネント用のプロジェクトを作成してCI/CDカタログに追加したり、既存プロジェクトへのコントリビュートを通じて公開コンポーネントを改善したりできます。これらのコンポーネントは、GitLab.comの[CI/CDカタログ](https://gitlab.com/explore/catalog)に掲載されています。\n\n\n> [チュートリアル：初めてのGitLab\nCI/CDコンポーネントの設定方法](https://about.gitlab.com/blog/tutorial-how-to-set-up-your-first-gitlab-ci-cd-component/)\n\n\n### CIテンプレート\n\n\nさらに、独自の[CIテンプレート](https://docs.gitlab.com/ee/ci/examples/)を作成して、複数のプロジェクトに対するCI/CDの設定を標準化し、再利用することもできます。これにより、一貫性が高まり、重複が生じにくくなります。\n\n\nCIテンプレートの作成方法：\n\n\n1. 専用のプロジェクトまたはリポジトリに`.gitlab-ci.yml`ファイルを作成します。\n\n2. テンプレートでCI/CD設定を定義します。\n\n3. プロジェクトの`.gitlab-ci.yml`ファイルで、`include`キーワードを使用してテンプレートをインクルードします。\n\n\n## 開発ワークフローをレベルアップ\n\n\nGitLab CI/CDは、開発ワークフローに変革をもたらせる強力なツールです。CI/CDの概念を理解して、パイプラインを設定し、Auto\nDevOpsやCI/CDカタログ、CIテンプレートなどの機能を活用すれば、ソフトウェア開発ライフサイクル全体を自動化し、高品質なソフトウェアをより迅速かつ効率的に提供できます。\n\n\n> さらに詳しく知りたい場合は、[GitLab\nUniversityのコースに登録](https://university.gitlab.com/)するか、[GitLab\nUltimateの無料トライアル](https://about.gitlab.com/ja-jp/free-trial/)を今すぐお試しください。\n\n\n## 「GitLab入門」シリーズ\n\n\n「GitLab入門」シリーズのその他の記事もぜひご覧ください。\n\n\n## 関連リンク\n\n* [GitLab入門：ユーザーの管理方法](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-mastering-project-management/)\n* [GitLab入門：プロジェクトをGitLabにインポートする方法](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-how-to-import-your-projects-to-gitlab/)\n* [GitLab入門：プロジェクト管理をマスターする](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-mastering-project-management/)\n* [gitlab-triage gemを使ったアジャイルワークフローの自動化](https://about.gitlab.com/ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem/)\n* [GitLab入門：CI/CDについて理解する](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-understanding-ci-cd/)\n* [GitLab入門：CI/CD変数を使用する](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-working-with-ci-cd-variables/)\n\n\n",[675],"2025-04-25",[9,820,818,679,681,680],{"slug":863,"featured":91,"template":685},"getting-started-with-gitlab-understanding-ci-cd","content:ja-jp:blog:getting-started-with-gitlab-understanding-ci-cd.yml","Getting Started With Gitlab Understanding Ci Cd","ja-jp/blog/getting-started-with-gitlab-understanding-ci-cd.yml","ja-jp/blog/getting-started-with-gitlab-understanding-ci-cd",{"_path":869,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":870,"content":875,"config":881,"_id":883,"_type":14,"title":884,"_source":16,"_file":885,"_stem":886,"_extension":19},"/ja-jp/blog/getting-started-with-gitlab-working-with-ci-cd-variables",{"ogTitle":871,"schema":872,"ogImage":667,"ogDescription":873,"ogSiteName":669,"noIndex":6,"ogType":670,"ogUrl":874,"title":871,"canonicalUrls":874,"description":873},"GitLab入門：CI/CD変数を使用する","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab入門：CI/CD変数を使用する\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab Team\"}],\n        \"datePublished\": \"2025-05-27\",\n      }","CI/CD変数の概要、DevSecOpsにおいてCI/CD変数が重要な理由、活用するためのベストプラクティスについてご紹介します。","https://about.gitlab.com/blog/getting-started-with-gitlab-working-with-ci-cd-variables",{"heroImage":667,"body":876,"authors":877,"updatedDate":676,"date":879,"title":871,"tags":880,"description":873,"category":681},"*「GitLab入門」シリーズへようこそ。このシリーズでは新たにGitLabを使い始める方向けに、GitLab\n\nDevSecOpsプラットフォームに慣れ親しむために役立つ内容をお届けします。*\n\n\n\n以前の記事で、[GitLab\n\nCI/CD](https://about.gitlab.com/blog/getting-started-with-gitlab-understanding-ci-cd/)について取り上げました。今回は**CI/CD変数**の世界をさらに深く掘り下げ、その力を最大限に引き出す方法について説明します。\n\n\n\n### CI/CD変数とは\n\n\n\nCI/CD変数とは、GitLab環境内においてさまざまなレベル（プロジェクト、グループ、インスタンスなど）で定義できる動的なキーと値のペアのことです。`.gitlab-ci.yml`ファイルで使用できる値のプレースホルダーとして機能するため、パイプラインをカスタマイズしたり、機密情報を安全に保存したりできるほか、CI/CD設定を管理しやすくなります。\n\n\n\n### CI/CD変数が重要な理由\n\n\n\nCI/CD変数の使用には、以下のような多くのメリットがあります。\n\n\n\n* **柔軟性** -\n\n主要なCI/CDスクリプトに手を加えることなく、さまざまな環境、設定、またはデプロイ対象にパイプラインを簡単に適応させられます。  \n * **セキュリティ** - API キー、パスワード、トークンのような機密情報を安全に保存して、コード内で直接公開されることのないようにします。  \n* **保守性** - 変数の値を一元化することで、CI/CDの設定がきれいに整理された状態に保たれるため、更新や修正作業を簡単に行えます。  \n\n\n* **再利用性** - 一度定義した変数は複数のプロジェクトで再利用できるため、重複が減り、一貫性を保ちやすくなります。\n\n\n\n### CI/CD変数のスコープ：プロジェクト、グループ、インスタンス\n\n\n\nGitLabでは、次のようなさまざまなスコープでCI/CD変数を定義し、その可視性と有効範囲を制御できます。\n\n\n\n* **プロジェクトレベルの変数** - 単一のプロジェクト専用の変数で、次のようなプロジェクト固有の設定を保存するのに適しています。\n  * デプロイURL：ステージング環境や本番環境向けのURLをそれぞれ定義します。  \n  * データベース認証情報：テストやデプロイ用のデータベース接続情報を保存します。  \n  * 機能フラグ：パイプラインのさまざまな段階で機能を有効または無効にします。  \n  * 例：\"MyWebApp\"というプロジェクトがあり、本番環境へのデプロイURLを保存したいとします。その場合、プロジェクトレベルで`DPROD_DEPLOY_URL`という名前の変数を作成し、`https://mywebapp.com`という値を格納します。  \n* **グループレベルの変数** -\n\nグループレベルの変数を作成すると、GitLabグループ内の全プロジェクトで共有されます。次のような複数のプロジェクトに共通する設定がある場合に便利です。\n\n  * 共有サービスのAPIキー：グループ内の複数のプロジェクトで使用されるサービス（AWS、Google Cloud、Docker Hubなど）のAPIキーを保存します。  \n  * グローバル構成設定：グループ内の全プロジェクトに適用される共通の設定パラメータを定義します。  \n  * 例：「Web Apps」というグループがあり、Docker Hub用にAPIキーを保存したいとします。その場合は、グループレベルで`DOCKER_HUB_API_KEY`という名前の変数を作成し、対応するAPIキーの値を格納します。  \n* **インスタンスレベルの変数** -\n\nGitLabインスタンスの全プロジェクトで利用可能な変数です。通常は、次のような組織全体に適用するグローバル設定がある場合に使用します。\n\n  * デフォルトのRunner登録トークン：新規[Runner](https://docs.gitlab.com/runner/)の登録時にデフォルトのトークンを提供します。  \n  * ライセンス情報：GitLabの機能やサードパーティツールのライセンスキー情報を保存します。  \n  * グローバル環境設定：全プロジェクトで利用可能な環境変数を定義します。  \n  * 例：GitLabインスタンス上の全プロジェクトにおいて、デフォルトのDockerイメージを設定したいとします。その場合、インスタンスレベルで`DEFAULT_DOCKER_IMAGE`という名前の変数を作成し、`ubuntu:latest`という値を格納します。\n\n### CI/CD変数を定義する\n\n\n\nCI/CD変数は以下の手順で定義できます。\n\n\n\n1. プロジェクト、グループ、またはインスタンスで、**設定 > CI/CD**ボタンの順にクリックします。  \n\n\n2. **変数**セクションに移動します。  \n\n\n3. **変数を追加**をクリックします。  \n\n\n4. **キー**（例：`API_KEY`）と**値**を入力します。  \n\n\n5.\n\n機密情報を扱う場合は、必要に応じて**変数を保護**ボックスをオンにします。オンにすると、保護ブランチまたは保護タグで実行されているパイプラインでのみ、変数が利用可能になります。  \n\n\n6. 必要に応じて、**変数をマスク**ボタンをオンにすると、ジョブログで変数の値が非表示になります。これにより、誤って公開されるのを防げます。  \n\n\n7. **変数を保存**をクリックします。\n\n\n\n### CI/CD変数を使用する\n\n\n\n`.gitlab-ci.yml`ファイルでCI/CD変数を使用する方法は簡単です。変数名の前にプレフィックスとして`$`を付けるだけです。\n\n\n\n```yaml\n\n\ndeploy_job:\n  script:\n    - echo \"Deploying to production...\"\n    - curl -H \"Authorization: Bearer $API_KEY\" https://api.example.com/deploy\n```\n\n\n\n### 定義済みのCI/CD変数\n\n\n\nGitLabでは、パイプラインでご利用いただけるように、[定義済みのCI/CD変数](https://docs.gitlab.com/ci/variables/predefined_variables/)を一式ご用意しています。これらの変数は、現在のパイプラインやジョブ、プロジェクトなどに関する情報を提供します。\n\n\n\nその中でも、使用されることの多い定義済み変数をいくつかご紹介します。\n\n\n\n* `$CI_COMMIT_SHA`：現在のパイプラインのコミットSHA。  \n\n\n* `$CI_PROJECT_DIR`：プロジェクトの複製先のディレクトリ。  \n\n\n* `$CI_PIPELINE_ID`：現在のパイプラインのID。  \n\n\n* `$CI_ENVIRONMENT_NAME`：デプロイ先の環境名（該当する場合）。\n\n\n\n### ベストプラクティス\n\n\n\n* 機密性の高い変数は安全に管理する：APIキーやパスワード、その他の機密情報を扱う場合は、保護およびマスクされた変数を使用しましょう。  \n\n\n* 値のハードコーディングは行わない：設定値を保存する際は変数を使用しましょう。そうすることで、パイプラインの柔軟性と保守性が高まります。  \n\n\n* 変数を整理する：変数をわかりやすい名前を付けて、関連する変数をまとめると、うまく整理できます。  \n\n\n* 適切なスコープを選ぶ：希望する変数の用途と可視性に基づいて、適切なスコープ（プロジェクト、グループ、またはインスタンス）を選びましょう。\n\n\n\n### 変数の力を最大限に活用する\n\n\n\nCI/CD変数は、GitLabパイプラインをカスタマイズし、保護するための強力なツールです。変数を使いこなし、各スコープを理解することで、より柔軟で保守しやすく、効率的なワークフローを作成できます。\n\n\n\n開発プロジェクトにおいて、GitLabの機能を活用していただくために必要な情報をお届けしました。ご紹介した情報がお役に立てば幸いです。\n\n\n\n> [Duo Enterpriseが搭載されたGitLab\n\nUltimateの無料トライアル](https://about.gitlab.com/ja-jp/free-trial/)に今すぐ申し込んで、CI/CD変数を早速ご利用ください。\n\n\n\n## 「GitLab入門」シリーズ\n\n\n「GitLab入門」シリーズのその他の記事もぜひご覧ください。\n\n\n\n* [GitLab入門：ユーザーの管理方法](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-mastering-project-management/)\n\n* [GitLab入門：プロジェクトをGitLabにインポートする方法](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-how-to-import-your-projects-to-gitlab/)\n\n* [GitLab入門：プロジェクト管理をマスターする](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-mastering-project-management/)\n\n* [gitlab-triage gemを使ったアジャイルワークフローの自動化](https://about.gitlab.com/ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem/)\n\n* [GitLab入門：CI/CDについて理解する](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-understanding-ci-cd/)\n\n* [GitLab入門：CI/CD変数を使用する](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-working-with-ci-cd-variables/)\n",[878],"GitLab Team","2025-05-27",[681,680,820,818,9,752],{"slug":882,"featured":91,"template":685},"getting-started-with-gitlab-working-with-ci-cd-variables","content:ja-jp:blog:getting-started-with-gitlab-working-with-ci-cd-variables.yml","Getting Started With Gitlab Working With Ci Cd Variables","ja-jp/blog/getting-started-with-gitlab-working-with-ci-cd-variables.yml","ja-jp/blog/getting-started-with-gitlab-working-with-ci-cd-variables",{"_path":888,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":889,"content":895,"config":902,"_id":904,"_type":14,"title":905,"_source":16,"_file":906,"_stem":907,"_extension":19},"/ja-jp/blog/gitlab-17-11-release",{"title":890,"description":891,"ogTitle":890,"ogDescription":891,"noIndex":6,"ogImage":892,"ogUrl":893,"ogSiteName":669,"ogType":670,"canonicalUrls":893,"schema":894},"GitLab 17.11リリース","GitLab 17.11でリリースした最新機能をご紹介します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662237/Blog/Hero%20Images/product-gl17-blog-release-cover-17-11-0093-1800x945-fy25.png","https://about.gitlab.com/blog/gitlab-17-11-release","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab 17.11リリース\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab Japan Team\"}],\n        \"datePublished\": \"2025-04-17\",\n      }",{"title":890,"description":891,"authors":896,"heroImage":892,"date":897,"body":898,"category":681,"tags":899,"updatedDate":901},[771],"2025-04-17","## カスタムコンプライアンスフレームワークを搭載したGitLab 17.11をリリース\n\nこのたび、GitLab 17.11をリリースしました。このリリースでは、GitLab Duo Self-Hostedに複数のDuo機能が追加されたほか、カスタムコンプライアンスフレームワーク、サービスアカウントUI、CI/CDパイプライン入力など、さまざまな機能が追加されました！\n\nこれらの機能は、今回のリリースに含まれる60件以上の改善点のほんの一部です。この記事では、お役に立つアップデートをすべてご紹介していますので、ぜひ最後までお読みください。\n\nGitLab 17.11には、GitLabコミュニティのユーザーから284件ものコントリビュートがありました。ありがとうございました！GitLabは[誰もがコントリビュートできる](https://about.gitlab.com/community/contribute/)プラットフォームであり、今回のリリースはユーザーのみなさまの協力なしには実現しませんでした。\n\n来月のリリースで予定されている内容を先取りするには、[今後のリリースページ](https://about.gitlab.com/upcoming-releases/)をご覧ください。\n\n[GitLab 17.11では、カスタムコンプライアンスフレームワークが搭載されました。 クリックしてSNSで共有しましょう！](http://twitter.com/share?text=GitLab+17.11%E3%81%A7%E3%81%AF%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%B3%E3%83%B3%E3%83%97%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%82%B9%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%8C%E6%90%AD%E8%BC%89%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82&url=https://about.gitlab.com/ja-jp/blog/gitlab-17-11-release/&hashtags=)\n\n## 今月の[注目コントリビューター](https://contributors.gitlab.com/docs/notable-contributors)は[Heidi Berry](https://gitlab.com/heidi.berry)さんです\n\nGitLab 17.11の注目コントリビューターは、[Heidi Berry](https://gitlab.com/heidi.berry)さんに決まりました！\n\nHeidiさんは、[GitLab Terraformプロバイダー](https://gitlab.com/gitlab-org/terraform-provider-gitlab)や[client-go](https://gitlab.com/gitlab-org/api/client-go)プロジェクトのコントリビューターとして活躍してきました。ここ数回のリリースにわたり、[グループSAMLリンクでカスタムロールを使用する機能](https://gitlab.com/gitlab-org/terraform-provider-gitlab/-/merge_requests/1949)、[グループ単位でのブランチ保護のデフォルト設定](https://gitlab.com/gitlab-org/terraform-provider-gitlab/-/merge_requests/2113)、[サービスアカウントトークンの自動ローテーション](https://gitlab.com/gitlab-org/terraform-provider-gitlab/-/merge_requests/2206)など、要望の多かった機能を継続的に実装してきました。\n\n機能開発にとどまらず、Heidiさんはメンテナンス活動にも積極的に取り組んでおり、[イシューバックログの整理](https://gitlab.com/gitlab-org/terraform-provider-gitlab/-/issues/1035#note_2305643918)、[古いテストの可読性向上](https://gitlab.com/gitlab-org/terraform-provider-gitlab/-/merge_requests/2298)、[よりわかりやすい例を用いたドキュメントの改善](https://gitlab.com/gitlab-org/terraform-provider-gitlab/-/merge_requests/2201)など、多岐にわたる活動を行っています。特にclient-goはTerraformプロバイダーやglabを含む多くのプロジェクトでGitLabとの連携に使われているため、このライブラリへのコントリビュートは非常に価値の高いものです。\n\nHeidiさんはこう語っています。「オープンソースへのコントリビュートに興味のある方には、client-goやterraform-provider-gitlabがおすすめです。スタートにぴったりの優れたドキュメントが用意されていますし、助けてくれるメンテナーもいます。私はこれらのプロジェクトを通して、Go言語を実践的に学ぶことができました。」\n\nHeidiさんは、GitLabコミュニティのコアチームメンバーであり、Kingland社のエンタープライズアーキテクトである、同じくコミュニティコントリビューターの[Patrick Rice](https://gitlab.com/PatrickRice)さんにより推薦されました。Patrickさんは次のように語っています。「17のリリースサイクルを通して100件を超えるマージ済みのコントリビュートと、多くのイシューへのコメントを行ってきたHeidiさんは、GitLabおよびTerraformにとって非常に大きな力となっています。本当にありがとうございます！」\n\nGitLabのDeploy::Environmentsチームのシニアバックエンドエンジニア、[Timo Furrer](https://gitlab.com/timofurrer)も次のように話しています。「Heidiさんの仕事は本当に素晴らしいです。常に一歩先を行き、client-goに必要なSDKコードを実装してくれています。コードのコントリビュートだけでなく、イシューのトリアージにも関わってくれています。これは本当に大きな助けになっていて、こうした支えがあるからこそ、コミュニティ主導のプロジェクトは成り立っていると感じます。」\n\nHeidiさんは、The Co-operative Group社のリードソフトウェアエンジニアとして、デベロッパーエクスペリエンスをより効率的かつ安全に、そして可能な限りスムーズにするために取り組んでいます。\n\nこの場を借りて、GitLabに多大なるコントリビュートをしてくださったHeidiさんに心より感謝します！\n\n\u003Cbr>\n\u003Cbr>\n\u003Cbr>\n\n## GitLab 17.11でリリースされた主な改善点\n\n### 要件やコンプライアンスコントロールでコンプライアンスフレームワークのカスタマイズが可能に\n\nSaaS: Ultimate\nSelf-Managed: Ultimate\n\nこれまで、GitLabのコンプライアンスフレームワークは、特定のコンプライアンス要件や追加の監査が必要なプロジェクトを識別するラベルとして作成されていました。このラベルは、スコープ指定として利用でき、グループ内のすべてのプロジェクトに対してセキュリティポリシーを適用することができました。\n\n今回のリリースでは、コンプライアンスマネージャーがGitLab上でより詳細なコンプライアンスのモニタリングを行えるようにする「要件」を新機能として導入しました。\n\n「要件」は、カスタムコンプライアンスフレームワークの一部として、組織が準拠すべきさまざまなコンプライアンス基準、法律、規制などから、具体的な要件を定義できる機能です。\n\nさらに、コンプライアンスコントロール（従来の「コンプライアンスチェック」）の数を、5種類から50種類以上へと大幅に増やしました！標準搭載された約50種類のコントロールは、定義したコンプライアンス要件に対応付けることができます。\n\nこれらのコントロールは、プロジェクト、セキュリティ、マージリクエストの設定をGitLabインスタンス全体で確認し、SOC2、NIST、ISO 27001、GitLab CISベンチマークといった、さまざまなコンプライアンス基準や法規制への準拠をサポートします。\n\nこうしたコントロールへの準拠状況は、基準遵守レポートに反映されます。このレポートは、要件と、それに対してマッピングされたコントロールの関係を考慮して新たに設計し直されています。\n\nまた、標準搭載のコントロールを増やしただけでなく、GitLabの外部に存在する項目、プログラム、システムなどに対して、要件を外部コントロールとしてマッピングできるようになりました。これにより、GitLabのコンプライアンスセンターを信頼できる唯一の情報源として使用して、より包括的なコンプライアンス管理が可能となります。\n\n[ドキュメント](https://docs.gitlab.com/user/compliance/compliance_center/compliance_status_report/)\n\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/13295)\n\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/13658)\n\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16620)\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/custom_compliance_frameworks.png\">\n\n### GitLab Eclipseプラグインがベータ版として利用可能に\n\nSaaS: Premium、Ultimate、Duo Pro、Duo Enterprise\nSelf-Managed: Premium、Ultimate、Duo Pro、Duo Enterprise\n\nGitLab Eclipseプラグインのベータ版をリリースしました。このプラグインは現在[Eclipse マーケットプレース](https://marketplace.eclipse.org/content/gitlab-eclipse)で入手可能です。この強力な新プラグインにより、GitLabのDuo機能をEclipse IDEに直接統合でき、Duo ChatやAIによるコード提案をスムーズに利用できるようになります。\n\n現在ベータ版のため、認証オプションの拡充やユーザーエクスペリエンスの最終調整など、機能改善を積極的に進めています。皆様のフィードバックは非常に貴重です。ぜひ、[イシュー162](https://gitlab.com/gitlab-org/editor-extensions/gitlab-eclipse-plugin/-/issues/162)にコメントを追加して、GitLab Eclipseプラグインをより良いものにするためのフィードバックをお聞かせください。\n\n[ドキュメント](https://docs.gitlab.com/editor_extensions/eclipse/setup/)\n[エピック](https://gitlab.com/groups/gitlab-org/editor-extensions/-/epics/89)\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/eclipse-beta.png\">\n\n### GitLab Duo Self-Hostedで、さらに多くのGitLab Duo機能が利用可能に\n\nSaaS: -\nSelf-Managed: Ultimate、Duo Enterprise\n\nGitLab Self-Managedインスタンスで、GitLab Duo Self-Hostedを使用してさらに多くの[GitLab Duo](https://about.gitlab.com/gitlab-duo/)機能を利用できるようになりました。以下の機能がベータ版として利用できます。\n\n* [根本原因分析](https://docs.gitlab.com/user/gitlab_duo_chat/examples/#troubleshoot-failed-cicd-jobs-with-root-cause-analysis)\n* [脆弱性の説明](https://docs.gitlab.com/user/application_security/vulnerabilities/#explaining-a-vulnerability)\n* [脆弱性の修正](https://docs.gitlab.com/user/application_security/vulnerabilities/#vulnerability-resolution)\n* [AIインパクトダッシュボード](https://docs.gitlab.com/user/analytics/ai_impact_analytics/)\n* [ディスカッションサマリー](https://docs.gitlab.com/user/discussions/#summarize-issue-discussions-with-duo-chat)\n* [マージリクエストのコミットメッセージ](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/#generate-a-merge-commit-message)\n* [マージリクエストサマリー](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/#generate-a-description-by-summarizing-code-changes)\n* [CLI用GitLab Duo](https://docs.gitlab.com/editor_extensions/gitlab_cli/#gitlab-duo-for-the-cli)\n\n[コードレビューサマリー](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/#summarize-a-code-review)も、実験的にGitLab Duo Self-Hostedで利用可能です。\n\n[ドキュメント](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/#supported-gitlab-duo-features)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17072)\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/ResizedExpandedDuoFeaturesImage.jpg\">\n\n### Self-Managedインスタンス向けWeb IDEで拡張機能マーケットプレイスが利用可能に\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nSelf-Managedユーザー向けのWeb IDEに拡張機能マーケットプレースが登場しました。拡張機能マーケットプレースでは、サードパーティの拡張機能を検索、インストール、管理できるため、快適な開発環境で効率的に作業できるようになります。\n\nデフォルトでは、GitLabインスタンスはOpen VSX拡張機能レジストリを使用するように構成されています。この機能を有効化するには、[デフォルトの拡張機能レジストリを使って有効にする](https://docs.gitlab.com/administration/settings/vscode_extension_marketplace/#enable-with-default-extension-registry)手順を参照してください。\n\nまた、独自のレジストリやカスタムレジストリを使用したい場合は、[カスタム拡張レジストリを接続することも可能です](https://docs.gitlab.com/administration/settings/vscode_extension_marketplace/#customize-extension-registry)。これにより、利用可能な拡張機能の管理にさらなる柔軟性が生まれます。\n\n拡張機能マーケットプレースを有効にした後でも、各ユーザーは個別に利用を有効化する必要があります。有効化は、[環境設定](https://gitlab.com/-/profile/preferences)の「インテグレーション」セクションで行えます。\n\nなお、一部の拡張機能はローカルの実行環境を必要とし、Web専用バージョンでは使用できないものがあります。それでも、数千種類の中から自由に拡張機能を選び、生産性向上やワークフローのカスタマイズに活用できます。\n\n[ドキュメント](https://docs.gitlab.com/administration/settings/vscode_extension_marketplace/)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/11770)\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/extension-marketplace-sm.png\">\n\n### GitLab Duo with Amazon Qの一般提供を開始\n\nSaaS: -\u003Cbr>\nSelf-Managed: Ultimate\n\nGitLab Duo with Amazon Qの一般提供を開始しました。GitLab Duo with Amazon Qは、AIを搭載したGitLabの包括的なDevSecOpsプラットフォームと自律型Amazon Q AIアシスタントを一つの統合ソリューションとして提供する共同サービスです。GitLab Duo with Amazon Qは開発ワークフローに直接AIアシスタントを組み込むことで、デベロッパーが作業環境を行き来する必要がなくなり、結果として主要タスクのスピードアップを実現します。これらのAIアシスタントはGitLab DevSecOpsプラットフォーム内で高度な知能を持つパートナーとして機能し、コード生成、テスト、レビュー、Javaモダナイゼーションなどの時間のかかる作業を自動化します。これにより、チームはセキュリティと品質基準を維持しながら、より革新的な業務に集中できるようになります。\n\nGitLab Duo with Amazon Qは開発チームに次のような大きなメリットをもたらします：\n\n* アイデアからコードまでの機能開発を効率化：`/q dev`コマンドを使えば、イシューの説明文から数分でマージ可能なコードを直接生成できます。\n* 手間なくレガシーコードを最新化：`/q transform`コマンドでJavaコードの最新化プロセス全体を自動化します。\n* 品質を落とさずコードレビューを迅速化：`/q review`コマンドを使用すれば、マージリクエスト内で即座にコード品質とセキュリティに関する的確なフィードバックが得られます。\n* 安心してリリースするためのテスト自動化：`/q test`コマンドで、アプリケーションのロジックを理解した包括的な単体テストを生成します。\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/Duo_Q1.png\">\n\n[ドキュメント](https://docs.gitlab.com/user/duo_amazon_q/)\n\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16879)\n\n### 保護されたコンテナタグによるセキュリティ強化\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nコンテナレジストリは、現代のDevSecOpsチームにとって重要なインフラストラクチャです。これまで、GitLabのデベロッパー権限以上のユーザーであれば、どのコンテナタグにもプッシュおよび削除が可能であり、本番環境で使用される重要なコンテナイメージが誤って変更されたり、不正に変更されたりするリスクがありました。\n今回導入された、保護されたコンテナタグにより、特定のコンテナタグをプッシュまたは削除できるユーザーを細かく制御できるようになりました。具体的には、以下のことが可能です。\n\n* プロジェクトごとに最大5件の保護ルールを作成\n* `latest`、セマンティックバージョン（例：`v1.0.0`）、安定版タグ（例：`main-stable`）のようなタグを、RE2正規表現パターンで保護\n* プッシュ操作と削除操作をメンテナー、オーナー、または管理者に制限\n* クリーンアップポリシーによる保護タグの削除防止\n\nこの機能を利用するには、次世代コンテナレジストリが必要です。このレジストリはGitLab.comではすでにデフォルトで有効になっていますが、GitLab Self-Managedインスタンスで保護されたコンテナタグを使用するには、[メタデータデータベース](https://docs.gitlab.com/administration/packages/container_registry_metadata_database/)を有効にする必要があります。\n\n[ドキュメント](https://docs.gitlab.com/user/packages/container_registry/protected_container_tags/)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/523893)\n\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Xo5n-lZSSRg?si=_JP6dL_s04fwp60V\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen>\u003C/iframe>\n\n### 保護されたMavenパッケージでレジストリを安全に\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\n本リリースでは、Mavenの保護パッケージが新たにサポートされました。この機能は、GitLabパッケージレジストリのセキュリティと安定性を強化することを目的として設計されました。パッケージの誤った変更は、開発プロセス全体に大きな影響を及ぼす可能性があります。保護パッケージ機能を使うことで、意図せぬ変更を防いで重要な依存関係を守ることができます。\n\nGitLab 17.11では、保護ルールを作成してMavenパッケージを保護できるようになりました。保護ルールの条件に合致したパッケージは、許可された特定のユーザーのみが新しいバージョンをプッシュできます。パッケージ保護ルールによって、意図しない上書きの防止、規制要件へのコンプライアンス強化、手動モニタリングの必要性の軽減を実現できます。\n\nこのMavenパッケージの[保護機能](https://gitlab.com/groups/gitlab-org/-/epics/5574)やその他のパッケージフォーマットへの対応は、`gerardo-navarro`さんとSiemens社チームによるコミュニティからのコントリビュートによって実現しました。この場を借りて、GitLabに多大なるコントリビュートをしてくださったGerardoさんをはじめ、Siemens社のみなさまに感謝します！この変更に対するGerardoさんとSiemens社の方々のコントリビュートについて、詳しくはこちらの[動画](https://www.youtube.com/watch?v=5-nQ1_Mi7zg)をご覧ください。Gerardoさんが、外部のコントリビューターとしてGitLabにコントリビュートした経験から得た洞察やベストプラクティスを紹介してくださっています。\n\n[ドキュメント](https://docs.gitlab.com/ee/user/packages/package_registry/package_protection_rules.html)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/323969)\n\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/GeCXDespqeM?si=44JAVztwQr5UQ5bW\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen>\u003C/iframe>\n\n### エピック、イシュー、タスク用のカスタムフィールド\n\nSaaS: Premium、Ultimate\nSelf-Managed: Premium、Ultimate\n\nこのリリースから、イシュー、エピック、タスク、目標、および主な結果に対して、テキスト、数値、単一選択、および複数選択のカスタムフィールドを設定できるようになりました。これまでは、ラベルが作業アイテムを分類する主な方法でしたが、カスタムフィールドを使うことで、よりユーザーフレンドリーな形で、計画アーティファクトに構造化されたメタデータを追加できます。\n\nカスタムフィールドは、トップレベルグループで設定され、すべてのサブグループおよびプロジェクトに反映されます。また、フィールドは1つ以上の作業アイテムタイプにマッピング可能で、カスタムフィールドの値を使ってイシューやエピックの一覧を絞り込むこともできます。\n\n[ドキュメント](https://docs.gitlab.com/user/work_items/custom_fields/)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/14904)\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/work-items-custom-fields.png\">\n\n### 新しいイシュー画面の一般提供を開始\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nこのリリースより、新しいイシュー画面の一般提供が開始され、従来のイシュー画面に取って代わります。イシューはエピックやタスクと共通のフレームワークを使用するようになり、リアルタイムで更新されるとともに、ワークフローが改善されました。\n\n* **ドロワー表示：**\n\n  リストやボードのアイテムをドロワーで開いて、現在の画面から離れることなく素早く内容を閲覧できます。上部のボタンで全ページ表示に切り替わります。\n\n* **タイプの変更：**\n\n  「種類の変更」アクション（従来の「エピックへの昇格」）を使用して、エピック、イシュー、タスク間でタイプを変換できるようになりました。\n\n* **開始日：**\n\n  イシューで開始日がサポートされるようになり、エピックやタスクと機能が統一されました。\n\n* **祖先：**\n\n  タイトルの上とサイドバーの親フィールドに完全な階層が表示されます。関係の管理には、新しいクイックアクションコマンド`/set_parent`、`/remove_parent`、`/add_child`、`/remove_child`を使用できます。\n\n* **操作メニュー：**\n\n  すべてのアクションに上部のメニュー（縦方向の3点ドット）からアクセスできるようになりました。スクロールした場合でも消えずにヘッダーに表示されます。\n\n* **開発：**\n\n  イシューやタスクに関連するすべての開発アイテム（マージリクエスト、ブランチ、機能フラグ）が1つの便利なリストに統合されました。\n\n* **レイアウト：**\n\n  UIが改善され、イシュー、エピック、タスク、マージリクエスト間の移動がスムーズになり、より効率的にワークフローを進められるようになりました。\n\n* **リンクされたアイテム：**\n\n  改善されたリンクオプション機能で、タスク、イシュー、エピック間の関連付けが簡単になりました。ドラッグ＆ドロップでリンクのタイプを変更したり、ラベルや完了したアイテムの表示/非表示を切り替えたりできます。\n\n[ドキュメント](https://docs.gitlab.com/user/project/issues/issue_work_items/)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/525547)\n\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/_jrnkD69KGw?si=nZojuQeVuJwvO5S0\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen>\u003C/iframe>\n\n### サービスアカウントのUI\n\nSaaS: Premium、Ultimate\nSelf-Managed: Premium、Ultimate\n\nGitLabのUI上に、サービスアカウントの作成と管理に特化した専用画面が追加されました。このインターフェースを使用すると、GitLabリソースへの自動アクセスを作成、モニタリング、制御できます。これまでは、この機能はAPI経由でしか利用できませんでした。\n\n[ドキュメント](https://docs.gitlab.com/ee/user/profile/service_accounts.html)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/9965)\n\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/ujX_yzmOMCQ?si=CBpg2LdWLEgWHf-E\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen>\u003C/iframe>\n\n### Duo ProとDuo Enterpriseシートの自動割り当て\n\nSaaS: Premium、Ultimate、Duo Pro、Duo Enterprise\nSelf-Managed: Premium、Ultimate、Duo Pro、Duo Enterprise\n\nSAMLグループ同期を使用して、GitLab Duo ProやGitLab Duo Enterpriseのシートを自動的にユーザーに割り当てられるようになりました。GitLabグループに利用可能なDuo ProまたはDuo Enterpriseのシートが残っている限り、IDプロバイダ（IdP）からマッピングされたユーザーに自動的にシートが割り当てられます。これにより、シートの割り当てを管理する手間を抑えられます。\n\n[ドキュメント](https://docs.gitlab.com/ee/user/group/saml_sso/group_sync.html#gitlab-duo-seat-assignment)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/502496)\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/govern_duo_saml.png\">\n\n### CI/CDパイプライン入力\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nCI/CD変数は動的なCI/CDワークフローには欠かせない要素で、環境変数、コンテキスト変数、ツールの設定、マトリックス変数など、さまざまな用途で使用されています。しかし、デベロッパーはCI/CD変数を使って[パイプライン変数](https://docs.gitlab.com/ci/variables/#use-pipeline-variables)をパイプラインに注入し、パイプラインの動作を手動で変更することがあります。これは、パイプライン変数の優先度が他の変数よりも高いため、予期しない影響を及ぼすリスクがあります。\n\nGitLab 17.11から、パイプライン変数の代わりに`inputs`機能を使って、安全にパイプラインの挙動を変更できるようになりました。この機能は、スケジュールされたパイプライン、ダウンストリームパイプライン、トリガーされたパイプラインなど、さまざまなケースで利用可能です。inputsを使うことで、デベロッパーがCI/CDジョブの実行中に動的な内容（状況に応じて変化する情報）を組み込む作業が、より構造化され柔軟に行えるようになります。inputsに切り替えた後、[パイプライン変数へのアクセスを完全に無効化する](https://docs.gitlab.com/ci/variables/#restrict-pipeline-variables)ことも可能です。\n\nぜひお試しの上、専用の[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/533802)からフィードバックをお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/ci/inputs/#for-a-pipeline)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16321)\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/run_new_pipeline_spec_input.png\">\n\n## GitLab 17.11のリリースに含まれるその他の改善点\n\n### 自動で無効化されたすべてのWebhookを自動で再有効化\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nこのリリースでは、`4xx`エラーを返すWebhookが自動的に再有効化されるようになりました。すべてのエラー（`4xx`、`5xx`、またはサーバーエラー）が同じように処理されるため、動作がより予測可能になり、トラブルシューティングが容易になります。この変更については、[こちらブログ投稿](https://about.gitlab.com/blog/gitlab-webhooks-get-smarter-with-self-healing-capabilities/)で詳しく解説しています。\n\n失敗したWebhookは、一時的に1分間無効になり、最大24時間まで延長されます。Webhookが40回連続して失敗すると、永久に無効になります。\n\nGitLab 17.10以前で永久に無効にされたWebhookは、データの移行が行われました。\n\n* GitLab.comの場合、これらの変更は自動的に適用されます。\n* GitLab Self-ManagedおよびGitLab Dedicatedの場合、これらの変更は、`auto_disabling_webhooks`の`ops`フラグが有効になっているインスタンスにのみ影響します。\n\nこの場を借りて、[コミュニティにコントリビュート](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/166329)してくれた[Phawin](https://gitlab.com/lifez)さんに感謝します！\n\n[ドキュメント](https://docs.gitlab.com/user/project/integrations/webhooks/#auto-disabled-webhooks)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/396577)\n\n### インポート時にGhostユーザーのコントリビュートを自動マッピング\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nこれまで、Ghostユーザーのコントリビュートはプレースホルダー参照として作成され、手動での再アサインを必要とし、移行作業に余分な手間がかかっていました。今回の改善により、[新しいコントリビュートおよびメンバーシップのマッピング機能](https://docs.gitlab.com/user/project/import/#user-contribution-and-membership-mapping)を使用するインポーター（たとえば、直接転送による移行や、GitHub、Bitbucket Server、Giteaのインポーター）では、Ghostユーザーのコントリビュートをより効率的に処理できるようになりました。コンテンツをGitLabにインポートする際、移行元インスタンスでGhostユーザーが行ったコントリビュートが、移行先インスタンスのGhostユーザーに自動的にマッピングされます。\n\nこの機能強化により、Ghostユーザーのコントリビュートに対して不要なプレースホルダーユーザーが作成されなくなり、ユーザーマッピング画面の煩雑さが減り、移行プロセス全体が簡素化されました。\n\n[ドキュメント](https://docs.gitlab.com/user/project/import/#user-contribution-and-membership-mapping)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/514014)\n\n### GitLab.comへのインポート時におけるコントリビュートの再アサインにSAML認証が追加\n\nSaaS: Premium、Ultimate\nSelf-Managed: Premium、Ultimate\n\nこのマイルストーンでは、GitLab.comにインポートする際、コントリビュートの再アサインプロセスにSAML認証チェックを追加しました。これらのチェックにより、SAML SSOが有効なグループで発生していた再アサインエラーを防止できるようになりました。\n\nGitLab.comにインポートし、GitLab.comグループでSAML SSOを使用する場合、すべてのユーザーは、コントリビュートとメンバーシップを再アサインする前に、SAML IDをGitLab.comアカウントにリンクする必要があります。SAML IDが認証されていないユーザーにコントリビュートを再アサインすると、エラーメッセージが表示されます。これらのメッセージでは、グループメンバーシップを正しく割り当てるための手順が説明されています。\n\n[ドキュメント](https://docs.gitlab.com/user/project/import/#requirements)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/513686)\n\n### Wikiサイドバーのスタイルを改善\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nカスタムWikiサイドバーのスタイルが改善され、見出しサイズが小さくなり、リストの左側の余白も調整されました。こうした視認性を高める改善により、`_sidebar wiki`ページで作成されたカスタムナビゲーションの読みやすさが向上しました。\n\nカスタムサイドバーは、チームが独自のナレッジベース構造に合わせてWikiコンテンツを整理するのに役立ちます。このスタイルの更新により、サイドバーが見やすくなり、視覚的な階層構造がより明確になり、チームメンバーが必要な情報を見つけやすくなりました。\n\n[ドキュメント](https://docs.gitlab.com/user/project/wiki/#customize-sidebar)\n[マージリクエスト](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/185678)\n\n### 作業中の上限をウェイトで設定\n\nSaaS: Premium、Ultimate\nSelf-Managed: Premium、Ultimate\n\nイシューの数に加えて、作業中の上限をウェイトで設定できるようになりました。これにより、チームのワークロードをより柔軟に管理できます。\n\nイシューの数だけでなく、各タスクの複雑さや作業量に基づいて作業の流れをコントロールできます。作業量をイシューのウェイトで表しているチームは、特定のボードリスト内のイシューの合計ウェイトを制限することで、チームに負担がかかりすぎるのを防げます。\n\nこの機能を活用することで、チームの生産性を最適化し、さまざまなタスクの複雑さを考慮した、よりバランスの取れたワークフローを実現できます。\n\n[ドキュメント](https://docs.gitlab.com/ee/user/project/issue_board.html#work-in-progress-limits)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/119208)\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/allow_users_to_set_work_in_progress_limits_by_weight.png\">\n\n### キャンセル状態でスタックしたCI/CDジョブを強制キャンセル\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nCI/CDジョブが「キャンセル中」状態でスタックし、デプロイや共有リソースへのアクセスをブロックすることがあります。\n\nメンテナーの[ロール](https://docs.gitlab.com/user/permissions/)を持つユーザーは、ジョブログページから直接これらの停止したジョブを強制キャンセルできるようになりました。これにより、問題のあるジョブを適切に終了できるようになります。\n\n[ドキュメント](https://docs.gitlab.com/ci/jobs/#force-cancel-a-job)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/467107)\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/force-cancel-stuck-jobs.png\">\n\n### 失敗したジョブが一目でわかるパイプラインビュー\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\n新しい表示機能により、パイプライングラフで失敗したジョブをすばやく識別できるようになりました。失敗したジョブグループはパイプライングラフで強調表示され、失敗したジョブは各ステージの上部にグループ化されます。複雑なパイプライン構造を隅々まで調べなくても、問題のあるジョブを素早く特定してトラブルシューティングができるようになりました。\n[ドキュメント](https://docs.gitlab.com/ci/pipelines/#view-pipelines)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/512300)\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/failed-jobs-pipeline-graph.png\">\n\n### 依存プロキシのDocker Hub認証UIが登場\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nGitLab依存プロキシにおいて、Docker Hub認証をUIから設定できるようになりました。この機能はもともとGitLab 17.10でGraphQL APIを通じてのみ利用可能でしたが、今回のリリースで、より簡単に設定できるユーザーインターフェースが追加されました。\n\nこの機能強化により、グループ設定ページから直接Docker Hub認証を設定できるようになり、以下のことが可能になりました。\n\n* レート制限によるパイプラインの失敗を回避\n* プライベートなDocker Hubイメージへのアクセス\n* Docker Hubの認証情報、[パーソナルアクセストークン](https://docs.docker.com/security/for-developers/access-tokens/)、または[組織アクセストークン](https://docs.docker.com/security/for-admins/access-tokens/)を安全に保存\n\nこの効率化されたアプローチにより、GraphQL APIを使用せずに、CI/CDパイプラインでDocker Hubイメージに安定してアクセスできるようになりました。\n\n### Kubernetes 1.32のサポートを追加\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nこのリリースでは、2024年12月にリリースされたKubernetesバージョン1.32に対するフルサポートが追加されました。アプリケーションをKubernetesにデプロイしている場合は、接続中クラスターを最新バージョンにアップグレードすることで、Kubernetes 1.32が提供する機能をすべて活用できるようになります。\n\n[Kubernetesサポートポリシーとその他のサポートされているKubernetesバージョン](https://docs.gitlab.com/ee/user/clusters/agent/#supported-kubernetes-versions-for-gitlab-features)の詳細については、ドキュメントをご覧ください。\n\n###  反射型XSSチェックのための動的解析機能を追加\nSaaS: Ultimate\u003Cbr>\nSelf-Managed: Ultimate\n\nGitLabの動的解析チームが、[CWE-79](https://cwe.mitre.org/data/definitions/79.html)に対応する新しいチェック機能を導入しました。これにより、DASTスキャナーは反射型XSS（クロスサイトスクリプティング）攻撃を検出できるようになりました。\n\n反射型XSSのチェック機能はデフォルトで有効になっています。このチェックを無効にするには、設定ファイルに`DAST_FF_XSS_ATTACK: false`を追加してください。ご質問やフィードバックがある場合は、[イシュー525861](https://gitlab.com/gitlab-org/gitlab/-/issues/525861)を参照してください。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dast/browser/checks/)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/525861)\n\n### Python対応の静的到達性解析のベータ版を提供開始\n\nSaaS: Ultimate\nSelf-Managed: Ultimate\n\nコンポジション解析チームは、Python向け静的到達性解析のベータ版をリリースしました。このベータ版では、安定性、可観測性の向上に焦点を当て、より簡単な設定で優れたユーザーエクスペリエンスを提供します。\n\n静的到達性解析は、ソフトウェアコンポジション解析（SCA）で得られる結果をより充実させてくれる機能です。静的到達性解析では、GitLabの高度なSASTを活用し、プロジェクトのソースコードをスキャンして使用中のオープンソースの依存関係を特定します。\n\nトリアージや修正に関する意思決定を行う上で、静的到達性機能によって生成されたデータを活用できます。また、静的到達可能性データを共通脆弱性評価システム（CVSS）スコアや悪用予測スコアリングシステム （EPSS)、悪用されている既知の脆弱性（KEV）と併用することで、より焦点を絞って脆弱性を確認することも可能です。\n\nこの機能に関するフィードバックをお待ちしています。ご質問やご意見のある方、またはGitLabチームとのやり取りをご希望の場合は、こちらの[フィードバックイシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/535498)をご覧ください。\n\n### 依存関係リストと脆弱性レポートのエクスポートに関するメール配信\n\nSaaS: Ultimate\nSelf-Managed: Ultimate\n\nこれまで、依存関係リストや脆弱性レポートをエクスポートする場合、レポートをダウンロードするにはエクスポートが完了するまでページを開いたままにする必要がありました。\n\n今回の改善により、依存関係リストまたは脆弱性レポートのエクスポートが完了すると、ダウンロードリンクが記載されたメールで通知が届くようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dependency_list/#download-the-dependency-list)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/513149)\n\n### CI/CDジョブの`source` 値を保存してフィルタリングする\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nGitLab 17.11では、CI/CDジョブのソース属性を追跡することで、ユーザーがビルドアーティファクトのソースを確認できる新機能が導入されました。この機能は特に、セキュリティ対策やコンプライアンス対応を求められるワークフローで役立ちます。たとえば、組織はソフトウェアサプライチェーンのセキュリティ対策を実装したり、コンプライアンス目的でセキュリティスキャンの検証可能な証拠を要求したりできます。\n\nGitLabのジョブは、発生源を識別する以下の`source`値を保存して表示するようになりました。\n\n* スキャン実行ポリシー\n* パイプライン実行ポリシー\n* 通常のパイプライン\n\n`source`属性には、ビルド   \\> ジョブページの新しいフィルターオプション、ジョブAPI、またはアーティファクト検証用のIDトークンクレームを通じて確認できます。\n\nこの新機能により、次のことができるようになりました。\n\n* セキュリティスキャン結果の信頼性を検証\n* ソースの種類でジョブを絞り込むことで、ポリシーによって実行されたスキャンをすばやく特定\n* 新しいIDトークンクレームを使用した、アーティファクトの暗号化検証を実装\n* 適切な監査証跡により、コンプライアンス要件が満たされていることを確認\n\nセキュリティチームやコンプライアンスチームは、この機能を活用して以下を行えます。\n\n* ジョブページの新しいフィルターを使用して、ポリシーによって実行されたジョブのみを表示\n* ジョブAPIの`source`フィールドにアクセスしてタスクを自動化\n* 新しいIDトークンクレームを使用して、アーティファクトの検証を実装\n  * `job_source`：ジョブの発生源を識別します\n  * `job_policy_ref_uri`：ポリシーファイルを指します（ポリシー定義のジョブの場合）\n  * `job_policy_ref_sha`：ポリシーのgitコミットSHAを含みます\n\n[ドキュメント](https://docs.gitlab.com/api/jobs/#view-the-source-of-a-job)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/11796)\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/scan_execution_policy_job_source_filter.png\">\n\n### コンプライアンスフレームワークの作成時にプロジェクトを割り当て可能に\n\nSaaS: Premium、Ultimate\nSelf-Managed: Premium、Ultimate\n\nこれまでは、コンプライアンスフレームワークを作成した後、コンプライアンスセンターのプロジェクトタブに移動しないと、新しいコンプライアンスフレームワークをプロジェクトに割り当てることができませんでした。このプロセスは、グループで新しいフレームワークを作成する際に余計な混乱を生む原因となっていました。\n\nGitLab 17.11では、コンプライアンスフレームワークを作成するプロセスに新しい手順が追加され、作成前に複数のプロジェクトをコンプライアンスフレームワークに割り当てられるようになりました。\n\nこの新機能により以下が実現します。\n\n* コンプライアンスフレームワークのスムーズな作成\n* コンプライアンスフレームワークがグループ内のプロジェクトと連携し、グループ全体のコンプライアンス遵守状況を監視・管理する仕組みについての理解を深めるガイダンスを提供\n\n[ドキュメント](https://docs.gitlab.com/user/compliance/compliance_frameworks/#apply-a-compliance-framework-to-a-project)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/500520)\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/provide_option_to_add_projects_in_compliance_creation_workflow.png\">\n\n### サービスアカウント管理画面でのトークン統計表示\n\nSaaS: Premium、Ultimate\nSelf-Managed: Premium、Ultimate\n\nサービスアカウントのトークン管理インターフェイスに、トークンの状況を一目で把握できる便利な統計ダッシュボードが追加されました。この機能は、トークンの状態を評価し、注意が必要なトークンを特定するのに役立ちます。統計ダッシュボードには、次の4つの主要なメトリクスが含まれます。\n\n\\- 有効なトークン：現在使用中のトークンの総数を表示します\n\\- 2週間以内に期限が切れるトークン：今後2週間で期限切れとなるトークンを特定します\n\\- 取り消したトークン：手動で取り消されたトークンを追跡します\n\\- 期限切れトークン：以前に期限切れとなったトークンを監視します\n\nこの場を借りて、コントリビュートしてくれた[Chaitanya Sonwane](https://gitlab.com/chaitanyason9)さんに感謝します！![Token statistics for service account management][image6]\n\n[ドキュメント](https://docs.gitlab.com/user/profile/service_accounts/)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/520472)\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/expiring_token_cards.png\">\n\n### GitLab Duo Chatとコード提案でLlama 3モデルが一般提供開始\n\nSaaS: -\u003Cbr>\nSelf-Managed: Ultimate、Duo Enterprise\n\nLlama 3モデルがGitlab Duo Self-Hostedで一般提供され、GitLab Duo Chatとコード提案をサポートできるようになりました。\n\nこれらのモデルをGitLab Duo Self-Hostedで使用する際のフィードバックについては、[イシュー523918](https://gitlab.com/gitlab-org/gitlab/-/issues/523918)を参照してください。\n\n[ドキュメント](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_models_and_hardware_requirements/#supported-models)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15678)\n\n### 管理者エリアでプレースホルダーユーザーをフィルタリング可能に\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nこれまで、インポート中に作成されたプレースホルダーユーザーは、管理者エリアのユーザーページで明確に区別されず、通常のユーザーと混在して表示されていました。\n\n本リリースから、管理者は管理者エリアのユーザーページの検索ボックスからプレースホルダーアカウントを絞り込めるようになりました。これを行うには、ドロップダウンリストで`タイプ`を選択し、`プレースホルダー`を選択します。\n\n[ドキュメント](https://docs.gitlab.com/administration/admin_area/#administering-users)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/521974)\n\n###  グループの使用量割り当てにプレースホルダーユーザー制限を表示\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nGitLab.comへのインポートの場合、プレースホルダーユーザーはトップレベルグループごとに制限されています。これらの制限は、GitLabライセンスとシート数によって異なります。 本リリースから、トップレベルグループのプレースホルダーユーザーの使用状況と制限をUIで確認できるようになりました。\n以下の手順で現在の使用状況と制限を表示できます。\n\n1. 左側のサイドバーで、「Search or go to...」を選択してグループを検索します。このグループはトップレベルである必要があります。\n2. 設定 \\> 使用量割り当てを選択します。\n\n3. 「インポート」タブを選択します。\n\n[ドキュメント](https://docs.gitlab.com/user/project/import/#placeholder-user-limits)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/486691)\n\n### GLQLビューで最後のコメントを列として表示可能に\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nGLQLビューで、イシューまたはマージリクエストの最後のコメントを列として表示できるようになりました。GLQLクエリにlastCommentをフィールドとして含めることで、作業中の画面から移動せずに最新の更新を確認できます。\n\nこれまでは、最後のコメントを確認するために各イシューまたはマージリクエストを個別に開く必要があり、時間がかかる上に、進捗状況の全体像をすばやく把握することが困難でした。この改善により、進行中の会話やステータス更新が一目でわかるようになり、チームの作業効率向上に役立ちます。\n\nこの機能強化ならびにGLQLビュー全般に関するフィードバックは、[フィードバックイシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/509791)からお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/user/glql/fields/#last-comment)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/512154)\n\n### GitLab Pages用のNuxtプロジェクトテンプレートが登場\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nGitLabは、最も人気のある静的サイトジェネレーター（SSG）のテンプレートを提供していますが、この度、Vue.js上に構築された強力なフレームワークであるNuxtを使用したGitLab Pagesサイトを作成できるようになりました。Nuxtは、設定の手間を減らしながらモダンで高性能なWebアプリケーションをビルドしたいチームにとって特に有用です。\n\nこの新機能により、初期のセットアップと設定に時間をかけることなく、CI/CDパイプラインと最新の開発体験を組み込んだPagesサイトをすばやく起動するオプションが増えました。\n\n[ドキュメント](https://docs.gitlab.com/user/project/pages/getting_started/pages_new_project_template/)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/461603)\n\n### インポートされたファイルをコード提案のコンテキストとして使用可能に\n\nSaaS: Premium、Ultimate、Duo Pro、Duo Enterprise\n\nSelf-Managed: Premium、Ultimate、Duo Pro、Duo Enterprise\n\nGitLab Duoコード提案で、IDEにインポートされたファイルをコンテキストとして活用できるようになり、コード提案の品質が進化しました。インポートされたファイルはプロジェクトに関する追加のコンテキストを提供し、より適切な提案を可能にします。現在、インポートファイルのコンテキストは、JavaScriptファイルとTypeScriptファイルに対応しています。\n\n### GitLab Runner 17.11\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nこのたび、GitLab Runner 17.11もリリースされます！GitLab Runnerは、CI/CDジョブを実行し、結果をGitLabインスタンスに送信する、拡張性の高いビルドのエージェントです。GitLabに含まれるオープンソースの継続的インテグレーションサービスであるGitLab CI/CDと連携して動作します。\n新機能：\n\n* [GitLab RunnerのWindows実行可能ファイルにコード署名を追加](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/2483)\n\nバグ修正：\n\n* [GitLab Runner 17.10.0でGit設定をクリーニングするとエラーが発生する](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/38681)\n* [`FF_DISABLE_UMASK_FOR_KUBERNETES_EXECUTOR`フラグが`umask`コマンドを無効にしない](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/38382)\n\nすべての変更の一覧は、GitLab Runnerの[変更履歴](https://gitlab.com/gitlab-org/gitlab-runner/blob/17-11-stable/CHANGELOG.md)で確認できます。\n\n[ドキュメント](https://docs.gitlab.com/runner/)\n\n### プロジェクトにおけるRunner管理の改善\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nプロジェクトでRunnerをより効率的に管理できるようになりました。Runnerは、従来の2列のビューではなく、1列のレイアウトで表示され、それぞれが独自のリストとして整理されるようになりました。\n\nこの構成の改善により、Runnerの検索と管理が簡素化され、割り当てられたプロジェクトの一覧、Runnerマネージャー、およびRunnerが実行したジョブなどの新機能が追加されました。GitLab 18.0で計画されているその他のRunner管理の改善については、[イシュー33803](https://gitlab.com/gitlab-org/gitlab/-/issues/33803)を参照してください。\n\n[ドキュメント](https://docs.gitlab.com/ci/runners/runners_scope/#project-runners)\n[マージリクエスト](https://release-17-11.about.gitlab-review.app/releases/2025/04/17/gitlab-17-11-released/%5B%22https://gitlab.com/gitlab-org/gitlab/-/merge_requests/185232%22,%20%22https://gitlab.com/gitlab-org/gitlab/-/merge_requests/186963%22%5D)\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/runner-project-redesign.png\">\n\n### スイッチボードで複数のIDプロバイダ（IdP）を使用したSAMLシングルサインオンに対応\n\nSaaS: Ultimate\u003Cbr>\nSelf-Managed: -\n\nGitLab Dedicatedインスタンスにおいて、最大10個のIDプロバイダ（IdP）を使ったSAMLシングルサインオン（SSO）の設定が可能に\nなりました。\n\nGitLab Dedicatedインスタンスで利用可能なすべてのSAML設定オプションは、個々のIdPごとに設定できます。\n\n以前に複数のIdPを設定していた場合も、すべての既存SAML設定をスイッチボードで直接表示および編集できるようになりました。\n\n![Configure SAML single sign-on with multiple identity providers in Switchboard][image8]\n\n[ドキュメント](https://docs.gitlab.com/administration/dedicated/configure_instance/saml/)\n[Webページ](https://release-17-11.about.gitlab-review.app/releases/2025/04/17/gitlab-17-11-released/%5B%22https://about.gitlab.com/direction/platforms/dedicated/#theme-feature-parity%22%5D)\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/switchboard-multiple-idp.png\">\n\n### イベントデータの共有をデプロイ前に無効にできる機能を追加\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nGitLab 18.0では、GitLab Self-ManagedおよびGitLab Dedicatedインスタンスからイベントレベルの製品使用状況データの収集を有効にする予定です。集計データとは異なり、イベントレベルのデータを収集することでより詳細な利用状況を把握できるようになります。こうしたデータは、GitLabがプラットフォーム上のユーザーエクスペリエンスを向上させ、機能活用を促進させるのに役立ちます。\n\nGitLab 17.11から、上記のイベントデータ収集が始まる前に、あらかじめその機能を無効に設定することが可能になりました。オプトアウト方法の詳細については、ドキュメントを参照してください。\n\n[ドキュメント](https://docs.gitlab.com/administration/settings/event_data/)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/510333)\n\n### シークレットプッシュ保護とパイプラインシークレット検出のルールカバレッジを拡大\n\nSaaS: Ultimate\nSelf-Managed: Ultimate\n\nGitLabシークレット検出機能が大幅に更新され、17件の新しいシークレットプッシュ保護ルールと12件の新しいパイプラインシークレット検出ルールが追加されました。また、既存のルールの一部も更新され、検出精度の向上と誤検知の削減が図られています。詳細については、[変更履歴](https://gitlab.com/gitlab-org/security-products/secret-detection/secret-detection-rules/-/blob/main/CHANGELOG.md#v090)のv0.9.0を参照してください。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/secret_detection/detected_secrets)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/534106)\n\n### プロジェクト依存関係リストをCycloneDX形式でエクスポート可能に\n\nSaaS: Ultimate\nSelf-Managed: Ultimate\n\n多くの組織は現在、規制要件を満たし、ソフトウェアサプライチェーンのセキュリティをさらに強化するために、ソフトウェア部品表（SBOM）が求められるようになりました。以前は、GitLabでは依存関係リストのエクスポート形式がJSONもしくはCSVに限られていましたが、今回から業界標準のCycloneDX形式でエクスポートできるようなり、SBOMの生成が可能になりました。\nSBOMをCycloneDX形式で依存関係リストから直接ダウンロードするには、**エクスポート** \\> **CycloneDX（JSON）としてエクスポートする**を選択します。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dependency_list/#download-the-dependency-list)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/524733)\n\n### 依存関係リストをCSV形式でエクスポート可能に\n\nSaaS: Ultimate\nSelf-Managed: Ultimate\n\nこれまで、GitLabから依存関係リストをCSVファイルとしてエクスポートすることはできませんでした。本リリースから新機能として、依存関係リストをダウンロードする際にCSVオプションを選択して、CSV形式でリストをエクスポートできるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/ee/user/application_security/dependency_list/#download-the-dependency-list)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/435843)\n\n### 「ツールフィルター」が「スキャナーフィルター」と「レポートタイプフィルター」に置き換え\n\nSaaS: Ultimate\nSelf-Managed: Ultimate\n\nこれまで、脆弱性レポートの**ツール**検索フィルタでは、スキャナーのタイプ（ESLintやGemnasiumなど）とレポートのタイプ（SASTやコンテナスキャンなど）が単一のグループとして扱われ、個別に指定することができませんでした。\n\n今回、より効率的に適切なツールを検索できるよう、**ツール**フィルターを**スキャナー**フィルターと**レポートタイプ**フィルターに分けました。これにより、スキャナーとレポートタイプを別々に指定できるようになり、より細かく検索条件を設定できるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/vulnerability_report/#report-type-filter)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/503371)\n\n### アクセストークンの並べ替えオプションを強化\n\nSaaS: Free、Premium、Ultimate\nSelf-Managed: Free、Premium、Ultimate\n\nUIとAPIにアクセストークンの並べ替えオプションが追加されました。これらの並べ替えオプションは、GitLabの既存のトークン管理機能を補完し、アクセストークン管理の自由度を高めるとともに、アクセストークンのセキュリティ維持にも役立ちます。新しい並べ替えオプションには次のものがあります。\n\n* 有効期限順（昇順）：最も早く期限が切れるトークンから表示\n* 有効期限順（降順）：有効期限までの期間が最も長いトークンから表示\n* 最終使用日順（昇順）：最近使用されていないトークンから表示\n* 最終使用日順（降順）：最近使用されたトークンから表示\n\n[ドキュメント](https://docs.gitlab.com/user/profile/personal_access_tokens/)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/519716)\n\n### Geo - 新しいレプリケーションビューの導入\n\nSaaS: -\u003Cbr>\nSelf-Managed: Premium、Ultimate\n\nGeoのレプリケーションビューが、新しい見た目と使いやすさに生まれ変わりました。新しいデザインは、GitLab全体と統一感を持たせつつ、Geoセカンダリサイトの同期と検証ステータスを確認しやすい、より効率化されたインターフェイスを実現しています。さらに新機能として、各レプリケーション項目をクリックすると詳細画面が表示されるようになり、プライマリおよびセカンダリのチェックサム、エラーの詳細など、多くの情報が確認できるようになりました。これにより、Geoの同期に関する問題のトラブルシューティングがはるかに簡単になります。\n\n[ドキュメント](https://docs.gitlab.com/administration/geo/)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/509349)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/410401)\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/geo_new_replicables_view.png\">\n\n### GitLab Duo ChatがAnthropicのClaude Sonnet 3.7を採用\n\nSaaS: Premium、Ultimate、Duo Pro、Duo Enterprise\nSelf-Managed: Premium、Ultimate、Duo Pro、Duo Enterprise\n\nGitLab Duo Chatのベースモデルが、AnthropicのClaude 3.5 SonnetからClaude Sonnet 3.7に更新されました。これにより、ほとんどの質問は新モデルで処理されます。\n\nClaude 3.7 Sonnetは、コーディングと推論機能が大幅に強化されており、コードの説明、コードの生成、テキストデータの処理、複雑なDevSecOps関連の質問に対して、より精度の高い回答が可能になりました。これらの分野では、より詳細で正確な応答が得られます。\n\nこのアップグレードはChat機能全体に適用され、すべてのChat機能で一貫した品質向上が図られています。\n\n[ドキュメント](https://docs.gitlab.com/user/gitlab_duo_chat/examples/)\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/521034)\n\n### Linuxパッケージの改善\nSaaS: -\u003Cbr>\nSelf-Managed: Free、Premium、Ultimate\n\nGitLab 18.0では、PostgreSQLの最小サポートバージョンはバージョン16になります。この変更に備えて、[PostgreSQLクラスター](https://docs.gitlab.com/administration/postgresql/replication_and_failover/)を使用していないインスタンスでは、GitLab 17.11へのアップグレード時にPostgreSQLをバージョン16に自動的にアップグレードする仕組みが導入されます。\n\n[PostgreSQLクラスター](https://docs.gitlab.com/administration/postgresql/replication_and_failover/)を使用している場合、または[この自動アップグレードを希望しない](https://docs.gitlab.com/omnibus/settings/database/#opt-out-of-automatic-postgresql-upgrades)場合は、[手動でPostgreSQL 16にアップグレード](https://docs.gitlab.com/omnibus/settings/database/#upgrade-packaged-postgresql-server)してからGitLab 18.0にアップグレードする必要があります。\n\n[ドキュメント](https://docs.gitlab.com/omnibus/)\n[イシュー](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/8504)\n\n### GitLab Duo Chatで複数のチャットを管理可能に\n\nSaaS: Premium、Ultimate、Duo Pro、Duo Enterprise\nSelf-Managed: Premium、Ultimate、Duo Pro、Duo Enterprise\n\nGitLab Duo Chatを使用した複数のチャットが、GitLab Self-ManagedインスタンスのWeb UIで利用できるようになりました。新しいチャットの作成、履歴の閲覧、およびチャット間の切り替えをコンテキストを失うことなく行えます。\n\nプライバシー保護のために、30日間アクティビティのないチャットは自動的に削除されます。また、チャットはいつでも手動で削除できます。GitLab Self-Managedをご利用の場合、管理者は会話の保持時間をさらに短縮することも可能です。\n\n[イシュー526013](https://gitlab.com/gitlab-org/gitlab/-/issues/526013)で、ご意見をお聞かせください。\n\n[ドキュメント](https://docs.gitlab.com/user/gitlab_duo_chat/#have-multiple-conversations-with-chat)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16108)\n\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/h9ooN05cNbw?si=J6UGE_T5YIc6HL_P\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen>\u003C/iframe>\n\n### GitLab Duo Self-Hostedで開いているファイルをコード提案のコンテキストとして使用可能に\nSaaS: -\u003Cbr>\nSelf-Managed: Ultimate、Duo Enterprise\n\nGitlab Duo Self-Hostedでは、コード提案を使用するときに、[IDEのタブで開いているファイル](https://docs.gitlab.com/user/project/repository/code_suggestions/#using-open-files-as-context)をコンテキストとして使用できるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/project/repository/code_suggestions/#using-open-files-as-context)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16611)\n\n### GitLab Duo Self-HostedでAI搭載機能ごとに個別のモデルを選択可能に\nSaaS: -\u003Cbr>\nSelf-Managed: Ultimate、Duo Enterprise\n\nGitLab Duo Self-Hostedで、GitLab Self-Managedインスタンスの各GitLab Duo機能とサブ機能に対して、サポートされている個々のモデルを選択して設定できるようになりました。\n\nフィードバックは、[イシュー524175](https://gitlab.com/gitlab-org/gitlab/-/issues/524175)にお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/configure_duo_features/#configure-the-feature-to-use-a-self-hosted-model)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17099)\n\n## バグ修正、パフォーマンスの改善、UIの改善\n\nGitLabでは、ユーザーに可能な限り最高の環境をお届けできるよう尽力しています。リリースのたびに、バグを修正し、パフォーマンスを改善し、UIを向上させるためにたゆまぬ努力を続けています。GitLabは、100万人を超えるGitLab.comユーザーをはじめ、GitLabのプラットフォームを利用するすべての人にスムーズでシームレスな体験をお届けすることを約束します。\n17.11で提供されたすべてのバグ修正、パフォーマンスの強化、UI改善を確認するには、以下のリンクをクリックしてください。\n\n* [バグ修正](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=type%3A%3Abug&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=17.11)\n* [パフォーマンスの改善](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=bug%3A%3Aperformance&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=17.11)\n* [UIの改善](https://papercuts.gitlab.com/?milestone=17.11)\n\n\u003Cbr>\n\u003Cbr>\n\n## 非推奨事項\n\n新たに非推奨になった機能、および現在非推奨になっているすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n* パイプライン実行ポリシーの「inject\\_ci」戦略が「inject\\_policy」に変更\n* コンプライアンス基準適合ダッシュボードがコンプライアンス状況ダッシュボードに刷新\n* クライアント認証情報を使用しないOAuth ROPCグラント方式を非推奨化\n\n\u003Cbr>\n\u003Cbr>\n\n## 削除された機能と破壊的な変更\n\n削除されたすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n### GitLab 17.11へのアップグレードに関する重要なお知らせ\n\nGitLab 17.8では、新しい暗号化フレームワーク（GitLab 17.9から導入）に対応するため、3つの新しいシークレットが追加されました。\n\nマルチノード構成をご利用の場合は、[こちらのドキュメントページ（GitLab 17.11.0 changes）](https://docs.gitlab.com/update/versions/gitlab_17_changes/#17110)に記載されている、お使いの環境に適した手順に従ってください。\n\n### 変更履歴\n\n変更内容をすべて表示するには、次のページから変更履歴を確認してください。\n\n* [GitLab](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/CHANGELOG.md)\n* [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/blob/main/CHANGELOG.md)\n* [VS CodeのGitLabワークフロー](https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/main/CHANGELOG.md)\n* [GitLab CLI](https://gitlab.com/gitlab-org/cli/-/releases)\n\n### インストール\n\nGitLabを新規にインストールする場合は、[GitLabのダウンロードページ](https://about.gitlab.com/ja-jp/install/)をご覧ください。\n\n### 更新事項\n\n[更新ページ](https://about.gitlab.com/ja-jp/update/)をご覧ください。\n\n### ご不明な点がある場合\n\nご質問やご意見をお聞かせください。本リリースについてご不明な点がある場合は、[GitLabフォーラム](https://forum.gitlab.com/)にアクセスして質問を投稿してください。\n\n### GitLabサブスクリプションプラン\n\n* [Free](https://about.gitlab.com/pricing/)\n  ユーザー向けの永久無料機能を提供\n* [Premium](https://about.gitlab.com/pricing/premium/)\n  チームの生産性と調整を強化\n* [Ultimate](https://about.gitlab.com/pricing/ultimate/)\n  組織全体のセキュリティ、コンプライアンス、プランニングに対応\n\nGitLabのすべての機能を[無料](https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/)でお試しいただけます。\n\n\u003Cbr>\n\u003Cbr>\n\n*監修：ソリス ジェレズ / Jerez Solis [@jerezs](https://gitlab.com/jerezs)\u003Cbr>\n（GitLab合同会社 ソリューションアーキテクト本部 ソリューションアーキテクト）*\n\n### 過去の日本語リリース情報\n- [GitLab 18.0](https://about.gitlab.com/ja-jp/blog/gitlab-18-0-release/)\n- [GitLab 17.11](https://about.gitlab.com/ja-jp/blog/gitlab-17-11-release/)\n- [GitLab 17.10](https://about.gitlab.com/ja-jp/blog/gitlab-17-10-release/)\n- [GitLab 17.9](https://about.gitlab.com/ja-jp/blog/gitlab-17-9-release/)\n* [GitLab 17.8](https://about.gitlab.com/ja-jp/blog/gitlab-17-8-release/)\n* [GitLab 17.7](https://about.gitlab.com/ja-jp/blog/gitlab-17-7-release/)\n* [GitLab 17.6](https://about.gitlab.com/ja-jp/blog/gitlab-17-6-release/)\n* [GitLab 17.5](https://about.gitlab.com/ja-jp/blog/gitlab-17-5-released/)\n* [GitLab 17.4](https://about.gitlab.com/ja-jp/blog/gitlab-17-4-released/)\n* [GitLab 17.3](https://about.gitlab.com/ja-jp/blog/gitlab-17-3-released/)\n* [GitLab 17.2](https://about.gitlab.com/ja-jp/blog/gitlab-17-2-released/)\n* [GitLab 17.1](https://about.gitlab.com/ja-jp/blog/gitlab-17-1-released/)\n* [GitLab 16.11](https://about.gitlab.com/ja-jp/blog/gitlab-16-11-released/)\n",[748,900,681,9],"releases","2025-04-22",{"slug":903,"featured":91,"template":685},"gitlab-17-11-release","content:ja-jp:blog:gitlab-17-11-release.yml","Gitlab 17 11 Release","ja-jp/blog/gitlab-17-11-release.yml","ja-jp/blog/gitlab-17-11-release",{"_path":909,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":910,"content":916,"config":922,"_id":924,"_type":14,"title":925,"_source":16,"_file":926,"_stem":927,"_extension":19},"/ja-jp/blog/gitlab-18-0-release",{"ogTitle":911,"schema":912,"ogImage":913,"ogDescription":914,"ogSiteName":669,"noIndex":6,"ogType":670,"ogUrl":915,"title":911,"canonicalUrls":915,"description":914},"GitLab 18.0 リリース","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab 18.0 リリース\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab Japan Team\"}],\n        \"datePublished\": \"2025-05-15\",\n      }","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662010/Blog/Hero%20Images/product-gl18-blog-release-cover-18-0-0750-1800x945-fy26.png","GitLab 18.0でリリースした最新機能をご紹介します。","https://about.gitlab.com/blog/gitlab-18-0-release",{"heroImage":913,"body":917,"authors":918,"updatedDate":919,"date":920,"title":911,"tags":921,"description":914,"category":681},"本ブログは、[GitLab 18.0 Release](https://about.gitlab.com/releases/2025/05/15/gitlab-18-0-released/)の抄訳です。内容に相違がある場合は、原文が優先されます。\n\n## GitLab 18.0をリリース：GitLab DuoがPremiumとUltimateで利用可能に\n\nこのたび、GitLab 18.0のリリースを発表しました。このリリースでは、GitLab PremiumとGitLab UltimateにGitLab Duoが搭載され、GitLab Duoコードレビューによる自動レビュー、コンテキストをより考慮したコードレビュー、GitLab Duo Self-Hostedで利用可能なリポジトリX-Rayなど、さまざまな新機能が追加されました。  \n\nこれらの機能は、今回のリリースに含まれる30件以上の改善点のほんの一部です。この記事では、お役に立つアップデートをすべてご紹介していますので、ぜひ最後までお読みください。\n\nGitLab 18.0には、GitLabコミュニティのユーザーから328件ものコントリビュートがありました。ありがとうございました！GitLabは[誰もがコントリビュートできる](https://about.gitlab.com/community/contribute/)プラットフォームであり、今回のリリースはユーザーのみなさまの協力なしには実現しませんでした。\n\nGitLab 18の新機能を活用することで、開発からリリースまでの全工程でAIの力を活用しつつ、開発者のスピードを落とさずにセキュリティを強化できます。これらがすべて、一つのプラットフォームで実現します。新機能については、[GitLab 18のオンラインリリースイベント「The next step in intelligent DevSecOps（知的進化する次世代のDevSecOps）」](https://about.gitlab.com/eighteen/)で詳しくご紹介いたします。ご参加をお待ちしています。\n\n来月のリリースで予定されている内容を先取りするには、[今後のリリースページ](https://about.gitlab.com/upcoming-releases/)をご覧ください。\n\n[GitLab 18.0では、PremiumおよびUltimate向けのGitLab Duoが追加されました。 クリックしてSNSで共有しましょう！](http://twitter.com/share?text=GitLab+18.0%E3%81%AE%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%A7%E3%81%AF%E3%80%81Premium%E3%81%8A%E3%82%88%E3%81%B3Ultimate%E5%90%91%E3%81%91%E3%81%AEGitLab+Duo%E3%81%8C%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82&url=https://about.gitlab.com/ja-jp/blog/gitlab-18-0-release/&hashtags=)\n\n## 今月の[注目コントリビューター](https://contributors.gitlab.com/docs/notable-contributors)は[Michael Hofer](https://gitlab.com/karras)さんです\n\n\u003Cimg src=\"https://about.gitlab.com/images/notable-contributor-logo.svg\">\n\nトップコントリビューターであり、コミュニティリーダーでもあるMichael Hoferさんは、GitLabの[オープンソース](https://about.gitlab.com/ja-jp/blog/what-is-open-source/)ミッションを推進しています。今年だけで[50件以上のコントリビュート](https://contributors.gitlab.com/users/karras?fromDate=2025-01-01&toDate=2025-05-12)を行い、その活動はOpenBaoに基づくGitLabのGeo機能やシークレットマネージャーの強化に大きく貢献しました。また、[4月のハッカソン](https://contributors.gitlab.com/hackathon?hackathonName=2025_04)ではトップの成績を収め、他のコントリビューターを支援しながらコミュニティプロジェクトも率いています。\n\n「GitLabには誰もがコントリビュートできる環境があるので、とても感謝しています！」とMichaelさんは言います。「素晴らしいチームで、一緒に取り組んでいてとても楽しいです。特に、OpenBaoやSLSAのような[オープンソース](https://about.gitlab.com/ja-jp/blog/what-is-open-source/)イニシアチブで協力する際は、みんな本当に頼りになります。」\n\nMichaelさんは、ミッションクリティカルな[オープンソース](https://about.gitlab.com/ja-jp/blog/what-is-open-source/)ワークロードの計画、構築、運用に特化した国際的なITサービスプロバイダーである[Adfinis社](https://adfinis.com/en/)のCTOを務めています。Michaelさんは、組織間での協力を促進し、[オープンソース](https://about.gitlab.com/ja-jp/blog/what-is-open-source/)ソリューションの普及に情熱を注いでいます。\n\n最近、Adfinis社はGitLabの[共同開発プログラム](https://about.gitlab.com/community/co-create/)に参加しました。このプログラムでは、組織がGitLabの製品チームおよびエンジニアリングチームと協力して、GitLabの構築に取り組んでいます。「共同開発プログラムを、すべての組織に強くお勧めしたいです」とMichaelさんは話します。「PodmanのルートレスビルドやGlimmerの構文ハイライトに加え、その他多くの素晴らしいコントリビュートを生み出しました。」\n\nGitLabのエンジニアリングマネージャーであり、今回Michaelさんを推薦した[Lucie Zhao](https://gitlab.com/luciezhao)は次のように話します。「GeoチームはMichaelさんとの共同作業に大きなやりがいと楽しみを感じています。Michaelさんは、ここ数件のマイルストーンでの素晴らしいコントリビュートにより、チーム内で最も知られたコミュニティコントリビューターとなりました。」\n\nGitLabチームメンバーの[Lee Tickett](https://gitlab.com/leetickett-gitlab)、[Chloe Fons](https://gitlab.com/c_fons)、[Alex Scheel](https://gitlab.com/cipherboy-gitlab)も、Michaelさんの推薦を支持しました。Alexは次のように述べています。「MichaelさんのOpenBaoでのリーダーシップにより、お客様向けのシークレット管理ソリューションを効果的に共同開発することができました。また、透明性も確保され、GitLabの価値観に沿って進められました。」\n\nGitLabの共同開発に取り組んでくださっているMichaelさんとAdfinisチームのみなさま、ありがとうございます！\n\u003Cbr>\n\u003Cbr>\n\u003Cbr>\n\n## GitLab 18.0でリリースされた主な改善点\n\n### GitLab DuoがGitLab PremiumおよびGitLab Ultimateで利用可能に\n\n> SaaS: Premium、Ultimate、Duo Pro、Duo Enterprise\\\n> Self-Managed: Premium、Ultimate、Duo Pro、Duo Enterprise  \n\nこのリリースから、GitLab PremiumとGitLab UltimateでGitLab Duoが利用可能になりました。両プランにAI機能が標準搭載されます。\n\nGitLabのAIネイティブ機能には、IDE内のコード提案とチャット機能があります。開発チームは、これらの機能を使用して次の作業を効率化できます。\n\n* コードを分析し、理解し、説明する\n* より迅速に安全なコードを記述する\n* コード品質を維持するためのテストを素早く生成する\n* パフォーマンス向上や特定のライブラリの利用に合わせてコードを簡単にリファクタリングする\n\n[ドキュメント](https://docs.gitlab.com/user/gitlab_duo/#summary-of-gitlab-duo-features)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/538857)  \n\n\u003Cimg src=\"https://about.gitlab.com/images/18_0/Premium_Duo.png\">\n\n### GitLab Duo Self-HostedでリポジトリX-Rayが利用可能に\n\n> SaaS: - \u003Cbr>\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nGitLab Duo Self-Hostedで、コード提案と併せてリポジトリX-Rayを使用できるようになりました。この機能は、GitLab Duo Self-Hostedではベータ版として提供され、GitLab Self-Managedインスタンスでは一般提供されています。\n\n[ドキュメント](https://docs.gitlab.com/user/project/repository/code_suggestions/repository_xray/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17756)\n\n\u003Cimg src=\"https://about.gitlab.com/images/17_11/eclipse-beta.png\">\n\n### GitLab Duoコードレビューによる自動レビュー\n\n> SaaS: Premium、Ultimate、Duo Enterprise\u003Cbr>\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nDuoコードレビューは、コードレビューのプロセスで効果的なフィードバックを提供しますが、これまでは各マージリクエストごとに手動でレビューをリクエストする必要がありました。\n\n今回、プロジェクトのマージリクエスト設定を変更することで、Duoコードレビューを自動的に実行できるようになりました。自動レビュー機能を有効にすると、以下の場合を除き、すべてのマージリクエストに対してDuoコードレビューが自動でレビューを行います。\n\n* マージリクエストがドラフトとしてマークされている場合  \n* マージリクエストに変更が含まれていない場合\n\n自動レビュー機能により、プロジェクト内のすべてのコードが確実にレビューされ、コードベース全体のコード品質が継続的に改善されます。\n\n[ドキュメント](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/#automatic-reviews-from-gitlab-duo)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/506537)\n\n\u003Cimg src=\"https://about.gitlab.com/images/18_0/create-auto-dcr.png\">\n\n### コード提案にプロンプトキャッシュを導入\n\n> SaaS: Premium、Ultimate、Duo Pro、Duo Enterprise\\\n> Self-Managed: Premium、Ultimate、Duo Pro、Duo Enterprise  \n\nコード提案にプロンプトキャッシュ機能が追加されました。この機能により、キャッシュされたプロンプトや入力データの再処理が不要になるため、コード補完の待機時間が大幅に短縮されます。キャッシュデータは永続ストレージに保存されることはなく、必要に応じてGitLab Duoの設定でプロンプトキャッシュを無効にすることも可能です。\n\n[ドキュメント](https://docs.gitlab.com/user/project/repository/code_suggestions/#prompt-caching)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17489)\n\n\u003Cimg src=\"https://about.gitlab.com/images/18_0/prompt-cache.png\">\n\n### コンテキストをより考慮したコードレビュー\n\n> SaaS: Premium、Ultimate、Duo Enterprise\u003Cbr>\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nコードレビューがより広範なコンテキスト情報を活用できるようになり、分析結果の精度が向上しました。主な改善点は以下のとおりです。\n\n* マージリクエストのタイトルと説明を含めることで、変更の目的をより正確に把握できるようになりました。  \n* すべての差分を一度に分析することで、ファイル間の関連性を認識し、誤検出を削減します。  \n* 変更されたファイル全体の内容を読み込み、修正が既存のコードパターンにどのように適合するかを理解できるようになりました。\n\nこれらの機能強化により、不正確な提案が減少し、より関連性が高く高品質なコードレビューが可能になりました。\n\n[ドキュメント](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/#have-gitlab-duo-review-your-code)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/466684)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/510266) \n\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/532653)\n\n\u003Cimg src=\"https://about.gitlab.com/images/18_0/create-dcr-improved-context.png\">\n\n## GitLab 18.0のリリースに含まれるその他の改善点\n\n### グループとプレースホルダーユーザーの削除\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab 18.0では、トップレベルグループを削除すると、そのグループに関連付けられたプレースホルダーユーザーも同時に削除されるようになりました。プレースホルダーユーザーが他のプロジェクトに関連付けられている場合は、トップレベルグループからのみ削除され、他のプロジェクトには残ります。これにより、他のプロジェクトの履歴や属性を損なうことなく、不要なプレースホルダーユーザーを整理できるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/project/import/#placeholder-user-deletion)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/473256)\n\n### Slackアプリ用GitLabで複数のワークスペースに対応\n\n> SaaS: -\u003Cbr>\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab Self-ManagedおよびGitLab Dedicatedのお客様向けに、GitLab for Slackアプリで複数のワークスペースを利用できるようになりました。この機能により、複数のSlackワークスペースを持つ組織でも、すべてのワークスペースでGitLabとの連携をスムーズに維持できます。複数のワークスペースを有効にするには、GitLab for Slackアプリを[非公開配布アプリ](https://api.slack.com/distribution#unlisted-distributed-apps)として設定してください。\n\n[ドキュメント](https://docs.gitlab.com/administration/settings/slack_app/#enable-support-for-multiple-workspaces)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/424190)\n\n### GitLab Pagesテンプレートの改善\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLabでは、[人気の高い静的サイトジェネレーター用のテンプレート](https://gitlab.com/pages)を提供しています。スコアリングフレームワークでテンプレートを精査し、最も人気のあるものだけを厳選しました。\n\nGitLab Pagesで利用可能なテンプレートが改良されたことにより、ウェブサイト制作の工程がよりスムーズになりました。テンプレートを活用すれば、技術的な専門知識が限られていてもプロ並みのサイトを立ち上げることができます。改善されたテンプレートは最新のレスポンシブデザインに対応しており、カスタム開発作業の必要もありません。\n\n[ドキュメント](https://docs.gitlab.com/user/project/pages/getting_started/pages_new_project_template/#project-templates)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/13847)\n\n### ワークスペースの共有Kubernetesネームスペース\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\n共有のKubernetesネームスペースにGitLabワークスペースを作成できるようになりました。これにより、ワークスペースごとに新しいネームスペースを作成する必要がなくなり、エージェントに上位のClusterRole権限を付与する必要もなくなります。この機能により、セキュリテイが厳しい環境または制約のある環境でもワークスペースをより容易に導入できるようになり、よりスムーズにスケールできるようになります。\n\n共有のネームスペースを有効にするには、エージェント設定ファイルの`shared_namespace`フィールドを設定し、すべてのワークスペースで使用したいKubernetesネームスペースを指定してください。\n\nこの機能は、[GitLabの共同開発プログラム](https://about.gitlab.com/community/co-create/)を通じて開発され、6人のコミュニティメンバーの協力によって実現しました。皆さまのコントリビュートに感謝します！\n\n[ドキュメント](https://docs.gitlab.com/user/workspace/settings/#shared_namespace)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/12327)\n\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/CXakdRuoGgU?si=indgAnCrTuIhUhcM\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen>\u003C/iframe>\n\n### GitLab Runner 18.0\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab Runner 18.0もリリースされます！GitLab Runnerは、CI/CDジョブを実行し、結果をGitLabインスタンスに送信する、拡張性の高いビルドのエージェントです。GitLabに含まれるオープンソースの継続的インテグレーションサービスであるGitLab CI/CDと連携して動作します。\n\n新機能：\n\n* [GitLab Runnerビルドエラー分類に`ConfigurationError`と`ExitCodeInvalidConfiguration`を新たに追加](https://gitlab.com/gitlab-org/gitlab/-/issues/514297)  \n* [Cloud Storageへのキャッシュアップロードに失敗した場合に、よりわかりやすいクラウドプロバイダーエラーメッセージを表示するよう改善](https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/5527)\n\nバグ修正：\n\n* [GitLab Runnerが、許可されていない場合でもキャッシュされたイメージを使用できてしまう](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/38706)\n\nすべての変更の一覧は、GitLab Runnerの[変更履歴](https://gitlab.com/gitlab-org/gitlab-runner/blob/18-0-stable/CHANGELOG.md)で確認できます。\n\n[ドキュメント](https://docs.gitlab.com/runner/)\n\n### Kubernetes用ダッシュボードのポッド状態表示を改善\n\n> SaaS: Free、Premium、Ultimate\u003Cbr>\n> Self-Managed: Free、Premium、Ultimate\n\nKubernetes用のダッシュボードを使用すると、デプロイされたアプリケーションをモニタリングできます。これまで`CrashLoopBackOff`や`ImagePullBackOff`などのコンテナエラーがあるポッドは「保留中」または「実行中」というステータスで表示されていたため、`kubectl`を使用せずに問題のあるデプロイメントを特定するのが困難でした。\n\nGitLab 18.0からは、UI上のエラー表示が`kubectl`出力と同様に、特定のコンテナのステータスを示すようになりました。これにより、GitLabインターフェイスだけで失敗したポッドをすばやく特定し、トラブルシューティングを行えるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/ci/environments/kubernetes_dashboard/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/525081)\n\n\u003Cimg src=\"https://about.gitlab.com/images/18_0/deploy-improve-pod-status-visualizations.png\">\n\n### セキュリティスキャナーがMRパイプラインに対応\n\nSaaS: Free、Premium、Ultimate\\\nSelf-Managed: Free、Premium、Ultimate\n\n[マージリクエスト（MR）パイプライン](https://docs.gitlab.com/ci/pipelines/merge_request_pipelines/)で[アプリケーションセキュリティテスト（AST）スキャナー](https://docs.gitlab.com/user/application_security/detect/)を実行できるようになりました。パイプラインへの影響を最小限に抑えるため、この機能はオプトインで制御可能です。\n\nこれまでは、スキャナーを有効にする際に使用する[CI/CDテンプレートのエディション（StableかLatest）](https://docs.gitlab.com/user/application_security/detect/roll_out_security_scanning/#template-editions)によって、デフォルトの動作が異なっていました。\n\n* Stableのテンプレートでは、スキャンジョブはブランチパイプラインでのみ実行され、MRパイプラインでは実行されませんでした。  \n* Latestのテンプレートでは、MRが開いている場合はMRパイプラインでスキャンジョブが実行され、関連するMRがない場合はブランチパイプラインで実行されており、この動作を制御することはできませんでした。\n\n今回、新しいオプションとして`AST_ENABLE_MR_PIPELINESが追加され`、MRパイプラインでジョブを実行するかどうかを制御できるようになりました。StableテンプレートとLatestテンプレートのデフォルトの動作は変わりません。\n\n具体例：\n\n* Stableテンプレートでは引き続き、デフォルトでブランチパイプラインでスキャンジョブを実行しますが、`AST_ENABLE_MR_PIPELINES: \"true\"`を設定すると、MRが開いている場合にMRパイプラインを使用できます。  \n* Latestテンプレートでは引き続き、MRが開いている場合はデフォルトでMRパイプラインでスキャンジョブを実行しますが、`AST_ENABLE_MR_PIPELINES: \"false\"`を設定すると、代わりにブランチパイプラインを使用できます。\n\n今回の改善は、API Discovery（`API-Discovery.gitlab-ci.yml`）を除くすべてのセキュリティスキャンテンプレートに適用されます。API Discoveryは現在、MRパイプラインがデフォルトですが、GitLab 18.0では他のStableテンプレートと同様に、デフォルトでブランチパイプラインを使用するように変更されました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/detect/roll_out_security_scanning/#use-security-scanning-tools-with-merge-request-pipelines)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/410880)\n\n### JiraインテグレーションAPIを使用して脆弱性からJiraのイシューを作成する設定が可能に\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nこれまでは、[脆弱性からJiraのイシューを作成](https://docs.gitlab.com/integration/jira/configure/#create-a-jira-issue-for-a-vulnerability)する設定は、プロジェクト設定ページからしか行えませんでした。\n\n今回の更新により、プロジェクト統合APIからも設定できるようになり、セットアップの自動化が可能になりました。\n\n[ドキュメント](https://docs.gitlab.com/api/project_integrations/#jira-issues)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/454574)\n\n### 再検出された脆弱性のトレーサビリティの向上\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nこれまで、解決済みの脆弱性が再検出されてステータスが変更された場合、脆弱性の詳細にはいつ、なぜステータスが変更されたかを示す情報が含まれていませんでした。\n\n解決済みの脆弱性が新しいスキャンで再び検出されてステータスが変更された場合、GitLabはその脆弱性の履歴にシステムメモを自動的に追加するようになりました。これにより、ユーザーは脆弱性のステータスが変更された経緯を明確に把握できるようになります。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/vulnerabilities/#vulnerability-status-values)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/523452)\n\n### コンプライアンスプロジェクトレポートでアーカイブされたプロジェクトの表示とフィルタリングが可能に\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nコンプライアンスプロジェクトレポートでは、グループまたはサブグループ内の各プロジェクトに適用されているコンプライアンスフレームワークを確認することができます。\n\nただし、これまでのレポートでは、プロジェクトがアーカイブされているかどうかを表示する機能がなく、アクティブなプロジェクトとアーカイブ済みプロジェクトの両方のコンプライアンス管理に必要な情報が十分ではありませんでした。\n\nそこで今回、プロジェクトがアーカイブされているかどうかを示すインジケータが追加されました。これにより、コンプライアンスフレームワークを確認する際に、プロジェクトがアクティブかアーカイブ済みかを問わず、コンプライアンス状況をより明確に把握できるようになりました。\n\nこの機能には以下が含まれます。\n\n* コンプライアンスプロジェクトレポートの各プロジェクトに、アーカイブ済みかどうかを示すステータスバッジを表示  \n* アーカイブ済み、アーカイブされていない、すべてのプロジェクトを切り替えるフィルター\n\n[ドキュメント](https://docs.gitlab.com/user/compliance/compliance_center/compliance_projects_report/#filter-the-compliance-projects-report)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/500520)\n\n### GitLabユーザー名を使用したLDAP認証\n\n> SaaS: -\u003Cbr>\n> Self-Managed: Premium、Ultimate\n\nLDAPユーザーは、GitLabユーザー名を使用してリクエストを認証できるようになりました。これまでは、GitLabユーザー名がLDAPユーザー名と一致しない場合、GitLabは認証エラーを返していました。今回の変更により、承認ワークフローに影響を与えることなく、GitLabシステムとLDAPシステムで異なるユーザー名の命名規則を採用できるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/administration/auth/ldap/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/215357)\n\n### カスタムロールの新しい権限\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\n[保護環境を管理](https://gitlab.com/gitlab-org/gitlab/-/issues/471385)する権限をカスタムロールに設定できるようになりました。カスタムロールを使用すれば、ユーザーに対して、タスクの完了に必要な特定の権限のみを付与できます。これによりグループのニーズに合わせてロールを定義できるため、オーナーまたはメンテナーロールが必要なユーザー数を減らすことができます。\n\n[ドキュメント](https://docs.gitlab.com/user/custom_roles/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/14746)\n\n### ユーザーネームスペースのプロジェクトにも削除保留機能を追加\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nユーザーネームスペース（個人プロジェクト）のプロジェクトでも、プロジェクト削除保留機能が利用できるようになりました。誤削除からデータを守るこの安全機能は、これまではグループプロジェクトでしか利用できませんでした。今回の更新により、ユーザーネームスペースでプロジェクトを削除しても、すぐに完全に削除されるのではなく、インスタンスの設定期間（GitLab.comでは7日間）は「削除保留中」の状態になります。これにより、期間内であれば、必要に応じてプロジェクトを元に戻すことが可能になりました。\n\nユーザーの皆さまがより安心して個人プロジェクトを管理できるよう設計された保護機能です。\n\n[ドキュメント](https://docs.gitlab.com/user/project/working_with_projects/#delayed-project-deletion)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/536244)\n\n### 破壊的な変更を伴うGitLabチャート9.0のリリース\n\n> SaaS: -\u003Cbr>\n> Self-Managed: Free、Premium、Ultimate\n\n* [破壊的な変更](https://docs.gitlab.com/update/deprecations/#postgresql-14-and-15-no-longer-supported)：PostgreSQL 14と15のサポートが削除されました。GitLabチャート9.0にアップグレードする前に、PostgreSQL 16にアップグレードされていることを確認してください。  \n* [破壊的な変更](https://docs.gitlab.com/update/deprecations/#major-update-of-the-prometheus-subchart)：バンドルのPrometheusチャートが15.3から27.11に更新されました。Prometheusチャートのアップグレードに伴い、Prometheusバージョンも2.38から3.0に更新されました。このアップグレードを実行するには、手動での設定が必要です。Alertmanager、Node Exporter、Pushgatewayのいずれかが有効になっている場合は、Helm値も更新する必要があります。詳細については、[移行ガイド](https://docs.gitlab.com/charts/releases/9_0/#prometheus-upgrade)を参照してください。  \n* [破壊的な変更](https://docs.gitlab.com/update/deprecations/#fallback-support-for-gitlab-nginx-chart-controller-image-v131)：デフォルトのNGINXコントローラーイメージがバージョン1.3.1から1.11.2に更新されました。GitLab NGINXチャートを使用し、独自のNGINX用RBACルールを設定している場合は、新しいRBACルールが必要となります。詳細については、[アップグレードガイド](https://docs.gitlab.com/charts/releases/8_0/#upgrade-to-86x-851-843-836)を参照してください。\n\n[ドキュメント](https://docs.gitlab.com/charts/releases/9_0/)\\\n[イシュー](https://gitlab.com/gitlab-org/charts/gitlab/-/issues/5927)\n\n### GitLab Dedicated向けに内部リリース機能を提供開始\n\n> SaaS: -\u003Cbr>\n> Self-Managed: Ultimate\n\nGitLab Dedicatedを選択される組織の多くは、厳格なセキュリティ要件やコンプライアンス義務を満たすために、開発環境における最高レベルの保護を必要としています。このたび、「内部リリース」という新しいプライベートリリース機能の提供を開始しました。致命的な脆弱性が一般に公開される前にGitLab Dedicatedインスタンスに修正を適用できるようになり、GitLab Dedicatedのお客様をリスクから保護します。この新機能は、GitLab.comでの対応と並行し、GitLabで発見された致命的な脆弱性に対して即時の保護を提供するものです。この新しいプロセスは、お客様側での操作は必要ありません。\n\n[ドキュメント](https://handbook.gitlab.com/handbook/engineering/releases/internal-releases/)\\\n[エピック](https://gitlab.com/groups/gitlab-com/gl-infra/-/epics/1201)\n\n### グループとプロジェクトのREST APIに新しい`アクティブ`パラメータを追加\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nグループとプロジェクトのREST APIに新しい`アクティブ`パラメータが追加されました。これにより、ステータスに基づいたグループのフィルタリングが簡素化されます。`true`に設定すると、アーカイブされていないグループ、または削除マークが付いていないプロジェクトのみが返されます。`false`に設定すると、アーカイブされたグループ、または削除マークが付いているプロジェクトのみが返されます。パラメータを指定しない場合、フィルタリングは適用されません。この機能強化により、簡単なAPIコールで特定のステータスを持つグループやプロジェクトだけを選び出せるようになり、作業プロセス全体をより効率的に管理できるようになります。\n\nこのパラメータをプロジェクトAPIに追加してくれた[@dagaranupam](https://gitlab.com/dagaranupam)さんに感謝します！\n\n[ドキュメント](https://docs.gitlab.com/api/projects/#list-projects)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/526206)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/526205)\n\n### GitLab.comでのコントリビュートの再アサイン時にEnterpriseユーザーのみを表示\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\n今回のリリースでは、プレースホルダーユーザーマッピング体験を向上させました。具体的には、ユーザー選択ドロップダウンの表示範囲を、トップレベルグループに関連付けられた[Enterpriseユーザー](https://docs.gitlab.com/user/enterprise_user/)に絞り込むように改善しました。これまで、GitLab.comへのインポート後にユーザーのコントリビュートを再アサインすると、プラットフォーム上のすべてのアクティブユーザーがドロップダウンリストに表示されていました。この仕様では、特にSCIMプロビジョニングでユーザー名が変更されている場合などは、正しいユーザーを特定するのが困難でした。今回の変更により、トップレベルグループでEnterpriseユーザー機能が有効になっている場合、ドロップダウンリストには組織が要求したユーザーのみが表示されるようになり、ユーザーの再アサイン時に発生するエラーの可能性が大幅に低減されます。同様の絞り込みがCSVベースの再アサインにも適用されるため、組織外のユーザーへの誤ったアサインを防ぐことができます。\n\n[ドキュメント](https://docs.gitlab.com/user/group/import/direct_transfer_migrations/#user-contribution-and-membership-mapping)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/510673)\n\n### GitLabクエリ言語ビューの機能強化\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLabクエリ言語（GLQL）ビューが大幅に改善されました。新しく追加された機能は以下のとおりです。\n\n* すべての日付型で`>=`および`\u003C=`の条件指定が可能に  \n* ビューの「ビューアクション」ドロップダウンが追加  \n* 「**再読み込み**」アクションが利用可能に  \n* フィールドエイリアス対応  \n* GLQLテーブルの列でカスタム名にエイリアス設定が可能に\n\nこの機能強化およびGLQLビュー全般に関するフィードバックは、[イシュー509791](https://gitlab.com/gitlab-org/gitlab/-/issues/509791)からお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/user/glql/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15008)\n\n### マージリクエストからワークスペースを作成\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\n新しい「**ワークスペースで開く**」オプションを使用して、マージリクエストから直接ワークスペースを作成できるようになりました。この機能は、マージリクエストのブランチとコンテキストを使用してワークスペースを自動的に構成し、以下のことを可能にするものです。\n\n* 完全に設定された環境でコード変更をレビュー  \n* マージリクエストブランチでテストを実行し、機能を検証  \n* ローカル環境の設定なしでマージリクエストに修正を追加\n\n[ドキュメント](https://docs.gitlab.com/user/workspace/configuration/#create-a-workspace)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/426568)\n\n### ファイルをターゲットとするオープンマージリクエストの表示\n\n> SaaS: Free、Premium、Ultimate\u003Cbr> \n> Self-Managed: Free、Premium、Ultimate\n>\n> これまでは、コードファイルを編集する際に、他のブランチで同じファイルを変更している可能性のあるユーザーの動向を把握することはできませんでした。このため、マージの競合や作業の重複、非効率的なコラボレーションが生じていました。\n\n今回の変更により、リポジトリで表示しているファイルを変更しているすべてのオープンマージリクエストを簡単に特定できるようになりました。この機能は次のような場面で役立ちます。\n\n* マージコンフリクトを事前に特定する  \n* すでに進行中の作業の重複を回避する  \n* 進行中の変更を可視化してコラボレーションを強化する\n\nファイルを変更しているオープンマージリクエストの数がバッジに表示され、その上にカーソルを合わせると、該当するマージリクエストのリストがポップオーバーで表示されます。\n\n[ドキュメント](https://docs.gitlab.com/user/project/repository/files/#view-open-merge-requests-for-a-file)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/448868)\n\n\u003Cimg src=\"https://about.gitlab.com/images/18_0/mr-open-workspace.png\">\n\n### 新しい「CI/CDの分析」表示機能の限定提供を開始\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\n「CI/CDの分析」のデザインが改良され、開発チームがパイプラインのパフォーマンスと信頼性を新しい方法で分析、監視、最適化できるようになりました。デベロッパーは、GitLabの操作画面に表示される直感的なグラフによってパフォーマンスの傾向や信頼性に関するメトリクスを確認できます。これらの分析情報をプロジェクトリポジトリに埋め込むことで、デベロッパーの作業の流れを中断させる頭の切り替えが不要になります。そして、チームは、生産性を低下させるパイプラインのボトルネックを特定して対処することができます。この機能強化により、開発サイクルの高速化、コラボレーションの向上が実現されるだけでなく、具体的な分析結果に基づき、GitLabのCI/CD環境を最適化するための信頼できる材料を得ることができます。\n\n[ドキュメント](https://docs.gitlab.com/user/analytics/ci_cd_analytics/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/444468)\n\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/78Nxbem9OAk?si=KTKVK7EsiW9E4Zxm\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen>\u003C/iframe>\n\n### イベントデータ収集\n\n> SaaS: -\u003Cbr>\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab 18.0では、GitLab Self-ManagedおよびGitLab Dedicatedインスタンスからイベントレベルの製品使用状況データの収集が有効にされます。集計データとは異なり、イベントレベルのデータは製品利用の実態をより正確に把握するための情報源となります。これにより、プラットフォーム上のユーザーエクスペリエンスを向上させ、機能の利用率を高めることができます。データ共有設定を調整する方法の詳細については、ドキュメントを参照してください。\n\n[ドキュメント](https://docs.gitlab.com/administration/settings/event_data/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/510333)\n\n### 脆弱性レポートからイシューへ脆弱性を一括追加\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\n今回リリースでは、脆弱性レポートから新規または既存のGitLabイシューに複数の脆弱性を一括追加できるようになりました。これにより、複数のイシューと脆弱性を関連付けることが可能になります。さらに、関連する脆弱性がイシューページに表示されるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/vulnerability_report/#add-vulnerabilities-to-an-existing-issue)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/13216)\n\n### ライセンス承認ルールからパッケージを除外\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nマージリクエスト承認ポリシーに追加されたライセンス承認ポリシーの新機能により、法務チームやコンプライアンスチームは、特定のライセンスを使用できるパッケージをより細かく制御できるようになりました。これにより、組織のポリシーによって通常ブロックされるライセンスを使用している場合でも、事前に承認されたパッケージの例外を作成できるようになります。\n\nこれまでのライセンス承認ポリシーでは、AGPL-3.0などのライセンスをブロックした場合、組織内のすべてのパッケージでそのライセンスがブロックされていました。これにより、次のような場面で問題が発生していました。\n\n* 法務チームが、通常は制限されているライセンスであっても特定のパッケージを事前に承認している場合  \n* 数百件ものプロジェクトで同じパッケージを使用する必要がある場合  \n* チームごとに異なるライセンスの例外が必要な場合\n\n今回のリリースでは、厳格なライセンスガバナンスを維持しつつ必要な例外を許可できるようになり、承認のボトルネックや手作業でのレビューを大幅に削減できます。たとえば、以下のような設定が可能です。\n\n* パッケージURL（PURL）形式を使用して、ライセンス承認ルールにパッケージ固有の例外を定義  \n* 通常は制限されているライセンスでも、特定のパッケージ（またはパッケージのバージョン）に限って使用を許可  \n* 特定のパッケージ（またはパッケージのバージョン）に対し、一般的に許可されているライセンスの使用をブロック\n\n例外を追加するには、ライセンス承認ポリシーの作成または編集時に次のワークフローに従ってください。\n\n1. グループで**セキュリティ** > **ポリシー**に移動します。  \n2. ライセンス承認ポリシーを作成または編集します。  \n3. ビジュアルエディタで新しいパッケージ例外オプションを見つけるか、YAMLモードで構成します。  \n4. ライセンスに対して、許可リストまたは拒否リストを選択します。  \n5. ポリシーに特定のライセンスを追加します。\n6. ライセンスごとにPURL形式でパッケージ例外を定義します。\n\n例：`pkg:npm/@angular/animation@12.3.1`\n\n7. ライセンスルールにこれらのパッケージを含めるか除外するかを指定します。\n\nこれらの設定後は、ポリシーが定義された例外を適切に処理しながらライセンスルールを適用するため、組織全体でライセンスコンプライアンスをきめ細かく制御できるようになります。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/policies/merge_request_approval_policies/#license_finding-rule-type)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/10203)\n\n\u003Cimg src=\"https://about.gitlab.com/images/18_0/license-exceptions-mr-approval-policy.png\">\n\n### ユーザー招待機能の無効化\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nグループやプロジェクトにメンバーを招待する機能を制限できるようになりました。\n\n* GitLab.comでは、Enterpriseユーザーを持つグループのオーナーがこの制限を設定でき、設定はトップレベルグループ内のサブグループやプロジェクトに適用されます。この招待制限が設定されると、どのユーザーも新しいメンバーを招待することはできません。  \n* GitLab Self-Managedの場合、この制限設定は管理者によって行われ、インスタンス全体に適用されます。その後も、管理者は引き続きユーザーを直接招待できます。\n\nこの機能は、組織がメンバーシップアクセスを厳格に管理したい場合に便利です。\n\n[ドキュメント](https://docs.gitlab.com/administration/settings/visibility_and_access_controls/#disable-user-invitations)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/19618)\n\n\u003Cimg src=\"https://about.gitlab.com/images/18_0/disable_invitations.png\">\n\n### ジョブトークンのきめ細かい権限管理がベータ版として登場\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nパイプラインセキュリティがさらに柔軟になりました。ジョブトークンはパイプライン内でリソースにアクセスするための一時的な認証情報です。トークンはこれまで、ユーザーから完全な権限を継承していたため、不必要に広範なアクセスが付与される事態が数多く発生していました。\n\n新しく追加された[ジョブトークンのきめ細かい権限](https://docs.gitlab.com/ci/jobs/fine_grained_permissions/)ベータ機能により、プロジェクト内でジョブトークンがアクセスできる特定のリソースを正確に制御できるようになりました。これにより、CI/CDワークフローで最小権限の原則を実装し、各ジョブに対してタスクの実行に必要な最小アクセス権のみを設定できるようになります。\n\nこの機能について、コミュニティからのフィードバックをぜひお寄せください。ご質問や実装経験の共有、改善点に関して当社チームへのご意見がある場合は、[フィードバックイシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/519575)をご確認ください。\n\n[ドキュメント](https://docs.gitlab.com/ci/jobs/fine_grained_permissions/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16199)\n\n\u003Cimg src=\"https://about.gitlab.com/images/18_0/sscs-authz-fine-grained-job-tokens.png\">\n\n### ユーザーセッション最大長の制限\n\n> SaaS: -\u003Cbr>\n> Self-Managed: Free、Premium、Ultimate\n\n管理者は、ユーザーセッションの最大有効期間を「最初のサインイン」から計算するか、または「最後のアクティビティー」から計算するかを選択できるになりました。ユーザーにはセッションが終了することが通知されますが、セッションの有効期限を変更したり、セッションを延長したりすることはできません。この機能はデフォルトで無効になっています。\n\nこの場を借りて、コントリビュートしてくれた[John Parent](https://gitlab.kitware.com/john.parent)さんに感謝します！\n\n[ドキュメント](https://docs.gitlab.com/administration/settings/account_and_limit_settings/#set-sessions-to-expire-from-creation-date)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/395038)\n\n### SAML証明書のSHA256サポート\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nGitLabは、グループSAML認証におけるSHA1およびSHA256の証明書フィンガープリントを自動的に検出し、サポートするようになりました。これにより、既存のSHA1フィンガープリントとの下位互換性が維持されるほか、より安全なSHA256フィンガープリントのサポートが追加されます。今回のアップグレードは、SHA256をデフォルト設定とする次世代ruby-saml 2.xに対応するための必須の対応となります。\n\n[ドキュメント](https://docs.gitlab.com/integration/saml/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/524624)\n\n### すべてのユーザーが利用できる削除保留機能\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nプロジェクトとグループの削除保留機能が、Freeプランを含むすべてのGitLabユーザーに提供されるようになりました。この重要なセキュリティ機能は、削除されたグループやプロジェクトが完全に削除される前に、猶予期間（GitLab.comでは7日間）を設けるものです。この機能により、誤って削除した場合でも複雑な手順を踏まずに簡単に復元できるようになります。\n\nデータ保護を基盤機能として組み込むことで、大切なデータを消失リスクから守ります。\n\n[ドキュメント](https://docs.gitlab.com/administration/settings/visibility_and_access_controls/#deletion-protection)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/526405)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17208)\n\n\u003Cimg src=\"https://about.gitlab.com/images/18_0/tenant_scale_deletion_protcection_all_tiers.png\">\n\n### グループ、プロジェクト、ユーザーAPIのレート制限\n\n> SaaS: Free、Premium、Ultimate\n> Self-Managed: -\n\nすべてのユーザーに対してプラットフォームの安定性とパフォーマンスを向上させることを目的として、プロジェクト、グループ、ユーザーごとにAPIレート制限を追加しました。今回の変更は、当社のサービスに影響を与えているAPI通信の増加に対応するものです。\n\nこの制限は平均的な使用パターンに基づいて慎重に設定されており、ほとんどのユースケースにおいて十分な容量を提供するよう設計されています。制限を超えると、「429 Too Many Requests」（リクエスト過多）という応答が返されます。\n\n特定のレート制限と実装情報の詳細については、[関連のブログ記事をご覧ください](https://about.gitlab.com/blog/rate-limitations-announced-for-projects-groups-and-users-apis/)。\n\n[ドキュメント](https://docs.gitlab.com/user/gitlab_com/#rate-limits-on-gitlabcom)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/461316)\n\n\u003Cbr>\n\u003Cbr>\n\n## 実験的な機能\n\n### スケジュールされたパイプライン実行ポリシー\n\nこの実験的機能を有効にすると、カスタマイズされたCI/CDジョブやスクリプトを使い、定期スケジュールでパイプライン実行ポリシーをトリガーできます。主な特徴は以下のとおりです。\n\n* スケジュールされたパイプラインでは、コンプライアンススクリプト、GitLabまたはサードパーティ製のセキュリティスキャン、その他のカスタムCI/CDジョブを強制実行できます。  \n* セキュリティおよびコンプライアンス要件を確実に満たすためのツールとして、スケジュールされたパイプラインを実行して日次、週次、月次のスケジュールでジョブを実行することができます。  \n* スケジュールされたパイプラインは、プロジェクトの`.gitlab-ci.yml`ファイルにジョブをインジェクトしたり強制したりせず、ダウンストリームのプロジェクトパイプラインに影響を与えません。  \n* 代わりに、これらのパイプラインを使用して、デフォルトブランチを定期的に対象とし、依存関係やプロジェクト構成、その他の要件を確認するといったアクションを実行できます。\n\n実験を有効にするには`policy.yml`ファイルを作成するか、セキュリティポリシープロジェクトの既存の`policy.yml`ファイルを変更して`experiments`属性を追加します。有効にすると、パイプライン実行ポリシーを設定できるようになります。このポリシーには、パイプライン実行ポリシーが適用されているすべてのプロジェクトでカスタムCI/CDジョブを実行するスケジュールが含まれます。\n\nトリガーされるパイプライン実行ポリシーは複数作成できますが、セキュリティポリシープロジェクトごとに設定できるスケジュールされたパイプライン実行ポリシーは1件のみです。\n\n詳細については、[スケジュールされたパイプライン実行ポリシー](https://docs.gitlab.com/user/application_security/policies/scheduled_pipeline_execution_policies/)を参照してください。\n\n\u003Cbr>\n\u003Cbr>\n\n## バグ修正、パフォーマンスの改善、UIの改善\n\nGitLabでは、ユーザーに可能な限り最高の環境をお届けできるよう尽力しています。リリースのたびに、バグを修正し、パフォーマンスを改善し、UIを向上させるためにたゆまぬ努力を続けています。GitLabは、100万人を超えるGitLab.comユーザーをはじめ、GitLabのプラットフォームを利用するすべての人にスムーズでシームレスな体験をお届けすることを約束します。\n\n18.0で提供されたすべてのバグ修正、パフォーマンスの強化、UI改善を確認するには、以下のリンクをクリックしてください。\n\n* [バグ修正](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=type%3A%3Abug&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.0)  \n* [パフォーマンスの改善](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=bug%3A%3Aperformance&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.0)  \n* [UIの改善](https://papercuts.gitlab.com/?milestone=18.0)\n\n\u003Cbr>\n\u003Cbr>\n\n## 非推奨事項\n\n新たに非推奨になった機能、および現在非推奨になっているすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n* [リソースオーナーパスワード認証方式を非推奨化](https://docs.gitlab.com/ee/update/deprecations.html#resource-owner-password-credentials-grant-is-deprecated)\n* [cert-manager Helm チャートをアップデート](https://docs.gitlab.com/ee/update/deprecations.html#cert-manager-helm-chart-update)\n* [カバレッジガイド付きファズテストを非推奨化](https://docs.gitlab.com/ee/update/deprecations.html#coverage-guided-fuzz-testing-is-deprecated)\n\n\u003Cbr>\n\u003Cbr>\n\n## 削除された機能と破壊的な変更\n\n削除されたすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n* [APIディスカバリーはデフォルトでブランチパイプラインを使用するように](https://docs.gitlab.com/ee/update/deprecations.html#api-discovery-will-use-branch-pipelines-by-default)  \n* [アプリケーションセキュリティテスト（AST）アナライザーのメジャーバージョンをアップデート](https://docs.gitlab.com/ee/update/deprecations.html#application-security-testing-analyzers-major-version-update)  \n* [「今後」および「開始済み」マイルストーンフィルタの動作を変更](https://docs.gitlab.com/ee/update/deprecations.html#behavior-change-for-upcoming-and-started-milestone-filters)  \n* [CI/CDジョブトークン - 「認証されたグループとプロジェクト」許可リストの強制適用](https://docs.gitlab.com/ee/update/deprecations.html#cicd-job-token-authorized-groups-and-projects-allowlist-enforcement)  \n* [CI/CDジョブトークン - 「プロジェクトからのアクセス制限」設定を削除](https://docs.gitlab.com/ee/update/deprecations.html#cicd-job-token-limit-access-from-your-project-setting-removal)  \n* [DASTのdast_devtools_api_timeoutのデフォルト値引き下げ](https://docs.gitlab.com/ee/update/deprecations.html#dast-dast_devtools_api_timeout-will-have-a-lower-default-value)  \n* [依存関係プロキシトークンのスコープ強制](https://docs.gitlab.com/ee/update/deprecations.html#dependency-proxy-token-scope-enforcement)  \n* [Terraform CI/CD テンプレートを非推奨化](https://docs.gitlab.com/ee/update/deprecations.html#deprecate-terraform-cicd-templates)  \n* [ライセンスメタデータ形式 V1 を非推奨化](https://docs.gitlab.com/ee/update/deprecations.html#deprecate-license-metadata-format-v1)  \n* [GraphQL APIのNamespaceProjectSortEnumにおけるSTORAGE列挙型を非推奨化](https://docs.gitlab.com/ee/update/deprecations.html#deprecation-of-storage-enum-in-namespaceprojectsortenum-graphql-api)  \n* [GraphQL APIのProjectMonthlyUsageType におけるnameフィールドを非推奨化](https://docs.gitlab.com/ee/update/deprecations.html#deprecation-of-name-field-in-projectmonthlyusagetype-graphql-api)  \n* [GitLab NGINXチャートコントローラーイメージv1.3.1のフォールバックサポート](https://docs.gitlab.com/ee/update/deprecations.html#fallback-support-for-gitlab-nginx-chart-controller-image-v131)  \n* [Gitalyストレージを設定するためのgit_data_dirs](https://docs.gitlab.com/ee/update/deprecations.html#git_data_dirs-for-configuring-gitaly-storages)  \n* [従来のWeb IDEを非推奨化](https://docs.gitlab.com/ee/update/deprecations.html#legacy-web-ide-is-deprecated)  \n* [スキャン実行ポリシーごとに許可されるアクションの数を制限](https://docs.gitlab.com/ee/update/deprecations.html#limit-number-of-scan-execution-policy-actions-allowed-per-policy)  \n* [スキャン実行ポリシーにおけるscanアクションを制限](https://docs.gitlab.com/ee/update/deprecations.html#limited-scan-actions-in-a-scan-execution-policy)  \n* [Prometheusサブチャートのメジャーアップデート](https://docs.gitlab.com/ee/update/deprecations.html#major-update-of-the-prometheus-subchart)  \n* [GitLab.comでの脆弱性データ保持期間の新しい制限](https://docs.gitlab.com/ee/update/deprecations.html#new-data-retention-limits-for-vulnerabilities-on-gitlabcom)  \n* [PostgreSQL 14および15はサポートされなくなります](https://docs.gitlab.com/ee/update/deprecations.html#postgresql-14-and-15-no-longer-supported)  \n* [Raspberry Pi 32 ビットパッケージを非推奨化](https://docs.gitlab.com/ee/update/deprecations.html#raspberry-pi-32-bit-packages-are-deprecated)  \n* [allowed_pull_policies に含まれないコンテナイメージのプルポリシーを拒否](https://docs.gitlab.com/ee/update/deprecations.html#reject-container-image-pull-policies-not-in-allowed_pull_policies)  \n* [duoProAssignedUsersCount GraphQL フィールドを削除](https://docs.gitlab.com/ee/update/deprecations.html#remove-duoproassigneduserscount-graphql-field)  \n* [GraphQL フィールドadd_on_purchaseをadd_on_purchasesに置き換え](https://docs.gitlab.com/ee/update/deprecations.html#replace-add_on_purchase-graphql-field-with-add_on_purchases)  \n* ネームスペース[のGraphQL フィールドadd_on_purchaseをadd_on_purchasesに置き換え](https://docs.gitlab.com/ee/update/deprecations.html#replace-namespace-add_on_purchase-graphql-field-with-add_on_purchases)  \n* [SUSE Linux Enterprise Server 15 SP2をサポート](https://docs.gitlab.com/ee/update/deprecations.html#support-for-suse-linux-enterprise-server-15-sp2)  \n* [ciJobTokenScopeRemoveProjectのGraphQL 引数directionを非推奨化](https://docs.gitlab.com/ee/update/deprecations.html#the-direction-graphql-argument-for-cijobtokenscoperemoveproject-is-deprecated)  \n* [APIでの注釈の機密性切り替え](https://docs.gitlab.com/ee/update/deprecations.html#toggle-notes-confidentiality-on-apis)\n\n### 変更履歴\n\n変更内容をすべて表示するには、次のページから変更履歴を確認してください。\n\n* [GitLab](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/CHANGELOG.md)  \n* [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/blob/main/CHANGELOG.md)  \n* [VS CodeのGitLabワークフロー](https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/main/CHANGELOG.md)  \n* [GitLab CLI](https://gitlab.com/gitlab-org/cli/-/releases)\n\n### インストール\n\nGitLabを新規にインストールする場合は、[GitLabのダウンロードページ](https://about.gitlab.com/ja-jp/install/)をご覧ください。\n\n### 更新事項\n\n[更新ページ](https://about.gitlab.com/ja-jp/update/)をご覧ください。\n\n### ご不明な点がある場合\n\nご質問やご意見をお聞かせください。本リリースについてご不明な点がある場合は、[GitLabフォーラム](https://forum.gitlab.com/)にアクセスして質問を投稿してください。\n\n### GitLabサブスクリプションプラン\n\n* [Free](https://about.gitlab.com/pricing/)\\\n  ユーザー向けの永久無料機能を提供  \n* [Premium](https://about.gitlab.com/pricing/premium/)\\\n  チームの生産性と調整を強化  \n* [Ultimate](https://about.gitlab.com/pricing/ultimate/)\\\n  組織全体のセキュリティ、コンプライアンス、プランニングに対応\n\nGitLabのすべての機能を[無料トライアル](https://about.gitlab.com/ja-jp/free-trial/) でお試しいただけます。  \n\n\u003Cbr>\n\u003Cbr>\n\n*監修：ソリス ジェレズ / Jerez Solis [@jerezs](https://gitlab.com/jerezs)\u003Cbr>\n（GitLab合同会社 ソリューションアーキテクト本部 ソリューションアーキテクト）*\n\n### 過去の日本語リリース情報\n\n* [GitLab 18.0](https://about.gitlab.com/ja-jp/blog/gitlab-18-0-release/)\n* [GitLab 17.11](https://about.gitlab.com/ja-jp/blog/gitlab-17-11-release/)\n* [GitLab 17.10](https://about.gitlab.com/ja-jp/blog/gitlab-17-10-release/)\n* [GitLab 17.9](https://about.gitlab.com/ja-jp/blog/gitlab-17-9-release/)\n* [GitLab 17.8](https://about.gitlab.com/ja-jp/blog/gitlab-17-8-release/)\n* [GitLab 17.7](https://about.gitlab.com/ja-jp/blog/gitlab-17-7-release/)\n* [GitLab 17.6](https://about.gitlab.com/ja-jp/blog/gitlab-17-6-release/)\n* [GitLab 17.5](https://about.gitlab.com/ja-jp/blog/gitlab-17-5-released/)  \n* [GitLab 17.4](https://about.gitlab.com/ja-jp/blog/gitlab-17-4-released/)  \n* [GitLab 17.3](https://about.gitlab.com/ja-jp/blog/gitlab-17-3-released/)  \n* [GitLab 17.2](https://about.gitlab.com/ja-jp/blog/gitlab-17-2-released/)  \n* [GitLab 17.1](https://about.gitlab.com/ja-jp/blog/gitlab-17-1-released/)  \n* [GitLab 16.11](https://about.gitlab.com/ja-jp/blog/gitlab-16-11-released/)",[771],"2025-05-19","2025-05-15",[748,900,681,9],{"slug":923,"featured":91,"template":685},"gitlab-18-0-release","content:ja-jp:blog:gitlab-18-0-release.yml","Gitlab 18 0 Release","ja-jp/blog/gitlab-18-0-release.yml","ja-jp/blog/gitlab-18-0-release",{"_path":929,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":930,"content":933,"config":940,"_id":942,"_type":14,"title":943,"_source":16,"_file":944,"_stem":945,"_extension":19},"/ja-jp/blog/gitlab-18-01-release",{"noIndex":6,"title":931,"description":932},"GitLab 18.1 リリース","GitLab 18.1でリリースした最新機能をご紹介します。",{"heroImage":934,"body":935,"authors":936,"updatedDate":937,"date":938,"title":931,"tags":939,"description":932,"category":681},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750396128/vak5nlffgockma115495.png","本ブログは、[GitLab 18.1 Release](https://about.gitlab.com/releases/2025/06/19/gitlab-18-1-released/)の抄訳です。内容に相違がある場合は、原文が優先されます。\n\n## Maven仮想レジストリ（ベータ版）とGitLab Duoコードレビュー搭載のGitLab 18.1リリース\n\nこのたび、GitLab 18.1のリリースを発表しました。このリリースでは、Maven仮想レジストリ（ベータ版）、GitLab Duoコードレビュー、漏洩パスワードの検出、SLSAレベル1準拠を実現するCI/CDコンポーネントなど、さまざまな機能が追加されました。\n\nこれらの機能は、今回のリリースに含まれる110件以上の改善点のほんの一部です。この記事では、お役に立つアップデートをすべてご紹介していますので、ぜひ最後までお読みください。\n\nGitLab 18.1には、GitLabコミュニティのユーザーから311件ものコントリビュートがありました。ありがとうございました！GitLabは[誰もがコントリビュートできる](https://about.gitlab.com/community/contribute/)プラットフォームであり、今回のリリースもユーザーのみなさまの協力なしには実現しませんでした。\n\n来月のリリースで予定されている内容を先取りするには、[今後のリリースページ](https://about.gitlab.com/upcoming-releases/)をご覧ください。\n\n[GitLab 18.1のリリースでは、Maven仮想レジストリ（ベータ版）とGitLab Duoコードレビューが追加されました。クリックしてSNSで共有しましょう！](http://twitter.com/share?text=GitLab+18.1%E3%81%AE%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%A7%E3%81%AF%E3%80%81Maven%E4%BB%AE%E6%83%B3%E3%83%AC%E3%82%B8%E3%82%B9%E3%83%88%E3%83%AA%EF%BC%88%E3%83%99%E3%83%BC%E3%82%BF%E7%89%88%EF%BC%89%E3%81%A8GitLab+Duo%E3%82%B3%E3%83%BC%E3%83%89%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%8C%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%97%E3%81%A6SNS%E3%81%A7%E5%85%B1%E6%9C%89%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%EF%BC%81&url=https://about.gitlab.com/ja-jp/blog/gitlab-18-1-release/&hashtags=)\n\n## 今月の[注目コントリビューター](https://contributors.gitlab.com/docs/notable-contributors)は[](https://gitlab.com/karras)[Chaitanya Sonwane](https://gitlab.com/chaitanyason9)さんです\n\n\u003Cimg src=\"https://about.gitlab.com/images/notable-contributor-logo.svg\">\n\nChaitanya Sonwaneさんは、継続的な認証機能の強化により、GitLabのセキュリティ機能向上に貢献しています。[2025年に13件のコントリビュートがマージされ](https://contributors.gitlab.com/users/chaitanyason9?fromDate=2025-01-01&toDate=2025-12-31)、認証情報インベントリのフィルタリング、サービスアカウント管理、作業アイテムの使いやすさが向上しました。以前には[GitLab 17.11の主要機能](https://about.gitlab.com/releases/2025/04/17/gitlab-17-11-released/#token-statistics-for-service-account-management)としてサービスアカウントのトークン統計情報をひと目で確認できる機能を手がけ、サービスアカウントの管理を容易にする「一目でわかる」情報を提供しました。Chaitanyaさんは現在、[作業アイテムリストのソート設定をコンテキスト固有にする改善](https://gitlab.com/gitlab-org/gitlab/-/issues/503587)に取り組み、GitLabの製品計画におけるユーザーエクスペリエンスをさらに向上させています。\n\nChaitanyaさんの活躍により、GitLabを利用する組織のセキュリティが強化され、サービスアカウントの使用状況がプロジェクト全体で把握しやすくなりました。現在では、チームが認証情報をより効果的に追跡、ローテーションできるようになったことで、セキュリティの脆弱性につながりかねない、未管理の認証情報のリスクが軽減されています。\n\n「認証情報インベントリとサービスアカウントに対するChaitanyaさんのコントリビュートは、セキュリティ分野において非常に貴重なものです」と[Eduardo Sanz-Garcia（](https://gitlab.com/eduardosanz)ソフトウェアサプライチェーンセキュリティステージの認証グループのシニアフロントエンドエンジニア）は語ります。Eduardoは、[GitLabの認証チーム](https://about.gitlab.com/direction/software_supply_chain_security/authentication/)による推薦も後押ししました。\n\nさらに彼は「Chaitanyaさんは、トークン統計のコンセプトの実装に貢献してくれました。認証情報インベントリの取り組みにより、認証情報の追跡とモニタリングを強化する、非常に要望の多かった機能が提供されたのです。非常に素晴らしいコントリビュートでした」とも付け加えています。\n\nChaitanyaさんはTATA AIGのソフトウェアエンジニアです。セキュリティ上の課題に積極的に取り組み、自らのコントリビュートを改善するための継続的なフォローアップを行っています。\n\nこの場を借りて、GitLabのセキュリティ基盤やその他の製品にコントリビュートしてくれたChaitanyaさんに感謝します！\n\n## GitLab 18.1リリースの主な改善点\n\n### Maven仮想レジストリがベータ版で利用可能に\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nMaven仮想レジストリは、GitLabでのMaven依存関係管理を簡素化するものです。Maven仮想レジストリを使用しない場合、Maven Central、プライベートリポジトリ、GitLabパッケージレジストリからの依存関係にアクセスするための設定を個別に行う必要があります。こうしたアプローチでは、リポジトリへの順次クエリによってビルドが遅くなり、セキュリティ監査とコンプライアンスレポート作成が複雑になります。\n\nMaven仮想レジストリは、複数のアップストリームリポジトリを単一のエンドポイントに集約することで、このような問題に対処します。プラットフォームエンジニアは、1つのURLを介してMaven Central、プライベートレジストリ、GitLabパッケージレジストリを設定できます。インテリジェントキャッシュはビルドパフォーマンスを向上させ、GitLabの認証システムと統合されます。これにより、設定オーバーヘッドの削減、ビルドの高速化、セキュリティとコンプライアンス向上を目的として一元管理されたアクセス制御が実現します。\n\nMaven仮想レジストリは現在、GitLab.comとGitLab Self-Managedの両方で、GitLab PremiumおよびUltimateのお客様にベータ版として提供されています。一般公開リリースには、レジストリ設定用のWebベースUI、共有可能なアップストリーム機能、キャッシュ管理のためのライフサイクルポリシー、強化された分析機能などが追加される予定です。現在のベータ版では、トップレベルグループあたり最大20の仮想レジストリ、仮想レジストリあたり最大20のアップストリームまでと制限されており、ベータ期間中の設定はAPIのみで行えます。\n\n企業のお客様を対象としたMaven仮想レジストリベータプログラムを実施しています。最終リリースの品質向上にご協力をお願いいたします。ベータ版にご参加いただくお客様には、機能への早期アクセス、GitLab製品チームとの直接のやり取り、評価期間中の優先サポートを提供します。ベータプログラムに参加するには、[イシュー498139](https://gitlab.com/gitlab-org/gitlab/-/issues/498139)でご興味があることをお知らせいただき、ユースケースの詳細を提供してください。また、フィードバックや提案は[イシュー543045](https://gitlab.com/gitlab-org/gitlab/-/issues/543045)にお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/user/packages/virtual_registry/maven/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/14137)[](https://gitlab.com/groups/gitlab-org/-/epics/14137)\n\n\u003C!-- blank line -->\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/ZkIkaJDEcEE?si=F7dfSCtzBIv02_is\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n### GitLab Duoコードレビューが一般公開開始\n\n> SaaS: Premium、Ultimate、Duo Enterprise\\\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nGitLab Duoコードレビューが一般公開され、本番環境で使用できるようになりました。AI搭載のこのコードレビューアシスタントは、マージリクエストに対して的確で自動化されたフィードバックを提供し、従来のコードレビュープロセスを変革します。これにより、人間のレビュアーが関与する前に、潜在的なバグ、セキュリティの脆弱性、コード品質の問題を特定できるため、レビュープロセス全体を徹底的かつ効率的に行うことができます。GitLab Duoコードレビューには以下の機能が含まれています。\n\n* **自動初期レビュー**：コードの変更内容を分析し、潜在的な問題、改善点、ベストプラクティスに関する包括的なフィードバックを提供します。  \n* **対話ベースで改善**：マージリクエストコメントで`@GitLabDuo`をメンションすると、特定の変更や質問に対する的確なフィードバックを受け取ることができます。  \n* **実行可能な提案**：多くの提案をブラウザから直接適用できるため、改善プロセスが効率化されます。  \n* **文脈を理解した分析**：変更されたファイルの内容を理解し、プロジェクトに特化した関連性の高い推奨事項を提供します。\n\nGitLab Duoコードレビューをリクエストするには、次の手順に従います。\n\n* マージリクエストで、`/assign_reviewer` `@GitLabDuo`クイックアクションを使用して`@GitLabDuo`をレビュアーとして追加するか、GitLab Duoをレビュアーとして直接割り当てます。  \n* コメントで`@GitLabDuo`をメンションすると、ディスカッションスレッドで特定の質問をしたり、詳細なフィードバックをリクエストしたりできます。  \n* プロジェクト設定で自動レビューを有効にすると、GitLab Duoがすべての新しいマージリクエストを自動的にレビューします。\n\nGitLab Duoコードレビューを活用することで、チームがより高いコード品質基準を維持しながら、手動レビューサイクルに費やす時間を短縮できます。問題を早期に発見し、教育的なフィードバックを提供することで、開発チームにとって品質管理ツールと学習ツールの両方の役割を果たします。\n\nベータ版時のGitLab Duoコードレビューの動作はこちらを[ご覧ください](https://www.youtube.com/watch?v=FlHqfMMfbzQ)。\n\n[イシュー517386](https://gitlab.com/gitlab-org/gitlab/-/issues/517386)でご経験やフィードバックをお寄せいただき、本機能の継続的な改善にご協力ください。\n\n[ドキュメント](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/#have-gitlab-duo-review-your-code)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/13979)[](https://gitlab.com/groups/gitlab-org/-/epics/13979)\n\n![GitLab Duoコードレビューが一般公開開始](https://about.gitlab.com/images/18_1/create-duo-code-review.png)\n\n### ネイティブGitLab認証情報の漏洩パスワード検出\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: -\n\nGitLab.comへのサインイン時に、アカウント認証情報の安全なチェックが実行されるようになりました。お使いのパスワードが既知の情報漏洩に含まれている場合、GitLabにバナーが表示され、メール通知が送信されます。これらの通知には、認証情報の更新手順が記載されています。\n\nセキュリティを最大限に高めるために、GitLabでは以下を推奨しています。\n\n* GitLab専用の強力なパスワードの使用  \n* 2要素認証の有効化  \n* アカウントアクティビティの定期的な確認\n\n注：この機能はネイティブGitLabのユーザー名とパスワードでのみ利用可能です。SSO認証情報は対象外です。\n\n[ドキュメント](https://docs.gitlab.com/security/compromised_password_detection/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/549865)[](https://gitlab.com/gitlab-org/gitlab/-/issues/549865)[](https://gitlab.com/gitlab-org/gitlab/-/issues/549865)\n\n![ネイティブGitLab認証情報の漏洩パスワード検出](https://about.gitlab.com/images/18_1/sscs_password_alert.png)\n\n### CI/CDコンポーネントでSLSAレベル1のコンプライアンスに対応\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate  \n\nGitLabの新しいCI/CDコンポーネントを使用することで、[SLSA](https://slsa.dev/)レベル1のコンプライアンスに対応できるようになりました。このコンポーネントは、GitLab Runnerが生成するSLSA準拠の [アーティファクトの来歴メタデータ](https://docs.gitlab.com/ci/runners/configure_runners/#artifact-provenance-metadata)に対して署名と検証を実行します。また、[Sigstore Cosignの機能](https://docs.gitlab.com/ee/ci/yaml/signing_examples.html)を再利用可能なモジュールとして提供し、CI/CDワークフローに簡単に統合できるようにします。\n\n[ドキュメント](https://docs.gitlab.com/ci/pipelines/pipeline_security/#sign-and-verify-slsa-provenance-with-a-cicd-component)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15859)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/15859)\n\n![CI/CDコンポーネントでSLSAレベル1のコンプライアンスに対応](https://about.gitlab.com/images/18_1/SLSA_component.png)\n\n## GitLab 18.1リリースに含まれるその他の改善点\n\n### コード検索で複数の検索結果の統合表示が可能に\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\n完全一致コードの検索（ベータ版）では、同じファイル内の複数の検索結果を単一のビューに統合して表示できるようになりました。この改善により、次のことが可能になります。\n\n* 孤立した行表示ではなく、隣接する一致間のコンテキストを保持  \n* 一致する内容が近い場合に重複コンテンツを排除し、視覚的な混乱を軽減  \n* ファイルごとの一致数を明確に表示することで、ナビゲーションを強化  \n* エディタでの表示と同様にコードを表示することで、可読性を改善\n\nこの変更により、リポジトリ全体のコードパターンの発見と理解がより効率的になりました。\n\n[ドキュメント](https://docs.gitlab.com/integration/exact_code_search/zoekt/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/13127)\n\n\u003C!-- blank line -->\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/wx2D39UdUoQ?si=fvjYK-rYVHPgVgzs\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n### 権限チェック機能を強化したCODEOWNERSファイル検証\n\nSaaS: Premium、Ultimate\\\nSelf-Managed: Premium、Ultimate\n\nGitLabでは、基本的な構文チェックを超えた、CODEOWNERSファイルに対するより強化された検証が提供されるようになりました。CODEOWNERSファイルを表示すると、GitLabが自動的に包括的な検証を実行し、マージリクエストのワークフローに影響を与える前に構文エラーと権限の問題を特定します。\n\nこの強化された検証では、CODEOWNERSファイル内の最初の200のユニークなユーザーとグループの参照をチェックし、次のことを検証します。\n\n* 参照されたすべてのユーザーとグループがこのプロジェクトにアクセスできること  \n* ユーザーに、マージリクエストを承認するために必要な権限があること  \n* グループに、デベロッパーレベル以上のアクセス権があること  \n* グループに、マージリクエストの承認権限を持つユーザーが少なくとも1人含まれていること\n\nこの事前検証により、設定上の問題を早期に発見して承認ワークフローの中断を防ぎ、マージリクエストが作成されたときにGitLabコードオーナーが実際にレビューの責任を果たせるようにできます。\n\n[ドキュメント](https://docs.gitlab.com/ee/user/project/codeowners/troubleshooting.html#validate-your-codeowners-file)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15598)\n\n### VS Codeでダウンストリームパイプラインのジョブログを表示\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nVS Code用GitLab Workflow拡張機能で、ダウンストリームパイプラインからのジョブログをエディタ内で直接表示できるようになりました。これまで、子パイプラインからログを確認するには、GitLab Webインターフェイスに切り替える必要がありました。\n\nこの機能は、[GitLab共同開発](https://about.gitlab.com/community/co-create/)を通じて開発されました。この場を借りて、コントリビュートしてくれたTim Ryanさんに感謝します！\n\n[ドキュメント](https://docs.gitlab.com/editor_extensions/visual_studio_code/cicd/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/issues/1895)\n\n\n\n![VS Codeでダウンストリームパイプラインのジョブログを表示](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750659268/orzwm4kjqdag8fe0psvr.png)\n\n### シークレット検出のデフォルトルールとDAST検出の同等性\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nDASTアナライザーが、GitLabのシークレット検出アナライザーで使用されるものと同じデフォルトのシークレット検出ルールを自動的に取り込むようになりました。この改善により、両方のアナライザーで検出されるシークレットの種類に一貫性が確保されます。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dast/browser/checks/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/549990)\n\n### 依存関係リストでコンポーネントバージョンによるフィルタリング\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\n依存関係リストで、コンポーネントのバージョン番号によるフィルタリングがサポートされるようになりました。複数のバージョン（`バージョン=1.1、1.2、1.4`など）を選択できますが、バージョン範囲指定はサポートされていません。この機能は、グループとプロジェクトの両方で利用できます。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dependency_list/#filter-dependency-list)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16431)\n\n![依存関係リストでコンポーネントバージョンによるフィルタリング](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750659404/fepyzz2uv3j47bjcehhi.png)\n\n\n\n### コンプライアンスステータスレポートでコントロールステータスの一覧がポップアップで表示されるように\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nコンプライアンスステータスレポートのコントロールには、次の3つのステータスがあります。\n\n* 合格  \n* 失敗  \n* 保留中\n\nこれまでは、要求事項に関連付けられているコントロールの数に関係なく、少なくとも1つのコントロールが「保留中」の場合、要求事項行全体が「保留中」として表示されていました。これは、失敗したコントロールの表示方法とは一貫性がありませんでした。失敗したコントロールが1つでもある場合は、要求事項に関連付けられた全コントロール数と失敗の数が表示されます。\n\n「保留中」のコントロールに関する詳細なコンテキストと情報を提供するため、要求事項行のステータスにカーソルを合わせると、各コントロールのステータスを一覧表示するポップアップが表示されるようになりました。これにより、単に「保留中」という全体ステータスを確認するだけでなく、どのコントロールが保留中で、どのコントロールが合格または失敗しているかを具体的に把握できるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/compliance/compliance_center/compliance_status_report/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/521757)\n\n### ボットユーザーと人間のユーザーのフィルタリング\n\n> SaaS: -\\\n> Self-Managed: Free、Premium、Ultimate\n\n運用が進んだGitLabインスタンスでは、多くの場合、人間とボットの両方のユーザーが多数存在します。今回のリリースで、管理者エリアのユーザーリストをユーザータイプでフィルタリングできる機能が追加されました。この機能により、以下のことが可能になります。\n\n* 人間のユーザーと自動化アカウントを区別して迅速に特定、管理  \n* 特定のユーザータイプに絞った管理アクションを実行  \n* ユーザーの監査と管理のワークフローの効率化\n\n[ドキュメント](https://docs.gitlab.com/administration/moderate_users/#view-users-by-type)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/541186)\n\n![ボットユーザーと人間のユーザーのフィルタリング](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750659653/prkshqzxg5785p69yshd.png)\n\n[](https://gitlab.com/gitlab-org/gitlab/-/issues/541186)\n\n### ユーザープロフィールのORCID識別子\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nユーザープロフィールにORCID識別子を設定できるようになり、GitLabが研究者や学術コミュニティにとってより使いやすく価値あるものになりました。[ORCID](https://orcid.org/)（Open Researcher and Contributor ID）は、研究者に永続的なデジタル識別子を提供し、他の研究者との区別を可能にするとともに、研究者とその業績を自動的に関連付けることで、適切な評価を支援するものです。\n\nこの機能は、学術コミュニティからの長年の要望に応えるため、アルトワ大学の修士課程の学生であるThomas LabaletteとErwan Hivinが[Daniel Le Berre](https://www.ouvrirlascience.fr/appointment-of-daniel-le-berre-as-the-national-coordinator-for-higher-education-and-research-software-forges-in-france/)の指導の下、コミュニティに貢献することを目的に開発したものです。\n\n[ドキュメント](https://docs.gitlab.com/user/profile/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/23543)\n\n[](https://gitlab.com/gitlab-org/gitlab/-/issues/23543)\n\n![ユーザープロフィールのORCID識別子](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750663008/oogvxelirqapyxp10pha.png)\n\n\n\n### サービスアカウントのパイプライン通知への登録\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nサービスアカウントによってトリガーされたパイプラインイベントの通知を、受信できるようになりました。通知はパイプラインが合格、失敗、または修正された場合に送信されます。これまでは、サービスアカウントに有効なカスタムメールアドレスが設定されている場合にのみ、そのサービスアカウントのメールアドレスに通知が送信されていました。\n\nこの場を借りて、コントリビュートしてくれた[Densett](https://gitlab.com/Densett)さん、[Gilles Dehaudt](https://gitlab.com/tonton1728)さん、[Lenain](https://gitlab.com/lenaing)さん、[Geoffrey McQuat](https://gitlab.com/gmcquat)さん、[Raphaël Bihoré](https://gitlab.com/rbihore)さんに感謝します！\n\n[ドキュメント](https://docs.gitlab.com/user/profile/notifications/#notification-events-on-issues-merge-requests-and-epics)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/515629)\n\n### 無効となっているパーソナルアクセストークンの表示\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLabは、有効期限が切れたり、失効したりしたアクセストークンを自動的に無効化します。今回の変更では、無効となっているトークンを確認できるようになりました。これまでは、アクセストークンが無効になると表示されなくなっていました。この変更により、こうしたトークンのトレーサビリティとセキュリティが向上します。\n\n[ドキュメント](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/425053)\n\n\u003C!-- blank line -->\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/weEU6pukbag?si=ebijnyBQdW1_5yBl\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n### GitLab Query Language（GLQL）ビューでのエピックサポート（ベータ版）\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab Query Language（GLQL）ビューが大幅に改善されました。今後は、クエリでエピックをタイプとして使用できるようになり、グループ全体のエピック検索や親エピックへのクエリが可能になります。\n\nこの機能強化により計画・追跡のワークフローが大きく向上し、エピックレベルでのクエリや整理が格段に効率化されます。\n\n[ドキュメント](https://docs.gitlab.com/user/glql/fields/#epic)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab-query-language/glql-rust/-/issues/30)\n\n### レビューパネルによるマージリクエストのレビューエクスペリエンスの強化\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nマージリクエストのレビューを行う際、レビューを送信する前にこれまでのフィードバックを参照すると役立つことがあります。これまでは、最終コメントと保留中コメントが別々のポップアップに分かれていたため、全体像を把握することが困難でした。\n\nコードレビュー時に、保留中の下書きコメントを一箇所にまとめて表示する専用ドロワーが利用できるようになりました。強化されたレビューパネルでは、レビュー送信インターフェイスがよりアクセスしやすい場所に移動し、保留中のコメント数を示す番号付きバッジが表示されます。パネルを開くと、下にスクロールできるリストに下書きコメントがすべて表示されるため、送信前のフィードバックの確認と管理が簡単になります。\n\n[ドキュメント](https://docs.gitlab.com/user/project/merge_requests/reviews/#submit-a-review)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/525841)\n\n[](https://gitlab.com/gitlab-org/gitlab/-/issues/525841)\n\n![レビューパネルによるマージリクエストのレビューエクスペリエンスの強化](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750663218/yfbrzecnuynpb1g57854.png)\n\n\n\n### GitLab Runner 18.1\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab Runner 18.1もリリースされます！GitLab Runnerは、CI/CDジョブを実行し、結果をGitLabインスタンスに送信する、拡張性の高いビルドのエージェントです。GitLabに含まれるオープンソースの継続的インテグレーションサービスであるGitLab CI/CDと連携して動作します。\n\nバグ修正：\n\n* [GitLab 17.10または17.11にアップグレードすると、Runnerがジョブをリクエストしたときに404エラーが発生する可能性があります](https://gitlab.com/gitlab-org/gitlab/-/issues/543351)。\n\nすべての変更の一覧は、GitLab Runnerの[変更履歴](https://gitlab.com/gitlab-org/gitlab-runner/blob/18-1-stable/CHANGELOG.md)で確認できます。\n\n[ドキュメント](https://docs.gitlab.com/runner)\n\n### 高度なSASTのPHPサポート\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nGitLabの高度なSASTにPHPサポートを追加しました。この新しいファイル間、関数間スキャン機能を使用するには、[高度なSASTを有効](https://docs.gitlab.com/user/application_security/sast/gitlab_advanced_sast/#enable-advanced-sast-scanning)にします。高度なSASTをすでに有効にしている場合、PHPサポートは自動的に有効になります。\n\n高度なSASTが各言語で検出する脆弱性の種類を確認するには、[高度なSASTカバレッジページ](https://docs.gitlab.com/user/application_security/sast/advanced_sast_coverage/)を参照してください。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/sast/gitlab_advanced_sast/#supported-languages)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/14273)\n\n### パイプライン実行ポリシーにおける変数の優先順位制御\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\n多くの場合、セキュリティチームはセキュリティ保証とデベロッパーエクスペリエンスの間で微妙なバランスを取ることになります。セキュリティスキャンが適切に実行されていることを確認するのは重要ですが、セキュリティアナライザーが正常に動作するためには、開発チームからの特定のインプットが必要な場合があります。変数の優先順位制御により、セキュリティチームは新しい`variables_override`設定オプションを通じて、パイプライン実行ポリシーにおける変数の処理方法を細かく制御できるようになりました。\n\nこの新しい設定を使用すると、次のことが可能になります。\n\n* プロジェクト固有のコンテナイメージパス（`CS_IMAGE`）を許可するコンテナスキャンポリシーを適用  \n* `SAST_EXCLUDED_PATHS`などの低リスク変数は許可し、`SAST_DISABLED`などの高リスク変数はブロック  \n* `AWS_CREDENTIALS`などのグローバルCI/CD変数で保護（マスクまたは非表示）されたグローバル共有認証情報を定義しつつ、必要に応じてプロジェクトレベルのCI/CD変数によるプロジェクト固有の上書きを許可\n\nこの強力な機能は、次の2つのアプローチをサポートしています。\n\n* **デフォルトで変数をロックする**（`allow: false`）：例外として指定した特定の変数を除き、すべての変数をロック  \n* **デフォルトで変数を許可する**`（allow: true`）：変数のカスタマイズを許可するが、重大なリスクのある変数を例外として指定することで制限  \n\n\n\nパイプライン実行ポリシーによってCI/CDジョブが実行される際のトレーサビリティとトラブルシューティングを改善するために、ジョブログ機能も導入されました。これにより、デベロッパーとセキュリティチームは、どのジョブがポリシーによって実行されたかを簡単に特定できますジョブログでは、変数の上書きによる影響の詳細を確認でき、どの変数がポリシーによって上書きまたはロックされているかを把握するのに役立ちます。\n\n**実際の影響**\n\nこの機能強化により、セキュリティ要件とデベロッパーの柔軟性のニーズとの間のギャップが解消されます。\n\n* セキュリティチーム：プロジェクト固有のカスタマイズを許可しつつ、標準化されたスキャンを実行できる  \n* デベロッパーは：ポリシーの例外をリクエストすることなく、プロジェクト固有の変数を制御できる  \n* 組織は：開発ワークフローを混乱させることなく、一貫したセキュリティポリシーを実装できる\n\nこの重要な変数制御機能により、GitLabは組織が開発の柔軟性を保ちながら強固なセキュリティポリシーを導入できる環境を提供します。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/policies/pipeline_execution_policies/#variables_override-type)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16430)\n\n\n\n![パイプライン実行ポリシーにおける変数の優先順位制御](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750663308/h1oukhyd4ky1w6spdxpo.png)\n\n\n\n### 外部カスタムコントロールの`Name`を定義\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nこれまでは、カスタムコンプライアンスフレームワークを作成する際に外部カスタムコントロールの名前を定義できず、GitLabコントロールと並んでリスト表示される外部コントロールを識別することが困難でした。\n\n今回、外部カスタムコントロールを定義する際のワークフローの一部として`Name`フィールドが追加されました。これにより、複数の外部カスタムコントロールを作成し、それぞれに固有の名前を設定して明確に区別できるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/compliance/compliance_frameworks/#external-controls)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/527007)\n\n### GitLab Duo脆弱性の修正のためのSASTカバレッジの向上\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nこれまでは、次のCommon Weakness Enumeration（CWE）識別子を持つ検出された脆弱性を手動で解決する必要がありました。\n\n* CWE-78（コマンドインジェクション）  \n* CWE-89（SQLインジェクション）\n\n現在は、GitLab Duo脆弱性の修正により、これらの脆弱性を自動的に修正できるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/vulnerabilities/#supported-vulnerabilities-for-vulnerability-resolution)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/534307)\n\n### コンプライアンスフレームワークUIにおける要件のページネーション\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nコンプライアンスフレームワークを作成する際は、最大50個の要件を指定できます。\n\nただし、これほど多くの要件があると、UIで大きな表示領域を占めるため、コンプライアンスフレームワークの操作が非常に困難になります。\n\n今回のリリースでは、コンプライアンスフレームワークに多数の要件が含まれている場合でも、ユーザーが要件を簡単に閲覧、検索、選択できるよう、要件のページネーション機能を導入しました。\n\n[ドキュメント](https://docs.gitlab.com/user/compliance/compliance_frameworks/#add-requirements)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/531039)\n\n### コンプライアンスセンターのUIパフォーマンスとフィルタリングを改善\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nコンプライアンスセンターのUIパフォーマンスとフィルタリングオプションの改善を継続しています。今回のリリースでは、次のことを行いました。\n\n* 特に多くの要件とプロジェクトが含まれる場合に、**フレームワークの編集**ページのUIスピードとパフォーマンスを改善しました。  \n* コンプライアンスセンターの**コンプライアンスステータスレポート**タブで、要件、プロジェクト、またはフレームワーク別にグループ化できる新しいフィルタリングオプションを導入しました。\n\nこれらの改善を行うことで、コンプライアンスセンターを定期的に利用するお客様に対し、コンプライアンスセンターと関連機能が大規模環境でも継続して高いパフォーマンスを発揮できるようにしています。\n\n[ドキュメント](https://docs.gitlab.com/user/compliance/compliance_center/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/508188)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/478216)\n\n### GraphQL APIの`projectMembers`に新しい`accessLevels`引数を追加\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGraphQL APIの`projectMembers`フィールドに`accessLevels`引数が追加されました。この引数を使用すると、APIコールから直接アクセスレベル別にプロジェクトメンバーをフィルタリングできます。これまでは、プロジェクトメンバーの全リストを取得してからローカルでフィルターを適用する必要があり、これにより計算オーバーヘッドが大幅に増加していました。現在では、プロジェクトの権限分析や所有権グラフの生成がより高速化し、リソース効率も向上しています。この機能強化は、複雑な権限構造を持つ大規模デプロイを管理する組織にとって特に価値があります。\n\n[ドキュメント](https://docs.gitlab.com/api/graphql/reference/#projectprojectmembers)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/541386)\n\n## バグ修正、パフォーマンスの改善、UIの改善\n\nGitLabでは、ユーザーに可能な限り最高の環境をお届けできるよう尽力しています。リリースのたびに、バグを修正し、パフォーマンスを改善し、UIを向上させるためにたゆまぬ努力を続けています。GitLabは、100万人を超えるGitLab.comユーザーをはじめ、GitLabのプラットフォームを利用するすべての人にスムーズでシームレスな体験をお届けすることを約束します。\n\n18.1で提供されたすべてのバグ修正、パフォーマンスの強化、UI改善を確認するには、以下のリンクをクリックしてください。\n\n* [バグ修正](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=type%3A%3Abug&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.1)  \n* [パフォーマンスの改善](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=bug%3A%3Aperformance&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.1)  \n* [UIの改善](https://papercuts.gitlab.com/?milestone=18.1)\n\n## 非推奨事項\n\n新たに非推奨になった機能、および現在非推奨になっているすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。[](https://docs.gitlab.com/ee/update/deprecations.html#resource-owner-password-credentials-grant-is-deprecated)[](https://docs.gitlab.com/ee/update/deprecations.html#coverage-guided-fuzz-testing-is-deprecated)\n\n## 削除された機能と破壊的な変更\n\n削除されたすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n[](https://docs.gitlab.com/ee/update/deprecations.html#api-discovery-will-use-branch-pipelines-by-default)[](https://docs.gitlab.com/ee/update/deprecations.html#toggle-notes-confidentiality-on-apis)\n\n### 変更履歴\n\n変更内容をすべて表示するには、次のページから変更履歴を確認してください。\n\n* [GitLab](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/CHANGELOG.md)  \n* [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/blob/main/CHANGELOG.md)  \n* [VS CodeのGitLab Workflow](https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/main/CHANGELOG.md)  \n* [GitLab CLI](https://gitlab.com/gitlab-org/cli/-/releases)\n\n### インストール\n\nGitLabを新規にインストールする場合は、[GitLabのダウンロードページ](https://about.gitlab.com/ja-jp/install/)をご覧ください。\n\n### 更新事項\n\n[更新ページ](https://about.gitlab.com/ja-jp/update/)をご覧ください。\n\n### ご不明な点がある場合\n\nご質問やご意見をお聞かせください。本リリースについてご不明な点がある場合は、[GitLabフォーラム](https://forum.gitlab.com/)にアクセスして質問を投稿してください。\n\n### GitLabサブスクリプションプラン\n\n* [Free](https://about.gitlab.com/pricing/)\\\n  ユーザー向けの永久無料機能を提供  \n* [Premium](https://about.gitlab.com/pricing/premium/)\\\n  チームの生産性と調整を強化  \n* [Ultimate](https://about.gitlab.com/pricing/ultimate/)\\\n  組織全体のセキュリティ、コンプライアンス、プランニングに対応\n\nGitLabのすべての機能を[無料](https://about.gitlab.com/free-trial/?hosted=saas)でお試しいただけます。  \n\n*監修：ソリス ジェレズ / Jerez Solis [@jerezs](https://gitlab.com/jerezs)\n（GitLab合同会社 ソリューションアーキテクト本部 ソリューションアーキテクト）*\n\n### 過去の日本語リリース情報\n\n* [GitLab 18.1](https://about.gitlab.com/ja-jp/blog/gitlab-18-01-release)\n* [GitLab 18.0](https://about.gitlab.com/ja-jp/blog/gitlab-18-0-release/)\n* [GitLab 17.11](https://about.gitlab.com/ja-jp/blog/gitlab-17-11-release/)\n* [GitLab 17.10](https://about.gitlab.com/ja-jp/blog/gitlab-17-10-release/)\n* [GitLab 17.9](https://about.gitlab.com/ja-jp/blog/gitlab-17-9-release/)\n* [GitLab 17.8](https://about.gitlab.com/ja-jp/blog/gitlab-17-8-release/)\n* [GitLab 17.7](https://about.gitlab.com/ja-jp/blog/gitlab-17-7-release/)\n* [GitLab 17.6](https://about.gitlab.com/ja-jp/blog/gitlab-17-6-release/)\n* [GitLab 17.5](https://about.gitlab.com/ja-jp/blog/gitlab-17-5-released/)  \n* [GitLab 17.4](https://about.gitlab.com/ja-jp/blog/gitlab-17-4-released/)  \n* [GitLab 17.3](https://about.gitlab.com/ja-jp/blog/gitlab-17-3-released/)  \n* [GitLab 17.2](https://about.gitlab.com/ja-jp/blog/gitlab-17-2-released/)  \n* [GitLab 17.1](https://about.gitlab.com/ja-jp/blog/gitlab-17-1-released/)  \n* [GitLab 16.11](https://about.gitlab.com/ja-jp/blog/gitlab-16-11-released/)",[771],"2025-06-23","2025-06-20",[900,748,681,9],{"featured":6,"template":685,"slug":941},"gitlab-18-01-release","content:ja-jp:blog:gitlab-18-01-release.yml","Gitlab 18 01 Release","ja-jp/blog/gitlab-18-01-release.yml","ja-jp/blog/gitlab-18-01-release",{"_path":947,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":948,"content":953,"config":960,"_id":962,"_type":14,"title":963,"_source":16,"_file":964,"_stem":965,"_extension":19},"/ja-jp/blog/gitlab-18-02-release",{"noIndex":6,"ogImage":949,"title":950,"description":951,"config":952},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752817693/gr3miapxfam57ksgivgi.png","GitLab 18.2 リリース","GitLab 18.2でリリースした最新機能をご紹介します。",{"noIndex":91},{"heroImage":949,"body":954,"authors":955,"updatedDate":956,"date":957,"title":950,"tags":958,"description":959,"category":681},"本ブログは、[GitLab 18.2 Release](https://about.gitlab.com/releases/2025/07/17/gitlab-18-2-released/)の抄訳です。内容に相違がある場合は、原文が優先されます。\n\n## IDE向けGitLab Duoエージェントプラットフォーム（ベータ版）とイシュー・タスク用カスタムワークフローステータスを追加したGitLab 18.2をリリース\n\nこのたび、GitLab 18.2のリリースを発表しました。このリリースでは、IDE向けGitLab Duoエージェントプラットフォーム（ベータ版）、イシュー・タスク用カスタムワークフローステータス、新しくなったマージリクエストのホーム画面、セキュリティを強化する不変コンテナタグなど、さまざまな機能が追加されました。\n\nこれらの機能は、今回のリリースに含まれる30以上の改善点のほんの一部です。この記事では、お役に立つアップデートをすべてご紹介していますので、ぜひ最後までお読みください。\n\nGitLab 18.2には、GitLabコミュニティのユーザーから152件ものコントリビュートがありました。ありがとうございました！GitLabは[誰もがコントリビュートできる](https://about.gitlab.com/community/contribute/)プラットフォームであり、今回のリリースもユーザーのみなさまの協力なしには実現しませんでした。\n\n来月のリリースで予定されている内容を先取りするには、[今後のリリースページ](https://about.gitlab.com/upcoming-releases/)をご覧ください。\n\n[GitLab 18.2のリリースでは、IDE](http://twitter.com/share?text=GitLab+18.2%E3%81%AE%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%A7%E3%81%AF%E3%80%81IDE%E5%90%91%E3%81%91GitLab+Duo%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%EF%BC%88%E3%83%99%E3%83%BC%E3%82%BF%E7%89%88%EF%BC%89%E3%81%A8%E3%80%81%E3%82%A4%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%BB%E3%82%BF%E3%82%B9%E3%82%AF%E7%94%A8%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%81%8C%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82&url=https://about.gitlab.com/ja-jp/blog/gitlab-18-1-release/&hashtags=)[向けGitLab Duoエージェントプラットフォーム（ベータ版）と、イシュー・タスク用カスタムワークフローステータスが追加されました。クリックしてSNSで共有しましょう！](http://twitter.com/share?text=GitLab+18.2%E3%81%AE%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%A7%E3%81%AF%E3%80%81IDE%E5%90%91%E3%81%91GitLab+Duo%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%EF%BC%88%E3%83%99%E3%83%BC%E3%82%BF%E7%89%88%EF%BC%89%E3%81%A8%E3%80%81%E3%82%A4%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%BB%E3%82%BF%E3%82%B9%E3%82%AF%E7%94%A8%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%81%8C%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82&url=https://about.gitlab.com/ja-jp/blog/gitlab-18-1-release/&hashtags=)\n\n## 今月の[注目コントリビューター](https://contributors.gitlab.com/docs/notable-contributors)は[](https://gitlab.com/karras)[](https://gitlab.com/chaitanyason9)[Markus Siebert](https://gitlab.com/m-s-db)さんです\n\n\u003Cimg src=\"https://about.gitlab.com/images/notable-contributor-logo.svg\">\n\nDB Systel GmbHのプラットフォームエンジニアであるMarkus Siebertさんは、GitLab CI/CDにネイティブなAWS Secrets Managerサポートを導入するコミュニティの取り組みを主導しています。これは、パイプラインでの安全なシークレット管理という重要なエンタープライズニーズに応えるものです。わずか6週間で172件もの活動を記録し、「[AWS Secrets Managerからのシークレット取得機能の追加](https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/5587)」「[AWS SSM ParameterStore用GitLab CI設定エントリの追加](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/191803)」「[AWS Secrets Managerのドキュメント作成](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192378)」など、複数のマージリクエストを通じてAWS Secrets ManagerとAWS Systems Manager Parameter Storeの両方のサポート実装に精力的に取り組んでいます。\n\nMarkusさんを推薦したGitLabの[Aditya Tiwari](https://gitlab.com/atiwari71)（Secureチームのシニアバックエンドエンジニア）は次のように述べています。「Markusさんの取り組みにより、AWS環境を利用する GitLabユーザーは、サードパーティツールやカスタムスクリプトに頼ることなく、CI/CDシークレットを安全に管理できるようになりました。これは、AWSサービスを標準化しているエンタープライズユーザーにとって特に価値のある機能です。」\n\n初期実装からドキュメント作成まで、この機能を完成させようとするMarkusさんの献身的な姿勢、そしてフィードバックに基づいてマージリクエストを継続的に改善する取り組みは、コミュニティコントリビューションの理想的な例です。また、AWS ユーザーのためにGitLabをより良いものにするコミュニティ主導開発の力を示しています。\n\nこのコントリビュートはGitLab共同開発プログラムを通じて実現されました。\n\nこの場を借りて、GitLabにコントリビュートしてくれたMarkusさんに感謝します！\n\n## GitLab 18.2でリリースされた主な改善点\n\n### IDEでGitLab Duoエージェントプラットフォームが利用可能に（ベータ版）\n\n> SaaS: Premium、Ultimate、Duo Core、Duo Pro、Duo Enterprise\\\n> Self-Managed: Premium、Ultimate、Duo Core、Duo Pro、Duo Enterprise\n\nGitLab Duoエージェントプラットフォームを使用して、VS CodeとJetBrains IDEでAgentic Chatとエージェントフローを直接利用できるようになりました。コードベースやGitLabプロジェクトと自然な会話形式でやりとりできます。\n\nAgentic Chatは、ファイルの作成・編集、パターンマッチングやgrepを使用したコードベース全体の検索、コードに関する質問への即座の回答など、素早く会話的なタスクに対応しています。\n\nAgent Flowは、より大規模な実装や包括的な計画を担当し、概念からアーキテクチャまでの高レベルなアイデアを実現しながら、イシュー、マージリクエスト、コミット、CI/CDパイプライン、セキュリティ脆弱性などのGitLabリソースにアクセスします。\n\nどちらの機能も、ドキュメント、コードパターン、プロジェクト探索のための高度な検索機能を備えており、簡単な編集から複雑なプロジェクト分析まで、様々なタスクの実行をサポートします。\n\nこのプラットフォームは、Model Context Protocol（MCP）にも対応しており、外部のデータソースやツールへの接続が可能で、AI機能がGitLab上の情報だけでなく外部のコンテキストも活用できます。\n\n利用を開始するには、[GitLab Duoエージェントプラットフォームに関するドキュメント](https://docs.gitlab.com/user/duo_agent_platform/)、[VS Codeセットアップガイド](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/#use-agentic-chat-in-vs-code)、[JetBrainsセットアップガイド](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/#use-agentic-chat-in-jetbrains-ides)をご覧ください。\n\n[ドキュメント](https://docs.gitlab.com/user/duo_agent_platform/)\\\n[イシュー](https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/issues/1217)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/14137)\u003C!-- blank line -->\n\n\u003Cfigure class=\"video_container\">\n\u003Ciframe src=\"https://www.youtube.com/embed/GPewPbqlFDE?si=C7LVy7tWpRGyZT7b\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n### イシュー・タスク用カスタムワークフローステータス\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nステータス設定が柔軟になったことで、これまでの「オープン／クローズ」だけの単純な管理方法に代わり、チームの実際のワークフローステージに沿って作業アイテムを追跡できるようになりました。\n\nチームのプロセスを正確に反映したカスタムステータスを定義できるようになったことで、ラベルに頼る必要がなくなりました。ステータスを自由に設定することで、次のことが可能になります。\n\n* **カスタムワークフローの定義**：チームの実際のプロセスに合わせたワークフローを作成\n* **ワークフローラベルの置き換え**：ワークフローラベルを検索、更新、レポートしやすい適切なステータスに変更\n* **完了結果の明確化**：「完了」または「キャンセル」を使用して、単にイシューをクローズするだけでなく、完了の結果を明確に表示\n* **正確なフィルタリングとレポート**：作業アイテムのステータスを正確に絞り込んでレポートし、プロジェクトの状況をより的確に把握\n* **イシューボードでのステータス利用**：イシューが列間を移動した際にステータスを自動更新\n* **ステータスの一括更新**：複数の作業アイテムのステータスを一括更新して効率的に管理\n* **依存関係の追跡**： リンクされた作業アイテムのステータスを可視化\n\nカスタムワークフローステータスは、**コメントでのクイックアクション**にも対応し、GitLabのオープン／クローズシステムと自動で同期します。\n\n本機能の改善に向けたご意見やご提案を、ぜひ[フィードバックイシュー](https://gitlab.com/gitlab-com/www-gitlab-com/-/issues/35235)よりお寄せください。\n\n[](\u003C>)\u003C!-- blank line -->\n\n\u003Cfigure class=\"video_container\">\n\u003Ciframe src=\"https://www.youtube.com/embed/oxN95MSo6UU?si=iYGB7gF9LSsRULhk\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n### 新しくなったマージリクエストのホーム画面\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\n複数のプロジェクトで、作成者とレビュアーの両方の立場で多数のマージリクエストを同時に対応していると、コードレビューの管理は非常に大変になります。\n\nマージリクエストのホーム画面が新しくなりました。早急に対応が必要な作業がわかるようスマートに優先順位を付け、以下の2つの表示モードを使用してレビュー作業の進め方を示してくれます。\n\n* **ワークフロービュー**：マージリクエストをレビューのステータスごとに整理し、コードレビューの各ステージに応じて作業をグループ化\n* **ロールビュー**：自分が作成者かレビュアーかによってマージリクエストをグループ化し、担当作業の範囲を明確に分離\n\n**有効**タブには対応が必要なマージリクエストが表示され、**マージ済み**タブには最近完了した作業が表示されます。また、**検索**では包括的なフィルタ機能を使用できます。\n\nまた、新しいホーム画面では、自分が作成したマージリクエストと割り当てられたマージリクエストの両方がまとめて表示されるため、可視性がさらに向上し、担当作業の見落としを防ぐことができます。\n\n[ドキュメント](https://docs.gitlab.com/user/project/merge_requests/homepage/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/13448)\n\n![新しくなったマージリクエストのホーム画面](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752817030/ehswaenxkydlwbox0ip3.png)\n\n### 不変コンテナタグでセキュリティを強化\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nコンテナレジストリは、現代のDevSecOpsチームにとって重要なインフラストラクチャです。しかし、保護されたコンテナタグがあっても、組織には依然として課題があります。それは、タグが作成された後でも、十分な権限を持つユーザーであれば変更できてしまうという点です。これは、本番環境の安定性を特定のタグ付きコンテナイメージに依存しているチームにとってリスクとなります。権限を持つユーザーによる変更であっても、意図しない変更が発生したり、デプロイの整合性が損なわれたりする可能性があります。\n\n不変コンテナタグを使用することで、コンテナイメージを意図しない変更から保護できます。不変ルールに一致するタグが作成されると、そのコンテナイメージは誰にも変更できなくなります。今後は以下のことが可能になります。\n\n* 保護ルールおよび不変ルールを合わせて、1プロジェクトあたり最大5件までの保護ルールをRE2正規表現パターンを用いて作成する\n* latest、セマンティックバージョン（例：v1.0.0）、リリース候補といった重要なタグをあらゆる変更から保護する\n* 不変タグがクリーンアップポリシーの対象から自動的に除外されるようにする\n\n不変コンテナタグを使用するには、次世代コンテナレジストリが必要です。このレジストリは、GitLab.comではデフォルトで有効になっています。GitLab Self-Managedインスタンスで不変コンテナタグを使用するには、[メタデータデータベース](https://docs.gitlab.com/administration/packages/container_registry_metadata_database/)を有効にする必要があります。\n\n[ドキュメント](https://docs.gitlab.com/user/packages/container_registry/immutable_container_tags/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15139)[](https://gitlab.com/groups/gitlab-org/-/epics/15139)\n\n![不変コンテナタグでセキュリティを強化](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752817030/xfcqsdjotx4acx96nu5b.png)\n\n### PremiumおよびUltimateにおけるGitLab Duoの機能をグループ・プロジェクト単位で制御\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nGitLab PremiumおよびUltimateユーザーは、グループとプロジェクトでIDE内のコード提案とGitLab Duo Chatの利用可否を変更できるようになりました。以前は、インスタンスまたはトップレベルグループでのみ利用可否を変更できました。\n\n[ドキュメント](https://docs.gitlab.com/user/gitlab_duo/turn_on_off/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/551895)\n\n![PremiumおよびUltimateにおけるGitLab Duoの機能をグループ・プロジェクト単位で制御](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752817030/khiyfhuutomokxjkgsul.png)\n\n### 新しいグループ概要コンプライアンスダッシュボード\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nコンプライアンスセンターは、コンプライアンスチームがコンプライアンスステータスのレポート、違反レポート、コンプライアンスフレームワークの管理などを一括して行える場所です。\n\n新たに導入されたグループ概要コンプライアンスダッシュボードは、グループ内のすべてのプロジェクトに関するコンプライアンス情報を集約してコンプライアンスマネージャーに提供します。この最初のイテレーションでは、以下の情報が表示されます。\n\n* 特定のコンプライアンスフレームワークの対象となっているプロジェクトの割合\n* グループ内すべてのプロジェクトで失敗した要求事項の割合\n* グループ内すべてのプロジェクトで失敗した制御の割合\n* 「注意」が必要な特定のフレームワーク\n\nこの新しいグループ概要により、コンプライアンスマネージャーは、コンプライアンス対応状況の明確な全体像を一元的な画面で把握できるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/compliance/compliance_center/compliance_overview_dashboard/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/13909)\n\n![新しいグループ概要コンプライアンスダッシュボード](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752817030/rttcgovqszvnwqgqw1z5.png)\n\n### インスタンス全体で利用可能なワークスペースKubernetesエージェント\n\n> Self-Managed: Premium、Ultimate\n\nGitLab管理者は、インスタンスレベルでワークスペースKubernetesエージェントをマッピングできるようになりました。これにより、ユーザーはそのインスタンスに含まれるどのグループやプロジェクトからでも、ワークスペースを作成できるようになりました。\n\n組織はワークスペースKubernetesエージェントを一度プロビジョニングするだけで、インスタンス全体の現在および将来のすべてのプロジェクトからそのエージェントにアクセスできるようになり、ワークスペースのスケーラビリティが大幅に向上します。\n\n[ドキュメント](https://docs.gitlab.com/user/workspace/gitlab_agent_configuration/#allow-a-cluster-agent-for-workspaces-on-the-instance)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16485)\n\n![インスタンス全体で利用可能なワークスペースKubernetesエージェント](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752817031/if68jfrt7op0tqnsb2co.png)\n\n### セキュリティレポートのPDFエクスポートがダウンロード可能に\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\n脆弱性管理の状況や進捗を他の関係者と共有するために、各プロジェクトまたはグループのセキュリティダッシュボードをPDFドキュメントとしてエクスポートできるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/security_dashboard/#exporting)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16989)\n\n![セキュリティレポートのPDFエクスポートがダウンロード可能に](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752817035/xsuirbb1qrpnkamx9a9o.png)\n\n### 一元的なセキュリティポリシー管理（ベータ版）\n\n> Self-Managed: Ultimate\n\nコンプライアンスが重要となる大規模な組織では、複数のプロジェクトやグループにポリシーが分散していることが多く、チームはその断片化されたポリシーの管理に苦労することがあります。ポリシーが一元的に可視化されていない状態では、ポリシーを一貫して適用するのに時間がかかり、コンプライアンスリスクの増大にもつながります。\n\n一元的なセキュリティポリシー管理は、GitLab組織全体にわたってセキュリティポリシーを作成、管理、適用するための統一されたアプローチを導入するものであり、指定された単一のコンプライアンスおよびセキュリティポリシー（CSP）グループを通じて実現されます。これにより、セキュリティチームは以下のことを行えるようになります。\n\n* **一度の定義でポリシーを全体に適用**：CSPグループを通じてインスタンス全体に適用されるセキュリティポリシーを一度作成し、すべてのグループとプロジェクトに対して自動的に適用\n* **事業部単位のポリシーを設定**：トップレベルグループは、CSPグループから組織全体のポリシーを継承しつつ、独自のポリシーセットを設定可能\n* **最小権限の原則を遵守**：インスタンス全体に適用される中央ポリシー管理レイヤーを確立\n\nこのベータ版リリースでは、一元的なポリシー管理のための基盤となるフレームワークを確立し、グループ、プロジェクト、またはインスタンス単位で設定可能なすべての既存のセキュリティポリシータイプに対応しています。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/policies/centralized_security_policy_management/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17392)\n\n![一元的なセキュリティポリシー管理（ベータ版）](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752817030/jombwhyuvqsif4k7kjvn.png)\n\n## GitLab 18.2リリースに含まれるその他の改善点\n\n### 管理者がユーザーの確認なしでコントリビュートを再アサイン可能に\n\n> Self-Managed: Free、Premium、Ultimate\n\n管理者は、プレースホルダユーザーからアクティブユーザーへのコントリビュートの再アサインを、ユーザーの確認なしで実行できるようになりました。この機能は、再アサインの承認メールをユーザーが確認しないことでプロセスが停滞してしまうという、大規模組織が抱える重要な課題を解決します。\n\nユーザーの代理操作が有効になっているGitLabインスタンスでは、管理者はユーザー管理のワークフローを効率化しつつ、データの整合性を維持することができます。再アサイン完了後には、ユーザーに通知メールが送信されるため、プロセス全体における透明性も確保されます。\n\n[ドキュメント](https://docs.gitlab.com/administration/settings/import_and_export_settings/#skip-confirmation-when-reassigning-placeholder-users)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/523259)\n\n### チームメンバーにエピックを割り当て\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\n個人へのエピックの割り当てが可能になり、戦略的イニシアチブの責任者が明確になりました。エピックに担当者を設定することで、ポートフォリオレベルで誰が責任を持つかが明確になり、迅速な意思決定と長期目標への明確な責任体制を構築できます。チームは、エピックの進捗状況、依存関係、スコープの変更について、誰に連絡すればよいかをすぐに把握できます。\n\n[ドキュメント](https://docs.gitlab.com/user/group/epics/manage_epics/#assignees)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/4231) \n\n![チームメンバーにエピックを割り当て](https://about.gitlab.com/images/18_2/epic_assignees.png)\n\n### エピックの表示設定\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\n作業アイテムの一覧を表示する際に、どのメタデータを表示するかを自由に選べるようになり、最も重要な情報に集中しやすくなりました。\n\nこれまでは、すべてのメタデータフィールドが常に表示されていたため、作業アイテムを確認する際に情報が多すぎて把握しにくい状況でした。今回の改善により、担当者、ラベル、日付、マイルストーンといった特定のフィールドのオン／オフを切り替えて、表示内容をカスタマイズできるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/group/epics/manage_epics/#configure-epic-display-preferences)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/393559) \n\n![エピックの表示設定](https://res.cloudinary.com/about-gitlab-com/image/upload/v1753246094/nyfmmdweksyndjdisfp4.png)\n\n### GLQLビューでの並べ替えとページネーション\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\n今回のリリースでは、GLQLビューの並べ替え機能とページネーション機能が強化され、大規模なデータセットでの作業がより簡単になりました。\n\n期限、ヘルスステータス、人気度などの主要なフィールドで並び替えできるようになり、最も関連性の高い項目をすばやく見つけられます。新しい「さらに読み込む」形式のページネーションシステムにより、ページ全体に表示されていた大量の結果が、必要な分だけを段階的に読み込めるようになり、データの管理がしやすくなりました。\n\nこうした改善により、チームは複雑なプロジェクトデータを効率的に扱い、その時々で最も重要な情報に集中できるようになります。\n\n[ドキュメント](https://docs.gitlab.com/user/glql/#presentation-syntax)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/502701)\n\n### GitLab Runner 18.2\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab Runner 18.2も本日リリースされます！GitLab Runnerは、CI/CDジョブを実行し、結果をGitLabインスタンスに送信する、拡張性の高いビルドエージェントです。GitLabに含まれるオープンソースの継続的インテグレーションサービスであるGitLab CI/CDと連携して動作します。\n\nバグ修正：\n\n* [GitLab Runner 18.1.0へのアップグレード後、FIPSモードでRunnerが失敗する](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/38890)\n* [FF_USE_DUMB_INIT_WITH_KUBERNETES_EXECUTORでジョブポッドを起動できない](https://gitlab.com/gitlab-org/gl-openshift/gitlab-runner-operator/-/issues/241)\n* [GitLab Runner（FIPSモード）でubi-fipsイメージがデフォルトのイメージフレーバーとして使用されていない](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/38273)\n* [GitLabメンテナンスモードを無効にした後、Runnerが長時間オフラインのままになる](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/29181)\n\nすべての変更の一覧は、GitLab Runnerの[変更履歴で確認できます](https://gitlab.com/gitlab-org/gitlab-runner/blob/18-2-stable/CHANGELOG.md)。\n\n[ドキュメント](https://docs.gitlab.com/runner/)\n\n### コンテナスキャンにおけるマルチアーキテクチャコンテナイメージのサポート\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nコンテナスキャンにLinux Arm64コンテナイメージバリアントが追加されました。これにより、Linux Arm64ランナー上で実行する際にアナライザーがエミュレーションなしで動作するため、分析速度が向上します。さらに、`TRIVY_PLATFORM`環境変数にスキャンしたいプラットフォームを設定することで、マルチアーキテクチャイメージをスキャンできるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/container_scanning/#available-cicd-variables)\\\n[イシュー ](https://gitlab.com/gitlab-org/gitlab/-/issues/543144)\n\n### コンテナスキャンにおけるアーカイブファイルのサポート強化\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab 18.2では、コンテナスキャンにおけるアーカイブファイルスキャンのサポートが強化されました。特定のパッケージに含まれる脆弱性が複数のイメージで検出された場合、スキャンされた各イメージに対して該当する脆弱性が表示されるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/container_scanning/#scanning-archive-formats)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/501077)\n\n### JavaScriptで静的到達可能性がサポートされるように\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nコンポジション解析で、JavaScriptライブラリの静的到達可能性がサポートされるようになりました。トリアージや修正に関する意思決定を行う上で、静的到達可能性機能によって生成されたデータを活用できます。また、静的な到達性データをEPSS、KEV、およびCVSS（共通脆弱性評価システム）のスコアと一緒に使用すれば、より焦点を絞って脆弱性を確認することも可能です。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dependency_scanning/static_reachability/#supported-languages-and-package-managers)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/502334) \n\n### 脆弱性レポートにおける到達可能性フィルター\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\n脆弱性レポート内のデータを到達可能な脆弱性のみに絞り込めるようになりました。到達可能な脆弱性とは、次の両方の条件を満たす脆弱性を指します。\n\n* 共通脆弱性識別子（CVE）リストに掲載されている\n* 明示的にインポートされているライブラリに含まれている\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/vulnerability_report/#filtering-vulnerabilities)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/543346) \n\n![脆弱性レポートにおける到達可能性フィルター](https://about.gitlab.com/images/18_2/reachability_filter.png)\n\n### 承認ポリシーにおけるソースブランチパターンの例外設定\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nこれまで、GitFlowを使用するチームは、`release/*`ブランチを`main`にマージする際に、承認のデッドロックが頻繁に発生していました。これは、ほとんどのコントリビューターがリリース開発にすでに関与しており、承認者として機能できなくなるためです。\n\nマージリクエスト承認ポリシーのブランチパターン例外設定によって、この問題は解決されます。特定のソースブランチとターゲットブランチの組み合わせに対して、承認要件を自動的に回避できる仕組みです。たとえば、featureからmainへのマージには厳格な承認を設定しつつ、releaseからmainへのマージはスムーズに進められるように構成できます。\n\n主要機能：\n\n* **パターンベースの設定**：`release/*`や`hotfix/*`などのソースブランチパターンを定義し、承認要件を回避\n* **シームレスな統合**：ブランチの例外設定は既存のマージリクエスト承認ポリシーに直接統合され、UIまたは`policy.yaml`ファイルを通じて設定可能\n\nこれにより、複雑な回避策が不要になると同時に、標準的な開発ワークフローにおけるマージリクエスト承認ポリシーのセキュリティ上の利点は維持されます。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/policies/merge_request_approval_policies/#source-branch-exceptions)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/18113) \n\n![承認ポリシーにおけるソースブランチパターンの例外設定](https://about.gitlab.com/images/18_2/source-branch-pattern.png)\n\n### 脆弱性レポートのCSVエクスポートに脆弱性IDを追加\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nこれまで、脆弱性レポートのCSVエクスポートに脆弱性IDは含まれていませんでしたが、CSVエクスポートに各脆弱性のIDが一覧表示されるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/vulnerability_report/#exporting)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/18033)\n\n### カスタム管理者ロール（ベータ版）\n\n> Self-Managed: Ultimate\n\nこの新しいカスタム管理者ロールでは、GitLab Self-ManagedおよびGitLab Dedicatedインスタンスの管理者エリアで権限を細かく調整できるようになります。管理者は、従来のようにすべてのアクセス権を付与するのではなく、必要とする特定の機能のみにアクセスできる専用のロールを作成できます。これにより、管理機能に対する最小権限の原則を組織内で実現し、過剰な権限によるセキュリティリスクを低減し、業務効率性を向上させることができます。\n\nこの機能に関するコミュニティのみなさまからのフィードバックを心よりお待ちしております。ご質問や実装経験の共有、改善点に関して当社チームへのご意見がある場合は、[フィードバックイシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/509376)をご確認ください。\n\n[ドキュメント](https://docs.gitlab.com/user/custom_roles/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15069) \n\n![カスタム管理者ロール（ベータ版）](https://about.gitlab.com/images/18_2/sscs_authz_custom_admin_role.png)\n\n### 監査ストリーミング先へのストリーミングの無効化\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nこれまで、監査ストリーミング先へのストリーミングを一時的に無効化する方法がありませんでした。たとえば、ストリーム接続のトラブルシューティングを行いたい場合や、設定の削除・再構成を行わずに変更を加えたい場合など、さまざまな理由で一時的に無効化したいケースが考えられます。\n\nGitLab 18.2では、監査ストリームを「有効」または「無効」に切り替える機能が追加されました。監査ストリームが無効になると、監査イベントは指定された送信先へストリーミングされなくなります。アクティブに切り替えると、監査イベントのストリーミングが再開されます。\n\n[ドキュメント](https://docs.gitlab.com/administration/compliance/audit_event_streaming/#activate-or-deactivate-streaming-destinations)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/537096) \n\n### すべての監査ストリーミング先でフィルタ機能が利用可能に\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nこれまでは、一部の監査ストリーミング先では、利用できるフィルタ機能に制限がありました。\n\n今回の改善により、すべての監査ストリーミング先で、UI上で以下のような項目を指定して絞り込めるようになりました。\n\n* 監査イベントタイプ別\n* グループまたはプロジェクト別\n\nまた、AWSやGCPなどの監査イベント先でも、監査イベントの絞り込みが可能になりました。\n\n[ドキュメント](https://docs.gitlab.com/user/compliance/audit_event_streaming/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/524939)\n\n### プレースホルダユーザーから非アクティブユーザーへの再アサイン\n\nSelf-Managed: Free、Premium、Ultimate\n\nこれまで、管理者はプレースホルダユーザーからアクティブユーザーに対してのみ、コントリビュートやメンバーシップを再アサインできました。\n\nGitLab Self-Managedでは、管理者によるプレースホルダユーザーから非アクティブユーザーへのコントリビュートやメンバーシップの再アサインも可能になりました。この機能により、ブロック済み、BAN済み、または無効化済みユーザーのコントリビュート履歴やメンバーシップ情報をGitLabインスタンス上で保持することができます。\n\n管理者は最初にこの設定を有効化する必要があります。有効化すると、安全なアクセス制御を維持しながら、再アサイン時のユーザー確認をスキップしてユーザー管理を効率化できます。\n\n[ドキュメント](https://docs.gitlab.com/administration/settings/import_and_export_settings/#skip-confirmation-when-administrators-reassign-placeholder-users)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/523260) \n\n### 長期計画の強化に向けたエピックへのマイルストーン割り当て\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\n[マイルストーン](https://docs.gitlab.com/user/project/milestones/)をエピックに直接割り当てることが可能になり、戦略的なイニシアティブから実行に至るまで、段階的な計画の流れを自然に作成できるようになりました。この機能強化により、四半期ごとの計画やSAFeプログラムインクリメント（PI）といった長期的な計画サイクルをエピックと連携させることができます。一方で、イテレーションは開発スプリントに特化させることができます。\n\nこの明確な階層構造により、管理上の負担を軽減し、戦略的なイニシアティブが組織のタイムフレームに沿ってどのように進捗しているかをより適切に把握できるようになります。\n\n[ドキュメント](https://docs.gitlab.com/user/project/milestones/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/329)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/329)\n\n![長期計画の強化に向けたエピックへのマイルストーン割り当て](https://about.gitlab.com/images/18_2/epic_milestone.png)\n\n### エピックページでエピックをドロワーまたは全ページで表示\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nエピック一覧ページに新たに追加されたトグルを切り替えて、エピックをドロワー表示で開くか、全ページ表示で開くかを選べるようになりました。\n\nドロワー表示を使えば、エピック一覧のコンテキストを保ったまま、エピックの詳細をすばやく確認できます。また、詳細な編集や包括的な操作を行うために、より広い画面スペースが必要な場合は、全ページ表示で開くことも可能です。\n\n[ドキュメント](https://docs.gitlab.com/user/group/epics/manage_epics/#open-epics-in-a-drawer)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/536620) \n\n![エピックページでエピックをドロワーまたは全ページで表示](https://about.gitlab.com/images/18_2/drawer_toggle.png)\n\n### GitLab Flavored Markdownにおける作業アイテム参照とエディターの改善\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab Flavored Markdownで、`[work_item:123]`という統一構文を使用して、イシュー、エピック、作業アイテムを参照できるようになりました。この新しい構文は、イシュー用の`#123`やエピック用の`&123`といった既存の参照形式と併用でき、`[work_item:namespace/project/123]`のようなプロジェクト間参照にも対応しています。\n\nまた、プレーンテキストエディターには、Enterキーを押した際に[カーソルのインデントを維持する設定](https://docs.gitlab.com/user/profile/preferences/#maintain-cursor-indentation)が新たに追加されました。これにより、ネストされたリストやコードブロックなどの構造化されたコンテンツをより書きやすくなります。\n\n[ドキュメント](https://docs.gitlab.com/user/markdown/#gitlab-specific-references)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/7654)\n\n### トリガージョブでダウンストリームパイプラインステータスをミラーリング\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nこれまで、`strategy:depend`を使用したトリガージョブでは、手動ジョブ、ブロックされたパイプライン、実行中にステータスが変化する再試行パイプラインなど、複雑なパイプラインの状態に対応する際に制限がありました。そのため、実際には手動ジョブでブロックされているにもかかわらず、ダウンストリームパイプラインがアクティブに実行中であるかのように見えることがありました。\n\n新しい`strategy:mirror`キーワードは、ダウンストリームパイプラインの正確なリアルタイムのステータスをミラーリングすることで、より詳細なステータスレポートを可能にします。ステータスには、`running`、`manual`、`blocked`、`canceled`などの途中経過のステータスも含まれます。この機能により、チームは既存のワークフローを中断することなく、ダウンストリームパイプラインの現在のステータスを完全に把握できるようになります。\n\n[ドキュメント](https://docs.gitlab.com/ci/yaml/#triggerstrategy)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/431882) \n\n### 時間ベースのワンタイムパスワードMFAのDAST対応\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\n動的解析において時間ベースのワンタイムパスワード（TOTP）による多要素認証（MFA）がサポートされるようになりました。\n\nTOTP MFAが有効になっているプロジェクトでDASTスキャンを実行し、包括的なセキュリティテストを確実に行うことができます。この機能強化により、MFAが展開されている本番環境を再現した設定でアプリケーションをテストできるため、より正確なスキャン結果が得られます。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dast/browser/configuration/authentication/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/13633) \n\n### DASTログイン成功確認のサポート強化\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nこれまで、`DAST_AUTH_SUCCESS_IF_AT_URL`変数を使用して認証の成功を確認するには、URLの完全一致が必要でした。この方法は、ランディングページが静的なアプリケーションには有効でしたが、ログイン後のURLにログインごとの動的要素が含まれるアプリケーションでは困難でした。\n\n今回の改善により、`DAST_AUTH_SUCCESS_IF_AT_URL`変数でワイルドカードパターンを使用し、動的なURLパターンにも一致させることが可能になりました。この機能強化で柔軟性が向上されたことで、セッションごとにURLが変化する場合でも、認証の成功を確認できるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dast/browser/configuration/variables/#authentication)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/435942)\n\n### 依存関係パスの表示\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nこれまでは、ある依存関係が直接的な依存関係なのか、それとも依存関係の子孫を通じてインポートされた間接的な依存関係なのかを判別するのが困難でした。\n\n新たに追加された依存関係パス機能を使用することで、ライブラリが直接的にインポートされているのか、あるいは間接的にインポートされているのかを判別できるようになりました。依存関係パスは、プロジェクトおよびグループの依存関係リストと脆弱性詳細で確認できます。この機能により、ライブラリがどのようにインポートされているかに応じて、最も効率的な修正のパスをデベロッパーが判断できるようになります。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dependency_list/#dependency-paths)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16815)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/16815)\n\n![依存関係パスの表示](https://about.gitlab.com/images/18_2/dependency_paths.png)\n\n### セキュリティインベントリによるアセットの包括的な可視化（ベータ版）\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nAppSecチームには、組織内のすべてのアセットに対するセキュリティ体制を包括的に可視化することが求められています。これまでのGitLabのセキュリティワークフローは、主にプロジェクトレベルでのスキャナー設定や脆弱性に焦点を当てていたため、カバレッジのギャップを把握したり、リスクに基づいて効率的に優先順位を付けたりするのが困難でした。\n\nセキュリティインベントリは、GitLabインスタンス全体におけるセキュリティ対策状況を一元的に表示し、AppSecチームが以下を実現できるようにします。\n\n* プロジェクトやグループ間のセキュリティカバレッジを完全に可視化する\n* セキュリティスキャンが十分に実行されていない、または設定にギャップがあるアセットを特定する\n* セキュリティ対策の重点をどこに置くのかについて、情報に基づいたリスクベースの意思決定を行う\n* セキュリティ対策状況の改善を継続的に追跡する\n\nこの機能を使用することで、個別プロジェクトのセキュリティと組織全体のセキュリティ戦略とのギャップを埋め、効果的なセキュリティプログラム管理に必要なアセットインベントリの基盤を構築できます。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/security_inventory/)\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16484)\\\n\n### 脆弱性GraphQL APIで追加情報を取得可能に\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nGraphQL APIを使用して、脆弱性が導入されたパイプラインと最後に検出されたパイプラインを特定できるようになりました。脆弱性GraphQL APIに以下のフィールドが追加されました。\n\n* `initialDetectedPipeline`：脆弱性が導入された際の追加のコミット情報（例：作成者のユーザー名）を取得するために使用\n* `latestDetectedPipeline`：脆弱性が削除された際の追加のコミット情報（例：コミットSHA）を取得するために使用\n\n[ドキュメント](https://docs.gitlab.com/api/graphql/reference/#vulnerability)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/468913) \n\n### 認証情報インベントリにサービスアカウントトークンを追加\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nGitLabの認証情報インベントリでサービスアカウントトークンがサポートされるようになりました。これにより、ソフトウェアサプライチェーン全体で使用されているさまざまな認証方式を、より明確に把握・管理できるようになります。認証情報インベントリは、組織全体で使用されている認証情報の全体像を提供します。\n\n[ドキュメント](https://docs.gitlab.com/administration/credentials_inventory/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/421954) \n\n### GitLab Duo Self-HostedでMistral Smallが利用可能に\n\nSelf-Managed: Premium、Ultimate、Duo Enterprise\n\n[GitLab Duo Self-Hosted](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_models_and_hardware_requirements/#supported-models)でMistral Smallを使用できるようになりました。このモデルはGitLab Self-Managedインスタンスで利用可能であり、GitLab Duo Self-HostedのGitLab Duo Chatおよびコード提案機能に完全対応する初のオープンソースモデルです。\n\n[ドキュメント](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_models_and_hardware_requirements/#supported-models/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/18202)\n\n## バグ修正、パフォーマンスの改善、UIの改善\n\nGitLabでは、ユーザーに可能な限り最高の環境をお届けできるよう尽力しています。リリースのたびに、バグを修正し、パフォーマンスを改善し、UIを向上させるためにたゆまぬ努力を続けています。GitLabは、100万人を超えるGitLab.comユーザーをはじめ、GitLabのプラットフォームを利用するすべての人にスムーズでシームレスな体験をお届けすることを約束します。\n\n18.2で提供されたすべてのバグ修正、パフォーマンスの強化、UI改善を確認するには、以下のリンクをクリックしてください。\n\n* [バグ修正](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=type%3A%3Abug&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.2&first_page_size=100)\n* [パフォーマンスの改善](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=bug%3A%3Aperformance&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.2)\n* [UIの改善](https://papercuts.gitlab.com/?milestone=18.2)\n\n## 非推奨事項\n\n新たに非推奨になった機能、および現在非推奨になっているすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。[](https://docs.gitlab.com/ee/update/deprecations.html#resource-owner-password-credentials-grant-is-deprecated)[](https://docs.gitlab.com/ee/update/deprecations.html#coverage-guided-fuzz-testing-is-deprecated)\n\n## 削除された機能と破壊的な変更\n\n削除されたすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n[](https://docs.gitlab.com/ee/update/deprecations.html#api-discovery-will-use-branch-pipelines-by-default)[](https://docs.gitlab.com/ee/update/deprecations.html#toggle-notes-confidentiality-on-apis)\n\n### 変更履歴\n\n変更内容をすべて表示するには、次のページから変更履歴を確認してください。\n\n* [GitLab](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/CHANGELOG.md)\n* [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/blob/main/CHANGELOG.md)\n* [VS CodeのGitLab Workflow](https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/main/CHANGELOG.md)\n* [GitLab CLI](https://gitlab.com/gitlab-org/cli/-/releases)\n\n### インストール\n\nGitLabを新規にインストールする場合は、[GitLabのダウンロードページ](https://about.gitlab.com/ja-jp/install/)をご覧ください。\n\n### 更新事項\n\n[更新ページ](https://about.gitlab.com/ja-jp/update/)をご覧ください。\n\n### ご不明な点がある場合\n\nご質問やご意見をお聞かせください。本リリースについてご不明な点がある場合は、[GitLabフォーラム](https://forum.gitlab.com/)にアクセスして質問を投稿してください。\n\n### GitLabサブスクリプションプラン\n\n* [Free](https://about.gitlab.com/pricing/)\\\n  ユーザー向けの永久無料機能を提供\n* [Premium](https://about.gitlab.com/pricing/premium/)\\\n  チームの生産性と調整を強化\n* [Ultimate](https://about.gitlab.com/pricing/ultimate/)\\\n  組織全体のセキュリティ、コンプライアンス、プランニングに対応\n\nGitLabのすべての機能を[無料](https://about.gitlab.com/free-trial/?hosted=saas)でお試しいただけます。\n\n*監修：ソリス ジェレズ / Jerez Solis [@jerezs](https://gitlab.com/jerezs)\n（GitLab合同会社 ソリューションアーキテクト本部 ソリューションアーキテクト）*\n\n### 過去の日本語リリース情報\n\n* [GitLab 18.2](https://about.gitlab.com/ja-jp/blog/gitlab-18-02-release)\n* [GitLab 18.1](https://about.gitlab.com/ja-jp/blog/gitlab-18-01-release)\n* [GitLab 18.0](https://about.gitlab.com/ja-jp/blog/gitlab-18-0-release/)\n* [GitLab 17.11](https://about.gitlab.com/ja-jp/blog/gitlab-17-11-release/)\n* [GitLab 17.10](https://about.gitlab.com/ja-jp/blog/gitlab-17-10-release/)\n* [GitLab 17.9](https://about.gitlab.com/ja-jp/blog/gitlab-17-9-release/)\n* [GitLab 17.8](https://about.gitlab.com/ja-jp/blog/gitlab-17-8-release/)\n* [GitLab 17.7](https://about.gitlab.com/ja-jp/blog/gitlab-17-7-release/)\n* [GitLab 17.6](https://about.gitlab.com/ja-jp/blog/gitlab-17-6-release/)\n* [GitLab 17.5](https://about.gitlab.com/ja-jp/blog/gitlab-17-5-released/)\n* [GitLab 17.4](https://about.gitlab.com/ja-jp/blog/gitlab-17-4-released/)\n* [GitLab 17.3](https://about.gitlab.com/ja-jp/blog/gitlab-17-3-released/)\n* [GitLab 17.2](https://about.gitlab.com/ja-jp/blog/gitlab-17-2-released/)\n* [GitLab 17.1](https://about.gitlab.com/ja-jp/blog/gitlab-17-1-released/)\n* [GitLab 16.11](https://about.gitlab.com/ja-jp/blog/gitlab-16-11-released/)",[771],"2025-07-24","2025-07-18",[900,748,681,9],"GitLab 18.2でリリースした最新機能を公開します。",{"featured":91,"template":685,"slug":961},"gitlab-18-02-release","content:ja-jp:blog:gitlab-18-02-release.yml","Gitlab 18 02 Release","ja-jp/blog/gitlab-18-02-release.yml","ja-jp/blog/gitlab-18-02-release",{"_path":967,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":968,"content":973,"config":980,"_id":982,"_type":14,"title":983,"_source":16,"_file":984,"_stem":985,"_extension":19},"/ja-jp/blog/gitlab-18-03-release",{"config":969,"ogImage":970,"title":971,"description":972},{"noIndex":91},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1755780180/rjsjdqp84qgmlu698wfc.png","GitLab 18.3 リリース","GitLab 18.3でリリースした最新機能をご紹介します。",{"heroImage":970,"body":974,"authors":975,"updatedDate":976,"date":977,"title":971,"tags":978,"description":979,"category":681},"本ブログは、[GitLab 18.3 Release](https://about.gitlab.com/releases/2025/08/21/gitlab-18-3-released/)の抄訳です。内容に相違がある場合は、原文が優先されます。\n\n## Visual Studio向けDuo Agent Platform（ベータ版）と埋め込みビューを搭載したGitLab 18.3をリリース\n\nこのたび、GitLab 18.3のリリースを発表しました。このリリースでは、Visual Studio向けDuo Agent Platform（ベータ版）、埋め込みビュー、直接転送による移行、CI/CDジョブトークンの詳細な権限設定など、さまざまな機能が追加されました。\n\nこれらの機能は、今回のリリースに含まれる38以上の改善点のほんの一部です。この記事では、お役に立つアップデートをすべてご紹介していますので、ぜひ最後までお読みください。\n\nGitLab 18.3には、GitLabコミュニティのユーザーから314件ものコントリビュートがありました。ありがとうございました！GitLabは[誰もがコントリビュートできる](https://about.gitlab.com/community/contribute/)プラットフォームであり、今回のリリースはユーザーのみなさまの協力なしには実現しませんでした。\n\n来月のリリースで予定されている内容を先取りするには、[今後のリリースページ](https://about.gitlab.com/upcoming-releases/)をご覧ください。\n\n## 今月の[注目コントリビューター](https://contributors.gitlab.com/docs/notable-contributors)は[Ahmed Kashkoush](https://gitlab.com/ahmad-kashkoush)さんです\n\n\u003Cimg src=\"https://about.gitlab.com/images/notable-contributor-logo.svg\">\n\n18.3では、[Ahmed Kashkoush](https://gitlab.com/ahmad-kashkoush)さんを注目コントリビューターとして表彰いたします！\n\nAhmedさんはこの[Google Summer of Codeの参加](https://gitlab.com/ahmad-kashkoush/gsoc-2025-final-report)を通じて、[GitLab Web IDE](https://gitlab.com/gitlab-org/gitlab-web-ide)に優れたコントリビュートをもたらしました。彼は長年のコミュニティからの要望に直接応える重要なGit操作を一貫して提供してきました。彼の5つの重要なマージリクエストには、[コミットおよび強制プッシュ機能](https://gitlab.com/gitlab-org/gitlab-web-ide/-/merge_requests/497)、[更新確認メッセージ](https://gitlab.com/gitlab-org/gitlab-web-ide/-/merge_requests/540)、[コミット修正機能](https://gitlab.com/gitlab-org/gitlab-web-ide/-/merge_requests/507)、[ブランチ作成操作](https://gitlab.com/gitlab-org/gitlab-web-ide/-/merge_requests/534)、[ブランチ削除機能](https://gitlab.com/gitlab-org/gitlab-web-ide/-/merge_requests/539)が含まれています。\n\n新機能の実装に加え、AhmedさんはWeb IDEから既存のコミットを修正できる機能を追加しました。これは5年以上前にコミュニティから要望され、24の「いいね」を獲得していた機能です。彼の包括的なブランチ管理の実装により、Web IDEはローカル開発環境と機能的に同等に近づき、基本的なGit操作のためにインターフェース間を切り替える必要がなくなりました。Ahmedさんの作業は、Web IDEをより多くのデベロッパーに利用しやすくすることで、GitLabの「誰もがコントリビュートできる」という[ミッション](https://handbook.gitlab.com/handbook/company/mission/)の理念を形にしています。\n\nAhmedさんをGoogle Summer of Codeプログラムを通じてメンターとしてサポートしたGitLabのスタッフフロントエンドエンジニア[Enrique Alcántara](https://gitlab.com/ealcantara)によってノミネートされました。彼は次のように述べています。「Ahmedさんは実際のユーザーの問題を解決することに献身的です。彼の作業は、専念するコントリビューターがGitLabのコア機能を改善する上でどれほどの影響を与えることができるかを示しています。」\n\nAhmedさんのコントリビュートは、オープンソース開発におけるメンターシップとコミュニティコラボレーションの力を示し、ローカルセットアップに関係なくGitLabをより使いやすくしています。\n\nGitLab Web IDEへの素晴らしいコントリビュートを提供してくれたAhmedさんに感謝します！\n\n## **GitLab 18.3でリリースされた主な改善点**\n\n### **Visual Studio向けDuo Agent Platform（ベータ版）**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nVisual Studio向けDuo Agent Platformのパブリックベータ版をリリースしました！このリリースにより、Visual StudioユーザーはDuo Agent Platformの高度なAI機能をIDE内で直接利用できるようになりました。\n\nDuo  Agent Platformは、ワークフローに2つの強力な機能をもたらします：\n\n* **Agentic Chat**：ファイルの作成と編集、パターンマッチングとgrepを使用したコードベースの検索、コードに関する質問への即座の回答など、会話型のタスクをVisual Studioから離れることなく素早く実行できます。\n* **エージェントフロー**：より大規模で複雑なタスクに、包括的な計画と実装サポートで取り組みます。エージェントフローは、イシュー、マージリクエスト、コミット、CI/CDパイプライン、セキュリティ脆弱性などのGitLabリソースを活用しながら、高レベルのアイデアをアーキテクチャとコードに変換するのに役立ちます。\n\nどちらの機能も、ドキュメント、コードパターン、プロジェクト情報全体で高度な検索を提供し、簡単な編集から詳細なプロジェクト分析まで、シームレスに移行できるようサポートします。\n\n今すぐVisual StudioでDuo Agent Platformベータ版をお試しいただき、開発ワークフローにおける新しいレベルの生産性とAI機能のサポートを体験してください。\n\n[ドキュメント](https://docs.gitlab.com/user/duo_agent_platform/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/editor-extensions/-/epics/179)\n\n[](https://gitlab.com/groups/gitlab-org/editor-extensions/-/epics/179)\n\n\u003Cfigure class=\"video_container\">\n\u003Ciframe src=\"https://www.youtube.com/embed/Pdjf5HxQUBQ?si=ouLMn2O8jTQ6y9Ql\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n### **埋め込みビュー（GLQLを活用）**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nこのリリースで、GLQLを活用した埋め込みビューの一般提供を開始します。Wikiページ、エピックの説明、イシューコメント、マージリクエストなど、作業が行われる場所に直接、GitLabデータの動的でクエリ可能なビューを作成して埋め込むことができます。\n\n埋め込みビューにより、チームは画面を切り替えることなく作業の進捗を一箇所で追跡できます。使い慣れた構文を使用してイシュー、マージリクエスト、エピック、その他の作業アイテムを検索し、カスタマイズ可能なフィールドとフィルタリングを備えたテーブルまたはリスト表示で結果を確認できます。\n\n埋め込みビューは、静的なドキュメントをプロジェクトデータと同期を保つライブダッシュボードに変換し、チームがコンテキストを保ちながら、ワークフロー全体でコラボレーションを向上させることができます。\n\n埋め込みビューの改善に向けたご意見やご提案を、ぜひ[フィードバックイシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/509792)よりお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/user/glql/#embedded-views)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15008)\n\n\u003Cfigure class=\"video_container\">\n\u003Ciframe src=\"https://www.youtube.com/embed/DG_DL5r2GCM?si=6ATRXOF06qs0rMPS\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n### **直接転送による移行**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\n直接転送による移行が一般提供されるようになりました。GitLabインスタンス間でGitLabグループとプロジェクトを直接転送で移行するには、GitLab UIまたは[REST API](https://docs.gitlab.com/ee/api/bulk_imports.html)を使用できます。\n\n[エクスポートファイルのアップロードによる移行](https://docs.gitlab.com/ee/user/project/settings/import_export.html#migrate-projects-by-uploading-an-export-file)と比較して、直接転送は：\n\n* 大規模なプロジェクトでより確実に動作します。\n* ソースインスタンスと宛先インスタンス間のバージョンギャップが大きい移行をサポートします。\n* 移行プロセスと結果に関するより良い洞察を提供します。\n\nGitLab.comでは、直接転送による移行はデフォルトで有効になっています。GitLab Self-ManagedおよびGitLab Dedicatedでは、管理者が[機能を有効にする](https://docs.gitlab.com/ee/administration/settings/import_and_export_settings.html#enable-migration-of-groups-and-projects-by-direct-transfer)必要があります。\n\n![直接転送による移行](https://about.gitlab.com/images/18_3/migration_history.png)\n\n### **CI/CDジョブトークンのきめ細かい権限設定**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nパイプラインセキュリティがより柔軟になりました。ジョブトークンは、パイプライン内のリソースへのアクセスを提供する一時的な認証情報です。これまで、これらのトークンはユーザーから全権限を継承していたため、必要以上に広範なアクセス権限を持ってしまうことがありました。\n\n新しいジョブトークンのきめ細かい権限設定機能により、ジョブトークンがプロジェクト内でアクセスできる特定のリソースを正確に制御できるようになりました。これにより、CI/CDワークフローで最小権限の原則を適用し、CI/CDジョブトークンでプロジェクトにアクセスする際に、ジョブがタスクを完了するための必要最小限のアクセスのみを付与できます。\n\nパイプラインでの長期トークンへの依存を減らすために、[詳細権限機能のさらなる拡充](https://gitlab.com/groups/gitlab-org/-/epics/6310)に積極的に取り組んでいます。\n\n[ドキュメント](https://docs.gitlab.com/ci/jobs/fine_grained_permissions/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15258)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/15258)\n\n![CI/CDジョブトークンのきめ細かい権限設定](https://about.gitlab.com/images/18_3/sscs_authz_fine_grained_job_tokens.png)\n\n### **GitLab Duo Self-HostedでCode Reviewが利用可能に（ベータ版）**\n\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nGitLab Duo Self-HostedでGitLab Duo Code Reviewを使用できるようになりました。この機能はGitLab Duo Self-Hostedでベータ版として提供され、Mistral、Meta Llama、Anthropic Claude、OpenAI GPTモデルファミリーをサポートしています。\n\nGitLab Duo Self-HostedでCode Reviewを使用して、データ主権を損なうことなく開発プロセスを加速させます。Code Reviewがマージリクエストをレビューすると、潜在的なバグを特定し、直接適用できる改善を提案します。Code Reviewを使用して、人間にレビューを依頼する前に変更を反復して改善します。\n\nCode Reviewに関するフィードバックは[イシュー517386](https://gitlab.com/gitlab-org/gitlab/-/issues/517386)までお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/#gitlab-duo-in-merge-requests)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/524929)\n\n[](https://gitlab.com/gitlab-org/gitlab/-/issues/524929)\n\n![GitLab Duo Self-HostedでCode Reviewが利用可能に（ベータ版）](https://about.gitlab.com/images/18_3/Self_Hosted_Code_Review-min.png)\n\n### **GitLab Duo Code Reviewのカスタム指示**\n\n> SaaS: Premium、Ultimate、Duo Enterprise\\\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nGitLab Duo Code Reviewのカスタム指示で、プロジェクト全体で一貫したコードレビュー標準を適用します。globパターンを使用して異なるファイルタイプに特定のレビュー基準を定義し、言語固有の規約が最も重要な場所に確実に適用されるようにします。\n\nカスタム指示では、次のことが可能です：\n\n* チームのコードレビュー標準を記述する\n* globパターンを使用してファイル固有の指示を定義する\n* カスタム指示を参照した、明確にラベル付けされたフィードバックを確認する\n\nリポジトリにカスタム指示を含む[.gitlab/duo/mr-review-instructions.yaml](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/#customize-instructions-for-gitlab-duo-code-review)ファイルを作成するだけです。GitLab Duoは自動的にこれらの指示をレビューに組み込み、フィードバックを提供する際に特定の指示グループを引用します。\n\n[フィードバックイシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/517386)でご意見やご提案をお寄せいただき、この機能の改善にご協力ください。\n\n[ドキュメント](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/#customize-instructions-for-gitlab-duo-code-review)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/545136)\n\n[](https://gitlab.com/gitlab-org/gitlab/-/issues/545136)\n\n![GitLab Duo Code Reviewのカスタム指示](https://about.gitlab.com/images/18_3/DCR-Instructions.png)\n\n### **GitLab Duo Self-Hostedに独自のモデルを持ち込む（ベータ版）**\n\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nGitLab Duo Self-Hostedでは、GitLab Duo機能で使用する独自のモデルを持ち込むことができるようになりました。この機能はベータ版で、GitLab Duo Enterpriseをお使いのすべてのGitLab Self-Managedのお客様が利用できます。インスタンス管理者は、サポートされているGitLab Duo機能で使用する互換性のあるモデルを設定できます。\n\nこの機能により、GitLab Duo Self-Hostedの柔軟性は向上しますが、GitLabはすべてのGitLab Duo機能がすべての互換モデルで動作することをお約束できません。インスタンス管理者は、選択したモデルの互換性とパフォーマンスを検証してご確認いただく必要があります。なお、GitLabは、選択したモデルまたはプラットフォーム固有の問題については、GitLabからの技術サポートは提供されませんのでご了承ください。\n\n[ドキュメント](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_models_and_hardware_requirements/#bring-your-own-compatible-model)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/517581)\n\n[](https://gitlab.com/gitlab-org/gitlab/-/issues/517581)\n\n![](https://about.gitlab.com/images/18_3/SH_compatible_models.png)\n\n### **GitLab Duo Self-Hostedでハイブリッドモデルが選択可能に（ベータ版）**\n\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nGitLab Duo Self-HostedでGitLab AIベンダーモデルとプライベートに設定されたセルフホストモデルの組み合わせを使用できるようになりました。この機能はベータ版で、GitLab Self-ManagedですべてのGitLab Duo Enterpriseのお客様が利用できます。\n\nGitLab Duo Self-Hostedのハイブリッドモデルにより、GitLab Self-Managedインスタンス管理者は、セルフホストモデルとセルフホストAIゲートウェイ、またはGitLab AIベンダーモデルとGitLabホストのAIゲートウェイを、機能ごとに選択できるようになりました。これにより、管理者はセキュリティとスケーラビリティの要件のバランスを取ることができます。ハイブリッドモデル選択に関するフィードバックを提供するには、[イシュー561048](https://gitlab.com/gitlab-org/gitlab/-/issues/561048)をご覧ください。\n\n[ドキュメント](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/#decide-on-your-configuration-type)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17192)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/17192)\n\n![GitLab Duo Self-Hostedでハイブリッドモデルが選択可能に（ベータ版）](https://about.gitlab.com/images/18_3/SH_Hybrid.png)\n\n### **コンプライアンスフレームワーク制御の違反の表示（ベータ版）**\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\n以前のコンプライアンス違反レポートは、グループ内のすべてのプロジェクトのマージリクエストアクティビティの全体的な概要を表示していました。検出可能なコンプライアンス違反は、職務分離の懸念に関連するもので、以下の内容でした：\n\n* マージリクエストの作成者が自分のマージリクエストを承認した場合を検出\n* マージリクエストが2つ未満の承認でマージされた場合を検出\n\nしかし、ユーザーフィードバックにより、違反分類が分かりにくく、実際のコンプライアンス用途にうまく適合しないことが判明しました。\n\nGitLab 18.3では、職務分離の範囲を超えて、コンプライアンスフレームワークのコンプライアンス制御と要件の違反を含むように違反レポートを大幅に強化しています。各カスタムコンプライアンスフレームワーク制御には、違反に関する詳細な情報を提供する関連監査イベントがあります。これには、誰が違反を犯したか、いつ発生したか、どのように修正するかといった内容が含まれ、ユーザー名とIPアドレス、さらに実行可能な修正提案も提供されます。\n\nこれらの改善により、コンプライアンスマネージャーは、組織が特定のコンプライアンスフレームワークに確実に準拠できるよう、より強力で関連性の高い情報を得られるようになります。非準拠を効果的に特定、修正、防止できるという安心感ももたらします。\n\n![コンプライアンスフレームワーク制御の違反の表示（ベータ版）](https://about.gitlab.com/images/18_3/compliance_link_violations_to_framework_controls.png)\n\n### **新しいWeb IDEソースコントロール操作**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\n本リリースでは、Web IDEに追加のソースコントロール機能が追加されました。ブラウザから離れることなく、Gitワークフローをより効率的に管理できます。**ソースコントロール**パネルで、次のことができるようになりました：\n\n* ブランチの作成と削除。\n* 既存のブランチをベースとしてブランチを作成。\n* 最後のコミットを修正して素早く修正。\n* インターフェースから直接変更を強制プッシュ。\n\nこれらの機能強化により、Git操作が指先で行えるようになります。利用可能な機能については、[ソースコントロールを使用する](https://docs.gitlab.com/user/project/web_ide/#use-source-control)をご覧ください。\n\n[ドキュメント](https://docs.gitlab.com/user/project/web_ide/#use-source-control)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/11142)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/11142)\n\n![新しいWeb IDEソースコントロール操作](https://about.gitlab.com/images/18_3/webide-source-control.gif)\n\n### **GitLab CI/CDのAWS Secrets Managerサポート**\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nAWS Secrets Managerに保存されたシークレットをCI/CDジョブで簡単に取得して使用できるようになりました。AWSとの新しい統合により、GitLab CI/CDを通じてAWS Secrets Managerと対話するプロセスが簡素化され、AWSのお客様のビルドとデプロイプロセスの合理化に役立ちます！\n\n[GitLabの共同開発プログラム](https://about.gitlab.com/community/co-create/)を通じてこの機能の開発にご協力いただいた[Markus Siebert](https://gitlab.com/m-s-db)さんと[Henry Sachs](https://gitlab.com/DerAstronaut)さんに感謝します！\n\n[ドキュメント](https://docs.gitlab.com/ci/secrets/aws_secrets_manager/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17822)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/17822)\n\n![](https://about.gitlab.com/images/18_3/AWS_image.png)\n\n### **カスタム管理者ロール**\n\n> Self-Managed: Ultimate\n\nカスタム管理者ロールは、GitLab Self-ManagedおよびGitLab Dedicatedインスタンスの管理エリアに詳細な権限をもたらします。管理者は、フルアクセスを付与する代わりに、ユーザーが必要とする特定の機能のみにアクセスできる専門的なロールを作成できるようになりました。この機能により、組織は管理機能に対する最小権限の原則を適用し、過剰な権限によるセキュリティリスクを削減しつつ、運用効率を向上させることができます。\n\nご質問がある場合、実装経験を共有したい場合、または潜在的な改善について当社のチームと直接関わりたい場合は、[フィードバックイシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/509376)をご覧ください。\n\n[ドキュメント](https://docs.gitlab.com/user/custom_roles/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15069)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/15069)\n\n![カスタム管理者ロール](https://about.gitlab.com/images/18_3/sscs_authz_custom_admin_role.png)\n\n## GitLab 18.3リリースに含まれるその他の改善点\n\n### **エピックの担当者、マイルストーンなどを一括編集**\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nグループ内でより多くのエピック属性を一括編集できるようになりました。ラベルに加えて、複数のエピックの担当者、ヘルスステータス、サブスクリプション、機密性、マイルストーンを一度に更新できます。\n\nこの機能強化により、複数のエピックに同じ変更を同時に適用できるため、大量のエピックの管理が効率化されます。\n\n[ドキュメント](https://docs.gitlab.com/user/group/epics/manage_epics/#bulk-edit-epics)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/11901)\n\n![エピックの担当者、マイルストーンなどを一括編集](https://about.gitlab.com/images/18_3/bulk_edit_epics.png)\n\n### **Wiki機能の強化**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nこのリリースでは、3つの主要な改善によりWiki機能が強化されます：Wikiページへのサブスクライブ、ページ編集中のWikiコメントの表示、Wikiページコメントの並べ替えができるようになりました。\n\nこれらの機能強化により、チームはドキュメントでより効果的にコラボレーションできます：\n\n* コンテキスト内で直接コンテンツについて議論する。\n* 改善や修正を提案する。\n* ドキュメントを正確かつ最新の状態に保つ。\n* 知識と専門知識を共有する。\n\nこれらのアップデートにより、GitLab Wikiは直接のフィードバックとディスカッションを通じてプロジェクトと共に進化する生きたドキュメントとして活用できます。\n\n[ドキュメント](https://docs.gitlab.com/user/discussions/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16403)\n\n### **浅いクローニングによるワークスペースの高速起動**\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nワークスペースは、起動時間を短縮するために浅いクローニングを使用するようになりました。初期化中、GitLabは完全なGit履歴ではなく、最新のコミット履歴のみをダウンロードします。ワークスペース起動後、Gitはバックグラウンドで浅いクローンを完全なクローンに変換します。\n\nこの機能は新しいワークスペースすべてに自動適用され、設定は不要で、開発ワークフローに影響を与えません。\n\n[ドキュメント](https://docs.gitlab.com/user/workspace/#shallow-cloning)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/543982)\n\n### **Kubernetes 1.33サポート**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLabはKubernetesバージョン1.33に完全対応しました。アプリをKubernetesにデプロイする場合、接続クラスターを最新バージョンにアップグレードして、機能をすべて利用できます。\n\n詳細については、[GitLab機能でサポートされているKubernetesバージョン](https://docs.gitlab.com/user/clusters/agent/#supported-kubernetes-versions-for-gitlab-features)をご覧ください。\n\n[ドキュメント](https://docs.gitlab.com/user/clusters/agent/#supported-kubernetes-versions-for-gitlab-features)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/538906)\n\n### **簡潔なDASTジョブ出力**\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nGitLab 18.3では、動的解析セキュリティテストのジョブ出力が改善されました。\n\n改善されたジョブ出力は、スキャン結果の理解や、失敗のトラブルシューティングに役立つ、明確で整理された情報を提供します。\n\nジョブ出力の各セクションは簡潔で直感的であり、出力の下部にトラブルシューティングドキュメントへのリンクがあります。簡潔なジョブ出力を上書きするには、DAST設定で`DAST_FF_DIAGNOSTIC_JOB_OUTPUT: \"true\"`を設定します。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dast/browser/troubleshooting/#what-is-dast-doing)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/18342)\n\n### **ライセンス情報のユーザー定義ソース**\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nユーザーは、ライセンス情報の優先ソース（GitLabライセンスデータベースまたはCycloneDX SBOMレポート）を選択できるようになりました。これにより、オープンソース依存関係のライセンス情報取得がより柔軟になります。ライセンス情報のソースを指定する場合は、[セキュリティ設定UI](https://docs.gitlab.com/user/application_security/detect/security_configuration/#with-the-ui)で選択できます。デフォルトでは、ライセンス情報のソースとしてSBOMデータを使用します。\n\n[ドキュメント\n](https://docs.gitlab.com/user/compliance/license_scanning_of_cyclonedx_files/#use-cyclonedx-report-as-a-source-of-license-information)[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/501662)\n\n### **脆弱性レポートでOWASP 2021によるグループ化**\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nプロジェクトとグループの脆弱性レポートで、脆弱性をOWASP Top 10 2021カテゴリでグループ化できるようになりました。GitLab.comおよびGitLab Dedicatedインスタンスでのみ利用可能です。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/vulnerability_report/#advanced-vulnerability-management)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/532703)\n\n![脆弱性レポートでOWASP 2021によるグループ化](https://about.gitlab.com/images/18_3/group-by-owasp-2021-on-vulnerability-report.png)\n\n### **セキュリティポリシー監査イベント**\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nGitLab Ultimateは、セキュリティポリシー管理のための包括的な監査イベントが利用できるようになり、各セキュリティポリシープロジェクト内でイベントが整理、一元化されます。\n\nセキュリティチームは次のことができるようになります：\n\n* 詳細なメタデータでポリシーのすべての変更を追跡する。\n* スキャンとパイプライン実行の失敗を含む、実施の失敗を監視する。\n* スキップされたスキャン実行とパイプライン実行パイプラインを監視する。\n* ポリシー違反でマージされたMRを含む、各プロジェクト内でのポリシー違反を検出する。\n* 制限を超えた場合にアラートを受け取る。\n* ポリシー設定エラーを検出する。\n* 大量処理向けストリーミング専用オプションを使用する。\n\n新しい監査イベントには以下が含まれます：\n\n* [security_policy_create](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/audit_events/types/security_policy_create.yml)\n* [security_policy_delete](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/audit_events/types/security_policy_delete.yml)\n* [security_policy_update](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/audit_events/types/security_policy_update.yml)\n* [security_policy_merge_request_merged_with_policy_violations](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/audit_events/types/security_policy_merge_request_merged_with_policy_violations.yml)\n* [security_policy_yaml_invalidated](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/audit_events/types/security_policy_yaml_invalidated.yml)\n* [security_policies_limit_exceeded](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/audit_events/types/security_policy_yaml_invalidated.yml)\n* [security_policy_violations_detected](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/audit_events/types/security_policy_violations_detected.yml)（ストリーミングのみ）\n* [security_policy_pipeline_failed](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/audit_events/types/security_policy_pipeline_failed.yml)（ストリーミングのみ）\n* [security_policy_pipeline_skipped](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/audit_events/types/security_policy_pipeline_skipped.yml)（ストリーミングのみ）\n* [merge_request_branch_bypassed_by_security_policy](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/audit_events/types/merge_request_branch_bypassed_by_security_policy.yml)\n\nこの機能強化により、ポリシーの変更、設定エラー、実施ギャップを把握できるようになり、セキュリティ体制が強化され、より迅速なインシデント対応と徹底的な監査機能が可能になります。\n\n[ドキュメント](https://docs.gitlab.com/ee/user/compliance/audit_event_streaming/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15869)\n\n![セキュリティポリシー監査イベント](https://about.gitlab.com/images/18_3/policy-audit-events-example-image.png)\n\n### **サービスアカウントの追加メール設定オプション**\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nデフォルトでは、GitLabが新しいサービスアカウント用に自動的にメールアドレスを生成します。今回のアップデートにより、組織はUIでサービスアカウントにカスタムメールアドレスを設定できるようになりました。以前は、カスタムメール設定はサービスアカウントAPIを通じてのみ可能でしたが、この改善により、組織は通知を指定されたメールアドレスにより確実に配信できます。\n\n[ドキュメント](https://docs.gitlab.com/user/profile/service_accounts/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/537976)\n\n### **インスタンスレベルのコンプライアンスとポリシー管理（ベータ版）**\n\n> Self-Managed: Ultimate\n\nエンタープライズユーザーは、複数のトップレベルグループ全体でコンプライアンスフレームワークとセキュリティポリシーを管理したいと考えています。これは、インスタンス内のすべてのグループが次の場合によくあります：\n\n* 同じコンプライアンスフレームワークを共有している（例：グループ内のすべてのプロジェクトがISO 27001標準に準拠する必要がある）\n* 同様のポリシーを実施している（例：すべてのグループで同じパイプライン実行ポリシーを共有している）\n\nGitLab 18.3では、GitLab Self-Managedインスタンス向けにコンプライアンスとセキュリティポリシー管理がベータ版で利用可能になりました。単一のトップレベルグループからコンプライアンスフレームワークとセキュリティポリシーを作成、設定、割り当て、GitLab Self-Managedインスタンス全体の他のすべてのトップレベルグループに適用できます。\n\nコンプライアンスとセキュリティポリシーのトップレベルグループを使用することで、コンプライアンスフレームワークとセキュリティポリシーを管理および編集できる信頼できる単一の情報源が確立されます。グループ管理者は、これらのコンプライアンスフレームワークとセキュリティポリシーをそれらのグループ内のすべてのプロジェクトに適用できます。\n\n選択したトップレベルのコンプライアンスとセキュリティポリシーグループから主要なフレームワークとポリシーを管理することにより、GitLab Self-Managedインスタンス全体で主要なコンプライアンスとセキュリティ要件の管理、実施が簡素化されます。ただし、各グループは、固有の状況やワークフローに対処するために、独自のコンプライアンスフレームワークとセキュリティポリシーを作成する権限は維持されます。\n\nこの機能は、GitLab Self-Managed向けに提供されています。GitLab.comおよびGitLab Dedicatedでは、既に単一のトップレベルグループまたはネームスペース内でポリシーを一元的に管理可能です。\n\n[ドキュメント](https://docs.gitlab.com/user/compliance/compliance_frameworks/centralized_compliance_frameworks/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15864)\n\n### **SAML SSOのセッションタイムアウト属性のサポート**\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nGitLabは、アイデンティティプロバイダー（IdP）からのSAMLアサーションに含まれる`SessionNotOnOrAfter`属性を自動的に検出、適用するようになりました。この属性が存在する場合、GitLabはユーザーセッションをIdPによって指定された時刻に期限切れに設定し、組織全体で統一されたセッション管理を実現します。設定変更は不要で、 IdPが属性を提供すれば、GitLabが自動的に指定された有効期限を適用します。\n\n[ドキュメント](https://docs.gitlab.com/user/group/saml_sso/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/262074)\n\n### **SSHキーのセキュリティ警告**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLabは、ユーザーが弱いSSHキーをアップロードした際にUIにセキュリティ警告を表示するようになりました。この警告は、古いキータイプまたは不十分なビット長（2048ビット未満）のキーに対して表示されます。この変更により、SSHキーのセキュリティベストプラクティスをユーザーに周知し、より強固な暗号キーの利用を促進します。\n\n[ドキュメント](https://docs.gitlab.com/user/ssh/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/432624)\n\n### **GitLab Duo Self-Hostedで使用可能なモデルの追加**\n\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nGitLab Duo Enterpriseをご利用のGitLab Self-Managedのお客様は、GitLab Duo Self-HostedでAnthropic Claude 4を利用できるようになりました。Claude 4はAWS Bedrockでサポートされています。また、オープンソースのOpenAI GPT OSS 20Bと120Bが実験的モデルとして追加され、vLLM、Azure OpenAI、AWS Bedrockで利用可能です。これらのモデルをGitLab Duo Self-Hostedで使用することに関するフィードバックは、[イシュー523918](https://gitlab.com/gitlab-org/gitlab/-/issues/523918)をご覧ください。\n\n[ドキュメント](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_models_and_hardware_requirements/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/560016)\n\n### **マイワークのグループ向け新しいナビゲーション体験**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\n**マイワーク**のグループ概要を大幅に改善しました。これにより、グループの発見とアクセス方法が効率化されます。新しいタブ付きインターフェースでは、**メンバー**タブでアクセス可能なグループを包括的に表示し、**無効**タブで削除保留中のグループを確認できます。また、適切な権限を持つユーザー向けにリスト表示で**編集**と**削除**アクションを追加し、グループ管理を効率化しました。これらの改善により、重要なグループの検索と管理がより容易になります。\n\n新しいナビゲーションシステムの利用体験について、[エピック18401](https://gitlab.com/groups/gitlab-org/-/epics/18401)にご意見をお寄せください。フィードバックをお待ちしております！\n\n[ドキュメント](https://docs.gitlab.com/user/group/#view-groups)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/502487)\n\n![マイワークのグループ向け新しいナビゲーション体験](https://about.gitlab.com/images/18_3/tenant_scale_your_work_groups_update.png)\n\n### **GitLab Pagesサイトの一意のドメインのデフォルトを制御**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\n管理者は、新しいGitLab Pagesサイトの一意のドメインに関するデフォルト動作を設定できるようになりました。デフォルトでは、新しいPagesサイトは、サイト間のCookie共有を防ぐために一意のドメインURL（例：`my-project-1a2b3c.example.com`）を使用します。\n\nインスタンス向けのこの新しい設定により、新しいPagesサイトをデフォルトでパスベースのURL（例：`my-namespace.example.com/my-project`）を使用するように設定できます。これにより、組織はGitLab Pagesの動作を自社のワークフローやセキュリティ要件に合わせることができます。\n\nユーザーは個々のプロジェクトでこの設定を上書きでき、既存のPagesサイトは影響を受けません。\n\n[ドキュメント\n](https://docs.gitlab.com/administration/pages/#disable-unique-domains-by-default)[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/555559)\n\n### **OAuthアプリでSSO認証をサポート**\n\n> SaaS: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nOAuthアプリケーションが組織のシングルサインオン要件とシームレスに統合できるようになりました。以前は、ユーザーは最初にGitLabで、次にSSOで認証するという2段階認証が必要で、不要な手間と複雑さが生じていました。\n\n現在、OAuthアプリケーションは、認証リクエストでパラメーターを指定し、必要に応じてSSO認証を自動的に開始できます。これにより以下が提供されます：\n\n* ユーザー向けの統一された認証体験\n* 組織のSSOポリシーへの自動準拠\n* すべてのGitLab統合全体で一貫したセキュリティ\n* パラメーター追加だけのデベロッパー向けの簡単な実装\n\nOAuth統合は、セキュリティを維持しながら煩雑な認証ワークフローを排除し、SSOポリシーを自動的に適用するようになりました。\n\n[ドキュメント\n](https://docs.gitlab.com/api/oauth2/#authorization-code-flow)[イシュー\n](https://gitlab.com/gitlab-org/gitlab/-/issues/461212)[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/326288)\n\n### **GitLab Runner 18.3**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab Runner 18.3も本日リリースされます！GitLab Runnerは、CI/CDジョブを実行し、結果をGitLabインスタンスに送信する、拡張性の高いビルドエージェントです。GitLabに含まれるオープンソースの継続的インテグレーションサービスであるGitLab CI/CDと連携して動作します。\n\nバグ修正：\n\n* [GitLab 18.2.0では、Runnerはサブディレクトリファイルをキャッシュキーとして使用してジョブキャッシュをプルできません](https://gitlab.com/gitlab-org/gitlab/-/issues/556464)\n* [Docker executorがジョブの開始に断続的に失敗し、ユーザー名またはパスワードが正しくないというエラーメッセージを返す](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/38707)\n* [`none`と`empty`のGit戦略間での`*_get_sources`フックの使用における不整合](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/38703)\n* [非OLMマニフェストでデプロイされたOperatorが間違ったデフォルトイメージを想定する](https://gitlab.com/gitlab-org/gl-openshift/gitlab-runner-operator/-/issues/228)\n* [CRに`app.kubernetes.io/instance`ラベルがある場合、Operatorが間違った名前でConfigMapを作成する](https://gitlab.com/gitlab-org/gl-openshift/gitlab-runner-operator/-/issues/183)\n* [OpenShift 4.9でOperator 1.10.0が`gitlab-runner`ネームスペースでランナーConfigMapの作成とポッドの起動に失敗する](https://gitlab.com/gitlab-org/gl-openshift/gitlab-runner-operator/-/issues/138)\n\n新機能：\n\n* [GitLab Runner Operatorがランナーマネージャーポッドアノテーションをサポートするようになりました](https://gitlab.com/gitlab-org/gl-openshift/gitlab-runner-operator/-/issues/245)\n* [GitLab Runner OperatorがOpenShift 4.19をサポートするようになりました](https://gitlab.com/gitlab-org/gl-openshift/gitlab-runner-operator/-/issues/253)\n\nすべての変更の一覧は、GitLab Runnerの[CHANGELOG](https://gitlab.com/gitlab-org/gitlab-runner/blob/18-3-stable/CHANGELOG.md)で確認できます。\n\n[ドキュメント](https://docs.gitlab.com/runner)\n\n### **GitLab管理のOpenTofuおよびTerraform状態用の新しいCLIコマンド**\n\n> SaaS: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab CLI（`glab`）に、GitLab管理の`OpenTofu`および`Terraform`状態を支援するための新しいトップレベルコマンド`opentofu`が含まれるようになりました。`opentofu`コマンドは、`terraform`およびtfコマンドのエイリアスとしても使用できます。\n\n以下のコマンドが追加されました：\n\n* `glab opentofu init`：状態バックエンドをローカルで初期化します\n* `glab opentofu state list`：プロジェクト内のすべての状態を一覧表示します\n* `glab opentofu state download`：最新の状態または特定のバージョンをダウンロードします\n* `glab opentofu state delete`：状態全体または特定のバージョンを削除します\n* `glab opentofu state lock`：状態をロックします\n* `glab opentofu state unlock`：状態のロックを解除します\n\n`opentofu`コマンドで状態を管理するには、`glab` 1.66以降が必要です。\n\n[ドキュメント](https://docs.gitlab.com/user/infrastructure/iac/terraform_state)\\\n[イシュー](https://gitlab.com/gitlab-org/cli/-/issues/7954)\n\n### **依存関係スキャンアナライザーのファイル場所情報の改善**\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\n依存関係をそのソースまで追跡できることは、特に脆弱性の修正にとって重要です。以前は、依存関係スキャンアナライザーが期限切れで削除されるジョブアーティファクトにリンクすることがあり、依存関係のソースまで追跡することが困難でした。本リリースで、依存関係スキャンアナライザーが、依存関係を導入したプロジェクトファイルにリンクできるようになりました。このオプションを有効にすると、依存関係リストと脆弱性レポートのリンクが確実に利用可能になります。ユーザーは、依存関係スキャンジョブで`DS_FF_LINK_COMPONENTS_TO_GIT_FILES=true`を設定することで、この機能を有効にできます。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/dependency_scanning/dependency_scanning_sbom/#customizing-behavior-with-the-cicd-template)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/537716)\n\n### **API経由でパイプライン実行ポリシーにCI/CD設定へのアクセスを付与**\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nプロジェクトREST APIを使用して、新しい`spp_repository_pipeline_access`フィールドでセキュリティポリシープロジェクトの**パイプライン実行ポリシー**設定をプログラムで有効または無効にできるようになりました。以前は、この設定はGitLab UIでのみ管理できました。この機能強化により、次のことができるようになりました：\n\n* 現在の**パイプライン実行ポリシー**ステータスを`GET`する。\n* 設定をプログラムで有効または無効にするために`PUT`する。\n\nこの改善により、大規模でセキュリティポリシーを管理するチームにとって、より優れた自動化と統合ワークフローが実現されます。\n\n[ドキュメント](https://docs.gitlab.com/api/projects/#edit-a-project)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/524124)\n\n### **スキャン実行ポリシーテンプレート**\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\nスキャン実行ポリシーテンプレートは、一般的なユースケースに基づいてスキャン実行ポリシーを素早く作成するのに役立ちます。以下の3つのテンプレートから選択できます：\n\n* マージリクエストセキュリティ\n* スケジュールされたスキャン\n* リリースセキュリティ\n\nテンプレートを選択したら、そのテンプレートで有効にするGitLabセキュリティスキャンを選択して、すぐに開始します。より高度なユースケースがある場合は、カスタム設定に切り替えて、特定のブランチパターン、パイプラインソースなどでポリシーを拡張できます。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/policies/scan_execution_policies/#scan-execution-policy-editor)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/11919)\n\n![スキャン実行ポリシーテンプレート](https://about.gitlab.com/images/18_3/scan-execution-policy-templates.png)\n\n### **承認ポリシーのサービスアカウントとアクセストークンの例外**\n\n> SaaS: Ultimate\\\n> Self-Managed: Ultimate\n\n新しい**サービスアカウントとアクセストークンの例外**機能により、必要に応じてマージリクエスト承認ポリシーをバイパスできる特定のサービスアカウントとアクセストークンを指定できるようになりました。これにより、セキュリティコントロールを維持しながら、既知の自動化の摩擦を解消します。\n\n**主要な機能：**\n\n* 自動化ワークフローサポート：CI/CDパイプライン、プルミラーリング、自動バージョン更新のために承認要件をバイパスするように、特定のサービスアカウント、ボットユーザー、グループアクセストークン、プロジェクトアクセストークンを設定します。サービスアカウントは、人間のユーザーに対する制限を維持しながら、承認されたトークンを使用して保護されたブランチに直接プッシュできます。\n* 緊急アクセスと監査：重要なインシデントのブレークグラスシナリオを有効にし、包括的な監査証跡を提供します。すべてのバイパスイベントは、コンテキストと理由を含む詳細な監査ログを生成し、停止中またはセキュリティ修正時の迅速な対応を可能にしながら、コンプライアンス要件をサポートします。\n* GitOps統合：リポジトリミラーリング、外部CIシステム（Jenkins、CloudBees）、自動変更ログ生成、GitFlowリリースプロセスなど、一般的な自動化の課題を解決します。サービスアカウントは、特定のプロジェクトとブランチにスコープされたトークンベースのアクセスで必要最小限の権限を受け取ります。\n\nこの機能強化により、ガバナンスコントロールを維持しながら、現代のDevOps自動化のニーズに対して厳格なセキュリティポリシーの適用が維持され、カスタムの回避策が不要になります。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/policies/merge_request_approval_policies/#access-token-and-service-account-exceptions)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/18112)\n\n![承認ポリシーのサービスアカウントとアクセストークンの例外](https://about.gitlab.com/images/18_3/access-token-exception-policies.png)\n\n### **エンタープライズユーザーの機能強化**\n\n> SaaS: Premium、Ultimate\n\nGitLab 18.3では、ユーザープライバシーとライフサイクル管理に対する組織の制御を強化するエンタープライズユーザー機能強化が導入されます。\n\nグループオーナーは、ユーザーAPIを使用してネームスペース内のエンタープライズユーザーを削除できるようになりました。この破壊的なアクションは、ユーザーの貢献のリンクを解除し、それらをシステム全体のGhostユーザーに関連付けます。これらのオプションは、自動SCIMインポートで誤って作成されたユーザーをクリーンアップする場合や、ユーザー名とメールを再利用する必要があるフェデレーション環境を管理したりする場合に特に有用です。\n\nさらに、組織はエンタープライズユーザーのメールをユーザープロファイルで非表示にできるようになり、すべてのエンタープライズユーザーに対してより広範なメールプライバシーの実施を提供します。\n\n[ドキュメント](https://docs.gitlab.com/user/enterprise_user/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/9262)\n\n### **強化された管理エリアプロジェクトリスト**\n\n> Self-Managed: Free、Premium、Ultimate\n\nより一貫した体験をGitLab管理者に提供するために、**管理者エリア**プロジェクトリストをアップグレードしました：\n\n* 削除保護の遅延：プロジェクトの削除は、GitLab全体で使用されているのと同じ安全な削除フローに従うようになり、偶発的なデータ損失を防ぎます。\n* より高速なインタラクション：ページのリロードなしでプロジェクトのフィルター、並べ替え、ページ分割が可能になり、より応答性の高い体験を提供します。\n* 一貫したインターフェース：プロジェクトリストは、GitLab全体の他のプロジェクトリストの外観と動作に統一されました。\n\nこのアップデートにより、管理者の体験がGitLabデザイン標準に沿ったものになり、データを保護するための重要な安全機能が追加されます。プロジェクト管理の今後の機能強化は、プラットフォーム全体のすべてのプロジェクトリストに自動的に反映されます。\n\n[ドキュメント](https://docs.gitlab.com/administration/admin_area/#administering-projects)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17782)\n\n## **実験的機能**\n\n### **GitLabモデルコンテキストプロトコルサーバー**\n\nGitLabモデルコンテキストプロトコル（MCP）サーバーにより、AIアプリケーションがGitLabインスタンスに安全に接続できるようになります。MCPサーバーを設定すると、Claude Desktop、Cursor、その他のMCP対応アプリケーションなどのAIアシスタントが、GitLabデータにアクセスし、ユーザーに代わってアクションを実行できます。このリリースには、計画イシュー、マージリクエスト、CIパイプラインジョブと連携するツールが含まれており、今後のマイルストーンでサポートツールを拡張していく予定です。\n\nMCPサーバーは、AIツールに対して標準化された方法を提供します：\n\n* GitLabプロジェクト情報にアクセスする\n* イシューとマージリクエストデータを取得する\n* GitLab APIと安全に連携する\n* AIアシスタントを通じてGitLab固有の操作を実行する\n\nGitLabのMCPサーバーはリモートで実行されるため、ローカルにインストールまたは実行する必要はありません。アップデートは自動的に適用されます。\n\n実験的機能を有効にする方法を含む詳細については、[GitLab MCPサーバーのドキュメント](https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server)をご覧ください。\n\n### **GitLab Duo CLIエージェント（ベータ版）**\n\nGitLab Duo CLIエージェントを素早く作成し、Claude Code、OpenAI Codex、Amazon Q、Google Gemini CLI、OpenCode AIコーディングアシスタントと統合できるようになりました。このベータ機能は、すべてのGitLab Duo Enterpriseのお客様が利用でき、選択したプロバイダー用に独自のAPIキー（BYOK）を持ち込む必要があります。\n\nイシュー、エピック、またはマージリクエストで、作成したサービスアカウントユーザーをタグ付けすることで、CLIエージェントにタスクの完了を依頼できます。タグ付けされると、そのエージェントに接続された統合コーディングアシスタントがトリガーされ、自動CI/CDパイプラインが実行され、タスクが完了します。マージ可能な変更またはインラインコメントとして応答を受け取ります。\n\nこの仕組みによりブランチ保護と承認ルールを尊重しながら、セキュリティ、コスト管理、インフラストラクチャガバナンスに関する組織のニーズを満たしつつ、CLIエージェントの力をGitLabに直接もたらします。今後のイテレーションでは、GitLab管理のAPIキーを使用してCLIエージェントをコーディングアシスタントとネイティブに統合できるようになります。\n\nGitLab Duo CLIエージェントの使用に関するフィードバックは、[イシュー557820](https://gitlab.com/gitlab-org/gitlab/-/issues/557820)をご覧ください。\n\n## バグ修正、パフォーマンスの改善、UIの改善\n\nGitLabでは、ユーザーに可能な限り最高の環境をお届けできるよう尽力しています。リリースのたびに、バグを修正し、パフォーマンスを改善し、UIを向上させるためにたゆまぬ努力を続けています。GitLabは、100万人を超えるGitLab.comユーザーをはじめ、GitLabのプラットフォームを利用するすべての人にスムーズでシームレスな体験をお届けすることを約束します。\n\n18.3で提供されたすべてのバグ修正、パフォーマンスの強化、UI改善を確認するには、以下のリンクをクリックしてください。\n\n* [バグ修正](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=type%3A%3Abug&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.3)\n* [パフォーマンスの改善](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=bug%3A%3Aperformance&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.3)\n* [UIの改善](https://papercuts.gitlab.com/?milestone=18.3)\n\n## 非推奨事項\n\n新たに非推奨になった機能、および現在非推奨になっているすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。[](\u003C>)\n\n## 削除された機能と破壊的な変更\n\n削除されたすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n* [cert-manager Helmチャートのアップデート](https://docs.gitlab.com/ee/update/deprecations.html#cert-manager-helm-chart-update)[](\u003C>)[](\u003C>)\n\n### 変更履歴\n\n変更内容をすべて表示するには、次のページから変更履歴を確認してください。\n\n* [](\u003C>)[GitLab](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/CHANGELOG.md)\n* [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/blob/main/CHANGELOG.md)\n* [VS CodeのGitLab Workflow](https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/main/CHANGELOG.md)\n* [GitLab CLI](https://gitlab.com/gitlab-org/cli/-/releases)\n\n### インストール\n\nGitLabを新規にインストールする場合は、[GitLabのダウンロードページ](https://about.gitlab.com/ja-jp/install/)をご覧ください。\n\n### 更新事項\n\n[更新ページ](https://about.gitlab.com/ja-jp/update/)をご覧ください。\n\n### ご不明な点がある場合\n\nご質問やご意見をお聞かせください。本リリースについてご不明な点がある場合は、[GitLabフォーラム](https://forum.gitlab.com/)にアクセスして質問を投稿してください。\n\n### GitLabサブスクリプションプラン\n\n* [Free](https://about.gitlab.com/pricing/)\n  ユーザー向けの永久無料機能を提供\n* [Premium](https://about.gitlab.com/pricing/premium/)\n  チームの生産性と調整を強化\n* [Ultimate](https://about.gitlab.com/pricing/ultimate/)\n  組織全体のセキュリティ、コンプライアンス、プランニングに対応\n\nGitLabのすべての機能を[無料](https://about.gitlab.com/free-trial/?hosted=saas)でお試しいただけます。\n\n*監修：ソリス ジェレズ / Jerez Solis [@jerezs](https://gitlab.com/jerezs)\n（GitLab合同会社 ソリューションアーキテクト本部 ソリューションアーキテクト）*\n\n### 過去の日本語リリース情報\n* [GitLab 18.4](https://about.gitlab.com/ja-jp/blog/gitlab-18-04-release)\n* [GitLab 18.3](https://about.gitlab.com/ja-jp/blog/gitlab-18-03-release)\n* [](\u003C>)[GitLab 18.2](https://about.gitlab.com/ja-jp/blog/gitlab-18-02-release)\n* [GitLab 18.1](https://about.gitlab.com/ja-jp/blog/gitlab-18-01-release)\n* [GitLab 18.0](https://about.gitlab.com/ja-jp/blog/gitlab-18-0-release/)\n* [GitLab 17.11](https://about.gitlab.com/ja-jp/blog/gitlab-17-11-release/)\n* [GitLab 17.10](https://about.gitlab.com/ja-jp/blog/gitlab-17-10-release/)\n* [GitLab 17.9](https://about.gitlab.com/ja-jp/blog/gitlab-17-9-release/)\n* [GitLab 17.8](https://about.gitlab.com/ja-jp/blog/gitlab-17-8-release/)\n* [GitLab 17.7](https://about.gitlab.com/ja-jp/blog/gitlab-17-7-release/)\n* [GitLab 17.6](https://about.gitlab.com/ja-jp/blog/gitlab-17-6-release/)\n* [GitLab 17.5](https://about.gitlab.com/ja-jp/blog/gitlab-17-5-released/)\n* [GitLab 17.4](https://about.gitlab.com/ja-jp/blog/gitlab-17-4-released/)\n* [GitLab 17.3](https://about.gitlab.com/ja-jp/blog/gitlab-17-3-released/)\n* [GitLab 17.2](https://about.gitlab.com/ja-jp/blog/gitlab-17-2-released/)\n* [GitLab 17.1](https://about.gitlab.com/ja-jp/blog/gitlab-17-1-released/)\n* [GitLab 16.11](https://about.gitlab.com/ja-jp/blog/gitlab-16-11-released/)[](\u003C>)",[771],"2025-08-25","2025-08-22",[900,748,681,9],"GitLab 18.3でリリースした最新機能を公開します。",{"featured":91,"template":685,"slug":981},"gitlab-18-03-release","content:ja-jp:blog:gitlab-18-03-release.yml","Gitlab 18 03 Release","ja-jp/blog/gitlab-18-03-release.yml","ja-jp/blog/gitlab-18-03-release",{"_path":987,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":988,"content":993,"config":1000,"_id":1002,"_type":14,"title":1003,"_source":16,"_file":1004,"_stem":1005,"_extension":19},"/ja-jp/blog/gitlab-18-04-release",{"config":989,"title":990,"description":991,"ogImage":992},{"noIndex":6},"GitLab 18.4リリース","GitLab 18.4でリリースした最新機能を公開します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1758202527/zbdm4mehauv3poqetyhk.png",{"heroImage":994,"body":995,"authors":996,"updatedDate":997,"date":998,"title":990,"tags":999,"description":991,"category":681},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758160154/ckr9nufkx3n2t0rp0iwd.png","本ブログは、[GitLab 18.4 Release](https://about.gitlab.com/releases/2025/09/18/gitlab-18-4-released/)の抄訳です。内容に相違がある場合は、原文が優先されます。\n\n## **GitLab Duo Model Selection（モデル選択）とGitLab Knowledge Graph（ナレッジグラフ）を搭載したGitLab 18.4をリリース**\n\n**9月23日の新機能**: GitLab Duo AI Catalogを導入しました。これは、チームが組織全体でカスタムビルドしたエージェントを作成、共有、協働できる集約ハブです。\n\nこのたび、GitLab 18.4のリリースを発表しました。このリリースでは、GitLab Duo Model Selectionの一般提供、GitLab Knowledge Graph、GitLab Duoでのエンドユーザーモデル選択機能の提供開始、さらにCI/CDジョブトークンによるGitプッシュリクエストの認証機能、Duo AI Catalogなど、さまざまな機能が追加されました。\n\nこれらの機能は、今回のリリースに含まれる19項目の改善点のほんの一部です。この記事では、お役に立つアップデートをすべてご紹介していますので、ぜひ最後までお読みください。\n\nGitLab 18.4には、GitLabコミュニティのユーザーから136件ものコントリビュートがありました。ありがとうございました！GitLabは[誰もがコントリビュートできる](https://about.gitlab.com/community/contribute/)プラットフォームであり、今回のリリースはユーザーのみなさまの協力なしには実現しませんでした。\n\n来月のリリースで予定されている内容を先取りするには、[今後のリリースページ ](https://about.gitlab.com/upcoming-releases/)をご覧ください。\n\n## **Q&A + コード: GitLab 18.4の詳細とコントリビューターコミュニティの発展**\n\n次回のGitLab Developer Showでは、GitLab 18.4の最新機能を詳しく解説し、活発なコントリビューターコミュニティの育成についてお話しします。ご質問やライブコードの実演をご覧いただきながら、GitLabとともに成長する方法を具体的にご紹介します。\n\n👉 [こちらから登録](https://www.linkedin.com/events/7373772262312906753/)\n\n**GitLab 18.4では、GitLab Duo Model SelectionとGitLab Duo Agent Platform（GitLab Duo Self-Hosted）が追加されました**\n\n[クリックしてSNSで共有しましょう！](http://twitter.com/share?text=GitLab+18.4+released+with+GitLab+Duo+Model+Selection+and+GitLab+Knowledge+Graph&url=https://about.gitlab.com/releases/2025/09/18/gitlab-18-4-released/&hashtags=)\n\n![notable-contributor-logo](https://about.gitlab.com/images/notable-contributor-logo.svg)\n\n## 今月の[注目コントリビューター](https://contributors.gitlab.com/docs/notable-contributors)は[Patrick Rice](https://gitlab.com/PatrickRice)さんです\n\nPatrick Riceさんは、コントリビューター、メンテナー、メンターとして、GitLabオープンソースコミュニティへの卓越したコントリビュートを継続されています。過去1年間でトップ5のコントリビューターとなったPatrickさんは、[GitLab Terraform Provider](https://gitlab.com/gitlab-org/terraform-provider-gitlab)および[Client-go](http://client-go)プロジェクトのメンテナンスを担当し、機能追加、リリース管理、イシューのトリアージ、コミュニティのオンボーディングに取り組まれています。コントリビューターからプロジェクトメンテナーへと成長を遂げられ、「誰もがコントリビュートできる」というGitLabのミッションを体現しています。\n\nPatrickさんの活動はコードのコントリビュートにとどまらず、コミュニティ構築とコーチングにまで及び、新しいコントリビューターの参加と成長をサポートしています。以前には、[17.11の注目コントリビューター賞](https://about.gitlab.com/releases/2025/04/17/gitlab-17-11-released/#notable-contributor)を受賞したHeidi Berry氏をノミネート、支援しました。また、[GitLab for Education](https://about.gitlab.com/solutions/education/)チームと知見を共有し、学生にGitLabを学習してもらうことで次世代のデベロッパー育成にもコントリビュートしています。\n\n「Terraform ProviderとClient-goプロジェクトでの協力に、新しいコントリビューターの方々にぜひ参加してもらいたいと思います。私たちのコミュニティには、もっと多くの仲間が必要です。」とPatrickさんは言います。\n\nPatrickさんを今回の賞にノミネートした[Lee Tickett](https://gitlab.com/leetickett-gitlab)（GitLab Staff Fullstack Engineer）はPatricさんついて「PatrickさんはGitLabチームとお客様を継続的に支援し続けています。」と述べています。[Timo Furrer](https://gitlab.com/timofurrer)（GitLab Senior Backend Engineer）もノミネートを支援し、「Terraform ProviderとClient-goへの日々のコントリビュートに加え、GitLab Terraform Providerの可能性を実演することで、IaCジャーニーにおけるGitLabのお客様を直接支援しています」と付け加えました。\n\nPatrickさんはKinglandのエンタープライズアーキテクトで、[GitLab Community Core Team](https://about.gitlab.com/community/core-team/)のメンバーでもあります。今回が2回目の注目コントリビューター賞受賞で、[初回は2023年1月のGitLab 15.8](https://about.gitlab.com/releases/2023/01/22/gitlab-15-8-released/#mvp)でした。\n\n継続的なコントリビュートとGitLabのお客様へのサポート、そしてオープンソースコミュニティの成長へのご尽力に対し、Patrickさんに深く感謝いたします！\n\n## **GitLab 18.4でリリースされた主な改善点**\n\n### **GitLab Duo Model Selection（モデル選択）一般提供開始**\n\n> GitLab.com: Premium、Ultimate、Duo Core、Duo Pro、Duo Enterprise\\\n> Self-Managed: Premium、Ultimate、Duo Core、Duo Pro、Duo Enterprise\\\n> GitLab Dedicated: Ultimate、Duo Core、Duo Pro、Duo Enterprise\n\nGitLab Duo Model Selectionの一般提供を開始しました。開発ワークフローで使用するAIモデルの選択を組織がより細かく管理できるようになります。\n\nGitLab.comのトップレベルグループオーナー、Self-ManagedおよびDedicatedの管理者は、GitLabホスト型AIゲートウェイ経由でアクセスするGitLab Duo機能において、複数のGitLab AIモデルベンダーの中から特定のモデルを選択できるようになりました。\n\nGitLab.com上の複数ネームスペースに参加しているGitLabユーザーは、すべての開発コンテキストでAIモデル設定を統一するため、デフォルトのネームスペースの設定も可能です。GitLab Duo Model Selectionの詳細については、[ブログ記事](https://about.gitlab.com/blog/speed-meets-governance-model-selection-comes-to-gitlab-duo/)をご覧ください。\n\n[ドキュメント](https://docs.gitlab.com/user/gitlab_duo/model_selection/#select-an-llm-for-a-feature)\\\n[イシュー](https://gitlab.com/groups/gitlab-org/-/epics/18818)\n\n![model_selection_gtm](https://about.gitlab.com/images/18_4/model_selection_gtm.png)\n\n### **GitLab Knowledge Graph（ナレッジグラフ）**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\n\nGitLab Knowledge Graphは、コードベース全体における豊富なコードインテリジェンス機能を提供します。デベロッパーはより多くのコンテキストを基にプロジェクトを理解、操作できるようになり、変更の計画立案、影響分析、GitLab Duoエージェントと連携した開発タスクの効率化が図れます。\n\nGitLab Duo Agent Platformでは、Knowledge Graphを活用してAIエージェントの精度を向上させます。コードベース全体のファイルと定義をマッピングすることで、Knowledge GraphはDuoエージェントがローカルワークスペース全体の構造を理解するための拡張コンテキストを提供し、複雑な質問に対してより迅速で正確な回答を返します。\n\nこの機能はベータ版です。[イシュー160](https://gitlab.com/gitlab-org/rust/knowledge-graph/-/issues/160)でフィードバックをお寄せください。\n\n[ドキュメント](https://gitlab-org.gitlab.io/rust/knowledge-graph/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17514)\n\n![KnowledgeGraph](https://about.gitlab.com/images/18_4/KnowledgeGraph.png)\n\n### **GitLab Duoでエンドユーザーによるモデル選択が可能に**\n\n> GitLab.com: Premium、Ultimate、Duo Core、Duo Pro、Duo Enterprise\n\nGitLab Duoでエンドユーザーがモデルを選択できる機能が、GitLab.comでパブリックベータ版として提供開始されました。ユーザーはGitLab UIから直接GitLab Duo Agentic Chatで使用したいモデルを選択できるようになり、ニーズに合わせたAIサポートを受けられます。\n\nGitLab.comのネームスペースオーナーが許可している場合、エンドユーザーはGitLab Duo Agentic Chatで利用できるGitLab AIベンダーのモデルから選択できます。ネームスペースオーナーは、これまで通りネームスペース設定で組織全体のモデルを指定することも、エンドユーザーによるモデル選択を許可することもできます。\n\n利用を開始するには、GitLab Duo Agentic Chatでモデルのドロップダウンメニューから、希望するモデルを選択してください。なお、モデルを変更すると新しい会話が開始され、選択した設定は今後のセッションでも保存されます。\n\n[ドキュメント](https://docs.gitlab.com/user/gitlab_duo/model_selection/#select-a-model-to-use-in-gitlab-duo-agentic-chat)\\\n[イシュー](https://gitlab.com/groups/gitlab-org/-/epics/19251)\n\n![end_user_model_selection](https://about.gitlab.com/images/18_4/end_user_model_selection.png)\n\n### **CI/CDジョブトークンによるGitプッシュリクエストの認証**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\n\nプロジェクトで生成されるCI/CDジョブトークンを使用して、プロジェクトリポジトリへのGitプッシュリクエストの認証が行えるようになりました。UIの「ジョブトークンの権限」設定、またはプロジェクトのREST APIエンドポイントの[`ci_push_repository_for_job_token_allowed`](https://docs.gitlab.com/api/projects/#edit-a-project)パラメータで有効化できます。\n\n[ドキュメント](https://docs.gitlab.com/ci/jobs/ci_job_token/#allow-git-push-requests-to-your-project-repository)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/389060)\n\n![job_token_push](https://about.gitlab.com/images/18_4/job_token_push.png)\n\n### **GitLab Duoのコンテキスト除外機能**\n\n> GitLab.com: Premium、Ultimate、Duo Pro、Duo Enterprise\\\n> Self-Managed: Premium、Ultimate、Duo Pro、Duo Enterprise\\\n> GitLab Dedicated: Ultimate、Duo Pro、Duo Enterprise\n\nGitLab Duoのコンテキスト除外機能を使うことで、GitLab Duoが参照するコンテキストから除外したいものを指定できます。パスワードファイルや設定ファイルなどの機密情報を保護したい場合に便利です。特定のファイル、ディレクトリ、ファイル形式、またはこれらを組み合わせた除外設定が可能です。\n\nこの機能は現在ベータ版です。[イシュー566244](https://gitlab.com/gitlab-org/gitlab/-/issues/566244)でGitLab Duoのコンテキスト除外機能についてフィードバックをお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/user/gitlab_duo/context/#exclude-context-from-gitlab-duo)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17124)\n\n![duo-context-exclusion](https://about.gitlab.com/images/18_4/duo-context-exclusion.png)\n\n### **GitLab DedicatedのAWSリージョンサポート拡大**\n\n> GitLab Dedicated: Ultimate\n\nGitLab DedicatedがすべてのAWSリージョンでのデプロイに対応し、プライマリ、セカンダリ、バックアップのデプロイ先として、[より多くのリージョン](https://docs.gitlab.com/subscriptions/gitlab_dedicated/data_residency_and_high_availability/#available-aws-regions)から選択できるようになりました。\n\nこの対応拡大は、GitLab Dedicatedの高可用性とディザスターリカバリー基準を満たすio2ディスクがAWSの全リージョンで利用可能になったことで実現しました。\n\n新しく対応したリージョンは、スイッチボードでGitLab Dedicatedインスタンスをプロビジョニングする際に選択できます。\n\n[ドキュメント](https://docs.gitlab.com/subscriptions/gitlab_dedicated/data_residency_and_high_availability/#available-aws-regions)\\\n[イシュー](https://about.gitlab.com/direction/gitlab_dedicated/#theme-global-availability)\n\n![switchboard-expanded-aws-regions](https://about.gitlab.com/images/18_4/switchboard-expanded-aws-regions.png)\n\n### **異なるブランチに対するCI/CDパイプラインシミュレーション**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\n\nこれまで、パイプラインエディターの「検証」タブで変更内容を検証する際、デフォルトブランチでのシミュレーション実行のみに限定されていました。このリリースで機能を拡張し、任意のブランチを指定してパイプラインシミュレーションを実行できるようになりました。この改善により、パイプラインのテストと検証における柔軟性が大幅に向上し、安定ブランチや機能ブランチなど、さまざまなケースでパイプラインが想定通りに動作するかを確認できます。\n\n[ドキュメント](https://docs.gitlab.com/ci/pipeline_editor/#validate-cicd-configuration)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/482676)\n\n![branch_selector](https://about.gitlab.com/images/18_4/branch_selector.png)\n\n## GitLab 18.4リリースに含まれるその他の改善点\n\n### **イシューページの表示方法を設定する**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\n\n一覧ページの表示を自由にカスタマイズできるようになりました。必要なメタデータを選択し、作業項目をドロワーで開くか、フルページで開くかを選択できるため、重要な情報により集中できます。\n\nこれまでは、すべてのメタデータフィールドが常に表示されており、作業項目を確認する際に情報が多すぎると感じることがありました。今回のアップデートで、担当者、ラベル、日付、マイルストーンなどの各項目の表示・非表示を切り替えて、見やすいようにカスタマイズできるようになりました。\n\n新しい表示切替機能により、一覧のコンテキストを保ったままドロワーで詳細を素早く確認したり、詳細な編集や包括的なナビゲーションが必要な場合はフルページ表示に切り替えたりすることが可能です。\n\n[ドキュメント](https://docs.gitlab.com/user/project/issues/managing_issues/#open-issues-in-a-drawer)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/570776)\n\n[](https://gitlab.com/gitlab-org/gitlab/-/issues/570776)\n\n![configure_how_to_view_issues_from_the_listing_page](https://about.gitlab.com/images/18_4/configure_how_to_view_issues_from_the_listing_page.png)\n\n### **イシューボードでエピック階層の完全表示が可能になりました**\n\n> GitLab.com: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nイシューボードにおいて、親エピックでフィルタリングした際に、子エピック内のすべてのイシューを表示できるようになりました。これにより、イシューページと同様の動作に統一され、子エピックにネストされたイシューを見落とすことなく、エピック階層全体の追跡と可視化が可能になります。プロジェクト管理ワークフローの効率性と信頼性が向上します。\n\n[ドキュメント](https://docs.gitlab.com/user/project/issue_board/#filter-issues)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/358416)\n\n[](https://gitlab.com/gitlab-org/gitlab/-/issues/358416)\n\n![issue_boards_complete_hierarchies](https://about.gitlab.com/images/18_4/issue_boards_complete_hierarchies.png)\n\n### **エンタープライズユーザーのプレースホルダー再割り当て時の確認がスキップ可能に**\n\n> GitLab.com: Premium、Ultimate\n\nグループのオーナーロールを持つユーザーは、そのグループ内のアクティブなエンタープライズユーザーにプレースホルダーを再割り当てする際、ユーザー確認をスキップできるようになりました。これにより、エンタープライズユーザーが再割り当て確認のために頻繁にメールを確認する必要がなくなります。設定された時間制限に達すると、それ以降のすべての新しい再割り当てに対して再びメール確認リクエストが送信されます。\n\nエンタープライズユーザーには再割り当て完了後に通知メールが送られるため、プロセス全体の透明性は維持されます。\n\n[ドキュメント](https://docs.gitlab.com/user/project/import/#bypass-confirmation-when-reassigning-placeholder-users)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17871)\n\n### **CI/CDテンプレートを使用したOpenTofuモジュール・プロバイダーのGitLabコンテナレジストリへの公開**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\n\nGitLabコンテナレジストリが、OpenTofuモジュールとプロバイダーをホストするためのメディアタイプに対応するようになりました。\n\n[OpenTofu CI/CDコンポーネント](https://gitlab.com/components/opentofu)のバージョン[3.1.0](https://gitlab.com/components/opentofu/-/releases/3.1.0)では、OCIフォーマットを使用してOpenTofuプロバイダーをGitLabレジストリにデプロイする新しい`provider-release`テンプレートが追加されました。これにより、プライベートOpenTofuプロバイダーをGitLabで直接ホストできるようになります。\n\nさらに、`module-release`テンプレートには新しい`type`入力が追加されました。`oci`に設定すると、OCIフォーマットを使用してOpenTofuモジュールをGitLabレジストリにデプロイできます。\n\n[ドキュメント](https://gitlab.com/components/opentofu#publish-providers-to-the-gitlab-oci-registry)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/562715)\n\n### **パイプラインのシークレット検出で特定ファイル・ディレクトリをデフォルトで除外**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\\\n\nパイプラインのシークレット検出で、シークレット情報を含む可能性の低い[特定のファイルタイプやディレクトリが](https://docs.gitlab.com/user/application_security/secret_detection/pipeline/#excluded-items)自動的にスキャン対象から除外されるようになりました。これにより、スキャンパフォーマンスが向上します。この機能はアナライザーの[バージョン7.11.0](https://gitlab.com/gitlab-org/security-products/analyzers/secrets/-/releases/v7.11.0)でリリースされます。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/secret_detection/pipeline/#excluded-items)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/560147)\n\n### **高度なSASTスキャンが大幅に高速化**\n\n> GitLab.com: Ultimate\\\n> Self-Managed: Ultimate\\\n> GitLab Dedicated: Ultimate\n\nマージリクエストやパイプラインでセキュリティスキャンを実行する際、スキャン時間の短縮は非常に重要です。GitLabは、高度なSASTのエンジンと検出ルールの両方に対し、継続的にパフォーマンスの改善に取り組んでいます。\n\n今回のリリースした改善により、ベンチマークテストと実際の環境でのテストにおいて、スキャン実行時間を最大78%短縮することができました。スキャン処理の中でもパフォーマンスが重要な部分にキャッシュ機能を追加したことで、大規模なリポジトリでのスキャンが大幅に高速化されます。\n\nこの改善は、高度なSASTアナライザーのバージョン2.9.6以降で自動的に有効になります。使用しているアナライザーのバージョンは、[スキャンジョブのログで確認](https://docs.gitlab.com/user/application_security/sast/gitlab_advanced_sast/#identify-the-gitlab-advanced-sast-analyzer-version)できます。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/sast/gitlab_advanced_sast/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16561)\n\n### **ジョブアーティファクトダウンロード権限をより細かく制御**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\n\nGitLab 16.11では、`artifacts:access`キーワードが追加され、アーティファクトのダウンロード権限を以下のように設定できるようになりました：。\n\n* パイプラインにアクセスできるすべてのユーザー\n* デベロッパーロール以上のユーザーのみ\n* 誰でもダウンロード不可\n\n今回のリリースでは、新たに「メンテナーロール以上のユーザーのみ」という設定も追加され、ジョブアーティファクトのダウンロードをより細かく制御できるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/ci/yaml/#artifactsaccess)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/454398)\n\n### **グループ、アプリケーション単位での自動Duoコードレビュー**\n\n> GitLab.com: Premium、Ultimate、Duo Enterprise\n\nグループまたはアプリケーション設定から、複数プロジェクトで自動Duoコードレビューを有効にできるようになりました。従来のように特定プロジェクトを個別に有効化するのではなく、グループ内のすべてのプロジェクトでDuoコードレビューを迅速に有効化できます。\n\nこの機能は現在[GitLab.com](http://gitlab.com)で利用可能です。GitLab Self-Managedでの提供は今後のリリースで予定しています。本機能に関するフィードバックは[イシュー517386](https://www.claudeusercontent.com/?errorReportingMode=parent#)までお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/#automatic-reviews-from-gitlab-duo-for-groups-and-applications)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/554070)\n\n### **エピック・イシューリストの親フィルター機能を強化**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate \n\nイシューページとエピックページの「エピック」フィルターを、より使いやすい「親」フィルターに変更しました。これまでエピックのみで絞り込みできていたところが、すべての親作業アイテムでのフィルタリングに対応します。親イシューで子タスクを簡単に見つけたり、親エピックでイシューを見つけたりできるようになり、イシューリストとエピックリストの両方で作業階層がより把握しやすくなりました。\n\n[ドキュメント](https://docs.gitlab.com/user/project/issues/issue_work_items/#new-features)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/work_items/556200)\n\n[](https://gitlab.com/gitlab-org/gitlab/-/work_items/556200)\n\n![enhanced_parent_filtering_for_better_work_item_retrieval](https://about.gitlab.com/images/18_4/enhanced_parent_filtering_for_better_work_item_retrieval.png)\n\n### **テキストエディターツールバー機能の統一**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\n\nGitLabプレーンテキストエディタに、リッチテキストエディタと同じフォーマットオプションが追加されました。プレーンテキストエディタツールバーに「その他のオプション」メニューが追加され、以下の高度なフォーマットツールにアクセスできます：\n\n* コードブロック\n* 詳細ブロック\n* 水平線\n* Mermaid図\n* PlantUML図\n* 目次\n\n両エディタでボタン配置とセパレータが統一され、馴染みのあるフォーマットオプションへのアクセスを維持しながら、編集モード間の切り替えが簡単になりました。\n\n[ドキュメント](https://docs.gitlab.com/user/rich_text_editor/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/507377)\n\n### **GitLab Runner 18.4**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\n\nGitLab Runner 18.4も本日リリースされます！GitLab Runnerは、CI/CDジョブを実行し、結果をGitLabインスタンスに送信する、拡張性の高いビルドエージェントです。GitLabに含まれるオープンソースの継続的インテグレーションサービスであるGitLab CI/CDと連携して動作します。\n\nバグ修正：\n\n* [FIPS Runnerが、GitLab Runner 18.2.1でジョブの開始に失敗する](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/38963)\n* [OpenShift 4.16.27でOperator v1.37.0アップグレード後、カスタムConfigMapとセキュリティコンテキストの制約（SCC）を使用したRunnerで`chown`コマンドが失敗する](https://gitlab.com/gitlab-org/gl-openshift/gitlab-runner-operator/-/issues/246)\n* [GitLab 17.2での早期削除により、GitLab 17.x.xリリースで`FF_RETRIEVE_POD_WARNING_EVENTS`を復元](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/38851)\n* [ファイルシステム権限エラーによりすべてのGitLab Runnerジョブが失敗する](https://gitlab.com/gitlab-org/gl-openshift/gitlab-runner-operator/-/issues/214)\n* [ビルドジョブが権限拒否エラーで散発的に失敗する](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/37464)\n* [GitLab Runner Helmチャートのアップグレードにより変数が破損する](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/30851)\n* [`FF_USE_FASTZIP`を有効にしてもfastzipが有効にならない](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/28989)\n* [ワンタイムリクエストで作成されたSpotインスタンスを停止しようとした際にGitLab Runnerで`UnsupportedOperation`エラーが発生する](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/28865)\n* [Kubernetes環境にデプロイされた環境でGitLab Runnerのロングポーリングが適切に動作しない](https://gitlab.com/gitlab-org/gitlab/-/issues/331460)\n* [管理者がimage:kubernetes:userの値を上書きできるようにする](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/38894)\n\nすべての変更の一覧は、GitLab Runnerの[CHANGELOG](https://gitlab.com/gitlab-org/gitlab-runner/blob/18-4-stable/CHANGELOG.md)で確認できます。\n\n[ドキュメント](https://docs.gitlab.com/runner)\n\n### **運用コンテナスキャンの重大度しきい値設定**\n\n> GitLab.com: Ultimate\\\n> Self-Managed: Ultimate\\\n> GitLab Dedicated: Ultimate\n\n運用コンテナスキャン（OCS: Operational Container Scanning）で、特定の重大度レベル以上の脆弱性のみを返すよう設定できるようになりました。重大度しきい値を設定すると、選択した重大度を下回る脆弱性は、脆弱性レポート、APIペイロード、その他のレポートメカニズムに表示されなくなります。これにより、修正したい脆弱性に集中できます。\n\nこのフィルタリングを有効にするには、OCS設定で[`severity_threshold`を設定](https://docs.gitlab.com/user/clusters/agent/vulnerabilities/#configure-trivy-severity-threshold-filter)します。\n\n[John Walsh](https://gitlab.com/mjohnw)さんによるコミュニティコントリビュートに心より感謝いたします。GitLabへのコントリビュートについて詳しく知りたい方は、[コミュニティコントリビュートプログラム](https://about.gitlab.com/community/contribute/)をご確認ください。\n\n[ドキュメント](https://docs.gitlab.com/user/clusters/agent/vulnerabilities/#configure-trivy-severity-threshold-filter)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/559278)\n\n### **シークレット検出アナライザーのGitフェッチング改善**\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\n\nシークレット検出アナライザーのバージョン[7.12.0](https://gitlab.com/gitlab-org/security-products/analyzers/secrets/-/releases/v7.12.0)で、Gitコミットフェッチ方法に大幅な改善が追加されました。アナライザーは`SECRET_DETECTION_LOG_OPTIONS`から渡される`--depth`および`--since`オプションを解析し、スキャンするコミット数をより詳細に指定できるようになりました。また、コンテキストに基づいて適切なフェッチ戦略を選択し、浅い深さ設定でも数百万のコミットが不要にフェッチされる既知の問題を防止します。\n\nこの強化により、ジョブタイムアウトの削減、リソース消費の低下、より予測可能なスキャンパフォーマンスが実現されます。大規模リポジトリでのシークレット検出スキャンが高速化され、実際のフェッチ動作に合致するより明確なログが記録されます。\n\n[ドキュメント](https://docs.gitlab.com/user/clusters/agent/vulnerabilities/#configure-trivy-severity-threshold-filter)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17315)\n\n### **脆弱性詳細での自動解決パイプラインID表示**\n\n> GitLab.com: Ultimate\\\n> Self-Managed: Ultimate\\\n> GitLab Dedicated: Ultimate\n\n自動解決後に再検出された脆弱性をトラブルシューティングする際、現在のパイプラインと脆弱性が解決された時のパイプラインを比較すると効果的です。\n\n脆弱性が自動解決された場合、脆弱性詳細ページの脆弱性ノートに、その解決が実行されたパイプラインIDが含まれるようになりました。\n\n[ドキュメント](https://docs.gitlab.com/user/application_security/policies/vulnerability_management_policy/)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/566392)\n\n### **GitLab Duo Self-Hostedでのサポートモデル追加**\n\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nGitLab Duo Enterpriseを利用するGitLab Self-Managedのお客様は、GitLab Duoでさらに多くのサポートモデルを利用できるようになりました。Azure OpenAIでOpenAI GPT-5のサポートが開始されました。また、オープンソースのOpenAI GPT OSS 20Bおよび120Bについても、vLLMとAzure OpenAIでサポートされます。これらのモデルをGitLab Duo Self-Hostedでご利用いただいた感想は、[イシュー523918](https://www.claudeusercontent.com/?errorReportingMode=parent#)までお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_models_and_hardware_requirements/#supported-models)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16742)\n\n### **GitLab Duo Self-HostedでDuoコードレビューの一般提供開始**\n\n> Self-Managed: Premium、Ultimate、Duo Enterprise\n\nGitLab Duo Self-HostedでのGitLab Duoコードレビューの一般提供が開始されました。データの管理権限を保持しながら開発プロセスを加速させます。コードレビューがマージリクエストをレビューする際、潜在的なバグを特定し、直接適用可能な改善案を提示します。人間によるレビューを依頼する前に、コードレビューを使用して変更を反復し、改善してください。この機能はMistral、Meta Llama、Anthropic Claude、OpenAI GPTの各モデルファミリーをサポートしています。\n\nコードレビューに関するフィードバックは、[イシュー517386](https://www.claudeusercontent.com/?errorReportingMode=parent#)までお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/administration/gitlab_duo_self_hosted/#gitlab-duo-in-merge-requests)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/548975)\n\n[](https://gitlab.com/gitlab-org/gitlab/-/issues/548975)\n\n![Self_Hosted_Code_Review-min1](https://about.gitlab.com/images/18_4/Self_Hosted_Code_Review-min1.png)\n\n## 実験的機能\n\n### **GitLab Duo AI Catalog**\n\nGitLab Duo AI Catalogは、複雑なタスクを実行するAIエージェントを発見・管理できる一元化されたハブです。マージリクエストの作成や技術的な質問への回答などに対応します。\n\nこのカタログでは次のことができます：\n\n* GitLabチームとコミュニティが作成したエージェントを閲覧する\n* プロジェクト用の独自のエージェントを作成する\n* GitLab Duo Chat（エージェント型）を通じてプロジェクト間で共有する\n\nこれは実験的機能であり、`global_ai_catalog`フィーチャーフラグによって制御されています：\n\n* **GitLab.comの場合：** グループでの利用をご希望の場合は、サポートまでお問い合わせください。\n* **GitLab Self-Managedの場合：** 管理パネルで有効にするか、Railsコンソールで`Feature.enable(:global_ai_catalog)`を使用してください。\n\n本機能に関するフィードバックは、[こちらのイシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/570717)[](https://www.claudeusercontent.com/?errorReportingMode=parent#)までお寄せください。\n\n### **GitLab Duo Self-HostedでGitLab Duo Agent Platformが利用可能に**\n\nGitLab Duo Self-Hostedをご利用のお客様は、GitLab Duo Agent Platformを実験的機能として利用できるようになりました。GitLab Duo Workflow Serviceが既存のセルフホスト型AIゲートウェイDockerイメージに統合され、AIエージェントとワークフロー自動化をサポートします。管理者は、すべてのエージェントで使用する単一のモデルを設定できます。\nGitLab Duo Agent Platformの機能の詳細については、[ブログ](https://about.gitlab.com/blog/gitlab-duo-agent-platform-public-beta/)をご覧ください。\n\n## バグ修正、パフォーマンスの改善、UIの改善\n\nGitLabでは、ユーザーに可能な限り最高の環境をお届けできるよう尽力しています。リリースのたびに、バグを修正し、パフォーマンスを改善し、UIを向上させるためにたゆまぬ努力を続けています。GitLabは、100万人を超えるGitLab.comユーザーをはじめ、GitLabのプラットフォームを利用するすべての人にスムーズでシームレスな体験をお届けすることを約束します。\n\n18.4で提供されたすべてのバグ修正、パフォーマンスの強化、UI改善を確認するには、以下のリンクをクリックしてください。\n\n* [バグ修正](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=type%3A%3Abug&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.4)\n* [パフォーマンスの改善](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=bug%3A%3Aperformance&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.4)\n* [UIの改善](https://papercuts.gitlab.com/?milestone=18.4)\n\n## 非推奨事項\n\n新たに非推奨になった機能、および現在非推奨になっているすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n* [GitLabチャートにおけるBitnami PostgreSQLおよびRedisイメージ](https://docs.gitlab.com/ee/update/deprecations.html#bitnami-postgresql-and-redis-images-in-gitlab-chart)\n\n## 削除された機能と破壊的な変更\n\n削除されたすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ee/update/deprecations.html)で確認できます。今後の破壊的な変更について通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n* [GitLabチャートにおけるBitnami PostgreSQLおよびRedisイメージ](https://docs.gitlab.com/ee/update/deprecations.html#bitnami-postgresql-and-redis-images-in-gitlab-chart)[](https://docs.gitlab.com/ee/update/deprecations.html#bitnami-postgresql-and-redis-images-in-gitlab-chart)\n\n### GitLab 18.4へのアップグレードに関する重要なお知らせ\n\nGitLab Helmチャートのデフォルト設定では、PostgreSQLとRedisにのBitnamiのチャートとコンテナイメージを使用しています。Bitnamiは2025年9月29日をもって、[これらのイメージの無料提供を終了](https://github.com/bitnami/charts/issues/35164)することを発表しました。2025年8月28日からイメージを断続的に利用できなくなる期間が開始されています。\n\nGitLabチャートに含まれるBitnamiのPostgreSQLとRedisはでもおよびテスト目的のみでの使用を想定しているため、本番環境への影響はありません。一時的な解決策として、GitLabではチャート設定をBitnamiレガシーリポジトリに移行しました。ただし、パッチが適用されていないGitLabチャート環境（GitLab 17.11以前、GitLab 18.0.5、GitLab 18.1.4、GitLab 18.2.1以前）では、非推奨のBitnamiリポジトリからのイメージ取得を継続するため、9月29日以降にデプロイが失敗する可能性があります。断続的な停止期間中も同様にデプロイが失敗する可能性があります。\n\n影響を受けるGitLabチャート設定を使用する場合は、以下のいずれかの対応を行ってください：\n\n* サポート対象のGitLabリファレンスアーキテクチャへの移行\n* パッチ適用済みチャートバージョンへのアップグレード\n* チャート値でのレガシーリポジトリ設定（例：[マージリクエスト4421](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/4421)）\n\n現在、[代替案と今後の対応](https://gitlab.com/gitlab-org/charts/gitlab/-/issues/6089)について検討中です。\n\n### 変更履歴\n\n変更内容をすべて表示するには、次のページから変更履歴を確認してください。\n\n* [](\u003C>)[GitLab](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/CHANGELOG.md)\n* [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/blob/main/CHANGELOG.md)\n* [GitLab Workflow for VS Code](https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/main/CHANGELOG.md)\n* [GitLab CLI](https://gitlab.com/gitlab-org/cli/-/releases)\n\n### インストール\n\nGitLabを新規にインストールする場合は、[GitLabのダウンロードページ](https://about.gitlab.com/ja-jp/install/)をご覧ください。\n\n### 更新事項\n\n[更新ページ](https://about.gitlab.com/ja-jp/update/)をご覧ください。\n\n### ご不明な点がある場合\n\nご質問やご意見をお聞かせください。本リリースについてご不明な点がある場合は、[GitLabフォーラム](https://forum.gitlab.com/)にアクセスして質問を投稿してください。\n\n### GitLabサブスクリプションプラン\n\n* [Free](https://about.gitlab.com/pricing/)\n  ユーザー向けの永久無料機能を提供\n* [Premium](https://about.gitlab.com/pricing/premium/)\n  チームの生産性と調整を強化\n* [Ultimate](https://about.gitlab.com/pricing/ultimate/)\n  組織全体のセキュリティ、コンプライアンス、プランニングに対応\n\nGitLabのすべての機能を[無料](https://about.gitlab.com/free-trial/?hosted=saas)でお試しいただけます。\n\n*監修：ソリス ジェレズ / Jerez Solis [@jerezs](https://gitlab.com/jerezs)\n（GitLab合同会社 ソリューションアーキテクト本部 ソリューションアーキテクト）*\n\n### 過去の日本語リリース情報\n\n* [GitLab 18.4](https://about.gitlab.com/ja-jp/blog/gitlab-18-04-release)\n* [GitLab 18.3](https://about.gitlab.com/ja-jp/blog/gitlab-18-03-release)\n* [](\u003C>)[GitLab 18.2](https://about.gitlab.com/ja-jp/blog/gitlab-18-02-release)\n* [GitLab 18.1](https://about.gitlab.com/ja-jp/blog/gitlab-18-01-release)\n* [GitLab 18.0](https://about.gitlab.com/ja-jp/blog/gitlab-18-0-release/)\n* [GitLab 17.11](https://about.gitlab.com/ja-jp/blog/gitlab-17-11-release/)\n* [GitLab 17.10](https://about.gitlab.com/ja-jp/blog/gitlab-17-10-release/)\n* [GitLab 17.9](https://about.gitlab.com/ja-jp/blog/gitlab-17-9-release/)\n* [GitLab 17.8](https://about.gitlab.com/ja-jp/blog/gitlab-17-8-release/)\n* [GitLab 17.7](https://about.gitlab.com/ja-jp/blog/gitlab-17-7-release/)\n* [GitLab 17.6](https://about.gitlab.com/ja-jp/blog/gitlab-17-6-release/)\n* [GitLab 17.5](https://about.gitlab.com/ja-jp/blog/gitlab-17-5-released/)\n* [GitLab 17.4](https://about.gitlab.com/ja-jp/blog/gitlab-17-4-released/)\n* [GitLab 17.3](https://about.gitlab.com/ja-jp/blog/gitlab-17-3-released/)\n* [GitLab 17.2](https://about.gitlab.com/ja-jp/blog/gitlab-17-2-released/)\n* [GitLab 17.1](https://about.gitlab.com/ja-jp/blog/gitlab-17-1-released/)\n* [GitLab 16.11](https://about.gitlab.com/ja-jp/blog/gitlab-16-11-released/)[](\u003C>)",[771],"2025-09-24","2025-09-19",[900,748,681,9],{"featured":91,"template":685,"slug":1001},"gitlab-18-04-release","content:ja-jp:blog:gitlab-18-04-release.yml","Gitlab 18 04 Release","ja-jp/blog/gitlab-18-04-release.yml","ja-jp/blog/gitlab-18-04-release",{"_path":1007,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1008,"content":1014,"config":1021,"_id":1023,"_type":14,"title":1024,"_source":16,"_file":1025,"_stem":1026,"_extension":19},"/ja-jp/blog/gitlab-flow-duo",{"title":1009,"description":1010,"ogTitle":1009,"ogDescription":1010,"noIndex":6,"ogImage":1011,"ogUrl":1012,"ogSiteName":669,"ogType":670,"canonicalUrls":1012,"schema":1013},"GitLab Flow (フロー) と GitLab Duo  (デュオ) を併用してワークフローを強化する","GitLab Flow に AI 搭載の GitLab Duo の能力を合わせ、DevSecOps ワークフローの効率をアップする方法をご紹介します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662840/Blog/Hero%20Images/ai-experiment-stars.png","https://about.gitlab.com/blog/gitlab-flow-duo","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab Flow (フロー) と GitLab Duo  (デュオ) を併用してワークフローを強化する\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2023-07-27\",\n      }",{"title":1009,"description":1010,"authors":1015,"heroImage":1011,"date":1017,"body":1018,"category":740,"tags":1019,"updatedDate":1020},[1016],"Cesar Saavedra","2023-07-27","DevSecOps を始めるには、綿密に検討されたワークフローが必要ですが、時としてそれは厳しい挑戦のように感じられます。しかし、過度に心配する必要はありません。GitLab Flow と GitLab Duo の 2 つがワークフロー設計をサポートしてくれるからです。GitLab Flow は、DevSecOps プロセスを支障なく適用するのを支援するもので、手順がすでに規定されたアプローチです。GitLab Duo は、GitLab DevSecOps プラットフォーム内で提供される[パワフルな一連のAI 機能](https://about.gitlab.com/blog/supercharge-productivity-with-gitlab-duo/)で、 組織におけるコード開発、運用の改善、ソフトウェアのセキュリティ強化をより効率的に行う手助けとなります。GitLab Flow と GitLab Duo を併用すると、組織ではエンドツーエンドのワークフロー効率を顕著に改善できます。それにより、生産性、デプロイの頻度、コード品質、総合的なセキュリティ、本番環境の耐久性と可用性に、さらなる向上が期待されます。この記事では、企業でうまくDevSecOps を運用するため、GitLab Flow と GitLab Duo の組み合わせがどのように役立つか、深く掘り下げていきます。\n\n> GitLab 17バーチャルローンチイベントで、AI主導のソフトウェア開発の未来を発見しましょう！ [【今すぐ視聴する】](https://about.gitlab.com/ja-jp/eighteen/)\n\n## GitLab Flow とは\nGitLab Flow は、手順が規定されている、アプリケーションの開発ライフサイクルのためのエンドツーエンドのワークフローです。GitLab Flow はユーザーインタフェースとデータモデルをそれぞれ 1 つずつ備えている、AI 搭載の DevSecOps プラットフォーム、GitLab を使用します。GitLab Flow には、顧客からのフィードバックや、自社使用から得られた教訓など、ベストプラクティスや経験から学んだことが組み込まれています。さらに、GitLab Flow は[DevSecOps ライフサイクルの全段階](https://about.gitlab.com/stages-devops-lifecycle/)にまたがるもので、ある特定のアップデートのための内側のフィードバックループと、開発ライフサイクルのみならずアプリケーション全体を改善させていく外側のフィードバックループで構成される、効率的なワークフローです。\n\n![The GitLab Flow inner and outer loops](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-feedback-loops.png)\n\u003Ccenter>GitLab Flowの内側と外側のフィードバックループ\u003C/center>\u003Cp>\u003C/p>\n\nGitLab Flow には多くの段階がありますが、ご存知のようにソフトウェア開発にはコードを書くだけでは終わらないたくさんの作業があります。以下で、GitLab Flow の各ステップと、GitLab Duo の役割について詳しく説明します。\n\n### GitLab Flowでのプランニング\n\nGitLab Flow の第一段階はプランニングです。プランニングは、GitLab Flow の外側のフィードバックループに配置されています。プランニング段階には、イシュー、マージリクエスト (MR)、エピック、マイルストーン、イテレーション、リリース、リリースエビデンスなど、さまざまなものが含まれます。これから、GitLab Flow でのこれらの各種要素の役割と、GitLab Duo がどのように役立つかについて説明します。\n\n![Planning - first portion of GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-planning-portion.png)\n\u003Ccenter>プランニング – GitLab Flow の第 1 部\u003C/center>\u003Cp>\u003C/p>\n\n#### イシュー\nイシューは、コードの問題や新機能を定義するもので、かつチームメンバーが協力し合える場です。イシューが作成されたら、タイトルを追加し、GitLab Duoの「**イシュー説明文の生成**」機能を用いると、説明欄へ自動で記入してくれるので、時間と労力が節約できます。1つのイシューについてのコメントスレッドには数多くの関係者が参加できます。「**イシューコメントのサマリー**」は GitLab Duoの AI機能のひとつで、あるイシューに関する何百ものコメントを簡潔なひとつのパラグラフに要約できるので、関係者は迅速に会話の内容を把握でき、議論に参加し、生産的な活動にすぐに貢献できます。\n\nイシューは、イシューボードで整理・視覚化できます。イシューボードはソフトウェアのプロジェクト管理ツールで、カンバンボードやスクラムボードとして利用できます。こういったボード類は、チームが機能や製品リリースのワークフローを計画、整理、視覚化するのに便利です。ボードのカテゴリは異なるものとして作成でき、イシューは簡単にドラッグアンドドロップで 1 つのリストから別のリストに移動させることができます。\n\n#### マージリクエスト\nマージリクエスト (MR) とは、解決策が開発される場を意味します。リリースを構成する要素として、イシューやマージリクエストは、DevOps やプラットフォームエンジニア、システム管理者やデータベース管理者、セキュリティエンジニア、そして開発者など、関係者により行われるアプリケーションの変更を、監査可能で追跡できる仕組みとして提供します。また、イシューやマージリクエストはリリースプランニングのプロセスに対する重要なインプットでもあります。\n\nマージリクエストは個別に作成することも、イシュー上で作成することも可能です。イシュー上でマージリクエストを作成した場合には、作成したマージリクエストが自動的にそのイシューに関連付けられるため、マージリクエストがマージされると、関連付けられているイシューも自動的にクローズされます。マージリクエストは手動でイシューに関連付けることもできます。\n\n![Merged merge request will close issue](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/mr-with-its-issue.png)\n\u003Ccenter>マージされたマージリクエストによりイシューがクローズされる\u003C/center>\u003Cp>\u003C/p>\n\nイシューと同様、マージリクエストには多くの関係者がアップデートを行なうフィーチャーのロングリストを含められます。GitLab Duo の「**マージリクエスト変更の要約**」機能を使うと、マージリクエストに含まれている更新内容のすべてを認識・理解する必要がある共同作業者は、変更点を素早く把握できます。\n\n同じテーマを持つイシューはエピック内でグループ化でき、取り組むべき作業を整理できます。エピックには子イシューやサブエピックが設定でき、組織全体のエピックにリンクすることも可能です。イテレーションを使用すると作業のスプリントの追跡ができ、手動でスケジュール設定したり、イテレーションの反復を使って自動でスケジュール設定し、プランニングのワークフローを効率化したりできます。さらに、イテレーションにはバーンダウンチャートとバーンアップチャートがあります。バーンダウンチャートを使用するとプロジェクトの全スコープに対する進捗状況の全体を追跡できます。バーンアップチャートはイテレーションの期間内に追加した、または完了したイシューの日次合計数と重み付けを追跡します。\n\n#### マイルストーン\nチームでマイルストーンを使えば、イシューやマージリクエストに任意の開始日や完了期限を設定し、関連のある 1 つのグループとして整理できます。マイルストーンは通常リリースの追跡に使用しますが、プロジェクト単位またはグループ単位で、イシューやマージリクエストを追跡することもできます。イテレーションと同様、マイルストーンでもバーンダウンチャートとバーンアップチャートが利用でき、進捗状況が可視化されます。\n\nマイルストーンはリリースに関連付けられます。リリースの自動作成からはリリースエビデンスを含む、多くのアーティファクトが生成されます。リリースエビデンスとはリリースに関連付けられている、自動収集されたデータのスナップショットです。テストアーティファクトやリンクされたマイルストーンに加えて、ジョブのアーティファクトもオプションとしてリリースエビデンスに含められるので、外部監査などの内部プロセスが容易になります。\n\nエピック、マイルストーン、そしてイテレーションは、「ロードマップ」ページで可視化できます。このページを使うと、リリースの進捗状況が追跡でき、リリースプロセスが効率化できます。\n\nプランニングに進むと、問題の解決や新機能に向けた作業が開始できます。これはマージリクエストで作業していきます。では、GitLab Flow でそのプロセスがどのように行われるのか、もう少し詳しく見てみましょう。\n\n> [GitLab FlowとGitLab Duoを試してみる](https://gitlab.com/-/trials/new?glm_content=default-saas-trial&glm_source=about.gitlab.com%2Fblog%2F)\n\n### マージリクエストとコードのプッシュ\n\n![Merge requests and pushing code - second portion of GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-mr-pushing-code-portion.png)\n\u003Ccenter>マージリクエストとコードのプッシュ – GitLab Flow の第 2 部\u003C/center>\u003Cp>\u003C/p>\n\nGitLab Flow の第 2 部は、マージリクエスト (MR) とコードのプッシュに関連したものです。前述のように、マージリクエストとは組織全体から参加する関係者の共同作業で、解決策が生み出される場です。この共同作業は分散された場所から、非同期で行うことも可能です。参加者は、タグ付け、インラインでの提案、インラインコメント、マージリクエストのコメント、レビュースレッド、レビューリクエストなど、コラボレーション機能を活用でき、コード品質、可用性、信頼性とパフォーマンスの改善につながります。マージリクエストを作成するとすぐ、GitLab Flow の内側フィードバックループがスタートします。ここでは、コードと修正点のプッシュ、テストとスキャンの実行が行われ、アップデートのレビューなど共同作業が発生します。\n\n#### パイプライン\nアップデートは、マージリクエストを通してフィーチャーブランチに適用されます。パイプラインが定義されていれば、自動的に実行されます。パイプラインには複数のステージやジョブが設定でき、ビルドやテストを行った後、アプリケーションやマイクロサービスをレビュー環境にデプロイします。そのレビュー環境では、アップデートはメインブランチにマージする前に動的に検証できます。この自動化は、アプリケーションのアップデートとレビュープロセスを効率良く行う手助けになります。\n\nさらに、DevSecOps チームがマージリクエストを通じてアプリケーションのアップデートをする際は、さまざまなAI 搭載機能が活用できます。チームメンバーがコードを書いて更新するとき、GitLab Duo の「**コードの提案**」が次に書くべきコードを推奨してくれます。開発者はその提案を受け入れるか、無視するか選択できます。「コード提案」は、エラーを減らして開発者がより速くコードを書けるようにすることでプログラミング体験を向上させ、コード品質が改善します。「コード提案」はまた、開発者の生産性を高めるので、イテレーションやロールアウトの高速化にもつながります。\n\n組織内で異なる関係者がアプリケーションの開発やレビューに参加する場合、ドキュメントが不十分だったり、複雑で難解なコード、あまり馴染みのないプログラミング言語で書かれたコードなどに出くわすことがあります。GitLab Duo の「**コードの解説**」機能は、コードを自然言語で説明してくれるので、誰もが理解でき、そのスピードを高められます。\n\nさらに、フィーチャーブランチにアップデートがコミットされると、GitLab Duo の「**推奨レビュアー**」機能がマージリクエスト内の変更点とコントリビューションカレンダーグラフを使い、マージリクエストのサイドバー内のドロップダウンにプロジェクトに最適なレビュアーを提案してくれます。このリストにはアプリケーションのある特定の部分に詳しいユーザーが数人含まれ、そのアップデートのレビューの適任者が示されます。レビュー適任者をさがして特定する必要がありませんので、開発者の時間が節約でき、レビュープロセスを効率化し、遅延やレビューの品質低下を防ぎます。\n\n開発者がコードに変更を加える場合、その具体的な変更点についてマージリクエストにコメントを書くことはあまりありません。GitLab Duo の「**マージリクエスト変更の要約**」機能を使うと、マージリクエストで変更を行ったコード作成者は、AI を使用して自然言語のコメントを生成することができます。このコメントは、コードへの更新内容を要約するものです。これによりレビュアーは変更内容をよりよく理解でき、レビュープロセス全体の効率化につながります。\n\nレビュアーがマージリクエストでコード更新をレビューすると、レビューブロックが作成されます。このブロックには数多くのソースファイルにまたがる多数のコメントが含まれ、非常に長いので目を通すのが大変です。ここで、コード作成者がレビュー内容をしっかり理解できるように、GitLab Duo の「**マージリクエストレビューの要約**」機能を使うと、レビュアーのフィードバックが自然言語で生成されます。これによりコード作成者とレビュアーの間の引き継ぎがよりスムーズになり、レビュープロセスが効率化されます。\n\nさらに、マージリクエストに開発者が新しいコードを追加する際は、GitLab Duo の「**マージリクエストのテスト生成**」機能を活用すれば、AI を使って新しいコード用のユニットテストを生成できます。そのため開発者の生産性は高まり、テストカバレッジが向上し、開発ライフサイクル内でのバグ検出が前倒しできます。\n\nパイプラインはブランチの更新に対して実行されます。さらに、自動テストやスキャンをそこに組み込むことができます。それはセキュリティをシフトレフトすることにつながっていきます。\n\n### セキュリティのシフトレフト\n\n![Shifting security left - third portion of GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-shift-sec-left-portion.png)\n\u003Ccenter>セキュリティをシフトレフトする –  GitLab Flow の第 3 部\u003C/center>\u003Cp>\u003C/p>\n\nGitLab Flow の第 3 部は、セキュリティのシフトレフトです。これは GitLab Flow の内側フィードバックループの一部です。\n\nDevOps やプラットフォームエンジニア、システム管理者やデータベース管理者、開発者、マージリクエストで共同作業している関係者の中には、セキュリティやコンプライアンスを危惧している人もいるかもしれません。そういった場合に、自動化テストやセキュリティスキャンが役立ちます。スキャンはすぐ利用可能なテンプレートを使って簡単にパイプラインに埋め込むことができ、マージリクエストのパイプラインから自動的に実行できます。GitLab では、幅広い組み込みのセキュリティスキャナとアナライザが利用できます。これらはGitLab Flow から利用できます。さらに、DevSecOps プラットフォームにはサードパーティのスキャナやカスタムスキャナも取り込めます。\n\nソフトウェア開発プロセスで不具合検出をできる限り早い段階で行ない、早期解決する目的で、GitLab Flow はパイプライン内でセキュリティをシフトレフトしました。開発サイクルの早い段階で脆弱性を修正する方が、アプリケーションが本番環境に入ってからの修正より、はるかに簡単でコストもあまりかかりません。本番環境での修正では、予定外の停止によりユーザーや収益に影響が及ぶ恐れもあります。\n\nGitLab の組み込みのセキュリティスキャナおよびアナライザには、ユニットテスト、[Infrastructure-as-Code (IaC)](https://about.gitlab.com/ja-jp/blog/using-ansible-and-gitlab-as-infrastructure-for-code/) スキャン、静的アプリケーションセキュリティテスト (SAST) スキャナ、依存関係スキャナ、シークレット検出、コンテナスキャン、API セキュリティ、Web API ファズテスト、カバレッジガイド式ファズテストが含まれています。これに加えて、GitLab ではさまざまなセキュリティダッシュボードやレポートが利用できますので、脆弱性を管理・可視化できます。これには、依存関係リスト、セキュリティダッシュボード、脆弱性レポート、脆弱性ページなどが含まれます。\n\n開発者およびセキュリティエンジニアの脆弱性への理解を深め、脆弱性への対処をより効率的に行うため、GitLab Duo の「**脆弱性の説明**」機能からは、ある特定の脆弱性についての説明が得られます。脆弱性がどのように悪用されうるのかが説明されるだけでなく、それをどう修正したらよいのか提案もしてくれます。この AI 搭載機能は、本番環境でのサイバー攻撃で悪用される可能性のある脆弱性を防ぐため、アプリケーションのセキュリティを強化するプロセスの最適化を助長します。\n\nSAST スキャナのほかに、GitLab では動的アプリケーションセキュリティテスト (DAST) スキャナも提供しています。これには実行中のアプリケーションが必要です。このスキャナを活用すると、GitLab では DAST スキャン用に自動的に DAST 環境をプロビジョニングし、DASTテスト後はすべてのリソースを完全にクリーンアップしてくれます。これに加え、実行中のコンテナについては、GitLab では操作用のコンテナスキャンも使えます。このスキャンは、セキュリティの脆弱性をチェックするため、クラスタ内のコンテナイメージをスキャンします。\n\n上記のスキャンは、マージリクエストのパイプライン内で自動実行できますが、場合によっては、スキャン実行ポリシーやスキャン結果ポリシーを使い、実行をスケジュール化することも可能です。こういったポリシーは、GitLab UI または YAML ファイルで定義可能で、別個のプロジェクト内で構成します。これにより再利用性、メンテナンスと管理の責任が分離できます。スキャン実行ポリシーでは、指定されたスケジュールまたはプロジェクトパイプラインと一緒にセキュリティスキャンを実行する必要があり、スキャン結果ポリシーはスキャン結果に基づいて対処します。セキュリティエンジニアや各種チームはこれらのポリシーを定義して、組織全体のセキュリティプロセスを強化できます。GitLab Flow はこういったステップもカバーしていますので、これらのポリシーを活用することができます。\n\n組織内でセキュリティおよびコンプライアンスを強化する際は、コンプライアンスラベルやパイプラインを使用します。コンプライアンスラベルおよびパイプラインは、プロジェクト自体のパイプラインを実行する前に必須にすることも可能です。このアプローチでは、組織内のすべてのチームが確実に組織内のセキュリティとコンプライアンス基準に準拠していることが確認できます。さらに、開発中のアプリケーションをサイバー攻撃から守り、政府のコンプライアンス標準に準拠し、常に監査に備えられます。GitLab Flow で可能になる、これらすべてのセキュリティ指針の主な目標は、アプリケーションが本番環境に出ていった後ではなく、開発サイクルの早い段階で脆弱性を修正することにあります。本番環境で脆弱性の修復を行うことは、評判や収益面から非常に高価になるためです。\n\n脆弱性はGitLab Flow の内側フィードバックループでそのリスクが軽減できます。フィーチャーブランチでアプリケーションにさらなるアップデートを適用したら、関係者はアップデートを再度レビューして、アップデートの適用を確認し、誤って逆戻りするようなアップデートが導入されないようにする必要があります。\n\n### 継続的なレビュー\n\n![Reviews - fourth portion of GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-reviewing-features-portion.png)\n\u003Ccenter>レビュー –  GitLab Flow の第 4 部\u003C/center>\u003Cp>\u003C/p>\n\nGitLab Flow の第 4 部はレビュー機能で、ここでアプリケーションの継続的なレビューを規定します。フィーチャーのレビューには、レビュー環境を立ち上げる機能が含まれます。ここでは、開発途中のアプリケーション (フィーチャーブランチ) がデプロイされるため、関係者はリアルタイムでレビューし、フィードバックを提供できます。開発途中のアプリケーションは、メインブランチにマージできるようになるまで継続的に調整を入れます。GitLab Flow では、マージリクエストがメインブランチにマージされる時点で、すべてのプロビジョニングされたレビュー環境リソースをクリーンアップすることも規定しています。\n\nこの反復的な自動化されたレビュープロセスは、GitLab Flow の内側フィードバックループの一部とされています。上述したとおり、内側フィードバックループ内では、「ソースコードの説明」、「推奨レビュアー」、「マージリクエスト変更の要約」、および「マージリクエストレビューの要約」などのGitLab Duo 機能はGitLab Flow によって規定されており、コード作成者とレビュアーの間の引き継ぎをよりスムーズに行ない、レビュープロセス全体を効率化することができます。\n\nGitLab Flow の内側フィードバックループは、すべてのレビュー項目が解決され、マージリクエストが承認されてメインブランチにマージされると終了します。これがトリガーとなって、アプリケーションが本番環境にデプロイされます。\n\n### アプリケーションとインフラストラクチャのデプロイ\n\n![Deploying - fifth portion of GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-deploy-apps-portion.png)\n\u003Ccenter>デプロイ – GitLab Flow の第 5 部\u003C/center>\u003Cp>\u003C/p>\n\n組織のニーズに応じて、継続的デリバリーまたは継続的デプロイをGitLab Flow で規定します。継続的デリバリーはコードの頻繁なリリースで、その都度 (本番環境への) デプロイを手動でトリガーします。継続的デプロイは人間が関わることなく行われる、コードの (本番環境への) 自動リリースを意味します。では、継続的デリバリーを最初に見てみましょう。\n\n継続的デリバリーでソフトウェアをリリースする際は、いくつかのデプロイオプションがあります。フリーズウィンドウ（作業を一時停止する期間）を設定し、カナリアロールアウト、ブルー・グリーンロールアウト、タイムドロールアウト、インクリメンタルロールアウトなどの、高度なデプロイ技術が利用できます。インクリメンタルロールアウトは本番環境でのシステムダウンのリスクが低減できるため、よりよいユーザーエクスペリエンスと顧客満足度が得られます。各種の高度なデプロイ技術を用いると、開発とデリバリーの効率が改善できるため、リリースプロセスが効率化されます。\n\n継続的なデプロイでソフトウェアをリリースする際は、変更点やアップデートはすべて直接、本番環境に反映されます。フィーチャーフラグのような段階的なデリバリーアプローチを採用すると、特定のフィーチャーの提供をローンチから分離できるため、リスクを低減し、本番ユーザーに利用してもらえる機能性を管理できます。フィーチャーフラグは多くのプログラミング言語をサポートしているため、開発者は実験をしたり、管理環境下でのテストを可能にします。また、フィーチャーフラグを使うと、ある特定のユーザーだけにフィーチャーをロールアウトすることも可能になります。\n\nGitLab はこうしたデプロイアプローチのすべてをサポートしていますが、GitLab Flow では、組織や特定のプロジェクトのニーズに特化したアプローチの採用が可能です。\n\n### アプリケーションの監視と DevSecOps のプロセス\n\nアプリケーションを本番環境にデプロイしたら、安定性、パフォーマンス、可用性を保証するために継続的に監視する必要があります。また、DevSecOps プロセスが実行されると、それらが測定され、パフォーマンスと効率性を改善する機会が得られます。GitLab には監視機能があり、GitLab Flow でそれを活用できます。\n\n実行中のコンテナに対しては、GitLab はオペレーショナルコンテナスキャン (OCS) を行ないます。OCS は、クラスタ内のコンテナイメージをスキャンすることにより、セキュリティ脆弱性をチェックします。こういったスキャンは、実行するタイミングをスケジューリングすることで自動化でき、また、検出された脆弱性をセキュリティダッシュボードに自動的に表示します。OCS はクラスタアプリケーションをセキュアに保ち、個人データの流出や予期せぬシステム停止につながるサイバー攻撃を未然に防ぎます。\n\nエラーの追跡を行なえば、開発者は、開発しているアプリケーションで発生したエラーを検知したり、表示ができます。アプリケーション内で生成されたエラーはすべて、GitLab の「エラートラッキングリスト」に表示されます。エラートラッキングは、予期せぬアプリケーションの状態を迅速に見つけ出し、解決するので、アプリケーションの可用性とパフォーマンスをよりよいものにします。\n\nGitLab は、Webhookレシーバー経由でPrometheus を含むあらゆる監視ソースからのアラートを受け取れます。アラートが受信されると「GitLab アラート」リストに表示され、ここから手動で管理できます。アラートは自動的にインシデントや ChatOps を生成するようにしたり、適切な個人やグループにメッセージを送るよう、トリガー設定できます。こういった機能はすべて、アラートの解決策および管理プロセスを効率化します。\n\n本番環境で発生した問題のためにインシデントが作成されると、インシデント管理用に GitLab の「インシデントリスト」に表示されます。インシデントは 1 つまたは複数を一度に管理でき、ソートや、検索、割り当てを行なったり、ステータスを設定し、SLA プリセットカウントダウンタイマーを見ることもできます。さらに、インシデントを処理するために、オンコールのスケジュールやローテーション、エスカレーションポリシーを作成し、ページングや通知を設定することもできます。さらに、インシデントはアラートにリンクすることで、インシデントがクローズされるとそれに関連付けられていたアラートも自動的に解決されるよう設定可能です。インシデントのタイムラインは、役員や外部からの閲覧者がインシデント中に何が起きたのか、それを解決するためにどんな手順を踏んだのかを確認する機能です。こういった各種機能はすべて、インシデント管理プロセスを効率化し、インシデントを可能な限り迅速に解決するためのものです。\n\n監査イベントは、GitLab で誰がいつ関連する対応を行なったのか、など重要なイベントを追跡します。監査イベントは GitLab の「監査イベント」リストに表示され、オブジェクトに対して実行したアクション、実行者、実行日時などが表示されます。\n\nこれまで説明した、すべてのリストとダッシュボードは、コンプライアンス違反の事前対策を手助けし、ペナルティを回避するだけでなく、監査プロセスを効率化するのにも役立ちます。実行中のアプリケーションから生成されたデータやメトリクスは、GitLab Flow の外側のフィードバックループで使用できます。このため、アプリケーションの改善と最適化が促され、予定外の本番環境でのシステム停止のリスクが低減されます。\n\n### 継続的な改善\nGitLab Flow を適用すると、GitLabが提供するエンドツーエンドのプロセスメトリクスのダッシュボードから知見が得られます。そのため、アプリケーションだけでなくソフトウェアのデリバリーパフォーマンスも継続的に改善できます。これらのダッシュボードとそのメトリクスは GitLab によって自動生成され、常時利用可能です。\n\nアプリケーション開発のライフサイクルは「バリューストリーム分析ダッシュボード」を使い、追跡、監視できます。ここでは時間の経過によるプロジェクトやグループの統計が確認できます。このダッシュボードはカスタマイズできますが、GitLab が提供しているデフォルトのテンプレートを使って、バリューストリームを作成すれば、迅速に開始できます。デフォルトのダッシュボードには、事前定義されたバリューストリーム分析の各ステージのメトリクスが表示されます。メトリクスとは、イシュー、プラン、コード、テスト、レビュー、ステージングなどで、それぞれの完了までにかかる平均時間がグラフで表示されます。ここには、リードタイム、サイクルタイム、新規イシュー、コミット、デプロイなどバリューストリーム分析のキーメトリクスも表示されます。これらのメトリクスを利用すれば、バリューストリームの各ステージについて、改善可能な領域が見つかります。\n\nパフォーマンスメトリクスでは、組織の開発およびデリバリーの有効性や効果を測定しますが、こういったメトリクス用に、GitLab は DORA (DevOps Research and Assessment) メトリクスダッシュボードを提供しています。ここには「デプロイ頻度」、「変更のリードタイム」、「サービス復旧時間」、「変更失敗率」の、4 つの主なメトリクス（Four Keys）が表示されます。「デプロイ頻度」は組織がどのくらいの頻度で本番環境にコードをデプロイするのか、またはそれをエンドユーザーにリリースするのかを測定します。「変更のリードタイム」は、コードをコミットした時点から、本番環境で実行されるまで、どれくらいの時間がかかるのかを測定します。「サービス復旧時間」は、インシデントが発生した場合に、どれくらいの時間でサービスをインシデント以前の状態に復旧できるのかを測定します。「変更失敗率」は、本番環境への変更またはユーザーにリリースされた変更のうち、サービス改悪につながったもの (たとえばサービス障害や停止につながった変更) で、その後、復旧が必要になった (ホットフィックス、ロールバック、パッチが必要になったなど) 変更の割合を示します。これらの 4 つの主要メトリクスは現在のプロセスを表すものであり、これを分析すれば、いろいろな要因や能力を改善できるでしょう。\n\nもうひとつのダッシュボードは、カスタム化可能な「バリューストリームダッシュボード」で、意思決定者が、傾向、パターンやソフトウェア開発改善の機会を特定できるようにするものです。表示されるメトリクスは DORA メトリクスに続いて、バリューストリーム分析のフローメトリクスと直近 1 か月間、2 か月間、6 か月間の重大な脆弱性の件数です。\n\nGitLab Duo は、継続的な改善への取り組みにも役立ちます。たとえば、「**バリューストリーム予測**」機能は、過去のデータを取り込んで、開発ライフサイクル全体のデータ傾向を使い、組織のバリューストリームメトリクスの今後の動向を予測します。こういった予測解析は、最適化の取り組みに活用できます。\n\nこれまで説明してきたすべてのダッシュボードや、そこで報告されるメトリクスは、GitLab Flow の外側フィードバックループを構成しており、予定外の本番環境でのシステム停止のリスクを低減し、アプリケーションと DevSecOps ワークフローを改善し、かつ最適化するのに役に立ちます。\n\n## GitLab Flow を使う理由\nGitLab Flow は、手順が規定されたアプローチで、世界中のユーザーが実践しているもので、次のような利点があります。\n\n* GitLab Flow を活用することで、GitLab が提供する自動化機能や、単一ユーザーインターフェース、データモデルによって生産性が向上\n\n* 継続的な改善をサポートする、エンドツーエンドの DevSecOps ライフサイクルへの正確な洞察\n\n* アプリケーションと DevSecOps プロセスの最適化に役立つ組み込み型ダッシュボードとメトリクス\n\n* コード品質の向上、ならびにアプリケーションの信頼性・可用性の向上\n\n* 組み込みのセキュリティスキャナと各種機能によるアプリケーションセキュリティの向上\n\n* 組み込みのコンプライアンス機能によるコンプライアンスおよび監査への対応デプロイ頻度を高めるサイクル時間の短縮\n\n* GitLab Flow の内側フィードバックループによる継続的なレビュー\n\n* GitLab Flow の内側フィードバックループによる、アプリケーションのアップデートの最適化、コード品質向上、アプリケーションの信頼性と可用性の改善\n\n* GitLab Flow の外側フィードバックループによる、開発ライフサイクルそのものだけでなく、アプリケーションも改善\n\n* 組織内の関係者間での強力な共同体制の確立\n\n* セキュリティをシフトレフトすることにより、コードを本番環境に出す前に、アプリケーション内の脆弱性を見つけ、費用のかかる、予定外のシステム停止を回避\n\n* GitLab によりサポートされている高度なデプロイ技術やプログレッシブデリバリーアプローチにより、本番環境へのデプロイ時のリスクを低減\n\n* 開発ライフサイクル全体にわたり、生産性、コード品質、継続的改善、セキュリティやコンプライアンスなどを強化させるAI 搭載機能\n\n* クラウドネイティブと非クラウドネイティブのアプリケーションをサポート\n\n* ハイブリッド / マルチクラウドアプリケーション向けのマルチクラウドサポート\n\nGitLab Flow はどう始めたらよいのでしょう。GitLab Flow の原則をお使いのアプリケーション開発ライフサイクルに適用してみたい場合、GitLab Auto DevOpsやその一部を活用することから始めるのが良いかもしれません。\n\n## GitLab Flow と Auto DevOps\n\n![Auto DevOps - an instantiation of GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/ado-pipeline.png)\n\u003Ccenter>Auto DevOps – GitLab Flow のインスタンス化\u003C/center>\u003Cp>\u003C/p>\n\n[Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/) は、GitLab Flow の全ステージやジョブに適用されます。つまり、Auto DevOps は GitLab Flow のインスタンス化の好例と考えるとよいでしょう。\n\nAuto DevOps は事前定義済みの、すぐに使用可能な CI/CD テンプレートで、ソースコードを自動検出できます。ベストプラクティスに基づき、CI/CD テンプレートは自動的にアプリケーションを検出、ビルド、テスト、デプロイ、監視します。\n\nAuto DevOpsパイプラインは、ソフトウェアデリバリープロセスで、早期段階で欠陥を発見し、予防する作業をシフトレフトします。次にAuto DevOps パイプラインはアプリケーションを検証するためステージング環境にデプロイし、その後、本番環境に段階的に、または、タイミングを合わせてデプロイします。\n\nAuto DevOps は迅速に利用開始でき、開発者の生産性を向上できます。また、最も一般的なプログラミングフレームワークとプログラミング言語をサポートするので、ニーズに合わせて簡単にカスタマイズできます。Auto DevOps はモジュラーであり、カスタマイズができ、拡張可能です。そのため、パイプラインに Auto DevOps の一部を活用したり、アプリケーションにすべてを適用することもできます。\n\n## 今すぐ始めてみましょう\n[GitLab Flow と GitLab Duo を組み合わせる](https://gitlab.com/-/trials/new?glm\\_content=default-saas-trial\\&glm\\_source=about.gitlab.com%2Fblog%2F) と、エンドツーエンドのワークフロー効率が顕著に改善できます。それにより、生産性、デプロイ頻度、コード品質、セキュリティ全般、プロダクションの耐久性と可用性について、さらなる改善が実現できます。\n\nGitLab Flow と GitLab Duo を併用するアプリケーションでのワークフローの確認や、メリットの確認には、次のビデオをご覧ください。\n\n\u003C!-- blank line -->\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/0JQUf9UOAdo?si=ZxgI3_nIODV6Gijw\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n*\\*監修：伊藤 俊廷 [@toshitakaito](https://gitlab.com/toshitakaito) （GitLab合同会社 ソリューションアーキテクト本部 スタッフソリューションアーキテクト）*",[9,748,751],"2024-08-28",{"slug":1022,"featured":6,"template":685},"gitlab-flow-duo","content:ja-jp:blog:gitlab-flow-duo.yml","Gitlab Flow Duo","ja-jp/blog/gitlab-flow-duo.yml","ja-jp/blog/gitlab-flow-duo",{"_path":1028,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1029,"content":1035,"config":1044,"_id":1046,"_type":14,"title":1047,"_source":16,"_file":1048,"_stem":1049,"_extension":19},"/ja-jp/blog/gitlab-free-tier-integration-guide",{"title":1030,"description":1031,"ogTitle":1030,"ogDescription":1031,"noIndex":6,"ogImage":1032,"ogUrl":1033,"ogSiteName":669,"ogType":670,"canonicalUrls":1033,"schema":1034},"フリー版のGitLabでできる Integration Guide 〜どんどんつなげよう、GitLabの輪〜","この記事ではGitLabのフリー版をご利用の方が無料で実現できる、他社製品とのインテグレーション方法について、詳しくご説明します。\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659791/Blog/Hero%20Images/%E3%83%95%E3%83%AA%E3%83%BC%E7%89%88%E3%81%AEGitLab%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B6.png","https://about.gitlab.com/blog/gitlab-free-tier-integration-guide","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"フリー版のGitLabでできる Integration Guide 〜どんどんつなげよう、GitLabの輪〜\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tsukasa Komatsubara\"}],\n        \"datePublished\": \"2025-05-28\",\n      }",{"title":1030,"description":1031,"authors":1036,"heroImage":1032,"date":1038,"body":1039,"category":1040,"tags":1041},[1037],"Tsukasa Komatsubara","2025-05-28","## 目次\n\n__1.はじめに__\u003Cbr>\n__2.はしがき__\u003Cbr>\n__3.Redmine__\u003Cbr>\n  本書で扱うRedmine\u003Cbr>\n  Redmineのインストール\u003Cbr>\n      セットアップ\u003Cbr>\n      初期設定\u003Cbr>\n  GitLabのマニュアルの確認\u003Cbr>\n  GitLab側の設定\u003Cbr>\n  実際に使用している様子\u003Cbr>\n  GitLabのコミット時に「#2」を指定している様子\u003Cbr>\n  本インテグレーションのポイント\u003Cbr>\n  ご注意\u003Cbr>\n\n__4.Backlog__\u003Cbr>\n  本書で扱うBacklog\u003Cbr>\n      Backlogの利用開始\u003Cbr>\t\n      ユーザ登録\t\u003Cbr>\n  初期設定\u003Cbr>\n  GitLabのマニュアルの確認\u003Cbr>\n  GitLab側の設定\u003Cbr>\n      GitLabのイシュー機能を非表示\t\u003Cbr>\n  実際に使用している様子\t\u003Cbr>\n  GitLabのコミット時に「キー情報」を指定している様子\t\u003Cbr>\n  本インテグレーションのポイント\u003Cbr>\t\n  ご注意\t\u003Cbr>\n\n__5.Jira__\u003Cbr>\n  本書で扱うJiraと2つのユースケース\t\u003Cbr>\n  Jiraの利用開始\u003Cbr>\t\n      ユーザ登録\t\u003Cbr>\n      初期設定\t\u003Cbr>\n  GitLabのマニュアルの確認\t\u003Cbr>\n  ユースケース1. Jira Issue Integration\t\u003Cbr>\n  GitLab側の設定\t\u003Cbr>\n  GitLabのイシュー機能を非表示\t\u003Cbr>\n  実際に使用している様子\t\u003Cbr>\n  GitLabのコミット時に「URL情報」を指定している様子\t\u003Cbr>\n  本インテグレーションJira Issueのポイント\t\u003Cbr>\n  ご注意\t\u003Cbr>\n  ユースケース2. Jira development panel Integration\t\u003Cbr>\n  Jira側の設定\t\u003Cbr>\n  実際に使用している様子\t\u003Cbr>\n\n## 1.はじめに\n\n本書は、GitLabのフリー版をお使いの皆様に、無料で実現できる他社製品とのインテグレーション方法について詳しく説明したものです。  \n\nぜひ実際に手を動かして、セットアップしてみてください。  \nいずれもプロジェクト単位なので、他のGitLab上のプロジェクトに影響を与えることはありません。\n\n## 2.はしがき\n\n- 本書に登場する会社名および商品名は各社の商標または登録商標です。  \n- なお、本書ではⓇ、TM マークを明記しておりません。\n- 本書で前提としている各製品等のバージョンは以下となります。\n\n  GitLab.com および GitLab Community Edition/Enterprise Edition Free版 17.10\n\n## 3.Redmine\n\n### 本書で扱うRedmine\n\nRedmineとは、[https://www.redmine.org/](https://www.redmine.org/) で提供されている、無料のプロジェクト管理ツールです。非常に人気が高いOSSプロダクトです。\n\n![フリー版のGitLabでできる6](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%E3%83%95%E3%83%AA%E3%83%BC%E7%89%88%E3%81%AEGitLab%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B6.png)\n\n*引用元: https://www.redmine.org/*\n\n2025/04/01時点で、最新のものは、 [6.0.4](https://www.redmine.org/projects/redmine/wiki/Download)となっています。\n\n![フリー版のGitLabでできる26](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__26.png)\n*引用元: https://www.redmine.org/*\n\n### Redmineのインストール\n\n#### セットアップ\n\n本書では、Dockerをつかってインストールします。\n\n以下のファイルを作成： docker-compose.yml\n\n```\nversion: '3.1'\n\nservices:\n\n  redmine:\n    image: redmine\n    restart: always\n    ports:\n      - 80:3000\n    environment:\n      REDMINE_DB_MYSQL: db\n      REDMINE_DB_PASSWORD: example\n      REDMINE_SECRET_KEY_BASE: supersecretkey\n\n  db:\n    image: mysql:8.0\n    restart: always\n    environment:\n      MYSQL_ROOT_PASSWORD: example\n      MYSQL_DATABASE: redmine\n\n```\n\nその後、以下のコマンドでインスタンスを起動します。\n\n```\nsudo docker compose up \\-d\n```\n\n#### 初期設定\n\nRedmine側でプロジェクトや、イシューを作成できるよう、トラッカー等の設定をおこないます。一通りセットアップを完了します。\n\n![フリー版のGitLabでできる37](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__37.png)\n*引用元: https://www.redmine.org/*\n\n仮に以下の内容で準備が完了したとします。\n\n| 項目 | 設定値 |\n| :---- | :---- |\n| URL | [http://my-redmine.samurai-tanuki.com/](http://my-redmine.samurai-tanuki.com/) |\n| 作成したプロジェクト | sample-project-1 |\n\n### GitLabのマニュアルの確認\n\n以下のURLで、GitLabとRedmineの設定方法についてのガイドが記載されています。\n\n[Redmine | GitLab Docs](https://docs.gitlab.com/user/project/integrations/redmine/) \n\n### GitLab側の設定\n\n![フリー版のGitLabでできる20](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__20.png)\n\n| 項目 | 設定値 |\n| :---- | :---- |\n| プロジェクトのURL | http://my-redmine.samurai-tanuki.com/projects/sample-project-1 |\n| イシューのURL | http://my-redmine.samurai-tanuki.com/issues/:id |\n| 新しいイシューのURL | http://my-redmine.samurai-tanuki.com/projects/sample-project-1/issues/new |\n\n（*上記では、「新しいイシューのURL」を指定していますが、本機能はもう動作しません。UI上は入力チェック機能が動作するため、なにか適当な文字列を指定すればよいです。プロジェクトのURL、イシューのURLを指定し、「テスト設定」を押下して動作を確認します）\n\n上記の「プロジェクトのURL」は、GitLabのメニューの以下の部分に表示されます。\n\n![フリー版のGitLabでできる15](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__15.png)\n\n### 実際に使用している様子\n\nRedmine側で、以下のようにイシューを作成します。\n\n![フリー版のGitLabでできる11](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__11.png)\n\n*引用元: https://www.redmine.org/*\n\n![フリー版のGitLabでできる12](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__12.png)\n*引用元: https://www.redmine.org/*\n\n### GitLabのコミット時に「#2」を指定している様子\n\n![フリー版のGitLabでできる16](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__16.png)\n\nコミットした後、以下のようにリンクが作成されます。\n\n![フリー版のGitLabでできる34](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__34.png)\n\n上記で「Issue in Redmine」をクリックすると、以下の画面に遷移します。\n\n![フリー版のGitLabでできる12](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__12.png)\n*引用元: https://www.redmine.org/*\n\n### 本インテグレーションのポイント\n\nGitLabとRedmineのインテグレーションを実現すると、以下のような内容が実現できます。\n\n1. Redmine側でイシューを作成  \n2. GitLab側でソースコード等へ修正を加え、コミット時に、Redmine側でのチケット番号を指定すると、URLとして保存される  \n3. GitLabの画面で、そのチケット番号部分が「URLリンク」になっているため、クリックすればすぐにそのRedmineのチケットURLへ飛ぶことができる\n\nポイントとして、\n\n* GitLab側から、Redmine側へ直接「書き込み」は行わない  \n* あくまでもリンクをつなげることで、GitLab ⇔ Redmine間で手動で行き来する手間と(別のチケットを参照しないように)操作ミスを防ぐ\n\nの2点が価値ポイントとなります。\n\n### ご注意\n\n本機能を有効にすると、GitLab側の「イシュー」機能が利用できなくなります。\n\n## 4.Backlog\n\n### 本書で扱うBacklog\n\nBacklogとは、株式会社ヌーラボ社から提供されている、製品です。ここでは、GitLabとのインテグレーション方法について解説します。\n\n![フリー版のGitLabでできる31](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__31.png)\n*引用元: https://backlog.com/ja/*\n\n### Backlogの利用開始\n\n#### ユーザ登録 \n\nBacklogの契約がまだで、テスト的に利用したい場合は、Free版が提供されているようなので、それを利用するのものオススメです。\n\n### 初期設定\n\nBacklog側でプロジェクトの作成をおこないます。Backlogの場合、プロジェクトを作成すれば、すぐに使えるようになっています。\n\n![フリー版のGitLabでできる44](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__44.png)\n\n*引用元: https://backlog.com/ja/*\n\n| 項目 | 設定値 |\n| :---- | :---- |\n| URL | https://tsukasano.backlog.com/ |\n| 作成したプロジェクト | sample-project-1 |\n\n### GitLabのマニュアルの確認\n\n以下のURLで、GitLabとBacklogについては、汎用的な接続インターフェースで設定します。  \nこの設定をした場合、GitLabの既存の「イシュー」機能も「存続」します。そのため、特に併用の必要がない場合は、GitLab側の「イシュー」を非表示することをおすすめします。\n\n[Custom issue tracker | GitLab Docs](https://docs.gitlab.com/user/project/integrations/custom_issue_tracker/)\n\n### GitLab側の設定\n\n![フリー版のGitLabでできる35](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__35.png)\n\n| 項目 | 設定値 |\n| :---- | :---- |\n| プロジェクトのURL | https://tsukasano.backlog.com/projects/PAFE1 |\n| イシューのURL | https://tsukasano.backlog.com/view/PAFE1-:id |\n| 新しいイシューのURL | https://tsukasano.backlog.com/add/PAFE1 |\n\nBacklogの場合、イシューのURLの部分に少し注意が必要です。上記では、プロジェクトIDは「PAGE1」ですが、イシューを参照したときのURLは、(イシュー番号が6の場合)「https://tsukasano.backlog.com/view/PAFE1-6」となります。そのため、分かりづらいですが、上記の「イシューのURL」のように、「:id」を含める部分については注意が必要です。不明であれば、一旦、Backlog側でイシューを開き、そのURLの構成を確認するとよいでしょう。\n\n（* 上記では、「新しいイシューのURL」を指定していますが、本機能はもう動作しません。UI上は入力チェック機能が動作するため、なにか適当な文字列を指定すればよいです。プロジェクトのURL、イシューのURLを指定し、「テスト設定」を押下して動作を確認します）\n\n上記の「プロジェクトのURL」は、GitLabのメニューの以下の部分に表示されます。\n\n![フリー版のGitLabでできる50](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__50.png)\n\n#### GitLabのイシュー機能を非表示\n\nBacklogをメインとして使う場合、GitLabの「設定」ー「一般」ー「可視性、プロジェクトの機能、権限」より、「イシュー」をOffにします。\n\n![フリー版のGitLabでできる17](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__17.png)\n\nその後、[変更を保存]ボタンを押して、設定を反映します。  \n![フリー版のGitLabでできる8](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__8.png)\nそうすると、以下のようにメニューの表示が変わります。\n\n![フリー版のGitLabでできる50](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__50.png)\n\n### 実際に使用している様子\n\nBacklog側で、以下のようにイシューを作成します。\n![フリー版のGitLabでできる23](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__23.png)\n*引用元: https://backlog.com/ja/*\n\nこの時、上の図の矢印アイコンをクリックすると、課題名とキーが含まれた「キー情報」がクリップボードにコピーされます。\n\n### GitLabのコミット時に「キー情報」を指定している様子\n![フリー版47](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/image47.png)\n\nコミットした後、以下のようにリンクが作成されます。\n\n![フリー版のGitLabでできる10](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__10.png)\n\n上記で「Issue in Custom issue tracker」をクリックすると、以下の画面に遷移します。\n\n![フリー版のGitLabでできる45](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__45.png)\n*引用元: https://backlog.com/ja/*\n\n### 本インテグレーションのポイント\n\nGitLabとBacklogのインテグレーションを実現すると、以下のような内容が実現できます。\n\n1. Backlog側でイシューを作成  \n2. GitLab側でソースコード等へ修正を加え、コミット時に、Backlog側でのチケット番号を指定すると、URLとして保存される(Backlog側のUIから、チケット情報をコピーするとよいでしょう)  \n3. GitLabの画面で、そのチケット番号部分が「URLリンク」になっているため、クリックすればすぐにそのBacklogのチケットURLへ飛ぶことができる\n\nポイントとして、\n\n* GitLab側から、Backlog側へ直接「書き込み」は行わない  \n* あくまでもリンクをつなげることで、GitLab ⇔ Backlog間で手動で行き来する手間と(別のチケットを参照しないように)操作ミスを防ぐ\n\nの2点が価値ポイントとなります。\n\n### ご注意\n\n本機能を有効にすると、GitLab側の「イシュー」機能は残りますので、特別な理由がない限り、GitLab側の「イシュー」機能は停止するとよいでしょう。\n\n## 5.Jira\n\n### 本書で扱うJiraと2つのユースケース\n\nJiraとは、アトラシアン社から提供されている、製品です。ここでは、GitLabとのインテグレーション方法について解説します。\n\nここで扱うユースケースは、2つあります。このJiraの場合だけ、少し特殊なのが面白いところです。  \n「Jira Issue」と「Jira development panel」Integrationです。\n\n![フリー版のGitLabでできる3](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__3.png)\n*引用元: https://www.atlassian.com/software/jira*\n\n### Jiraの利用開始\n\n#### ユーザ登録\n\nJiraの契約がまだで、テスト的に利用したい場合は、Free版が提供されているようなので、それを利用するのものオススメです。\n\n#### 初期設定\n\nJira側でプロジェクトの作成をおこないます。Jiraの場合、プロジェクトを作成すれば、すぐに使えるようになっています。\n![フリー版のGitLabでできる5](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__5.png)\n*引用元: https://www.atlassian.com/software/jira*\n\n| 項目 | 設定値 |\n| :---- | :---- |\n| URL | https://gitlab-tsukasa.atlassian.net/jira/software/projects/KAN/boards/1 |\n| 作成したプロジェクト | KAN |\n\n### GitLabのマニュアルの確認\n\n以下のURLで、GitLabとJiraについては、専用のインターフェースで設定します。Jiraの場合は他のプロダクトと比較して、よりレベルの高いインテグレーションが可能になっています。\n\n[Jira | GitLab Docs](https://docs.gitlab.com/integration/jira/)\n\nGitLabとJiraのインテグレーションは、以下の2箇所あります。\n\n* Jira イシュー … チケット機能です  \n* Jira デベロップメントパネル … GitLab内のブランチ情報などをJiraに連携します\n\nそれぞれ、GitLabとどう関係するのかは、以下のURLをご参考ください。\n\n[Jira | GitLab Docs](https://docs.gitlab.com/integration/jira/#feature-availability)\n\n例)  \n![フリー版のGitLabでできる52](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__52.png)\n\n(以下続く)\n\n### ユースケース1. Jira Issue Integration\n\n以下のURLにアクセスして、Jira側でAPIトークンを取得します。  \n[https://id.atlassian.com/manage-profile/security/api-tokens](https://id.atlassian.com/manage-profile/security/api-tokens)\n\nその時のユーザは、Jiraの管理者である必要があります。このユーザをつかって、GitLab側でのコミット情報をJira側にも書き込みます。\n\n#### GitLab側の設定\n\n![フリー版のGitLabでできる41](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__41.png)\nここでは、Web URLをつかって、インテグレーションをおこないます。\n\n| 項目 | 設定値 |\n| :---- | :---- |\n| Web URL | https://gitlab-tsukasa.atlassian.net |\n\n以下の部分はデフォルトでチェックされていますので、そのままにします。これにより、Jira側へコメントが自動書き込みされます。\n![フリー版のGitLabでできる51](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__51.png)\n\nGitLab Premium版以上を使うと、GitLabの「イシュー」画面から透過的にJiraのイシューを見ることができますが、本書はGitLabフリー版を前提としていますので、GitLabの「イシュー」機能を非表示にします。\n\n#### GitLabのイシュー機能を非表示\n\nJiraをメインとして使う場合、GitLabの「設定」ー「一般」ー「可視性、プロジェクトの機能、権限」より、「イシュー」をOffにします。\n![フリー版のGitLabでできる17](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176161/Blog/upmcvbthskxusvq6qf38.png)\n\nその後、[変更を保存]ボタンを押して、設定を反映します。\n\n![フリー版のGitLabでできる8](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__8.png)\n\nそうすると、以下のようにメニューの表示が変わります。\n\n![フリー版のGitLabでできる39](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__39.png)\n\n#### 実際に使用している様子\n\nJira側で、以下のようにイシューを作成します。\n\n![フリー版のGitLabでできる43](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__43.png)\n\nこの時、上の図のクリップアイコンをクリックすると、このチケットへのURLがクリップボードにコピーされます。\n\n#### GitLabのコミット時に「URL情報」を指定している様子\n![フリー版33](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/image33.png)\nコミットした後、以下のようにリンクが作成されます。\n![フリー版のGitLabでできる27](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__27.png)\n\n一方、キー番号のみを記述すると以下にになります。\n\n![フリー版のGitLabでできる40](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__40.png)\n\n![フリー版のGitLabでできる1](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__1.png)\n上記で「Issue in Jira issue」をクリックすると、以下の画面に遷移します。\n\n![フリー版のGitLabでできる24](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__24.png)\n\nこのように、コメントが記入されますので、URLよりも、キーを指定することをおすすめします。\n\n#### 本インテグレーション（Jira Issue）のポイント \n\nGitLabとJira Issueのインテグレーションを実現すると、以下のような内容が実現できます。\n\n1. Jira側でイシューを作成  \n2. GitLab側でソースコード等へ修正を加え、コミット時に、Jira側でのチケット番号を指定すると、URLとして保存される  \n3. GitLabの画面で、そのチケット番号部分が「URLリンク」になっているため、クリックすればすぐにそのJiraのチケットURLへ飛ぶことができる  \n4. さらに、そのJiraのチケットに、コミット時のコメントが記載される\n\nポイントとして、\n\n* GitLab側から、Jira Issue側へ直接「書き込み」を行う  \n* チケットへのURLを貼ると、「書き込み」は行われない  \n* これにより、GitLab ⇔ Jira間で手動で行き来する手間と(別のチケットを参照しないように)操作ミスを防ぐ\n\nの3点が価値ポイントとなります。\n\n#### ご注意\n\n__GitLab Free版を使う場合__\n\n本機能を有効にすると、GitLab側の「イシュー」機能は残りますので、特別な理由がない限り、GitLab側の「イシュー」機能は停止するとよいでしょう。\n\n__ご参考__\nGitLab Premium以上をご利用するとGitLabの「イシュー」から、JiraのIssueが見えるようになります。\n\n[Jira issues integration | GitLab Docs](https://docs.gitlab.com/integration/jira/configure/#view-jira-issues)\n\nまた、GitLab Ultimateをご利用すると、GitLab側でセキュリティスキャンを行ったのち、脆弱性がみつかった際、その脆弱性をJira側へ新規のチケットとして起票する、という機能が利用可能です。\n\n[Jira issues integration | GitLab Docs](https://docs.gitlab.com/integration/jira/configure/#create-a-jira-issue-for-a-vulnerability)  \n\n### ユースケース2. Jira development panel Integration\n\nこのユースケースを使用する際、Jira側でどの「Jira」を使っているのかが重要になります。Atlassian社が提供するクラウドサービスを使っている場合、「GitLab for Jira Cloud app」(GitLab製)を使います。一方、オンプレミス版の「Jira Data Center or Jira Server」を使っている場合は、「Jira DVCS connector」（Atlassian社製）を使います。\n\n本書では、クラウドサービスのJiraを使っている、という前提で解説します。\n\n#### Jira側の設定\n\nJiraの画面で、「アプリ」ー「その他のアプリを探す」をクリックします。\n\n![フリー版のGitLabでできる14](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__14.png)\n*引用元: https://www.atlassian.com/software/jira*\n\nここで、GitLab製のこの「GitLab for Jira Cloud」Appをインストールします。\n\n![フリー版のGitLabでできる7](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__7.png)\n*引用元: https://www.atlassian.com/software/jira*\n\n![フリー版のGitLabでできる2](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__2.png)\n\n![フリー版のGitLabでできる48](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__48.png)\n*引用元: https://www.atlassian.com/software/jira*\n\nこれで無事インストールが完了です。\n\n完了すると、次のポップアップが表示されますので、「Get started」をクリックします。\n\n![フリー版のGitLabでできる30](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__30.png)\n*引用元: https://www.atlassian.com/software/jira*\n\nすると、次の画面が表示されますので、GitLab.comを選択した状態で、認証を完了させます。\n\n![フリー版のGitLabでできる18](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__18.png)\n*引用元: https://www.atlassian.com/software/jira*\n\n![フリー版のGitLabでできる4](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__4.png)\n*引用元: https://www.atlassian.com/software/jira*\n\n次に、このAppを有効にするGitLab側のグループを選択する画面になります。ここで、任意のグループを選択します。\n\n![フリー版のGitLabでできる32](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__32.png)\n*引用元: https://www.atlassian.com/software/jira*\n\nここで選択できるのは、プロジェクトではなく、グループです。\n\n![フリー版のGitLabでできる49](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__49.png)\n*引用元: https://www.atlassian.com/software/jira*\n\n無事完了すると、次の画面になります。\n\n![フリー版のGitLabでできる53](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__53.png)\n*引用元: https://www.atlassian.com/software/jira*\n\n#### 実際に使用している様子\n\nでは、実際になにがどう見えるのか実践してみます。\n\nJira側で、なにか適当なイシューを作成するなり、見つけてみましょう。そのキーが「KAN-14」だとします。\n![フリー版のGitLabでできる25](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__25.png)\n*引用元: https://www.atlassian.com/software/jira*\n\nここで、GitLab側でなにか適当に変更して、コミットする際のダイアログボックス画面で以下のように入力します。\n\n![フリー版のGitLabでできる21](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__21.png)\n\nJira側にもどって、該当チケットを見てみます。\n\n赤矢印のところに、GitLab側のレポジトリ情報が連携されていることがわかります。\n\n![フリー版のGitLabでできる19](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__19.png)\n*引用元: https://www.atlassian.com/software/jira*\n\n以下のように、コミット情報等も連携されていることがわかります。\n\n![フリー版のGitLabでできる28](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__28.png)\n*引用元: https://www.atlassian.com/software/jira*\n\nまた、「すべての開発情報を表示」をクリックすると、以下のような画面も表示されます。\n![フリー版のGitLabでできる29](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__29.png)\n*引用元: https://www.atlassian.com/software/jira*\n\n参考までに、この時点でこのAppをアンインストールすると、以下のように、開発情報は表示されなくなります。\n![フリー版のGitLabでできる42](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__42.png)\n*引用元: https://www.atlassian.com/software/jira*\n\nJira側からブランチを作成することも可能です。  \n![フリー版のGitLabでできる22](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__22.png)\n*引用元: https://www.atlassian.com/software/jira*\n\nまた、以下は他のチケットですが、一度コミット時にJiraとの紐づけを行っておくと、そのブランチに対してビルドしたり、デプロイしたりした履歴が、以下のようにJira側にも反映されます。\n\n![フリー版のGitLabでできる36](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__36.png)\n*引用元: https://www.atlassian.com/software/jira*\n\n![フリー版のGitLabでできる38](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687054/Blog/Content%20Images/%C3%A3__%C3%A3_%C2%AA%C3%A3__%C3%A7__%C3%A3__GitLab%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__%C3%A3__38.png)\n*引用元: https://www.atlassian.com/software/jira*\n\nこのように、Jiraのチケットから、「最終的にいまどこまで進んだ？」みたいな内容まで確認できるようになります。  \n","open-source",[232,682,9,750,1042,680,754,1043],"open source","embedded DevOps",{"slug":1045,"featured":91,"template":685},"gitlab-free-tier-integration-guide","content:ja-jp:blog:gitlab-free-tier-integration-guide.yml","Gitlab Free Tier Integration Guide","ja-jp/blog/gitlab-free-tier-integration-guide.yml","ja-jp/blog/gitlab-free-tier-integration-guide",{"_path":1051,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1052,"content":1055,"config":1062,"_id":1064,"_type":14,"title":1065,"_source":16,"_file":1066,"_stem":1067,"_extension":19},"/ja-jp/blog/gitlab-ultimate-for-ibm-z-modern-devsecops-for-mainframes",{"noIndex":6,"description":1053,"title":1054},"GitLabとIBMの新しいソリューションは、シームレスな統合、CI/CDランナーサポート、エンドツーエンドの可視性、およびコスト効率により、メインフレームとクラウドネイティブ開発を橋渡しします。","GitLab Ultimate for IBM Z：メインフレーム向けモダンDevSecOps",{"title":1054,"description":1053,"body":1056,"category":681,"tags":1057,"authors":1058,"heroImage":1061,"date":938},"GitLabとIBMは、エンタープライズ開発における根本的な断絶を解決するためにパートナーシップを結びました。それは、メインフレーム開発者が分散環境の開発者と同じモダンなツール、ワークフロー、コラボレーション機能を使用できるようにすることです。GitLab Ultimate for IBM Zは、GitLab認定の統合DevSecOpsソリューションであり、メインフレーム環境に特化して設計されています。このソリューションにより、組織は時代遅れのレガシーライブラリマネージャーからのシームレスな移行を促進し、メインフレーム開発ワークフローをモダナイズできます。IBM z/OS上でネイティブに実行されるCI/CDパイプラインにより、お客様はイノベーションの加速と運用コストの削減を実現できます。\n\n## 現代におけるメインフレーム開発の課題\n\nミッションクリティカルなワークロードにIBM Zシステムを使用するエンタープライズ組織は、従来のDevSecOpsツールでは対応できない課題に直面しています。クラウドネイティブチームは、モダンな[CI/CD](https://about.gitlab.com/ja-jp/topics/ci-cd/)パイプライン、協調的な開発、自動化されたテストの恩恵を受けています。一方、メインフレームチームは取り残されることが多く、コストのかかる非効率性と運用サイロにつながる時代遅れのツールに縛られています。\n\nチームはSSH接続や手動ファイル転送などの回避策に頼ることが多く、これらはセキュリティの脆弱性や監査の困難さを生み出します。コンプライアンス要件が厳格な場合、これらの即席のソリューションは受け入れられないリスクとなります。同時に、組織は高価な並行ツールチェーンを維持しており、レガシーメインフレーム開発ツールは、モダンな代替品と比較して限られた機能しか提供しないにもかかわらず、プレミアムライセンスコストがかかっています。\n\nこの断片化は2つの問題を生み出します：配信サイクルの遅延と、モダンな開発体験を期待する開発者の採用の困難さです。\n\n> **「GitLab Ultimate for IBM Zは、長年の業界課題に対処する重要な一歩を表しています。IDCの調査によると、メインフレーム開発者は、配信の非効率性につながり、新しい人材を引き付けることを困難にするレガシーツールで作業することが多いことが示されています。このソリューションにより、モダンなDevSecOps機能と統一されたワークフローがメインフレームに直接もたらされます。これにより、開発者はより協調的かつ効率的に作業できるようになり、組織はイノベーションを加速し、メインフレーム開発をより広範なデジタルトランスフォーメーション戦略に統合することができます。」** \\\n> - Katie Norton、IDC DevSecOpsおよびソフトウェアサプライチェーンセキュリティ リサーチマネージャー\n\n## 統一された開発環境\n\n真のモダナイゼーションとは、単にメインフレーム開発を更新することではありません。それは、メインフレーム、クラウドネイティブ、Web、モバイル開発チームがシームレスに協力できる統一プラットフォームを作成することを意味します。\n\nGitLab Ultimate for IBM Zにより、開発者はz/OS、クラウド、またはオンプレミスインフラストラクチャにデプロイする場合でも、一貫したワークフローを使用できます。知識はサイロ化されるのではなく、チーム間で共有されます。レガシーシステムは動作を継続しながら、チームは独自のペースでモダンなプラクティスを採用できるため、組織はビジネスの中断なく段階的にモダナイズできます。\n\n組織がハイブリッドクラウド戦略を追求する中、GitLabはメインフレームとクラウドネイティブ環境にまたがるアプリケーションの基盤を提供します。\n\n## GitLab Ultimate for IBM Zとは？\n\nGitLab Ultimate for IBM Zは、ネイティブz/OSランナーサポートを提供し、メインフレームインフラストラクチャ上で直接シームレスなCI/CDパイプライン実行を可能にします。このGitLab認定ソリューションは、エンタープライズアプリケーションが要求するセキュリティと信頼性を維持しながら、複雑な回避策の必要性を排除するのに役立ちます。\n\nGitLabの包括的なDevSecOpsプラットフォームとIBMの深いメインフレーム専門知識の組み合わせにより、市場で独自のものが生まれます：エンタープライズレガシーシステムとクラウドネイティブイノベーションの間の真の架け橋を提供する認定ソリューションです。\n\n## GitLab Ultimate for IBM Zの機能\n\nGitLab Ultimate for IBM Zは、重要なビジネスシステムを維持しながらメインフレーム開発をモダナイズするために必要なツールをエンタープライズチームに提供します。\n\n**ネイティブz/OSランナーサポート**は、リモート接続に関連するセキュリティリスクとスケーラビリティのボトルネックを排除し、メインフレームコードが存在する場所で直接実行されるCI/CDパイプラインを通じて配信を加速します。\n\n**統一されたソースコード管理**は、高価なレガシーライブラリマネージャーをGitLabの検索可能でバージョン管理されたリポジトリシステムに置き換えることで、ツールチェーンをモダナイズし、ライセンスコストとメンテナンスのオーバーヘッドを削減するのに役立ちます。\n\n**IBM Developer for z/OS Enterprise Edition (IDzEE)とのシームレスな統合**は、依存関係ベースのビルド、自動コードスキャン、および使い慣れた開発環境内の包括的なデバッグツールを通じて、より高速なソフトウェアリリースを実現し、品質とセキュリティの両方を向上させます。\n\n**メインフレームと分散環境全体のエンドツーエンドの可視性**は、計画から本番までの包括的なプロジェクト管理を提供し、モダンな次世代開発ツールを通じて人材を維持するのに役立つ自動化されたDevOpsワークフローを可能にします。\n\n## 今すぐメインフレーム開発環境をモダナイズ\n\nGitLab Ultimate for IBM Zは、メインフレーム開発体験を変革する準備ができている組織向けに、現在利用可能です。詳細については、[GitLabとIBMのパートナーシップページ](https://about.gitlab.com/partners/technology-partners/ibm/)をご覧ください。",[283,681,9,751],[1059,1060],"Mike Flouton","Andy Bradfield","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750440008/myqt5vcjlffh8sszw507.png",{"featured":91,"template":685,"slug":1063},"gitlab-ultimate-for-ibm-z-modern-devsecops-for-mainframes","content:ja-jp:blog:gitlab-ultimate-for-ibm-z-modern-devsecops-for-mainframes.yml","Gitlab Ultimate For Ibm Z Modern Devsecops For Mainframes","ja-jp/blog/gitlab-ultimate-for-ibm-z-modern-devsecops-for-mainframes.yml","ja-jp/blog/gitlab-ultimate-for-ibm-z-modern-devsecops-for-mainframes",{"_path":1069,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1070,"content":1076,"config":1083,"_id":1085,"_type":14,"title":1086,"_source":16,"_file":1087,"_stem":1088,"_extension":19},"/ja-jp/blog/how-indeed-transformed-its-ci-platform-with-gitlab",{"title":1071,"description":1072,"ogTitle":1071,"ogDescription":1072,"noIndex":6,"ogImage":1073,"ogUrl":1074,"ogSiteName":669,"ogType":670,"canonicalUrls":1074,"schema":1075},"GitLabでCIプラットフォームを変革したIndeed社の戦略","世界最大の求人サイトであるIndeed社は、数千のプロジェクトをGitLab CIに移行することで、生産性向上とコスト削減を実現しました。1日あたりのパイプライン実行数が79%増加するなど、得られた主なメリットをご紹介します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099351/Blog/Hero%20Images/Blog/Hero%20Images/Indeed-blog-cover-image-2_4AgA1DkWLtHwBlFGvMffbC_1750099350771.png","https://about.gitlab.com/blog/how-indeed-transformed-its-ci-platform-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLabでCIプラットフォームを変革したIndeed社の戦略\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Carl Myers\"}],\n        \"datePublished\": \"2024-08-27\",\n      }",{"title":1071,"description":1072,"authors":1077,"heroImage":1073,"date":1079,"body":1080,"category":774,"tags":1081,"updatedDate":1082},[1078],"Carl Myers","2024-08-27","***編集者からのお知らせ：GitLabでは、当社ブログの執筆者として、カスタマーコミュニティのメンバーをお招きすることがあります。今回のブログ記事では、Indeed社のCIプラットフォームマネージャーを務めるCarl Myers氏に、GitLabに関する経験を共有していただきました。*** \n\nIndeedは、「We help people get jobs.（人々の仕事さがしを支援する）」というミッションを掲げています。Indeedは、[月間3億5,000万人以上のユニークビジターを持つ、世界最大の求人サイト](https://jp.indeed.com/about)（外部サイト）です。\n\nIndeedのエンジニアリングプラットフォームチームは「We help people to help people get jobs.（人々の仕事さがしを支援する人を支援する）」というモットーを掲げており、これは会社のミッションとは少し異なるものです。20年近くにわたり、常に求職者を第一に考えるデータドリブンのエンジニアリング文化を醸成してきました。この文化を推進する中で、当社はこのアプローチを実現し、日々エンジニアが求職者によい結果を届けられるようにするためのツールの構築に責任を持って取り組んでいます。\n\nわずか11人から成るIndeedのCIプラットフォームチームは、GitLabの継続的インテグレーション（CI）を導入したことで、社内の数千人のユーザーを効果的にサポートできるようになりました。このほかにも、IndeedはGitLab CIへの移行により次のメリットを得ました。\n- 1日あたりのパイプライン実行数が79%増加\n- CIハードウェアコストを10～20%削減\n- サポート負担の軽減\n\n## CIプラットフォームの進化：Jenkinsから拡張性に優れたソリューションへ\n\n多くの大手テクノロジー企業と同様に、当社は会社の成長に伴い、当時利用可能なオープンソースや業界標準のソリューションを用いてCIプラットフォームを段階的に構築してきました。2007年、Indeedのエンジニアが20人にも満たなかった頃、チームではHudson（Jenkinsの前身）を使用していました。\n\n20年近くにわたる成長を経た現在、Indeedには数千人のエンジニアが在籍しています。新しい技術が登場するたびに、段階的に改善に取り組み、2011年頃にはJenkinsに移行しました。また、[AWS EC2](https://aws.amazon.com/ec2/)を使用して、ほとんどのワークロードを動的なクラウドワーカーノードに移行することにも成功しました。しかし、Kubernetes時代に突入すると、システムのアーキテクチャが限界に達しました。\n\nJenkinsのアーキテクチャは、クラウドを前提に設計されていません。Jenkinsは、パイプラインの重要な部分を実行し、特定のタスクをワーカーノードに割り当てる役割を持つ『コントローラー』ノードを使用して動作します（ワーカーノードはある程度水平にスケーリングが可能）。しかし、コントローラーのスケーリングは手動で調整する必要があります。\n\nジョブが多すぎて1つのコントローラーに収まらない場合、ジョブを複数のコントローラーに手動で分割する必要があります。CloudBees社は、こうしたボトルネックを軽減するための対策として、CloudBees Jenkins Operations Centerをはじめとする、複数のコントローラーを一元管理するソリューションを提案しています。しかし、各コントローラーは依然として脆弱な単一障害点となり、Kubernetes環境での運用には困難があります。ノードのロールアウトやハードウェアの障害などのアクティビティはダウンタイムを引き起こします。\n\nJenkins自体に内在する技術的な制約に加えて、自社のCIプラットフォームにも、社内プロセスが原因で発生した問題がいくつかありました。たとえば、各リポジトリ内のコードからジョブを生成するためにGroovy Jenkins DSLを使用していたため、各プロジェクトがコピー＆ペーストされた独自のジョブパイプラインを持つことになり、その結果、数百ものバージョンが生成され、メンテナンスや更新が困難になりました。Indeedのエンジニアリング文化は柔軟性を重視し、チームが別々のリポジトリで作業することを許容していますが、その柔軟性により、チームは定期的にメンテナンスを行わなければならず、多大な時間を費やさせる負担要因となっていました。\n\nこうした技術的負債を認識した当社は、「[Golden Pathパターン](https://tag-app-delivery.cncf.io/whitepapers/platforms/)（英語）」に目を向けました。このパターンは、柔軟性を保ちながら、アップデートを簡素化し、プロジェクト間で運用の一貫性を促進するための標準的な手順を提供するものです。\n\nIndeedのCIプラットフォームチームは11人ほどのエンジニアで構成されており、決して規模は大きくないものの、サポートリクエストへの対応、アップグレードやメンテナンスの実施、そしてグローバル企業としての常時サポート体制の確保を通じて、数千人のユーザーサポートにあたっています。\n\n当社のチームは、GitLabインスタンスだけでなく、アーティファクトサーバーや共有ビルドコード、さらに複数のカスタムコンポーネントを含むCIプラットフォーム全体をサポートしているため、業務量は非常に多岐にわたります。そのため、既存のリソースを最大限に活用し、課題に対処する計画が必要でした。\n\n## GitLab CIへの移行\n\n主要なステークホルダーとの慎重な設計レビューを経て、当社は全社的にJenkinsからGitLab CIへ移行することを決定しました。GitLab CIを選んだ主な理由は次のとおりです。\n\n- すでにGitLabをソースコード管理に使用していたため。\n- GitLabは、当社がCIに求める機能をすべて備えた包括的なソリューションであるため。\n- GitLab CIの設計は拡張性に優れ、クラウドにも対応しているため。\n- GitLab CIは、テンプレートを拡張して新たなテンプレートを作成できるという点が、当社の「Golden Path」戦略と合致していたため。\n- GitLabがオープンソースソフトウェアであり、さらにGitLabチームが当社の修正提案に常に協力的であったことから、柔軟性と安心感を得られたため。\n\nGitLab CIプラットフォームの一般提供を正式に発表した時点で、すでに全ビルドの23%がGitLab CI上で行われていました。これは、個々のユーザーの自主的な取り組みや早期導入者のおかげです。\n\nしかし、移行の課題は「ロングテール」にありました。Jenkinsには多くのカスタムビルドが存在するため、自動移行ツールはほとんどのチームに適用できませんでした。新しいシステムの利点の多くは、旧システムを完全に停止（0%）にするまで実現しません。そうして初めてハードウェアを停止し、CloudBeesのライセンス費用を削減できるようになるのです。\n\n## 機能の同等性とゼロからの再出発の利点\n\nIndeedでは多様な技術をサポートしていますが、最も一般的な言語はJava、Python、JavaScriptです。これらの言語は、ライブラリの構築、デプロイ可能なサービス（ウェブサービスやアプリケーションなど）、およびcronジョブ（データレイク内のデータセットを構築するような、定期的に実行されるプロセス）を作成するために使用されます。これらの言語は、Javaライブラリ、Pythonのcronジョブ、JavaScriptのウェブアプリケーションといったプロジェクトタイプのマトリックスを形成しており、Jenkinsではそれぞれに対して事前定義されたスケルトンがありました。そのため、これらすべてのプロジェクトタイプに対応する「Golden Path」テンプレートをGitLab CIでも作成する必要がありました。\n\nほとんどのユーザーは推奨されたパスをそのまま使用できましたが、カスタマイズが必要な場合でも「Golden Path」は有用な出発点になりました。必要な部分だけを調整しながら、将来的には一元管理されたテンプレートが更新されるたびに、その利点を享受することができます。\n\n当社はすぐに、カスタマイズが必要なユーザーでさえ「Golden Path」の採用に前向きであり、少なくとも試用を望んでいることがわかりました。もし以前のカスタマイズが必要であれば、後から追加することができたからです。これは驚くべき結果でした。大幅なカスタマイズに投資してきたチームはそれを手放すことに抵抗があるだろうと思っていましたが、大多数のチームはもはやそれを気にしなくなっていたのです。これにより、多くのプロジェクトを非常に迅速に移行することができました。プロジェクトに「Golden Path」（インクルードを含む6行ほどの小さなファイル）を追加するだけで、あとは各チームがそれを活用して進めることができました。\n\n## インナーソースによる救済\n\nCIプラットフォームチームは、「外部からのコントリビュートを優先する」というポリシーを採用し、社員全体の参加を促進しました。このアプローチは「インナーソース」と呼ばれることもあります。私たちは、外部からのコントリビュート（自分たちのチーム以外からのコントリビュート）を促進するために、テストやドキュメントを作成しました。カスタマイズを望むチームは、そのカスタマイズを、Golden Pathに組み込んで、機能フラグを使用して共有できるようになりました。これにより、カスタマイズを行ったチームは自分たちの作業を他のチームと共有できるようになっただけでなく、そのカスタマイズがCIプラットフォームチームのコードベースの一部になったため、将来的にそのカスタマイズが壊されないことを保証できるようになりました。\n\nこの取り組みには、特定のチームが必要な機能を求めて待機することなく、自分たちでその開発に取り組めるようになったという利点もありました。たとえば、「その機能は数週間後に実装する予定ですが、もし早めに必要であれば、ぜひコントリビュートしてください」と伝えることができます。結果的に、同等性に必要な多くのコア機能がこのようなアプローチで開発され、チームのリソースでは実現できないほど迅速かつ質の高い形で提供されました。このモデルがなければ、移行は成功しなかったでしょう。\n\n## 予定より早く、予算内で達成\n\nチームのCloudBeesライセンスは2024年4月1日に期限切れになりました。これに伴い、完全移行を達成するための挑戦的な目標を設定しました。当時、ビルド全体の80%（全プロジェクトの60%）でCIにJenkinsが使用されていたことを考えると、この目標は特に野心的だったと言えます。つまり、2,000以上の[Jenkinsfiles](https://www.jenkins.io/doc/book/pipeline/jenkinsfile/)を新たに書き直すか、Golden Pathのテンプレートに置き換える必要があったのです。\n\nこの目標を達成するために、チームはドキュメントやサンプルコードを提供し、可能な限り機能を実装したほか、ユーザーが機能を追加できるように支援しました。\n\nまた、定期的なオフィスアワーを設け、誰でも質問をしたり、移行の支援を求めたりできるようにしました。さらに、移行に関連するサポートの質問を、一部を除いて他のどの質問よりも優先しました。CIプラットフォームはGitLab CIのエキスパートとなり、その専門知識をチーム内および組織全体で共有しました。\n\n自動移行はほとんどのプロジェクトでは実現できませんでしたが、カスタマイズがまれな比較的小規模なプロジェクトには有効であることがわかりました。チームはSourcegraphの一括変更キャンペーンを作成し、数百のプロジェクトを移行するためにマージリクエストを送信しました。そして、ユーザーにその承認を促しました。\n\nユーザーからの成功事例を広く共有し、ユーザーがGolden Pathに新しい機能を追加するたびに、「GitLab CIに移行するとこれらの機能が無料で利用できる」と宣伝しました。これらの機能には、ビルトインのセキュリティやコンプライアンススキャン、CIビルドのSlack通知、他の内部システムとのインテグレーションなどがあります。\n\nさらに、積極的な「screamテスト」キャンペーンを実施しました。しばらく実行されていない、または成功していないJenkinsジョブを自動的に無効にし、必要であれば再度有効にできるとユーザーに通知しました。これは、手間をかけずに実際に必要なジョブを特定できる効果的なアプローチでした。前回のCI移行（JenkinsからJenkinsへの移行）以降、一度も実行されていない数千のジョブがあり、これらをほぼすべて安全に無視できることがわかりました。\n\n2024年1月には、例外が明示的に要求されない限り、すべてのJenkinsコントローラーが読み取り専用（ビルド不可）になると発表しました。コントローラーに関する所有情報が大幅に改善され、組織の構造に合致していたため、ジョブよりもコントローラーに焦点を当てることが合理的でした。コントローラーのリストはジョブのリストよりもはるかに管理しやすいものでした。\n\n例外を認めるために、ユーザーにはスプレッドシートでコントローラーを見つけ、その横に連絡先情報を入力してもらうよう依頼しました。これにより、フォローアップできる利害関係者の最新リストを確実に取得できるだけでなく、ユーザーからも絶対に必要なジョブを明確に知らせてもらうことができました。ピーク時には約400ものコントローラーがありましたが、1月には220に減少し、そのうち例外を必要とするのは54のコントローラーだけでした（そのうちいくつかはチームで所有し、テストやカナリアのために使用していました）。\n\n![Indeed - Jenkinsコントローラー（個数）の推移グラフ](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099357/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750099357392.png)\n\n私たちは、約50チームの管理可能なリストをチーム内で分担し、各チームの移行の進捗状況を聞き取りし始めました。1月、2月中に、そして一部のチームは2月28日までに私たちの支援なしで移行を完了させる予定であり、他のチームはその時点までのプロジェクト廃止を計画していることが判明しました。そして、ごく少数のチームが期限内に完了できるか非常に心配していました。\n\n私たちはこの少数のチームと協力し、きめ細やかな個別対応サービスを提供しました。私たちには移行を代行する上での専門知識が不足しているものの、そのチームの特定分野の専門家と協力できることを説明しました。一部のプロジェクトでは、私たちがコードを書き、そのチームがレビューを行い、他のプロジェクトではそのチームがコードを書き、私たちがレビューを行いました。最終的に、すべての努力が実を結び、8か月前に宣言した日に、Jenkinsを無事に廃止することができました。\n\n## 成果：CI効率とユーザー満足度の向上\n\nJenkins CIプラットフォームのピーク時には、1日あたり14,000以上のパイプラインが実行され、数千のプロジェクトをサポートしていました。現在、GitLab CIプラットフォームは、1日あたり40,000以上のパイプラインを処理し、通常は25,000以上のパイプラインが日常的に稼働しています。各パイプラインのジョブごとの増分コストはJenkinsと同程度ですが、コントローラーを実行するためのハードウェアのオーバーヘッドがなくなりました。これらのコントローラーは、単一障害点であり、スケールの制限要因でもあったため、プラットフォームを人工的にセグメント化せざるを得ませんでした。正確な比較は難しいものの、このオーバーヘッドがなくなったことで、CIハードウェアコストは10～20%削減できたと考えています。さらに、GitLab CIはクラウド上で自動的にスケールし、複数の可用性ゾーンで動作する耐障害性を備えているほか、テンプレート言語には優れた公開ドキュメントがあるため、サポートの負担も軽減されています。\n\n特筆すべきもうひとつの利点としては、現在、Golden Pathの採用率が70%を超えていることです。これにより、私たちが改善策をロールアウトすれば、Indeedの5,000以上のプロジェクトは、特別な操作をせずにすぐにそのメリットを享受できるようになることがわかりました。この結果、一部のジョブをよりコスト効率の高いARM64インスタンスに移行したり、ユーザーのビルドイメージをより簡単に更新したりできるようになりました。また、他のコスト削減の機会をより適切に管理することも可能になりました。最も重要なことは、ユーザーが新しいプラットフォームに満足していることです。\n\n__著者について__：\n*Carl Myers氏はカリフォルニア州サクラメント在住で、Indeed社のCIプラットフォームチームのマネージャーを務めています。Carl氏は、約20年にわたるキャリアを通じて、大小さまざまな企業で、エンジニアのニーズを満たし、その能力を引き出すための社内ツールやデベロッパー向けプラットフォームの構築に尽力してきました。*\n\n**謝辞**：\n*この移行プロジェクトは、Tron Nedelea氏、Eddie Huang氏、Vivek Nynaru氏、Carlos Gonzalez氏、Lane Van Elderen氏、そしてCIプラットフォームチームの他のメンバーの尽力なしには実現できませんでした。チームはまた、プロジェクト全体を通じて、合意やリソースの確保、そして社内全体の調整に尽力していただいたDeepak Bitragunta氏とIrina Tyree氏のリーダーシップに、特に感謝しております。最後に、コード、フィードバック、バグレポートに貢献し、プロジェクトの移行を支援してくださったIndeed社の皆様に感謝申し上げます。*\n\n**この記事は、Indeedエンジニアリングブログに掲載された[「How Indeed Replaced Its CI Platform with GitLab CI」](https://engineering.indeedblog.com/blog/2024/08/indeed-gitlab-ci-migration/)の編集版です。**",[776,9,777,679],"2025-01-10",{"slug":1084,"featured":91,"template":685},"how-indeed-transformed-its-ci-platform-with-gitlab","content:ja-jp:blog:how-indeed-transformed-its-ci-platform-with-gitlab.yml","How Indeed Transformed Its Ci Platform With Gitlab","ja-jp/blog/how-indeed-transformed-its-ci-platform-with-gitlab.yml","ja-jp/blog/how-indeed-transformed-its-ci-platform-with-gitlab",{"_path":1090,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1091,"content":1097,"config":1105,"_id":1107,"_type":14,"title":1108,"_source":16,"_file":1109,"_stem":1110,"_extension":19},"/ja-jp/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery",{"title":1092,"description":1093,"ogTitle":1092,"ogDescription":1093,"noIndex":6,"ogImage":1094,"ogUrl":1095,"ogSiteName":669,"ogType":670,"canonicalUrls":1095,"schema":1096},"継続的デリバリーにおける信頼できる情報源としてOCIイメージを活用する方法","GitOpsワークフローの一環としてOpen Container Initiative（OCI）イメージを活用する利点、およびKubernetesへのデプロイを簡素化するためにGitLabが提供する多くの機能について詳しくご紹介します。","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","https://about.gitlab.com/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"継続的デリバリーにおける信頼できる情報源としてOCIイメージを活用する方法\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Daniel Helfand\"}],\n        \"datePublished\": \"2025-02-19\",\n      }",{"title":1092,"description":1093,"authors":1098,"heroImage":1094,"date":1100,"body":1101,"category":1040,"tags":1102},[1099],"Daniel Helfand","2025-02-19","gitリポジトリをデプロイメントアーティファクトとして使用しない場合でも、それを[GitOps](https://about.gitlab.com/ja-jp/topics/gitops/)と呼ぶのは適切なのでしょうか？gitは依然としてGitOpsワークフローの中心的な要素ですが、近年では、インフラ定義をOpen\nContainer\nInitiative（OCI）アーティファクトとしてコンテナレジストリに保存し、それをGitOpsデプロイのソース（情報源）とする手法が広まりつつあります。この記事では、この傾向の背後にある考え方、およびGitLabの機能がどのようにGitOpsワークフローの進化を支えているのかについて詳しくご説明します。\n\n\n## GitOpsとは？\n\n\n[OpenGitOps](https://opengitops.dev/)プロジェクトでは、GitOpsの実践に関する以下の[4つの原則](https://opengitops.dev/#principles)を定義しています。\n\n-\n[GitOpsで管理されるシステム](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#software-system)は、[望ましい状態が宣言的に表現](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#declarative-description)されていること。\n\n- 望ましい状態は、不変性とバージョン管理が保証される形で保存され、完全なバージョン履歴が保持されていること。\n\n- ソフトウェアエージェントは、望ましい状態の宣言をソースから自動的にプルすること。\n\n-\nソフトウェアエージェントは、実際のシステム状態を[継続的](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#continuous)に監視し、[望ましい状態の適用を試みる](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#continuous)こと。\n\n\nGitOpsの一例として、マイクロサービスのKubernetesマニフェストをGitLabプロジェクトに保存することが挙げられます。これらのKubernetesリソースは、マイクロサービスがデプロイされたKubernetesクラスター上で実行されている[コントローラー](https://kubernetes.io/docs/concepts/architecture/controller/)によって継続的に調整されます。これにより、エンジニアは通常のコード作業と同じワークフローを使用してインフラを管理できます。たとえば、マージリクエストを作成し、変更を加えてレビューしたり、変更にバージョン管理を適用することができます。GitOpsは、[構成ドリフトを防ぐ](https://about.gitlab.com/topics/gitops/#cicd)といった運用上の利点もあり、エンジニアが特定の展開結果に至った変更を監査するのにも役立ちます。\n\n\n## GitOpsワークフローにおけるgitの利点と制限\n\n\ngitはGitOpsワークフローにおいて不可欠な要素ではありますが、もともとgitリポジトリはGitOpsコントローラによってデプロイされることを前提に設計されたものではありません。gitによってエンジニア同士が連携しながらインフラに変更を加えたり、その後変更を監査したりすることはできます。しかし、コントローラーが正常にデプロイを実行するために、gitリポジトリ全体をダウンロードする必要はありません。GitOpsコントローラーが必要とするのは、特定の環境のインフラ定義だけです。\n\n\nさらに、デプロイプロセスにおいて重要なのは、デプロイの変更が信頼できるソースから行われたものであることを確認するために、[デプロイに署名して検証](https://docs.sigstore.dev/about/overview/#why-cryptographic-signing)することです。Gitのコミットは、GitOpsコントローラーによって署名・検証することが可能ですが、コミットはデプロイに関連しない他の詳細（ドキュメントの変更、他の環境の更新、Gitリポジトリの再構成など）を含むこともあります。また、1回のデプロイが複数のコミットにまたがる場合があるため、デプロイ全体が十分に反映しきれないこともあります。これもまた、このgit機能が設計されていないケースのように感じます。\n\n\nGitOpsワークフローにおけるgitのもう一つの課題は、想定以上に自動化が進んでしまう可能性があることです。監視しているブランチに変更をマージすると、すぐにデプロイされてしまいます。これは、gitの外側にプロセスを制御する仕組みがないためです。たとえば、金曜日の午後遅くにデプロイが行われないようにするにはどうすればよいでしょうか？あるいは、デプロイ担当のチームが特定のGitLabプロジェクトで変更をマージする権限を持っていない場合、どう対処すればよいのでしょうか？OCIイメージを使用することで、プロセスにパイプラインが追加され、[承認やデプロイの停止](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)といったデリバリー制御の機能を活用できるようになります。\n\n\n## OCIイメージ\n\n\n[Open Container\nInitiative](https://opencontainers.org/)は、コンテナ形式に関する標準を定義するために貢献してきました。多くのエンジニアは、Dockerfileを使用してコンテナイメージを作成することに慣れていますが、Kubernetesマニフェストをコンテナレジストリに保存することにはあまり馴染みがないかもしれません。[GitLabのコンテナレジストリ](https://docs.gitlab.com/ee/user/packages/container_registry/)はOCI準拠であるため、特定の環境向けのKubernetesマニフェストをコンテナレジストリにプッシュすることができます。これにより、[Flux\nCD](https://about.gitlab.com/blog/why-did-we-choose-to-integrate-fluxcd-with-gitlab/)のようなGitOpsコントローラーは、gitリポジトリ全体をクローンすることなく、このOCIアーティファクトに保存されたマニフェストを利用してデプロイを実行できます。\n\n\nGitOpsワークフローでは、gitリポジトリにマイクロサービスがデプロイされるすべての環境のインフラ定義が含まれていることがよくあります。特定の環境向けのKubernetesマニフェストをパッケージ化することで、Flux\nCDはデプロイに必要な最小限のファイルだけをダウンロードして、特定の環境へのデプロイを実行できます。\n\n\n### OCIアーティファクトのセキュリティ上の利点\n\n\n前述のとおり、環境にデプロイされるアーティファクトに署名し、検証することで、ソフトウェアプロジェクトのセキュリティが一層強化されます。Kubernetesマニフェストがコンテナレジストリにプッシュされた後、[Sigstore\nCosign](https://docs.sigstore.dev/quickstart/quickstart-cosign/)のようなツールを使用してOCIイメージに秘密鍵で署名できます。この秘密鍵は、GitLabプロジェクト内の[CI/CD変数](https://docs.gitlab.com/ee/ci/variables/)として安全に保存できます。その後、Flux\nCDはKubernetesクラスターに保存された公開鍵を使用して、デプロイが信頼できるソースから来ていることを確認できます。\n\n\n## GitLabを使ってOCIイメージをプッシュして署名する方法\n\n\nGitLabは、OCIイメージのパッケージ化、署名、デプロイのプロセスを簡素化する多くの機能を提供しています。GitOpsワークフローにおけるGitLabプロジェクト構成の一般的な方法は、各マイクロサービスのコード用に個別のGitLabプロジェクトを用意し、すべてのマイクロサービスに共通する単一のインフラリポジトリを持つというものです。アプリケーションが`n`個のマイクロサービスで構成されている場合、アプリケーションには`n\n+ 1`個のGitLabプロジェクトが必要になります。\n\n\nコードプロジェクトで作成されるアーティファクトは、通常、アプリケーションをパッケージ化するために使用されるコンテナイメージです。インフラプロジェクトまたはデリバリープロジェクトには、各マイクロサービスをスケールさせ、トラフィックを提供するために必要なリソースを定義したKubernetesマニフェストが含まれます。このプロジェクトで作成されるアーティファクトは通常、アプリケーションと他のマニフェストをKubernetesにデプロイするために使用されるOCIイメージです。\n\n\nこの構成では、環境の分離はKubernetesマニフェストを別々のフォルダに定義することで行われます。これらのフォルダは、アプリケーションをホストする環境（開発、ステージング、本番など）を表します。コードプロジェクトに変更が加えられ、新しいコンテナイメージがプッシュされた場合、その変更をGitLabのFlux\nCDとのインテグレーションを使ってデプロイするために必要なのは、環境フォルダ内のマニフェストを編集して新しいイメージ参照を追加し、マージリクエストを作成することだけです。マージリクエストのレビュー、承認、マージが実行されると、デリバリープロジェクトのCI/CDジョブが新しいOCIイメージをプッシュし、Flux\nCDがそれを受け取って新しい環境にデプロイします。\n\n\n![OCIイメージ -\nフローチャート](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097611/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097611046.png)\n\n\nOCIイメージへの署名は、CosignをプロジェクトのCI/CDジョブに組み込むだけで簡単に行えます。以下のコマンドをローカルで実行することで、Cosignを使って新しい公開鍵と秘密鍵を生成できます。その際は、[glab\nCLI](https://gitlab.com/gitlab-org/cli/#installation)を使ってGitLabインスタンスにログインし、Cosignコマンド内の[`PROJECT_ID`]を[デリバリープロジェクトのID](https://docs.gitlab.com/ee/user/project/working_with_projects.html#access-a-project-by-using-the-project-id)に置き換えてください。\n\n\n```\n\nglab auth login\n\ncosign generate-key-pair gitlab://[PROJECT_ID]\n\n```\n\n\ncosignコマンドが正常に実行されると、`COSIGN_PUBLIC_KEY`と`COSIGN_PRIVATE_KEY`という名前で、プロジェクトのCI/CD変数セクションにCosignキーが追加されていることが確認できます。\n\n\n### CI/CDジョブの例\n\n\nOCIイメージをプッシュするためのGitLab CI/CDジョブは、以下のような形になります。\n\n\n```yaml\n\nfrontend-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\n\n[GitLab\nCI/CDカタログ](https://about.gitlab.com/blog/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/)には、GitLabが管理する[CI/CDコンポーネント（OCIアーティファクトおよびFlux\nCD向け）](https://gitlab.com/explore/catalog/components/fluxcd)が用意されています。このコンポーネントにより、開発チームはKubernetesマニフェストをOCIイメージとしてGitLabのコンテナレジストリや外部コンテナレジストリにプッシュし、Cosignを使用してOCIイメージに署名を行い、Flux\nCDを通じて新しくプッシュされたイメージをすぐに環境に同期することができます。 \n\n\n上記の例では、Flux CD\n`component`がGitLabプロジェクトの`.gitlab-ci.yml`ファイル内に含まれています。コンポーネントの入力パラメータを使って、ユーザーはイメージのプッシュ先レジストリ（すなわち`registry_image_url`と`image\ntag`）、プッシュ対象となるKubernetesマニフェストのファイルパス（すなわち`manifest_path`）、イメージの署名に使用するCosignの秘密鍵（すなわち`signing_private_key`）、そして環境への更新同期に必要なKubernetes名前空間とFlux\nCDの\n[OCIRepository](https://fluxcd.io/flux/components/source/ocirepositories/)名（すなわち`flux_oci_namespace_name`と`flux_oci_repo_name`）を定義できます。\n\n\n`kubernetes_agent_reference`を使用することで、各GitLabプロジェクトに`kubeconfig`\nCI/CD変数を個別に保存することなく、GitLab\nCI/CDジョブがKubernetesクラスターへアクセスするために必要な`kubeconfig`の権限を継承できるようになります。[Kubernetes向けGitLabエージェント](https://docs.gitlab.com/ee/user/clusters/agent/)をセットアップすることで、同じ[GitLabグループ](https://docs.gitlab.com/ee/user/group/)内のすべてのプロジェクトのCI/CDジョブに、Kubernetesクラスターへのデプロイ権限を継承させるように設定できます。\n\n\nKubernetesエージェントのコンテキストは、通常、GitLabグループ内でKubernetes向けGitLabエージェントを設定している場所で構成されます。この設定は、通常、Flux\nCDを管理しているプロジェクトで行うことが推奨されています。CI/CDアクセス向けのエージェント設定について詳しくは、[CI/CDワークフローのドキュメント](https://docs.gitlab.com/ee/user/clusters/agent/ci_cd_workflow.html)をご覧ください。\n\n\n`$COSIGN_PRIVATE_KEY`、`$FLUX_OCI_REPO_NAME`、`$FRONTEND_DEV_NAMESPACE`といった変数は、機密性の高い情報をCI/CDログ上でマスキングしつつ、簡単にアクセスできるようにするためにCI/CD変数として保存されています。`$CI_REGISTRY_IMAGE`は、GitLabジョブでデフォルトで利用可能な変数で、対象のGitLabプロジェクトのコンテナレジストリを示します。\n\n\n### OCIイメージのデプロイ\n\n\n[Flux\nCDをGitLabプロジェクトと組み合わせて使用する](https://docs.gitlab.com/ee/user/clusters/agent/gitops/flux_tutorial.html)ことで、マイクロサービスの各環境へのデプロイと署名の検証を自動化できます。Flux\nCDをGitLabプロジェクトと連携するように設定したら、プッシュしたOCIイメージを同期するために、以下のKubernetesカスタムリソース定義\n[CRD](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)をプロジェクトに追加できます。\n\n\n```yaml\n\napiVersion: v1\n\nkind: Namespace\n\nmetadata:\n  name: frontend-dev\n  labels:\n    name: frontend-dev\n---\n\napiVersion: bitnami.com/v1alpha1\n\nkind: SealedSecret\n\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---\n\napiVersion: source.toolkit.fluxcd.io/v1beta2\n\nkind: OCIRepository\n\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---\n\napiVersion: kustomize.toolkit.fluxcd.io/v1\n\nkind: Kustomization\n\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 \n[`Kustomization`](https://fluxcd.io/flux/components/kustomize/kustomizations/)リソースを使用することで、Kubernetesマニフェストをさらにカスタマイズできるほか、リソースをデプロイする対象のネームスペースも指定することができます。Flux\nCDの`OCIRepository`リソースでは、定期的に同期する対象となるOCIイメージのリポジトリ参照およびタグを指定できます。また、`verify.provider`と`verify.secretRef`というプロパティがあることに気づくでしょう。これらのフィールドを使うことで、クラスターにデプロイされるOCIイメージが、先ほどのCI/CDジョブで使用されたCosignの秘密鍵によって署名されたものであることを検証できます。\n\n\n公開鍵は、`OCIRepository`リソースと同じネームスペース内に格納する必要がある、[Kubernetesシークレット](https://kubernetes.io/docs/concepts/configuration/secret/)に保存しなければなりません。このシークレットをFlux\nCDによって管理し、平文で保存しないようにするには、値を暗号化してクラスター側のコントローラーで復号させるために、[SealedSecrets](https://fluxcd.io/flux/guides/sealed-secrets/)の使用を検討しましょう。\n\n\nSealedSecretsを使わないより簡単な方法としては、[`kubectl\nCLI`](https://kubernetes.io/docs/reference/kubectl/)を使用して[GitLab\nCI/CDジョブでシークレットをデプロイする](https://docs.gitlab.com/ee/user/clusters/agent/getting_started_deployments.html)方法があります。SealedSecretを使用しない方法では、上記で使用していたSealedSecretを削除し、新しいOCIイメージをプッシュするジョブを実行する前に、公開鍵のシークレットをデプロイするジョブを実行するだけです。これにより、シークレットがGitLab上で安全に管理され、クラスター内でOCIRepositoryから正常にアクセスできるようになります。このアプローチは比較的シンプルですが、本番環境でのシークレット管理には適していないことにご留意ください。 \n\n\n## OCI、GitLab、およびGitOpsの利点\n\n\nOCIアーティファクトを活用することで、GitOpsチームはセキュリティ面での利点を得ながら、デプロイを最小限に抑えることができます。ユーザーは、インフラの信頼できる情報源としてgitを活用できる点や、プロジェクトでのコラボレーションが可能になる点など、gitがもたらすあらゆる利点を引き続き享受できます。OCIイメージは、GitOpsにおけるデプロイの側面を強化する新たなパッケージ化手法を提供します。\n\n\nGitLab\nは、GitOpsワークフローをよりシンプルにするための利用体験を提供できるよう、ユーザーやクラウドネイティブコミュニティから継続的に学び続けています。このブログでご紹介した機能をお使いになるには、[GitLab\nUltimateの無料トライアル](https://about.gitlab.com/free-trial/)にお申込みください。これらのツールに関する皆さまのご利用体験についても、ぜひお聞かせください。フィードバックは[コミュニティフォーラム](https://forum.gitlab.com/t/oci-images-as-source-of-truth-for-gitops-with-gitlab/120965)にて受け付けています。\n",[9,1042,1103,531,1104,680],"kubernetes","git",{"slug":1106,"featured":6,"template":685},"how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery","content:ja-jp:blog:how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery.yml","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.yml","ja-jp/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery",{"_path":1112,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1113,"content":1119,"config":1126,"_id":1128,"_type":14,"title":1129,"_source":16,"_file":1130,"_stem":1131,"_extension":19},"/ja-jp/blog/integrating-azure-devops-scm-and-gitlab",{"title":1114,"description":1115,"ogTitle":1114,"ogDescription":1115,"noIndex":6,"ogImage":1116,"ogUrl":1117,"ogSiteName":669,"ogType":670,"canonicalUrls":1117,"schema":1118},"Azure DevOpsリポジトリをGitLabと統合する方法","Azure DevOpsリポジトリのGitLabとの統合は簡単。やり方を学んで、Azure DevOpsからGitLab CI/CDへの移行をスムーズに行いましょう。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664363/Blog/Hero%20Images/aleksey-kuprikov.jpg","https://about.gitlab.com/blog/integrating-azure-devops-scm-and-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Azure DevOpsリポジトリをGitLabと統合する方法\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2020-07-09\",\n      }",{"title":1114,"description":1115,"authors":1120,"heroImage":1116,"date":1122,"body":1123,"category":703,"tags":1124,"updatedDate":1125},[1121],"Itzik Gan Baruch","2020-07-09","## 目次\n\n1. Azure DevOpsはGitLabに統合できるのか \n\n2. GitLabとAzure DevOpsの違い\n\n3. GitLabからAzureへの接続方法\n\n4. 推奨される開発フロー\n\n5. デプロイのワークフローのデモ動画\n\n6. 試みる価値のあるソリューション\n\n7. まとめ\n\n\nAzure\nDevOpsリポジトリ内にコードを置いたままで、GitLabのパイプラインでCI/CDを実行する方法をご説明します。リンクは特に断りのない限り、英語版ページへのリンクとなります。ご留意ください。\n\n\n最近、Azure DevOps/VSTS（Visual Studio Team\nServices）のソースコード管理（SCM）とGitLabを統合することは可能でしょうかと質問を受けることが続きました。こういった質問をしてきた方は、GitLabのような最新の[CI/CD\nソリューション](https://about.gitlab.com/topics/ci-cd/)を検討しているものの、段階移行で一時的に新旧のシステムが共存する間は、コードをAzure\nDevOps/VSTS内で管理する必要があるようです。\n\n\n## Azure DevOpsはGitLabに統合できるのか\n\n\nはい、Azure DevOpsはGitLabに統合できます。\n\n\nGitLabではGitLab CI/CDをGitLabの組み込みSCMと併せて使用することを推奨していますが、Azure\nDevOpsのソースコード管理とGitLabとを統合すると、コードをAzure\n[DevOps](https://about.gitlab.com/ja-jp/topics/devops/)リポジトリに残したままGitLab\nCI/CDも導入できるため、Azure\nDevOpsから徐々にGitLabに移行することが可能です。GitLabのセルフマネージドバージョンと、SaaSバージョンのどちらでも統合が可能です。しかし、統合可能なのは、Azure\nDevOps/VSTSの Gitバージョン管理のみです。TFVC（Team Foundation Version\nControl）はサポートされていませんのでご注意ください。\n\n\n### Azure DevOpsとの統合を可能にするGitLabの2つの機能\n\n\n[外部リポジトリ用GitLab\nCI/CD](https://docs.gitlab.com/ee/ci/ci_cd_for_external_repos/) ― GitLab\nCI/CDは外部リポジトリ（GitHub, Bitbucket Cloud など）のGitサーバーで利用できます。\n\n\n[リモートリポジトリのミラーリング](https://docs.gitlab.com/ee/user/project/repository/mirror/)\n―\nリポジトリは外部ソースとの間でミラーリングできます。どのリポジトリをソースとして使用するかも選択できます。ミラーリングを行なうと、ブランチ、タグ、コミットなどが自動的に同期されます。\n\n\n#### DevOps におけるリポジトリとは？\n\n\nGitLabやAzureのようなツールにおけるコードリポジトリは、あらゆるソースコードを格納するために存在します。こういったリポジトリはDevOpsの「リポ」と呼ばれたり、「ソースリポジトリ」と呼ばれたりします。名前がどうであれ、デベロッパーが高いコード品質を目指して作業するための場所をコードリポジトリが提供することに変わりありません。GitLabは、バージョン管理によるソースコード管理に[Gitベースのリポジトリ（日本語版）](https://about.gitlab.com/ja-jp/solutions/source-code-management/)を使用します。Gitベースのリポジトリを使用したバージョン管理により、GitLabユーザーがコードレビューを行い、開発面での問題を簡単に解決することができるのです。\n\n\n## GitLabとAzure DevOpsの違い\n\n\nAzure\nDevOpsには、開発ライフサイクルを管理するための幅広いサービスがあります。主要機能には、アジャイルプランニングボード、ソースコード管理用のプライベートGitリポ、そしてAzureパイプラインなどがあります。\n\nDevSecOpsライフサイクル全体に対応した単一プラットフォームとして提供されるGitLabには以下が含まれます。\n\n- プランニングとコラボレーション\n\n- ソースコード管理\n\n- コードレビュー\n\n- CI/CDパイプライン\n\n- 継続的なセキュリティスキャンと監視\n\n- 高度なデプロイ\n\n- 脆弱性の管理\n\n\u003Cbr>\n\n\u003Cbr>\n\nGitLabは、セキュリティとコンプライアンスを強化しながら、DevSecOpsのライフサイクル全体の管理をサポートしてソフトウェアを迅速かつ効率的に提供します。\n\n\n## GitLabからAzureへの接続方法\n\n\nソースコード管理をAzureからGitLabへ完全に移行するには時間がかかる場合があります。ここでは、スムーズな移行のために、GitLabからAzure統合に接続する手順を説明します。\n\n\n1. 「New Project（新規プロジェクト）」ボタンをクリックして、GitLab内に新規プロジェクトを作成します。\n![新規プロジェクトの作成](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado1.png){:\n.large.center}\n\n\n2. 「CI/CD for external repo（外部リポジトリ用 CI/CD）」タブを選択し、Repo by\nURL（リポジトリのURL）をクリックします。  ![外部リポジトリ用\nCI/CD](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado2.png){:\n.large.center}\n\n\n3. Azure DevOps 内でリポジトリを開き、「Clone（クローン）」をクリックします。\n  ![クローンURLを入手する](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado3.png){: .large.center}\n\n4. URLをコピーします。お使いのリポジトリがプライベートだった場合、Gitの認証情報を生成する必要があります。「Generate Git\nCredentials（Git認証情報を生成）」をクリックし、ユーザー名とパスワードをコピーしてください。\n![認証情報](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado4.png){:\n.large.center}\n\n\n5. 「Git repository URL（Gitリポジトリの URL）下の欄にURLを貼り付けます。\n\nプロジェクト名を付けます。\n\n可視性の表示レベルを設定します。\n\n「プロジェクトを作成」をクリックします。\n\nAzure DevOpsリポジトリがプライベートだった場合には、ユーザー名とパスワードを追加します。\n\n\n__注__:リポジトリは、http://、https:// または git:// でアクセスできなければなりません。http:// または\nhttps:// プロトコルを使用する場合は、リポジトリへの正確なURLを指定してください。HTTPリダイレクトは実行されません。\n\n  ![プロジェクトフォームの作成\"](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado5.png){: .large.center}\n\n6. プロジェクトはGitLabと正常にミラーリングされました。これで、ブランチ、タグ、コミットがGitLabと自動的に同期されるようになります。\n\n\n7. CI/CDパイプラインを構成するオプションは2つあります。\n  ![Auto DevOps 設定](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado6.png){: .shadow.large.center}\n\nAuto DevOpsを使わずにパイプライン構成をご自分で定義したい場合には、お使いのリポジトリのルートディレクトリに\n[.gitlab-ci.yml](https://docs.gitlab.com/ee/ci/yaml/)\nファイルを追加してください。このyamlコードには、[CI/CD定義](https://about.gitlab.com/blog/guide-to-ci-cd-pipelines/)\nを必ずインクルードしてください。\n\n\nこのファイルがルートディレクトリにインクルードされると、CI/CDパイプラインが各コミットごとにトリガーされます。.gitlab-ci.yml\nに不慣れな場合には、.gitlab-ci.yml\nという名前でファイルを作成し、以下のコードを貼り付けてください。このコードにはビルドステージとテストステージがあり、それぞれに、単一のジョブが含まれます。このジョブは各ステージでコンソールにテキストを表示します。\n\n\n後でそれぞれのジョブにスクリプトを追加できます。また、ジョブやステージの追加も可能です。より複雑なパイプラインを作成するときは、ゼロから着手するのではなく、[GitLabに付属の](https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates)[パイプラインテンプレートを使用する](https://docs.gitlab.com/ee/ci/yaml/#includetemplate)とよいでしょう。\n\n\n```\n\nstages:\n  - build\n  - test \n\nbuild:\n  stage: build\n  script:\n    - echo \"Build job\"\n\ntest:\n  stage: test\n  script:\n    - echo \"Test job\"\n```\n\n\n以上です。これで準備は済みました。\n\n\n## 推奨される開発フロー \n\n\n![開発フローの図](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado_7_2.png){:\n.shadow.large.center}\n\n\n1. コード（デベロッパーが選択したIDE）\u003Cbr>\n\nデベロッパーはお気に入りのIDEを使用してコードを開発し、リポジトリをワークステーションに複製し、ブランチを作成します。\n  ![Visual Studioのコード](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado8.png){: .shadow.large.center}\n\u003Cbr>\n\n\n2. コミット（GIT）\u003Cbr>\n\nフィーチャーの開発またはバグ修正が完了したあと、デベロッパーはワークをAzureリポジトリサーバーにプッシュします。  ![Azure\nDevOpsリポ](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado9.png){:\n.shadow.large.center}\n\n\u003Cbr>\n\n3. ビルド（GitLab）\u003Cbr>\n\nコミット履歴つきのブランチがGitLabにミラーリングされます。CI/CDパイプラインがトリガーされ、このパイプラインにより、コードがビルドされます。 \n![GitLabパイプライングラフ](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado10.png){:\n.shadow.large.center}\n\n    アーティファクトが作成され、ダウンロードできるようになります。\n  ![アーティファクト](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado11.png){: .shadow.large.center}\n\n    「Auto DevOps」が有効化されていれば、コンテナイメージが作成され、ビルトインのコンテナレジストリにプッシュされます。 \n![GitLabコンテナレジストリ](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado12.png){:\n.shadow.large.center}\n\n    プロジェクト内でパッケージレジストリが有効化されている場合には、パッケージが指定されたパッケージマネージャに公開されます。 \n![GitLabパッケージレジストリ](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado13.png){:\n.shadow.large.center}\n\n\u003Cbr>\n\n4. テスト (GitLab)\u003Cbr>\n\nCI パイプラインの一環として、セキュリティスキャン、ライセンススキャン、その他のテストが実行されます。 ![GitLab\nスキャン](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado14.png){:\n.shadow.large.center}\n\n\u003Cbr>\n\n5. レビューとプルリクエスト (GitLabおよびAzure DevOpsリポジトリ)\u003Cbr>\n\nGitLabでパイプラインの結果をレビューし、エラーなくパイプラインがパスした場合、かつ、新しい変更により新たな脆弱性が生じていなければ、Azure\nDevOpsでプルリクエストを作成します。コードレビューが始まったら、デベロッパーはメインにマージする前に、新しい変更を加える必要がある場合があります。各コミットは、\nGitLab内でCI/CDパイプラインをトリガーします。 ![Azure\nDevOpsプルリクエスト](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado15.png){:\n.shadow.large.center}\n\n\u003Cbr>\n\n6. マージ（Azure DevOpsリポジトリとGitLab）\u003Cbr>\n\nAzure DevOpsのプルリクエストが承認され、ブランチがAzure DevOpsリポジトリのメインブランチにマージされます。\n\n\nパイプラインの構成により異なりますが、メインブランチへのこのマージは\nGitLab内のCI/CDパイプラインをトリガーし、マージ結果が検証され、新しいパッケージとコンテナイメージがビルドされ、その後それらがデプロイされます。 \n![GitLab\nCI/CDパイプラインのグラフ](https://about.gitlab.com/images/blogimages/ado_and_gitlab/ado16.png){:\n.shadow.large.center}\n\n\u003Cbr>\n\n## デプロイのワークフローのデモ動画\n\n\n\u003Ciframe width=\"560\" height=\"315\"\nsrc=\"https://www.youtube.com/embed/HfpP2pEmkoM\" frameborder=\"0\"\nallow=\"accelerometer; autoplay; encrypted-media; gyroscope;\npicture-in-picture\" allowfullscreen>\u003C/iframe>\n\n\n## 試みる価値のあるソリューション\n\n\nGitLabは、トップクラスのソースコード管理（SCM）とCI/CDソリューションを単一のアプリケーションで提供し、多くの\n[GitLab顧客](https://about.gitlab.com/customers/)がこのパワフルな組み合わせを利用しています。しかし、チームがすぐにリポジトリをGitLab\nSCMに移行できないという制約があるケースがあることも理解しています。そのような場合のために、一時的に外部リポジトリ用GitLab\nCI/CDを提供しています。\n\n\n## まとめ\n\n\nソースコード管理（SCM）とGitLabのCI/CDソリューションは、簡単に統合ができます。「Azure\nDevOpsリポジトリをGitLabのCI/CDに統合することも**簡単にできる**ということを納得していただけたでしょうか。GitLabのCI/CDについてもっと詳しくお知りになりたい場合には、[こちらの記事（日本語版）](https://about.gitlab.com/ja-jp/solutions/continuous-integration/)をご覧ください。\n\n\n### GitLab CI/CDについてさらに詳しく\n\n\n[フォレスターのレポート:主要なCI/CDツールの比較（英語版）](https://about.gitlab.com/analysts/forrester-cloudci19/)\n\n\n[AWS Fargateを使用したGitLab\nCIのオートスケール（英語版）](/blog/introducing-autoscaling-gitlab-runners-on-aws-fargate/)\n\n\n[お客様事例:ゴールドマン・サックスはビルド頻度を2週間に1回から1日に1000回以上へ改善（日本語版）](https://about.gitlab.com/ja-jp/customers/goldman-sachs/)\n\n\n\u003Cbr>\n\n\u003Cbr>\n\n\u003Cbr>\n\n\nカバーイメージ出典：[Aleksey Kuprikov](https://unsplash.com/@alekskuprfilmz) on\n[Unsplash](https://unsplash.com/)\n\n{: .note}\n\n\n\u003Cbr>\n\n\u003Cbr>\n\n\n*監修：ソリス ジェレズ / Jerez Solis [@jerezs](https://gitlab.com/jerezs)\u003Cbr>\n\n（GitLab合同会社 ソリューションアーキテクト本部 ソリューションアーキテクト）*\n",[9,682,680],"2025-02-26",{"slug":1127,"featured":6,"template":685},"integrating-azure-devops-scm-and-gitlab","content:ja-jp:blog:integrating-azure-devops-scm-and-gitlab.yml","Integrating Azure Devops Scm And Gitlab","ja-jp/blog/integrating-azure-devops-scm-and-gitlab.yml","ja-jp/blog/integrating-azure-devops-scm-and-gitlab",{"_path":1133,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1134,"content":1140,"config":1148,"_id":1150,"_type":14,"title":1151,"_source":16,"_file":1152,"_stem":1153,"_extension":19},"/ja-jp/blog/jenkins-to-gitlab-migration-made-easy",{"title":1135,"description":1136,"ogTitle":1135,"ogDescription":1136,"noIndex":6,"ogImage":1137,"ogUrl":1138,"ogSiteName":669,"ogType":670,"canonicalUrls":1138,"schema":1139},"JenkinsからGitLabへのスムーズな移行","JenkinsからGitLabへ移行するメリットと簡単に行える移行手順を分かりやすく解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663019/Blog/Hero%20Images/AdobeStock_519147119.jpg","https://about.gitlab.com/blog/jenkins-to-gitlab-migration-made-easy","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"JenkinsからGitLabへのスムーズな移行\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fernando Diaz\"}],\n        \"datePublished\": \"2024-02-01\",\n      }",{"title":1135,"description":1136,"authors":1141,"heroImage":1137,"date":1143,"body":1144,"category":1145,"tags":1146,"updatedDate":1147},[1142],"Fernando Diaz","2024-02-01","GitLabは、最も包括的なAI搭載のDevSecOpsプラットフォームです。GitLabには、ソフトウェアの計画、開発、セキュリティ確保、迅速なリリースに必要な機能がすべて揃っています。\n\n\nプラットフォームを活用することで、さまざまなツールの統合（DIY\nDevOps）に苦労することなく、ソフトウェア開発ライフサイクル（SDLC）を実現できます。一方、Jenkinsはプラットフォームではないため、SDLCを実現させるには他のツールと組み合わせる必要があります。このようなDIY\nDevOpsのアプローチではツールチェーンの複雑さが増し、以下のようなデメリットが生じます。\n\n\n- ツールの統合やオーケストレーションに特別なサポートが必要\n\n- 個々のツールの保守、アップグレード、セキュリティ対策の負担が大きい\n\n- 組織における変革の進捗を正確に把握しづらい\n\n- デベロッパーエクスペリエンスが悪化する\n\n- 管理コスト、時間、予算がかかる\n\n- 生産性が低下する\n\n- 頭の切り替えが必要となり、コラボレーションの効率が下がる\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752175993/Blog/ikr97sr9jclddeqdg7ew.png\" alt=\"Import project selection\">\n   \u003Cfigcaption>DIY DevOpsとDevSecOpsプラットフォームの比較\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\nこうした理由から、Jenkinsを使用する多くのチームがDevSecOpsプラットフォームへの移行を検討しています。より強力で、信頼性と安全性の高いソリューションを求めているなら、GitLabが最適です。GitLabは無料で使い始められ、組織のニーズに応じたさまざまなサブスクリプションプランが用意されています。GitLab\nのプランや機能の詳細については、[価格ページ](https://about.gitlab.com/ja-jp/pricing/)をご覧ください。\n\n\nこのブログ記事では、以下について学べます。\n\n- 移行計画の立て方\n\n- 他のソースコード管理（SCM）ツールからGitLabへリポジトリを移行する方法\n\n- JenkinsからGitLabへCI/CDパイプラインを移行する方法\n\n- 移行に関するその他の考慮事項\n\n\n### 移行計画を立てる\n\n\n他のツールからGitLab\nCI/CDへ移行を開始する前に、まず移行計画を立てる必要があります。移行計画は、期待値を明確にするための重要な技術的ステップです。CI/CDツールは、それぞれアプローチや構造、技術的な仕様が異なるため、単純にデータを1対1でマッピングできるわけではありません。適切な移行計画を立てることでもたらされるメリットを次に挙げます。\n\n\n-\n移行の目的を明確にして共有することで、なぜ移行が価値のある取り組みなのかをユーザーに理解してもらいやすくなります。作業が完了すればその価値は明らかになりますが、移行中の段階においても認識してもらうことが重要です。\n\n- 関係する経営陣の支援や合意が得られ、移行の重要性や目的が全員に伝わりやすくなります。\n\n- 移行後の環境の違いについて、ユーザーが理解を深める時間を確保できます。\n\n- 移行の順序を決めたり、一部の移行を後回しにしたりすることで、未移行や部分的な移行状態が長引くのを防ぎます。\n\n- GitLab CI/CDにより得られる改善点やメリットを文書化し、移行の一環として既存の実装を更新できます。\n\n\n適切な移行計画を策定することで、業務への影響を最小限に抑えながら、GitLabへ徐々に移行できます。具体的には、JenkinsとGitLabを併用しつつ、一部のプロジェクトをGitLabに移し、Jenkinsの利用を徐々に減らしていくといった計画が考えられます。\n\n\n### 変更管理プロセスを定める\n\n\n移行計画では、効果的な変更管理プロセスを定める必要があります。デベロッパー、IT運用担当者、クラウド管理者、セキュリティ担当者、品質エンジニアなどの関係者は、GitLabの使用経験がなく、なぜあなたや経営陣がこの移行を決定したのかを理解していないかもしれません。\n\n\nこの移行によって影響を受ける人々に、以下の点を理解してもらう必要があります。\n\n- __なぜ__：この変更が行われるのか\n\n- __何が__：移行後の状態として想定されているのか\n\n- __どのように__：現在の状況から移行後の状態にするのか\n\n- __どこで__：追加の情報やサポートを得られるのか\n\n\n移行の影響を受ける各部門のへの影響を理解し、その変化を管理するには、以下の手順が必要です。\n\n\n-\n__現在の状況を分析する__：まず、現在のプロセスを文書化し、基準となる指標を収集します。次に、主要なチームメンバーへのインタビューを通じて、CI/CDにおいてうまく機能している点と機能していない点を特定します。課題を特定したら、定量的、定性的の両面から記録します。移行のビジョンと変更の理由を関係者に理解してもらう必要があるため、課題は明確に定義すればするほど、社内の合意を得やすくなります。\n\n-\n__ビジョンを確立する__：現在の課題を、定量的な基準値と定性的なチームメンバーのフィードバックで明確にしたら、次に将来のビジョンを共有します。ビジネスの成功指標と結びつけて、なぜこの移行が重要なのかを説明します。また、望ましい状態の具体的な例をライブデモや録画を通じて示し、現在の状況と比較します。さらに、このメッセージを定着させるために、チャットグループ、全社ミーティング、メール通知、GitLab上のバナーメッセージなど、複数のチャネルやメディアを活用して発信します。\n\n- __従業員を教育する__：GitLabの専門家が実施する[GitLab\nCI/CDトレーニング](https://about.gitlab.com/services/education/gitlab-ci/)に投資し、[GitLab認定](https://levelup.gitlab.com/pages/certifications)を活用して、知識の習得度や定着度を測定します。\n\n-\n__ロードマップとリソースを共有する__：チームメンバーに対し、移行の予定タイムラインや、移行に役立つリソースを案内します。また、チャットグループ、Q&Aボード、GitLabインフルエンサーによるオフィスアワーなど、コミュニティのリソースも案内し、質問に対する回答やサポートを得られる環境を整えます。さらに、早期に移行したチームを対象とした報酬制度を導入して、移行体験を他のアプリケーショングループと共有してもらうのも効果的です。\n\n\n移行の開始時にこれらの要素が揃っていれば、成功へ向けたしっかりとした基盤を築けます。\n\n\n### 移行目標を設定する\n\n移行を実施する前に、目標とそれを達成する方法をしっかりと把握しておく必要があります。たとえば、以下のような質問に対する答えを用意しておくことが重要です。\n\n- 移行のタイムラインはどのようになっているのか？\n\n- 現在のJenkinsサーバーの構成はどうなっているか？\n\n- 移行対象のプロジェクトはいくつあるか？\n\n- パイプラインの複雑さはどの程度か？\n\n- 外部依存関係、複数のパイプライントリガー、並列ビルドなどが必要か？\n\n- コードのデプロイ方法とデプロイ先は？\n\n- デプロイするコードのリリースやレビューのプロセスはどのようになっているか？\n\n- Jenkinsに統合されているのか、それともJenkinsがトリガーする別のワークフローなのか？\n\n- パイプラインの成功に必要なビルドアーティファクトやバイナリは何か？\n\n- 現在Jenkinsのジョブで使用しているプラグインは何か？\n\n- Jenkinsエージェントにインストールされているソフトウェアは何か？\n\n- 現在使用しているSCMソリューションは何か？\n\n- Jenkinsのジョブで共有ライブラリを使用しているか？\n\n- Jenkinsで使用している認証方法は何か（Basic認証、LDAP/AD、SSOなど）？\n\n- パイプラインからアクセスする必要がある他のプロジェクトはあるか？\n\n- Jenkinsが外部サービスと連携する際に使用するアクセス用認証情報はあるか？\n\n\nこれらの質問に答えることで、移行の進め方、所要時間、どこから始めるべきかが明確になります。移行計画を立て、期待値や想定される課題をしっかり把握できたら、いよいよ移行プロセスの開始です。\n\n\n### 移行の前提要件\n\n移行計画を作成し、移行に関するすべての期待事項を整理できたら、GitLabのセットアップを開始できます。移行の前に推奨される前提要件をいくつかご紹介します。\n\n- GitLabに慣れる。[GitLab\nCI/CDの主な機能](https://docs.gitlab.com/ee/ci/index.html)を読んで理解を深める。\n\n-\nチュートリアルを活用し、最初の[GitLabパイプライン](https://docs.gitlab.com/ee/ci/quick_start/index.html)と、静的サイトをビルド、テスト、デプロイする[より複雑なパイプライン](https://docs.gitlab.com/ee/ci/quick_start/tutorial.html)を作成する。\n\n-\n[.gitlab-ci.ymlのキーワード参照](https://docs.gitlab.com/ee/ci/yaml/index.html)を確認する。\n\n- GitLabをセットアップし、適切に設定する。\n\n- GitLabインスタンスをテストする。\n\n\nGitLabの理解を深め、インスタンスの設定が完了したら、移行計画に沿ってJenkinsからGitLabへのプロジェクト移行を進めることができます。その際、GitLabインスタンスがGitLabのベストプラクティスや[リファレンスアーキテクチャ](https://docs.gitlab.com/ee/administration/reference_architectures/)に従って適切に設定されていることを確認してください。\n\n\n### リポジトリをGitLabに移行する\n\nJenkinsの主な欠点の1つは、SCMソリューションがないことです。Jenkinsを使用している場合、別のSCMソリューションにコードを保存し、そこにJenkinsからアクセスする必要があります。一方、GitLabにはSCMが組み込まれているため、Jenkinsからの移行に伴い、従来使用していたSCMソリューションからも移行でき、さらなるコスト削減につながります。\n\n\nGitLabには、リポジトリやそのメタデータを簡単にGitLabへと移行できるツールが用意されています。プロジェクトをGitLabへ移行する際に活用できるインポーターは以下のとおりです。\n\n\n- [GitHub](https://docs.gitlab.com/ee/user/project/import/github.html)\n\n-\n[別のGitLabインスタンス](https://docs.gitlab.com/ee/user/project/settings/import_export.html)\n\n- [Bitbucket\nCloud](https://docs.gitlab.com/ee/user/project/import/bitbucket.html)\n\n- [Bitbucket\nServer](https://docs.gitlab.com/ee/user/project/import/bitbucket_server.html)\n\n- [FogBugz](https://docs.gitlab.com/ee/user/project/import/fogbugz.html)\n\n- [Gitea](https://docs.gitlab.com/ee/user/project/import/gitea.html)\n\n- [Jira（イシューのみ）](https://docs.gitlab.com/ee/user/project/import/jira.html)\n\n-\n[manifestファイルによるリポジトリのインポート](https://docs.gitlab.com/ee/user/project/import/manifest.html)\n\n-\n[URLによるリポジトリのインポート](https://docs.gitlab.com/ee/user/project/import/repo_by_url.html)\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176002/Blog/ie2xrexhbcoq6m8rnhit.png\" alt=\"GitHub to GitLab Repo Exporter\">\n   \u003Cfigcaption>GitHubからGitLabへのリポジトリエクスポーター\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\n各インポーターは、プロジェクトから異なる種類のデータをインポートします。インポーターによりGitLabへ移行できるデータの詳細については、[インポートとプロジェクトの移行に関するるドキュメント](https://docs.gitlab.com/ee/user/project/import/)を参照してください。さらに、[グループやプロジェクトのインポートを自動化](https://docs.gitlab.com/ee/user/project/import/#automate-group-and-project-import)したり、組織のニーズに合わせたカスタムソリューションを構築したりすることも可能です。\n\n\n- [プロフェッショナルサービス](https://about.gitlab.com/ja-jp/services/)\n\n-\n[移行ユーティリティ](https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/-/blob/master/docs/using-congregate.md#quick-start)\n\n-\n[移行に関するよくある質問](https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/-/blob/master/customer/famq.md)\n\n\n### リポジトリを移行する方法\n\nGitLabには組み込みのインポーターが用意されており、リポジトリの移行は簡単に行えます。例として、GitHubからGitLabへリポジトリをコピーし、[そのリソース](https://docs.gitlab.com/ee/user/project/import/github.html#imported-data)（イシュー、プルリクエスト、マイルストーンなど）も含めて移行する方法をご紹介します。別のGitHubからGitLabへリポジトリを移行するには、以下の手順に従ってください。\n\n\n1. 左側のサイドバーの上部で、**新規作成**（+）を選択します。\n\n2. 「GitLab」セクションで**新規プロジェクト/リポジトリ**を選択します。\n\n3. **プロジェクトのインポート**を選択します。\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176017/Blog/boowmmaqhbredxa3g92s.png\" alt=\"Import project selection\">\n   \u003Cfigcaption>インポートするプロジェクトの選択\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\n4. **GitHub**ボタンをクリックします。\n\n- GitLab\nSelf-Managedを使用している場合は、[GitHubインポーターを有効にする](https://docs.gitlab.com/ee/administration/settings/import_and_export_settings.html#configure-allowed-import-sources)\n必要があります。\n    - 他のインポーターも同様の方法で開始できます。\n5. 次に、以下のいずれかの方法で認証します。\n    - GitHub OAuthで認証する場合：**GitHubで認証**を選択します。\n    - GitHubのパーソナルアクセストークンを使う場合：\n       - [https://github.com/settings/tokens/new](https://github.com/settings/tokens/new)にアクセスします。\n       - **ノート**フィールドにトークンの説明を入力します。\n       - リポジトリスコープを選択します。\n       - オプションとしてコラボレーターをインポートするには、**read:org**スコープを選択します。\n       - **トークンの生成**ボタンをクリックします。\n       - GitLabのインポートページの「パーソナルアクセストークン」フィールドに、GitHubのパーソナルアクセストークンを貼り付けます。\n6. **認証**ボタンをクリックします。\n\n7. 移行するアイテムを選択します。\n\n8. 移行するプロジェクトと移行先を選択します。\n\n9. **インポート**ボタンを押します。\n\n\nこれで、インポートされたプロジェクトがワークスペースに追加されます。GitHubからGitLabへの移行に関する詳しいガイドについては、こちらの動画をご覧ください。\n\n\n\u003C!-- blank line -->\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/0Id5oMl1Kqs?si=TQ5HI9aMwtzJMiMi\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\n\u003C!-- blank line -->\n\n\nリポジトリの移行が完了したら、JenkinsのパイプラインでGitLab内のJenkinsfileを活用できるように設定できます。これは、Jenkinsのパイプライン設定メニューから、新しくインポートしたプロジェクトのリポジトリURLを指定することで実行できます。\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176020/Blog/mu475liw66abcxbu2g6g.png\" alt=\"Jenkins Pipeline SCM settings\">\n   \u003Cfigcaption>JenkinsパイプラインのSCM設定\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\nの方法は、移行の初期段階でもJenkinsの既存の機能を維持しながらGitLabと並行して使用できるため、CI/CD機能の移行作業中にサービスが中断されるのを防げます。\n\n\nさらに、[GitLab\nJenkinsプラグイン](https://plugins.jenkins.io/gitlab-plugin/)を活用することで、移行をスムーズに進めることができます。このプラグインを使用すると、GitLabからJenkinsのビルドをトリガーしたり、ビルドのステータスを取得したりできるようになります。\n\n\n### CI/CDパイプラインを移行する\n\nリポジトリの移行が完了したら、今度はJenkinsのパイプラインをGitLabへ移行できます。このプロセスは比較的シンプルですが、JenkinsとGitLabの両方の概念や構文を理解する必要があります。\n\n\nJenkinsには、パイプラインを定義するための構文として宣言型とスクリプト型の2種類があります。今回は、最も一般的に使用されている宣言型パイプラインからの移行方法を解説します。\n\n\n### パイプラインを段階的に移行する\n\nこのチュートリアルでは、Jenkinsfile（Groovy）とGitLab\nCI/CDの設定ファイル（YAML）を比較しながら、Go言語で書かれたマイクロサービスをビルド、テスト、デプロイする方法を分析します。その後、GitLabでパイプラインを有効化し、実際の動作を確認します。このパイプラインは以下の処理を行います。\n\n\n- **alpine**タグ付きのGo言語コンテナイメージを使用する\n\n- Go言語のコードを実行可能なバイナリにビルドするジョブを実行する\n   - ビルドしたバイナリをアーティファクトとして保存する\n- ユニットテストを実行するジョブを実行する\n\n- stagingステージにデプロイするジョブを実行する\n   - コミットが**staging**ブランチに向けたものである場合のみ実行される\n   - **test**ステージが成功した後に開始される\n   - 以前のジョブで作成された実行可能なバイナリアーティファクトを使用する\n\n以下に、JenkinsとGitLabのパイプライン定義とコメントを示します。実際のパイプラインの動作は[Meow\nMigrationプロジェクト](https://gitlab.com/gitlab-de/projects/blogs/meow-migration)で確認できます。\n\n\nでは、Groovyで記述されたJenkinsfileを見ていきましょう。\n\n\n```  \n\n// 宣言型パイプラインの\n\n// トップレベルを定義します。\n\npipeline {\n\n  // ジョブ内で明示的に定義されていない場合に\n  // デフォルトで使用するエージェントを\n  // 指定します。\n    agent any\n\n  // 数値順に実行される\n  // ステージを定義します。各ステージは\n  // 1つのジョブのみを実行します。\n    stages {\n\n    // ステージの名前を定義します。\n        stage('build') {\n      // このジョブで使用する\n      // コンテナイメージを定義し、\n      //デフォルトの'agent any'を上書きします。\n      // 実行にはJenkins Docker\n      // プラグインの設定が\n      // 必要です。\n            agent { docker 'golang:alpine' }\n\n      // ステージが実行される際に\n      // 実行する処理の順序を\n      // 定義します。\n            steps {\n                sh 'go build -o bin/meow-micro'\n                sh 'chmod +x bin/meow-micro'\n            }\n\n      // ステージ完了後に\n      // 実行する処理を定義します。\n            post {\n              always {\n\n        // 他のジョブで使用するために\n        // ステージアーティファクトを\n        // 保存します。\n                archiveArtifacts artifacts: 'bin/meow-micro'\n                onlyIfSuccessful: true\n              }\n            }\n        }\n\n    stage('test') {\n            agent { docker 'golang:alpine' }\n            steps {\n                sh 'go test .'\n            }\n        }\n\n        stage('deploy') {\n      // このジョブを\n      // 実行するための\n      // 条件を定義します。この場合、\n      // stagingブランチでのみ\n      // デプロイジョブが実行されます。\n            when {\n              branch 'staging'\n            }\n            steps {\n                echo 'Deploying meow-micro to staging'\n        // buildステージで保存した\n        // アーティファクトを使用します。\n                sh './bin/meow-micro'\n            }\n        }\n    }\n}\n\n```\n\n\nでは、同じ機能をGitLabで作成する方法について見ていきましょう。\n\n\n```\n\n# ジョブ内で明示的に定義されていない場合に\n\n# デフォルトで使用するイメージを\n\n# 指定します。\n\ndefault:\n  image: alpine:latest\n\n# 実行するステージの順序を定義します。\n\n# 各ステージには複数のジョブを含めることができます。\n\nstages:\n  - build\n  - test\n  - deploy\n\n# ジョブ名を定義します。\n\ncreate-binary:\n # このジョブが実行されるステージを定義します。\n  stage: build\n # このジョブで使用するコンテナイメージを定義し、\n # デフォルトの設定を上書きします。\n  image: golang:alpine\n # ジョブ実行時に実行する\n # 一連の手順を定義します。\n  script:\n    - go build -o bin/meow-micro\n    - chmod +x bin/meow-micro\n # 他のジョブで使用するために\n # ジョブのアーティファクトを保存します。\n  artifacts:\n    paths:\n      - bin/meow-micro\n    expire_in: 1 week\n\nunit-tests:\n  stage: test\n  image: golang:alpine\n  script:\n    - go test .\n # ジョブの実行後に実行するコマンドを\n # 定義します。\n after_script:\n  - echo \"Tests Complete\"\n\nstaging-deploy:\n  stage: deploy\n # ジョブの実行前に実行するコマンドを\n # 定義します。\n  before_script:\n    - apk update\n  script:\n    - echo \"Deploying meow-micro to staging environment\"\n    - ./bin/meow-micro\n # このジョブが実行される\n # 条件を定義します。この\n # 場合、stagingブランチでのみ\n # staging-deployジョブが実行されます。\n  rules:\n    - if: $CI_COMMIT_BRANCH == 'staging'\n # buildジョブで保存されたアーティファクトを\n # このジョブで使用できるようにします。\n  artifacts:\n    paths:\n      - bin/meow-micro\n```\n\n\nご覧のとおり、JenkinsとGitLabの構文には多くの共通点があり、パイプラインの移行は比較的簡単です。ここでは基本的な例を紹介しましたが、両ツールの詳しい[機能や概念の比較](https://docs.gitlab.com/ee/ci/migration/jenkins.html#comparison-of-features-ad-concepts)もぜひご確認ください。\n\n\nJenkinsからGitLabへのマッピング方法を理解したところで、GitLabで同じ機能を持つパイプラインの作成を始めましょう。以下の手順でCI/CDを移行できます。\n\n\n##### 1. 先程GitLabに移行したリポジトリを開きます。\n\n- 左側のサイドバー上部で**検索または移動先…** を選択します。\n\n- プロジェクトを検索し、開きます。\n\n\n##### 2. [パイプラインエディタ](https://docs.gitlab.com/ee/ci/pipeline_editor/)を開きます。\n\n- 左側のサイドバーから**ビルド > パイプラインエディタ**を選択します。\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176026/Blog/ecp4jh7epho2oxuegaor.png\" alt=\"Pipeline editor menu\">\n   \u003Cfigcaption>パイプラインエディタのメニュー\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\n- **パイプラインの設定** ボタンをクリックします。\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176029/Blog/nypfh01zhwgvzqc0xz3v.png\" alt=\"Configure pipeline selection\">\n   \u003Cfigcaption>「パイプラインの設定」を選択\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\n##### 3. [.gitlab-ci.yml](https://docs.gitlab.com/ee/ci/yaml/)に入力します。\n\n- GitLab CIのパイプラインコードを追加します。\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176031/Blog/nxi6uxxispyyoiiyvxyg.png\" alt=\"Pipeline editor input\">\n   \u003Cfigcaption>パイプラインエディタへの入力\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\n- 構文が正しいか検証します。\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176037/Blog/x3d4utfsnymye0lvphtf.png\" alt=\"Pipeline syntax validation\">\n   \u003Cfigcaption>パイプライン構文の検証\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\n- パイプラインの構造を視覚化して確認します。\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176043/Blog/hipzofpyywjxf62edzfv.png\" alt=\"Pipeline visualization\">\n   \u003Cfigcaption>パイプラインの視覚化\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\n##### 4. ファイルをmainブランチにコミットします。\n\n- コミットメッセージを追加します。\n\n- ブランチがmainになっていることを確認します。\n\n- 「変更をコミットする」ボタンをクリックします。\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176048/Blog/nn8bl7rdysabccoycfrk.png\" alt=\"Commit changes dialog\">\n   \u003Cfigcaption>「変更をコミットする」のダイアログ\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\nファイルがマージされると、定義されたパイプラインが実行されます。プロジェクトページの**ビルド >\nパイプライン**から、実行中の[パイプラインを確認](https://docs.gitlab.com/ee/ci/pipelines/#view-pipelines)できます。今回は**main**ブランチで実行されているため、**create-binary**とunit-testsのジョブのみが表示されます。**staging-deploy**のジョブは、stagingブランチでのみ実行されます。\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176051/Blog/wfb4k8nkzpg28kpf2pzz.png\" alt=\"Pipeline running on main branch\">\n   \u003Cfigcaption>mainブランチで実行中のパイプライン\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\nstagingブランチを作成すると、以下のパイプラインが開始されるのを確認できます。\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176053/Blog/e2jxedpolaniotgixpby.png\" alt=\"Pipeline running on staging branch\">\n   \u003Cfigcaption>stagingブランチで実行中のパイプライン\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\nジョブをクリックすると、その出力を確認できます。\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176056/Blog/fywzwbzkwcvc9zzakilh.png\" alt=\"create-binary job output\">\n   \u003Cfigcaption>create-binaryジョブの出力\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176061/Blog/ekmpd8ecanwwiena9xi9.png\" alt=\"unit-tests job output input\">\n   \u003Cfigcaption>unit-testsジョブの出力\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\n\u003Ccenter>\n\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176065/Blog/h7nqxszy50xdmnvhalfq.png\" alt=\"staging-deploy job output\">\n   \u003Cfigcaption>staging-deployジョブの出力\u003C/figcaption>\n\u003C/figure>\n\n\u003C/center>\n\n\u003Cp>\u003C/p>\n\n\nこのように、create-binaryジョブで保存されたアーティファクトが、staging-deployジョブで使用されることが確認できます。これだけの手順で、JenkinsのパイプラインをスムーズにGitLabへ移行できます！\n\n\n### 移行に関するその他の考慮事項\n\nデプロイプロセスをよりシンプルにするために役立つポイントとして、以下の点を考慮することをおすすめします。\n\n\n-\nタスクをそのまま1:1でGitLabのジョブに移行しようとしない：既存のパイプラインが何を行っているのか、どのような問題を解決しているのかを整理し、理解する時間を確保することが重要です。\n\n\n- 一部のJenkinsジョブは複雑すぎてすぐにGitLabに移行できない場合がある：そのため、[GitLab\nJenkinsプラグイン](https://plugins.jenkins.io/gitlab-plugin/)を活用し、JenkinsのパイプラインをGitLabから直接起動し、結果を表示できるようにするとよいでしょう。これにより、一部の処理を徐々にGitLabに移行し、最終的にパイプライン全体をGitLabへ統合できます。\n\n\n-\nGitLabが提供する組み込みテンプレートを活用し、[セキュリティスキャナーやコード品質チェック](https://docs.gitlab.com/ee/user/application_security/)を最初から導入する：これにより、セキュリティのシフトレフトを行い、漏洩のリスクを低減できます。\n\nまた、CI/CDの設定を過度に複雑にしないようにし、すべての機能を一度に活用しようとするのではなく、コードをモジュール化し、複数の小さなステップに分けて導入するようにしてください。\n\n\n- モニタリングとガバナンスを最初から実装する。\n\n\n- GitLab\nRunner（Go）はJenkinsエージェント（Java）とは動作が異なる可能性があることを理解する：CPU使用率やメモリ消費量が異なる可能性があるため、時間をかけて比較しながら調整する必要があります。\n\n\n- 自動スケーリングの導入を検討し、週末や業務時間外に不要なリソースをシャットダウンすることを検討する。\n\n\n-\nジョブのコンテナ化を進め、アプリケーション開発をモダナイズする：現在ではJenkinsのジョブはコンテナ上ではなく、仮想マシン（VM）として動作するJenkinsエージェント上で実行されます。\n\n\nこのリストはすべての考慮事項を網羅しているわけではありませんが、移行を進めるうえで重要なポイントを押さえています。さらにサポートが必要な場合は、GitLabの[プロフェッショナルサービス](https://about.gitlab.com/ja-jp/get-help/)を活用し、移行プロセスをスムーズに進めることも可能です。\n\n\n### 関連リンク\n\nここまでお読みいただきありがとうございます！本ガイドが、JenkinsからGitLabへ移行するメリットと手順を理解する助けとなれば幸いです。まだ迷っている方は、ぜひ[GitLabの無料トライアル](https://about.gitlab.com/ja-jp/free-trial/)でDevSecOpsプラットフォームの価値を実感してください！\n\n\nさらに詳しく知りたい方のために、GitLabの機能やDevSecOpsプラットフォームのメリット、Jenkinsからの移行に関する情報を学べるリソースをいくつかご紹介します。\n\n\n- [Jenkinsからの移行（英語）](https://docs.gitlab.com/ee/ci/migration/jenkins.html)\n\n-\n[移行計画の立て方（英語）](https://docs.gitlab.com/ee/ci/migration/plan_a_migration.html)\n\n- [GitLabプロジェクトインポーター（英語）](https://docs.gitlab.com/ee/user/project/import/)\n\n-\n[チュートリアル：簡単にできるGitHubからGitLabへの移行（英語）](https://about.gitlab.com/blog/github-to-gitlab-migration-made-easy/)\n\n-\n[動画：簡単にできるGitHubからGitLabへの移行（英語）](https://youtu.be/0Id5oMl1Kqs?feature=shared)\n\n- [JenkinsからGitLabへ:\nCI/CD環境をモダナイズするための究極ガイド（英語）](https://about.gitlab.com/blog/jenkins-gitlab-ultimate-guide-to-modernizing-cicd-environment/)\n\n\n\u003Cbr>\n\n\u003Cbr>\n\n\n*監修：小松原 つかさ  [@tkomatsubara](https://gitlab.com/tkomatsubara)\u003Cbr>\n\n（GitLab合同会社 ソリューションアーキテクト本部 シニアパートナーソリューションアーキテクト）*\u003Cbr>\n","devsecops",[9,751],"2025-04-15",{"slug":1149,"featured":91,"template":685},"jenkins-to-gitlab-migration-made-easy","content:ja-jp:blog:jenkins-to-gitlab-migration-made-easy.yml","Jenkins To Gitlab Migration Made Easy","ja-jp/blog/jenkins-to-gitlab-migration-made-easy.yml","ja-jp/blog/jenkins-to-gitlab-migration-made-easy",{"_path":1155,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1156,"content":1160,"config":1168,"_id":1170,"_type":14,"title":1171,"_source":16,"_file":1172,"_stem":1173,"_extension":19},"/ja-jp/blog/monday-merge-2025-august-11",{"config":1157,"title":1158,"description":1159},{"noIndex":6},"Monday Merge 8月号","Monday Merge8月号では、",{"date":1161,"title":1158,"category":1162,"tags":1163,"body":1164,"authors":1165,"description":1166,"heroImage":1167},"2025-08-11","news",[9,748,705,750,268,776,751,278,752,1162,900,753,777],"GitLabコミュニティのみなさん、こんにちは！今月もソフトウェア開発の最新トレンドをお届けします。\n\n今回のトピックはこちら：\n\n* GitLab Duo Agent Platformのパブリックベータ版がスタート：AIともっとスマートに働く方法とは\n* 現場のニーズに応える最新GitLabリリース情報\n* 世界2,786名のCレベル層に聞いた、AIとソフトウェアイノベーションに関する意識調査\n* 注目イベントやおすすめコンテンツ、NatWest社の導入事例もご紹介\n\nそれでは、さっそく見ていきましょう⚓\n\n# **GitLab Duo Agent Platform：パブリックベータ版がついに登場**\n\n![agent platform](https://res.cloudinary.com/about-gitlab-com/image/upload/v1754369419/qascscd3p9azk7ros2nw.png)\n\n従来のAIアシスタントの概念を覆す新しい体験 ── GitLab Duo Agent Platformは、開発・セキュリティ・運用すべてをカバーする次世代のDevSecOpsオーケストレーションエンジンです。パブリックベータ版としての提供がスタートしました。\n\nこれは単なるIDE内のAIボットではありません。複数のAIエージェントがチームの一員として非同期に連携し、計画からリリースまでをトータルでサポートします。\n\n初期搭載されているエージェントは以下の通りです：\n\n* **Chat Agent**：自然言語での質問や汎用的な開発作業をサポート\n* **Developer Agent**：仮想開発環境でマージリクエストを作成\n* **Security Analyst Agent**：脆弱性の検出と修正提案\n* **Deep Research Agent**：リポジトリ全体を分析し、背景を踏まえたインサイトを提供\n* **Software Development Flow**：複数エージェントを連携させて一連の開発タスクを自動化\n\nGitLabのイシュー、パイプライン、CI/CDなど25以上の機能にネイティブにアクセスできるため、コンテキストを理解した精度の高い支援が可能です。さらに今後は、エージェントをカスタマイズし、複雑な作業を自動実行できる「フロー」も登場予定です。\n\nPremiumおよびUltimateプランをご利用中の方は、VS CodeやJetBrains IDEでベータ版を今すぐお試しいただけます。Web UIでも「Duo Agentic Chat」がすでに利用可能です。　\n\n▶︎ [GitLabがオーケストレーションプラットフォームとして持つ独自の強みについて、CEOのBill Staplesが語るインタビューはこちら。導入方法もあわせてご紹介しています。](https://about.gitlab.com/blog/gitlab-duo-agent-platform-public-beta)\n\n[](https://about.gitlab.com/blog/gitlab-duo-agent-platform-public-beta)\n\n# [](https://about.gitlab.com/blog/gitlab-duo-agent-platform-public-beta)**GitLab企業経営調査2025：AI・信頼・7,500億ドルの可能性**\n\n![$750+B](https://res.cloudinary.com/about-gitlab-com/image/upload/v1754369415/i8ccbygymqgrxno9vul5.png)\n\nAIは単なるトレンドではありません。世界の開発者2,700万人がAIを活用すれば、7,500億ドル以上の価値が生まれると言われています。最新のGitLab企業経営調査2025では、世界中の経営層2,786名にAIとソフトウェア開発の未来について調査を行いました。\n\n主な調査結果：\n\n* AI活用によって、開発者1人あたり年間28,249ドルのコスト削減を実現（世界中の開発者数で見積もると7,500億ドル規模に）\n* 89％の経営者が、今後3年以内にAIエージェントが業界標準になると予想\n* 懸念点は「サイバー攻撃（52%）」「データのプライバシーとセキュリティ（51%）」「ガバナンスの維持（45%）」\n* 92％が「社員がAIと協働できるようスキルトレーニングが必要」と回答\n\n📥 [レポート全文はこちらからダウンロードできます](https://about.gitlab.com/software-innovation-report)\n\n（日本に特化したレポートは近日中に公開予定）\n\n# **GitLab 18.2がリリースされました**\n\n![GitLab 18.2 Release ](https://res.cloudinary.com/about-gitlab-com/image/upload/v1754369416/vdubujaphpphyk2n4wnw.png)\n\nGitLab 18.2では、30以上の新機能や改善が追加され、よりスピーディーかつ安全な開発が可能に。今回のアップデートにも、GitLabコミュニティから152件の貢献が寄せられました。ありがとうございます！\n\n注目の新機能：\n\n* ✅ カスタムワークフローステータス：イシューの状態を自社の運用に合わせて柔軟に管理可能に\n* 🧭 Merge Requestページの再設計：ロールやワークフロー別に表示を最適化\n* 🔐不変コンテナタグ： 本番環境への不意な変更を防止\n\n🔗 [全リリース内容はこちら](https://about.gitlab.com/ja-jp/blog/gitlab-18-02-release/)\n\n[](https://about.gitlab.com/ja-jp/blog/gitlab-18-02-release/)\n\n# **今月のイベント情報：Black Hat USA & OSS EU**\n\n![Black Hat USA & OSS EU](https://res.cloudinary.com/about-gitlab-com/image/upload/v1754369416/buoqb3vmhmnsnznqquwj.png)\n\n今月はGitLabチームがイベントに登場します！\n\n📍 Black Hat USA（ラスベガス） – [詳細はこちら](https://www.blackhat.com/us-25/)[\n](https://www.blackhat.com/us-25/)\\\n📍 Open Source Summit Europe（アムステルダム） – 今月後半 👉 [登録はこちら](https://events.linuxfoundation.org/open-source-summit-europe/register/)\n\n開催地にいらっしゃる方は、ぜひお立ち寄りください！ステッカーもご用意しています。\n\n# **お客様事例：NatWest社**\n\n![NatWest](https://res.cloudinary.com/about-gitlab-com/image/upload/v1754369415/dr8uwztk6f1akrj7cdsp.png)\n\n金融機関NatWest社は、GitLab Duo Agent Platformを活用して開発スピードと生産性を大幅に向上させています。\n\n「GitLab Duo Agent Platformは、私たちのコードベースと組織構造を理解したうえで、AIが開発ワークフロー全体を支援してくれます。コード・テスト・CI/CDとあらゆる工程にAIが溶け込み、チームの一員として一緒に仕事している感覚があります。開発者はより創造的な仕事に集中できるようになりました」\n— NatWest社エンジニアリングプラットフォームリード Bal Kang\n\n# **今月のおすすめ記事＆動画👀**\n\n![What We're Reading](https://res.cloudinary.com/about-gitlab-com/image/upload/v1754369415/mmjg9yy77orkohaureis.png)\n\nGitLabリーダーたちが語る、AI・DevSecOps・ソフトウェアセキュリティの未来。\n\n\u003Chttps://leaddev.com/reporting/the-rise-and-looming-fall-of-acceptance-rate>\n\n\u003Chttps://www.thestack.technology/a-cisos-focus-lessons-from-the-field/>\n\n\u003Chttps://www.raconteur.net/technology/agentic-ai-vibe-coding-oped>\n\n\u003Chttps://thenewstack.io/software-security-imperative-forging-a-unified-standard-of-care/>\n\n\u003Chttps://youtu.be/wZytaN-1URM>\n\n**最後に、今月の名言を**\n\n> 「知性の本当の証は知識ではなく、想像力である」\n> — アルベルト・アインシュタイン\n\n素晴らしいアイデアは、予想外の場所から生まれるものです。知識だけでなく、「想像する力」を大切にしたいですね。\n\n今月号は以上です。Duo Agent Platformはついに一般公開され、AIはC-suiteの重要議題へ、そしてMerge Requestページもさらに進化した、盛りだくさんな月でしたね。\n\nそれではまた来月、お会いしましょう！Happy Merging！\n\n[Fatima Sarah Khalid](https://www.linkedin.com/in/sugaroverflow/)｜GitLab Developer Advocate\n\n🧡 このニュースレターが気に入った方は、ぜひチームにもシェアしてください。\n 👉 [The Developer Show](https://www.linkedin.com/feed/update/urn:li:activity:7340777670714019840)の購読もお忘れなく！\n\n![Happy Merging!](https://res.cloudinary.com/about-gitlab-com/image/upload/v1754369416/is5jitqrtujnkmmkijlg.png)",[771],"AIエージェント、新機能、そして7,500億ドルの可能性に注目\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1754368844/vagh8krfgft9cghbknod.png",{"featured":91,"template":685,"slug":1169},"monday-merge-2025-august-11","content:ja-jp:blog:monday-merge-2025-august-11.yml","Monday Merge 2025 August 11","ja-jp/blog/monday-merge-2025-august-11.yml","ja-jp/blog/monday-merge-2025-august-11",{"_path":1175,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1176,"content":1180,"config":1184,"_id":1186,"_type":14,"title":1187,"_source":16,"_file":1188,"_stem":1189,"_extension":19},"/ja-jp/blog/monday-merge-2025-july-14",{"noIndex":6,"ogImage":1177,"title":1178,"description":1179},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752204420/ccdkkhlyrjmyjxsicf7d.jpg","Monday Merge 7月号","Monday Merge７月号では、GitLab 18の最新トピックのほか、AWS Summit、新しいライブ番組のスタート、そして注目のカスタマーストーリーをご紹介します。",{"date":742,"body":1181,"title":1178,"category":1162,"heroImage":1177,"authors":1182,"description":1179,"tags":1183},"GitLabコミュニティのみなさん、こんにちは！Fatimaです。今月のMonday Mergeも、本当に盛りだくさんです！GitLab 18の最新トピックはもちろん、活気あふれるニューヨークでのAWS Summit、新しいライブ番組のスタート、そして注目のカスタマーストーリーまで。7月はまさにDevSecOpsの話題で溢れています。\n\nさらに、IBMと協力してメインフレームDevOpsの最新化にも取り組んでいます。（そう、あのCOBOLが再び注目を浴びています！）\n\nそれでは、さっそく見ていきましょう👇\n\n## GitLab 18 バーチャルローンチ：AI × オーケストレーションの未来へ\n\n![GitLab 18 バーチャルローンチ：AI × オーケストレーションの未来へ](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752204279/ryjaxhkcssnxn9x6genq.png)\n\n先月、GitLab 18のバーチャルローンチイベントを開催しました。\\\nライブ配信を見逃した方も大丈夫。ここで簡単にポイントを振り返ります。\n\n注目のハイライトは？ \\\nそれは、GitLab Duo Agent Platform の登場です。この新しいプラットフォームでは、エンジニアとAIエージェントがソフトウェア開発のあらゆる工程で連携・協働できるようになります。これにより、開発チームの生産性や開発スピードが大きく向上することが期待されています。\n\nGitLabのCEO、ビル・ステイプルズはこのように語りました：\n\n> *「GitLab 18は、人とAIエージェントが一緒に働けるDevSecOpsオーケストレーションフォームです。ソフトウェア開発のあらゆる工程で、“エージェント型AI”を活用したチームワークを実現します。」*\n\nつまり、これは開発者の代わりになるものではなく、繰り返し作業の負担を減らし、人の創造力と専門性をもっと活かせるようにするための進化です。私たちはそんな未来を目指しています。\n\nさらに今回、GitLabの統合DevSecOpsプラットフォームとAmazon Q Developerエージェントの連携も発表しました。この強力な組み合わせにより、より安全でスピーディーなソフトウェア開発が実現します。\n\nGitLab Duo + Amazon Qは、AIを活用したシームレスな開発の新時代を象徴するものです。\n\nイベントにはBarclaysとThalesも登場し、GitLab 18がそれぞれの組織の開発プロセスをどう変えているのか、リアルな声を共有してくれました。金融の高度なセキュリティ要件から航空業界のイノベーションまで、GitLab 18がもたらす影響は確かなものです。\n\n👉 イベントのフル動画は [GitLab 18 Launch Event](https://about.gitlab.com/ja-jp/eighteen/?utm_medium=social&utm_source=linkedin&utm_campaign=20250624_global_corp_webcast_aisdlc_en_gitlab18)ページ でご覧いただけます。\n\n## GitLab 18.1がリリースされました：セキュリティ、スピード、そしてAIの進化\n\n![18.1](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752204279/wbauaqzctmlul8lg7mu3.png)\n\nGitLab 18をリリースをしてすぐではありますが、[GitLab18.1が登場](https://about.gitlab.com/ja-jp/blog/gitlab-18-01-release/)しました！この最初のリリースには、チームの開発スピードとセキュリティをさらに高めるためのアップデートが満載です。\n\n#### 注目の新機能はこちら：\n\n✅ Duoコードレビュー が正式リリース！\\\n AIがマージリクエストに対してインテリジェントなフィードバックを提供し、レビューのスピードアップやバグの早期発見を支援します。\n\n📦 Maven仮想レジストリ（Virtual Registry） がベータ版に\\\n GitLab上でのMaven依存関係の管理がより簡単になりました。\n\n🔐 漏洩パスワード検出機能 を追加\\\n あなたのパスワードが既知のデータ漏洩に含まれていないかを検出し、安全な変更方法を案内してくれます。\n\n🔁 SLSAレベル 1 準拠をサポート\\\n 新しいCI/CDコンポーネントを使って、ソフトウェアサプライチェーンのセキュリティ強化に貢献します。\n\nそして、何より嬉しいのは、みなさんからの 110件以上の改善と、311件ものコミュニティ貢献によってこのリリースが実現したことです。開発・レビュー・ドキュメント・ビルドに関わってくださった全ての方々、本当にありがとうございます！\n\n👉 [リリースノート全文はこちら！](https://about.gitlab.com/ja-jp/blog/gitlab-18-01-release/)\n\n## 新ライブ配信シリーズ：The Developer Show – Powered by GitLab \n\n![](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752204283/guz14qmyjhiyuf6oyh9k.png)\n\nGitLabからの新しいライブ配信シリーズが始まりました！その名も The Developer Show – Powered by GitLab。私とセキュリティPMMのSalがホストを務める、月1回のライブ配信番組です。\n\nこれはよくある「普通のウェビナー」ではありません。毎回、実際に今の開発現場を変えている技術について深く掘り下げていきます。\n\n対象は、開発者、開発リード、コードに関わるすべての人。業界で本当に語られているリアルな会話をキャッチアップしたい人向けです。\n\n📺 エピソード1では、GitLab 18 バーチャルローンチの内容を振り返り！\\\n ハイライトの紹介はもちろん、実践的なヒントやちょっと辛口なコメントも交えてお届けします。\n\n👉 [今すぐ視聴＆チャンネル登録して、次回もお見逃しなく！](https://www.linkedin.com/events/7340777668130312193/comments/)\n\n## AWS Summit New York：GitLabブースでお会いしましょう！ !\n\n![](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752204279/thiukj2hnn9mjyd1mcui.png)\n\n先日の東京に引き続き、7月16日、GitLabチームはニューヨークで開催されるAWS Summitに参加します！お近くの方は、Javits Center内のGitLabブースにぜひお立ち寄りください。\n\n当日は以下の内容をご用意しています：\n\n* GitLab DuoのAI機能を体験できるハンズオンデモ  \n* セキュリティ、開発スピード、開発者体験に関するライトニングトーク  \n* GitLabのDevSecOpsエキスパートとの対話（ご質問大歓迎です！）  \n* 限定ノベルティやプレゼントもご用意しています\n\nさらに、当日はAWSのAgentic AI担当VPのSwami Sivasubramanian氏による基調講演も実施されます。Agentic AIがソフトウェア開発をどう変えていくのか、GitLabとしても非常に関心のあるテーマです。\n\n参加登録は無料です。ぜひこちらからお申し込みください：[登録はこちら](https://about.gitlab.com/events/aws-summits/)\n\n## GitLabチームに会いに来ませんか？ WeAreDevelopers World Congress !\n\n![](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752204279/z9hot8dhmj1k4gjxefmg.png)\n\n世界中の開発者とつながるこのイベントで、GitLabチームも皆さんとお会いできるのを楽しみにしています！スタンド A07 にぜひお立ち寄りください。GitLabのDevSecOpsプラットフォームが、ソフトウェアのデリバリーをどのように加速し、チーム間のコラボレーションを強化できるか等をご紹介します。\n\nCI/CDやセキュリティ自動化、開発フローの改善に興味がある方はもちろん、\\\n どんな質問にもチームメンバーがお答えしますので、お気軽にお声がけください。\n\nまた、金曜日には注目のセッションも：\n\n* 13:40〜 GitLab VP of Engineering、Maw Wildpanerによる講演\\\n   　「なぜ“セキュリティファースト開発”が、より良いソフトウェアを早く届ける鍵となるのか」\n* 16:30〜 GitLab VP of Strategy and Developer Relations、Emilio Salvadorが登壇するパネル「DevRelの戦略的な力：コミュニティからビジネスインパクトへ」\n\n👋 [ベルリンでお会いしましょう！](https://www.wearedevelopers.com/world-congress/)\n\n## 事例のご紹介：Thales \n\n![Thales](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752204279/m85bcsqac7gitoewqfrb.png)\n\n今月の事例紹介は、なんと高度3万5千フィートの空の上からお届けします。Thales は、航空宇宙・防衛分野のグローバルリーダー企業。彼らは従来のDevOpsプロセスを、クラウドネイティブでCI/CD駆動のイノベーションエンジンへと進化させました。\n\nGitLabを活用して開発したのが、次世代の機内エンターテインメントシステム「FlytEDGE」。乗客ごとにパーソナライズされたコンテンツやサービスを提供しながら、デプロイ時間を95%短縮することに成功しています。分散チーム間のコラボレーションをスムーズにし、パイプライン全体に自動化を導入し、開発者がボトルネックなく素早くリリースできる環境を実現。その結果、従来の20倍のスピードでデプロイできるようになりました。\n\n👉 [こちらから導入事例を詳しくご覧ください](https://about.gitlab.com/ja-jp/customers/thales/)\n\n## 今月のおすすめ記事\n\n![](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752204283/agkyge3unfoilwmmk1c9.png)\n\n今月もGitLabのSlackチャンネルでは、たくさんの素晴らしいDevSecOpsの考えや情報がシェアされています。その中から特に注目されているものをご紹介します。\n\n* [https://japan.zdnet.com/article/35234560/](\u003C>) \n* \u003Chttps://vmblog.com/archive/2025/06/23/breaking-down-silos-gitlab-and-ibm-partner-to-modernize-mainframe-devops.aspx>\n* \u003Chttps://www.nextgov.com/ideas/2025/05/legacy-government-systems-enter-ai-era/405642/>\n* \u003Chttps://www.economiematin.fr/investissement-operateur-telecom-technologie-caronna>\n* \u003Chttps://thenewstack.io/accelerating-developer-velocity-with-effective-platform-teams/>\n* \u003Chttps://leaddev.com/uncategorized/how-get-most-out-ai-tooling>\n\n\n\n## 📌 今月の名言\n\n>  「何事も、それが成し遂げられるまでは不可能に思えるものだ。」\\\n>  – ネルソン・マンデラ\n\n高速なデプロイ、スマートなセキュリティ、次世代の開発者のための開発など、\\\nどんなに難しいことに取り組んでいても、あなたならきっとできます。\n\n🦊 また次回まで！\n\nGitLabコミュニティの一員でいてくださり、ありがとうございます！みなさんがGitLab 18でどんなものを作ってくださるのか、私たちも楽しみにしています。バーチャルイベントの登録と、AI機能の活用開始もお忘れなく。それではまた次回のMonday Mergeでお会いしましょう。Happy Merging! \\\n[The Developer Showの購読もお忘れなく！](https://www.linkedin.com/feed/update/urn:li:activity:7340777670714019840)\n\n[Fatima Sarah Khalid](\u003C>) | GitLab Developer Advocate\n\n![](https://res.cloudinary.com/about-gitlab-com/image/upload/v1752204279/hdcjv0v3qqk53xjazumo.png)\n\n[](https://www.linkedin.com/feed/update/urn:li:activity:7340777670714019840)",[771],[9,748,705,750,268,776,751,278,752,1162,900,753,777],{"featured":6,"template":685,"slug":1185},"monday-merge-2025-july-14","content:ja-jp:blog:monday-merge-2025-july-14.yml","Monday Merge 2025 July 14","ja-jp/blog/monday-merge-2025-july-14.yml","ja-jp/blog/monday-merge-2025-july-14",{"_path":1191,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1192,"content":1197,"config":1204,"_id":1206,"_type":14,"title":1207,"_source":16,"_file":1208,"_stem":1209,"_extension":19},"/ja-jp/blog/monday-merge-2025-september-8",{"config":1193,"title":1194,"ogImage":1195,"description":1196},{"noIndex":6},"Monday Merge 9月号","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756904278/ov1n66vq8dnikcjyu0iw.png","最新リリース、注目のホワイトペーパー、そして大規模なDevSecOpsの取り組み事例をお届け。",{"title":1198,"authors":1199,"heroImage":1195,"date":1200,"category":1162,"tags":1201,"body":1202,"description":1203},"Monday Merge 9月号：より速いパイプライン、もっと賢いエージェント、そしてより大きな成果を！",[771],"2025-09-08",[748,9,750,268,776,751,278,752,1162,900,753,777],"9月の始まりとともに、最新リリース、注目のホワイトペーパー、そして大規模なDevSecOpsの取り組み事例をお届けします👇\n\n## **GitLab 18.3 リリース！Duo AgentsのIDE対応、Embedded Viewsなど多くの新機能が登場**\n\n![GitLab 18.3 リリース](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756955192/hjiu0tadczplc14wsfbc.png)\n\n今回のリリースでは、セキュリティやコンプライアンスの強化から、開発ツール内でのAIアシストまで、プラットフォーム全体に渡る改善を実現しました。\n\n新機能はこちら：\n\n* Visual Studio向け Duo Agent Platform（ベータ）\\\n  開発者はVisual Studio内でGitLab Duo Agent ChatとAgent Flowsを直接利用可能に。IDEを離れることなく、質問、タスク自動化、アーキテクチャ設計、コード生成まで行えます。\n* 埋め込みビュー（一般提供）\\\n  エピック、Wiki、課題を動的でクエリ可能なダッシュボードに変換。GLQLでリアルタイムデータを活用し、チームの足並みを常に揃えられます。\n* CI/CDジョブトークンの細かな権限設定\\\n  最小権限の原則を適用し、ジョブトークンごとのアクセス範囲を正確に制御。\n* 直接転送によるマイグレーション（一般提供）\\\n  GitLabインスタンス間でのプロジェクト移行がよりスムーズで信頼性も向上。\n* Duo Self-Hosted のアップデート\\\n  ハイブリッドモデル選択のサポート、持ち込みモデルの柔軟性、コードレビュー用カスタム指示に対応。\n\nそのほかWeb IDE、コンプライアンス機能、管理者ロール、AWS Secrets ManagerとのCI/CD連携など、多数の改善が追加されています。\n\n💜 今回のリリースには 314件のコミュニティ貢献 が寄せられました！まさに「みんなが参加できる」ということを証明してくれました。\n\n👉 [18.3リリースノート全文はこちら](https://about.gitlab.com/ja-jp/blog/gitlab-18-03-release/)\n\n## **エージェント駆動のCIモダナイゼーション**\n\n**「よりスマートなパイプライン。より速い投資回収。」**\n\n![エージェント駆動のCIモダナイゼーション](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756955192/g0ayfgu2zudqn53so11z.png)\n\n企業がCI/CDパイプラインを最新化しようとする時、現実には「時間がかかる」「コストが高い」「スケールが難しい」といった課題が立ちはだかります。\n\nそこでGitLabの新ホワイトペーパーが提案するのが Agentic CI Modernization。GitLab Duo Agent Platformを活用することで、ラボテストでは以下の成果が示されています：\n\n⏱️ パイプライン変換が 81%高速化（240分 → 45分）\n💸 コンサル費用が 83%削減\n📉 モダナイゼーション期間が 2.5年 → 9か月に短縮\n\n従来のやり方はツール乱立やコンテキスト切り替え、コンサル依存の進め方で停滞しがちですが、エージェント型AIが状況を変えます。\n\nGitLab Duo Agentsはレガシーパイプラインを解析し、アーキテクチャや依存関係を理解したうえでGitLab CI設定を自動生成。これによりエラーを最大70%削減し、価値提供までのスピードを大幅に加速します。\n\nこのホワイトペーパーで語られる内容は単なる時間短縮の話ではありません。目指しているのは、プラットフォームエンジニアリングを大規模に実現し、開発者が共通のCI/CDコンポーネントをサービスとして利用できる環境をつくることです。\n\n👉 [ホワイトペーパーはこちらから](https://about.gitlab.com/the-source/ai/cicd-modernization-break-down-barriers-with-agentic-ai/)\n\n## **カスタマースポットライト：Deutsche Telekom**\n\n![カスタマースポットライト：Deutsche Telekom](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756955192/jp9ywqbc5k4i3jt66koc.png)\n\n18か月のリリースサイクルが、わずか3か月へ。分断されたツール群から、13,000人以上が使う統合されたGitLabプラットフォームへ。手作業のセキュリティチェックから、GitLab Ultimateによる完全統合スキャンへ。\n\n2億4,000万人以上のモバイル顧客を抱える通信大手Deutsche Telekom社。いまや単なるネットワークプロバイダーにとどまらず、DevSecOpsの先駆者へと変貌を遂げています。\n\nGitLabに集約したことで、同社IT部門はCI/CDの全社展開に成功し、“インナーソース”文化を育成。いまやアジャイルプログラムの75%がGitLabに依存しています。\n\n「セキュリティが1つのアプリに統合されていれば、すぐに問題箇所へ飛んで修正できます（中略）これによりセキュリティ対応の効率が大幅に向上しました。」\n\n— Thorsten Bastian, Business Owner IT, CI/CD Hub, Telekom IT\n\n👉 [ストーリー全文はこちら](https://about.gitlab.com/customers/deutsche-telekom/)\n\n## **ドキュメントが新しく生まれ変わりました**\n\n![ドキュメントが新しく生まれ変わりました](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756955192/osfy2yhgsrfj5tgmrydu.png)\n\n**新しい [docs.gitlab.com](http://docs.gitlab.com) にようこそ！**\nゼロから再構築し、わかりやすさ、スピード、使いやすさが大幅アップしました。\n\n新しくなったポイント：\n\n* どのデバイスでも快適に使える、モダンなインターフェース\n* 必要な情報にすぐたどり着けるスマート検索\n* より直感的なナビゲーションとアクセシビリティ向上\n\n[経験豊富なDevSecOpsプロから、これから始める方まで。新しいドキュメントはあなたの強い味方 →](https://docs.gitlab.com/)\n\n## **今月のイベントで会いましょう**\n\n![今月のイベントで会いましょう](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756955192/rmjcneaitcox1n2xiq1b.png)\n\n今月はサンパウロからシンガポールまで、GitLabが世界各地へ！ぜひブースに立ち寄って、ノベルティをゲットし、DevSecOpsの最新情報を語り合いましょう。\n\n🇧🇷 Google Cloud Summit Brazil 👉 [[登録はこちら](https://cloudonair.withgoogle.com/events/google-cloud-summit-brasil-2025)]\n🇸🇬 EPIC Conference Singapore 👉 [[登録はこちら](https://events.gitlab.com/e/event-epic-conference-singapore)]\n🇨🇭 Google Cloud Summit Switzerland 👉 [[登録はこちら](https://cloudonair.withgoogle.com/events/google-cloud-summit-switzerland-2025)]\n\nGitLab Duoを実際に体験し、新しいアイデアやインスピレーション、次の大きなデプロイ成功のヒントを持ち帰りませんか？\n\n## **今月のおすすめ記事**\n\n![今月のおすすめ記事](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756955489/ipkozh9ai6wbmhxmv3gn.png)\n\nエージェント型AIのブレークスルーから、大規模なソフトウェアのセキュリティ対策まで、今月の注目記事をご紹介します。\n\n* [](https://www.scworld.com/podcast-segment/14186-softwares-agentic-future-is-coming-how-cisos-can-prepare-today-josh-lemos-bh25-1)\u003Chttps://www.devopsdigest.com/gitlab-signs-strategic-collaboration-agreement-with-aws-to-deliver-secure-devsecops-to-gitlab>\n* [](https://thenewstack.io/how-intuitive-machines-used-devsecops-to-reach-the-moon/)\u003Chttps://thenewstack.io/how-intuitive-machines-used-devsecops-to-reach-the-moon/>\n* [](https://techvoices.com/video-podcasts/gitlabs-emilio-salvador-on-how-ai-agents-are-reshaping-software-development/)\u003Chttps://techvoices.com/video-podcasts/gitlabs-emilio-salvador-on-how-ai-agents-are-reshaping-software-development/>\n* [](https://techvoices.com/video-podcasts/gitlabs-emilio-salvador-on-how-ai-agents-are-reshaping-software-development/)\u003Chttps://techvoices.com/video-podcasts/gitlabs-emilio-salvador-on-how-ai-agents-are-reshaping-software-development/>\n* [](https://leaddev.com/technical-direction/are-you-ready-for-ai-agents)\u003Chttps://leaddev.com/technical-direction/are-you-ready-for-ai-agents>\n* [](https://leaddev.com/technical-direction/are-you-ready-for-ai-agents)\u003Chttps://leaddev.com/technical-direction/are-you-ready-for-ai-agents>\n* [](https://www.scworld.com/podcast-segment/14186-softwares-agentic-future-is-coming-how-cisos-can-prepare-today-josh-lemos-bh25-1)\u003Chttps://www.scworld.com/podcast-segment/14186-softwares-agentic-future-is-coming-how-cisos-can-prepare-today-josh-lemos-bh25-1>\n* [](https://www.devopsdigest.com/from-ai-risk-to-business-resilience-prompt-engineering-as-strategic-security-capability)\u003Chttps://www.devopsdigest.com/from-ai-risk-to-business-resilience-prompt-engineering-as-strategic-security-capability>\n* [](https://www.devopsdigest.com/from-ai-risk-to-business-resilience-prompt-engineering-as-strategic-security-capability)\u003Chttps://www.devopsdigest.com/from-ai-risk-to-business-resilience-prompt-engineering-as-strategic-security-capability>\n* [](https://www.scworld.com/podcast-segment/14186-softwares-agentic-future-is-coming-how-cisos-can-prepare-today-josh-lemos-bh25-1)\u003Chttps://www.scworld.com/podcast-segment/14186-softwares-agentic-future-is-coming-how-cisos-can-prepare-today-josh-lemos-bh25-1>\n\nそしてまだの方は、ぜひAIがソフトウェアイノベーションに与える影響に関するC-suiteレポート もチェックしてみてください。\n\n* [](https://about.gitlab.com/software-innovation-report/)\u003Chttps://about.gitlab.com/software-innovation-report/> \\\n  （日本に特化したレポートは近日中に公開予定）\n\n## **最後に、今月の名言を**\n\nパイプラインの最新化、ツール統合、エージェント型AIの導入。大きな変革はときにハードルが高く見えますが、すべては小さな一歩から始まります。\n\n> 「それが成し遂げられるまでは、いつも不可能に見えるものだ。」\n>  — ネルソン・マンデラ\n\n難しいパイプラインに直面したら、「不可能」とは「まだ実現していないだけ」と思い出してください。\n\n### **次回まで**\n\n今月も読んでいただきありがとうございました！感想やフィードバックはぜひXでのメンションやコメントでシェアしてください。お待ちしています。\n\nそれではまた来月、お会いしましょう！Happy Merging！\n\n[Fatima Sarah Khalid](https://www.linkedin.com/in/sugaroverflow/)｜Developer Advocate, GitLab\n\n🧡 このニュースレターが気に入った方は、ぜひチームにもシェアしてください。\n 👉 [The Developer Show](https://www.linkedin.com/feed/update/urn:li:activity:7340777670714019840)の購読もお忘れなく！\n\n![Fatima Sarah Khalid](https://res.cloudinary.com/about-gitlab-com/image/upload/v1754369416/is5jitqrtujnkmmkijlg.png)","9月号のMonday Mergeでは、最新リリース、注目のホワイトペーパー、そして大規模なDevSecOpsの取り組み事例をお届け。",{"featured":6,"template":685,"slug":1205},"monday-merge-2025-september-8","content:ja-jp:blog:monday-merge-2025-september-8.yml","Monday Merge 2025 September 8","ja-jp/blog/monday-merge-2025-september-8.yml","ja-jp/blog/monday-merge-2025-september-8",{"_path":1211,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1212,"content":1218,"config":1225,"_id":1227,"_type":14,"title":1228,"_source":16,"_file":1229,"_stem":1230,"_extension":19},"/ja-jp/blog/online-retailer-bol-tackles-growing-compliance-needs-with-gitlab",{"title":1213,"description":1214,"ogTitle":1213,"ogDescription":1214,"noIndex":6,"ogImage":1215,"ogUrl":1216,"ogSiteName":669,"ogType":670,"canonicalUrls":1216,"schema":1217},"大手EC会社のBol社がGitLabでコンプライアンス管理に成功した事例","ヨーロッパの大手EC会社が常に変化するコンプライアンスに、GitLabでどのように対処しているかを事例を通してご紹介します。ぜひお読みください。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665465/Blog/Hero%20Images/blog-image-template-1800x945__15_.png","https://about.gitlab.com/blog/online-retailer-bol-tackles-growing-compliance-needs-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"大手EC会社のBol社がGitLabでコンプライアンス管理に成功した事例\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Julie Griffin\"}],\n        \"datePublished\": \"2024-06-12\",\n      }",{"title":1213,"description":1214,"authors":1219,"heroImage":1215,"date":1221,"body":1222,"category":774,"tags":1223,"updatedDate":1224},[1220],"Julie Griffin","2024-06-12","国際的な大手小売業のBol社がGitLabを利用して、どのように開発効率化とソフトウェア規制遵守を実現しているのかご紹介します。\n\n[GitLab Ultimate](https://about.gitlab.com/ja-jp/pricing/ultimate/)プランを利用しているBol社は、オランダとベルギーにおける最大級のオンライン小売業（EC会社）です。同社のマーケットプレイスでは、5万ものパートナーが商品を販売しており、商品ラインナップ数は3,800万点に上ります。同社は革新的なテクノロジーを利用することで開発効率を向上させ、めまぐるしく変化するソフトウェアのコンプライアンス規制を遵守し、広範な顧客基盤からの信頼を維持しています。\n\n## BolがGitLabによってコンプライアンス管理に成功した事例\n\nBol社はGitLabの[DevSecOpsプラットフォーム](https://about.gitlab.com/ja-jp/platform/)を自社チームに導入し、デベロッパーが迅速かつ安全にプロジェクトを完了できるようにすると同時に、手動で行っていたコンプライアンスチェックにかかる工数を数千時間から大幅に削減しました。\n\nBol社の収益が増加するにつれて、同社が遵守しなければならないコンプライアンスルールや規制も増加しました。一般データ保護規則 （GDPR）や国際標準化機構 （ISO）の要件、EU人工知能法など、厳格で頻繁に更新される規制に準拠するためには、ソフトウェアを継続的に適応させる必要があります。\n\nBol社のCI/CD開発チームエンジニアリングマネージャであるGuus Houtzager氏は、次のように述べています。\n\n「GitLabは、当社が成長し、ソフトウェアとデベロッパーが順守すべき要件が増大する中で、柔軟性と競争力の維持に大きく貢献しています。私たちが抱えていたこれら最大の課題に対し、GitLabを活用することで解決を図りました。」\n\nBol社は2016年に[GitLabコミュニティ](https://about.gitlab.com/community/)に参入し、その数年後に[GitLab Premium](https://about.gitlab.com/ja-jp/pricing/premium/)を導入、2024年にはGitLab Ultimateにアップグレードしました。これにより、コンプライアンスの負荷増に対応するとともに、チームがより迅速かつ効率的にプロジェクトに取り組むことができる基盤を作り上げてきました。\n![bol社のGitLabに対するコメント](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675638/Blog/Content%20Images/bol_Blog_-_Guus.png)\n\n## 毎月数千時間の開発時間の節約\n\nGitLabを活用することで、Bol社のDevSecOpsチームはコンプライアンス設定とチェックを自動化するポリシーを設定できます。これにより、[コンプライアンスへの取り組みに関する一貫性と拡張性を実現](https://about.gitlab.com/ja-jp/solutions/application-security-testing/)し、人為的エラーによるリスクを軽減できます。コンプライアンスのガードレールが設定されたことで、850人の開発者チームは革新的で安全なソフトウェアの開発により多くのエネルギーを注ぐことができます。\n\nHoutzager氏は、次のように語りました。\n「GitLab Ultimateを導入したことで、初めからコンプライアンス規制の範囲内で仕事ができるという強制的なコンプライアンスパイプラインを作ることができます。これにより、デベロッパーの作業時間を月間で数千時間ほど節約できました。」\n\nデベロッパーがコンプライアンス規制の負担を気にする必要がなくなり、コーディングに集中できるようになったことで、Bol開発チームの効率は飛躍的に向上しました。時間の節約だけでなく、チームは将来のコンプライアンス規制にも対応できると自信を持つようになりました。\n\nHoutzager氏はさらに続けます。\n「私たちは、GitLabがコンプライアンスとソフトウェアセキュリティの両方に役立つことを信じています。GitLabには新しい規制に従って構築できるツールキットがあります。将来のことは誰にもわかりませんが、たとえ新しい規制が増えたとしても、GitLabであればどのような事態にも対処できると考えています。」\n\n## 顧客と事業を守るためのシフトレフト\n\nヨーロッパ小売業界大手の1つであるBol社にとって、「信頼」はビジネスモデルの重要な柱です。同社は住所や注文明細など大量の個人データを取り扱っています。規制による罰金が懸念される一方で、、顧客からの信頼維持も重要な課題です。セキュリティの重要性は言うまでもありません。\n\nHoutzager氏は次のように述べました。\n「オランダやベルギーのほとんどの住民が、これまでにBol社での購買経験があり、私たちを信頼してくれています。彼らは弊社が顧客の支払い情報を適切に扱うと信じています。弊社がお客様の個人識別情報（PIIデータ）を販売したりせず、データを安全に保管していると信じています。」\n\n顧客データとビジネスを保護するために、Bol社はシフトレフトセキュリティを導入し、デベロッパーが開発プロセスの早い段階でエラーや脆弱性を発見できるようにしました。しかし、適切なツールを使用せずにシフトレフトすると、発見した問題を修正するためにデベロッパーが膨大な時間を費やすことになる可能性があります。\n\nHoutzager氏はシフトレフトの実施について、次のように説明を加えました。\n「チームが作業を効率的に実行できるようにするツールやサポート、プロセスを提供しないままでシフトレフトすると、チームは手順や手作業において困難を抱えます。」\n\nGitLab Ultimateを利用すれば、同社のセキュリティ要件を満たすレイアウトや権限モデルを設定できるため、デベロッパーは顧客とビジネスデータを保護しながら、プロジェクトを迅速に立ち上げリリースできます。また、DevSecOpsプラットフォームには、デベロッパーが行った変更や修正を追跡し、コンプライアンスレコードに記録するという機能もあります。\n\n## AIとともに見据える未来\n\nBol社は今後、クラウド統合や人工知能 (AI) 機能、セキュリティ機能など、GitLab Ultimateをさらに活用していく予定です。\n\n同社は、AI機能が搭載された[GitLab Duo](https://about.gitlab.com/ja-jp/gitlab-duo/)がソフトウェア開発のスケールアップを支援してくれると期待しています。GitLab Duoは、安全ななソフトウェアの迅速な構築からデベロッパーエクスペリエンスの向上まで幅広く貢献します。\n\nHoutzager氏は、AIの可能性と利用条件について、次のように述べています。\n「私たちがAIを使うには、状況が整っている必要があります。そして、AIがどのように役立つかを必ず検討します。他の企業の皆さんと同じように、ソフトウェア開発のライフサイクル全体を見通しながら、AIによって改善できる箇所を探しています。例えば、コード作成の場面や一連のプロセスの他の場面で、どのようにAIを活用できるかなどを常に考えています。」\n\n> GitLabのさらなる魅力については、 [GitLabを選ぶ10の理由](https://about.gitlab.com/ja-jp/why-gitlab/)をご覧ください。\n",[9,753,776,679],"2024-11-28",{"slug":1226,"featured":6,"template":685},"online-retailer-bol-tackles-growing-compliance-needs-with-gitlab","content:ja-jp:blog:online-retailer-bol-tackles-growing-compliance-needs-with-gitlab.yml","Online Retailer Bol Tackles Growing Compliance Needs With Gitlab","ja-jp/blog/online-retailer-bol-tackles-growing-compliance-needs-with-gitlab.yml","ja-jp/blog/online-retailer-bol-tackles-growing-compliance-needs-with-gitlab",{"_path":1232,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1233,"content":1239,"config":1246,"_id":1248,"_type":14,"title":1249,"_source":16,"_file":1250,"_stem":1251,"_extension":19},"/ja-jp/blog/prepare-now-docker-hub-rate-limits-will-impact-gitlab-ci-cd",{"title":1234,"description":1235,"ogTitle":1234,"ogDescription":1235,"noIndex":6,"ogImage":1236,"ogUrl":1237,"ogSiteName":669,"ogType":670,"canonicalUrls":1237,"schema":1238},"今すぐ対策を：Docker Hubのレート制限がGitLab CI/CDに与える影響","Docker Hubの新しいプルレート制限がGitLabのパイプラインにどのような影響を与えるか、また、その影響によってCI/CDパイプラインが中断されるのを防ぐ対策を解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662488/Blog/Hero%20Images/blog-image-template-1800x945__3_.png","https://about.gitlab.com/blog/prepare-now-docker-hub-rate-limits-will-impact-gitlab-ci-cd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"今すぐ対策を：Docker Hubのレート制限がGitLab CI/CDに与える影響\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tim Rizzi\"}],\n        \"datePublished\": \"2025-03-24\",\n      }",{"title":1234,"description":1235,"authors":1240,"heroImage":1236,"date":1241,"body":1242,"category":1243,"tags":1244,"updatedDate":1245},[700],"2025-03-24","2025年4月1日より、DockerはDocker\nHubに新たな[プルレート制限](https://docs.docker.com/docker-hub/usage/)を導入します。これは、GitLabで稼働しているものを含め、業界全体のCI/CDパイプラインに大きな影響を及ぼす可能性があります。最も大きな変更点は、未認証ユーザーに対して1時間あたり10回までというプル制限が設けられることです。\n\n\n## 変更点\n\n\n4月1日から、Dockerは以下のプルレート制限を適用します。\n\n\n| ユーザータイプ | 1時間あたりのプルレート制限 | パブリックリポジトリ数 | プライベートリポジトリ数 |\n|-----------|--------------------------|-------------------------------|--------------------------------|\n| Business、Team、Pro（認証済） | 無制限（フェアユース） | 無制限 | 無制限 |\n| Personal（認証済） | 100 | 無制限 | 最大1つ |\n| 未認証ユーザー | IPv4アドレスまたはIPv6/64サブネットごとに1時間あたり10回 | 該当なし | 該当なし |\n\n\n\u003Cp>\u003C/p>\n\nこの変更が重要な理由は以下のとおりです。\n\n\n* GitLabの依存プロキシは現在、未認証ユーザーとしてDocker Hubからプルしています。\n\n* 依存プロキシを使用していないほとんどのCI/CDパイプラインは、未認証ユーザーとしてDocker Hubから直接プルしています。\n\n* GitLab.comのホステッドランナーでは、複数のユーザーが同じIPアドレスやサブネットを共有することがあり、全体がこの制限の対象になります。\n\n\n## GitLabユーザーへの影響\n\n\n**Docker Hubからの直接プルに関する影響**\n\n\nCI/CDパイプラインがDocker\nHubから認証なしで直接イメージをプルしている場合、IPアドレスごとに1時間あたり10回の制限が適用されます。頻繁に実行されるパイプラインや、同じランナーインフラを共有している複数プロジェクトでは、この制限にすぐに達してしまい、パイプラインの失敗が発生する可能性があります。\n\n\n**GitLab依存プロキシへの影響**\n\n\nGitLabの依存プロキシ機能は、DockerイメージをGitLab内にキャッシュすることでパイプラインの高速化や外部依存関係の削減を実現します。ただし、現在の実装では未認証ユーザーとしてDocker\nHubからプルしているため、これも1時間あたり10回という制限の対象になります。\n\n\n**ホステッドランナーへの影響**\n\n\nGitLab.comのホステッドランナーでは、[Google\nCloudのプルスルーキャッシュ](https://cloud.google.com/artifact-registry/docs/pull-cached-dockerhub-images?hl=ja)を使用しています。これにより、よく使われるイメージがミラーされ、レート制限を回避できます。`.gitlab-ci.yml`ファイル内で`image:`または`services:`として定義されたジョブイメージは、レート制限の影響を受けません。\n\n\n一方で、ランナー環境内でイメージをプルするケースではやや複雑になります。ランナー実行中にイメージをプルする最も一般的なユースケースは、Docker-in-DockerやKanikoを使ってイメージをビルドする場合です。このシナリオでは、`Dockerfile`で指定されたDocker\nHubのイメージが直接プルされるため、レート制限の影響を受ける可能性があります。\n\n\n## GitLabの対応\n\n\nこの問題を緩和するため、GitLabでは以下の対応を進めています。\n\n\n* **依存プロキシの認証：**\nGitLabの[依存プロキシ機能](https://gitlab.com/gitlab-org/gitlab/-/issues/331741)にDocker\nHubの認証のサポートを追加しました。これにより、依存プロキシは認証済みユーザーとしてDocker\nHubからイメージをプルできるようになり、レート制限が大幅に緩和されます。\n\n* **ドキュメントの更新：** Docker\nHubのパイプライン認証の設定に関する明確なガイダンスを提供するために、[ドキュメント](https://docs.gitlab.com/user/packages/dependency_proxy/#configure-credentials)を更新しました。\n\n* **内部インフラの整備：** GitLab.comのホステッドランナーへの影響を最小限にするため、内部インフラを整備中です。\n\n\n## ユーザー側でできる対策\n\n\n**オプション1：パイプラインでDocker Hub認証を設定する**\n\n\nDocker\nHubから直接プルしているパイプラインでは、認証を設定することでレート制限を1時間あたり100回（または有料プランなら無制限）まで増やせます。\n\n\nDocker\nHubの認証情報をプロジェクトまたはグループのCI/CD変数に追加してください（`.gitlab-ci.yml`には追加しないでください）。`DOCKER_AUTH_CONFIG`\nCI/CD変数の正しい設定方法については、[Dockerイメージの使用に関するドキュメント](https://docs.gitlab.com/ci/docker/using_docker_images/#use-statically-defined-credentials)を参照してください。\n\n\n**オプション2：GitLabのコンテナレジストリを使用する**\n\n\n頻繁に使用するDockerイメージを[GitLabのコンテナレジストリ](https://docs.gitlab.com/user/packages/container_registry/)にプッシュすることで、CI/CDの実行中にDocker\nHubからプルする必要がなくなります。\n\n\n1. Docker Hubからイメージをプルします\n\n2. GitLabコンテナレジストリにタグ付けします\n\n3. GitLabコンテナレジストリにプッシュします\n\n4. パイプラインをGitLabコンテナレジストリからプルするよう更新します\n\n\n```\n\ndocker pull busybox:latest\n\ndocker tag busybox:latest $CI_REGISTRY_IMAGE/busybox:latest\n\ndocker push $CI_REGISTRY_IMAGE/busybox:latest\n\n```\n\n\nそれから、`.gitlab-ci.yml`で以下のように記述します。\n\n\n`image: $CI_REGISTRY_IMAGE/busybox:latest`\n\n\n**オプション3：GitLabの依存プロキシを使用する**\n\n\nGitLabの依存プロキシ機能を使うことで、Dockerイメージをキャッシュしてプロキシ経由で取得できるため、外部依存関係を減らし、レート制限の問題を軽減できます。\n\n\n現在の認証オプションは以下のとおりです。\n\n* GitLab 17.10：[GraphQL\nAPI](https://docs.gitlab.com/user/packages/dependency_proxy/#configure-credentials-using-the-graphql-api)を使って、依存プロキシ用のDocker\nHub認証を設定\n\n* GitLab 17.11：グループ設定に新しく追加されたUIベースの設定を使用（GitLab.comでは既に利用可能）\n\n\n認証が正しく設定されると、以下の操作が可能になります。\n\n\n1. グループの依存プロキシ設定でDocker Hubの認証情報を設定する\n  - GitLab 17.11以降（またはGitLab.com）：グループ設定 > パッケージとレジストリ > 依存プロキシで設定\n  - GitLab 17.10：GraphQL APIで認証を設定\n2. CI/CD設定で依存プロキシURLを使用するよう、パイプラインを更新する\u003Cbr>\n\n`image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/busybox:latest`\n\n\n**オプション4：Docker Hubの有料プランを検討する**\n\n\nDocker\nHubの利用が多い組織の場合は、プル回数が無制限の有料Dockerサブスクリプション（TeamまたはBusiness）へのアップグレードが最も簡単な解決策となる場合があります。\n\n\n## Docker Hubのレート制限による影響を減らすベストプラクティス\n\n\nどのオプションを選ぶ場合でも、Docker Hubのレート制限の影響を最小限に抑えるために、以下のベストプラクティスを参考にしてください。\n\n\n* `latest`タグではなく、特定のバージョンタグを使用して不要なプルを避ける\n\n* Dockerファイルを統合し、同じベースイメージを複数のプロジェクトで使い回す\n\n* あまり重要でないパイプラインは、ピーク時間を避けて実行するようスケジュールする\n\n* キャッシュを有効活用し、同じイメージを繰り返しプルするのを避ける\n\n\n**注：** Docker\nHubの[ドキュメント](https://docs.docker.com/docker-hub/usage/pulls/#pull-definition)によると、プル回数はイメージのサイズやレイヤー数ではなく、manifestを取得した時点で1回とカウントされます。\n\n\n## スケジュールと今後の流れ\n\n\n**現在**\n  * Docker Hubからの直接プルに認証を実装します\n* GitLab.comユーザーは以下のいずれかで依存プロキシ認証を設定できます\n    * GraphQL API\n    * グループ設定のUI\n  * Self-ManagedのGitLab 17.10ユーザーはGraphQL APIを使用して依存プロキシ認証を設定できます\n\n**2025年4月1日**\n  * Docker Hubのレート制限が始まります\n\n**2025年4月17日**\n  * Self-Managedインスタンス向けの依存プロキシ認証機能をUIに追加したGitLab 17.11がリリースされます\n\nパイプラインの予期せぬ失敗を回避するために、可能な限り速やかに対応することをおすすめします。多くのユーザーにとっては、Docker\nHub認証を使用して依存プロキシを設定することが最も効率的な長期的解決策となります。\n\n\n>\nご質問がある場合や、実装に関してサポートが必要な場合は、[こちらのイシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/526605)をご覧ください。GitLabのチームによる対応が確認できます。\n\n\n\u003Cbr>\u003Cbr>\n\n*監修：川瀬 洋平 [@ykawase](https://gitlab.com/ykawase)\n\n（GitLab合同会社 カスタマーサクセス本部 シニアカスタマーサクセスマネージャー）*\n","bulletin-board",[9,1162,679],"2025-03-31",{"slug":1247,"featured":91,"template":685},"prepare-now-docker-hub-rate-limits-will-impact-gitlab-ci-cd","content:ja-jp:blog:prepare-now-docker-hub-rate-limits-will-impact-gitlab-ci-cd.yml","Prepare Now Docker Hub Rate Limits Will Impact Gitlab Ci Cd","ja-jp/blog/prepare-now-docker-hub-rate-limits-will-impact-gitlab-ci-cd.yml","ja-jp/blog/prepare-now-docker-hub-rate-limits-will-impact-gitlab-ci-cd",{"_path":1253,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1254,"content":1259,"config":1266,"_id":1268,"_type":14,"title":1269,"_source":16,"_file":1270,"_stem":1271,"_extension":19},"/ja-jp/blog/seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale",{"title":1255,"description":1256,"ogTitle":1255,"ogDescription":1256,"noIndex":6,"ogImage":695,"ogUrl":1257,"ogSiteName":669,"ogType":670,"canonicalUrls":1257,"schema":1258},"Jira2Labを使用してJiraからGitLabへの大規模な移行をシームレスに実現","複雑なデータ移行の処理、スケーラビリティの向上、効率的な統合を保証するJira2GitLabを使用することで、JiraからGitLabへの大規模な移行がどのように簡素化されるかをご紹介します。","https://about.gitlab.com/blog/seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Jira2Labを使用してJiraからGitLabへの大規模な移行をシームレスに実現\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Maximilien Belinga\"}],\n        \"datePublished\": \"2024-10-10\",\n      }",{"title":1255,"description":1256,"authors":1260,"heroImage":695,"date":1262,"body":1263,"category":1264,"tags":1265},[1261],"Maximilien Belinga","2024-10-10","[2月にAtlassianサーバーのサポートが終了した](https://about.gitlab.com/ja-jp/move-to-gitlab-from-atlassian/)ことで、多くのユーザーがAtlassian CloudやAtlassian Data Centerのような代替製品を検討する必要に迫られています。その一方、Atlassianサーバーを使用している企業の間では、より柔軟でコスト効率に優れ、DevSecOpsの堅牢な統合を実現できるアジャイル計画ソリューションを求める動きが広がっています。こうした企業は、移行中にデータ量、カスタマイズ、ユーザーマッピング、パフォーマンス、データ整合性に関する課題にも取り組む必要があります。そこで役に立つのが、[GitLabのJira2Lab](https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/jira2lab)です。Jira2Labは、CI/CDを完全に統合し、JiraからGitLabへの大規模な移行を実現するシームレスなソリューションを提供します。\n\n## 大規模なJiraの移行時に発生する問題\n\nJiraからGitLabへの移行は、特に複雑なワークフローや何千ものイシューを抱える企業では、非常に大変な作業となる場合があります。移行時に発生する最も一般的な課題は次のとおりです。\n\n- **大規模なデータ移行**：イシューや添付ファイル、コメント、プロジェクト数が多ければ多いほど、パフォーマンスの問題やデータ損失を生じさせずに、それらを移行するのは難しくなります。\n\n- **カスタムフィールドとワークフロー**：Jiraインスタンスには、GitLabにそのままではマッピングされないカスタムワークフローやフィールド、イシュータイプが含まれていることがよくあります。このようなギャップがあると、既存のツールではこれらの要素を変換するために手作業が必要となることが多いため、移行時に手間やストレスが生じます。\n\n- **包括的なDevSecOps機能の統合の欠如**：多くの移行ツールではプロジェクト管理データを処理できるものの、GitLabで提供されている包括的なDevSecOps機能は含まれていません。そのため、移行後に[CI/CD](https://about.gitlab.com/ja-jp/topics/ci-cd/)パイプラインとソース管理システムを手動で設定する手間がかかります。\n\n## Jira2Labについて\n\nJira2Labは、JiraからGitLabへの大規模な移行時に発生する特有の課題を解決するためにゼロから設計されました。単にデータを移行するだけでなく、ダウンタイムやデータ損失を引き起こすことなく、GitLabの強力なDevSecOps環境にシームレスに移行できるようにチームを支援します。\n\n### Jira2Labの主な機能\n\n1. 大規模なデータ処理の効率化\u003Cbr>\nJira2Labは、パフォーマンスを低下させることなく、複数のプロジェクトにわたって数千ものイシュー、添付ファイル、コメント、カスタムフィールドを処理できるように最適化されています。簡単にスケールできるため、最大規模の企業移行にも対応可能です。\n\n2. カスタムワークフローとフィールドのマッピング\u003Cbr>\nJira2Labの数ある機能の中でもひときわ目立つのは、JiraからGitLabへカスタムワークフローとフィールドを自動的にマッピングする機能です。このツールの柔軟なマッピング設定を活用することで、移行プロセス中の手作業が不要となり、JiraからGitLabにすべてをスムーズに移行できます。\n\n3. CI/CDパイプラインの統合\u003Cbr>\nJira2Labはイシューやプロジェクトを移行するだけでなく、GitLabのCI/CDパイプライン全体を移行プロセスに統合します。そのため、開発チームは移行後すぐに、自動テストやデプロイパイプラインなど、GitLabのDevSecOps機能を使い始められます。\n\n4. 移行テスト\u003Cbr>\nJira2Labは移行テストに対応しているため、大規模な移行を行う前に設定やワークフローをテストできます。テストを通じてあらゆる問題を早期に発見しておくことで、移行全体を中断することなく進められます。\n\n5. リアルタイムモニタリング\u003Cbr>\nJira2Labは、移行中のリアルタイムでのモニタリングとログ生成に対応しています。これらを活用することで、完全な透明性が確保され、すべてのステップがエラーなく正確に実行されていることを確認できます。\n\n6. 柔軟かつカスタマイズ可能\u003Cbr>\nJiraインスタンスに独自の設定やワークフローがある場合でも、Jira2Labは独自の要件に従って移行をカスタマイズできる柔軟性を備えているため、移行中に何かが失われることはありません。\n\n### JiraとGitLabの機能比較\n\nJiraからGitLabに移行することで、ワークフローの統合に加え、GitLab固有の高度な機能を利用できるようになります。各プラットフォームの主な機能を簡単に比較してみました。\n\n| **機能**             | **Jira**                        | **GitLab**                    |\n|-------------------------|----------------------------------|-------------------------------|\n| **イシュートラッキング**       | はい（高度にカスタマイズ可能）       | はい（DevSecOpsに統合されている）   |\n| **アジャイルボード**         | はい（Kanban、Scrum）             | はい（イシューボード、マイルストーン） |\n| **CI/CD**                | いいえ（外部ツールが必要）    | はい（ビルトインのCI/CD）           |\n| **ソース管理**       | いいえ（GitHub／Bitbucketが必要）  | いいえ（ネイティブGitサポート）       |\n| **DevSecOpsツール**         | 統合に制限あり            | DevSecOpsライフサイクル全体          |\n\nJira2Labでは、開発および運用に対するGitLabの統合されたアプローチが最大限に活用されており、イシュートラッキングからCI/CDパイプラインまで、すべての重要な要素をスムーズに移行可能です。\n\n## 移行方法\n\nJira2Labは、5段階からなる構造化された移行方法に基づき、中断を最小限に抑えてシームレスな移行を実現します。\n\n### 1. 調査と計画\n\nまずは、お客様のJiraの設定を十分に理解し、移行すべきすべてのカスタムワークフロー、フィールド、プロジェクトを特定します。この段階では、JiraとGitLabの機能を比較し、移行プロセスを細部まで計画するためのギャップ分析も行います。\n\n### 2. 設定\nこの段階では、移行ツールの設定に加え、JiraとGitLabの両方に必要な環境を設定します。移行開始前にすべての権限を確認し、Jiraデータのバックアップを設定する作業も、この段階で行います。\n\n### 3. 移行テスト\nデータセット全体を移行する前に、一部のプロジェクトで移行テストを実行して、移行プロセスやワークフロー、データの整合性をテストします。これにより、問題がある場合でも、プロセスの早い段階で特定して解決できます。\n\n### 4. 大規模な移行\n移行テストの結果を検証した後、全プロジェクトを対象に移行を行います。その際、ダウンタイムを最小限に抑え、開発チームがスムーズに移行を行えるようにします。\n\n### 5. 移行の完了および移行後のサポート\n移行完了後も、すべてのチームでGitLabを十分にご活用いただくために、引き続きサポートいたします。この段階では、ユーザートレーニングの提供に加え、必要な場合はJiraインスタンスの廃止も行います。\n\n## 事例：Jira2Labで大規模な移行に取り組む\n\nある大企業では最近、移行を実施する際に、50のプロジェクトにまたがる20,000件超のイシューをJiraからGitLabに移行する必要に迫られました。プロジェクトには高度にカスタマイズされたワークフロー、数千ものコメントや添付ファイルもあり、これらもすべて移行する必要がありました。\n\nJira2Labの活用により、以下を達成しました。\n\n- データを一切失うことなく、カスタムフィールドを含むすべてのデータを移行。\n- GitLab内にCI/CDパイプラインを設定したことで、移行後すぐにチームが作業を継続可能に。\n- 2つのプロジェクトで移行テストを実施することで、組織全体を対象に移行を進める前に、ワークフローの軽度の矛盾を特定して修正。\n\n結果として、大きなダウンタイムも発生することなく、全プロセスが予定していた期限内に完了し、GitLabへのシームレスな移行を実現できました。\n\n## Jira2Labを今すぐ利用する\n\nほかの移行ツールでは対応できない課題を解決できるJira2Labは、市場において注目を浴びています。大規模な移行に特化して設計されており、プロジェクト管理データのみを対象とする多くのツールとは異なり、GitLabのDevSecOpsライフサイクル全体と統合できます。カスタムワークフローのマッピング、およびCI/CDパイプラインの統合に対応するJira2Labは、GitLabへの移行時に開発ワークフローを強化したい企業にとって最適なソリューションです。\n\n> GitLabを使用した開発プロセスのスケーリングをご希望の場合は、GitLabの[プロフェッショナルサービスカタログ](https://about.gitlab.com/services/catalog/)をご覧ください。お客様が効率的かつ効果的に移行プロセスを進められるよう、当社チームで提供しているサポート内容をご紹介しています。GitLabによるJira2Labの個別デモをご希望の場合は、ページ下部のフォームからお問い合わせください。\n","agile-planning",[682,9,751,752,681],{"slug":1267,"featured":91,"template":685},"seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale","content:ja-jp:blog:seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale.yml","Seamlessly Migrate From Jira To Gitlab With Jira2lab At Scale","ja-jp/blog/seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale.yml","ja-jp/blog/seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale",{"_path":1273,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1274,"content":1282,"config":1291,"_id":1293,"_type":14,"title":1294,"_source":16,"_file":1295,"_stem":1296,"_extension":19},"/ja-jp/blog/tutorial-automated-release-and-release-notes-with-gitlab",{"title":1275,"description":1276,"ogTitle":1277,"ogDescription":1276,"noIndex":6,"ogImage":1278,"ogUrl":1279,"ogSiteName":669,"ogType":1280,"canonicalUrls":1279,"schema":1281},"チュートリアル：GitLabでリリースとリリースノートを自動化する","GitLabのChangelog APIを使用すると、リリースアーティファクト、リリースノートなどの変更をまとめた、包括的な変更履歴の生成を自動化できます。","チュートリアル：GitLabでリリース自動化とリリースノート自動生成","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659978/Blog/Hero%20Images/automation.png","https://about.gitlab.com/blog/tutorial-automated-release-and-release-notes-with-gitlab","記事","\n                        \n        {\"@context\": \" https://schema.org \",\n        \"@type\": \"Article\",\n        \"headline\": \"チュートリアル：GitLabでリリース自動化とリリースノート自動生成\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ben Ridley\"}],\n        \"datePublished\": \"2023-11-01\n      \",}",{"title":1277,"description":1276,"authors":1283,"heroImage":1278,"date":1285,"body":1286,"category":681,"tags":1287,"updatedDate":1290},[1284],"Ben Ridley","2023-11-01","***2025年の更新情報**  GitLab Changelog APIは進化を続けており、今回のブログでは取り上げていない優れた新機能も追加されています。たとえば、コミット履歴からテンプレート化された値を使ってカスタムの変更履歴を提供できるようになっています。[詳しくは、変更履歴に関する公式ドキュメントをご覧ください。](https://docs.gitlab.com/user/project/changelogs/)*\n\nユーザーが頼りにしているソフトウェアを開発する際には、各リリースでの変更点を効果的に伝えることが不可欠です。新機能や変更点、削除された内容をきちんと伝えることで、ユーザーはソフトウェアを最大限に活用でき、アップグレード時の思わぬトラブルも回避できます。\n\nこれまで、リリースノートの作成や変更履歴の管理は手間のかかる作業でした。デベロッパーが外部ツールで変更を追跡したり、リリースマネージャーがマージ履歴を手作業で確認したりする必要があったためです。GitLabのChangelog APIを使うと、Gitリポジトリに記録された豊富な履歴情報を活用して、リリースノートの作成や変更履歴の管理を簡単に行うことができます。\n\nこのチュートリアルでは、GitLabを使ったリリースの自動化について詳しく説明します。リリースアーティファクトの生成、リリースノートの作成、そしてユーザーに関係する変更点をすべて網羅した包括的な変更履歴の生成方法について取り上げます。\n\n## GitLabにおけるリリース\nまずは、GitLabでリリースがどのように機能しているのかを見ていきましょう。\n\nGitLabにおけるリリースとは、Gitタグで識別される特定のコードバージョンのことを指します。このリリースには、前回のリリース以降に行われた変更内容（およびリリースノート）や、そのバージョンのコードからビルドされた関連アーティファクト（Dockerイメージ、インストールパッケージ、ドキュメントなど）が含まれます。\n\nリリースは、GitLabのUIを使って作成・管理することもできますし、Release APIを呼び出すか、CIパイプラインの中に特別な`release`ジョブを定義することでも実現できます。このチュートリアルでは、CI/CDパイプライン内の`release`ジョブを使用します。これにより、テストやコードスキャンなどに使っている自動化プロセスを、リリースの実行にも拡張できるようになります。\n\nリリースを自動化するために、まず確認しなければならないことがあります。「リリースノートや変更履歴を作成するための変更情報は、どこから取得するのか？」その答えは、Gitリポジトリです。コミットメッセージやマージコミットの履歴を通じて、豊富な開発履歴が得られます。この情報を活用して、リリースノートや変更履歴を自動生成できるか試してみましょう。\n\n## コミットトレーラーの導入\n[コミットトレーラー](https://git-scm.com/docs/git-interpret-trailers)とは、Gitのコミットメッセージの末尾に追加する、構造化されたエントリーのことです。書き方はシンプルで、`\u003CHEADER>:\u003CBODY>`という形式のメッセージをコミットの最後に追加するだけです。これにより、`git`のコマンドラインインターフェース（CLI）ツールがそれらを解析して、他のシステムで利用できるようになります。たとえば、すでに使ったことがあるかもしれませんが、`git commit --sign-off`でコミットに署名する機能もこの仕組みを使っています。これは、`Signed-off-by: \u003Cあなたの名前>`というトレーラーをコミットに追加することで実現されています。このトレーラーには、好きな構造化データを自由に追加できるので、変更履歴に役立つ情報を保存する場所として非常に便利です。\n\n実際に、コミットに`Changelog: \u003Cadded/changed/removed>`というトレーラーを使うと、GitLabのChangelog APIがそれを解析し、自動的に変更履歴を生成してくれます！\n\nそれでは、実際のコードベースに変更を加えてリリースを行い、リリースノートと変更履歴のエントリーを生成する手順を見ていきましょう。\n\n## サンプルプロジェクトについて\n今回のブログでは、シンプルなPythonのWebアプリのリポジトリを使っています。仮に、このアプリケーションのバージョン1.0.0がちょうどリリースされたばかりで、これが現在のコードのバージョンだとしましょう。また、GitLab上で1.0.0のリリースも作成してありますが、これはまだ自動化されたリリースパイプラインを作っていないため、手動で作成しました。\n\n![GitLabのUI上で、バージョン1.0.0のリリースが表示されているスクリーンショット](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/1-0-release.png)\n\n## 変更の実施\n現在は開発を急ピッチで進めている段階なので、今日はアプリケーションのバージョン2.0.0のリリース作業を進めていきます。2.0.0リリースでは、アプリに新機能の「チャットボット」を追加します。そして、量子ブロックチェーン機能は削除します。これは最初のベンチャーキャピタル向けに必要だっただけなので、もう不要です。さらに、2.0.0リリースに向けて、CI/CDパイプラインに自動リリースジョブも追加する予定です。\n\nまずは不要な機能の削除から始めましょう。不要な部分を削除したマージリクエストを作成しました。ここで重要なのは、コミットメッセージに`Changelog: removed`トレーラーを含めることです。これを行う方法はいくつかあります。たとえば、最初からコミットに直接含めたり、インタラクティブリベースを使ってCLIで後から追加したりもできます。しかし、今回の状況では、一番簡単な方法は最後にGitLabの`Edit commit message`ボタンを使って、マージコミットにトレーラーを追加する方法だと思います。\n\n![GitLabのUIに表示された、使われていない機能を削除するマージリクエストのスクリーンショット](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/remove-unused-features-mr.png)\n\nこの方法を使えば、マージコミットのタイトルをもっと簡潔なものに変更することもできます。ここでは、マージコミットのタイトルを'Remove Unused Features'に変更しました。これは変更履歴のエントリに表示されます。\n\n次に、2.0.0リリース用の新機能を追加しましょう。ここでも、新機能を含む別のマージリクエストを開き、マージコミットを編集して`Changelog: added`トレーラーを追加し、コミットのタイトルをより簡潔に編集するだけです。\n\n![GitLabのUIに表示された、新しい機能を追加するマージリクエストのスクリーンショット](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/add-chatbot-mr.png) \n\nこれで、バージョン2.0.0をリリースする準備はほとんど整いました。ただし、今回は手動でリリースを作成したくありません。そのため、リリースの前に`.gitlab-ci.yml`ファイルにいくつかのジョブを追加し、コードに`2.0.0`のような新しいバージョンのタグを付けた際に、自動でリリース処理を行い、対応するリリースノートや変更履歴のエントリを生成するようにします。\n\n**注：**変更履歴のトレーラーを強制したい場合は、[Dangerのようなツールを使用して、マージリクエストの規則を自動的にチェックする](https://docs.gitlab.com/ee/development/dangerbot.html)方法を検討してください。\n\n## 自動リリースパイプラインの構築\nパイプラインを機能させるには、プロジェクトアクセストークンを作成し、GitLabのAPIを呼び出して変更履歴のエントリーを生成できるようにする必要があります。[APIスコープを指定してプロジェクトアクセストークンを作成](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html#create-a-project-access-token)し、それを`CI_API_TOKEN`という名前の[CI/CD変数として保存](https://docs.gitlab.com/ee/ci/variables/#define-a-cicd-variable-in-the-ui)します。この変数を参照して、APIの認証を行います。\n\n次に、`gitlab-ci.yml`ファイルに以下の2つの新しいジョブを追加します。\n```yaml\nprepare_job:\n  stage: prepare\n  image: alpine:latest\n  rules:\n  - if: '$CI_COMMIT_TAG =~ /^v?\\d+\\.\\d+\\.\\d+$/'\n  script:\n    - apk add curl jq\n    - 'curl -H \"PRIVATE-TOKEN: $CI_API_TOKEN\" \"$CI_API_V4_URL/projects/$CI_PROJECT_ID/repository/changelog?version=$CI_COMMIT_TAG\" | jq -r .notes > release_notes.md'\n  artifacts:\n    paths:\n    - release_notes.md\n\nrelease_job:\n  stage: release\n  image: registry.gitlab.com/gitlab-org/release-cli:latest\n  needs:\n    - job: prepare_job\n      artifacts: true\n  rules:\n  - if: '$CI_COMMIT_TAG =~ /^v?\\d+\\.\\d+\\.\\d+$/'\n  script:\n    - echo \"Creating release\"\n  release:\n    name: 'Release $CI_COMMIT_TAG'\n    description: release_notes.md\n    tag_name: '$CI_COMMIT_TAG'\n    ref: '$CI_COMMIT_SHA'\n    assets:\n      links:\n        - name: 'Container Image $CI_COMMIT_TAG'\n          url: \"https://$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA\"\n```\n\n上記の設定では、`prepare_job`が`curl`と`jq`を使ってGitLabのChangelog APIエンドポイントを呼び出し、その結果を`release_job`に渡して、リリースの作成を行います。詳しく見ていきましょう。\n- まず、先ほど作成したプロジェクトアクセストークンを使ってGitLabのChangelog APIを呼び出し、リリースノートを生成します。そして、その出力をアーティファクトとして保存します。\n- バージョンには`$CI_COMMIT_TAG`変数を使用しています。この仕組みが機能するには、タグにセマンティックバージョニング（たとえば`2.0.0`のような形式）を使用する必要があります。そのため、リリースジョブには、セマンティックバージョンのタグが付いているかどうかを確認する`rules`セクションを追加しています。\n\t- GitLabのChangelog APIを使うには、セマンティックバージョニングが必要です。この形式を用いて、現在のリリースとの比較対象となる最新リリースを特定します。\n- GitLabが提供する公式の`release-cli`イメージを使用しています。ジョブ内で`release`キーワードを使うには、この`release-cli`が必要です。\n- `release`キーワードを使用して、GitLab上にリリースを作成します。これは、リリースの作成と必須フィールドの入力のために確保されている特別なジョブキーワードです。\n- リリースの`description`には、ファイルを引数として渡すことができます。今回の例では、`prepare_job`で生成し、アーティファクトとしてこのジョブに渡されたファイルを使っています。\n- さらに、パイプラインの早い段階でビルドされているコンテナイメージも、リリースアセットとして追加しています。ビルドプロセスの中で作成したバイナリやドキュメントなども、パイプライン内でアップロード済みのURLを指定することで、リリースアセットとして添付できます。\n\n## 自動リリースの実行\nこの設定が完了すれば、リリースを実行するために必要なのは、バージョン付けのルールに従ったタグをリポジトリにプッシュすることだけです。CLIからタグをプッシュすることもできますが、ここではGitLabのUIを使って、mainブランチにタグを作成する例をご紹介します。タグを作成するには、サイドバーからコード > タグ > 新しいタグを選択します。\n![タグの作成方法を示すGitLabのUIのスクリーンショット](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/create-2-tag.png)\n\nタグの作成が完了すると、パイプラインの実行が開始されます。 GitLabのChangelog APIが、今回のリリースと前回のリリースの間に行われた変更をすべて含むリリースノートをMarkdown形式で自動的に生成します。 以下は、この例で生成されたMarkdownの出力結果です。\n\n```md\n## 2.0.0 (2023-08-25)\n\n### added (1 change)\n\n- [Add ChatBot](gl-demo-ultimate-bridley/super-devsecops-incorporated/simply-notes-release-demo@0c3601a45af617c5481322bfce4d71db1f911b02) ([merge request](gl-demo-ultimate-bridley/super-devsecops-incorporated/simply-notes-release-demo!4))\n\n### removed (1 change)\n\n- [Remove Unused Features](gl-demo-ultimate-bridley/super-devsecops-incorporated/simply-notes-release-demo@463d453c5ae0f4fc611ea969e5442e3298bf0d8a) ([merge request](gl-demo-ultimate-bridley/super-devsecops-incorporated/simply-notes-release-demo!3))\n```\n\nご覧のとおり、GitLabはgitのコミットトレーラーをもとに、リリースノートのエントリを自動で抽出しています。さらに、変更の詳細やディスカッションが確認できるよう、マージリクエストへのリンクも付けられています。\n\nそしてこちらが、最終的に作成されたリリースです。\n![GitLabのリリースUIに表示された、バージョン2.0.0のリリース画面](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/2-0-release.png)\n\n## 変更履歴の作成\n次に、変更履歴（すべてのリリースノートをまとめた履歴）を更新します。これを行うには、先ほど使用したChangelog APIエンドポイントに対して、`POST`リクエストを送ります。\n\n必要であれば、この処理をリリースパイプラインの一部として実行することも可能です。たとえば、prepareジョブの`script`セクションに以下の内容を追加します。\n```sh\n'curl -H \"PRIVATE-TOKEN: $CI_API_TOKEN\" -X POST \"$CI_API_V4_URL/projects/$CI_PROJECT_ID/repository/changelog?version=$CI_COMMIT_TAG\"\n```\n\n**この処理は実際にリポジトリを変更する点にご注意ください。** 具体的には、最新のリリースノートを`CHANGELOG.md`ファイルに追加するためのコミットが作成されます。\n![変更履歴ファイルを更新するコミットを示すリポジトリのスクリーンショット](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/changelog-api-commit.png)\n\nこれですべて完了です！`git`が提供する豊富な履歴情報と、便利なコミットトレーラーを活用することで、GitLabの強力なAPIとCI/CDパイプラインを使って、リリースプロセスとリリースノートの生成を自動化できます。\n\n> この記事で使用したプロジェクトを実際に確認したい場合は、[こちらのリンク](https://gitlab.com/gitlab-learn-labs/sample-projects/release-automation-demo)からご覧いただけます。\n",[1288,820,9,1289,751,1104],"チュートリアル","DevOps","2025-06-05",{"slug":1292,"featured":6,"template":685},"tutorial-automated-release-and-release-notes-with-gitlab","content:ja-jp:blog:tutorial-automated-release-and-release-notes-with-gitlab.yml","Tutorial Automated Release And Release Notes With Gitlab","ja-jp/blog/tutorial-automated-release-and-release-notes-with-gitlab.yml","ja-jp/blog/tutorial-automated-release-and-release-notes-with-gitlab",{"_path":1298,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1299,"content":1304,"config":1311,"_id":1313,"_type":14,"title":1314,"_source":16,"_file":1315,"_stem":1316,"_extension":19},"/ja-jp/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation",{"title":1300,"description":1301,"ogTitle":1300,"ogDescription":1301,"noIndex":6,"ogImage":718,"ogUrl":1302,"ogSiteName":669,"ogType":670,"canonicalUrls":1302,"schema":1303},"CI/CD完全ガイド：基礎から高度な実装まで","パイプラインの開発、デリバリー、セキュリティまでを自動化した継続的インテグレーションおよび継続的デプロイの最新手法をご紹介します。","https://about.gitlab.com/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"CI/CD完全ガイド：基礎から高度な実装まで\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sandra Gittlen\"}],\n        \"datePublished\": \"2025-01-06\",\n      }",{"title":1300,"description":1301,"authors":1305,"heroImage":718,"date":1307,"body":1308,"category":1145,"tags":1309,"updatedDate":1310},[1306],"Sandra Gittlen","2025-01-06","継続的インテグレーション／継続的デリバリー（[CI/CD](https://about.gitlab.com/ja-jp/topics/ci-cd/)）によって、ソフトウェアチームがユーザー向けに価値を生み出す方法は大きく変わりました。手動によるデプロイやインテグレーションに煩わされていた時代は過ぎ去り、最新の開発においては自動化、信頼性、そしてスピードが求められています。\n\nCI/CDの本質は、開発環境から本番環境にいたるまでコードが自動的かつ信頼性高く実行され、リアルタイムでフィードバックを取り入れるシームレスなパイプラインを作成することです。[CI](https://about.gitlab.com/ja-jp/topics/ci-cd/benefits-continuous-integration/)の目的は、コードの変更を頻繁に共有リポジトリにマージし、自動的にテストし検証することで、問題解決に伴う余分なコストが生じる前にチームが問題を早期に発見できるようにすることです。[CD](https://about.gitlab.com/ja-jp/topics/ci-cd/#what-is-continuous-delivery-cd)はこれをさらに発展させ、デプロイプロセスを自動化することで、リリースを予測可能でストレスなく行えるようにします。\n\nソフトウェア開発において手作業のプロセスや複雑なツールチェーンに頼るのではなく、堅牢なCI/CDパイプラインを使用してソフトウェアをビルド、テスト、デプロイできます。また、AIによってプロセスの効率化をさらに進め、品質、コンプライアンス、セキュリティチェックの一貫性を保ちながら、CI/CDパイプラインを自動的に設計することが可能になります。\n\nこのガイドでは、基本原則からベストプラクティス、高度な戦略まで、最新のCI/CDパイプラインに関する内容を説明します。また、先進企業がCI/CDをどのように使用して効果的に成果をあげているかについても取り上げます。このガイドでご紹介する内容は、DevSecOps環境をスケールし、[アジャイル](https://about.gitlab.com/ja-jp/topics/ci-cd/continuous-integration-agile/)で自動化された効率的な方法でソフトウェアを開発し、デリバリーする上で役立ちます。\n\nご紹介する内容：\n- 継続的インテグレーションとは\n- 継続的なデリバリーとは\n- ソースコード管理とCI/CDの関係\n- 現代のソフトウェア開発においてCI/CDを利用するメリット\n  - CI/CDと従来の開発の主な相違点\n- CI/CDの基礎を理解する\n  - CI/CDパイプラインとは\n- CI/CDの実装と管理のベストプラクティス\n  - CIのベストプラクティス\n  - CDのベストプラクティス\n- CI/CDの開始方法\n- セキュリティ、コンプライアンス、CI/CD\n- CI/CDとクラウド\n- 高度なCI/CD\n  - CI/CDにおける再利用と自動化\n  - AIによるパイプラインのトラブルシューティング\n- GitLab CI/CDへの移行方法\n- 大手企業から学ぶ教訓\n- CI/CDのチュートリアル\n\n## 継続的インテグレーションとは\n\n[継続的インテグレーション](https://about.gitlab.com/ja-jp/topics/ci-cd/benefits-continuous-integration/)（CI）とは、すべてのコード変更を共有ソースコードリポジトリのmainブランチに早い段階で頻繁に統合し、コミットまたはマージ時に変更内容を自動的にテストし、自動的にビルドを開始する手法のことです。継続的インテグレーションを行うことで、チームはエラーやセキュリティの問題を開発プロセスの初期段階で簡単に特定し、修正できます。\n\n## 継続的デリバリーとは\n[継続的デリバリー](https://about.gitlab.com/ja-jp/topics/ci-cd/#what-is-continuous-delivery-cd)（CD）は、「*継続的デプロイ*」と呼ばれることもあります。継続的デリバリーを行うことで、組織はアプリケーションを自動的にデプロイできるため、デベロッパーがデプロイ状況のモニタリングと成功の確認に専念できる時間を増やすことができます。継続的デリバリーでは、DevSecOpsチームが事前にコードのリリース基準を設定します。その基準が満たされて検証が完了すると、本番環境にコードがデプロイされます。これにより組織は俊敏性を高め、新機能をもっと迅速にユーザーに提供できるようになります。\n\n## ソースコード管理とCI/CDの関係\n\nソースコード管理（[SCM](https://about.gitlab.com/ja-jp/solutions/source-code-management/)）とCI/CDは、現代のソフトウェア開発手法の基盤と言えます。[Git](https://about.gitlab.com/blog/what-is-git-the-ultimate-guide-to-gits-role-and-functionality/)のようなSCMシステムは、変更の追跡、コードの各バージョンの管理、チームメンバー間のコラボレーションをスムーズに連携させる一元的な仕組みになっています。デベロッパーは新機能やバグ修正に取り組む際に、メインコードベースからブランチを作成して変更を加え、[マージリクエスト経由で変更をマージ](https://docs.gitlab.com/ee/user/project/merge_requests/)します。このようなブランチ戦略により、複数のデベロッパーが互いのコードに干渉することなく同時に作業を進められるだけでなく、常に本番環境で使用可能なコードが含まれる、安定したmainブランチを維持できます。\n\nCI/CDは、SCMシステムで管理されているコードを取得し、変更がプッシュされるたびに自動的にビルド、テスト、および検証を行います。デベロッパーがコードの変更を提出すると、CI/CDシステムは自動的に最新のコードを取得し、既存のコードベースに追加して、一連の自動チェックを実行します。これには通常、コードのコンパイル、ユニットテストの実行、静的コード解析の実施、コードカバレッジのチェックが含まれます。これらのステップのいずれかが失敗すると、すぐにチームに通知されます。チームが迅速に問題に対処できるため、他のデベロッパーへの影響を最小限に抑え本番環境への問題流出も防ぐことができます。このようなソース管理と継続的インテグレーションの緊密な連携により、フィードバックループが自動化され、従来の手動テストでは発見が遅れがちだった問題も早期に捉えられるようになり、コードの品質を維持できます。\n\n## 現代のソフトウェア開発においてCI/CDを利用するメリット\n\n新機能やバグ修正の提供に伴う時間とリスクを大幅に削減する[CI/CDは、現代のソフトウェア開発に革新的なメリットをもたらします](https://about.gitlab.com/blog/ten-reasons-why-your-business-needs-ci-cd/)。継続的なフィードバックループにより、DevSecOpsチームには、変更がコードベース全体と照らし合わせて自動的に検証されることが保証されます。結果として、ソフトウェアの品質の向上、デリバリーの高速化の実現に加え、リリースの頻度も増加するため、ユーザーのニーズや市場の需要に素早く対応できるようになります。\n\n最も重要なメリットはおそらく、CI/CDによってソフトウェア開発チーム内でコラボレーションと透明性の文化が育まれることです。誰もがビルド、テスト、デプロイの状況をリアルタイムで確認できれば、デリバリープロセスにおけるボトルネックの特定や解決が容易になります。また、CI/CDによって実現される自動化により、デベロッパーの認知負荷が軽減されます。そのため、デプロイプロセスを手動で管理する必要がなくなり、コーディング作業に注力できるようになります。その結果、デベロッパーの満足度と生産性が向上するとともに、これまでソフトウェアのリリースプロセス全体において生じていたリスクも減少します。迅速なコードレビューがCI/CDプロセスの標準プロセスとなり、必要に応じて素早く変更をロールバックできることをチームが理解しているため、より自由に実験を行うことができ、イノベーションと継続的な改善が促進されます。\n\n> GitLab CI/CDの利用を開始しましょう。[GitLab Ultimate](https://about.gitlab.com/ja-jp/free-trial/devsecops/)に登録して、AI搭載のDevSecOpsプラットフォームを無料でお試しください。\n\n### CI/CDと従来の開発の主な相違点\n\nCI/CDは、以下のような点で従来のソフトウェア開発とは異なります。\n\n**頻繁なコードコミット**\n\n大抵の場合、デベロッパーは単独で作業することが多く、コードをメインコードベースにアップロードする頻度が低いことから、マージの競合を始めとして、時間のかかる問題が発生しがちです。CI/CDの場合、デベロッパーは一日の中で頻繁にコミットをプッシュするため、競合を早いうちに発見でき、コードベースを最新の状態に保つことができます。\n\n**リスクの低減**\n\n長いテストサイクルとリリース前に行う大規模なプランニング作業は、従来のソフトウェア開発の特徴と言えます。リスクを最小化する目的で行われるものの、結果として問題の発見と修正の迅速さが犠牲になることも少なくありません。CI/CDでは、簡単に元に戻せる小規模の変更を段階的に適用し、注意深くモニタリングする方法でリスクを管理します。\n\n**継続的に実施される自動テスト**\n\n従来のソフトウェア開発では、開発が完了したタイミングでテストを行います。しかし、このやり方だと、納期の遅れやコストのかかるバグ修正などの問題が生じます。 CI/CDでは、コードをコミットするたびに自動テストが実行され、開発工程全体を通じて継続的にテストが行われます。さらに、デベロッパーにはタイムリーにフィードバックが提供されるため、それをもとに素早く対処できます。\n\n**繰り返し頻繁に実施可能で、自動化されたデプロイプロセス**\n\nCI/CDでは、デプロイプロセスは自動化されるため、大規模なソフトウェアのロールアウトに伴うストレスと手間が軽減されます。複数の環境で同じデプロイプロセスを繰り返し実行できるため、作業時間の短縮に加え、エラーや不整合を削減できます。\n\n## CI/CDの基礎を理解する\n\nCI/CDは、スケーラブルで保守しやすいデリバリープロセスを構築するためのフレームワークとして機能します。そのため、DevSecOpsチームが核となる概念をしっかりと把握しておくことは非常に重要です。CI/CDの原則を十分に理解することで、チームは従来のアプローチに縛られずに、テクノロジーの進化に合わせて戦略と手法を適応させることができます。ここでは、基本的な内容をいくつかご紹介します。\n\n### CI/CDパイプラインとは\n\n[CI/CDパイプライン](https://about.gitlab.com/ja-jp/topics/ci-cd/cicd-pipeline/)とは、ビルド、テスト、デプロイなどの一連のステップから成り、ソフトウェアデリバリープロセスを自動化および効率化するものです。[各ステージは品質ゲートとして機能し](https://about.gitlab.com/blog/guide-to-ci-cd-pipelines/)、検証されていないコードが次のステージに進むことのないように防ぎます。初期ステージでは通常、コンパイルやユニットテストなどの基本的なチェックを行います。後のほうのステージではインテグレーションテストやパフォーマンステスト、コンプライアンステストに加え、さまざまな環境への段階的なデプロイを行う場合があります。\n\n本番環境へのデプロイ前などの重要なタイミングでは、手動による承認を必要とするようにパイプラインを設定できます。その一方で、ルーチンタスクは自動化し、変更の健全性に関するフィードバックを迅速にデベロッパーに提供することが可能です。このような体系的なアプローチにより、一貫性の保証、ヒューマンエラーの削減の実現に加え、コード変更が開発環境から本番環境にどのように移行したかを明確に追跡できます。最新のパイプラインはコードとして実装されることが多いため、アプリケーションコードと同様に、バージョン管理、テスト、保守を行えます。\n\nCI/CDに関連する重要な用語をご紹介します。\n\n- **コミット**：コードの変更\n- **ジョブ**：Runnerが実行すべき命令\n- **Runner**：個々のジョブを実行するエージェントやサーバーで、必要に応じて起動または停止できる\n- **ステージ**：「ビルド」や「デプロイ」といった特定のジョブステージを定義するキーワード。同じステージにあるジョブは同時に実行される。プロジェクトのルートレベルでバージョン管理されたYAMLファイル（`.gitlab-ci.yml`）を使用して、パイプラインの設定を行う\n\n![CI/CDパイプラインの図](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749673928/Blog/Content%20Images/1690824533476.png)\n\n## CI/CDの実装と管理のベストプラクティス\nCI/CDの実装によりどれだけ成功を収められるかどうかは、どの[ベストプラクティス](https://about.gitlab.com/ja-jp/blog/how-to-keep-up-with-ci-cd-best-practices/)を取り入れるかに大きく依存します。\n\n#### CIのベストプラクティス\n\n* コミットを早めかつ頻繁に行う\n* パイプラインステージを最適化する\n* ビルドを迅速かつシンプルに\n* 失敗を活かしてプロセスを改善する\n* 必ず本番環境を模したテスト環境を構築する\n\n#### CDのベストプラクティス\n\n* 現状からはじめる。いつでもイテレーションを行える\n* 最小限のツールで最適な継続的デリバリーを行えることを理解する\n* 問題やマージリクエストが制御不能ならないよう、何が起きているかを追跡する\n* 自動化によってユーザー受け入れテストとステージングを効率化する\n* 自動化を通じてリリースパイプラインを管理する\n\n> ### ブックマークに登録しましょう！\n>\n>ぜひ[「CI/CD入門」ウェビナー](https://www.youtube.com/watch?v=BhmF29sUc48)をご視聴ください。\n>\n\u003C!-- 空白行 -->\n\u003Cfigure class=\"video_container\">\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/BhmF29sUc48?si=vGF8wNdhyQof9aFC\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen>\u003C/iframe>\n\u003C/figure>\n\n\u003C!-- 空白行 -->\n\n## CI/CDの開始方法\n\nCI/CDを導入する際は、まずはパイロットプロジェクトとして、シンプルながら代表的なプロジェクトを選定する必要があります。基本的なテスト要件を備えた、シンプルなアプリケーションが最適です。そうすれば、複雑なデプロイシナリオに対処せずに済み、パイプラインの仕組みを学ぶことに集中できます。まずは、コードが[バージョン管理](https://about.gitlab.com/ja-jp/topics/version-control/)されており、[基本的な自動テスト](https://about.gitlab.com/blog/develop-c-unit-testing-with-catch2-junit-and-gitlab-ci/)（ユニットテストだけでも十分です）が設定されているかどうかを確認してください。理解度が深まるにつれて徐々に拡張できるように、[最小限のパイプラインを作成する](https://about.gitlab.com/blog/how-to-learn-ci-cd-fast/)ことを目指します。\n\nGitLabでは、具体的には、プロジェクトのルートディレクトリに`.gitlab-ci.yml`ファイルを作成することから始めます。このYAMLファイルでは、パイプラインのステージ（ビルド、テスト、デプロイなどの基本的なもの）とジョブを定義します。  \nシンプルなパイプラインの場合、  \nビルドステージではコードをコンパイルしてアーティファクトを作成  \nテストステージではユニットテストを実行  \nデプロイステージではアプリケーションをステージング環境にプッシュする  \nといった構成になります。  \nGitLabはこのファイルを自動的に検出し、リポジトリに変更がプッシュされるたびにパイプラインの実行を開始します。GitLabプラットフォームには、パイプラインジョブを実行する[ビルトインのRunner](https://docs.gitlab.com/runner/)が用意されていますが、より細かく制御したい場合はご自身でRunnerを設定することも可能です。\n\n基本に慣れてきたら、少しずつより高度なコンポーネントをパイプラインに追加していきます。コード品質チェック、[セキュリティスキャン](https://docs.gitlab.com/ee/user/application_security/#security-scanning)、本番環境への自動デプロイなどを実装してみてもよいかもしれません。GitLabのDevSecOpsプラットフォームには、[コンプライアンス管理](https://about.gitlab.com/blog/meet-regulatory-standards-with-gitlab/)、[デプロイ変数](https://about.gitlab.com/blog/demystifying-ci-cd-variables/)、手動での承認ゲートなど、パイプラインの成熟に伴って組み込むことができる機能が含まれます。パイプラインの実行時間に注意しつつ、可能であれば並行してジョブを実行できる箇所を探しましょう。必ず適切なエラー処理と通知を追加して、パイプラインが失敗した場合にチームメンバーに速やかに通知されるようにします。一般的な問題が生じたり、解決策が見つかったりしたら、文書化するようにしましょう。ドキュメントはチーム規模が拡大するにつれ非常に役に立ちます。\n\n> ### CI/CDの開始方法についてさらに詳しく知りたい場合は、[GitLab Universityで無料のCI/CDコース](https://university.gitlab.com/courses/gitlab-with-git-essentials-s2-jp)にご登録ください\n\n## セキュリティ、コンプライアンス、CI/CD\nCI/CDを利用する最大のメリットの1つは、ソフトウェア開発ライフサイクルの早い段階において頻繁にセキュリティとコンプライアンスのチェックを組み込めることです。GitLabでは、`.gitlab-ci.yml`での設定を用いて、最初のコードコミットから本番環境へのデプロイまで複数のステージでセキュリティスキャンを自動的にトリガーすることができます。GitLabプラットフォームのコンテナスキャン、依存関係スキャン、セキュリティスキャン機能（[動的アプリケーションセキュリティテスト](https://docs.gitlab.com/ee/user/application_security/dast/)および[高度なSAST](https://about.gitlab.com/blog/gitlab-advanced-sast-is-now-generally-available/)）は、コードが変更されるたびに自動的に実行され、脆弱性、コンプライアンス違反、セキュリティの設定ミスの有無をチェックするように設定できます。また、GitLabプラットフォームのAPIを使用すると、[外部のセキュリティツールとの連携も可能です](https://about.gitlab.com/blog/integrate-external-security-scanners-into-your-devsecops-workflow/)。テストカバレッジ機能は、セキュリティテストが必要な基準を満たしているかを確認できます。\n\nGitLabのセキュリティテストレポートでは、調査結果に関する詳細情報を確認できるため、セキュリティ問題が本番環境に到達する前に素早く修正できます。プロジェクト全体における脆弱性は、セキュリティダッシュボードで一元的に確認でき、[セキュリティポリシーの適用](https://about.gitlab.com/blog/how-gitlab-supports-the-nsa-and-cisa-cicd-security-guidance/)は、マージリクエストの承認とパイプラインゲートによって行えます。さらに、CI/CDプロセス全体で機密情報を保護するための多層的なシークレット管理、シークレットへのアクセスを追跡するための監査ログ、許可されたユーザのみが機密性の高い設定データを閲覧または変更できるようにするロールベースのアクセス制御（RBAC）などの機能も備えています。\n\nGitLabはソフトウェア部品表（[SBOM](https://about.gitlab.com/blog/the-ultimate-guide-to-sboms/)）の生成もサポートしています。チームは、アプリケーション内のすべてのソフトウェアコンポーネント、依存関係、ライセンスの包括的なインベントリを生成して、脆弱性を迅速に特定して対応し、規制要件に準拠することが可能です。\n## CI/CDとクラウド\n\nGitLabのCI/CDプラットフォームは、[Amazon Web Services](https://about.gitlab.com/ja-jp/partners/technology-partners/aws/)や[Google Cloud Platform](https://about.gitlab.com/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci/)、[Microsoft Azure](https://docs.gitlab.com/ee/install/azure/)などの主要クラウドプロバイダーとの強力なインテグレーションが可能なため、パイプラインから直接クラウドへのデプロイを自動化することができます。GitLabのクラウド連携機能を使用すれば、クラウドリソースの管理、アプリケーションのデプロイ、クラウドサービスのモニタリングをすべてGitLabインターフェイス内で行えます。GitLabに標準搭載されているクラウドデプロイテンプレートと[Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/)機能により、クラウドデプロイの手間が大幅に軽減されるため、チームはインフラ管理よりもアプリケーション開発に注力できます。GitOpsを使用してITインフラストラクチャを自動化したい組織向けに、GitLabでは[Flux CDインテグレーションも提供しています](https://about.gitlab.com/blog/why-did-we-choose-to-integrate-fluxcd-with-gitlab/)。\n\nGitLabのクラウド機能は、基本的なデプロイの自動化にとどまりません。GitLabプラットフォームの[Kubernetesインテグレーション](https://about.gitlab.com/blog/kubernetes-overview-operate-cluster-data-on-the-frontend/)を使用すると、複数のクラウドプロバイダー間でコンテナオーケストレーションを管理できます。また、[クラウドネイティブのGitLabインストールオプション](https://about.gitlab.com/ja-jp/topics/ci-cd/cloud-native-continuous-integration/)が用意されているため、クラウド環境でプラットフォーム自体を実行することも可能です。GitLabのクラウドネイティブ機能により、チームはパイプライン実行用にクラウドリソースを動的にプロビジョニングする自動スケーリングランナーを実装して、コストとパフォーマンスを最適化できます。GitLabプラットフォームとクラウドプロバイダーのセキュリティサービスとのインテグレーションにより、デプロイプロセス全体を通してセキュリティとコンプライアンスの要件が確実に満たされます。\n\nGitLabはマルチクラウド環境向けには、基盤となるクラウドプロバイダーに関係なく一貫したワークフローとツールを提供します。開発環境、ステージング環境、本番環境でそれぞれ異なるクラウド設定を管理したい場合もGitLabの環境管理機能で対応可能です。GitLabプラットフォームによる[infrastructure as code](https://docs.gitlab.com/ee/user/infrastructure/iac/)のサポート、特にTerraformとのネイティブなインテグレーションにより、チームは、クラウドインフラストラクチャのプロビジョニングをバージョン管理し自動化できます。GitLabのモニタリングと可観測性の機能は、クラウドプロバイダーのメトリクスと連携しているため、ク\n\n## 高度なCI/CD \nCI/CDは、単純なビルドとデプロイのパイプラインからはるかに進化を遂げてきました。CI/CDを高度に実装する場合、自動テスト、セキュリティスキャン、インフラストラクチャのプロビジョニング、AI活用など、高度なオーケストレーションが必要となります。ここでは、アーキテクチャが複雑化していく中でも、エンジニアリングチームがパイプラインをスケールし、問題をトラブルシューティングする際に役立つ高度なCI/CD戦略をいくつかご紹介します。\n\n### CI/CDにおける再利用と自動化\n\nGitLabは、開発チームによるCI/CDパイプラインの作成・管理方法を2つの革新的な機能で一新しています。一つは「[CI/CDカタログ](https://about.gitlab.com/blog/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/)」、もう一つは「[CI/CDステップ](https://about.gitlab.com/blog/introducing-ci-cd-steps-a-programming-language-for-devsecops-automation/)」（現在、実験段階にあるDevSecOps自動化のための新しいプログラミング言語）です。CI/CDカタログは、デベロッパーがCI/CDコンポーネントを検索、再利用、コントリビュートできる一元化されたプラットフォームです。コンポーネントは、CI/CDワークフローにおける「レゴブロック」のような再利用可能な単機能パーツとして、パイプライン設定を簡素化します。また、CI/CDステップは、デベロッパーがCI/CDジョブの入出力を設定できるようにすることで、複雑なワークフローをサポートします。DevSecOpsチームはCI/CDカタログとCI/CDステップを活用することで、CI/CDとそのコンポーネントを簡単に標準化すると同時に、CI/CDパイプラインの開発と保守のプロセスを簡素化できます。\n\n> 詳しくは、[CI/CDカタログのFAQ](https://about.gitlab.com/blog/faq-gitlab-ci-cd-catalog/)と[CI/CDステップのドキュメント](https://docs.gitlab.com/ee/ci/steps/)をご覧ください。\n\n### AIによるパイプラインのトラブルシューティング\n\nCI/CDパイプラインが壊れることは実際にあり得ますが、問題を素早くトラブルシューティングすれば、影響を最小限にとどめられます。GitLabが提供するAI機能「GitLab Duo」の一つである「根本原因分析」は、これまでデベロッパーの経験や勘に頼っていた部分を自動化し、[CI/CDパイプラインで発生した失敗の根本原因を特定](https://about.gitlab.com/blog/quickly-resolve-broken-ci-cd-pipelines-with-ai/)します。GitLabでは、パイプラインが失敗すると、失敗した場所と原因を具体的に示す詳細なジョブログ、エラーメッセージ、実行トレースが提供されます。その後、根本原因分析により、AIを使用して修正を提案します。 以下の動画で、GitLab Duo根本原因分析機能の実際の動作をご覧ください。\n\n\u003C!-- 空白行 -->\n\u003Cfigure class=\"video_container\">\n\u003Ciframe src=\"https://www.youtube.com/embed/sTpSLwX5DIs?si=J6-0Bf6PtYjrHX1K\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- 空白行 -->\n\n## GitLab CI/CDへの移行方法\n\nDevSecOpsプラットフォームとビルトインのCI/CDに移行する際は、既存のパイプライン設定や依存関係、デプロイプロセスを分析し、GitLabの対応する機能と構文にマッピングする体系的なアプローチを取る必要があります。移行プロセスを開始する際は、以下のガイドをご参照ください。\n\n* [BambooからGitLab CI/CDへの移行方法](https://about.gitlab.com/blog/migrating-from-bamboo-to-gitlab-cicd/)（英語）\n* [JenkinsからGitLabへ：CI/CD環境のモダナイズに関する完全ガイド](https://about.gitlab.com/blog/jenkins-gitlab-ultimate-guide-to-modernizing-cicd-environment/)（英語）\n* [GitHubからGitLabへの簡単な移行方法](https://about.gitlab.com/blog/github-to-gitlab-migration-made-easy/)（英語）\n\n## 先進企業から学ぶ教訓\n\nGitLab に移行し、CI/CD の様々なメリットを実感している先進企業の事例をご紹介します。各社の事例をぜひご覧ください。\n\n- [ロッキード・マーティン社](https://about.gitlab.com/ja-jp/customers/lockheed-martin/)\n- [Indeed社](https://about.gitlab.com/ja-jp/blog/how-indeed-transformed-its-ci-platform-with-gitlab/)\n- [CARFAX社](https://about.gitlab.com/ja-jp/customers/carfax/)\n- [HackerOne社](https://about.gitlab.com/ja-jp/customers/hackerone/)\n- [Betstudios社](https://about.gitlab.com/blog/betstudios-cto-on-improving-ci-cd-capabilities-with-gitlab-premium/)\n- [タレス社とカルフール社](https://about.gitlab.com/blog/how-carrefour-and-thales-are-evolving-their-ci-cd-platforms/)\n\n## CI/CDのチュートリアル\n\n以下にご紹介する簡単なチュートリアルを行って、CI/CDのエキスパートになりましょう。\n\n* * [CI入門：ジョブを順番どおりに、並列に、または順不同で実行する方法](https://about.gitlab.com/ja-jp/blog/basics-of-gitlab-ci-updated/)  \n* [初めてのGitLab CI/CDコンポーネントのセットアップ方法](https://about.gitlab.com/blog/tutorial-how-to-set-up-your-first-gitlab-ci-cd-component/)（英語）  \n* [モノレポ用にGitLab CI/CDパイプラインを簡単に構築する方法](https://about.gitlab.com/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way/)（英語）  \n* [子パイプラインの使用による5つの環境への継続的デプロイメント](https://about.gitlab.com/blog/using-child-pipelines-to-continuously-deploy-to-five-environments/)（英語）  \n* [CI/CDの自動化：GitLabグループ全体で「デプロイフリーズ」の影響を最大化する](https://about.gitlab.com/blog/ci-cd-automation-maximize-deploy-freeze-impact-across-gitlab-groups/)（英語）  \n* [CI/CDテンプレートをCI/CDコンポーネントにリファクタリングする](https://about.gitlab.com/blog/refactoring-a-ci-cd-template-to-a-ci-cd-component/)（英語）  \n* [GitLab CI/CDでCosignを使ってコンテナイメージにビルドの来歴を付ける](https://about.gitlab.com/blog/annotate-container-images-with-build-provenance-using-cosign-in-gitlab-ci-cd)（英語）\n\n> #### GitLab CI/CDの利用を開始しましょう。[GitLab Ultimateに登録](https://gitlab.com/-/trials/new)して、AI搭載のDevSecOpsプラットフォームを無料でお試しください。\n\n\u003Cbr>\u003Cbr>\u003Cbr>\n\n*監修：小松原 つかさ  [@tkomatsubara](https://gitlab.com/tkomatsubara)\u003Cbr>\n（GitLab合同会社 ソリューションアーキテクト本部 シニアパートナーソリューションアーキテクト）*",[9,751,679,680,753,681],"2025-05-26",{"slug":1312,"featured":91,"template":685},"ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation","content:ja-jp:blog:ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation.yml","Ultimate Guide To Ci Cd Fundamentals To Advanced Implementation","ja-jp/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation.yml","ja-jp/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation",{"_path":1318,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1319,"content":1325,"config":1334,"_id":1336,"_type":14,"title":1337,"_source":16,"_file":1338,"_stem":1339,"_extension":19},"/ja-jp/blog/ultimate-guide-to-migrating-from-aws-codecommit-to-gitlab",{"title":1320,"description":1321,"ogTitle":1320,"ogDescription":1321,"noIndex":6,"ogImage":1322,"ogUrl":1323,"ogSiteName":669,"ogType":670,"canonicalUrls":1323,"schema":1324},"【徹底解説！】AWS CodeCommitからGitLabへの移行ガイド","この記事では、AWSサービスからGitLabに移行し、DevSecOpsプラットフォームとシームレスに統合する方法をわかりやすく解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097810/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2828%29_4mi0l4wzUa5VI4wtf8gInx_1750097810027.png","https://about.gitlab.com/blog/ultimate-guide-to-migrating-from-aws-codecommit-to-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"【徹底解説！】AWS CodeCommitからGitLabへの移行ガイド\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tsukasa Komatsubara\"},{\"@type\":\"Person\",\"name\":\"Darwin Sanoy\"},{\"@type\":\"Person\",\"name\":\"Samer Akkoub\"},{\"@type\":\"Person\",\"name\":\"Bart Zhang\"}],\n        \"datePublished\": \"2024-08-26\",\n      }",{"title":1320,"description":1321,"authors":1326,"heroImage":1322,"date":1330,"body":1331,"category":681,"tags":1332,"updatedDate":1333},[1037,1327,1328,1329],"Darwin Sanoy","Samer Akkoub","Bart Zhang","2024-08-26","2024年7月25日に、AWSが自社のCodeCommitサービスについて重要な発表を行いました。詳細はAWSの[公式ブログ記事（外部サイト）](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/)に記載されていますが、CodeCommitでの新規顧客の利用受付が終了することになりました。既存のお客様は引き続きサービスを利用できるものの、今後AWSが新機能を実装することはなく、セキュリティ、可用性、パフォーマンスの改善のみに注力するとのことです。\n\n今回の発表は、開発チームがリポジトリを別のGitプロバイダーに移行することを検討するきっかけとなっています。これらの変更をふまえ、お客様がGitLabに移行して他のAWSサービスと統合できるように、抱括的なガイドをご用意しました。\n\n__注：__ 移行に関するAWSの公式推奨事項の詳細については、[AWSのブログ記事（外部サイト）](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/)をご覧ください。\n\n## このガイドについて\n\nこのガイドでは、GitLabを使用していてAWSサービスとの統合を検討している開発チームや、AWSにホストされているGitリポジトリからGitLab.comに移行予定の開発チーム向けに包括的な情報を提供します。このガイドは次の3つの主要セクションで構成されています。\n\n* [GitLabへの並行移行](https://app.contentful.com/spaces/r9o86ar0p03f/entries/2tGP1LjJy6E5hzf9B24KIl?focusedField=body\\&focusedLocale=en-US\\#section-1-parallel-migration-to-gitlab)：リスクを最小限に抑えつつ、AWSにホストされている既存リポジトリからGitLab.comへ徐々に移行する方法について説明します。  \n* [AWS CodeBuildとの統合](https://app.contentful.com/spaces/r9o86ar0p03f/entries/2tGP1LjJy6E5hzf9B24KIl?focusedField=body\\&focusedLocale=en-US\\#section-2-integrating-gitlab-with-aws-codebuild)：GitLabリポジトリをAWS CodeBuildと統合し、強力な継続的インテグレーション（CI）環境を設定する手順を紹介します。  \n* [AWS CodePipelineとの統合](https://app.contentful.com/spaces/r9o86ar0p03f/entries/2tGP1LjJy6E5hzf9B24KIl?focusedField=body\\&focusedLocale=en-US\\#section-3-integrating-gitlab-with-aws-codepipeline)：効率的な継続的デリバリーパイプラインを構築するために、GitLabリポジトリをAWS CodePipelineと接続する方法について詳しく説明します。  \n* [CodePipelineとCodeStar Connectionsのダウンストリーム統合](https://app.contentful.com/spaces/r9o86ar0p03f/entries/2tGP1LjJy6E5hzf9B24KIl?focusedField=body\\&focusedLocale=en-US\\#section-4-migrating-to-gitlab)：GitLabとAWS間の接続を活用して広範なサービスの利用を実現する方法について説明します。この方法を用いると、AWSエコシステム全体での統合の可能性が連鎖的に広がります。\n\nこのガイドを通して、GitLabとAWSの強力な機能を組み合わせ、効率的で柔軟な開発ワークフローを作成する方法を学びましょう！\n\n## **第1セクション：GitLabへの並行移行**\n\nAWSにホストされているGitリポジトリをGitLab.comに移行することを検討中の方向けに、段階的なアプローチについて取り上げる本セクションでは、リスクを最小限に抑えながら移行を達成する方法をご紹介します。GitLabのミラーリング機能を活用すれば、既存の開発フローを維持しながら、新しい環境をテストできます。\n\n### **並行移行が重要な理由**\n\n大規模なシステムの移行には常にリスクが伴います。特に、実施中の開発作業や既存のインテグレーション、自動化されたプロセスに影響が生じる可能性があります。並行移行アプローチを採用すると、次のようなメリットがあります。\n\n1\\. リスクの最小化：既存のシステムを稼働させた状態で新しい環境をテストできます。  \n2\\. シームレスな移行：開発チームが新しいシステムに少しずつ慣れることができます。   \n3\\. インテグレーションテスト：すべてのインテグレーションと自動化を新しい環境で徹底的にテストできます。   \n4\\. 将来性：既存のCIと並行して、チームが徐々にGitLab [CI/CD](https://about.gitlab.com/ja-jp/blog/what-is-ci-cd/)に移行できるようにします。\n\n直接GitLabに一括で移行することが望ましいとわかっている場合は、並行移行を行う必要はありません。\n\n### **GitLab.comへの移行手順**\n\n#### **ステップ1：GitLab.comをセットアップする**\n\n* 会社で使用中のGitLab.comのグループがあるかどうか、またシングルサインオン（SSO）を設定済みであるかどうかを確認します。グループがあり、シングルサインオンを設定済みである場合は、両方とも使用することになります。\n\n* GitLab.comに会社で使用しているグループがない場合は、[GitLab.com](https://app.contentful.com/spaces/r9o86ar0p03f/entries/www.gitlab.com)にアクセスして新規アカウントを作成するか、既存のアカウントにログインしてください。\n\n* 会社用のネームスペース（Gitlab.comのルートレベルのグループ）を新たに作成します。  \n* ネームスペースに、（これまでに使用されていない）会社に合った名前を付けます。\n\n#### **ステップ2：リポジトリをインポートする**\n\n並行移行の場合：GitLabのプルミラーリング機能を使用して、AWSにホストされているリポジトリからGitLab.comに変更を自動的に同期します。\n\n1. GitLab.comのターゲットグループに移動します。  \n2. 右上の「新規プロジェクト」をクリックします。   \n3. 「新しいプロジェクトを作成」ページで「プロジェクトをインポート」をクリックします。   \n4. 「プロジェクトをインポート」ページで「URLによるリポジトリ」をクリックします。  \n5. 「GitリポジトリのURL」フィールドに、AWSにホストされているリポジトリのURLを入力します。   \n6. 「GitリポジトリのURL」フィールドの下にある「リポジトリをミラーリング」にチェックを入れます。  \n7. 認証の設定：AWS CodeCommitコンソールで、移行するリポジトリのクローンURLを選択します。CodeCommitリポジトリをGitLabに移行する場合は、HTTPS CodeCommit URLを使用して、GitLabのリポジトリのミラーリングを介してリポジトリをクローンできます。また、GitLabにAWSのIAMユーザーに割り当てたGit認証情報を入力する必要があります。AWS CodeCommit用のGit認証情報を作成する方法は、こちらの[AWSガイド（外部サイト）](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html)に従ってください。\n\n![クローンURL](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097822/Blog/Content%20Images/Blog/Content%20Images/clone-url-screenshot__1__aHR0cHM6_1750097822121.png)\n\nこの設定を行うと、デフォルトでは5分ごとにAWSにホストされているリポジトリからGitLab.comに変更が自動的にプルされます。\n\n詳細については、[リポジトリのミラーリングに関するドキュメント](https://docs.gitlab.com/ee/user/project/repository/mirror/)をご参照ください。\n\n#### **ステップ3：インテグレーションのテストと検証を行う**\n\n1. [CI/CD](https://about.gitlab.com/ja-jp/blog/what-is-ci-cd/)パイプライン：既存のパイプラインを複製するために、GitLab CIで `.gitlab-ci.yml`  ファイルを設定します。[他のCIツールからGitLab CI/CDへの移行の計画](https://docs.gitlab.com/ee/ci/migration/plan\\_a\\_migration.html)について詳細をご確認ください。  \n2. イシュートラッキング：プロジェクトのイシューとテストワークフローをインポートします。  \n3. コードレビュー：マージリクエストプロセスとテストレビューワークフローを設定します。\n\n#### **ステップ4：段階的に移行する**\n\n1. 小規模または重要度の低いプロジェクトから移行を始めて、GitLab.comでの作業に慣れましょう。  \n2. チームメンバー向けにトレーニングを行い、新しいワークフローに適応する時間を十分に確保します。  \n3. インテグレーションとワークフローに問題がないことを確認しながら、徐々にその他のプロジェクトを移行します。\n\n詳細については、[CodeCommitからGitLabへの移行の自動化](https://gitlab.com/guided-explorations/aws/migrating-from-codecommit-to-gitlab/-/blob/main/migrating\\_codecommit\\_to\\_gitlab.md)をご参照ください。\n\n#### **ステップ5：移行を完了する**\n\nすべてのテストと検証が完了し、新しい環境にチームが慣れてきたら、完全な移行の計画を立てます。プロジェクトごとに以下の対応を行います。\n\n1. 移行日を決めて、すべてのステークホルダーに通知する。  \n2. 最後のデータ同期を行う。  \n3. ミラーリング設定をGitLabプロジェクトから削除する。  \n4. AWSにホストされているリポジトリを読み取り専用に設定し、すべての開発作業をGitLab.comに移行する。\n\n#### **ステップ6：新しい機能を導入するかどうかを判断する**\n\nGitLabでデベロッパーが利用できるコラボレーションとワークフローの自動化機能は、CodeCommitと比べてはるかに豊富です。これらの機能について理解するには、ある程度時間がかかります。中でもマージリクエストプロセスは、CodeCommitよりも強力です。\n\nGitLab上でリポジトリが安定させてしまえば、既存のソリューションと並行して非常に簡単にGitLab CI/CDを試せることになるでしょう。本番環境のワークフローはそのままに、時間をかけてGitLab CI/CDの自動化を完成させることができるのです。\n\nGitLabのアーティファクト管理も、リリース機能や多くのパッケージレジストリで非常に役に立ちます。\n\n### **第1セクションのまとめ**\n\nGitLabへの並行移行アプローチを採用すると、リスクを最小限に抑えながらスムーズな移行を実現できます。このプロセスを通じて、チームは新しい環境に徐々に適応でき、すべてのインテグレーションと自動化が正しく機能するようになります。並行移行を行う必要がないとわかっていて一括で移行する場合でも、スキップできるのは1つのチェックボックス設定のみです。\n\n## **第2セクション：GitLabとAWS CodeBuildの統合**\n\nAWS CodeBuildを使用して、GitLabリポジトリを構築してコードをテストしたい方は、こちらの完全ガイドを参考にして、CIパイプラインを効率的に設定してください。\n\n### **前提条件**\n\n* GitLab.comアカウント  \n* AWSアカウント  \n* AWS CLI（構成済み）\n\n### **ステップ1：AWS CodeStar ConnectionsでGitLabとの接続を作成する**\n\n1. AWSマネージメントコンソールにログインし、CodeBuildサービスに移動します。  \n2. 左側のナビゲーションパネルから「設定」\\>「接続」の順に選択します。  \n3. 「接続を作成」ボタンをクリックします。  \n4. プロバイダーとして「GitLab」を選択します。  \n5. 接続名を入力して「GitLabに接続」をクリックします。  \n6. GitLabの認証ページにリダイレクトされます。  \n7. 必要な権限を承認します。  \n8. 正常に接続されると、接続ステータスが「利用可能」に変わります。\n\n![CodeStar Connectセットアップ](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097822/Blog/Content%20Images/Blog/Content%20Images/codestar-connections-setup_aHR0cHM6_1750097822122.png)\n\n### **ステップ2：AWS CodeBuildプロジェクトを作成する**\n\n1. CodeBuildダッシュボードで「ビルドプロジェクトを作成」をクリックします。  \n2. プロジェクトの名前と説明を入力します。  \n3. ソース設定では、プロバイダーとして「GitLab」を選択します。  \n4. 先程作成した接続を選択し、GitLabのリポジトリとブランチを指定します。\n\n![CodeBuildプロジェクトを追加](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097822/Blog/Content%20Images/Blog/Content%20Images/codepipeline_step_3_add_codebuild_aHR0cHM6_1750097822123.png)\n\n**注：ステップ3以降では、ご自身の環境とニーズに応じて設定を行ってください。**\n\n### **第2セクションのまとめ**\n\nこのセクションでは、GitLabリポジトリをAWS CodeBuildと統合する方法について詳しく説明しました。このように設定することで、GitLabで行ったコード変更がAWS CodeBuildによって自動的にビルド・テストされる継続的インテグレーションパイプラインを実現できます。\n\n## **第3セクション：GitLabとAWS CodePipelineの統合**\n\nAWS CodePipelineを使用してGitLabリポジトリからの継続的デリバリーを実装しようとしている方は、この詳細なガイドを参考にしてください。GitLabをAWS CodeStar Connectionsプロバイダーとして利用できるようになったため、これまでよりも統合しやすくなりました。\n\n### **前提条件**\n\n* GitLab.comアカウント  \n* AWSアカウント  \n* AWS CLI（構成済み）\n\n### **ステップ1：AWS CodeStar ConnectionsでGitLabとの接続を作成する**\n\n1. AWSマネージメントコンソールにログインし、CodePipelineサービスに移動します。  \n2. 左側のナビゲーションパネルから「設定」\\>「接続」の順に選択します。   \n3. 「接続を作成」ボタンをクリックします。  \n4. プロバイダーとして「GitLab」を選択します。  \n5. 接続名を入力して「GitLabに接続」をクリックします。  \n6. GitLabの認証ページにリダイレクトされます。  \n7. 必要な権限を承認します。  \n8. 正常に接続されると、接続ステータスが「利用可能」に変わります。\n\n![CodeStar Connectセットアップ](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097822/Blog/Content%20Images/Blog/Content%20Images/codestar-connections-setup_aHR0cHM6_1750097822122.png)\n\n### **ステップ2：AWS CodePipelineを作成する**\n\n1. CodePipelineダッシュボードで「パイプラインを作成」をクリックします。  \n2. パイプライン名を入力して「次へ」をクリックします。  \n3. ソースプロバイダーとして「GitLab」を選択します。  \n4. 先程作成した接続を選択し、GitLabのリポジトリとブランチを指定します。  \n5. トリガータイプを選択します。リポジトリ内の特定のブランチやファイルタイプに対するプルイベントまたはプッシュイベントに基づいて、CodePipelineパイプラインの実行をトリガーできます。\n\n![ソースプロバイダーを追加](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097822/Blog/Content%20Images/Blog/Content%20Images/codestar-connections-setup_aHR0cHM6_1750097822125.png)\n\n![ソース構成を追加](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097822/Blog/Content%20Images/Blog/Content%20Images/codepipeline_step_2_source_provider_aHR0cHM6_1750097822127.png)\n\n**注：ステップ3以降では、ご自身の環境とニーズに応じて設定を行ってください。** \n\n### **第3セクションのまとめ**\n\nこのセクションでは、GitLabリポジトリをAWS CodePipelineと統合する方法について詳しく説明しました。このように設定することで、GitLabで行ったコード変更が自動的にAWS環境にデプロイされる継続的デリバリーパイプラインを実現できます。\n\n## **第4セクション：GitLabへの移行**\n\nGitLabにAWSを統合すると、開発ワークフローとデプロイワークフローを効率化する強力な機能を利用できるようになり、ソースコード管理に伴う問題を解決しやすくなります。統合方法は次のようにいくつかあり、それぞれに独自のメリットがあります。\n\n* AWS CodeStar Connectionsを使用してGitLabとAWSサービスを連携させる場合、さまざまなAWSサービスにGitLabなどの外部のGitリポジトリを接続できるようになるため、より一貫したワークフローを実現できます。この設定方法では、GitLabレポジトリでの自動ビルド、デプロイ、その他の重要なアクションが直接サポートされるため、開発プロセスの一貫性および効率性が向上します。  \n* AWS CodeStar Connections経由でGitLabとAWS CodePipelineを接続すると、完全なCI/CDパイプラインを作成できるため、自動化を次のレベルへと進められます。このアプローチでは、GitLabをAWS CodePipelineと統合することで、CodeBuildやCodeDeployなどのAWSサービスを使用して、ソース管理やビルドからテストやデプロイまでの全プロセスを自動化できます。これにより、堅牢でスケーラブルかつ効率的なデリバリープロセスを実現できます。\n\n![GitLabとAWSを一緒に使用するための新しいテクノロジーとソリューションのチャート](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097822/Blog/Content%20Images/Blog/Content%20Images/codepipeline_step_2_source_configured_aHR0cHM6_1750097822129.png)\u003Cbr>\u003Cbr>\n\n1.AWS CodeStar Connectionsを使ってGitLabとAWSサービスを接続する\n\nAWS CodeStar Connectionsは、外部のGitリポジトリ（GitHubやBitbucketなど）をAWSサービスと接続するためのサービスです。また、CodeStar Connections経由でGitLabをAWSサービスに接続することもできます。GitLabを使用する場合、HTTP Gitサーバーとしてカスタム接続を設定しなければならない可能性があります。 この方法でGitLabに接続できるAWSサービスは以下のとおりです。\n\n* __AWSサービスカタログ__ \n\nAWS Service Catalogは、組織におけるAWSリソースの標準化および管理を支援します。AWS Service CatalogをGitLabと統合すると、リソース管理の透明性が向上し、変更を追跡しやすくなります。具体的には、GitLabのコミットに基づいてカタログの更新を自動化し、運用効率を向上させることができます。\n\n* __AWS CodeBuild__ \n\nAWS CodeBuildは、ソースコードをコンパイルし、テストを実行し、デプロイできるソフトウェアパッケージを生成するマネージド型のビルドサービスです。GitLabとCodeBuildを統合すると、GitLabにコード変更がプッシュされるたびに自動化されたビルドプロセスが開始されるようになります。これにより、ビルドの一貫性が確保され、コラボレーションとバージョン管理を容易に進められます。\n\n* __AWS Glue ノートブックジョブ__ \n\nAWS Glueノートブックジョブは、データの準備とETL （抽出、変換、ロード）タスクを対話形式で開発して実行できるサービスです。GitLabとGlueノートブックジョブを統合すると、ノートブックとETLスクリプトのバージョン管理を行えるようになり、チームメンバー間のコラボレーションが促進され、データ処理パイプラインの品質管理が強化されます。\n\n* __AWS Proton__\n\nAWS Protonは、[マイクロサービス](https://about.gitlab.com/ja-jp/blog/what-are-the-benefits-of-a-microservices-architecture/)とServerlessアプリケーションの開発とデプロイを自動化するサービスです。GitLabとAWS Protonを統合することで、インフラストラクチャをコードとして管理し、デプロイを自動化し、一貫した環境管理を実現できるため、開発プロセスをさらに効率化できます。\n\nAWS CodeStar Connectionsのサポート対象のサービスが増えるにつれ、より多くのAWSサービスをGitLabとさらに簡単に接続できるようになります。そのため、CodeStar Connectionsを新たにサポートするサービスを定期的にチェックすることをお勧めします。\u003Cbr>\u003Cbr>\n\n2. AWS CodeStar Connections経由（CodeDeployを含む）でCodePipelineとGitLabを接続する\n\nAWS CodePipelineは、ソフトウェアのリリースプロセスを自動化する継続的デリバリーサービスです。GitLabとCodePipelineを接続するには、AWS CodeStar Connectionsを使用する必要があります。この設定方法を用いると、GitLabリポジトリをソースとして指定し、CI/CDパイプライン全体を自動化できます。 CodePipelineがサポートする主なアクションは以下のとおりです。\n\n* __ソース管理__ ：AWS CodeCommit、GitHub、Bitbucket、GitLab  \n* __ビルドとテスト__ ：AWS CodeBuild、Jenkins  \n* __デプロイ__ ：AWS CodeDeploy、Elastic Beanstalk、ECS、S3  \n* __承認__ ：手動承認  \n* __インフラストラクチャ管理__ ：AWS CloudFormation  \n* __Serverless__ ：AWS Lambda  \n* __テスト__ ：AWS Device Farm  \n* __カスタムアクション__ ：AWS Step Functions\n\nGitLabとCodePipelineを統合すると、GitLabにコード変更がプッシュされるたびにパイプラインが自動的にトリガーされるため、一貫したプロセスでビルドからデプロイまでを行えます。さらに、これをGitLabのバージョン管理機能と組み合わせることで、デプロイの履歴と状態を簡単に追跡できるようになり、より柔軟で信頼性の高いソフトウェアデリバリーを実現できます。\n\n## **まとめ**\n\nこのガイドでは、GitLabへの移行、およびGitLabとAWSとの統合に関する包括的な情報を提供しました。4つの主なトピックを通して、以下の内容を取り上げました。\n\n* GitLabへの並行移行：リスクを最小限に抑えつつ、AWSにホストされている既存リポジトリからGitLab.comへ徐々に移行する方法。  \n* AWS CodeBuildとの統合：GitLabリポジトリと統合された強力なCI環境を設定する手順。  \n* AWS CodePipelineとの統合：GitLabリポジトリを使用して効率的な継続的デリバリーパイプラインを構築する方法。  \n* CodePipelineとCodeStar Connectionsのダウンストリーム統合：GitLabとAWS間の接続を活用して広範なサービスの利用を実現する方法。この方法を用いると、AWSエコシステム全体での統合の可能性が連鎖的に広がります。\n\nコードホスティングと統合の実装戦略は組織ごとに異なります。このガイドをチュートリアルとして、貴社独自のGitLab とAWSの統合および実装戦略の出発点としてご利用ください。\n\n## **リソース**\n\nより詳しい情報と高度な設定については、以下のリソースを参照してください。\n\n* [GitLabドキュメント](https://docs.gitlab.com/)  \n* [AWS CodeBuildユーザーガイド](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)  \n* [AWS CodePipelineユーザーガイド](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)  \n* [GitLab CI/CDドキュメント](https://docs.gitlab.com/ee/ci/)  \n* [AWSとの統合](https://docs.gitlab.com/ee/solutions/cloud/aws/gitlab\\_aws\\_integration.html)\n\nご質問がある場合やサポートが必要な場合は、[GitLabサポート](https://about.gitlab.com/support/)またはAWSサポートまでお問い合わせください。みなさまがAWSとGitLabの統合を始める上で、こちらの総合ガイドがお役に立てば幸いです。\n\u003Cbr>\u003Cbr>\n\n*監修：小松原 つかさ [@tkomatsubara](https://gitlab.com/tkomatsubara)\u003Cbr>\n（GitLab合同会社 ソリューションアーキテクト本部 シニアパートナーソリューションアーキテクト）*\n",[9,705,679,680,706,681,232],"2024-09-05",{"slug":1335,"featured":91,"template":685},"ultimate-guide-to-migrating-from-aws-codecommit-to-gitlab","content:ja-jp:blog:ultimate-guide-to-migrating-from-aws-codecommit-to-gitlab.yml","Ultimate Guide To Migrating From Aws Codecommit To Gitlab","ja-jp/blog/ultimate-guide-to-migrating-from-aws-codecommit-to-gitlab.yml","ja-jp/blog/ultimate-guide-to-migrating-from-aws-codecommit-to-gitlab",{"_path":1341,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1342,"content":1348,"config":1357,"_id":1359,"_type":14,"title":1360,"_source":16,"_file":1361,"_stem":1362,"_extension":19},"/ja-jp/blog/using-ansible-and-gitlab-as-infrastructure-for-code",{"title":1343,"description":1344,"ogTitle":1343,"ogDescription":1344,"noIndex":6,"ogImage":1345,"ogUrl":1346,"ogSiteName":669,"ogType":670,"canonicalUrls":1346,"schema":1347},"GitLabとAnsibleを使ってIaCを作成する方法","Ansible playbookを使ってIaCを作成します。GitLab CIが持つ力を探求してみてください。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665322/Blog/Hero%20Images/gitlab-ansible-cover.png","https://about.gitlab.com/blog/using-ansible-and-gitlab-as-infrastructure-for-code","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLabとAnsibleを使ってIaCを作成する方法\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brad Downey\"},{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2019-07-01\",\n      }",{"title":1343,"description":1344,"authors":1349,"heroImage":1345,"date":1352,"body":1353,"category":703,"tags":1354,"updatedDate":1356},[1350,1351],"Brad Downey","Sara Kassabian","2019-07-01","IaCとして管理されるAnsible playbookを実行する際に力を発揮する、GitLab CIの機能を探求してみませんか。\n\n\nGitLab\nCIは、[IaC](https://about.gitlab.com/ja-jp/topics/gitops/infrastructure-as-code/)や[GitOps](https://about.gitlab.com/ja-jp/solutions/gitops/)など、さまざまな用途に使用できる強力なツールです。GitLabはツールに依存しないプラットフォームですが、AnsibleはIaCを管理するために、開発者によく使用される言語なので、今回はAnsibleを使用していきます。\n\n\n## Ansibleとは\n\n\nAnsibleはオープンソースであり、デプロイ、構成、そしてコンピュータシステムの管理を自動的に行なう際に使用し、構成管理ツールに分類されます。開発者やシステム管理者がAnsibleを使用すると、サーバーの構成やアプリケーションのデプロイ、またネットワークデバイスの管理といった、複雑な、繰り返しの多いプロセスを自動化できます。AnsibleはYAMLを使って、playbookとして知られている宣言型のタスク説明を作成します。作成された宣言型のタスク説明は、コマンドを実行するターゲットホストへのSSH接続を通じてAnsibleが行なう、望まれるシステム状態を説明してくれます。\n\n\n## デモ：GitLab CI と Ansible\n\n\n[GitLab\nCI](https://about.gitlab.com/ja-jp/solutions/continuous-integration/)の特に優れている機能のひとつは、ローカルの端末等に依存ライブラリをインストールしなくても\n[Ansible\nplaybook](https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html)（外部サイト）のコードを編集しデプロイできることです。デモでご紹介するプロジェクトは、セキュリティポリシーに従って毎月すべてのデバイスのSNMP文字列を更新する必要がありますが、これはGitLabがホストする\n[GitLab.com](https://about.gitlab.com/ja-jp/pricing/)で簡単に行なうことができます。  \n\n\nまずはじめに、Ansible playbookを開いてください。ここには次の4つのタスクがあります。\n\n\n* ルーターの情報を収集  \n\n* バージョンを表示  \n\n* シリアル番号を表示  \n\n* SNMPを構成\n\n\nこのデモでは、SNMPの文字列の構成方法に焦点を当てています。構成は簡単な一連のステップに従うことで完了できます。\n\n\n## はじめに：イシューボード\n\n\nGitLabではプロジェクトに関する計画はすべて同じやり方、[イシューの起票](https://handbook.gitlab.com/handbook/marketing/brand-and-product-marketing/product-and-solution-marketing/getting-started/101/#issue)から始まります。そのためGitLabのワークフローの最初のステップでは、[ansible-demoプロジェクト](https://gitlab.com/bdowney/ansible-demo)内のイシューボードを確認します。[ansible-demoイシューボード](https://gitlab.com/bdowney/ansible-demo/-/boards)を見ると、すでに\n[すべてのルーターのSNMP文字列の変更](https://gitlab.com/bdowney/ansible-demo/issues/4)に関連するイシューがあることがわかります。イシューの中に、SNMP文字列を毎月ローテーションさせ、読み取り専用と読み書き両方の場合には、異なる文字列を使用する必要があることを記述したGitLabセキュリティポリシーのWikiへのリンクがあります。\n\n\n![Security\npolicies](https://about.gitlab.com/images/blogimages/ansible_screenshots/security_policies_1A.png){:\n.shadow.medium.center}\n\nSNMP 文字列用の GitLab セキュリティポリシー\n\n{: .note.text-center}\n\n\nGitLabのセキュリティポリシーによると、SNMP文字列を毎月更新する必要があります。  \n\n\n次に、[2つのルーターのデモ](https://gitlab.com/bdowney/ansible-demo/blob/master/ci-cd-demo/ci.yml)でSNMP文字列を設定するコマンドが、イシューで概説されているGitLabのセキュリティポリシーに従っていることを確認します。\n\n\n![Ansible SNMP\nchange](https://about.gitlab.com/images/blogimages/ansible_screenshots/ansible_snmp_change_2.png){:\n.shadow.medium.center}\n\nSNMP 文字列設定のためのコマンド\n\n{: .note.text-center}\n\n\nSNMP文字列を設定するコマンドは、Ansible playbookに記載されています。\n\n\n次に、イシューに戻り、イシューをご自身にアサインしてください。右サイドバーのラベルを`to-do`から`doing`に切り替えるか、または、イシューボードの列をドラッグして移動することもできます。\n\n\n## マージリクエストを作成する\n\n\n次のステップでは、イシューからマージリクエスト (MR)\nを作成します。「Draft」のフラグがMRに付いていることを再度確認してください。これにより、準備ができていないうちにmasterブランチにマージされてしまうことが防止されます。ここでは、SNMP文字列への変更点が少ないので、ローカルの\nIDEでソースコードを編集するのではなく、GitLabの [Web\nIDE](https://docs.gitlab.com/ee/user/project/web_ide/) を使います。  \n\n\n* [CI/CD](https://about.gitlab.com/topics/ci-cd/)デモセクションを開きます。  \n\n* Ansible playbookに移動します。  \n\n* SNMPセクションを次のように編集します。\n\n\n```\n\n-snmp-server community New-SNMP-DEMO1 RO\n\n\n-snmp-server community Fun-SNMP-RW-STR RW\n\n```\n\n\n*  [イシュー](https://gitlab.com/bdowney/ansible-demo/issues/1)で説明されている[GitLab\nセキュリティポリシー](https://gitlab.com/bdowney/ansible-demo/wikis/Security-Policies)に従い、ROとRWが異なる文字列として設定されていることに注意してください。\n\n\n## 変更をコミットする\n\n\nSNMP文字列がガイドラインに沿って更新されましたので、変更をコミットします。最新のコミットでMRが更新されたことを確認するために、side-by-side比較機能を利用してください。\n\n\n![Commit\nchanges](https://about.gitlab.com/images/blogimages/ansible_screenshots/side-by-side_3.png){:\n.shadow.medium.center}\n\nGitLab Ansible 内でのマージリクエストのサイド・バイ・サイド比較\n\n{: .note.text-center}\n\n\n並べて比較できるツールにより、変更内容が一目でわかります。\n\n\n## マージリクエストの出力\n\n\n変更内容をコミットすると、GitLab CIパイプラインが自動的に起動されます。ここでは、次のようなタスクが実行されます。\n\n構文のチェック\n\nドライラン\n\nラボ/シミュレーション環境での変更点のテスト\n\nGitLab CIパイプラインの各ジョブの進捗状況と出力を表示して、SNMPの更新を実行します。\n\n\n![Job\nrunning](https://about.gitlab.com/images/blogimages/ansible_screenshots/job_running_4.png){:\n.shadow.medium.center}\n\nGitLabジョブの出力\n\n{: .note.text-center}\n\n\nジョブからの出力を確認して、シミュレーション環境でSNMPの更新が確実に行なわれたことを確認します。\n\nこのすべてのタスクは、マージリクエスト (MR) 内で実行され、記録されます。\n\n\n![Pipeline](https://about.gitlab.com/images/blogimages/ansible_screenshots/pipeline_5A.png){:\n.shadow.medium.center}\n\nGitLab CIパイプライン内のチェックマーク\n\n{: .note.text-center}\n\n\n緑色のチェックマークは、GitLab CIパイプラインで各タスクが正常に完了したことを示しています。\n\n次に、ラボのルーターにログインして、変更内容を確認します。\n\n\n![routers\nsnmp](https://about.gitlab.com/images/blogimages/ansible_screenshots/routersnmp_6.png){:\n.shadow.medium.center}\n\nルーターのSNMP\n\n{: .note.text-center}\n\n\n読み取り専用（RO）および読み書き（RW）のSNMP文字列の変更点がルーターに反映されています。\n\n\n## マージリクエストのレビュー\n\n\nオプションとして、[マージリクエスト（MR）の承認](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)をアクティブ化することもできます。これにより、変更が本番環境に送られる前に、より多くのユーザーが変更点をレビューできるようになります。\n\n\n![approvers](https://about.gitlab.com/images/blogimages/ansible_screenshots/approvers_7.png){:\n.shadow.medium.center}\n\nGitLabでのSNMP文字列の更新\n\n{: .note.text-center}\n\n\nマージリクエスト（MR）は、masterブランチへのマージを行なう前に、別のユーザーに作業内容をレビューしてもらうように設定することができます。\n\n\n## Masterブランチへのマージ\n\n\nテストが完了したら、変更点をmasterブランチにマージします。masterブランチには、本番環境コードが格納されています。\n\n準備ができたら、`Mark`ボタンをクリックし、次に`Merge`をクリックします。\n\n「Draft」のステータスを解決すると、MRがマージされ、イシューがクローズされます。\n\nすると、新しいパイプラインが実行され、追加のステップとして playbookを本番環境で実行する、すべてのテストが実行されます。\n\n「パイプライン」の画面では、その進捗とログが確認できます。このプロセスが完了したら、本番用ルーターにログインし、SNMPセキュリティ文字列が更新されたことを確認します。\n\n\n## GitLab CIの魔法\n\n\nこれまで説明してきたさまざまな機能を可能にした魔法は GitLab CIです。GitLab\nCIパイプラインとは、Ansibleコードをテストしてデプロイするために必要なあらゆることを実行する、一連の連続したタスクを意味します。\n\n\nGitLab CIは、リポジトリ内に存在する単一のシンプルな [YAML\nファイル](https://about.gitlab.com/blog/three-yaml-tips-better-pipelines/)である`.gitlab-ci.yml`で構成されています。\n\n\nこのデモでは`.gitlab-ci.yml`ファイルが3つのステージで構成されていることがご確認いただけます。\n\n1. Deploy：Ansibleを使用する AWSに 、２つのルーターのシミュレーションネットワークが作成されます。\n\n2. Demo：SNMP文字列を変更するplaybook が実行されます。\n\n3. Destory：２つのルーターのシミュレーションネットワークが破棄されます。\n\n\nGitLab CIは、ベースイメージで始まります。この場合、必要なすべての\nAnsibleバイナリと依存ライブラリを含むDockerイメージを使用しています。必要に応じて、それぞれのステージで実行するコマンドと、依存関係を指定します。\n\n\n![More\ncode](https://about.gitlab.com/images/blogimages/ansible_screenshots/more_code_9A.png){:\n.shadow.medium.center}\n\n単純なYAMLファイルには、GitLab CIの3つのフェーズが含まれます。\n\n{: .note.text-center}\n\n\n![More\nCode](https://about.gitlab.com/images/blogimages/ansible_screenshots/more_code_10A.png){:\n.shadow.medium.center}\n\nGitLab CIのデモレベル\n\n{: .note.text-center}\n\n\nGitLab CIのデモステージを覗いてみましょう。これはAnsible playbookを実行しているものです。\n\n\n今度はパイプラインを見てみましょう。GitLab\nCIを使用すれば、コンピュータにAnsibleの依存関係をインストールすることなく構成管理を実装できることがわかります。これは、IaCを実行するために\nGitLab CIを使用する方法の一例に過ぎません。以下のリンクは、完全版チュートリアルの動画ですので、ぜひご覧ください。\n\n\n\u003C!-- blank line -->\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/M-SgRTKSeOg\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\n\u003C!-- blank line -->\n\n\n## FAQ - よくある質問\n\n\n### Q: Ansibleとは\n\n\nA:\nAnsibleとは、ITプロセスの自動化と構成管理を可能にするオープンソースのツールです。アプリケーションのデプロイ、構成管理、オーケストレーション、プロビジョニングなど、コンピュータシステムの管理を自動的に行なう際に使用します。\n\n\nAnsibleを使用すると、サーバーの構成やアプリケーションのデプロイ、またネットワークデバイスの管理といった、複雑な、繰り返しの多いワークフローのオーケストレーションが可能になります。AnsibleはYAMLを使って、playbookとして知られている宣言型のタスク説明を作成します。作成された宣言型のタスク説明は、コマンドを実行するターゲットホストへのSSH接続を通じてAnsibleが行なう、望まれるシステム状態を説明してくれます。詳しくは[こちら](#heading=h.llxgny6efk4z)をご覧ください。\n\n\n### Q: Ansible Playbookとは\n\n\nA: Ansible\nPlaybookはyamlで書かれたタスクのリストファイルのことで、指定したインベントリーやホストのグループに対して自動的に実行されます。ネットワークインフラ、WindowsサーバーなどITインフラに適用するタスクやコンフィグレーションをこのファイルで定義します。Ansibleタスクは、1つまたは複数タスクがplayとしてグループ化され、それぞれのplayが特定のホストやホストグループに対して実行されます。クラウド管理、ユーザー管理、ネットワーク、セキュリティ、構成管理などがAnsible\nPlaybookで管理できます。\n\n\n### Q: GitLab CIとは\n\n\nA: GitLab CI（継続的インテグレーション、Continuous\nIntegration）とは、GitLab上でコードの変更が行われた際に自動的にテストやビルドを実行するツールで、サードパーティのツールやライブラリを導入しなくても利用できます。GitLab\nCIは、すべてのコード変更を共有ソースコードリポジトリのmainブランチに早い段階で頻繁に統合し、コミットやマージ時に各変更を自動的にテストし、自動的にビルドを開始するプラクティスのことです。継続的インテグレーションを行うことで、エラーやセキュリティの問題をより簡単に、開発プロセスのかなり早い段階で特定し、修正することが可能になります。詳しくは[こちら](https://about.gitlab.com/ja-jp/topics/ci-cd/#what-is-continuous-integration-ci)をご覧ください。\n\n\n### Q: GitLab CIとAnsibleを使用するメリットは何ですか\n\n\nA: GitLab CIなら、ローカルの端末等に依存ライブラリをインストールしなくてもAnsible\nplaybookのコードを編集しデプロイできます。また、GitLab\nCIパイプラインは、Ansibleコードをテストしてデプロイするために必要なあらゆることを実行する、一連の連続したタスクです。つまり、GitLabでは、リポジトリの管理とCIおよびAnsible\nTowerのワークフロー実行が行なえます。加えられた変更の内容、たとえば、いつ、誰がどのファイルに対して変更を行なったのかも自動で記録されるうえ、マージリクエスト(MR)を使えば、理由や目的などのメモも残せるなど、いろいろなメリットがあります。\n\n\n*\\*監修：伊藤 俊廷 [@toshitakaito](https://gitlab.com/toshitakaito) \n\n（GitLab合同会社 ソリューションアーキテクト本部 スタッフソリューションアーキテクト）*\n",[1355,9],"demo","2024-10-21",{"slug":1358,"featured":6,"template":685},"using-ansible-and-gitlab-as-infrastructure-for-code","content:ja-jp:blog:using-ansible-and-gitlab-as-infrastructure-for-code.yml","Using Ansible And Gitlab As Infrastructure For Code","ja-jp/blog/using-ansible-and-gitlab-as-infrastructure-for-code.yml","ja-jp/blog/using-ansible-and-gitlab-as-infrastructure-for-code",{"_path":1364,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1365,"content":1371,"config":1378,"_id":1380,"_type":14,"title":1381,"_source":16,"_file":1382,"_stem":1383,"_extension":19},"/ja-jp/blog/using-child-pipelines-to-continuously-deploy-to-five-environments",{"title":1366,"description":1367,"ogTitle":1366,"ogDescription":1367,"noIndex":6,"ogImage":1368,"ogUrl":1369,"ogSiteName":669,"ogType":670,"canonicalUrls":1369,"schema":1370},"子パイプラインを使用して5つの環境に継続的にデプロイする","使用するGitLabワークフローを最小限に抑えつつ、複数の環境（事前の準備なしに一時的に利用できるsandboxなど）への継続的デプロイを管理する方法を解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097012/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_397632156_3Ldy1urjMStQCl4qnOBvE0_1750097011626.jpg","https://about.gitlab.com/blog/using-child-pipelines-to-continuously-deploy-to-five-environments","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"子パイプラインを使用して5つの環境に継続的にデプロイする\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Olivier Dupré\"}],\n        \"datePublished\": \"2024-09-26\",\n      }",{"title":1366,"description":1367,"authors":1372,"heroImage":1368,"date":1374,"body":1375,"category":703,"tags":1376,"updatedDate":1377},[1373],"Olivier Dupré","2024-09-26","DevSecOpsチームでは、複数の環境にまたがる継続的デプロイを管理する機能が必要となることがあります。その場合、ワークフローを変更せずに、デプロイを行えるようにする必要があります。[GitLab\nDevSecOpsプラットフォーム](https://about.gitlab.com/)なら、事前の準備なしに一時的に利用できるsandboxを使用して工数を最小限に抑えるアプローチなどを通じて、こうしたニーズに対応できます。この記事では、Terraformを使って複数の環境上でインフラの継続的デプロイを行う方法についてご紹介します。\n\n\nこの手法は、[Pulumi](https://www.pulumi.com/)や[Ansible](https://www.ansible.com/)のような別の技術を使用したInfrastructure\nas\nCode（IaC）でも、どのような言語で書かれたソースコードでも、または多様な言語が混在するモノレポであっても、あらゆるプロジェクトに簡単に適用できます。\n\n\nこのチュートリアルの終了時には、以下のような環境をデプロイするパイプラインが完成します。\n\n\n* 各フィーチャーブランチの一時的な**レビュー（review）**環境。\n\n* 簡単に消去可能で、mainブランチからデプロイされる**統合（integration）**環境。\n\n* **品質管理（qa）**環境。同様にmainブランチからデプロイされ、品質管理プロセスを実行します。\n\n* タグ付けされるたびにデプロイされる**ステージング（staging）**環境。これは本番環境前の最後のステージです。\n\n*\nステージング環境の直後の**本番（production）**環境。今回はデモ用に手動でトリガーしますが、継続的にデプロイされるようにすることも可能です。\n\n\n>この記事で使用されるフローチャートの説明は以下のとおりです。\n\n> * 角が丸いボックスはGitLabブランチです。\n\n> * 四角のボックスは環境です。\n\n> * 矢印上のテキストは、あるボックスから次のボックスへのアクションを指します。\n\n> * ひし形のボックスは決定ステップです。\n\n\n\u003Cpre class=\"mermaid\">\n\nflowchart LR\n    A(main) -->|新機能| B(feature_X)\n\n    B -->|自動デプロイ| C[review/feature_X]\n    B -->|マージ| D(main)\n    C -->|破棄| D\n\n    D -->|自動デプロイ| E[integration]\n    E -->|手動| F[qa]\n\n    D -->|タグ付け| G(X.Y.Z)\n    F -->|検証| G\n\n    G -->|自動デプロイ| H[staging]\n    H -->|手動| I{plan}\n    I -->|手動| J[production]\n\u003C/pre>\n\n\nステップごとに、[理由](#why)と[行うこと](#what)を説明した上で、[方法](#how)をご紹介します。これにより、このチュートリアルを完全に理解し、正確に実行しやすくなります。\n\n\n## 理由\n\n\n*\n[継続的インテグレーション](https://about.gitlab.com/topics/ci-cd/#what-is-continuous-integration-ci)はほぼ事実上の業界標準と言えます。ほとんどの企業は、CIパイプラインを実装済みであるか、その実践の標準化を検討しています。\n\n\n*\nまた、CIパイプラインの最後にリポジトリまたはレジストリにアーティファクトをプッシュする[継続的なデリバリー](https://about.gitlab.com/topics/ci-cd/#what-is-continuous-delivery-cd)も一般的です。\n\n\n*\n継続的デプロイメントはさらに進んで、これらのアーティファクトを自動的にデプロイしますが、その普及はまだ限定的です。導入されている場合、主にアプリケーション分野で見られます。インフラの継続的デプロイメントに関しては、状況がやや不明瞭で、複数の環境の管理に重きが置かれる傾向があります。一方で、インフラのコードをテストし、セキュリティを確保し、検証することはより難しいとされています。この分野は、DevOpsがまだ成熟に至っていない分野のひとつです。ほかの分野としては、セキュリティのシフトレフトが挙げられます。具体的には、セキュリティチームの介入、さらに重要なことに、セキュリティ上のリスクへの対応をデリバリーライフサイクルの早期に組み込み、DevOpsから***DevSecOps***へと発展させる取り組みのことです。\n\n\nこのような概況を踏まえ、本チュートリアルでは、インフラにDevSecOpsをシンプルかつ効果的に導入するシナリオに取り組みます。5つの環境にリソースをデプロイする例を交えながら、開発から本番環境へと段階的に進めていきます。\n\n\n__注__：個人的にはFinOpsアプローチを採用し、環境の数を減らすことを推奨していますが、開発環境、ステージング環境、本番環境以外の環境を保持すべき場合もあります。そのため、これからご紹介する例をご自身のニーズに合わせて調整してください。\n\n\n## 行うこと\n\n\nクラウド技術の台頭により、IaCの利用が促進されています。この分野を最初に開拓したのは、AnsibleとTerraformでした。OpenTofu、Pulumi、AWS\nCDK、Google Deploy Managerを始めとする多くの会社がその後に続きました。\n\n\nIaCを定義することは、インフラストラクチャを安全にデプロイするのに最適なソリューションです。目標を達成できるまで必要なだけ、テスト、デプロイ、再実行を繰り返し行えます。\n\n\n残念なことに、ターゲット環境ごとに複数のブランチやリポジトリを保持している企業がよくあります。これが原因で問題が生じます。こういった企業では、プロセスの実施が徹底されていません。本番環境のコードベースへの変更が、その前の環境で正しくテストされているかどうかも確認できません。その結果、ある環境から別の環境へ流れるだけになります。\n\n\nこのチュートリアルが必要だと気づいたのは、あるカンファレンスに参加した際に、本番環境へのデプロイ前にインフラストラクチャを十分にテストするワークフローがないと参加者全員から聞いたときです。みなが、本番環境で直接コードにパッチを適用することもあると言っていました。確かにこの方法は手っ取り早いですが、果たして安全でしょうか？前の環境にフィードバックをどう戻すのでしょうか？また副次効果が生じないようにするにはどうすればよいのでしょうか？新たな脆弱性が本番環境にあまりにも早くプッシュされることで会社がリスクにさらされないようにするには、どのように管理すべきでしょうか？\n\n\nここで重要なのは、DevOpsチームが本番環境に直接デプロイするのは*なぜ*かということです。パイプラインの効率性や速度を向上できる可能性があるためでしょうか？自動化できないのでしょうか？それどころか、*本番環境以外で正確にテストする方法がない*からなのでしょうか？\n\n\n次のセクションでは、インフラストラクチャを自動化し、ほかの人に影響を及ぼす環境にコードがプッシュされる前に、DevOpsチームが効果的かつ確実にテストを実施するための方法をご説明します。また、コードがどのように保護され、エンドツーエンドでデプロイが管理されているかも確認していきます。\n\n\n## 方法\n\n\n前述のとおり、現在では多くのIaC言語が存在しているため、この記事だけで客観的に*すべて*を取り上げることはできません。そのため、この記事ではバージョン1.4で実行される基本的なTerraformコードを使用します。IaC言語そのものではなく、貴社のエコシステムに適用できるプロセスに注目してください。\n\n\n### Terraformコード\n\n\nまずは、基本的なTerraformコードから始めましょう。\n\n\n仮想ネットワークであるAWSの仮想プライベートクラウド（VPC）にデプロイしたいと思います。VPCには、パブリックサブネットとプライベートサブネットをデプロイします。名前からわかるように、これらはメインVPCのサブネットです。最後に、パブリックサブネットにAmazon\nElastic Cloud Compute（EC2）インスタンス（仮想マシン）を追加します。\n\n\nこれは、比較的簡単な方法で4つのリソースをデプロイする方法を示しています。コードではなく、パイプラインに焦点を当てることがここでの目的です。\n\n\nここで目指すリポジトリの完成形は、以下のとおりです。\n\n\n![リポジトリの完成図](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097033/Blog/Content%20Images/Blog/Content%20Images/image5_aHR0cHM6_1750097033415.png)\n\n\nステップごとに行っていきましょう。\n\n\nまずは、`terraform/main.tf`ファイルでリソースをすべて宣言します。\n\n\n```terraform\n\nprovider \"aws\" {\n  region = var.aws_default_region\n}\n\n\nresource \"aws_vpc\" \"main\" {\n  cidr_block = var.aws_vpc_cidr\n\n  tags = {\n    Name     = var.aws_resources_name\n  }\n}\n\n\nresource \"aws_subnet\" \"public_subnet\" {\n  vpc_id     = aws_vpc.main.id\n  cidr_block = var.aws_public_subnet_cidr\n\n  tags = {\n    Name = \"Public Subnet\"\n  }\n}\n\nresource \"aws_subnet\" \"private_subnet\" {\n  vpc_id     = aws_vpc.main.id\n  cidr_block = var.aws_private_subnet_cidr\n\n  tags = {\n    Name = \"Private Subnet\"\n  }\n}\n\n\nresource \"aws_instance\" \"sandbox\" {\n  ami           = var.aws_ami_id\n  instance_type = var.aws_instance_type\n\n  subnet_id = aws_subnet.public_subnet.id\n\n  tags = {\n    Name     = var.aws_resources_name\n  }\n}\n\n```\n\n\nご覧のとおり、このコードではいくつかの変数が必要となるため、`terraform/variables.tf`ファイルでそれらを宣言します。\n\n\n```terraform\n\nvariable \"aws_ami_id\" {\n  description = \"The AMI ID of the image being deployed.\"\n  type        = string\n}\n\n\nvariable \"aws_instance_type\" {\n  description = \"The instance type of the VM being deployed.\"\n  type        = string\n  default     = \"t2.micro\"\n}\n\n\nvariable \"aws_vpc_cidr\" {\n  description = \"The CIDR of the VPC.\"\n  type        = string\n  default     = \"10.0.0.0/16\"\n}\n\n\nvariable \"aws_public_subnet_cidr\" {\n  description = \"The CIDR of the public subnet.\"\n  type        = string\n  default     = \"10.0.1.0/24\"\n}\n\n\nvariable \"aws_private_subnet_cidr\" {\n  description = \"The CIDR of the private subnet.\"\n  type        = string\n  default     = \"10.0.2.0/24\"\n}\n\n\nvariable \"aws_default_region\" {\n  description = \"Default region where resources are deployed.\"\n  type        = string\n  default     = \"eu-west-3\"\n}\n\n\nvariable \"aws_resources_name\" {\n  description = \"Default name for the resources.\"\n  type        = string\n  default     = \"demo\"\n}\n\n```\n\n\nすでにIaC側に関しては、これでほぼ準備が整いました。しかしながら、これではTerraformの状態を共有できません。ご存知ない方のために大まかに説明すると、Terraformは以下を行うことで動作します。\n\n\n* `plan`により、インフラストラクチャの現在の状態とコートで定義されている内容の差分を確認してから、差分を出力します。\n\n* `apply`により、`plan`の差分を適用して、状態を更新します。\n\n\n最初のラウンドでは状態は空で、その後、Terraformによって適用されたリソースの詳細（IDなど）が挿入されます。\n\n\n問題は、その状態がどこに保存されるかということです。また、複数のデベロッパーがコード上で共同作業を行えるようにするにはどうすればよいのでしょうか？\n\n\n解決策はとても簡単で、GitLabを利用して、[Terraform\nHTTPバックエンド](https://docs.gitlab.com/ee/user/infrastructure/iac/terraform_state.html)を介して状態を保存して共有するだけです。\n\n\nこのバックエンドを使用するには、まずはもっともシンプルな`terraform/backend.tf`ファイルを作成します。次のステップは、パイプラインで処理します。\n\n\n```terraform\n\nterraform {\n  backend \"http\" {\n  }\n}\n\n```\n\n\nこれで、4つのリソースをデプロイするための最低限のTerraformコードができあがりました。変数の値は実行する際に指定するので、後でご説明します。\n\n\n### ワークフロー\n\n\nこれから以下のワークフローを実装します。\n\n\n\u003Cpre class=\"mermaid\">\n\nflowchart LR\n    A(main) -->|新機能| B(feature_X)\n\n    B -->|自動デプロイ| C[review/feature_X]\n    B -->|マージ| D(main)\n    C -->|破棄| D\n\n    D -->|自動デプロイ| E[integration]\n    E -->|手動| F[qa]\n\n    D -->|タグ付け| G(X.Y.Z)\n    F -->|検証| G\n\n    G -->|自動デプロイ| H[staging]\n    H -->|手動| I{plan}\n    I -->|手動| J[production]\n\u003C/pre>\n\n\n1.\n**フィーチャー**ブランチを作成します。これにより、コードに対して継続的にすべてのスキャナーが実行され、コンプライアンスとセキュリティを確保できます。このコードは、現在のブランチの名前が付けられた一時的な環境`review/feature_branch`に継続的にデプロイされます。これは、デベロッパーと運用チームが誰にも影響を与えることなくコードをテストできる安全な環境です。また、ここでコードレビューやスキャナーの実行などのプロセスを実施し、コードの品質とセキュリティが許容範囲内であることを確認し、資産が危険にさらされることのないようにします。このブランチでデプロイされたインフラストラクチャは、ブランチが閉じられると自動的に破棄されます。これにより予算範囲内に収めやすくなります。\n\n\n\u003Cpre class=\"mermaid\">\n\nflowchart LR\n    A(main) -->|新機能| B(feature_X)\n\n    B -->|自動デプロイ| C[review/feature_X]\n    B -->|マージ| D(main)\n    C -->|破棄| D\n\u003C/pre>\n\n\n2.\n承認されると、フィーチャーブランチはmainブランチに**マージ**されます。これは[保護ブランチ](https://docs.gitlab.com/ee/user/project/protected_branches.html)であり、誰もプッシュできません。本番環境への変更リクエストをすべて十分にテストするために必要です。このブランチも継続的にデプロイされます。ここでのターゲットは`integration`環境です。この環境をもう少し安定させるために、削除は自動化されておらず、手動でトリガーできるようになっています。\n\n\n\u003Cpre class=\"mermaid\">\n\nflowchart LR\n    D(main) -->|自動デプロイ| E[integration]\n\u003C/pre>\n\n\n3.\nここから次のデプロイをトリガーするには、手動による承認が必要となります。これにより、mainブランチが`qa`環境にデプロイされます。ここでパイプラインからの削除を防ぐルールを設定します。何しろすでに3つ目のこの環境はかなり安定しているはずなので、このルールは誤って削除されるのを防ぐことを目的とします。貴社のプロセスに合わせて、お好きなようなルールを調整してください。\n\n\n\u003Cpre class=\"mermaid\">\n\nflowchart LR\n    D(main)-->|自動デプロイ| E[integration]\n    E -->|手動| F[qa]\n\u003C/pre>\n\n\n4.\n次に進むには、コードに**タグ付け**する必要があります。[保護タグ](https://docs.gitlab.com/ee/user/project/protected_tags.html)を使用して、特定のユーザーのみが最後の2つの環境にデプロイできるようにします。これにより、`staging`環境へのデプロイが即座にトリガーされます。\n\n\n\u003Cpre class=\"mermaid\">\n\nflowchart LR\n    D(main) -->|タグ付け| G(X.Y.Z)\n    F[qa] -->|検証| G\n\n    G -->|自動デプロイ| H[staging]\n\u003C/pre>\n\n\n5.\nついに`production`に到達しました。インフラストラクチャに関して言うと、（10%や25%など）段階的にデプロイするのは難しい場合が多いため、インフラストラクチャ全体をデプロイします。ただし、この最後のステップで行う手動トリガーで、このデプロイを制御します。そして、この極めて重要な環境を最大限に制御できるようにするために、[保護環境](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)として管理します。\n\n\n\u003Cpre class=\"mermaid\">\n\nflowchart LR\n    H[staging] -->|手動| I{plan}\n    I -->|手動| J[production]\n\u003C/pre>\n\n\n### パイプライン\n\n\n上記の[ワークフロー](#the-workflow)を実装するために、2つの[ダウンストリームパイプライン](https://docs.gitlab.com/ee/ci/pipelines/downstream_pipelines.html)とともにパイプラインを構築します。\n\n\n#### メインパイプライン\n\n\nまずは、メインパイプラインから始めましょう。メインパイプラインは、**フィーチャーブランチへのプッシュ**、**デフォルトブランチへのマージ**、または**タグ付け**が発生すると、必ず自動的にトリガーされます。*このパイプライン*によって、`dev`、`integration`、`staging`環境に対する真の**継続的デプロイ**を実現できます。プロジェクトのルートにある`.gitlab-ci.yml`ファイルで宣言します。\n\n\n![リポジトリのターゲット](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097033/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097033417.png)\n\n\n```yml\n\nStages:\n  - test\n  - environments\n\n.environment:\n  stage: environments\n  variables:\n    TF_ROOT: terraform\n    TF_CLI_ARGS_plan: \"-var-file=../vars/$variables_file.tfvars\"\n  trigger:\n    include: .gitlab-ci/.first-layer.gitlab-ci.yml\n    strategy: depend            # Wait for the triggered pipeline to successfully complete\n    forward:\n      yaml_variables: true      # Forward variables defined in the trigger job\n      pipeline_variables: true  # Forward manual pipeline variables and scheduled pipeline variables\n\nreview:\n  extends: .environment\n  variables:\n    environment: review/$CI_COMMIT_REF_SLUG\n    TF_STATE_NAME: $CI_COMMIT_REF_SLUG\n    variables_file: review\n    TF_VAR_aws_resources_name: $CI_COMMIT_REF_SLUG  # Used in the tag Name of the resources deployed, to easily differenciate them\n  rules:\n    - if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n\nintegration:\n  extends: .environment\n  variables:\n    environment: integration\n    TF_STATE_NAME: $environment\n    variables_file: $environment\n  rules:\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n\nstaging:\n  extends: .environment\n  variables:\n    environment: staging\n    TF_STATE_NAME: $environment\n    variables_file: $environment\n  rules:\n    - if: $CI_COMMIT_TAG\n\n#### TWEAK\n\n# This tweak is needed to display vulnerability results in the merge\nwidgets.\n\n# As soon as this issue https://gitlab.com/gitlab-org/gitlab/-/issues/439700\nis resolved, the `include` instruction below can be removed.\n\n# Until then, the SAST IaC scanners will run in the downstream pipelines,\nbut their results will not be available directly in the merge request\nwidget, making it harder to track them.\n\n# Note: This workaround is perfectly safe and will not slow down your\npipeline.\n\ninclude:\n  - template: Security/SAST-IaC.gitlab-ci.yml\n#### END TWEAK\n\n\n```\n\n\nこのパイプラインは、`test`と`environments`の2つのステージのみを実行します。前者は、*TWEAK（微調整）*により、スキャナーを実行するために必要です。後者では、上記で定義したケース（ブランチへのプッシュ、デフォルトブランチへのマージ、タグ付け）ごとに異なる変数セットを持つ子パイプラインがトリガーされます。\n\n\nここで子パイプラインに[strategy:depend](https://docs.gitlab.com/ee/ci/yaml/index.html#triggerstrategy)キーワードで依存を追加します。これにより、デプロイの完了後にGitLabのパイプラインビューが更新されます。\n\n\nご覧のとおりベースとなるジョブが[無効になる](https://docs.gitlab.com/ee/ci/jobs/#hide-jobs)ように定義し、特定の変数とルールで拡張して、ターゲット環境ごとに単一のデプロイメントだけがトリガーされるようにしています。\n\n\n[定義済み変数](https://docs.gitlab.com/ee/ci/variables/predefined_variables.html)に加え、定義する必要がある新たな2つのエントリを使用します。\n\n1. 各環境[固有の変数](#the-variable-definitions)：`../vars/$variables_file.tfvars`\n\n2. [子パイプライン](#the-child-pipeline)。`.gitlab-ci/.first-layer.gitlab-ci.yml`で定義\n\n\nまずは、簡単な方、つまり変数の定義から始めましょう。\n\n\n### 変数の定義\n\n\nここでは、2つのソリューションを組み合わせてTerraformに変数を提供します。\n\n\n*\n1つ目は、[.tfvarsファイル](https://developer.hashicorp.com/terraform/language/values/variables#variable-definitions-tfvars-files)を使用して、機密性の低い入力をすべて行う方法です。これはGitLab内に保存する必要があります。\n\n\n![Terraformに変数を提供するための1つ目のソリューション](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097034/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750097033419.png)\n\n\n*\n2つ目は、プレフィックスに`TF_VAR`を付けた[環境変数](https://developer.hashicorp.com/terraform/language/values/variables#environment-variables)を使用する方法です。変数を挿入するこの2つ目の方法は、[変数をマスク](https://docs.gitlab.com/ee/ci/variables/#mask-a-cicd-variable)し、[保護](https://docs.gitlab.com/ee/ci/variables/#protect-a-cicd-variable)し、さらに[スコープの環境を設定する](https://docs.gitlab.com/ee/ci/environments/index.html#limit-the-environment-scope-of-a-cicd-variable)GitLabの機能とも関係する、**機密情報の漏えいを防ぐ**強力なソリューションです（本番環境のプライベートClassless\nInter-Domain\nRouting（CIDR）で非常に機密性が高いデータをやり取りすると考えられる場合は、この方法で保護すれば、本番環境、および保護ブランチやタグに対して実行されるパイプラインでのみ利用できるようにし、ジョブのログでその値がマスクされるようにすることができます）。\n\n\n![Terraformに変数を提供するための2つ目のソリューション](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097034/Blog/Content%20Images/Blog/Content%20Images/image4_aHR0cHM6_1750097033422.png)\n\n\nまた、各変数ファイルを変更できるユーザーを設定するために、[`CODEOWNERS`ファイル](https://docs.gitlab.com/ee/user/project/codeowners/)で各変数ファイルを管理する必要があります。\n\n\n```\n\n[Production owners] \n\nvars/production.tfvars @operations-group\n\n\n[Staging owners]\n\nvars/staging.tfvars @odupre @operations-group\n\n\n[CodeOwners owners]\n\nCODEOWNERS @odupre\n\n```\n\n\nこの記事は、Terraformのトレーニング用ではないため、詳しく説明せず、ここでは`vars/review.tfvars`ファイルを紹介するだけに留めます。当然ながら、これに続く環境ファイルもほぼ同じです。ここでは機密性の低い変数とその値を設定するだけです。\n\n\n```shell\n\naws_vpc_cidr = \"10.1.0.0/16\"\n\naws_public_subnet_cidr = \"10.1.1.0/24\"\n\naws_private_subnet_cidr = \"10.1.2.0/24\"\n\n```\n\n\n#### 子パイプライン\n\n\n実際の作業はこのパイプライン内で行われます。そのため、最初のパイプラインよりも少し複雑です。しかしながら、力を合わせれば何でも乗り越えられます！\n\n\n[メインパイプライン](#the-main-pipeline)の定義で説明したように、ダウンストリームパイプラインは`.gitlab-ci/.first-layer.gitlab-ci.yml`で宣言されています。\n\n\n![ファイルで宣言されているダウンストリームパイプライン](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097033/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750097033424.png)\n\n\n小さなステップに分けて説明します。最後に全体像が見えるはずです。\n\n\n##### Terraformコマンドを実行してコードを保護する\n\n\nまずは、Terraformのパイプラインを実行したいと思います。GitLabはオープンソースであるため、Terraform用のテンプレートもオープンソースです。そのため、このテンプレートを含めるだけで済みます。以下のスニペットを使用して行えます。\n\n\n```yml\n\ninclude:\n  - template: Terraform.gitlab-ci.yml\n```\n\n\nこのテンプレートは、planとapplyが行われる前に、Terraformによるフォーマットのチェックとコードの検証を実行します。デプロイしたものを破棄することもできます。\n\n\nさらに、GitLabは統合された単一のDevSecOpsプラットフォームであるため、このテンプレート内に2つのセキュリティスキャナーを自動的に組み込み、コード内の潜在的な脅威を検出し、次の環境にデプロイされる前に警告を発します。\n\n\nこれでコードの確認、保護、ビルド、デプロイが完了したので、いくつかの便利な技をご紹介します。\n\n\n##### ジョブ間でキャッシュを共有する\n\n\nジョブの結果をキャッシュして、後続のパイプラインジョブで再利用します。これはとても簡単で、以下のコードを追加するだけで行えます。\n\n\n```yml\n\ndefault:\n  cache:  # Use a shared cache or tagged runners to ensure terraform can run on apply and destroy\n    - key: cache-$CI_COMMIT_REF_SLUG\n      fallback_keys:\n        - cache-$CI_DEFAULT_BRANCH\n      paths:\n        - .\n```\n\n\nここでは、コミットごとに異なるキャッシュを定義し、必要に応じてmainブランチ名にフォールバックするようにします。\n\n\n使用しているテンプレートをよく見ると、ジョブの実行タイミングを制御するルールがあることがわかります。全ブランチですべての制御（QAとセキュリティの両方）を実行したいと思います。そのため、次にこれらの設定を上書きします。\n\n\n##### すべてのブランチで制御を実行する\n\n\nGitLabテンプレートは強力な機能で、テンプレートの一部のみを上書きできます。品質チェックとセキュリティチェックが必ず実行されるよう、一部のジョブのルールを上書きしたいと思います。これらのジョブ向けに定義するその他すべては、テンプレートで定義された内容のままにします。\n\n\n```yml\n\nfmt:\n  rules:\n    - when: always\n\nvalidate:\n  rules:\n    - when: always\n\nkics-iac-sast:\n  rules:\n    - when: always\n\niac-sast:\n  rules:\n    - when: always\n```\n\n\nこれで品質とセキュリティの制御を実施できたため、[ワークフロー](#the-workflow)内のメインの環境（integrationとstaging）とreview環境の動作に違いを付けたいと思います。まずはメインの環境の振る舞いを定義し、review環境用にこの設定を微調整していきましょう。\n\n\n##### integrationとstaging環境への継続的デプロイ\n\n\n前述のように、この2つの環境にmainブランチとタグをデプロイしたいため、そのように制御するルールを`build`と`deploy`の両方のジョブに追加します。そして、`integration`環境でのみ`destroy`を有効にします。`staging`環境は重要度が高いため、ワンクリックで削除できないようにします。この操作はエラーを引き起こしやすく、避けたいと考えています。\n\n\n最後に、`deploy`ジョブを`destroy`ジョブにリンクして、GitLab GUIから直接環境を`stop`できるようにします。\n\n\nここで使用する`GIT_STRATEGY`は、破棄する際にRunner内のソースブランチからコードが取得されることを防ぎます。これは、ブランチが手動で削除された場合は失敗するため、キャッシュを使用して、Terraformの命令を実行するために必要なものすべてを取得します。\n\n\n```yml\n\nbuild:  # terraform plan\n  environment:\n    name: $TF_STATE_NAME\n    action: prepare\n  rules:\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n    - if: $CI_COMMIT_TAG\n\ndeploy: # terraform apply --> automatically deploy on corresponding env\n(integration or staging) when merging to default branch or tagging. Second\nlayer environments (qa and production) will be controlled manually\n  environment: \n    name: $TF_STATE_NAME\n    action: start\n    on_stop: destroy\n  rules:\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n    - if: $CI_COMMIT_TAG\n\ndestroy:\n  extends: .terraform:destroy\n  variables:\n    GIT_STRATEGY: none\n  dependencies:\n    - build\n  environment:\n    name: $TF_STATE_NAME\n    action: stop\n  rules:\n    - if: $CI_COMMIT_TAG  # Do not destroy production\n      when: never\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $TF_DESTROY == \"true\" # Manually destroy integration env.\n      when: manual\n```\n\n前述のとおり、これは`integration`と`staging`環境へのデプロイというニーズに即しています。しかしながら、デベロッパーがほかの人に影響を及ぼさずに、自分のコードに触れて検証できる一時的な環境がまだ不足しています。そのため、次は`review`環境へのデプロイを行います。\n\n\n##### review環境への継続的デプロイ\n\n\nreview環境へのデプロイは、`integration`や`staging`環境へのデプロイと大差はありません。そこで、ここでもGitLabの機能を活用して、ジョブ定義の一部のみを上書きします。\n\n\nまずは、これらのジョブがフィーチャーブランチでのみ実行されるようルールを設定します。\n\n\n次に、`deploy_review`ジョブを`destroy_review`ジョブにリンクします。これにより、GitLabユーザーインターフェイスから**手動で**環境を停止できるようになりますが、さらに重要なのは、フィーチャーブランチの完了時に**環境の破棄が自動的にトリガー**されるようになります。これは、運用にかかる費用を抑えるのに効果的な、優れたFinOpsプラクティスです。\n\n\nTerraformでは、インフラストラクチャの構築時と同様に、破棄する際にもplanファイルが必要なため、`destroy_review`から`build_review`に依存を追加して、そのアーティファクトを取得します。\n\n\n最後に、ご覧のとおり、環境の名前を`$environment`に設定します。これは、[メインパイプライン](#the-main-pipeline)で`review/$CI_COMMIT_REF_SLUG`に設定され、`trigger:forward:yaml_variables:true`という命令により、その子パイプラインに転送されます。\n\n\n```yml\n\nbuild_review:\n  extends: build\n  rules:\n    - if: $CI_COMMIT_TAG\n      when: never\n    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n      when: on_success\n\ndeploy_review:\n  extends: deploy\n  dependencies:\n    - build_review\n  environment:\n    name: $environment\n    action: start\n    on_stop: destroy_review\n    # url: https://$CI_ENVIRONMENT_SLUG.example.com\n  rules:\n    - if: $CI_COMMIT_TAG\n      when: never\n    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n      when: on_success\n\ndestroy_review:\n  extends: destroy\n  dependencies:\n    - build_review\n  environment:\n    name: $environment\n    action: stop\n  rules:\n    - if: $CI_COMMIT_TAG  # Do not destroy production\n      when: never\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH   # Do not destroy staging\n      when: never\n    - when: manual\n```\n\n\nさて、まとめると、これで次のことを行うパイプラインができました。\n\n\n* 一時的なreview環境へのデプロイ。フィーチャーブランチの完了時に、自動的にクリーンアップされます\n\n* **デフォルトブランチ**から`integration`への継続的デプロイ\n\n* **タグ**から`staging`への継続的デプロイ\n\n\nさらにレイヤを追加し、今回は手動でのトリガーをもとに`qa`と`production`環境にデプロイされるようにしましょう。\n\n\n##### qaとproduction環境への継続的デプロイ\n\n\n誰もが本番環境に継続的デプロイしたいわけではないため、次の2つのデプロイには手動による検証を追加します。単に**CD**の観点で考えた場合、このトリガーを追加することはありませんが、ほかのトリガーからジョブを実行する方法を学ぶ機会として捉えてください。\n\n\nこれまでデプロイを実行する際は、必ず[メインパイプライン](#the-main-pipeline)から[子パイプライン](#the-child-pipeline)を開始してきました。\n\n\nデフォルトブランチとタグからさらにデプロイを実行したいため、これらの追加ステップ用に別のレイヤを追加します。新たな手順は必要ありません。[メインパイプライン](#the-main-pipeline)で行ったのとまったく同じプロセスを再度繰り返します。この方法だと、必要な数だけレイヤを操作できます。中には最大で9つの環境がある例も見たことがあります。環境の数を抑えることの利点についてはあらためて説明しませんが、このプロセスを使用することで、初期段階から最終的なデリバリーまで、同じパイプラインを非常に簡単に実装できます。その上、パイプラインの定義をシンプルに保ちつつ、コストをかけずに維持できる小さな塊に分割可能です。\n\n\nここでは変数の競合を防ぐために、新しいvar名を使用してTerraformの状態と入力ファイルを識別しています。\n\n\n```yml\n\n.2nd_layer:\n  stage: 2nd_layer\n  variables:\n    TF_ROOT: terraform\n  trigger:\n    include: .gitlab-ci/.second-layer.gitlab-ci.yml\n    # strategy: depend            # Do NOT wait for the downstream pipeline to finish to mark upstream pipeline as successful. Otherwise, all pipelines will fail when reaching the pipeline timeout before deployment to 2nd layer.\n    forward:\n      yaml_variables: true      # Forward variables defined in the trigger job\n      pipeline_variables: true  # Forward manual pipeline variables and scheduled pipeline variables\n\nqa:\n  extends: .2nd_layer\n  variables:\n    TF_STATE_NAME_2: qa\n    environment: $TF_STATE_NAME_2\n    TF_CLI_ARGS_plan_2: \"-var-file=../vars/$TF_STATE_NAME_2.tfvars\"\n  rules:\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n\nproduction:\n  extends: .2nd_layer\n  variables:\n    TF_STATE_NAME_2: production\n    environment: $TF_STATE_NAME_2\n    TF_CLI_ARGS_plan_2: \"-var-file=../vars/$TF_STATE_NAME_2.tfvars\"\n  rules:\n    - if: $CI_COMMIT_TAG\n```\n\n\n**ここで重要なテクニックは、新しいダウンストリームパイプラインに使用するstrategyの設定です。**`trigger:strategy`はデフォルトの値のままにしておきます。そうしなければ、[メインパイプライン](#the-main-pipeline)は、[孫パイプライン](#the-grand-child-pipeline)が完了するまで待機することになります。手動トリガーだと、非常に長い時間かかり、パイプラインダッシュボードが読みづらく、理解しにくくなる可能性があります。\n\n\nここでインクルードした`.gitlab-ci/.second-layer.gitlab-ci.yml`ファイルが何なのか疑問に感じた方もいらっしゃるかもしれません。こちらは次のセクションで説明します。\n\n\n##### 1つ目のレイヤのパイプラインに関する全定義\n\n\n1つ目のレイヤの全詳細（`.gitlab-ci/.first-layer.gitlab-ci.yml`に保存）を確認したい場合は、以下のセクションを参照してください。\n\n\n```yml\n\nvariables:\n  TF_VAR_aws_ami_id: $AWS_AMI_ID\n  TF_VAR_aws_instance_type: $AWS_INSTANCE_TYPE\n  TF_VAR_aws_default_region: $AWS_DEFAULT_REGION\n\ninclude:\n  - template: Terraform.gitlab-ci.yml\n\ndefault:\n  cache:  # Use a shared cache or tagged runners to ensure terraform can run on apply and destroy\n    - key: cache-$CI_COMMIT_REF_SLUG\n      fallback_keys:\n        - cache-$CI_DEFAULT_BRANCH\n      paths:\n        - .\n\nstages:\n  - validate\n  - test\n  - build\n  - deploy\n  - cleanup\n  - 2nd_layer       # Use to deploy a 2nd environment on both the main branch and on the tags\n\nfmt:\n  rules:\n    - when: always\n\nvalidate:\n  rules:\n    - when: always\n\nkics-iac-sast:\n  rules:\n    - if: $SAST_DISABLED == 'true' || $SAST_DISABLED == '1'\n      when: never\n    - if: $SAST_EXCLUDED_ANALYZERS =~ /kics/\n      when: never\n    - when: on_success\n\niac-sast:\n  rules:\n    - if: $SAST_DISABLED == 'true' || $SAST_DISABLED == '1'\n      when: never\n    - if: $SAST_EXCLUDED_ANALYZERS =~ /kics/\n      when: never\n    - when: on_success\n\n###########################################################################################################\n\n## Integration env. and Staging. env\n\n##  * Auto-deploy to Integration on merge to main.\n\n##  * Auto-deploy to Staging on tag.\n\n##  * Integration can be manually destroyed if TF_DESTROY is set to true.\n\n##  * Destroy of next env. is not automated to prevent errors.\n\n###########################################################################################################\n\nbuild:  # terraform plan\n  environment:\n    name: $TF_STATE_NAME\n    action: prepare\n  rules:\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n    - if: $CI_COMMIT_TAG\n\ndeploy: # terraform apply --> automatically deploy on corresponding env\n(integration or staging) when merging to default branch or tagging. Second\nlayer environments (qa and production) will be controlled manually\n  environment: \n    name: $TF_STATE_NAME\n    action: start\n    on_stop: destroy\n  rules:\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n    - if: $CI_COMMIT_TAG\n\ndestroy:\n  extends: .terraform:destroy\n  variables:\n    GIT_STRATEGY: none\n  dependencies:\n    - build\n  environment:\n    name: $TF_STATE_NAME\n    action: stop\n  rules:\n    - if: $CI_COMMIT_TAG  # Do not destroy production\n      when: never\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $TF_DESTROY == \"true\" # Manually destroy integration env.\n      when: manual\n###########################################################################################################\n\n\n###########################################################################################################\n\n## Dev env.\n\n##  * Temporary environment. Lives and dies with the Merge Request.\n\n##  * Auto-deploy on push to feature branch.\n\n##  * Auto-destroy on when Merge Request is closed.\n\n###########################################################################################################\n\nbuild_review:\n  extends: build\n  rules:\n    - if: $CI_COMMIT_TAG\n      when: never\n    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n      when: on_success\n\ndeploy_review:\n  extends: deploy\n  dependencies:\n    - build_review\n  environment:\n    name: $environment\n    action: start\n    on_stop: destroy_review\n    # url: https://$CI_ENVIRONMENT_SLUG.example.com\n  rules:\n    - if: $CI_COMMIT_TAG\n      when: never\n    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n      when: on_success\n\ndestroy_review:\n  extends: destroy\n  dependencies:\n    - build_review\n  environment:\n    name: $environment\n    action: stop\n  rules:\n    - if: $CI_COMMIT_TAG  # Do not destroy production\n      when: never\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH   # Do not destroy staging\n      when: never\n    - when: manual\n###########################################################################################################\n\n\n###########################################################################################################\n\n## Second layer\n\n##  * Deploys from main branch to qa env.\n\n##  * Deploys from tag to production.\n\n###########################################################################################################\n\n.2nd_layer:\n  stage: 2nd_layer\n  variables:\n    TF_ROOT: terraform\n  trigger:\n    include: .gitlab-ci/.second-layer.gitlab-ci.yml\n    # strategy: depend            # Do NOT wait for the downstream pipeline to finish to mark upstream pipeline as successful. Otherwise, all pipelines will fail when reaching the pipeline timeout before deployment to 2nd layer.\n    forward:\n      yaml_variables: true      # Forward variables defined in the trigger job\n      pipeline_variables: true  # Forward manual pipeline variables and scheduled pipeline variables\n\nqa:\n  extends: .2nd_layer\n  variables:\n    TF_STATE_NAME_2: qa\n    environment: $TF_STATE_NAME_2\n    TF_CLI_ARGS_plan_2: \"-var-file=../vars/$TF_STATE_NAME_2.tfvars\"\n  rules:\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n\nproduction:\n  extends: .2nd_layer\n  variables:\n    TF_STATE_NAME_2: production\n    environment: $TF_STATE_NAME_2\n    TF_CLI_ARGS_plan_2: \"-var-file=../vars/$TF_STATE_NAME_2.tfvars\"\n  rules:\n    - if: $CI_COMMIT_TAG\n###########################################################################################################\n\n```\n\n\nこの段階で、すでに3つの環境に問題なくデプロイしています。個人的にはこのアプローチが理想的でおすすめです。ただし、もっと多くの環境が必要であれば、CDパイプラインに追加してください。\n\n\n`trigger:include`というキーワードでダウンストリームパイプラインをインクルードしていることはすでにお気づきだと思います。これにより、`.gitlab-ci/.second-layer.gitlab-ci.yml`ファイルがインクルードされます。ほぼ同じパイプラインを実行したいため、当然ながら先ほど詳しく説明したものと内容は非常に似ています。ここで[孫パイプライン](#the-grand-child-pipeline)を定義する主な利点は、それ自体が独立しているため、変数やルールを非常に定義しやすくことです。\n\n\n### 孫パイプライン\n\n\nこの2つ目のレイヤとなるパイプラインは、まったく新しいパイプラインです。そのため、1つ目のレイヤの定義を模倣しつつ、以下を行う必要があります。\n\n\n* [Terraformテンプレートのインクルード](#run-terraform-commands-and-secure-the-code)。\n\n*\n[セキュリティチェックの実施](#run-controls-on-all-branches)。Terraformの検証は1つ目のレイヤと重複するものの、セキュリティスキャナーにより以前にスキャナーが実行されたときにはまだ存在していなかった脅威を見つけられる可能性があります（stagingへのデプロイの数日後にproductionへのデプロイを行う場合など）。\n\n*\n[buildとdeployジョブを上書きして特定のルールを設定](#cd-to-review-environments)。早すぎる削除を防ぐために、`destroy`ステージは自動化されないようになったことにご注意ください。\n\n\n上述のとおり、`TF_STATE_NAME`と`TF_CLI_ARGS_plan`は、[メインパイプライン](#the-main-pipeline)から[子パイプライン](#the-child-pipeline)に渡されています。これらの値を[子パイプライン](#the-child-pipeline)から[孫パイプライン](#the-grand-child-pipeline)に渡すには、別の変数名が必要でした。そのため、子パイプラインでは変数名の末尾に`_2`を付け足し、`before_script`の実行中に適切な変数に値をコピーしています。\n\n\n各ステップについては説明済みであるため、ここでは細かいところは省き、直接グローバルな2つ目のレイヤの定義（`.gitlab-ci/.second-layer.gitlab-ci.yml`に保存）の全体像をご確認ください。\n\n\n```yml\n\n# Use to deploy a second environment on both the default branch and the\ntags.\n\n\ninclude:\n  template: Terraform.gitlab-ci.yml\n\nstages:\n  - validate\n  - test\n  - build\n  - deploy\n\nfmt:\n  rules:\n    - when: never\n\nvalidate:\n  rules:\n    - when: never\n\nkics-iac-sast:\n  rules:\n    - if: $SAST_DISABLED == 'true' || $SAST_DISABLED == '1'\n      when: never\n    - if: $SAST_EXCLUDED_ANALYZERS =~ /kics/\n      when: never\n    - when: always\n\n###########################################################################################################\n\n## QA env. and Prod. env\n\n##  * Manually trigger build and auto-deploy in QA\n\n##  * Manually trigger both build and deploy in Production\n\n##  * Destroy of these env. is not automated to prevent errors.\n\n###########################################################################################################\n\nbuild:  # terraform plan\n  cache:  # Use a shared cache or tagged runners to ensure terraform can run on apply and destroy\n    - key: $TF_STATE_NAME_2\n      fallback_keys:\n        - cache-$CI_DEFAULT_BRANCH\n      paths:\n        - .\n  environment:\n    name: $TF_STATE_NAME_2\n    action: prepare\n  before_script:  # Hack to set new variable values on the second layer, while still using the same variable names. Otherwise, due to variable precedence order, setting new value in the trigger job, does not cascade these new values to the downstream pipeline\n    - TF_STATE_NAME=$TF_STATE_NAME_2\n    - TF_CLI_ARGS_plan=$TF_CLI_ARGS_plan_2\n  rules:\n    - when: manual\n\ndeploy: # terraform apply\n  cache:  # Use a shared cache or tagged runners to ensure terraform can run on apply and destroy\n    - key: $TF_STATE_NAME_2\n      fallback_keys:\n        - cache-$CI_DEFAULT_BRANCH\n      paths:\n        - .\n  environment: \n    name: $TF_STATE_NAME_2\n    action: start\n  before_script:  # Hack to set new variable values on the second layer, while still using the same variable names. Otherwise, due to variable precedence order, setting new value in the trigger job, does not cascade these new values to the downstream pipeline\n    - TF_STATE_NAME=$TF_STATE_NAME_2\n    - TF_CLI_ARGS_plan=$TF_CLI_ARGS_plan_2\n  rules:\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n    - if: $CI_COMMIT_TAG && $TF_AUTO_DEPLOY == \"true\"\n    - if: $CI_COMMIT_TAG\n      when: manual\n###########################################################################################################\n\n```\n\n\nこれで**準備完了です。**\n本番環境にデプロイする前に、ジョブの実行を管理する方法は自由に変更できます。たとえば、GitLabの機能を活用して、本番環境へのデプロイ前に[ジョブを遅延させる](https://docs.gitlab.com/ee/ci/jobs/job_control.html#run-a-job-after-a-delay)設定をすることも可能です。\n\n\n## 実際に試す\n\n\nついに目標を達成できました。**フィーチャーブランチ**、**mainブランチ**、**タグ**だけで、**5つの異なる環境へのデプロイ**を管理できるようになりました。\n\n* パイプラインの効率とセキュリティを確保するために、GitLabのオープンソーステンプレートを集中的に再利用しました。\n\n* GitLabテンプレートの機能を活用して、個別に制御が必要なブロックだけを上書きしました。\n\n* パイプラインを小さな塊に分割し、ニーズに完全に合うようにダウンストリームパイプラインを制御しました。\n\n\nここからは、自由に進めてください。たとえば、[trigger:rules:changes](https://docs.gitlab.com/ee/ci/yaml/#ruleschanges)キーワードを使って、ソフトウェアのソースコードのダウンストリームパイプラインをトリガーするように、メインパイプラインを簡単に更新することも可能です。また、発生した変更に応じて、別の[テンプレート](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates/)を使用できます。その方法はまた別の機会に。\n",[9,820,818,679,680],"2025-06-12",{"slug":1379,"featured":6,"template":685},"using-child-pipelines-to-continuously-deploy-to-five-environments","content:ja-jp:blog:using-child-pipelines-to-continuously-deploy-to-five-environments.yml","Using Child Pipelines To Continuously Deploy To Five Environments","ja-jp/blog/using-child-pipelines-to-continuously-deploy-to-five-environments.yml","ja-jp/blog/using-child-pipelines-to-continuously-deploy-to-five-environments",{"_path":1385,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1386,"content":1392,"config":1397,"_id":1399,"_type":14,"title":1400,"_source":16,"_file":1401,"_stem":1402,"_extension":19},"/ja-jp/blog/what-is-ci-cd",{"title":1387,"description":1388,"ogTitle":1387,"ogDescription":1388,"noIndex":6,"ogImage":1389,"ogUrl":1390,"ogSiteName":669,"ogType":670,"canonicalUrls":1390,"schema":1391},"CI/CDとは？意味や導入のメリット・デメリット、ツールの選び方を解説","この記事では、CI/CDの概要や導入するメリット、CI/CDツールの選び方などを詳しく解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663328/Blog/Hero%20Images/cicd3.jpg","https://about.gitlab.com/blog/what-is-ci-cd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"CI/CDとは？意味や導入のメリット・デメリット、ツールの選び方を解説\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab Japan Team\"},{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2025-03-03\",\n      }",{"title":1387,"description":1388,"authors":1393,"heroImage":1389,"date":1394,"body":1395,"category":703,"tags":1396},[771,675],"2025-03-03","ソフトウェア開発においては、顧客に最大限の価値を提供するためにリリース後も繰り返し改善を行なっていくことが求められます。そのプロセスを効率化するために活用できるのが「CI/CD」です。\n\n実際に開発の効率化のための手段のひとつとしてCI/CDの採用を検討している担当者もいるのではないでしょうか。この記事では、CI/CDの概要や導入するメリット、CI/CDツールの選び方などを詳しく解説します。\n\n## CI/CDとは？\n![cicd1](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687600/Blog/Content%20Images/cicd1.jpg)\n\nCI/CDとは、ソフトウェア開発におけるビルドやテスト、デプロイなど、従来であれば手作業で介入する必要があったプロセスを自動化して、素早くプロダクトをリリースする手法のことです。\n\n「Continuous Integration」と「Continuous Delivery」の略称であり、日本語で直訳すると「継続的インテグレーション／継続的デリバリー」となります。\n\n## CIとCDの違い\n\nでは、CIとCDではどのような違いがあるのかそれぞれ意味を解説していきます。\n\n### CI （継続的インテグレーション）\n\nCI （継続的インテグレーション）は、ソフトウェア開発において自動ビルドとテストを繰り返し実行することを示します。\n\n複数の開発者が修正したソースコードを頻繁に統合して、不具合がないか確認するためのプロセスです。このプロセスを繰り返し自動的に実行することで、プログラムのバグを早期に発見・改善でき開発を効率よく進められます。\n\n### CD（継続的デリバリー）\n\nCDとは、「継続的デリバリー」という言葉の通り、CIで検証されたソフトウェアを顧客に対して継続的に公開できる仕組みをつくることです。\n\nCIのプロセスにおいて自動ビルドやテストが実行された後に、ステージング環境やテスト環境などに成果物をデプロイし、さらにセキュリティテストや負荷テストなどを実施します。\n\n最終的な本番環境へのデプロイについては手動で承認する形で行い、ボタンをクリックするだけで反映することができます。\n\n### CD（継続的デプロイメント）\n\nCDには、継続的デリバリーの他にも「継続的デプロイメント」の意味もあります。継続的デプロイメントとは、全てのソースコードの変更が自動的に本番環境に反映される仕組みのことです。\n\n継続的デリバリーと継続的デプロイメントの違いは、手動で本番環境にリリースするか自動で行うかという点です。\n\n## CI/CDパイプラインとは？\n\nCI/CDパイプラインとは、ソースコードの変更からテスト、本番環境へのデプロイまでの一連の流れを自動化したプロセスを指します。つまり、CIとCDの両者を組み合わせた仕組みのことです。\n\nCI/CDパイプラインを構築することで、ソフトウェア開発における各工程の連携がスムーズになり、ビルドやテストの工数削減や迅速なリリースを実現できます。\n\n## CI/CDの導入が必要とされる背景とDevSecOps・アジャイル開発との関係性\n![cicd4](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687600/Blog/Content%20Images/cicd4.jpg)\n\nCI/CDの導入がなぜソフトウェア開発の現場で必要とされているのでしょうか。CI/CDと[DevSecOps](https://about.gitlab.com/ja-jp/topics/devsecops/)・アジャイル開発との関係性を踏まえながら解説します。\n\n### CI/CDが必要とされる背景\n\n現代は「Society 5.0時代」と呼ばれており、IT技術の発展と進化に伴い多様なシステムを活用して社会を豊かにするという考え方が重要視されています。ビジネスの場においてもテクノロジーの急激な進化に伴い、多くのサービスが生まれる中で企業間での競争が激化しています。\n\nそうした競争に打ち勝っていくためには、変化に柔軟かつ迅速に対応できる開発環境を構築しなければなりません。CI/CDなら一定の品質を維持したうえで開発プロセスを自動化でき、変化に対応しながら迅速にソフトウェアを顧客に届けることが可能です。\n\nこの品質とスピードの両方の課題を解決できるという強みが、ソフトウェア開発の領域においてCI/CDが注目されている理由だといえます。\n\n### DevSecOps・アジャイル開発との関係性\n\nCI/CDは、[DevSecOps](https://about.gitlab.com/ja-jp/topics/devsecops/)やアジャイル開発との相性が良い開発手法であり、これらの手法が主流となってきていることも注目される理由のひとつです。つまり、CI/CDは[DevSecOps](https://about.gitlab.com/ja-jp/topics/devsecops/)とアジャイル開発を効果的に実現するための重要な要素として位置付けられています。\n\n例えば、アジャイル開発ではスピード感を持って機能をリリースしていくことが求められます。しかし、リリースを頻繁に繰り返すというプロセスは、毎回テストの実施などにおいて  \n開発者の負担が増大してしまうことを意味します。また、[DevSecOps](https://about.gitlab.com/ja-jp/topics/devsecops/)でいう「セキュリティのシフトレフト」という観点でも、コーディング直後にセキュリティスキャンを実施し、見つかったセキュリティ脆弱性を記憶が鮮明なうちに修正する、という先進的な取り組みにおいても、CI/CDは極めて重要な役割を担います。\n\nCI/CDを導入すれば開発プロセスを自動化できるため、アジャイル開発の強みを活かしながらコスト削減と品質の維持、安全なソフトウェア・サービス開発を実現することが可能です。\n\n## CI/CD導入のメリット\n![cicd2](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687600/Blog/Content%20Images/cicd2.jpg)\n\n既に触れている内容でもありますが、改めてCI/CD導入のメリットについて把握しておきましょう。\n\n* 開発スピードを加速化できる  \n* 生産性と品質の向上が期待できる  \n* バグを早期に発見できる\n\n### 開発スピードを加速化できる\n\nCI/CDを導入することで、ソフトウェア開発からリリースまでの時間を短縮できます。\n\nソースコードを変更した後にはビルドやテスト、デプロイなどさまざまな工程を踏む必要があり、これらを全て手作業で行うとかなりの時間を要します。CI/CDなら手動での作業を自動化できるため、迅速に顧客のソフトウェアを提供することが可能です。\n\n### 生産性と品質の向上が期待できる\n\nCI/CDを導入すればテストからリリースまでの工程を自動化できるため、業務負担の削減につながります。これによって手動で作業していた分の時間をより重要なタスクに割くことが可能になり、生産性向上にも寄与するでしょう。\n\n例えば、プロダクトの品質向上に向けた施策立案や、顧客ニーズや市場の変化を踏まえた仕様変更や機能追加などの重要な業務に注力できるようになります。\n\n### バグを早期に発見できる\n\nCI/CD活用によってテスト工程が自動化されることから、頻繁にテストを実施できるようになります。先ほども触れたようにアジャイル開発の場合は頻繁にテストを繰り返す必要があるため、CI/CDの強みを活かすことでバグを早期に発見できます。\n\n早い段階でバグを発見してその都度修正を実施すれば、機能全体に影響を及ぼすような大きな不具合の発生を未然に防止することも可能です。\n\nまた、スピードを意識するあまりテストの実施が抜けてしまったという重大なミスの防止にもつながるでしょう。\n\n## CI/CD導入における考慮点と成功への鍵\n![cicd6](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687600/Blog/Content%20Images/cicd6.jpg)\n\nCI/CDの導入を成功させるためには事前準備や継続的な改善を実施することが大切です。以下で詳しく解説します。\n\n### CI/CDパイプライン構築による開発基盤の強化を図る\n\nCI/CDを活用するためには、CI/CDパイプラインを構築して開発基盤の強化を図る必要があります。\n\n自動化の基準設定とテストコード作成を丁寧に行うことで、その後正しくCI/CDが機能し、ソフトウェア開発における長期的な品質向上の実現につながります。\n\n### 継続的な実施と改善で価値の最大化を実現する\n\nCI/CDの強みを最大限に活かすためには、アジャイル開発のように頻繁にテストとリリースを実施するような開発手法で活用することが大切です。ウォーターフォール開発の場合は、長期的な計画をベースとして開発が進められるため、CI/CDの使用頻度が少なく十分な効果を発揮できません。\n\nまた、CI/CDについては定期的な改善が必要です。例えば、ソフトウェアの変更によってテスト条件の修正を行う場合は、テストコードも書き直さなければなりません。「[GitLab Duo](https://about.gitlab.com/ja-jp/gitlab-duo/)」なら、CI/CDパイプラインの構築やメンテナンス、エラーの発見・分析を効率化できます。\n\n## CI/CDを導入する際のポイント\n\nCI/CDをスムーズに導入する際には以下のようなポイントを押さえておきましょう。\n\n* 必要なリソースを確保する  \n* メンバーに対する教育を行う\n\n### 必要なリソースを確保する\n\nCI/CDを導入する際には、予算や人材、工数の確保が求められます。自社の現状を把握してCI/CD導入にはどのくらいの予算が必要で、事前準備のためにどれだけの工数を必要とするのかを具体的に落とし込んでおくことが大切です。\n\nなお、CI/CDパイプラインの構築においては、DevOpsエンジニアやSREと呼ばれる人材のアサインが必要です。\n\n### メンバーに対する教育を行う\n\nCI/CDを導入して正しく運用していくためには、チームメンバー全体の理解が必要です。具体的には「自社でCI/CDを導入する目的や解決したい課題」「CI/CD関連でよく使用される用語」「CI/CDツールの使い方・運用ルール」などをメンバーに教育し、理解を深めてもらいます。\n\nしかし、チームメンバーに教育するには時間とコストが多くかかってしまい、その期間は利益を生み出していないことを意味します。「[GitLab Duo](https://about.gitlab.com/ja-jp/gitlab-duo/)」なら、AIによりソフトウェア開発のワークフロー全体を効率化できるため、人材の採用や教育コストの削減にもつなげられます。\n\n## CI/CDツールの選び方\n![cicd5](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687600/Blog/Content%20Images/cicd5.jpg)\n\nCI/CDツールは以下の５つの観点を意識して選びましょう。\n\n* 機能  \n* 提供形態  \n* コスト  \n* セキュリティ  \n* サポート体制\n\n### 機能\n\nまずは、自社の開発プロジェクトに必要な機能が搭載されているか確認します。例えば、以下のような機能が搭載されたツールを選ぶと良いでしょう。\n\n* CI/CDパイプラインの構築やメンテナンス機能  \n* [API](https://about.gitlab.com/ja-jp/blog/what-is-an-api/)やプラグインなどの連携機能  \n* 優れた拡張機能 など\n\n### 提供形態\n\nCI/CDツールにおいては、クラウド型とオンプレミス型の提供形態があります。\n\nクラウド型はインターネット接続を通して提供元のツールを利用する方法で、サーバーを自社で管理する必要がなく手軽に導入できることがメリットです。ただし、カスタマイズ性は劣ります。\n\n一方、オンプレミス型は自社でサーバーを用意してツールを利用する方法です。オンプレミス型の場合は、カスタマイズ性が高く、インターネット上のセキュリティリスクが軽減できることから、特に機密性の高いデータを扱うビジネスや規制の強い業種にむいています。その反面、サーバー構築に手間がかかりますので、両者の特徴を把握したうえで自社にマッチした利用形態を選択しましょう。\n\n[GitLabでは、クラウド型とオンプレミス型の両方を提供しており、自社の置かれた状況に最適な構築が可能です](https://about.gitlab.com/ja-jp/pricing/)。\n\n### コスト\n\nCI/CDツールを導入する際には当然コストが発生するため、自社の予算と照らし合わせながら利用に必要なコストを確認します。\n\nその際、コストを抑えたいからといって自社に必要な機能が搭載されていないツールを導入しても効果は得られないため、機能面も考慮しながらチェックするのがポイントです。\n\nまた、いきなり開発環境を変えてしまうとリスクもあるため、まずは無料トライアルを受けられるツールを選定して使用感を確かめておきましょう。\n\n### セキュリティ\n\n近年企業においてもさまざまなセキュリティインシデントが発生しています。ソフトウェア開発におけるセキュリティリスクを軽減するためには、CI/CDツールが持つセキュリティスキャン等の機能もチェックしておきましょう。\n\n例えば、AI機能を搭載したツールならソースコードの脆弱性をより効率的に把握して修正できます。また、CI/CDツール製品そのものに、開発元からセキュリティパッチが迅速に提供されているかどうかもチェックしておきたいポイントです。\n\n### サポート体制\n\nCI/CDツールの導入や運用においてトラブルが発生する場合もあります。その際ツール提供側でサポート体制が提供されていると、早期の問題解決につながります。\n\nそのため、サポートプランの有無を確認し、窓口の対応時間や連絡方法をチェックしておきましょう。また、ユーザーコミュニティが活発化しているか、参考資料やドキュメントが充実しているかなども確認しておくと良いでしょう。\n\n## CI/CDツールなら「GitLab」\n\nCI/CDツールをお探しならぜひ「[GitLab](https://about.gitlab.com/ja-jp/)」をご検討下さい。CI/CDの機能を確保する際には、別々のツールを管理してそれらを統合することで実現しているケースがよく見られます。しかし、この構築方法ではツールの選定や準備にも手間がかかり、効率が良いとはいえません。\n\nAIを搭載したGitLabなら、単一の統合ツールとしてCI/CDパイプラインの効率化、セキュリティ対策、品質向上、運用コストの削減などを実現することができます。実際にさまざまな企業でGitLabが導入され、リリースサイクルの短縮に成功しています。\n\nまた、GitLabではクラウド型、オンプレミス型の両方を提供していますので、自社の環境に最適な方をお選びいただけます。無料トライアル版もご用意しているため、まずは使用感をお試しください。[サポート体制](https://about.gitlab.com/support/)や[参考ドキュメント](https://docs.gitlab.com/)も充実しているため、安心して運用いただけます。\n\n## CI/CDを導入して開発効率の向上を図ろう\n\nソフトウェアの開発においてCI/CDを導入することで、開発スピードや生産性向上などが期待できます。CI/CDを導入して自社のプロジェクトを成功させるためには、適切なCI/CDパイプライン構築と、継続的なメンテナンスを徹底する意識を持つことが大切です。\n\nCI/CDツールの選定においては、ぜひ「[GitLab](https://about.gitlab.com/ja-jp/)」をご検討下さい。GitLabならCI/CDの実現に必要な機能が搭載されているため、スムーズな導入を実現できます。\n\nGitLabによるCI/CDの事例はこちらからご覧下さい。\n\n> [CI/CDと堅牢なセキュリティスキャンがHilti社のSDLCを加速した方法](https://about.gitlab.com/ja-jp/customers/hilti/?utm_medium=blog&utm_source=blog&utm_campaign=eg_apac_brand_x_x_ja_gitlabjapanblogseo)\n\n\u003Cbr>\u003Cbr>\u003Cbr>\n\n*監修： ハシュカ アンドリュー /Andrew Haschka [@tkomatsubara](https://gitlab.com/tkomatsubara)\u003Cbr>\n（GitLab合同会社 ソリューションアーキテクト本部 シニアパートナーソリューションアーキテクト）*",[9],{"slug":1398,"featured":91,"template":685},"what-is-ci-cd","content:ja-jp:blog:what-is-ci-cd.yml","What Is Ci Cd","ja-jp/blog/what-is-ci-cd.yml","ja-jp/blog/what-is-ci-cd",{"_path":1404,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1405,"content":1408,"config":1418,"_id":1420,"_type":14,"title":1421,"_source":16,"_file":1422,"_stem":1423,"_extension":19},"/ja-jp/blog/what-is-docker",{"noIndex":6,"description":1406,"title":1407},"Dockerのコンテナ技術は広く普及しつつあります。Dockerとは何なのか。Dockerの使い方は？Dockerプラットフォームとその技術の基礎を学びましょう。","Dockerとは：GitLabとの統合とコンテナについての入門編 | GitLab",{"title":1409,"description":1410,"authors":1411,"date":1412,"body":1413,"category":703,"heroImage":1414,"tags":1415},"Dockerとは：超入門編","Dockerのコンテナ技術は広く普及しつつあります。Dockerとは何なのか。Dockerの使い方は？Dockerプラットフォームとその技術の基礎を学びましょう。\n",[878],"2025-06-18","Dockerコンテナ技術は、2013年にオープンソースの「Dockerエンジン」として公開され、翌年2014年には本番環境向けの商用版が発表されました。その後約10年の間に、Dockerは使いやすさと高い利便性から、IT業界で瞬く間に広く普及してきました。これからもその人気は高まっていくでしょう。\n\nしかしその一方で、いまだに「Dockerとは何ですか」という声もよく耳にします。この記事では、Docker環境の導入を検討中で、Dockerにまだ不慣れなデベロッパーやプログラマーの皆様を対象に、Dockerの基本を解説します。Dockerに触れたことのない初心者向けの「Docker超入門編」です。\n\n## 目次\n\n1. Dockerとは：超入門編\n2. Dockerの目的\n\n   * Dockerとは\n   * Dockerでできること\n   * Dockerイメージとは\n   * Dockerコンテナとは\n   * Dockerfileとは\n   * Dockerはなぜ重要なのか\n3. Dockerの主な機能\n\n   * Dockerの特徴\n   * Docker Composeとは\n4. アプリケーションのデプロイにおけるDockerのメリット\n\n   * 開発環境と本番環境のシームレス化\n   * 起動の軽量化・処理速度の高速化\n   * バージョン管理のしやすさ\n   * 優れたスケーラビリティ\n5. Dockerのデメリット\n\n   * ひとつのOSを使わなければならない\n   * 大規模開発時のオーバーヘッド\n   * 技能習得に時間がかかる\n   * セキュリティに脆弱性が生じることもある\n   * コンテナ間での連携が難しい\n6. GitLabはDockerが抱える課題をどのように解決するのか\n7. GitLabのDevSecOpsにおけるDockerの役割\n8. まとめ\n9. FAQ（よくある質問）\n\n## Dockerの目的\n\nはじめに、Dockerとはどういったもので、何ができて、どうして便利なのか、なぜ重要なのか、Dockerの目的に着目しながらその概念をまとめていきます。\n\n### Dockerとは\n\nDockerは、Linuxのコンテナ技術を用いた軽量なソフトウェアコンテナプラットフォームです。アプリケーションの開発、出荷、実行を簡易化するために設計されました。Dockerを使えば、すべての依存関係と一緒にアプリケーションをパッケージ化できるため、依存関係を一つひとつ手動でインストールする必要がなくなり、一貫性のあるコード実行が可能になります。\n\nDockerを使えばアプリケーションの実行環境を標準化でき、環境の違いによる問題を減らすことで開発から本番環境へのデプロイ時間を大幅に短縮できます。\n\nLinuxには以前からコンテナ仮想化という技術がありました。この技術を使うと、プログラムを開発・実行環境から隔離することにより、複数のプログラムを素早く実行できます。ただし、この従来型の仮想化技術は、仮想環境を構築するためにホストとなるOS（オペレーティングシステム）に依存する必要がありました。Dockerはこのコンテナ仮想化技術をOSに関係なく簡単に扱えるようにしたソフトウェアといえます。\n\nDockerの基本概念はイメージとコンテナです。Dockerイメージは、読み取り専用のテンプレートであり、コンテナを作成するための指示が記述されています。たとえば、コンテナで実行するアプリケーションとその依存関係、環境変数、ファイルシステムなどがこれに含まれます。\n\n### Dockerでできること\n\nDockerを使うと、1台のマシン中に複数のコンテナ（仮想環境）をビルドできるため、いくつかの開発環境に対応することができます。つまり、1台のサーバー上で複数のアプリケーションを効率的に動かすことができるのです。アプリケーションの開発環境をDockerで構築すれば、たとえば開発環境（Windows）で動いていたアプリケーションがLinux上で起動しない、といった問題は発生しません。Dockerで構築した環境は、他のデベロッパーとクラウド上で簡単に共有できるため、開発作業がスムーズに進められます。\n\n### Dockerイメージとは\n\nDockerイメージは、アプリケーションを実行するのに必要なソースコードと必要な依存関係をパッケージ化したものです。Dockerコンテナを実行する際には、このDockerイメージが必要です。\n\nDockerイメージは、コンテナイメージを構成する複数のファイルに、`Dockerfile` を合わせてビルドします。つまり、Dockerイメージは、手作業で書くのではなく、コマンドを使って作成します。\n\nそのため、Dockerイメージは単一のファイルではなく、Dockerコンテナの実行に必要なパッケージ（ファイルやメタデータの集合体）であることを理解することが重要です。\n\n### Dockerコンテナとは\n\nLinuxのコンテナは、アプリケーションを内包し、必要なライブラリや依存関係、ファイルが含まれています。\n\n一方、Dockerコンテナは、Dockerイメージの実行可能なインスタンスです。これはDockerイメージから生成され、アプリケーションを実行するためのランタイム環境です。ただし、ハイパーバイザーを使用する従来の仮想化とは違い、DockerのコンテナはホストOS（オペレーティングシステム）のカーネルで実行されます。Dockerイメージ内には、個別のOSはありません。\n\nDockerイメージは環境のスナップショットであり、コンテナはソフトウェアを実行する環境といえます。\n\n### Dockerfileとは\n\n`Dockerfile`は文字情報を主体とするファイルで、ファイルの拡張子はありません。`Dockerfile`には、アプリケーションの構築から実行までのプロセスに必要なコマンドが記述されています。どのファイルをどこから取得して、どんな処理を行ない、Dockerイメージに含めるのかなどを記述します。\n\n`Dockerfile`は、Dockerイメージを作成するためのテキストファイルです。コンテナイメージをビルドする場合も、コンテナのビルド手順を`Dockerfile`で定義する必要があります。この`Dockerfile`には、命令のスクリプトが含まれており、Dockerはコンテナイメージをビルドする際にこのスクリプトを使用します。\n\n### Dockerはなぜ重要なのか\n\nDockerは、コンテナに関する既存のコンピューティングの概念、とりわけLinuxの「cgroups」や「namespaces」、「overlayfs」などの技術を活用しています。これは、アプリケーションの依存関係をサーバーやネットワークなどのインフラストラクチャから隔離したいという、デベロッパーやシステムオペレーターのニーズに応えるものでした。\n\nDockerを使うと、1台のサーバー上でさまざまなアプリケーションを簡単に仮想化・実行できるようになります。さらには、ローカルマシンに依存しない開発環境を実現でき（開発環境の統一）、本番環境に近い環境でのシミュレーションが可能になり、アプリケーションの依存関係も管理できます。加えて、ビルド、テスト、デプロイまでの各プロセスを一貫して行なうことができます。\n\n## Dockerの主な機能\n\nDockerは、Linuxのコンテナ技術を使用しています。Dockerコンテナはよく仮想マシンと比較されます。\n\n仮想マシンでは、ホストマシン上でハイパーバイザーを利用してゲストOSを動かし、さらにその上でミドルウェアやライブラリ、さらにその上にアプリなどを実行します。\n\nそれに対し、コンテナはホストマシンのカーネルを利用し、プロセスやユーザーなどを隔離します。そのため、非常に軽量で、まるで別のマシンが動いているかのように動作します。その結果、アプリなどを高速に起動、停止することが可能です。\n\nDockerは、次の4つの構成要素から成り立っています。\n\n* **Dockerイメージ：** アプリケーション実行に必要なソースコード、アプリと依存関係のパッケージ\n* **Dockerコンテナ：** アプリケーションを実行するランタイム環境\n* **Docker Hub：** クラウド上のレジストリサービス。アプリケーションやサービスコンテナのビルドと配信を行なう\n* **Dockerfile：** Dockerイメージを作成するために実行するコマンドライン命令を含むテキストファイル\n\n### Dockerの特徴\n\nDockerには、次のような特徴があります。\n\n* **軽量かつ高速：** 1つのOSで複数のコンテナを管理でき、仮想マシンより軽量で高速に立ち上げることが可能。\n* **環境の一貫性が保持でき再現性がアップ：** Dockerコンテナは異なるプラットフォームでも一貫して動作するため、ローカル、クラウド、ハイブリッド環境への移行が簡単にできる。\n  移植性が高い －クラウドシステムとの親和性が高く、主要なクラウドプロバイダーはDockerコンテナの実行をサポートしている。\n* **サンドボックスの提供：** セキュリティ対策やソフトウェア開発において、隔離された仮想環境でプログラムを実行・検証できる。このため、ホストマシンの環境を守ることができる。\n* **IaC（インフラストラクチャのコード化）を使用して、インフラをコード化：** Dockerfileによりミドルウェアのインストールや環境設定をコード化して管理できる。\n\n### Docker Composeとは\n\nDocker Composeは、複数のDockerコンテナを一元管理する、 Dockerアプリケーションのためのツールです。YAMLファイルを使用してアプリケーションのサービスを設定します。単一のコマンドで複数のサービスをまとめて生成したり、起動・停止したりすることができます。\n\nDocker Composeのコマンド例は次のとおりです。\n\n* **`docker-compose up`：** サービス用のコンテナを構築、作成、起動、アタッチします。リンクされているサービスがまだ起動していない場合は、それらも起動します。\n* **`docker-compose ps`：** Docker Composeで管理されている稼働中のサービスを一覧表示します。\n* **`docker-compose build`：** Docker Composeファイルで定義されているサービスをビルド（構築）します。\n\n## アプリケーションのデプロイにおけるDockerのメリット\n\nアプリケーションのデプロイにおけるDockerのメリットは次のとおりです。\n\n### 開発環境と本番環境のシームレス化\n\nコンテナ技術の利用を開発環境と本番環境で統一することで、環境の違いにより起こる問題を減らすことができます。その結果、デベロッパーと運用チームとの連携がスムーズに行われ、チーム間で発生していた問題も最小限に抑えられます。\n\n### 起動の軽量化・処理速度の高速化\n\nDockerのコンテナ技術は従来の仮想環境より軽く、アプリを瞬時に起動できます。これは、CPUやメモリなどのコンピュートリソースを必要最低限しか使用しないためです。起動速度が上がることで、開発にも集中できます。\n\n### バージョン管理のしやすさ\n\nDockerでは、GitLabなどのソースコードのバージョン管理ツールを使用できるため、バージョン管理の可視化が進むだけでなく、ロールバックやアップデートも簡単に行なえるようになります。\n\n### 優れたスケーラビリティ\n\nコンテナは軽量で拡張性に優れています。必要に応じて簡単に増減できます。これにより、アプリケーションの拡張やスケーリングを迅速に行なえるため、変わりゆく状況にも柔軟に対応できます。\n\n## Dockerのデメリット\n\nDockerにはさまざまなメリットがありますが、いくつかデメリットも存在します。以下にデメリットを挙げます。\n\n### 1つのOSを使わなければならない\n\nDockerは1つのOS上で複数のコンテナを作成します。これにより起動速度や処理速度の面でメリットがありますが、同時にデメリットになることもあります。たとえば、異なるOS環境で検証をしたい場合には、別のマシンや仮想マシンを準備する必要が生じます。\n\n### 大規模開発時のオーバーヘッド\n\nDocker自体は軽量ですが、大規模システムに拡張する場合には、Dockerの管理に伴う負荷が発生します。Dockerは1台のサーバーで多数のコンテナを実行できますが、その反面、管理やオーケストレーションが必要になり、その処理のためにオーバーヘッドが生じる場合があります。Dockerだけですべての管理を行なうのが困難になることもあります。\n\n### 技能習得に時間がかかる\n\nDockerは他の仮想マシンと異なる手法で仮想環境を構築します。つまり、デベロッパーは新しいコンセプトをすべてゼロから習得しなければならず、それには時間がかかります。Dockerの動作原理をきちんと理解せずに使用すると、あとでトラブルや問題が発生することもあります。Dockerについてしっかりと学習してから運用に取り組むようにしましょう。\n\n### セキュリティに脆弱性が生じることもある\n\nDockerはコンテナ型アーキテクチャです。1台のマシン上で複数のコンテナが動作するため、このことに起因する脆弱性には注意が必要です。たとえば、複数のコンテナがホストOSのリソースやカーネルを共有しているため、一つのコンテナに脆弱性があった場合、全体にその影響が及ぶ可能性があります。\n\n### コンテナ間での連携が難しい\n\n複数のコンテナ間での連携を検討している場合、各種設定が難しいために、運用時に問題が発生することがあります。たとえば、アプリとデータベースを別のコンテナで作成し、一緒に運用したい場合には、同一ホスト内で通信設定をしなければなりません。ポートやソケットを開放する場合にはセキュリティ面でリスクが生じます。それを避けるために設定を複雑にしてしまうと、今度は運用面で問題が起きる恐れがあります。コンテナを連携させる際は、設計段階から十分に検討することが重要です。\n\n## GitLabはDockerが抱える課題をどのように解決するのか\n\nDockerコンテナ内にGitLabをインストールすることができます。[GitLab](https://about.gitlab.com/ja-jp/platform/)は、Git「分散型バージョン管理システム」を主体としたDevSecOpsプラットフォームです。ソフトウェア開発ライフサイクル全体に対応する単一のプラットフォームで、GItLabを活用することで高品質なソフトウェアの迅速なデリバリーを実現できます。\n\nDockerコンテナ内にGitLabをインストールすると、GitLabインスタンスにアクセスできるようになります。Dockerコンテナへの[GitLab Dockerイメージのインストールは公式にサポート](https://about.gitlab.com/ja-jp/install/)されています。\n\nDockerが抱えるいくつかの問題のうち、特にセキュリティについては、GitLabのDevSecOps（開発、セキュリティ、運用）を活用して対処することができます。GitLabのDevSecOpsでは、[シフトレフト](https://about.gitlab.com/ja-jp/topics/ci-cd/shift-left-devops/)を重視しており、セキュリティ対策を開発サイクルの早い段階に組み込むことにより、コンテナイメージの持つセキュリティの問題の早期発見と対応を図っています。継続的インテグレーションによってこのシフトレフトのコンセプトを実践することで、セキュリティ対応にかかっていたコストを削減できます。\n\nDevSecOpsにおいて重要なCI/CDを実現するためには、自動化が欠かせません。GitLabではパイプラインがCI/CDの命令をまとめています。そして、その指示に従いプロセスの自動化を実現するときの基盤になっているのが[GitLab Runner](https://docs.gitlab.com/runner/)（英語）です。GitLab Runnerはセキュリティのシフトレフトを実現する上で重要な役割を果たしています。\n\nGitLab Runnerはセキュリティスキャンやテストを指定したタイミングで自動で実行してくれます。また、レポート作成ジョブを実行して、ダッシュボードに最新情報を表示することも可能です。\n\n## GitLabのDevSecOpsにおけるDockerの役割\n\nGitLabを活用したDevSecOpsインテグレーションにおいても、Dockerは非常に大切な役割を担っています。\n\n### CI/CDジョブのコンテナ化\n\nGitLab CI/CDでは、CI/CDパイプラインでDockerコンテナを使用することで、次のようなことが可能になります。\n\n* **一貫性：** CI/CDジョブはコンテナ内で実行されるため、依存関係や環境の違いによるエラーが防げます。\n* **スケーラビリティ：** コンテナは軽量かつ迅速に起動でき、大規模なパイプラインでも効率的に実行できます。\n* **環境の柔軟性：** ジョブごとに異なるDockerイメージを指定できるため、必要な環境を簡単に準備できます。\n\nGitLab RunnerのDockerイメージは、UbuntuまたはAlpine Linuxをベースにしています。Dockerイメージは標準の`gitlab-runner`コマンドを内包しており、ホストに直接GitLab Runnerをインストールしたかのように動作します。\n\n### セキュリティスキャンの自動化\n\nセキュリティはDevSecOpsでの重要な要素であり、Dockerはこれをサポートします。\n\n* **コンテナイメージのセキュリティスキャン：** GitLabには、CI/CDパイプラインでDockerイメージをスキャンする機能があります。このスキャンにより脆弱性がチェックされ、イメージ内の依存関係やコードの安全性を評価できます。\n* **コンテナ脆弱性スキャンの自動化：** GitLabにはTrivyやAquaなどのセキュリティツールを統合できます。DockerイメージのOSやアプリケーションが最新であるか、既知の脆弱性がないかをチェックします。\n\n### IaC（インフラストラクチャのコード化）と環境管理\n\n* **再現性：** DockerをGitLabのCI/CDジョブ内で使用することで、開発環境と本番環境の整合性を保つことできます。\n* **ステージングやテスト環境を即時に構築：** Docker ComposeやKubernetesと連携することで、特定のブランチやマージリクエストごとに分離された環境をGitLabで作成できます。これにより、テストやセキュリティスキャンを効率的に実行できます。\n\n### デプロイの効率化\n\nGitLabは、Dockerを使用する以下のデプロイパターンをサポートしています。\n\n* **Dockerイメージのビルドとプッシュ：** アプリをコンテナイメージとしてビルドして、GitLabのContainer Registryや他のDockerレジストリにプッシュします。\n* **継続的デリバリー：** Dockerイメージを使ってコンテナオーケストレーションツールにデプロイすることで、迅速で安全なリリースが可能になります。\n\n### マイクロサービスアーキテクチャのサポート\n\nGitLabとDockerを組み合わせることで、マイクロサービスアーキテクチャを簡単に構築できます。マイクロサービスは別々のDockerコンテナとして実行します。GitLab CI/CDパイプラインを使うと、以下のことを管理できます。\n\n* サービス間の依存関係の設定\n* 個別のセキュリティスキャン\n* バージョン管理（ロールバックが容易になります）\n\n## まとめ\n\n2013年の公表以来、Dockerは瞬く間にIT業界に広く普及しました。本記事では、Dockerの基本概念、基本技術、Dockerを使って何ができるのか、なぜDockerが重要なのか、Dockerを理解上でよく目にする用語などについて紹介してきました。\n\nDockerを使う場合には、DevSecOpsにとって大切なCI/CDを実現するためにも、GitLab CI/CDなどの自動化ツールの導入をおすすめします。GitLab のCI/CDパイプラインでDockerコンテナを使用することで、開発における一貫性の維持、スケーラビリティの実現、柔軟な環境の準備が可能になります。\n\n## FAQ（よくある質問）\n\n### Dockerで何ができるのか？\n\nDockerコンテナは、軽量でスタンドアロンの仮想化技術であり、アプリケーションコード、その依存関係、ライブラリをすべてパッケージ化します。Dockerを使うと、1台のマシン上に複数のコンテナ（仮想環境）を構築でき、開発環境や検証環境の統一が図れます。詳しくは、記事の本文をご覧ください。\n\n### Dockerは何に使うのか？\n\nDockerは、デベロッパーがアプリケーションとその依存関係をシステムから切り離したいとき使用します。コンテナにはアプリケーションとその依存関係がまとめられており、軽量な実行環境を提供します。詳しくは、記事の本文をご覧ください。\n\n### Dockerコンテナとは何ですか？\n\nDockerイメージが実行時にコンテナになります。Dockerコンテナは、アプリケーションを実行するためのランタイム環境です。Dockerコンテナに関する詳細は、記事の本文をご覧ください。\n\n*監修：川瀬 洋平 [@ykawase](https://gitlab.com/ykawase)*\n\n*（GitLab合同会社 カスタマーサクセス本部 シニアカスタマーサクセスマネージャー）*","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750226168/pf5cwmvqq09v1pe0re66.jpg",[9,1416,1289,751,752,1417,753,680],"cloud native","performance",{"featured":91,"template":685,"slug":1419},"what-is-docker","content:ja-jp:blog:what-is-docker.yml","What Is Docker","ja-jp/blog/what-is-docker.yml","ja-jp/blog/what-is-docker",{"_path":1425,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1426,"content":1432,"config":1437,"_id":1439,"_type":14,"title":1440,"_source":16,"_file":1441,"_stem":1442,"_extension":19},"/ja-jp/blog/what-is-kubernetes",{"title":1427,"description":1428,"ogTitle":1427,"ogDescription":1428,"noIndex":6,"ogImage":1429,"ogUrl":1430,"ogSiteName":669,"ogType":670,"canonicalUrls":1430,"schema":1431},"Kubernetes（K8s）とは？その仕組みから利点、使い方まで","Kubernetes（K8s）とは？Kubernetes の読み方から覚えておきたい用語、仕組みやその利点について学びましょう。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687485/Blog/Hero%20Images/kubernetes.jpg","https://about.gitlab.com/blog/what-is-kubernetes","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Kubernetes（K8s）とは？その仕組みから利点、使い方まで\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab Japan Team\"},{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2025-04-28\",\n      }",{"title":1427,"description":1428,"authors":1433,"heroImage":1429,"date":1434,"body":1435,"category":703,"tags":1436},[771,675],"2025-04-28","## 目次\n\n1. Kubernetesとは？その読み方と用途\n2. Kubernetes（K8s）の基本用語解説\n  - コンテナ、Pod、Node、クラスター\n  - Dockerとの違い\n3. Kubernetesの主な特徴\n  - デプロイの自動化\n  - ハイブリッド / マルチクラウドに対応\n  - 拡張性とプラグインアーキテクチャ\n  - ローリングアップデートとロールバック\n  - 柔軟なスケーラビリティ\n  - リリース後のアプリケーション監視\n4. Kubernetesの利点とは\n  - 生産性の向上\n  - 自己修復機能により障害に耐性\n  - 高い可用性を担保\n  - オンプレミスでも、クラウドでも運用可能\n  - 大量のコンテナを一括管理\n  - DevSecOpsとの親和性が高い\n  - クラウドネイティブなワークロードを安全に保つ\n5. GitLabでKubernetesを統合する\n6. Kubernetes（K8s）のよくある質問\n  - KubernetesとDockerの違いは何ですか？\n  - Kubernetesで何ができますか？\n  - Kubernetesコンテナとは何ですか？\n  - Kubernetesの読み方は？\n\n## Kubernetesとは？その読み方と用途\n\nKubernetesは、「クバネティス」、「クーベネティス」、または「クーバネーティス」と発音します。ギリシャ語のκυβερνήτηςに由来し、「統治者」や「パイロット」といった意味を持ちます。また、K8sと表記されることもあります。  \n\nKubernetesは、一言で表せばソフトウェア開発においてコンテナを操作・管理するもので、コンテナオーケストレーションの役割を果たすオープンソースソフトウェアとして開発されました。Kubernetesは、クラウドネイティブのプログラムの開発に使用します。これを使用することで[マイクロサービス](https://about.gitlab.com/ja-jp/topics/microservices/)アーキテクチャが可能になり、プログラムの開発が高速化できます。  \nでは、Kubernetesについて、もう少し掘り下げて見ていきましょう。\n\n## Kubernetes（K8s）の基本用語解説\n\n### コンテナ、Pod、Node、クラスター\n\nKubernetesは、コンテナをオーケストレーションするためのツールです。オーケストレーションとは、複数のコンピュータシステムやアプリケーション、サービスなどを調整して管理し、頻繁に繰り返される大規模なワークフローやプロセスを実行できるようにすることを指します。では、コンテナとは何でしょう。ソフトウェア開発におけるコンテナ化とは、ソフトウェアのコードをライブラリやフレームワークなどの依存関係にあるすべてのコンポーネントとともにパッケージ化し、それぞれの入れ物、「コンテナ」に隔離することを意味します。コンテナは、完全に機能するポータブルなコンピューティング環境です。また、このコンテナを複数まとめたものがPod、PodをまとめたものがNode、Nodeをまとめたものがクラスタと呼ばれます（以下の図を参照）。\n\n![kubernetesとは](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687494/Blog/Content%20Images/kubernetes-diagram.svg)\n\n*Kubernetesにおけるコンテナとクラスタの関係を示した図*\n### Dockerとの違い\n\nKuberunetesはコンテナオーケストレーションツールですが、Dockerはコンテナ化ツールの1つです。Dockerはアプリケーションのコンテナ化を行なうとき使用するプラットフォームです。仮想マシンよりも軽量で高速であることや、環境構築が簡単なことから、コンテナ化の主流ツールになっています。\n\n## Kubernetesの主な特徴\n\nKubernetesは、前述したようにコンテナを管理するコンテナオーケストレーションツールで、代表的な機能としては次のようなものが挙げられます。\n\n### デプロイの自動化\n\nKubernetesは、アプリケーションのデプロイ時に、新しいコンテナの作成や既存コンテナの削除を自動で実施します。また、新しく作成したコンテナにも自動でリソースを適用します。\n\n### ハイブリッド / マルチクラウドに対応\n\nクラウドプロバイダーに依存することなく、オンプレミス環境や様々なクラウドサービス（AWS、Azureなど）上で動作します。よって、ハイブリッドクラウドやマルチクラウド環境を簡単に構築、管理することができます。\n\n### 拡張性とプラグインアーキテクチャ\n\n多様なプラグインや拡張機能が利用できます。例えば、CustomResourceDefinitions（CRD）を使って新規にリソースタイプやロジックを追加したり、CNI（Container Network Interface）やCSI（Container Storage Interface）といったプラグインでネットワークやストレージのカスタマイズが可能です。\n\n### ローリングアップデートとロールバック\n\nKubernetesでは、アプリケーションのバージョンを更新する際、ローリングアップデートがそのデフォルトとなります。また、ビルトインでロールバック機構もあります。このため、ライブトラフィックに影響を与えず、ダウンタイムゼロでデプロイを実現できます。\n\n### 柔軟なスケーラビリティ\n\nKubernetesは、大量のコンテナを効率的に管理するためのもので、システムのスケーラビリティが向上できます。スケーラビリティとは、どのくらいシステムの拡張ができるかを示す特性で、Kubernetesではコンテナ化されたアプリケーションの数を増減することでスケーリングします。\n\n### リリース後のアプリケーション監視\n\nPrometheusやGrafanaといった監視ツールを使用することで、アプリケーション固有のメトリクスが監視できます。リリース後のパフォーマンス低下や不具合発見といった事象がアラートされるため、問題に迅速に対処できます。\n\n## Kubernetesの利点とは\n\nKubernetesには次のような7つのメリットがあります。\n\n### 生産性の向上\n\n一つ目のメリットは、アプリケーション開発で生産性が向上できる点にあります。従来の仮想化では、アプリケーションごとにゲストOSを用意する必要がありましたが、Kubernetesでは、アプリケーションを直接コンテナエンジン上にデプロイできるため、サーバーのリソース使用量が抑えられます。\n\n### 自己修復機能により障害に耐性\n\nKubernetesには、PodやNodeに障害が起きた場合、最初の定義（マニフェスト）の状態まで自動修復する機能が備わっています。\n\n### 高い可用性を担保\n\nKubernetesは、複数のNodeの集まりであるクラスターを構成します。あるクラスターで障害が発生した場合、障害が起きたコンテナを自動で再起動させます。また、他のNodeでコンテナを起動させ、処理を引き継ぐ動作も継続できるため、高い可用性が担保できます。\n\n### オンプレミスでも、クラウドでも運用可能\n\nKubernetesは、オンプレミスでも、プライベートクラウド、パブリッククラウドでも利用できます。つまり、自社サーバーでも、クラウドを使っても、どんな環境でも運用可能です。\n\n### 大量のコンテナの一括管理\n\nKubernetesでは、大量のコンテナが一括で管理・運用できます。また、設定ファイルを複数のコンテナ間で共有することによって、設定変更時も正確かつ大量に設定を反映させることが可能です。\n\n### DevSecOpsとの親和性が高い\nDevSecOpsとは、開発と運用を統合するDevOpsにセキュリティを加え、運用を視野に入れながら開発とセキュリティを同時に進め、安心・安全なソフトウェアを迅速にリリースするというコンセプトです。Kubernetesにはアプリケーションの開発と運用の双方に必要とされる機能が多く搭載されているため、DevSecOpsとの親和性が非常に高いという特長があります。\n\n### クラウドネイティブなワークロードを安全に保つ\n\nKubernetesは、クラウドネイティブアーキテクチャに基づいており、クラウドネイティブな情報セキュリティに関するベストプラクティスについて、CNCF（Cloud Native Computing Foundation）からのアドバイスを活用しています。\n\nたとえばKubernetesには、APIやセキュリティコントロールが含まれており、情報セキュリティを管理するポリシーを定義する手段も備わっています。クラウドの利用などでセキュリティ面において懸念が生じても、Kubernetesならユーザーごとにアクセス制限を設定でき、不正アクセスが防止できるため安心です。\n\nまた、Pod Security Standardによりセキュリティに3つのポリシーが定義されています。非常に緩いものから非常に厳しいものまで累積的に定義できます。\n\n## GitLabでKubernetesを統合する\n\nKubernetesクラスターとGitLabを接続すると、アプリの開発・デプロイ・管理・監視ができます。  \nGitLabをKubernetesと連携させる、またはKubernetes内で動作させるには、3つの異なる方法があります。単独で使用することも、組み合わせて使用することもできます。\n\n* GitLabからKubernetesにソフトウェアをデプロイする  \n* Kubernetesを使用してGitLabインスタンスに紐づいたRunnerを管理する  \n* GitLabのアプリケーションとサービスをKubernetesクラスター上で実行する\n\nさらに詳しい情報やお問い合わせは[こちら](https://about.gitlab.com/ja-jp/solutions/kubernetes/)をご覧ください。\n\n## Kubernetes （K8s）のよくある質問\n\n### KubernetesとDockerの違いは何ですか？\n\nDockerはコンテナ化ツールのひとつで、アプリケーションコンテナを構築し、アプリケーションの開発・配布・実行をします。Kubernetesは、より大規模に複数のマイクロサービスを管理するのに使われます。  \nまた、Kubernetesはクラスターで実行され、Dockerはノードで実行されます。Kubernetesの使用目的はコンテナ管理ですが、Dockerの使用目的の一つは、アプリケーションをコンテナに分離することになります。\n\n### Kubernetesで何ができますか？\n\nKubernetesでできることの代表例には下記のようなものが挙げられます。\n\n* 大量のコンテナの一括管理\n* 起動を含めた動作の高速化・軽量化  \n* 自動デプロイ  \n* 自己修復機能により障害に耐性\n* 高い可用性を担保\n* オンプレミスでも、クラウドでも運用可能\n* DevSecOpsとの親和性が高い\n* クラウドネイティブなワークロードを安全に保つ\n\n### Kubernetesコンテナとは何ですか？\n\nソフトウェアのコードをライブラリやフレームワークなどの依存関係にあるすべてのコンポーネントとともにパッケージ化し、それぞれの入れ物、「コンテナ」に隔離することをコンテナ化と言います。Kubernetesコンテナは、完全に機能するポータブルなコンピューティング環境で、さまざまなプラットフォームでデプロイ可能なプログラムとして[マイクロサービス](https://about.gitlab.com/blog/what-are-the-benefits-of-a-microservices-architecture/)アーキテクチャを可能にします（リンクは英語版です）。\n\n### Kubernetesの読み方は？\n\nKubernetesは、「クバネティス」、「クーベネティス」、または「クーバネーティス」と読み、「K8s（ケーエイツ）」と略されます。\n",[1103,1416,1289,9,531,1042,753,1417,754],{"slug":1438,"featured":91,"template":685},"what-is-kubernetes","content:ja-jp:blog:what-is-kubernetes.yml","What Is Kubernetes","ja-jp/blog/what-is-kubernetes.yml","ja-jp/blog/what-is-kubernetes",{"_path":1444,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1445,"content":1450,"config":1456,"_id":1458,"_type":14,"title":1459,"_source":16,"_file":1460,"_stem":1461,"_extension":19},"/ja-jp/blog/what-is-platform-engineering",{"config":1446,"ogImage":1447,"title":1448,"description":1449},{"noIndex":6},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508254/duu6d4vclamtnnxjdaat.jpg","プラットフォームエンジニアリングとは？意味や導入メリットをわかりやすく解説","この記事では、プラットフォームエンジニアリングの意味や特徴、導入メリットなどを解説します。具体的な導入ステップや基盤構築に役立つおすすめのプラットフォームも。",{"category":703,"body":1451,"date":1452,"authors":1453,"heroImage":1447,"title":1448,"description":1454,"tags":1455},"近年ソフトウェア開発の領域では「プラットフォームエンジニアリング」と呼ばれる開発者の生産性向上に寄与するアプローチが注目されています。\n\n実際にプラットフォームエンジニアリングに興味はあるものの、意味や定義などを詳しく理解していない人も多いのではないでしょうか。\n\nこの記事では、プラットフォームエンジニアリングの意味や特徴、導入メリットなどを解説します。具体的な導入ステップや基盤構築に役立つおすすめのプラットフォームも紹介するのでぜひ参考にして下さい。\n\n## 1. プラットフォームエンジニアリングとは？\n\n![プラットフォームエンジニアリングとは](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508139/eui82g7mlcb2fr5vavir.jpg)\n\nまずはプラットフォームエンジニアリングの意味や特徴について解説します。\n\n### 1-1. プラットフォームエンジニアリングの意味・特徴\n\nプラットフォームエンジニアリングとは、企業内の開発者に対して適切なプラットフォーム（IDP）を整備し、ソフトウェア開発の効率化や生産性向上を実現するアプローチのことです。\n\n近年はIT技術の発展や消費者ニーズの多様化などを背景として将来の予測が難しい時代（VUCA時代）だと言われています。プラットフォームエンジニアリングは、VUCA時代において複雑化するビジネスニーズに対応するための新しいエンジニアリング手法として、ガートナー社が積極的に提案しているアプローチでもあります。\n\n### 1-2. IDP（内部開発者向けプラットフォーム）とは\n\nInternal Developer Platform（内部開発者向けプラットフォーム、以下IDP）とは、企業内の開発者が開発プロセスにおいて必要な機能やリソースを自ら取得して利用できるプラットフォームを指し、プラットフォームエンジニアリングの導入における重要な技術基盤に当たります。\n\nIDPを通してチームで共通して利用できるツールやリソースを開発者に提供することで、迅速なソフトウェアの構築やデプロイを実現できます。\n\nIDPの構築においては、自社の課題や目的に応じてさまざまなツールや技術を組み合わせて行いますが、[GitLab](https://about.gitlab.com/ja-jp/)のように単一のプラットフォームで開発プロセスにおける多くの作業を効率化できるサービスもあります。\n\n## 2. プラットフォームエンジニアリングが注目されている背景\n\n![プラットフォームエンジニアリングが注目されている背景](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508140/hvzgimgumavwq5mmfqlx.jpg)\n\nソフトウェア開発の領域でなぜプラットフォームエンジニアリングが注目されているのでしょうか。具体的な背景としては以下が挙げられます。\n\n* 開発環境の複雑化  \n* ビジネス環境の激化  \n* IT人材の不足\n\n### 2-1. 開発環境の複雑化\n\nプラットフォームエンジニアリングの必要性が高まっている背景の一つとしてまず挙げられるのが、開発環境の複雑化による開発者の認知負荷の増大にあります。\n\nソフトウェア開発における開発手法や技術は年々進化・発展し続けており、クラウドや生成AI、マイクロサービス、APIなどさまざまな技術が広く使われるようになっています。これらの技術活用によって柔軟なソフトウェア開発を実現できますが、その一方で管理すべきツールの種類が増え、かつ多様な技術を身につけなければならないという課題が発生します。\n\nそれにより、開発者は重要な開発作業や取り組み以外に自身のリソースを割く必要があり、それが結果としてチーム全体の生産性低下も招くことになります。\n\nつまり、ソフトウェア開発において効果的に最新技術を取り入れていくためには、開発者が本質的な業務に集中できる環境を構築しなければなりません。\n\n### 2-2. ビジネス環境の激化\n\n先ほども少し触れていますが、近年は[VUCA時代](https://www.nri.com/jp/knowledge/glossary/vuca.html)と呼ばれる将来の予測が難しい不確実な要素が多い時代です。\n\n市場が常に変化する中で社会や消費者にとって必要とされる価値あるソフトウェアを開発して競合と差別化を図るためには、多様な技術を活用したスケーラブルな開発が求められます。\n\nまた、自社の競争力を高めていくためには、アジャイル開発のようなスピード感のある開発手法を積極的に採用していく考えも大切です。\n\n開発者がセルフサービスで利用できるプラットフォームの提供は、柔軟かつ迅速なソフトウェア開発を実現する手段として有効なアプローチだと言えます。\n\n[アジャイル開発とは？意味や進め方、DevSecOpsとの関係性を解説](https://about.gitlab.com/ja-jp/blog/what-is-agile-development/)\n\n### 2-3. IT人材の不足\n\nソフトウェア開発の領域では、慢性的な人手不足が課題となっています。クラウドやAIなど高度な最新技術が次々と登場する一方で、それらを扱える専門知識を持った人材が業界全体で不足しているのです。\n\n実際に「[IT人材需給に関する調査](https://www.meti.go.jp/policy/it_policy/jinzai/houkokusyo.pdf)」を見てみると、2030年には最大で約79万人のIT人材が不足すると予測されています。\n\n![IT人材需給に関する調査](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508140/zv15e7qpd6cppogiogat.png)\n\n※引用元：[IT人材需給に関する調査](https://www.meti.go.jp/policy/it_policy/jinzai/houkokusyo.pdf)\n\nこのような背景の中で適切にソフトウェア開発を進めていくためには、プラットフォームエンジニアリングの導入を通じて開発者の負担削減や生産性向上を実現し、自社のリソースを上手に活用していく姿勢や工夫が求められると言えます。\n\n## 3. プラットフォームエンジニアリングとDevSecOps・SREとの関係性とは\n\n![プラットフォームエンジニアリングとDevSecOps・SREとの関係性とは](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508140/psg7uvfabu13r50vbwzc.jpg)\n\nプラットフォームエンジニアリングを理解する上では、DevSecOpsやSREとの違いについても把握しておくことが大切です。\n\n### 3-1. DevSecOpsとの違い\n\nDevSecOpsとは、開発（Dev）、セキュリティ（Sec）、運用（Ops）の3つの領域を連携させて開発を進めるアプローチを指します。開発と運用を連携してリリースサイクルを短縮させる従来の「DevOps」の考え方に対して、セキュリティ（Sec）のプロセスも加えることでソフトウェアの安全性を確保しつつ、迅速なリリースが可能になります。\n\n一方、プラットフォームエンジニアリングはDevSecOpのようなワークフローを実現する上で土台となるプラットフォームを社内で整備する取り組みです。\n\nつまり、プラットフォームエンジニアリングとDevSecOpsは親和性が高く、プラットフォームエンジニアリングはDevSecOpsをサポートする役割を担っていると言えます。\n\n### 3-2. SREとの違い\n\nSREとは、「Site Reliability Engineering」の略語で直訳すると、「サイト信頼性エンジニアリング」になります。Google社によって提唱された概念であり、運用プロセスにおいて手間のかかるタスクを自動化してシステムの安定稼働を実現しつつ、新機能の追加や更新などを通してユーザー体験（UX）の向上を目指す取り組みを指します。\n\nプラットフォームエンジニアリングとSREは、いずれも開発と運用における効率性・信頼性向上に関わるものですが、それぞれ目的や焦点が異なります。\n\nプラットフォームエンジニアリングは、社内の開発者の生産性向上や利便性向上を目的としたアプローチであり、SREは主にシステムの信頼性と可用性、スケーラビリティの向上に焦点を当てた考え方になります。\n\n## 4. プラットフォームエンジニアリングの導入目的とメリット\n\n![プラットフォームエンジニアリングの導入目的とメリット](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508134/m2jqfbt1sfjpjqh3dbih.jpg)\n\nプラットフォームエンジニアリングの導入目的やメリットは以下の通りです。\n\n* 開発プロセスの効率化  \n* 開発者の生産性向上  \n* プロダクトの品質向上  \n* セキュリティ・ガバナンスの維持と強化  \n* 人材不足の解消  \n* 新しいイノベーションの創出  \n* コスト削減\n\n### 4-1. 開発プロセスの効率化\n\nまずプラットフォームエンジニアリングの導入は、開発プロセスの効率化につなげられます。\n\nIDPにより開発者は開発に必要なリソースを必要な時に素早く取得して利用できるため、環境構築に手間と時間をかけることなく本質的な開発業務に集中することが可能です。\n\nアジャイル開発やDevSecOpsの手法を活用する際に、積極的にプラットフォームエンジニアリングの考え方も採用すれば、プロダクトや機能のリリース頻度・スピードが向上し、自社ビジネスの加速化に貢献できるでしょう。\n\n### 4-2. 開発者の生産性向上\n\nプラットフォームエンジニアリングでIDPを整備することで、チームで再利用可能なツールと機能を開発者に提供できるようになります。この仕組みにより、開発者それぞれで多数のツールを管理・運用する手間がなくなり、認知的負荷の軽減につなげられるでしょう。\n\nその結果、戦略立案や分析、新機能開発などより重要な業務にリソースを割けるようになり、生産性の最大化を図れるでしょう。\n\n### 4-3. プロダクトの品質向上\n\n顧客が満足するプロダクトを提供するためには、品質も担保しなければなりません。IDPに対してテストやレビュー、セキュリティスキャン、デプロイなどを自動化する仕組みを整備すれば、ヒューマンエラーの防止につなげられます。\n\nプラットフォームエンジニアリングの導入でテストやレビューなどを標準化することによって、開発者やプロジェクトごとの品質のバラつきを防止でき、自社で定義されたプラットフォームの基準に沿って開発と運用を進められます。\n\nつまり、プラットフォームエンジニアリングの導入は、開発効率や生産性の向上だけでなく、プロダクト品質や信頼性の向上にも寄与します。\n\n### 4-4. セキュリティ・ガバナンスの維持と強化\n\nプラットフォームエンジニアリングで自社に必要なセキュリティやガバナンスを定義し、それらを自社のプラットフォーム上に反映させて運用することも可能です。\n\n権限設定や監査ログ、セキュリティポリシー、脆弱性対応などをプラットフォーム上で集約して一元化することで管理や証跡の収集が容易になり、組織全体におけるセキュリティ・ガバナンスの維持と強化につなげられるでしょう。\n\nまた、標準化されたプラットフォームの整備によって、開発者の心理的な負担を軽減して安全に開発を進められます。\n\n### 4-5. 人材不足の解消\n\nプラットフォームエンジニアリングの導入は、開発プロセスの効率化や開発者の生産性向上に寄与するため、企業のリソースを最大限に活かしながらソフトウェア開発を進められます。\n\nまた、開発者のニーズにマッチしたプラットフォームを提供して働きやすい環境を構築することで、開発者体験（Developer Experience）の向上も実現できます。その結果、自社に対する開発者や求職者からのイメージも良くなり、優秀なエンジニアの獲得と定着を図れるでしょう。\n\n### 4-6. 新しいイノベーションの創出\n\n近年ソフトウェア開発の効率化や価値向上に役立つさまざまな最新技術が登場しています。しかし、複数の技術やツールを開発者個人で活用するには管理の負担が増えてしまい、実際の活用にはハードルが高いと言えます。\n\nプラットフォームエンジニアリングならさまざまな機能やツールが搭載されたプラットフォームをチームで利用できるため、開発者全員が最新技術に触れやすくなります。それをきっかけとして自社で新しいアイデアやイノベーションが生まれたり、より品質の高いプロダクトをリリースできたりする可能性が高まるでしょう。\n\n### 4-7. コスト削減\n\nプラットフォームエンジニアリングを取り入れることで、ツールや環境の共通化によるコスト削減にもつながります。例えば、ソフトウェア開発のプロセスにおいて複数のツールを活用している企業が、[GitLab](https://about.gitlab.com/ja-jp/)のようなさまざまなツールを単一のプラットフォームで利用できるサービスを導入すれば、ライセンス費用や管理コストの削減につなげられるでしょう。\n\nまた、CI/CDやセキュリティチェックなどをプラットフォーム上で自動化することで運用コストの削減も実現できます。\n\nワークフローの自動化や標準化により開発スピードが向上すれば、限られたリソースを効果的に活用できるため、長期的な人件費の最適化にもつながります。\n\n## 5. プラットフォームエンジニアリングの導入ステップ\n\n![プラットフォームエンジニアリングの導入ステップ](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508135/cep3gdqsqca4gb0ckt2w.jpg)\n\nここでは実際にプラットフォームエンジニアリングを導入する際の手順について見ていきましょう。\n\n1. 専門チームの組成  \n2. 開発課題の分析と目標設定  \n3. プラットフォームの構築・組織体制の変更  \n4. フィードバック・継続的なメンテナンス\n\n### 5-1. 専門チームの組成\n\nプラットフォームエンジニアリングを導入する際には、まず専門チームの組成から始めます。専門チームを社内に配置すれば、プラットフォームエンジニアリング導入の取り組みを推進できます。専門チームの主な役割としては以下が挙げられます。\n\n* 開発者のニーズ調査  \n* プラットフォームの設計・構築  \n* 社内でのプラットフォーム活用の浸透の実現  \n* プラットフォームの運用・定期的な改善 など\n\n実際のメンバー構成においては、開発者のさまざまなニーズを考慮したプラットフォームを導入するためにも、開発・運用・セキュリティなど多様なスキルセットを持つ人材や、それぞれの分野を専門とする人材を集めることがポイントです。\n\nまた、社内向けではあるものの、自社での活用を浸透させるためにはプラットフォームを一つのサービスとして捉え、ユーザーニーズを満たすという視点が重要になります。\n\n### 5-2. 開発課題の分析と目標設定\n\nプラットフォームエンジニアリングの専門チーム結成後は、現状の開発課題の把握と分析を実施します。課題の把握や分析においては、エンジニアとの個別面談やサーベイなどを通して行います。\n\nその中で、「複数のツールを管理するための負担がかかり過ぎている」「開発環境の構築から実際のリリースまで時間がかかっており、開発効率が悪い」などの課題が挙げられたなら、それらの課題を解決するためにどのようなプラットフォームを導入すれば良いのかを検討し、具体的な目標を設定します。\n\n例えば、開発者のツール管理の負担が主な課題としてあるなら、単一のプラットフォームで複数のツールや技術を活用できるIDPを整備するという方向性を定められるでしょう。\n\n### 5-3. プラットフォームの構築・組織体制の変更\n\nプラットフォームエンジニアリングの導入における目標や方向性が明確になった後は、実際に基盤となるプラットフォームの構築を行います。\n\n開発プロセスの課題解決につながるような機能やツールを搭載し、さまざまな手法で開発を進められるよう整備していきます。\n\nまた、プラットフォームを構築して実際に活用していく際には、これまでの開発プロセスに変化が生じるため、必要に応じて開発者間での認識の擦り合わせや組織体制の変更を行いましょう。\n\n### 5-4. フィードバック・継続的なメンテナンス\n\nプラットフォームエンジニアリングの基盤構築後は、実際にプラットフォームを運用し開発者に活用してもらいます。その中で開発者からフィードバックや要望があれば、機能追加や改善を柔軟に行っていきます。\n\nソフトウェア開発におけるツールや技術は進化し続けており、トレンドも常に移り変わるため、最新情報のキャッチアップや定期的なメンテナンスがプラットフォームエンジニアリングを成功させるための鍵となります。\n\n## 6. プラットフォームエンジニアリングの導入における注意点\n\n![プラットフォームエンジニアリングの導入における注意点](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508135/ew7szhpm1mnheubghlnk.jpg)\n\nプラットフォームエンジニアリングの導入においては以下のような注意点もあります。\n\n* プラットフォーム構築を目的としない  \n* 導入に効果が期待できるか見極める  \n* トップダウンでの導入は避ける  \n* 段階的に導入して小さく始める\n\n### 6-1. プラットフォーム構築を目的としない\n\nまずプラットフォームエンジニアリングの導入において、プラットフォーム構築そのものを目的として進めてしまうと失敗してしまう可能性が高まります。\n\n例えば、「最新技術だから」「高機能だから」というような考えだけで導入してしまうと、開発者ニーズにマッチしないプラットフォームを構築してしまうことになります。そうなると、社内での活用も浸透せず、誰にも使われないという結果を招いてしまうでしょう。\n\nそのため、開発者への調査を徹底して行い、どんな課題を解決したいのかを明確にした上でプラットフォームを構築する必要があります。\n\n### 6-2. 導入に効果が期待できるか見極める\n\nプラットフォームエンジニアリングの導入そのものが、実際に自社にとって効果が期待できるのかも見極めなければなりません。\n\n例えば、エンタープライズや中規模など大きめ組織で、かつ必要な人材が揃っているなら、専門チームの組成もスムーズに進み、実際のプラットフォーム構築によって開発の効率化やコスト削減などの効果が期待できる可能性が高いと言えます。\n\n一方、小規模な組織の場合で、かつ人手が足りない場合プラットフォーム構築や運用そのものに大きな負担がかかってしまい、逆効果になる可能性もあります。\n\nそのため、「プラットフォームエンジニアリングの導入や運用が自社で可能なのか」「実際にどのような効果が期待できるのか」をきちんと検討することが大切です。\n\n### 6-3. トップダウンでの導入は避ける\n\nプラットフォームエンジニアリングは開発者向けのアプローチであり、開発者がプラットフォームを問題なくセルフサービスで利用できるという要素が重要になります。\n\nそのため、トップダウンで現場の課題や開発者のニーズを無視して導入を進めてしまうと、新しいやり方に対して開発者から抵抗や反発を受ける可能性があります。\n\nスムーズな導入を実現するためには、経営層と開発者で双方向コミュニケーションをとり、開発者に選択の余地とアイデアを積極的に発信できる場を与える必要があります。\n\n### 6-4. 段階的に導入して小さく始める\n\n最初から全ての要件を満たした完璧なプラットフォームを構築して、運用しようとすると開発者が変化に対応しきれない可能性があります。また、時間をかけてプラットフォームを構築しているとトレンドに乗り遅れ、完成後には搭載した技術やツールが既に古いものになってしまっていたというケースも考えられます。\n\nそのため、まずは優先度の高い課題にフォーカスして、効果が期待できる機能から実装し段階的に運用するなど、アジャイル的な進め方がプラットフォームエンジニアリングの導入に求められると言えます。\n\n## 7. プラットフォームエンジニアリングの基盤構築に役立つツール・サービスの選び方\n\n![プラットフォームエンジニアリングの基盤構築に役立つツール・サービスの選び方](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508136/bdq3zpkcrz1ez00md2yr.jpg)\n\nプラットフォームエンジニアリングの導入においては、基盤構築に役立つサービスを積極的に活用すると効率的です。ここでは具体的な選び方を解説します。\n\n* 機能  \n* コスト  \n* サポート体制\n\n### 7-1. 機能\n\nプラットフォームエンジニアリングの導入を成功させるためには、開発者のニーズを満たし、かつ自社の課題を解決できる機能が搭載されたサービスを選ぶことが大切です。\n\n例えば、プラットフォームを構成する重要な要素として挙げられる機能は以下の通りです。\n\n* CI/CD（自動ビルド・テスト・デプロイ）  \n* ソースコード管理  \n* ドキュメント  \n* モニタリング  \n* API連携  \n* セキュリティ・ガバナンス など\n\nこのような機能が搭載されているサービスなら、開発者の生産性向上に貢献できるでしょう。\n\n### 7-2. コスト\n\nプラットフォームエンジニアリングの基盤構築となるサービスを選定する際には、コスト面も考慮することが大切です。\n\n組織の規模や導入形態などによってもコストが異なるため、ベンダーに問い合わせするなどして費用対効果が期待できるかしっかりチェックしておきましょう。\n\n無料トライアルを設けているサービスも多いため、まずは使用感を試してみてから導入を検討するのも良いでしょう。\n\n### 7-3. サポート体制\n\nプラットフォームエンジニアリングをスムーズに導入・運用していくためには、ツールやサービスを提供するベンダーのサポート体制をチェックしておく必要もあります。\n\n充実したサポート体制があれば、万が一トラブルや不明点が発生した場合でも、専任スタッフが迅速に対応してくれるでしょう。また、ベンダーがドキュメントやマニュアルなどを通して積極的にノウハウを公開していれば、トラブル時にも自社で解決しやすくなるでしょう。\n\n## 8. プラットフォームエンジニアリングの基盤構築なら「GitLab」\n\n![プラットフォームエンジニアリングの基盤構築なら「GitLab」](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508135/hy8mmygwnbm0ws0ejtik.png)\n\nプラットフォームエンジニアリングの基盤構築をスムーズに実現するなら「[GitLab](https://about.gitlab.com/ja-jp/)」の活用がおすすめです。ここでは、GitLabのサービス概要や強みについて紹介します。\n\n### 8-1. GitLabとは\n\nGitLabは、DevSecOpsワークフローを支援するAIを搭載したプラットフォームです。AIによるソースコード管理やセキュリティ対策、CI/CD、コンプライアンス管理など豊富な機能を単一のプラットフォームで活用でき、プラットフォームエンジニアリングの基盤構築に役立てられます。\n\n中小企業からエンタープライズまで多くの企業で導入されているプラットフォームで、高品質かつ迅速なソフトウェア開発を実現できます。\n\n### 8-2. GitLabが選ばれる理由\n\nGitLabの強みは、DevSecOpsツールチェーンの構築を単一のプラットフォームで実現できることです。これまで複数のツールを管理していた企業がGitLabを導入すれば、コスト削減や開発者の認知負荷の軽減につなげられ、プラットフォームエンジニアリングの運用をスムーズに行えるようになります。\n\nチーム全員で単一のプラットフォームを通して作業することで、メンバー間の連携や情報共有も容易に実施できます。また、サポート体制も充実しているため、導入と運用においても安心して進められるのも強みの一つです。\n\nGitLabを通してプラットフォームエンジニアリングを実現すれば、ソフトウェア開発のライフサイクル全体を効率化でき、競合との差別化につながる機能開発など本質的な作業に集中できるようになるでしょう。\n\n## 9. GitLabによるプラットフォームエンジニアリング実現のアプローチと活用例\n\n![GitLabによるプラットフォームエンジニアリング実現のアプローチと活用例](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758508136/gn4zixnirbsgrk1anwi8.jpg)\n\n実際にGitLabによるプラットフォームエンジニアリング実現のアプローチと活用例を紹介します。\n\n* 再利用可能なCI/CDコンポーネント  \n* セキュリティとコンプライアンス  \n* データ活用と分析  \n* コミュニケーションの効率化\n\n### 9-1. 再利用可能なCI/CDコンポーネント\n\nCI/CDコンポーネントは、再利用可能な単一のパイプライン構成ユニットのことで、この機能を使用すればCI/CDパイプラインの設定が容易になります。\n\nまた、再利用可能なCI/CDコンポーネントをリスト化して、各コンポーネントの情報を確認できる「[CI/CDカタログ](https://gitlab.com/explore/catalog)」も提供しています。コンポーネントが一元管理されているため、必要なものを必要な時に見つけ出して再利用できる仕様となっています。\n\nこれにより、開発者の作業効率向上や、組織全体でのスムーズなナレッジ共有を実現できるでしょう。\n\nCI/CDコンポーネントの詳細については以下のページをご覧下さい。\n\n[GitLab入門：CI/CDについて理解する](https://about.gitlab.com/ja-jp/blog/getting-started-with-gitlab-understanding-ci-cd/)\n\n### 9-2. セキュリティとコンプライアンス\n\nGitLabでは、ソフトウェア開発ライフサイクルの全てのステージに対応したセキュリティやコンプライアンス機能を搭載しています。\n\n開発を進める中で、セキュリティリスクなどの問題を早期に発見して対応できるため、トラブル発生時の対応コストを抑えたり、事態の深刻化を未然に防止したりすることが可能です。\n\n### 9-3. データ活用と分析\n\nGitLabでは、データ活用と分析による開発の効率性向上も実現できます。プロジェクトの運用状況などソフトウェア開発ライフサイクルにおけるさまざまなデータが一元管理されている仕組みとなっているため、関係者全員がスムーズに必要な情報にアクセスできます。\n\nまた、 プラットフォームに蓄積された主要なメトリクスを追跡して問題点を詳細に分析することで、迅速な改善や顧客価値の向上につなげられます。GitLabでは、DevOpsのパフォーマンスや健全性を示す[DORAメトリクス](https://docs.gitlab.com/user/analytics/dora_metrics/)の可視化・分析機能などを提供しています。\n\n### 9-4. コミュニケーションの効率化\n\nGitLabは統合型プラットフォームであり、全員が同じツールにアクセスして利用できるようになるため、開発者間でのコミュニケーションが効率化されます。\n\n誰もがアクセスしやすい共同ドキュメントの作成も可能であるため、別のツールに切り替えて作業する必要がなく、情報の共有や整理が容易になります。\n\nなお、プラットフォームエンジニアリングにおけるGitLab活用の詳細については以下のページをご覧下さい。\n\n> [プラットフォームエンジニアリングにおけるGitLabの活用](https://about.gitlab.com/ja-jp/solutions/platform-engineering/)\n\n[](https://about.gitlab.com/ja-jp/solutions/platform-engineering/)\n\n## まとめ： プラットフォームエンジニアリングの実現により開発品質の向上と効率化を図ろう\n\nプラットフォームエンジニアリングの導入は、ビジネス環境が激化している時代において重要視されているアプローチです。実際の導入においては、適切な専門チームの組成やツール・サービスの選定が大切なポイントとなってきます。\n\nプラットフォームエンジニアリングの基盤構築なら、ぜひ[GitLab](https://about.gitlab.com/ja-jp/)をご活用下さい。GitLabなら単一のプラットフォームで豊富な機能を利用できるため、開発者の認知負荷を軽減し、迅速かつ品質の高いソフトウェア開発を実現できます。\n\nなお、GitLabでは世界39か国、5,000人を超えるDevSecOps専門家のインサイトが詰まった完全版レポートを無料で公開しているので、ぜひこちらもご覧下さい。\n\n> [2024グローバルDevSecOpsレポートはこちら](https://about.gitlab.com/ja-jp/developer-survey/?utm_medium=blog&utm_source=blog&utm_campaign=eg_apac_brand_x_x_ja_gitlabjapanblogseo_what-is-platform-engineering)\n\n*監修：川瀬 洋平 [@ykawase](https://gitlab.com/ykawase)*\n\n*（GitLab合同会社 カスタマーサクセス本部 シニアカスタマーサクセスマネージャー）*","2025-09-22",[878],"この記事では、プラットフォームエンジニアリングの意味や特徴、導入メリットなどを解説します。",[9,750,1289,751,752,1417,680,754],{"featured":6,"template":685,"slug":1457},"what-is-platform-engineering","content:ja-jp:blog:what-is-platform-engineering.yml","What Is Platform Engineering","ja-jp/blog/what-is-platform-engineering.yml","ja-jp/blog/what-is-platform-engineering",{"_path":1463,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":1464,"content":1470,"config":1475,"_id":1477,"_type":14,"title":1478,"_source":16,"_file":1479,"_stem":1480,"_extension":19},"/ja-jp/blog/what-is-yaml",{"ogTitle":1465,"schema":1466,"ogImage":1467,"ogDescription":1468,"ogSiteName":669,"noIndex":6,"ogType":670,"ogUrl":1469,"title":1465,"canonicalUrls":1469,"description":1468},"拡張子YAMLファイルとは？基本から使い方まで徹底解説","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"拡張子YAMLファイルとは？基本から使い方まで徹底解説\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab Japan Team\"},{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2025-04-09\",\n      }","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662547/Blog/Hero%20Images/what_is_yaml.jpg","YAMLは構成ファイル紹介などに使用されるフォーマットです。この記事では、YAMLの基本からKubernetesなどでの具体的な使い方まで解説します。","https://about.gitlab.com/blog/what-is-yaml",{"title":1465,"description":1468,"authors":1471,"heroImage":1467,"date":1472,"body":1473,"category":703,"tags":1474},[771,675],"2025-04-09","## 目次\n\n* YAMLとは？\n* YAMLを何に使う？\n* YAMLとYMLの違いとは？\n* YAMLとJSONの違い\n* YAMLとCUEの比較\n* YAMLのデータ構造と書き方（基本編） \n* GitLabでYAMLを使う\n* 実際にYAMLファイルを編集してみましょう\n* YAMLに関するFAQ\n\nYAMLは、[Kubernetes](https://about.gitlab.com/ja-jp/blog/what-is-kubernetes/)ファイルやAnsibleプレイブックに使用されるデータシリアライゼーション・フォーマットです。この記事では、YAMLファイルの基本的な書き方や具体的な利用シーンについて詳しく解説します。\n\n## YAMLとは？\n\nYAMLは、人間がデータを簡潔かつ理解しやすく表現するよう設計されており、設定ファイルやデータ転送で頻繁に使用されるプログラミング言語です。階層的情報の整理に適し、Jsonやxmlの代替と利用されることがあります。\n\n## YAMLを何に使う？\n\nYAMLは可読性の高いこともあり、設定ファイルやプレイブックの記載に使われます。いくつか例を下記に記載しますので、参考にしてください。\n\n* 設定ファイルの記述  \n* ログファイル  \n* プロセス間でのメッセージのやり取り  \n* アプリケーション間でのデータ共有  \n* 構造化データの記述\n\n## YAMLとYMLの違いとは？\n\nどちらも同じ形式のファイルを指し、拡張子が「.yml」か「.yaml」という表記の違いだけです。ヤムルファイルであることを示す正式な拡張子は.yamlですが、一般的に拡張子（.txt, .zip, .exe, .png等）は3文字で記載されるので、この3文字ルールに合わせたのが.ymlとなっています。短く簡潔に書きたい開発者には「.yml」が選ばれることが多いです。\n\n## YAMLとJSON形式の違い\n\nJSON形式では中括弧を使って要件を定義していくのに対して、YAMLは、インデントで構造が明示されるので、可読性が高くなっています。下記サンプルを見比べてください。\\\nYAMLは、プログラマーにとっての使いやすさを重視していることがわかると思います。\n\nYAML：\\\n![yamlのキーとバリューの記載例](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687456/Blog/Content%20Images/yaml-coding-sample-01.png)\n\nJSON:\n\n![JSON形式のキーとバリューの記載例](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687456/Blog/Content%20Images/json-format-coding-sample-01.png)\n\n## YAMLとCUEの比較\n\nYAMLは、可読性が高くシンプルな構造を持つのに比べ、CUEは、スキーマとデータを統合するため、複雑な設定もひとつのファイルで管理できます。また、YAML単体では実現できなかったスキーマバリデーション機能を持つので、データの整合性を担保しやすいです。\n\nまた、柔軟性も大きな特徴です。CUEは、あらゆる種類のデータを定義、生成、検証するために使用される[オープンソース](https://about.gitlab.com/ja-jp/blog/what-is-open-source/)の言語（具体的にはJSONのスーパーセット）なので、Go、JSON、OpenAPI、Protocol Buffers、YAMLなどの他の多くの言語と連携できます。\n\nまた、Go APIによるスクリプト機能を備えているので、CUEによるマニフェストを最終的な[Kubernetes](https://about.gitlab.com/ja-jp/blog/what-is-kubernetes/)リソースのYAMLとして表示したり、特定クラスタにデプロイするリソースを一覧するコマンドを実装する際などに使う機会があります。\n\n## YAMLのデータ構造と書き方（基本編）\n\n### YAMLファイル記述の注意点\n\nインデントとタブが、とても重要であることを覚えておいてください。余分なインデントやタブが使われていると、YAMLオブジェクトの意味が変わってしまうので、これらがとても重要になります。\n\n### YAMLのデータ構造\n\nYAMLは主に、コレクションとスカラーという２つのデータで成り立っています。コレクションは、シーケンスとマッピングから成り立ちます。シーケンスは配列、マッピングは名前と値のペア（Key : Valueで表現する配列）。そしてスカラーは、型を判別させるためのもので、文字列、数値などを表します。\n\n* コレクション  \n\n  * シーケンス  \n  * マッピング  \n* スカラー\n\n### YAMLの書き方\n\n![image2](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687456/Blog/Content%20Images/image2.png)\n\n* 複数行のコレクション：複数の行のフォーマットを維持する必要がある場合には | (バーティカルバー) シンボルを使用します。  \n* 複数行のフォーマット：長い文字列の値があり、フォーマットを維持したまま複数行に渡って記述する必要がある場合には、 > を使用します。  \n* リスト：リストは - （ハイフン）を使って表現します。  \n* ネスト：ネストされたデータ構造はインデントを使って表現されます。\n\n### Kubernetes（k8s)のYAMLファイルの書き方\n\nKubernetesでは、リソースの定義にYAMLファイルが使用されます。今回はYAMLマニフェストの書き方を紹介します。  \n\nYAMLマニフェスト：\\\n![YAMLでKubernetesのマニフェストの書き方例](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687456/Blog/Content%20Images/YAML-manufest-sample-Kubernetes.png)\n\n### AnsibleのYAMLファイルの書き方\n\nAnsibleでは、処理内容を記載するプレイブックをYAMLで記載します。以下に、簡単なAnsibleプレイブックの例を示します。\n\n![image3](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687457/Blog/Content%20Images/image3.png)\n\n## GitLabでYAMLを使う\n\nGitLab CI/CD パイプラインは、プロジェクト毎に[.gitlab-ci.yml](https://docs.gitlab.com/ee/ci/examples/index.html)というYAMLファイルを使って[パイプラインの構造と実行順序を定義](https://gitlab.com/stylez-co-jp/gitlab-ce/-/blob/dev-v12.0.3-ja.1/doc-ja/ci/yaml/README.md)します。このファイルで設定された内容を、GitLab Runnerの中で処理します。CI/CD YAML構文については[こちらの英文まとめページ](https://docs.gitlab.com/ee/ci/yaml/)をご参照ください。\n\n## 実際にYAMLファイルを編集してみましょう\n\nYAMLは、そのシンプルさと可読性の高さから、設定ファイル、CI/CDパイプライン、Kubernetesをはじめとするコンテナオーケストレーションやドキュメント、構成管理など、多岐にわたり利用されています。その可読性の高さで、開発者や運用エンジニアが構成やデータを容易に管理し、効率的に作業を進めることができます。YAMLを理解することで、様々なシステムやツールの設定がより簡単かつ直感的に行えるようになるでしょう。\n\n## YAMLに関するFAQ\n\n### YAMLは何に使われますか\n\nYAMLは、そのシンプルさと可読性の高さから、設定ファイル、CI/CDパイプライン、Kubernetesをはじめとするコンテナオーケストレーションやドキュメントと構成管理など、多岐にわたり利用されています。\n\n### YAMLとJSONの違いは？\n\nJSONファイルは中括弧を使って要件を定義していくのに対して、YAMLは、インデントで構造が明示されるので、可読性が高くなっています。ただし、YAMLではインデントやスペースがとても重要になる点に注意が必要です。\n\n### YAMLはなぜ人気なのですか？\n\nYAMLは開発者の間で人気のあるデータシリアライズ言語です。なぜなら、その読みやすさ、汎用性、Pythonと似たインデントシステムを使うからです。YAMLは複数のデータ型をサポートしており、多くのプログラミング言語で利用可能なパーサーライブラリが提供されているため、さまざまなデータシリアライゼーションタスクを扱うことができ、幅広い場面で活用されています。\n\n\u003Cbr>\u003Cbr>\n\n*監修：佐々木 直晴 [@naosasaki](https://gitlab.com/naosasaki) （GitLab合同会社 ソリューションアーキテクト本部 シニアソリューションアーキテクト）*",[1289,1103,751,9,531,1416,680,754,1042,1104],{"slug":1476,"featured":91,"template":685},"what-is-yaml","content:ja-jp:blog:what-is-yaml.yml","What Is Yaml","ja-jp/blog/what-is-yaml.yml","ja-jp/blog/what-is-yaml",1760103768159]