[{"data":1,"prerenderedAt":709},["ShallowReactive",2],{"/ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem":3,"navigation-ja-jp":38,"banner-ja-jp":452,"footer-ja-jp":465,"GitLab":675,"footer-source-/ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem/":688,"next-steps-ja-jp":694},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":28,"_id":31,"_type":32,"title":33,"_source":34,"_file":35,"_stem":36,"_extension":37},"/ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem","blog",false,"",{"ogTitle":9,"schema":10,"ogImage":11,"ogDescription":12,"ogSiteName":13,"noIndex":6,"ogType":14,"ogUrl":15,"title":9,"canonicalUrls":15,"description":12},"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":11,"body":17,"authors":18,"updatedDate":20,"date":21,"title":9,"tags":22,"description":12,"category":25},"*「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",[19],"GitLab","2025-10-07","2025-03-13",[23,24,25,26,27],"DevSecOps platform","tutorial","product","agile","CI/CD",{"slug":29,"featured":6,"template":30},"automating-agile-workflows-with-the-gitlab-triage-gem","BlogPost","content:ja-jp:blog:automating-agile-workflows-with-the-gitlab-triage-gem.yml","yaml","Automating Agile Workflows With The Gitlab Triage Gem","content","ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem.yml","ja-jp/blog/automating-agile-workflows-with-the-gitlab-triage-gem","yml",{"_path":39,"_dir":40,"_draft":6,"_partial":6,"_locale":7,"data":41,"_id":448,"_type":32,"title":449,"_source":34,"_file":450,"_stem":451,"_extension":37},"/shared/ja-jp/main-navigation","ja-jp",{"logo":42,"freeTrial":47,"sales":52,"login":57,"items":62,"search":392,"minimal":426,"duo":439},{"config":43},{"href":44,"dataGaName":45,"dataGaLocation":46},"/ja-jp/","gitlab logo","header",{"text":48,"config":49},"無料トライアルを開始",{"href":50,"dataGaName":51,"dataGaLocation":46},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":53,"config":54},"お問い合わせ",{"href":55,"dataGaName":56,"dataGaLocation":46},"/ja-jp/sales/","sales",{"text":58,"config":59},"サインイン",{"href":60,"dataGaName":61,"dataGaLocation":46},"https://gitlab.com/users/sign_in/","sign in",[63,107,204,209,314,374],{"text":64,"config":65,"cards":67,"footer":90},"プラットフォーム",{"dataNavLevelOne":66},"platform",[68,74,82],{"title":64,"description":69,"link":70},"最も包括的かつAIで強化されたDevSecOpsプラットフォーム",{"text":71,"config":72},"プラットフォームを詳しく見る",{"href":73,"dataGaName":66,"dataGaLocation":46},"/ja-jp/platform/",{"title":75,"description":76,"link":77},"GitLab Duo（AI）","開発のすべてのステージでAIを活用し、ソフトウェアをより迅速にビルド",{"text":78,"config":79},"GitLab Duoのご紹介",{"href":80,"dataGaName":81,"dataGaLocation":46},"/ja-jp/gitlab-duo/","gitlab duo ai",{"title":83,"description":84,"link":85},"GitLabが選ばれる理由","GitLabが大企業に選ばれる理由10選",{"text":86,"config":87},"詳細はこちら",{"href":88,"dataGaName":89,"dataGaLocation":46},"/ja-jp/why-gitlab/","why gitlab",{"title":91,"items":92},"利用を開始：",[93,98,103],{"text":94,"config":95},"プラットフォームエンジニアリング",{"href":96,"dataGaName":97,"dataGaLocation":46},"/ja-jp/solutions/platform-engineering/","platform engineering",{"text":99,"config":100},"開発者の経験",{"href":101,"dataGaName":102,"dataGaLocation":46},"/ja-jp/developer-experience/","Developer experience",{"text":104,"config":105},"MLOps",{"href":106,"dataGaName":104,"dataGaLocation":46},"/ja-jp/topics/devops/the-role-of-ai-in-devops/",{"text":108,"left":109,"config":110,"link":112,"lists":116,"footer":186},"製品",true,{"dataNavLevelOne":111},"solutions",{"text":113,"config":114},"すべてのソリューションを表示",{"href":115,"dataGaName":111,"dataGaLocation":46},"/ja-jp/solutions/",[117,142,164],{"title":118,"description":119,"link":120,"items":125},"自動化","CI/CDと自動化でデプロイを加速",{"config":121},{"icon":122,"href":123,"dataGaName":124,"dataGaLocation":46},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[126,129,133,138],{"text":27,"config":127},{"href":128,"dataGaLocation":46,"dataGaName":27},"/ja-jp/solutions/continuous-integration/",{"text":130,"config":131},"AIアシストによる開発",{"href":80,"dataGaLocation":46,"dataGaName":132},"AI assisted development",{"text":134,"config":135},"ソースコード管理",{"href":136,"dataGaLocation":46,"dataGaName":137},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":139,"config":140},"自動化されたソフトウェアデリバリー",{"href":123,"dataGaLocation":46,"dataGaName":141},"Automated software delivery",{"title":143,"description":144,"link":145,"items":150},"セキュリティ","セキュリティを損なうことなくコードをより迅速に完成",{"config":146},{"href":147,"dataGaName":148,"dataGaLocation":46,"icon":149},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[151,155,160],{"text":152,"config":153},"Application Security Testing",{"href":147,"dataGaName":154,"dataGaLocation":46},"Application security testing",{"text":156,"config":157},"ソフトウェアサプライチェーンの安全性",{"href":158,"dataGaLocation":46,"dataGaName":159},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":161,"config":162},"Software Compliance",{"href":163,"dataGaName":161,"dataGaLocation":46},"/ja-jp/solutions/software-compliance/",{"title":165,"link":166,"items":171},"測定",{"config":167},{"icon":168,"href":169,"dataGaName":170,"dataGaLocation":46},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[172,176,181],{"text":173,"config":174},"可視性と測定",{"href":169,"dataGaLocation":46,"dataGaName":175},"Visibility and Measurement",{"text":177,"config":178},"バリューストリーム管理",{"href":179,"dataGaLocation":46,"dataGaName":180},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":182,"config":183},"分析とインサイト",{"href":184,"dataGaLocation":46,"dataGaName":185},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":187,"items":188},"GitLabが活躍する場所",[189,194,199],{"text":190,"config":191},"Enterprise",{"href":192,"dataGaLocation":46,"dataGaName":193},"/ja-jp/enterprise/","enterprise",{"text":195,"config":196},"スモールビジネス",{"href":197,"dataGaLocation":46,"dataGaName":198},"/ja-jp/small-business/","small business",{"text":200,"config":201},"公共機関",{"href":202,"dataGaLocation":46,"dataGaName":203},"/ja-jp/solutions/public-sector/","public sector",{"text":205,"config":206},"価格",{"href":207,"dataGaName":208,"dataGaLocation":46,"dataNavLevelOne":208},"/ja-jp/pricing/","pricing",{"text":210,"config":211,"link":213,"lists":217,"feature":301},"関連リソース",{"dataNavLevelOne":212},"resources",{"text":214,"config":215},"すべてのリソースを表示",{"href":216,"dataGaName":212,"dataGaLocation":46},"/ja-jp/resources/",[218,251,273],{"title":219,"items":220},"はじめに",[221,226,231,236,241,246],{"text":222,"config":223},"インストール",{"href":224,"dataGaName":225,"dataGaLocation":46},"/ja-jp/install/","install",{"text":227,"config":228},"クイックスタートガイド",{"href":229,"dataGaName":230,"dataGaLocation":46},"/ja-jp/get-started/","quick setup checklists",{"text":232,"config":233},"学ぶ",{"href":234,"dataGaLocation":46,"dataGaName":235},"https://university.gitlab.com/","learn",{"text":237,"config":238},"製品ドキュメント",{"href":239,"dataGaName":240,"dataGaLocation":46},"https://docs.gitlab.com/","product documentation",{"text":242,"config":243},"ベストプラクティスビデオ",{"href":244,"dataGaName":245,"dataGaLocation":46},"/ja-jp/getting-started-videos/","best practice videos",{"text":247,"config":248},"インテグレーション",{"href":249,"dataGaName":250,"dataGaLocation":46},"/ja-jp/integrations/","integrations",{"title":252,"items":253},"検索する",[254,259,263,268],{"text":255,"config":256},"お客様成功事例",{"href":257,"dataGaName":258,"dataGaLocation":46},"/ja-jp/customers/","customer success stories",{"text":260,"config":261},"ブログ",{"href":262,"dataGaName":5,"dataGaLocation":46},"/ja-jp/blog/",{"text":264,"config":265},"リモート",{"href":266,"dataGaName":267,"dataGaLocation":46},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":269,"config":270},"TeamOps",{"href":271,"dataGaName":272,"dataGaLocation":46},"/ja-jp/teamops/","teamops",{"title":274,"items":275},"つなげる",[276,281,286,291,296],{"text":277,"config":278},"GitLabサービス",{"href":279,"dataGaName":280,"dataGaLocation":46},"/ja-jp/services/","services",{"text":282,"config":283},"コミュニティ",{"href":284,"dataGaName":285,"dataGaLocation":46},"/community/","community",{"text":287,"config":288},"フォーラム",{"href":289,"dataGaName":290,"dataGaLocation":46},"https://forum.gitlab.com/","forum",{"text":292,"config":293},"イベント",{"href":294,"dataGaName":295,"dataGaLocation":46},"/events/","events",{"text":297,"config":298},"パートナー",{"href":299,"dataGaName":300,"dataGaLocation":46},"/ja-jp/partners/","partners",{"backgroundColor":302,"textColor":303,"text":304,"image":305,"link":309},"#2f2a6b","#fff","ソフトウェア開発の未来への洞察",{"altText":306,"config":307},"ソースプロモカード",{"src":308},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":310,"config":311},"最新情報を読む",{"href":312,"dataGaName":313,"dataGaLocation":46},"/ja-jp/the-source/","the source",{"text":315,"config":316,"lists":318},"会社情報",{"dataNavLevelOne":317},"company",[319],{"items":320},[321,326,332,334,339,344,349,354,359,364,369],{"text":322,"config":323},"GitLabについて",{"href":324,"dataGaName":325,"dataGaLocation":46},"/ja-jp/company/","about",{"text":327,"config":328,"footerGa":331},"採用情報",{"href":329,"dataGaName":330,"dataGaLocation":46},"/jobs/","jobs",{"dataGaName":330},{"text":292,"config":333},{"href":294,"dataGaName":295,"dataGaLocation":46},{"text":335,"config":336},"経営陣",{"href":337,"dataGaName":338,"dataGaLocation":46},"/company/team/e-group/","leadership",{"text":340,"config":341},"チーム",{"href":342,"dataGaName":343,"dataGaLocation":46},"/company/team/","team",{"text":345,"config":346},"ハンドブック",{"href":347,"dataGaName":348,"dataGaLocation":46},"https://handbook.gitlab.com/","handbook",{"text":350,"config":351},"投資家向け情報",{"href":352,"dataGaName":353,"dataGaLocation":46},"https://ir.gitlab.com/","investor relations",{"text":355,"config":356},"トラストセンター",{"href":357,"dataGaName":358,"dataGaLocation":46},"/ja-jp/security/","trust center",{"text":360,"config":361},"AI Transparency Center",{"href":362,"dataGaName":363,"dataGaLocation":46},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":365,"config":366},"ニュースレター",{"href":367,"dataGaName":368,"dataGaLocation":46},"/company/contact/","newsletter",{"text":370,"config":371},"プレス",{"href":372,"dataGaName":373,"dataGaLocation":46},"/press/","press",{"text":53,"config":375,"lists":376},{"dataNavLevelOne":317},[377],{"items":378},[379,382,387],{"text":53,"config":380},{"href":55,"dataGaName":381,"dataGaLocation":46},"talk to sales",{"text":383,"config":384},"サポートを受ける",{"href":385,"dataGaName":386,"dataGaLocation":46},"/support/","get help",{"text":388,"config":389},"カスタマーポータル",{"href":390,"dataGaName":391,"dataGaLocation":46},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":393,"login":394,"suggestions":401},"閉じる",{"text":395,"link":396},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":397,"config":398},"GitLab.com",{"href":60,"dataGaName":399,"dataGaLocation":400},"search login","search",{"text":402,"default":403},"提案",[404,407,412,414,418,422],{"text":75,"config":405},{"href":80,"dataGaName":406,"dataGaLocation":400},"GitLab Duo (AI)",{"text":408,"config":409},"コード提案（AI）",{"href":410,"dataGaName":411,"dataGaLocation":400},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":27,"config":413},{"href":128,"dataGaName":27,"dataGaLocation":400},{"text":415,"config":416},"GitLab on AWS",{"href":417,"dataGaName":415,"dataGaLocation":400},"/ja-jp/partners/technology-partners/aws/",{"text":419,"config":420},"GitLab on Google Cloud",{"href":421,"dataGaName":419,"dataGaLocation":400},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":423,"config":424},"GitLabを選ぶ理由",{"href":88,"dataGaName":425,"dataGaLocation":400},"Why GitLab?",{"freeTrial":427,"mobileIcon":431,"desktopIcon":436},{"text":48,"config":428},{"href":429,"dataGaName":51,"dataGaLocation":430},"https://gitlab.com/-/trials/new/","nav",{"altText":432,"config":433},"GitLabアイコン",{"src":434,"dataGaName":435,"dataGaLocation":430},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":432,"config":437},{"src":438,"dataGaName":435,"dataGaLocation":430},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":440,"mobileIcon":444,"desktopIcon":446},{"text":441,"config":442},"GitLab Duoの詳細について",{"href":80,"dataGaName":443,"dataGaLocation":430},"gitlab duo",{"altText":432,"config":445},{"src":434,"dataGaName":435,"dataGaLocation":430},{"altText":432,"config":447},{"src":438,"dataGaName":435,"dataGaLocation":430},"content:shared:ja-jp:main-navigation.yml","Main Navigation","shared/ja-jp/main-navigation.yml","shared/ja-jp/main-navigation",{"_path":453,"_dir":40,"_draft":6,"_partial":6,"_locale":7,"title":454,"button":455,"config":460,"_id":462,"_type":32,"_source":34,"_file":463,"_stem":464,"_extension":37},"/shared/ja-jp/banner","GitLab Duo Agent Platformがパブリックベータ版で利用可能になりました！",{"text":456,"config":457},"ベータ版を試す",{"href":458,"dataGaName":459,"dataGaLocation":46},"/ja-jp/gitlab-duo/agent-platform/","duo banner",{"layout":461},"release","content:shared:ja-jp:banner.yml","shared/ja-jp/banner.yml","shared/ja-jp/banner",{"_path":466,"_dir":40,"_draft":6,"_partial":6,"_locale":7,"data":467,"_id":671,"_type":32,"title":672,"_source":34,"_file":673,"_stem":674,"_extension":37},"/shared/ja-jp/main-footer",{"text":468,"source":469,"edit":475,"contribute":480,"config":485,"items":490,"minimal":663},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":470,"config":471},"ページのソースを表示",{"href":472,"dataGaName":473,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":476,"config":477},"このページを編集",{"href":478,"dataGaName":479,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":481,"config":482},"ご協力をお願いします",{"href":483,"dataGaName":484,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":486,"facebook":487,"youtube":488,"linkedin":489},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[491,514,568,600,635],{"title":64,"links":492,"subMenu":497},[493],{"text":494,"config":495},"DevSecOpsプラットフォーム",{"href":73,"dataGaName":496,"dataGaLocation":474},"devsecops platform",[498],{"title":205,"links":499},[500,504,509],{"text":501,"config":502},"プランの表示",{"href":207,"dataGaName":503,"dataGaLocation":474},"view plans",{"text":505,"config":506},"Premiumを選ぶ理由",{"href":507,"dataGaName":508,"dataGaLocation":474},"/ja-jp/pricing/premium/","why premium",{"text":510,"config":511},"Ultimateを選ぶ理由",{"href":512,"dataGaName":513,"dataGaLocation":474},"/ja-jp/pricing/ultimate/","why ultimate",{"title":515,"links":516},"ソリューション",[517,522,525,527,532,537,541,544,547,552,554,556,558,563],{"text":518,"config":519},"デジタルトランスフォーメーション",{"href":520,"dataGaName":521,"dataGaLocation":474},"/ja-jp/topics/digital-transformation/","digital transformation",{"text":523,"config":524},"セキュリティとコンプライアンス",{"href":147,"dataGaName":154,"dataGaLocation":474},{"text":139,"config":526},{"href":123,"dataGaName":124,"dataGaLocation":474},{"text":528,"config":529},"アジャイル開発",{"href":530,"dataGaName":531,"dataGaLocation":474},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":533,"config":534},"クラウドトランスフォーメーション",{"href":535,"dataGaName":536,"dataGaLocation":474},"/ja-jp/topics/cloud-native/","cloud transformation",{"text":538,"config":539},"SCM",{"href":136,"dataGaName":540,"dataGaLocation":474},"source code management",{"text":27,"config":542},{"href":128,"dataGaName":543,"dataGaLocation":474},"continuous integration & delivery",{"text":177,"config":545},{"href":179,"dataGaName":546,"dataGaLocation":474},"value stream management",{"text":548,"config":549},"GitOps",{"href":550,"dataGaName":551,"dataGaLocation":474},"/ja-jp/solutions/gitops/","gitops",{"text":190,"config":553},{"href":192,"dataGaName":193,"dataGaLocation":474},{"text":195,"config":555},{"href":197,"dataGaName":198,"dataGaLocation":474},{"text":200,"config":557},{"href":202,"dataGaName":203,"dataGaLocation":474},{"text":559,"config":560},"教育",{"href":561,"dataGaName":562,"dataGaLocation":474},"/ja-jp/solutions/education/","education",{"text":564,"config":565},"金融サービス",{"href":566,"dataGaName":567,"dataGaLocation":474},"/ja-jp/solutions/finance/","financial services",{"title":210,"links":569},[570,572,574,576,579,581,584,586,588,590,592,594,596,598],{"text":222,"config":571},{"href":224,"dataGaName":225,"dataGaLocation":474},{"text":227,"config":573},{"href":229,"dataGaName":230,"dataGaLocation":474},{"text":232,"config":575},{"href":234,"dataGaName":235,"dataGaLocation":474},{"text":237,"config":577},{"href":239,"dataGaName":578,"dataGaLocation":474},"docs",{"text":260,"config":580},{"href":262,"dataGaName":5},{"text":582,"config":583},"お客様の成功事例",{"href":257,"dataGaLocation":474},{"text":255,"config":585},{"href":257,"dataGaName":258,"dataGaLocation":474},{"text":264,"config":587},{"href":266,"dataGaName":267,"dataGaLocation":474},{"text":277,"config":589},{"href":279,"dataGaName":280,"dataGaLocation":474},{"text":269,"config":591},{"href":271,"dataGaName":272,"dataGaLocation":474},{"text":282,"config":593},{"href":284,"dataGaName":285,"dataGaLocation":474},{"text":287,"config":595},{"href":289,"dataGaName":290,"dataGaLocation":474},{"text":292,"config":597},{"href":294,"dataGaName":295,"dataGaLocation":474},{"text":297,"config":599},{"href":299,"dataGaName":300,"dataGaLocation":474},{"title":601,"links":602},"Company",[603,605,607,609,611,613,615,619,624,626,628,630],{"text":322,"config":604},{"href":324,"dataGaName":317,"dataGaLocation":474},{"text":327,"config":606},{"href":329,"dataGaName":330,"dataGaLocation":474},{"text":335,"config":608},{"href":337,"dataGaName":338,"dataGaLocation":474},{"text":340,"config":610},{"href":342,"dataGaName":343,"dataGaLocation":474},{"text":345,"config":612},{"href":347,"dataGaName":348,"dataGaLocation":474},{"text":350,"config":614},{"href":352,"dataGaName":353,"dataGaLocation":474},{"text":616,"config":617},"Sustainability",{"href":618,"dataGaName":616,"dataGaLocation":474},"/sustainability/",{"text":620,"config":621},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":622,"dataGaName":623,"dataGaLocation":474},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":355,"config":625},{"href":357,"dataGaName":358,"dataGaLocation":474},{"text":365,"config":627},{"href":367,"dataGaName":368,"dataGaLocation":474},{"text":370,"config":629},{"href":372,"dataGaName":373,"dataGaLocation":474},{"text":631,"config":632},"現代奴隷制の透明性に関する声明",{"href":633,"dataGaName":634,"dataGaLocation":474},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":53,"links":636},[637,639,641,643,648,653,658],{"text":53,"config":638},{"href":55,"dataGaName":56,"dataGaLocation":474},{"text":383,"config":640},{"href":385,"dataGaName":386,"dataGaLocation":474},{"text":388,"config":642},{"href":390,"dataGaName":391,"dataGaLocation":474},{"text":644,"config":645},"ステータス",{"href":646,"dataGaName":647,"dataGaLocation":474},"https://status.gitlab.com/","status",{"text":649,"config":650},"利用規約",{"href":651,"dataGaName":652,"dataGaLocation":474},"/terms/","terms of use",{"text":654,"config":655},"プライバシーに関する声明",{"href":656,"dataGaName":657,"dataGaLocation":474},"/ja-jp/privacy/","privacy statement",{"text":659,"config":660},"Cookieの設定",{"dataGaName":661,"dataGaLocation":474,"id":662,"isOneTrustButton":109},"cookie preferences","ot-sdk-btn",{"items":664},[665,667,669],{"text":649,"config":666},{"href":651,"dataGaName":652,"dataGaLocation":474},{"text":654,"config":668},{"href":656,"dataGaName":657,"dataGaLocation":474},{"text":659,"config":670},{"dataGaName":661,"dataGaLocation":474,"id":662,"isOneTrustButton":109},"content:shared:ja-jp:main-footer.yml","Main Footer","shared/ja-jp/main-footer.yml","shared/ja-jp/main-footer",[676],{"_path":677,"_dir":678,"_draft":6,"_partial":6,"_locale":7,"content":679,"config":682,"_id":684,"_type":32,"title":685,"_source":34,"_file":686,"_stem":687,"_extension":37},"/en-us/blog/authors/gitlab","authors",{"name":19,"config":680},{"headshot":681,"ctfId":19},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png",{"template":683},"BlogAuthor","content:en-us:blog:authors:gitlab.yml","Gitlab","en-us/blog/authors/gitlab.yml","en-us/blog/authors/gitlab",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":689,"content":690,"config":693,"_id":31,"_type":32,"title":33,"_source":34,"_file":35,"_stem":36,"_extension":37},{"ogTitle":9,"schema":10,"ogImage":11,"ogDescription":12,"ogSiteName":13,"noIndex":6,"ogType":14,"ogUrl":15,"title":9,"canonicalUrls":15,"description":12},{"heroImage":11,"body":17,"authors":691,"updatedDate":20,"date":21,"title":9,"tags":692,"description":12,"category":25},[19],[23,24,25,26,27],{"slug":29,"featured":6,"template":30},{"_path":695,"_dir":40,"_draft":6,"_partial":6,"_locale":7,"header":696,"eyebrow":697,"blurb":698,"button":699,"secondaryButton":703,"_id":705,"_type":32,"title":706,"_source":34,"_file":707,"_stem":708,"_extension":37},"/shared/ja-jp/next-steps","より優れたソフトウェアをより速く提供","フォーチュン100企業の50%以上がGitLabを信頼","インテリジェントなDevSecOpsプラットフォームで\n\n\nチームの可能性を広げましょう。\n",{"text":48,"config":700},{"href":701,"dataGaName":51,"dataGaLocation":702},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":53,"config":704},{"href":55,"dataGaName":56,"dataGaLocation":702},"content:shared:ja-jp:next-steps.yml","Next Steps","shared/ja-jp/next-steps.yml","shared/ja-jp/next-steps",1760103624967]