[{"data":1,"prerenderedAt":688},["ShallowReactive",2],{"/en-us/blog/tags/demo":3,"navigation-ja-jp":19,"banner-ja-jp":435,"footer-ja-jp":448,"footer-source-/en-us/blog/tags/demo/":658,"demo-tag-page-ja-jp":661},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"content":8,"config":10,"_id":12,"_type":13,"title":14,"_source":15,"_file":16,"_stem":17,"_extension":18},"/en-us/blog/tags/demo","tags",false,"",{"tag":9,"tagSlug":9},"demo",{"template":11},"BlogTag","content:en-us:blog:tags:demo.yml","yaml","Demo","content","en-us/blog/tags/demo.yml","en-us/blog/tags/demo","yml",{"_path":20,"_dir":21,"_draft":6,"_partial":6,"_locale":7,"data":22,"_id":431,"_type":13,"title":432,"_source":15,"_file":433,"_stem":434,"_extension":18},"/shared/ja-jp/main-navigation","ja-jp",{"logo":23,"freeTrial":28,"sales":33,"login":38,"items":43,"search":375,"minimal":409,"duo":422},{"config":24},{"href":25,"dataGaName":26,"dataGaLocation":27},"/ja-jp/","gitlab logo","header",{"text":29,"config":30},"無料トライアルを開始",{"href":31,"dataGaName":32,"dataGaLocation":27},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":34,"config":35},"お問い合わせ",{"href":36,"dataGaName":37,"dataGaLocation":27},"/ja-jp/sales/","sales",{"text":39,"config":40},"サインイン",{"href":41,"dataGaName":42,"dataGaLocation":27},"https://gitlab.com/users/sign_in/","sign in",[44,88,186,191,297,357],{"text":45,"config":46,"cards":48,"footer":71},"プラットフォーム",{"dataNavLevelOne":47},"platform",[49,55,63],{"title":45,"description":50,"link":51},"最も包括的かつAIで強化されたDevSecOpsプラットフォーム",{"text":52,"config":53},"プラットフォームを詳しく見る",{"href":54,"dataGaName":47,"dataGaLocation":27},"/ja-jp/platform/",{"title":56,"description":57,"link":58},"GitLab Duo（AI）","開発のすべてのステージでAIを活用し、ソフトウェアをより迅速にビルド",{"text":59,"config":60},"GitLab Duoのご紹介",{"href":61,"dataGaName":62,"dataGaLocation":27},"/ja-jp/gitlab-duo/","gitlab duo ai",{"title":64,"description":65,"link":66},"GitLabが選ばれる理由","GitLabが大企業に選ばれる理由10選",{"text":67,"config":68},"詳細はこちら",{"href":69,"dataGaName":70,"dataGaLocation":27},"/ja-jp/why-gitlab/","why gitlab",{"title":72,"items":73},"利用を開始：",[74,79,84],{"text":75,"config":76},"プラットフォームエンジニアリング",{"href":77,"dataGaName":78,"dataGaLocation":27},"/ja-jp/solutions/platform-engineering/","platform engineering",{"text":80,"config":81},"開発者の経験",{"href":82,"dataGaName":83,"dataGaLocation":27},"/ja-jp/developer-experience/","Developer experience",{"text":85,"config":86},"MLOps",{"href":87,"dataGaName":85,"dataGaLocation":27},"/ja-jp/topics/devops/the-role-of-ai-in-devops/",{"text":89,"left":90,"config":91,"link":93,"lists":97,"footer":168},"製品",true,{"dataNavLevelOne":92},"solutions",{"text":94,"config":95},"すべてのソリューションを表示",{"href":96,"dataGaName":92,"dataGaLocation":27},"/ja-jp/solutions/",[98,124,146],{"title":99,"description":100,"link":101,"items":106},"自動化","CI/CDと自動化でデプロイを加速",{"config":102},{"icon":103,"href":104,"dataGaName":105,"dataGaLocation":27},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[107,111,115,120],{"text":108,"config":109},"CI/CD",{"href":110,"dataGaLocation":27,"dataGaName":108},"/ja-jp/solutions/continuous-integration/",{"text":112,"config":113},"AIアシストによる開発",{"href":61,"dataGaLocation":27,"dataGaName":114},"AI assisted development",{"text":116,"config":117},"ソースコード管理",{"href":118,"dataGaLocation":27,"dataGaName":119},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":121,"config":122},"自動化されたソフトウェアデリバリー",{"href":104,"dataGaLocation":27,"dataGaName":123},"Automated software delivery",{"title":125,"description":126,"link":127,"items":132},"セキュリティ","セキュリティを損なうことなくコードをより迅速に完成",{"config":128},{"href":129,"dataGaName":130,"dataGaLocation":27,"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":27},"Application security testing",{"text":138,"config":139},"ソフトウェアサプライチェーンの安全性",{"href":140,"dataGaLocation":27,"dataGaName":141},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":143,"config":144},"Software Compliance",{"href":145,"dataGaName":143,"dataGaLocation":27},"/ja-jp/solutions/software-compliance/",{"title":147,"link":148,"items":153},"測定",{"config":149},{"icon":150,"href":151,"dataGaName":152,"dataGaLocation":27},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[154,158,163],{"text":155,"config":156},"可視性と測定",{"href":151,"dataGaLocation":27,"dataGaName":157},"Visibility and Measurement",{"text":159,"config":160},"バリューストリーム管理",{"href":161,"dataGaLocation":27,"dataGaName":162},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":164,"config":165},"分析とインサイト",{"href":166,"dataGaLocation":27,"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":27,"dataGaName":175},"/ja-jp/enterprise/","enterprise",{"text":177,"config":178},"スモールビジネス",{"href":179,"dataGaLocation":27,"dataGaName":180},"/ja-jp/small-business/","small business",{"text":182,"config":183},"公共機関",{"href":184,"dataGaLocation":27,"dataGaName":185},"/ja-jp/solutions/public-sector/","public sector",{"text":187,"config":188},"価格",{"href":189,"dataGaName":190,"dataGaLocation":27,"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":27},"/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":27},"/ja-jp/install/","install",{"text":209,"config":210},"クイックスタートガイド",{"href":211,"dataGaName":212,"dataGaLocation":27},"/ja-jp/get-started/","quick setup checklists",{"text":214,"config":215},"学ぶ",{"href":216,"dataGaLocation":27,"dataGaName":217},"https://university.gitlab.com/","learn",{"text":219,"config":220},"製品ドキュメント",{"href":221,"dataGaName":222,"dataGaLocation":27},"https://docs.gitlab.com/","product documentation",{"text":224,"config":225},"ベストプラクティスビデオ",{"href":226,"dataGaName":227,"dataGaLocation":27},"/ja-jp/getting-started-videos/","best practice videos",{"text":229,"config":230},"インテグレーション",{"href":231,"dataGaName":232,"dataGaLocation":27},"/ja-jp/integrations/","integrations",{"title":234,"items":235},"検索する",[236,241,246,251],{"text":237,"config":238},"お客様成功事例",{"href":239,"dataGaName":240,"dataGaLocation":27},"/ja-jp/customers/","customer success stories",{"text":242,"config":243},"ブログ",{"href":244,"dataGaName":245,"dataGaLocation":27},"/ja-jp/blog/","blog",{"text":247,"config":248},"リモート",{"href":249,"dataGaName":250,"dataGaLocation":27},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":252,"config":253},"TeamOps",{"href":254,"dataGaName":255,"dataGaLocation":27},"/ja-jp/teamops/","teamops",{"title":257,"items":258},"つなげる",[259,264,269,274,279],{"text":260,"config":261},"GitLabサービス",{"href":262,"dataGaName":263,"dataGaLocation":27},"/ja-jp/services/","services",{"text":265,"config":266},"コミュニティ",{"href":267,"dataGaName":268,"dataGaLocation":27},"/community/","community",{"text":270,"config":271},"フォーラム",{"href":272,"dataGaName":273,"dataGaLocation":27},"https://forum.gitlab.com/","forum",{"text":275,"config":276},"イベント",{"href":277,"dataGaName":278,"dataGaLocation":27},"/events/","events",{"text":280,"config":281},"パートナー",{"href":282,"dataGaName":283,"dataGaLocation":27},"/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":27},"/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":27},"/ja-jp/company/","about",{"text":310,"config":311,"footerGa":314},"採用情報",{"href":312,"dataGaName":313,"dataGaLocation":27},"/jobs/","jobs",{"dataGaName":313},{"text":275,"config":316},{"href":277,"dataGaName":278,"dataGaLocation":27},{"text":318,"config":319},"経営陣",{"href":320,"dataGaName":321,"dataGaLocation":27},"/company/team/e-group/","leadership",{"text":323,"config":324},"チーム",{"href":325,"dataGaName":326,"dataGaLocation":27},"/company/team/","team",{"text":328,"config":329},"ハンドブック",{"href":330,"dataGaName":331,"dataGaLocation":27},"https://handbook.gitlab.com/","handbook",{"text":333,"config":334},"投資家向け情報",{"href":335,"dataGaName":336,"dataGaLocation":27},"https://ir.gitlab.com/","investor relations",{"text":338,"config":339},"トラストセンター",{"href":340,"dataGaName":341,"dataGaLocation":27},"/ja-jp/security/","trust center",{"text":343,"config":344},"AI Transparency Center",{"href":345,"dataGaName":346,"dataGaLocation":27},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":348,"config":349},"ニュースレター",{"href":350,"dataGaName":351,"dataGaLocation":27},"/company/contact/","newsletter",{"text":353,"config":354},"プレス",{"href":355,"dataGaName":356,"dataGaLocation":27},"/press/","press",{"text":34,"config":358,"lists":359},{"dataNavLevelOne":300},[360],{"items":361},[362,365,370],{"text":34,"config":363},{"href":36,"dataGaName":364,"dataGaLocation":27},"talk to sales",{"text":366,"config":367},"サポートを受ける",{"href":368,"dataGaName":369,"dataGaLocation":27},"/support/","get help",{"text":371,"config":372},"カスタマーポータル",{"href":373,"dataGaName":374,"dataGaLocation":27},"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":41,"dataGaName":382,"dataGaLocation":383},"search login","search",{"text":385,"default":386},"提案",[387,390,395,397,401,405],{"text":56,"config":388},{"href":61,"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":108,"config":396},{"href":110,"dataGaName":108,"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":69,"dataGaName":408,"dataGaLocation":383},"Why GitLab?",{"freeTrial":410,"mobileIcon":414,"desktopIcon":419},{"text":29,"config":411},{"href":412,"dataGaName":32,"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":61,"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":21,"_draft":6,"_partial":6,"_locale":7,"title":437,"button":438,"config":443,"_id":445,"_type":13,"_source":15,"_file":446,"_stem":447,"_extension":18},"/shared/ja-jp/banner","GitLab Duo Agent Platformがパブリックベータ版で利用可能になりました！",{"text":439,"config":440},"ベータ版を試す",{"href":441,"dataGaName":442,"dataGaLocation":27},"/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":21,"_draft":6,"_partial":6,"_locale":7,"data":450,"_id":654,"_type":13,"title":655,"_source":15,"_file":656,"_stem":657,"_extension":18},"/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":45,"links":475,"subMenu":480},[476],{"text":477,"config":478},"DevSecOpsプラットフォーム",{"href":54,"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":104,"dataGaName":105,"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":108,"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":34,"links":619},[620,622,624,626,631,636,641],{"text":34,"config":621},{"href":36,"dataGaName":37,"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":90},"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":90},"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":12,"_type":13,"title":14,"_source":15,"_file":16,"_stem":17,"_extension":18},{"tag":9,"tagSlug":9},{"template":11},[662],{"_path":663,"_dir":245,"_draft":6,"_partial":6,"_locale":7,"seo":664,"content":672,"config":681,"_id":684,"_type":13,"title":685,"_source":15,"_file":686,"_stem":687,"_extension":18},"/ja-jp/blog/using-ansible-and-gitlab-as-infrastructure-for-code",{"title":665,"description":666,"ogTitle":665,"ogDescription":666,"noIndex":6,"ogImage":667,"ogUrl":668,"ogSiteName":669,"ogType":670,"canonicalUrls":668,"schema":671},"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","https://about.gitlab.com","article","\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":665,"description":666,"authors":673,"heroImage":667,"date":676,"body":677,"category":678,"tags":679,"updatedDate":680},[674,675],"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","engineering",[9,108],"2024-10-21",{"slug":682,"featured":6,"template":683},"using-ansible-and-gitlab-as-infrastructure-for-code","BlogPost","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",1761249188940]