[{"data":1,"prerenderedAt":707},["ShallowReactive",2],{"/ja-jp/blog/whats-new-in-git-2-45-0":3,"navigation-ja-jp":36,"banner-ja-jp":450,"footer-ja-jp":463,"footer-source-/ja-jp/blog/whats-new-in-git-2-45-0/":673,"Patrick Steinhardt":679,"next-steps-ja-jp":692},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":26,"_id":29,"_type":30,"title":31,"_source":32,"_file":33,"_stem":34,"_extension":35},"/ja-jp/blog/whats-new-in-git-2-45-0","blog",false,"",{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},"Git 2.45.0の新機能","ここでは、GitLabのGitチームと、より広範なGitコミュニティが最新のGitリリースにコントリビュートしたいくつかのハイライトを紹介します。これには、「reftables」や参照用の優れたツールなどが挙げられます。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659507/Blog/Hero%20Images/AdobeStock_623844718.jpg","https://about.gitlab.com/blog/whats-new-in-git-2-45-0","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Git 2.45.0の新機能\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Patrick Steinhardt\"}],\n        \"datePublished\": \"2024-04-30\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":19,"body":20,"category":21,"tags":22,"updatedDate":25},[18],"Patrick Steinhardt","2024-04-30","Gitプロジェクトは最近、[Gitバージョン2.45.0](https://lore.kernel.org/git/xmqq8r0ww0sj.fsf@gitster.g/)をリリースしました。このリリースのハイライトを見てみましょう。これには、GitLabのGitチームと、より広範なGitコミュニティからのコントリビュートによるものがあります。\n\n\n## Reftables: 新しい参照ストレージバックエンド\n\n\nすべてのGitリポジトリは、次の2つの基本的なデータ構造を追跡する必要があります:\n\n\n- ファイルのデータ、ディレクトリ構造、コミットメッセージ、タグを保存するオブジェクトグラフ。\n\n- 特定のオブジェクトをよりアクセスしやすい名前に関連付けるためのオブジェクトグラフへのポインタである参照。たとえば、ブランチは名前が\n`refs/heads/` プレフィックスで始まる参照です。\n\n\n参照がリポジトリに保存されるディスク上のフォーマットは、Gitの発足以来ほとんど変わっておらず、「files」フォーマットと呼ばれています。参照を作成するたびに、Gitは、パスが参照名と一致するGitリポジトリ内のプレーンなファイルである、いわゆる「ルース参照」を作成します。たとえば、\n\n\n```shell\n\n$ git init .\n\nInitialized empty Git repository in /tmp/repo/.git/\n\n\n# Updating a reference will cause Git to create a \"loose ref\". This loose\nref is\n\n# a simple file which contains the object ID of the commit.\n\n$ git commit --allow-empty --message \"Initial commit\"\n\n[main (root-commit) c70f266] Initial commit\n\n$ cat .git/refs/heads/main\n\nc70f26689975782739ef9666af079535b12b5946\n\n\n# Creating a second reference will end up with a second loose ref.\n\n$ git branch feature\n\n$ cat .git/refs/heads/feature\n\nc70f26689975782739ef9666af079535b12b5946\n\n$ tree .git/refs\n\n.git/refs/\n\n├── heads\n\n│   ├── feature\n\n│   └── main\n\n└── tags\n\n\n3 directories, 2 files\n\n```\n\n\n時々、Gitはそれらの参照を「パックされた」ファイルフォーマットにパックして、参照をより効率的に検索できるようにします。たとえば、\n\n\n```shell\n\n# Packing references will create \"packed\" references, which are a sorted\nlist of\n\n# references. The loose reference does not exist anymore.\n\n$ git pack-refs --all\n\n$ cat .git/refs/heads/main\n\ncat: .git/refs/heads/main: No such file or directory\n\n$ cat .git/packed-refs\n\n# pack-refs with: peeled fully-peeled sorted\n\nc70f26689975782739ef9666af079535b12b5946 refs/heads/feature\n\nc70f26689975782739ef9666af079535b12b5946 refs/heads/main\n\n```\n\n\nこのフォーマットはかなりシンプルですが、次のような制限があります。\n\n\n-\n多くの参照を持つ大規模な単一のリポジトリでは、スケーラビリティの問題が発生し始めました。参照を削除することは、特に非効率的です。なぜなら、削除済みの参照を削除するには、「packed\n-\nrefs」ファイル全体を書き換える必要があるからです。当社の最大のリポジトリでは、参照を削除するごとに数ギガバイトのデータを書き換える可能性があります。\n\n- すべての参照を把握するには複数のファイルを読み取る必要があるため、同時に書き込みを行うことなく参照をアトミックに読み取ることはできません。\n\n- 複数のファイルを作成または更新する必要があるため、アトミックに書き込みを実行することができず、ワンステップで実行できません。\n\n- 完全な「packed - refs」ファイルを書き換える必要があるため、参照のメンテナンスはスケーリングがうまくいきません。\n\n-\nルース参照はファイルシステムパスをその名前として使用するため、ファイルシステム固有の動作の対象となります。例えば、大文字と小文字を区別しないファイルシステムは、単に大文字と小文字が異なるだけの参照を保存することはできません。\n\n\nこれらの問題に対処するために、Git\nv2.45.0は新しい「reftable」バックエンドを導入しました。これは、新しいバイナリフォーマットを使用して参照を保存します。この新しいバックエンドは非常に長い間開発され続けてきました。最初は2017年7月に[Shawn\nPearce](https://sfconservancy.org/blog/2018/jan/30/shawn-pearce/)によって提案され、[JGit](https://www.eclipse.org/jgit/)に実装されました。これは[Gerrit\nプロジェクト](https://www.gerritcodereview.com/)で広く使用されています。2021年、[Han-Wen\nNienhuys](https://hanwen.home.xs4all.nl/)がライブラリをGitにアップストリームし、[reftableフォーマット](https://git-scm.com/docs/reftable)の読み取りと書き込みを可能にしました。\n\n\nGit v2.45.0\nでアップストリームした新しい「reftable」バックエンドは、ついにreftableライブラリとGitを統合し、新しいフォーマットをGitリポジトリのストレージバックエンドとして使用できるようになりました。\n\n\n少なくともGit v2.45.0を使用していれば、`--ref-format=reftable` スイッチを`git-init(1)` または\n`git-clone(1)` のいずれかに渡すことで、「reftable」フォーマットを使用して新しいリポジトリを作成できます。たとえば、\n\n\n```shell\n\n$ git init --ref-format=reftable .\n\nInitialized empty Git repository in /tmp/repo/.git/\n\n$ git rev-parse --show-ref-format\n\nreftable\n\n$ find -type f .git/reftable/\n\n.git/reftable/0x000000000001-0x000000000001-01b5e47d.ref\n\n.git/reftable/tables.list\n\n\n$ git commit --allow-empty --message \"Initial commit\"\n\n$ find -type f .git/reftable/\n\n.git/reftable/0x000000000001-0x000000000001-01b5e47d.ref\n\n.git/reftable/0x000000000002-0x000000000002-87006b81.ref\n\n.git/reftable/tables.list\n\n```\n\n\nご覧のとおり、参照は `.git/refs` ディレクトリではなく `.git/reftable` に保存されています。参照と参照ログは、`.ref`\nで終わるファイルである「テーブル」に保存されますが、`tables.list`\nファイルには現在アクティブなすべてのテーブルのリストが含まれています。この仕組みの技術的な詳細については、別のブログ記事でご説明します。引き続きブログをご覧いただくようお願いいたします。\n\n\n「reftable」バックエンドは、「files」バックエンドに取って代わるものです。したがって、ユーザーの観点からは、すべてが同じように機能する必要があります。\n\n\nこのプロジェクトは[Patrick Steinhardt](https://gitlab.com/pks-gitlab)が主導しました。また、Shawn\nPearceがフォーマットのオリジナルを発案、Han - Wen Nienhuysがreftableライブラリを作成しています。\n\n\n## 参照用ツールの改善\n\n「reftable」フォーマットは、私たちが抱えている多くの問題を解決してくれる一方で、新しい問題も生み出しています。\n最も重要な問題の1つが、格納されているデータへのアクセシビリティです。\n\n\n「files」バックエンドを使用すると、最悪の場合、通常のUnixツールを使用して参照の状態を調べることになります。「packed」参照と「loose」参照の両方には、人間が簡単に理解できるデータが含まれています。これは、バイナリフォーマットである「reftable」フォーマットとは異なります。したがって、Gitは新しい「reftable」フォーマットからデータを抽出するために必要なすべてのツールを提供する必要があります。\n\n\n### すべての参照の一覧表示\n\n最初の問題は、リポジトリからすべての参照を把握するのは基本的に不可能であるということです。\nGitで参照を作成したり変更できるのに、すべての参照を網羅的にリストできないと聞くと、困惑する方もいるかもしれません。\n\n\n確かに、「files」バックエンドはできません。`refs/`\nプレフィックスで始まるすべての「通常の」参照を簡単にリストすることはできますが、Gitはいわゆる[pseudo\nrefs](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpseudorefapseudoref)（疑似参照）も使用します。これらのファイルはGitディレクトリのルートに直接存在し、たとえば\n`.git/MERGE_HEAD` などのようなファイルです。問題は、これらの疑似参照が、Gitが格納する、たとえば `.git/config`\nのような他のファイルの隣に存在することです。\n\n\n一部の疑似参照はよく知られているため識別しやすく、理論上はGitが書き込むことができる参照に制限はありません。「foobar」という参照を作成するのを妨げるものはありません。\n\n\nたとえば、\n\n\n```shell\n\n$ git update-ref foobar HEAD\n\n$ cat .git/foobar\n\nf32633d4d7da32ccc3827e90ecdc10570927c77d\n\n```\n\n\n「files」バックエンドにある問題は、ディレクトリをスキャンして参照を列挙するしかないということです。したがって `.git/foobar`\nが実際には参照であることを理解するために、Gitはファイルを開き、ファイルが参照のようにフォーマットされているかどうかを確認する必要があります。\n\n\n一方、「reftable」バックエンドは、それに含まれるすべての参照について簡単に認識します。参照はデータ構造にエンコードされているため、それらの参照をデコードして返すだけです。しかし、「files」バックエンドの制限により、存在するすべての参照について学ぶことができるツールは存在しません。\n\n\nこの問題に対処するために、`git-for-each-ref(1)` に `--include-root-refs`\nという新しいフラグを追加しました。これにより、参照名の階層のルートに存在するすべての参照もリストアップされます。\n\nたとえば、\n\n\n```shell\n\n$ git for-each-ref --include-root-refs\n\nf32633d4d7da32ccc3827e90ecdc10570927c77d commit    HEAD\n\nf32633d4d7da32ccc3827e90ecdc10570927c77d commit    MERGE_HEAD\n\nf32633d4d7da32ccc3827e90ecdc10570927c77d commit    refs/heads/main\n\n```\n\n\n「files」バックエンドの場合、この新しいフラグはベストエフォートで処理され、既知の疑似参照名に一致するすべての参照が含まれます。「reftable」バックエンドの場合、それに関連するすべての参照をすべてリストアップすることができます。\n\n\nこのプロジェクトは、[Karthik Nayak](https://gitlab.com/knayakgl)が主導しました。\n\n\n### すべての参照ログの一覧表示\n\n\nブランチを更新するたびに、Gitはデフォルトでそれらのブランチの更新をいわゆる参照ログで追跡します。この参照ログを使用すると、意図しない変更を行った場合に、そのブランチへの変更をロールバックできるため、非常に役立つツールとなります。\n\n\n「files」バックエンドでは、これらのログは `.git/logs` ディレクトリに保存されます。\n\n\n```shell\n\n$ find -type f .git/logs/\n\n.git/logs/HEAD\n\n.git/logs/refs/heads/main\n\n```\n\n\n実際、このディレクトリ内のファイルを一覧表示することが、そもそもどの参照が実際に参照ログを保持しているかを知る唯一の方法です。これは、参照と一緒にそれらのログを保存する「reftable」バックエンドの問題です。そのため、「reftable」フォーマットを使用すると、リポジトリにどの参照ログが存在するかを知る方法はまったくありません。\n\n\nこれは実際には「reftable」フォーマットの欠陥ではありませんが、Gitが提供するツールにおける不備です。この欠落に対処するために、`git-reflog(1)`\nに新しい `list` サブコマンドを導入しました。これにより、すべての既存の参照ログをリストアップできます。\n\n\n```shell\n\n$ git reflog list\n\nHEAD\n\nrefs/heads/main\n\n```\n\n\nこのプロジェクトは、[Patrick Steinhardt](https://gitlab.com/pks-gitlab)が主導しました。\n\n\n### 参照のより効率的なパッキング\n\n\nGitリポジトリを効率的に保つには、定期的なメンテナンスが必要です。 通常、このメンテナンスは `git maintenance run --auto`\nを実行してGitリポジトリにデータを書き込むさまざまなGitコマンドによってトリガーされます。このコマンドは、Gitが計算リソースを無駄にしないように、実際に最適化が必要なデータ構造のみを最適化します。\n\n\nGitのメンテナンスによって最適化されるデータ構造の1つは、`git pack-refs --all`\nを実行することによって行われる参照データベースです。「files」バックエンドの場合、これは、すべての参照が「packed -\nrefs」ファイルに再パックされ、ルース参照が削除されることを意味します。一方、「reftable」バックエンドの場合、すべてのテーブルが単一のテーブルにマージされます。\n\n\n「files」バックエンドについては、合理的に改善することはできません。「packed -\nrefs」ファイル全体を書き直す必要があることを考えると、すべてのルース参照をパックしたいと考えるのは理にかなっています。\n\n\nしかし、「reftable」バックエンドの場合、「reftable」バックエンドが自己最適化されるため、最適ではありません。Gitは、新しいテーブルを「reftable」バックエンドに追加するたびに、必要に応じて自動コンパクションを実行し、テーブルを一緒にマージします。したがって、参照データベースは常に適切に最適化された状態にある必要があり、そのため、すべてのテーブルを一緒にマージすることは無駄な努力となります。\n\n\nそこでGit v2.45.0では、新しい `git pack-refs --auto`\nモードを導入し、参照バックエンドに必要に応じて最適化を行うようにしました。 「files」バックエンドは、`--auto`\nフラグが設定されていても同じように動作し続けますが、「reftable」バックエンドは、自動コンパクションにすでに使用されているのと同じ経験則を使用します。\n実際には、これはほとんどの場合何も操作を行いません。\n\n\nさらに、`git maintenance run --auto` は、デフォルトでこの新しいモードを使用するために、`-tauto` フラグを\n`git-pack-refs(1)` に渡すように調整されています。\n\n\nこのプロジェクトは[Patrick Steinhardt](https://gitlab.com/pks-gitlab)が主導しました。\n\n\n## 補足情報\n\n\nこのブログ記事では、新しい「reftable」バックエンドに重点を置いています。このバックエンドにより、多くの参照を持つ大規模なリポジトリでの拡張性が向上しました。また、このバックエンドをうまく機能させるために関連したツールも導入しました。このGitリリースではさまざまなパフォーマンスの向上、バグ修正、その他の細かい機能がGitコミュニティによって導入されています。Gitプロジェクトの[公式リリース発表](https://lore.kernel.org/git/xmqq8r0ww0sj.fsf@gitster.g/)をご覧いただくと詳細をご確認いただけます。\n\n\n*監修：小松原 つかさ\u003Cbr>\n\n（GitLab合同会社 ソリューションアーキテクト本部 シニアパートナーソリューションアーキテクト）*\n\n\n## 過去のGitリリースへのコントリビューション\n\n* [Git\n2.44.0へのGitLabのコントリビューション](https://about.gitlab.com/blog/gitlabs-contributions-to-git-2-44-0/)\n\n* [Git\n2.43.0へのGitLabのコントリビューション](https://about.gitlab.com/blog/the-contributions-we-made-to-the-git-2-43-release/)\n\n* [Git\n2.42.0へのGitLabのコントリビューション](https://about.gitlab.com/blog/contributions-to-git-2-42-release/)\n\n* [Git\n2.41.0へのGitLabのコントリビューション](https://about.gitlab.com/blog/contributions-to-latest-git-release/)\n","open-source",[23,24],"git","community","2024-05-17",{"slug":27,"featured":6,"template":28},"whats-new-in-git-2-45-0","BlogPost","content:ja-jp:blog:whats-new-in-git-2-45-0.yml","yaml","Whats New In Git 2 45 0","content","ja-jp/blog/whats-new-in-git-2-45-0.yml","ja-jp/blog/whats-new-in-git-2-45-0","yml",{"_path":37,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"data":39,"_id":446,"_type":30,"title":447,"_source":32,"_file":448,"_stem":449,"_extension":35},"/shared/ja-jp/main-navigation","ja-jp",{"logo":40,"freeTrial":45,"sales":50,"login":55,"items":60,"search":390,"minimal":424,"duo":437},{"config":41},{"href":42,"dataGaName":43,"dataGaLocation":44},"/ja-jp/","gitlab logo","header",{"text":46,"config":47},"無料トライアルを開始",{"href":48,"dataGaName":49,"dataGaLocation":44},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":51,"config":52},"お問い合わせ",{"href":53,"dataGaName":54,"dataGaLocation":44},"/ja-jp/sales/","sales",{"text":56,"config":57},"サインイン",{"href":58,"dataGaName":59,"dataGaLocation":44},"https://gitlab.com/users/sign_in/","sign in",[61,105,203,208,312,372],{"text":62,"config":63,"cards":65,"footer":88},"プラットフォーム",{"dataNavLevelOne":64},"platform",[66,72,80],{"title":62,"description":67,"link":68},"最も包括的かつAIで強化されたDevSecOpsプラットフォーム",{"text":69,"config":70},"プラットフォームを詳しく見る",{"href":71,"dataGaName":64,"dataGaLocation":44},"/ja-jp/platform/",{"title":73,"description":74,"link":75},"GitLab Duo（AI）","開発のすべてのステージでAIを活用し、ソフトウェアをより迅速にビルド",{"text":76,"config":77},"GitLab Duoのご紹介",{"href":78,"dataGaName":79,"dataGaLocation":44},"/ja-jp/gitlab-duo/","gitlab duo ai",{"title":81,"description":82,"link":83},"GitLabが選ばれる理由","GitLabが大企業に選ばれる理由10選",{"text":84,"config":85},"詳細はこちら",{"href":86,"dataGaName":87,"dataGaLocation":44},"/ja-jp/why-gitlab/","why gitlab",{"title":89,"items":90},"利用を開始：",[91,96,101],{"text":92,"config":93},"プラットフォームエンジニアリング",{"href":94,"dataGaName":95,"dataGaLocation":44},"/ja-jp/solutions/platform-engineering/","platform engineering",{"text":97,"config":98},"開発者の経験",{"href":99,"dataGaName":100,"dataGaLocation":44},"/ja-jp/developer-experience/","Developer experience",{"text":102,"config":103},"MLOps",{"href":104,"dataGaName":102,"dataGaLocation":44},"/ja-jp/topics/devops/the-role-of-ai-in-devops/",{"text":106,"left":107,"config":108,"link":110,"lists":114,"footer":185},"製品",true,{"dataNavLevelOne":109},"solutions",{"text":111,"config":112},"すべてのソリューションを表示",{"href":113,"dataGaName":109,"dataGaLocation":44},"/ja-jp/solutions/",[115,141,163],{"title":116,"description":117,"link":118,"items":123},"自動化","CI/CDと自動化でデプロイを加速",{"config":119},{"icon":120,"href":121,"dataGaName":122,"dataGaLocation":44},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[124,128,132,137],{"text":125,"config":126},"CI/CD",{"href":127,"dataGaLocation":44,"dataGaName":125},"/ja-jp/solutions/continuous-integration/",{"text":129,"config":130},"AIアシストによる開発",{"href":78,"dataGaLocation":44,"dataGaName":131},"AI assisted development",{"text":133,"config":134},"ソースコード管理",{"href":135,"dataGaLocation":44,"dataGaName":136},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":138,"config":139},"自動化されたソフトウェアデリバリー",{"href":121,"dataGaLocation":44,"dataGaName":140},"Automated software delivery",{"title":142,"description":143,"link":144,"items":149},"セキュリティ","セキュリティを損なうことなくコードをより迅速に完成",{"config":145},{"href":146,"dataGaName":147,"dataGaLocation":44,"icon":148},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[150,154,159],{"text":151,"config":152},"Application Security Testing",{"href":146,"dataGaName":153,"dataGaLocation":44},"Application security testing",{"text":155,"config":156},"ソフトウェアサプライチェーンの安全性",{"href":157,"dataGaLocation":44,"dataGaName":158},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":160,"config":161},"Software Compliance",{"href":162,"dataGaName":160,"dataGaLocation":44},"/ja-jp/solutions/software-compliance/",{"title":164,"link":165,"items":170},"測定",{"config":166},{"icon":167,"href":168,"dataGaName":169,"dataGaLocation":44},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[171,175,180],{"text":172,"config":173},"可視性と測定",{"href":168,"dataGaLocation":44,"dataGaName":174},"Visibility and Measurement",{"text":176,"config":177},"バリューストリーム管理",{"href":178,"dataGaLocation":44,"dataGaName":179},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":181,"config":182},"分析とインサイト",{"href":183,"dataGaLocation":44,"dataGaName":184},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":186,"items":187},"GitLabが活躍する場所",[188,193,198],{"text":189,"config":190},"Enterprise",{"href":191,"dataGaLocation":44,"dataGaName":192},"/ja-jp/enterprise/","enterprise",{"text":194,"config":195},"スモールビジネス",{"href":196,"dataGaLocation":44,"dataGaName":197},"/ja-jp/small-business/","small business",{"text":199,"config":200},"公共機関",{"href":201,"dataGaLocation":44,"dataGaName":202},"/ja-jp/solutions/public-sector/","public sector",{"text":204,"config":205},"価格",{"href":206,"dataGaName":207,"dataGaLocation":44,"dataNavLevelOne":207},"/ja-jp/pricing/","pricing",{"text":209,"config":210,"link":212,"lists":216,"feature":299},"関連リソース",{"dataNavLevelOne":211},"resources",{"text":213,"config":214},"すべてのリソースを表示",{"href":215,"dataGaName":211,"dataGaLocation":44},"/ja-jp/resources/",[217,250,272],{"title":218,"items":219},"はじめに",[220,225,230,235,240,245],{"text":221,"config":222},"インストール",{"href":223,"dataGaName":224,"dataGaLocation":44},"/ja-jp/install/","install",{"text":226,"config":227},"クイックスタートガイド",{"href":228,"dataGaName":229,"dataGaLocation":44},"/ja-jp/get-started/","quick setup checklists",{"text":231,"config":232},"学ぶ",{"href":233,"dataGaLocation":44,"dataGaName":234},"https://university.gitlab.com/","learn",{"text":236,"config":237},"製品ドキュメント",{"href":238,"dataGaName":239,"dataGaLocation":44},"https://docs.gitlab.com/","product documentation",{"text":241,"config":242},"ベストプラクティスビデオ",{"href":243,"dataGaName":244,"dataGaLocation":44},"/ja-jp/getting-started-videos/","best practice videos",{"text":246,"config":247},"インテグレーション",{"href":248,"dataGaName":249,"dataGaLocation":44},"/ja-jp/integrations/","integrations",{"title":251,"items":252},"検索する",[253,258,262,267],{"text":254,"config":255},"お客様成功事例",{"href":256,"dataGaName":257,"dataGaLocation":44},"/ja-jp/customers/","customer success stories",{"text":259,"config":260},"ブログ",{"href":261,"dataGaName":5,"dataGaLocation":44},"/ja-jp/blog/",{"text":263,"config":264},"リモート",{"href":265,"dataGaName":266,"dataGaLocation":44},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":268,"config":269},"TeamOps",{"href":270,"dataGaName":271,"dataGaLocation":44},"/ja-jp/teamops/","teamops",{"title":273,"items":274},"つなげる",[275,280,284,289,294],{"text":276,"config":277},"GitLabサービス",{"href":278,"dataGaName":279,"dataGaLocation":44},"/ja-jp/services/","services",{"text":281,"config":282},"コミュニティ",{"href":283,"dataGaName":24,"dataGaLocation":44},"/community/",{"text":285,"config":286},"フォーラム",{"href":287,"dataGaName":288,"dataGaLocation":44},"https://forum.gitlab.com/","forum",{"text":290,"config":291},"イベント",{"href":292,"dataGaName":293,"dataGaLocation":44},"/events/","events",{"text":295,"config":296},"パートナー",{"href":297,"dataGaName":298,"dataGaLocation":44},"/ja-jp/partners/","partners",{"backgroundColor":300,"textColor":301,"text":302,"image":303,"link":307},"#2f2a6b","#fff","ソフトウェア開発の未来への洞察",{"altText":304,"config":305},"ソースプロモカード",{"src":306},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":308,"config":309},"最新情報を読む",{"href":310,"dataGaName":311,"dataGaLocation":44},"/ja-jp/the-source/","the source",{"text":313,"config":314,"lists":316},"会社情報",{"dataNavLevelOne":315},"company",[317],{"items":318},[319,324,330,332,337,342,347,352,357,362,367],{"text":320,"config":321},"GitLabについて",{"href":322,"dataGaName":323,"dataGaLocation":44},"/ja-jp/company/","about",{"text":325,"config":326,"footerGa":329},"採用情報",{"href":327,"dataGaName":328,"dataGaLocation":44},"/jobs/","jobs",{"dataGaName":328},{"text":290,"config":331},{"href":292,"dataGaName":293,"dataGaLocation":44},{"text":333,"config":334},"経営陣",{"href":335,"dataGaName":336,"dataGaLocation":44},"/company/team/e-group/","leadership",{"text":338,"config":339},"チーム",{"href":340,"dataGaName":341,"dataGaLocation":44},"/company/team/","team",{"text":343,"config":344},"ハンドブック",{"href":345,"dataGaName":346,"dataGaLocation":44},"https://handbook.gitlab.com/","handbook",{"text":348,"config":349},"投資家向け情報",{"href":350,"dataGaName":351,"dataGaLocation":44},"https://ir.gitlab.com/","investor relations",{"text":353,"config":354},"トラストセンター",{"href":355,"dataGaName":356,"dataGaLocation":44},"/ja-jp/security/","trust center",{"text":358,"config":359},"AI Transparency Center",{"href":360,"dataGaName":361,"dataGaLocation":44},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":363,"config":364},"ニュースレター",{"href":365,"dataGaName":366,"dataGaLocation":44},"/company/contact/","newsletter",{"text":368,"config":369},"プレス",{"href":370,"dataGaName":371,"dataGaLocation":44},"/press/","press",{"text":51,"config":373,"lists":374},{"dataNavLevelOne":315},[375],{"items":376},[377,380,385],{"text":51,"config":378},{"href":53,"dataGaName":379,"dataGaLocation":44},"talk to sales",{"text":381,"config":382},"サポートを受ける",{"href":383,"dataGaName":384,"dataGaLocation":44},"/support/","get help",{"text":386,"config":387},"カスタマーポータル",{"href":388,"dataGaName":389,"dataGaLocation":44},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":391,"login":392,"suggestions":399},"閉じる",{"text":393,"link":394},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":395,"config":396},"GitLab.com",{"href":58,"dataGaName":397,"dataGaLocation":398},"search login","search",{"text":400,"default":401},"提案",[402,405,410,412,416,420],{"text":73,"config":403},{"href":78,"dataGaName":404,"dataGaLocation":398},"GitLab Duo (AI)",{"text":406,"config":407},"コード提案（AI）",{"href":408,"dataGaName":409,"dataGaLocation":398},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":125,"config":411},{"href":127,"dataGaName":125,"dataGaLocation":398},{"text":413,"config":414},"GitLab on AWS",{"href":415,"dataGaName":413,"dataGaLocation":398},"/ja-jp/partners/technology-partners/aws/",{"text":417,"config":418},"GitLab on Google Cloud",{"href":419,"dataGaName":417,"dataGaLocation":398},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":421,"config":422},"GitLabを選ぶ理由",{"href":86,"dataGaName":423,"dataGaLocation":398},"Why GitLab?",{"freeTrial":425,"mobileIcon":429,"desktopIcon":434},{"text":46,"config":426},{"href":427,"dataGaName":49,"dataGaLocation":428},"https://gitlab.com/-/trials/new/","nav",{"altText":430,"config":431},"GitLabアイコン",{"src":432,"dataGaName":433,"dataGaLocation":428},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":430,"config":435},{"src":436,"dataGaName":433,"dataGaLocation":428},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":438,"mobileIcon":442,"desktopIcon":444},{"text":439,"config":440},"GitLab Duoの詳細について",{"href":78,"dataGaName":441,"dataGaLocation":428},"gitlab duo",{"altText":430,"config":443},{"src":432,"dataGaName":433,"dataGaLocation":428},{"altText":430,"config":445},{"src":436,"dataGaName":433,"dataGaLocation":428},"content:shared:ja-jp:main-navigation.yml","Main Navigation","shared/ja-jp/main-navigation.yml","shared/ja-jp/main-navigation",{"_path":451,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"title":452,"button":453,"config":458,"_id":460,"_type":30,"_source":32,"_file":461,"_stem":462,"_extension":35},"/shared/ja-jp/banner","GitLab Duo Agent Platformがパブリックベータ版で利用可能になりました！",{"text":454,"config":455},"ベータ版を試す",{"href":456,"dataGaName":457,"dataGaLocation":44},"/ja-jp/gitlab-duo/agent-platform/","duo banner",{"layout":459},"release","content:shared:ja-jp:banner.yml","shared/ja-jp/banner.yml","shared/ja-jp/banner",{"_path":464,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"data":465,"_id":669,"_type":30,"title":670,"_source":32,"_file":671,"_stem":672,"_extension":35},"/shared/ja-jp/main-footer",{"text":466,"source":467,"edit":473,"contribute":478,"config":483,"items":488,"minimal":661},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":468,"config":469},"ページのソースを表示",{"href":470,"dataGaName":471,"dataGaLocation":472},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":474,"config":475},"このページを編集",{"href":476,"dataGaName":477,"dataGaLocation":472},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":479,"config":480},"ご協力をお願いします",{"href":481,"dataGaName":482,"dataGaLocation":472},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":484,"facebook":485,"youtube":486,"linkedin":487},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[489,512,566,598,633],{"title":62,"links":490,"subMenu":495},[491],{"text":492,"config":493},"DevSecOpsプラットフォーム",{"href":71,"dataGaName":494,"dataGaLocation":472},"devsecops platform",[496],{"title":204,"links":497},[498,502,507],{"text":499,"config":500},"プランの表示",{"href":206,"dataGaName":501,"dataGaLocation":472},"view plans",{"text":503,"config":504},"Premiumを選ぶ理由",{"href":505,"dataGaName":506,"dataGaLocation":472},"/ja-jp/pricing/premium/","why premium",{"text":508,"config":509},"Ultimateを選ぶ理由",{"href":510,"dataGaName":511,"dataGaLocation":472},"/ja-jp/pricing/ultimate/","why ultimate",{"title":513,"links":514},"ソリューション",[515,520,523,525,530,535,539,542,545,550,552,554,556,561],{"text":516,"config":517},"デジタルトランスフォーメーション",{"href":518,"dataGaName":519,"dataGaLocation":472},"/ja-jp/topics/digital-transformation/","digital transformation",{"text":521,"config":522},"セキュリティとコンプライアンス",{"href":146,"dataGaName":153,"dataGaLocation":472},{"text":138,"config":524},{"href":121,"dataGaName":122,"dataGaLocation":472},{"text":526,"config":527},"アジャイル開発",{"href":528,"dataGaName":529,"dataGaLocation":472},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":531,"config":532},"クラウドトランスフォーメーション",{"href":533,"dataGaName":534,"dataGaLocation":472},"/ja-jp/topics/cloud-native/","cloud transformation",{"text":536,"config":537},"SCM",{"href":135,"dataGaName":538,"dataGaLocation":472},"source code management",{"text":125,"config":540},{"href":127,"dataGaName":541,"dataGaLocation":472},"continuous integration & delivery",{"text":176,"config":543},{"href":178,"dataGaName":544,"dataGaLocation":472},"value stream management",{"text":546,"config":547},"GitOps",{"href":548,"dataGaName":549,"dataGaLocation":472},"/ja-jp/solutions/gitops/","gitops",{"text":189,"config":551},{"href":191,"dataGaName":192,"dataGaLocation":472},{"text":194,"config":553},{"href":196,"dataGaName":197,"dataGaLocation":472},{"text":199,"config":555},{"href":201,"dataGaName":202,"dataGaLocation":472},{"text":557,"config":558},"教育",{"href":559,"dataGaName":560,"dataGaLocation":472},"/ja-jp/solutions/education/","education",{"text":562,"config":563},"金融サービス",{"href":564,"dataGaName":565,"dataGaLocation":472},"/ja-jp/solutions/finance/","financial services",{"title":209,"links":567},[568,570,572,574,577,579,582,584,586,588,590,592,594,596],{"text":221,"config":569},{"href":223,"dataGaName":224,"dataGaLocation":472},{"text":226,"config":571},{"href":228,"dataGaName":229,"dataGaLocation":472},{"text":231,"config":573},{"href":233,"dataGaName":234,"dataGaLocation":472},{"text":236,"config":575},{"href":238,"dataGaName":576,"dataGaLocation":472},"docs",{"text":259,"config":578},{"href":261,"dataGaName":5},{"text":580,"config":581},"お客様の成功事例",{"href":256,"dataGaLocation":472},{"text":254,"config":583},{"href":256,"dataGaName":257,"dataGaLocation":472},{"text":263,"config":585},{"href":265,"dataGaName":266,"dataGaLocation":472},{"text":276,"config":587},{"href":278,"dataGaName":279,"dataGaLocation":472},{"text":268,"config":589},{"href":270,"dataGaName":271,"dataGaLocation":472},{"text":281,"config":591},{"href":283,"dataGaName":24,"dataGaLocation":472},{"text":285,"config":593},{"href":287,"dataGaName":288,"dataGaLocation":472},{"text":290,"config":595},{"href":292,"dataGaName":293,"dataGaLocation":472},{"text":295,"config":597},{"href":297,"dataGaName":298,"dataGaLocation":472},{"title":599,"links":600},"Company",[601,603,605,607,609,611,613,617,622,624,626,628],{"text":320,"config":602},{"href":322,"dataGaName":315,"dataGaLocation":472},{"text":325,"config":604},{"href":327,"dataGaName":328,"dataGaLocation":472},{"text":333,"config":606},{"href":335,"dataGaName":336,"dataGaLocation":472},{"text":338,"config":608},{"href":340,"dataGaName":341,"dataGaLocation":472},{"text":343,"config":610},{"href":345,"dataGaName":346,"dataGaLocation":472},{"text":348,"config":612},{"href":350,"dataGaName":351,"dataGaLocation":472},{"text":614,"config":615},"Sustainability",{"href":616,"dataGaName":614,"dataGaLocation":472},"/sustainability/",{"text":618,"config":619},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":620,"dataGaName":621,"dataGaLocation":472},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":353,"config":623},{"href":355,"dataGaName":356,"dataGaLocation":472},{"text":363,"config":625},{"href":365,"dataGaName":366,"dataGaLocation":472},{"text":368,"config":627},{"href":370,"dataGaName":371,"dataGaLocation":472},{"text":629,"config":630},"現代奴隷制の透明性に関する声明",{"href":631,"dataGaName":632,"dataGaLocation":472},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":51,"links":634},[635,637,639,641,646,651,656],{"text":51,"config":636},{"href":53,"dataGaName":54,"dataGaLocation":472},{"text":381,"config":638},{"href":383,"dataGaName":384,"dataGaLocation":472},{"text":386,"config":640},{"href":388,"dataGaName":389,"dataGaLocation":472},{"text":642,"config":643},"ステータス",{"href":644,"dataGaName":645,"dataGaLocation":472},"https://status.gitlab.com/","status",{"text":647,"config":648},"利用規約",{"href":649,"dataGaName":650,"dataGaLocation":472},"/terms/","terms of use",{"text":652,"config":653},"プライバシーに関する声明",{"href":654,"dataGaName":655,"dataGaLocation":472},"/ja-jp/privacy/","privacy statement",{"text":657,"config":658},"Cookieの設定",{"dataGaName":659,"dataGaLocation":472,"id":660,"isOneTrustButton":107},"cookie preferences","ot-sdk-btn",{"items":662},[663,665,667],{"text":647,"config":664},{"href":649,"dataGaName":650,"dataGaLocation":472},{"text":652,"config":666},{"href":654,"dataGaName":655,"dataGaLocation":472},{"text":657,"config":668},{"dataGaName":659,"dataGaLocation":472,"id":660,"isOneTrustButton":107},"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,"seo":674,"content":675,"config":678,"_id":29,"_type":30,"title":31,"_source":32,"_file":33,"_stem":34,"_extension":35},{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},{"title":9,"description":10,"authors":676,"heroImage":11,"date":19,"body":20,"category":21,"tags":677,"updatedDate":25},[18],[23,24],{"slug":27,"featured":6,"template":28},[680],{"_path":681,"_dir":682,"_draft":6,"_partial":6,"_locale":7,"content":683,"config":687,"_id":689,"_type":30,"title":18,"_source":32,"_file":690,"_stem":691,"_extension":35},"/en-us/blog/authors/patrick-steinhardt","authors",{"name":18,"config":684},{"headshot":685,"ctfId":686},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661952/Blog/Author%20Headshots/pks-gitlab-headshot.png","pksgitlab",{"template":688},"BlogAuthor","content:en-us:blog:authors:patrick-steinhardt.yml","en-us/blog/authors/patrick-steinhardt.yml","en-us/blog/authors/patrick-steinhardt",{"_path":693,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"header":694,"eyebrow":695,"blurb":696,"button":697,"secondaryButton":701,"_id":703,"_type":30,"title":704,"_source":32,"_file":705,"_stem":706,"_extension":35},"/shared/ja-jp/next-steps","より優れたソフトウェアをより速く提供","フォーチュン100企業の50%以上がGitLabを信頼","インテリジェントなDevSecOpsプラットフォームで\n\n\nチームの可能性を広げましょう。\n",{"text":46,"config":698},{"href":699,"dataGaName":49,"dataGaLocation":700},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":51,"config":702},{"href":53,"dataGaName":54,"dataGaLocation":700},"content:shared:ja-jp:next-steps.yml","Next Steps","shared/ja-jp/next-steps.yml","shared/ja-jp/next-steps",1761814461561]