[{"data":1,"prerenderedAt":702},["ShallowReactive",2],{"/ja-jp/blog/whats-new-in-git-2-47-0/":3,"navigation-ja-jp":37,"banner-ja-jp":451,"footer-ja-jp":464,"Justin Tobler":674,"next-steps-ja-jp":687},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":26,"_id":30,"_type":31,"title":32,"_source":33,"_file":34,"_stem":35,"_extension":36},"/ja-jp/blog/whats-new-in-git-2-47-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.47.0の新機能","Gitの最新バージョンについてご紹介します。新たに追加されたグローバル変数を使用すれば、参照やオブジェクトのハッシュの形式を設定できます。GitLabのGitチームと、より広範なGitコミュニティによるコントリビュートをご確認ください。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663691/Blog/Hero%20Images/AdobeStock_752438815.jpg","https://about.gitlab.com/blog/whats-new-in-git-2-47-0","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Git 2.47.0の新機能\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Justin Tobler\"}],\n        \"datePublished\": \"2024-10-07\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":19,"body":20,"category":21,"tags":22},[18],"Justin Tobler","2024-10-07","Gitプロジェクトは、最近[Gitバージョン2.47.0](https://lore.kernel.org/git/xmqqa5fg9bsz.fsf@gitster.g/)をリリースしました。\nGitLabのGitチームやより広範なGitコミュニティからのコントリビュートを含む、本リリースの主なハイライトをご覧ください。\n\n## 新しいグローバル構成オプション\n\nGitの最新リリースをチェックしている方であれば、[Gitバージョン2.45](https://about.gitlab.com/blog/whats-new-in-git-2-45-0/)より新たに提供開始された「reftable」参照バックエンドについてご存知かもしれません。詳しくは、『[Git reftableフォーマットの入門ガイド](https://about.gitlab.com/blog/a-beginners-guide-to-the-git-reftable-format/)』をご確認ください。これまでは、「reftable」フォーマットを使用してリポジトリを初期化するには、次のようにgit-init(1)コマンドに`--ref-format`オプションを付けて実行する必要がありました。\n\n```sh\n$ git init --ref-format reftable\n```\n\nGit 2.47のリリースでは、`init.defaultRefFormat`という設定オプションが追加され、リポジトリを初期化する際にどの参照バックエンドを使用するかをGitに指示できるようになりました。このオプションを使用することで、デフォルトの「files」バックエンドを上書きし、「reftable」バックエンドを利用できるようになります。設定するには、以下のコマンドを実行します\n\n```sh\n$ git config set --global init.defaultRefFormat reftable\n```\n\n一部の方はご存知かもしれませんが、Gitリポジトリで使用されるオブジェクトのハッシュ形式も設定可能です。デフォルトでは、リポジトリはSHA-1オブジェクト形式を使用するように初期化されますが、SHA-256形式というより安全で将来性のある代替案もあります。詳しくは、[GitalyにおけるSHA-256のサポートに関する過去のブログ記事](https://about.gitlab.com/blog/sha256-support-in-gitaly/#what-is-sha-256%3F)でご確認いただけます。SHA-256リポジトリは、git-init(1)に`--object-format`オプションを指定することで作成できます。\n\n```sh\n$ git init --object-format sha256\n```\n\nこのGitのリリースでは、別の設定オプションとして、`init.defaultObjectFormat`が追加されました。このオプションは、リポジトリを初期化する際に、どのオブジェクト形式をデフォルトで使用するかをGitに指示するものです。以下のコマンドで設定できます。\n\n```sh\n$ git config set --global init.defaultObjectFormat sha256\n```\n\n注意点として、SHA-256リポジトリはSHA-1リポジトリと互換性がなく、すべてのフォージがSHA-256リポジトリのホスティングをサポートしているわけではありません。先日GitLabが発表した[SHA-256リポジトリの実験的サポート](https://about.gitlab.com/blog/gitlab-now-supports-sha256-repositories/)をお試しになれます。\n\nこれらのオプションを使うことで、すぐにこれらのリポジトリ機能を使用できるようになり、新しいリポジトリを初期化するたびに形式について検討せずに済みます。\n\nこのプロジェクトは[Patrick Steinhardt](https://gitlab.com/pks-gitlab)が主導しました。\n\n## git-refs(1)のサブコマンド\n\n前回のGitリリースでは、リポジトリ内の参照への低レベルアクセスを可能にするコマンド「[git-refs(1)](https://git-scm.com/docs/git-refs)」が導入されました。このコマンドには、参照バックエンド間での変換を行う「migrate」サブコマンドが含まれていました。今回のリリースでは、新たに「verify」サブコマンドが追加され、参照データベースの整合性を確認できるようになりました。リポジトリの整合性を確認する際には、「[git-fsck(1)](https://git-scm.com/docs/git-fsck)」を実行するケースが多々あります。\n\nしかし、このコマンドはリポジトリの参照データベースを明示的に検証するわけではありません。特に「reftable」というバイナリ形式の参照形式が導入されたことで、手動での検証が難しくなり、このギャップを埋めるツールの必要性が増しています。例として、無効な参照を設定したリポジトリを作成して検証してみましょう。\n\n```sh\n# The \"files\" backend is used so we can easily create an invalid reference.\n$ git init --ref-format files\n$ git commit --allow-empty -m \"init\"\n# A lone '@' is not a valid reference name.\n$ cp .git/refs/heads/main .git/refs/heads/@\n$ git refs verify\nerror: refs/heads/@: badRefName: invalid refname format\n```\n\nこの例では、無効な参照が検出され、エラーメッセージが表示されていることが確認できます。このツールはエンドユーザーが頻繁に使用するものではありませんが、サーバー側でリポジトリの整合性を保つために特に有用です。最終的には、このコマンドを「git-fsck(1)」に統合し、一貫したリポジトリ整合性チェックを行えるようにすることが目標です。\n\nこのプロジェクトは、Google Summer of Code（GSoC）の一環としてJialuo Sheによって主導されました。詳しくは、Jialuoの『[GsoCレポート](https://luolibrary.com/2024/08/25/GSoC-Final-Report/)』をご参照ください。\n\n## reftableに関連した進行中の作業\n\n今回のリリースでは、「reftable」バックエンドに関するいくつかのバグ修正も含まれています。その中でも特に興味深いのは、テーブルの圧縮プロセスに関するバグです。\n\nご存知でない方のために説明すると、reftableバックエンドはリポジトリ内のすべての参照の状態を保持する一連のテーブルで構成されています。各参照のアトミックな変更が行われるたびに、新しいテーブルが作成され、「tables.list」ファイルに記録されます。テーブルの数を減らすために、参照の更新後には、テーブルがファイルサイズに基づいた幾何数列に従って圧縮されます。テーブルが圧縮されると、「tables.list」ファイルも更新され、ディスク上のreftableの最新の状態が反映されます。\n\n設計上、テーブルの書き込みと圧縮を同時に実行可能です。特定のタイミングでの同期は、ロックファイルを使用して制御されています。たとえば、圧縮が始まる際には、最初に「tables.list」ファイルが、安定した読み込みのためにロックされます。また、圧縮が必要なテーブルもロックされる場合があります。実際のテーブルの圧縮には時間がかかるため、ロックは途中で解除され、同時書き込みが実行されます。同時書き込みは、ロックされている圧縮対象のテーブルを変更してはいけないことを理解した上で行われるため、この処理は安全です。圧縮された新しいテーブルの書き込みが完了すると、再び「tables.list」ファイルがロックされ、今度は新しいテーブルの状態が反映されるように更新されます。\n\nしかし、次のような問題があります。もし、テーブルの圧縮中に最初のロックが解除された後、リストファイルが更新される前に、参照の同時更新によって新しいテーブルが「tables.list」に書き込まれたらどうなるでしょうか？このような競合が起こると、圧縮プロセスでは新しいテーブルの存在が認識されず、新しいテーブルを反映しないまま「tables.list」ファイルを書き直してしまいます。これにより、同時に行われた更新が失われ、参照が想定どおりに追加、更新、削除されない結果になる可能性があります。\n\n幸い、この問題は比較的簡単な手順で解決できます。圧縮プロセスで「tables.list」ファイルへの書き込みのためにロックが取得される際は、ファイルに更新があったかどうかを最初に確認してから、ファイルを再読み込みする必要があります。これにより、同時に行われたテーブルの更新も正しく反映されるようになります。こちらの修正について詳しくは、該当する[メーリングリストのスレッド](https://lore.kernel.org/git/cover.1722435214.git.ps@pks.im/)をご参照ください。\n\nこのプロジェクトは[Patrick Steinhardt](https://gitlab.com/pks-gitlab)が主導しました。\n\n## git-maintenance(1)の修正\n\nリポジトリが大きくなるにつれて、適切なメンテナンスが重要になります。デフォルトでは、Gitは特定のオペレーション後に[git-maintenance(1)](https://git-scm.com/docs/git-maintenance)を実行することで、リポジトリの健全性を保ちます。その際、不要なメンテナンスが行われないようにするために、`--auto`オプションが指定されています。このオプションでは、定義されたヒューリスティック（経験則）を使用してメンテナンスタスクを実行するかどうかを決定します。このコマンドは、さまざまなメンテナンスタスクを実行するように設定できますが、デフォルトでは、ユーザーが通常の作業を続けられるように、[git-gc(1)](https://git-scm.com/docs/git-gc)のみがバックグラウンドで実行されるようになっています。\n\nこの動作は通常、期待どおりに機能しますが、デフォルト以外のメンテナンスタスクを実行するように設定されている場合、設定されたメンテナンスタスクはフォアグラウンドで実行され、最初のメンテナンスプロセスはすべてのタスクが完了するまで終了しません。唯一「gc」タスクだけが期待どおりにバックグラウンドで実行されます。この原因は、git-gc(1)が`--auto`オプションで実行された際に、誤ってプロセスをデタッチしていたこと、また、ほかのメンテナンスタスクがそのような機能を持っていなかったことであると判明しました。この問題により、一部のGitコマンドが自動メンテナンスの完了を待機する必要があり、コマンドの実行速度が低下する可能性がありました。\n\n今回のリリースでは、git-maintenance(1)に`--detach`オプションが追加され、個々のタスクではなくgit-maintenance(1)全体のプロセスをバックグラウンドで実行できるようになったことで、この問題が解消されました。また、Gitが実行する自動メンテナンスもこの新しいオプションを使うように更新されています。こちらの修正について詳しくは、[メーリングリストのスレッド](https://lore.kernel.org/git/cover.1723533091.git.ps@pks.im/)をご参照ください。\n\n前述したように、自動メンテナンスでは、特定のメンテナンス操作を実行すべきかどうかを判断するために一連のヒューリスティックが使用されます。しかし残念なことに、「files」参照バックエンドでは、[git-pack-refs(1)](https://git-scm.com/docs/git-pack-refs)が`--auto`オプションで実行された場合、このようなヒューリスティックが存在せず、疎な参照が必ず「packed-refs」ファイルにパック化されてしまいます。多くの参照を持つリポジトリでは、「packed-refs」ファイルの書き換えに時間がかかることがあります。\n\n今回のリリースでは、「files」バックエンドで疎な参照をパック化するかどうかを決定するヒューリスティックも導入されました。このヒューリスティックは、既存の「packed-refs」ファイルのサイズとリポジトリ内の疎な参照の数を考慮します。「packed-refs」ファイルが大きくなるほど、参照のパック化が実行される前に許容される疎な参照の数のしきい値も上がります。これにより、「files」バックエンドでの参照のパック化をやや抑制しつつ、適切にリポジトリがメンテナンスされた状態を保てます。詳しくは、[メーリングリストのスレッド](https://lore.kernel.org/git/cover.1725280479.git.ps@pks.im/)をご参照ください。\n\nこのプロジェクトは[Patrick Steinhardt](https://gitlab.com/pks-gitlab)が主導しました。\n\n## コードリファクタリングと保守性の向上\n\n機能の変更に加えて、コードリファクタリングやクリーンアップも進められています。これらの改善は、プロジェクトの内部コンポーネントをライブラリ化するという長期的な目標にも寄与するという点でも重要です。ライブラリ化に関する最新のアップデートについては、[こちらのスレッド](https://lore.kernel.org/git/eoy2sjhnul57g6crprxi3etgeuacjmgxpl4yllstih7woyuebm@bd62ib3fi2ju/)をご参照ください。\n\nメモリリークを解決することも、求められていた改善事項でした。Gitプロジェクトには多くのメモリリークが存在しますが、通常Gitプロセスは短時間しか動作せず、システムによるクリーンアップが後から行われるため、大きな問題が生じることはあまりありません。しかし、ライブラリ化を進める上では、この問題に対処する必要があります。リークサニタイザを使ってプロジェクト内のテストをコンパイルし、リークを検出することはできますが、既存のリークが存在しているために、新しい変更が新たなリークを引き起こしていないかを検証し、それを阻止するのは難しい状況でした。現在、プロジェクト内の既存のテストで検出されたすべてのメモリリークを修正する取り組みが進められています。リークのないテストは`TEST_PASSES_SANITIZE_LEAK=true`とマークされ、今後もリークが発生しないことが想定されます。今回のリリース以前は、プロジェクトにメモリリークを含むテストファイルが223件ありましたが、今回のリリースでは60件にまで減少しました。\n\nもう1つの取り組みとして、プロジェクト全体でグローバル変数の使用を減らす作業が進められています。その中でも特に問題視されているのが`the_repository`というグローバル変数で、これはオペレーション中のリポジトリの状態を保持し、プロジェクト内のさまざまな箇所で参照されています。今回のリリースでは、この`the_repository`の使用を減らし、必要な場所に直接値を渡すようにするための複数のパッチが導入されました。まだ`the_repository`に依存しているGitプロジェクトのサブシステムでは、このグローバル変数を使用できるようにするために`USE_THE_REPOSITORY_VARIABLE`が定義されています。現在ではrefs、config、pathのサブシステムはこの変数に依存しなくなりました。\n\nこのプロジェクトは、[John Cai](https://gitlab.com/jcaigitlab)と[Jeff King氏](https://github.com/peff)の協力のもと、[Patrick Steinhardt](https://gitlab.com/pks-gitlab)が主導しました。\n\n## 補足情報\n\nこのブログ記事では、GitLabや広範なGitコミュニティによる最新リリースへのコントリビュートの一部をご紹介しました。Gitプロジェクトの[公式リリースのお知らせ](https://lore.kernel.org/git/xmqqa5fg9bsz.fsf@gitster.g/)では、さらに詳しい情報をご覧になれます。また、[過去のGitリリースに関するブログ記事](https://about.gitlab.com/blog/tags/git/)では、GitLabチームメンバーによるこれまでの主要なコントリビュートをご紹介しています。\n\n- [Git 2.46.0の新機能](https://about.gitlab.com/blog/whats-new-in-git-2-46-0/)\n- [Git 2.45.0の新機能](https://about.gitlab.com/blog/whats-new-in-git-2-45-0/)\n- [Git reftableフォーマットの入門ガイド](https://about.gitlab.com/blog/a-beginners-guide-to-the-git-reftable-format/)\n- [git fetchとgit pullコマンドの違いとは？](https://about.gitlab.com/blog/git-pull-vs-git-fetch-whats-the-difference/)","open-source",[23,24,25],"git","open source","community",{"slug":27,"featured":28,"template":29},"whats-new-in-git-2-47-0",true,"BlogPost","content:ja-jp:blog:whats-new-in-git-2-47-0.yml","yaml","Whats New In Git 2 47 0","content","ja-jp/blog/whats-new-in-git-2-47-0.yml","ja-jp/blog/whats-new-in-git-2-47-0","yml",{"_path":38,"_dir":39,"_draft":6,"_partial":6,"_locale":7,"data":40,"_id":447,"_type":31,"title":448,"_source":33,"_file":449,"_stem":450,"_extension":36},"/shared/ja-jp/main-navigation","ja-jp",{"logo":41,"freeTrial":46,"sales":51,"login":56,"items":61,"search":391,"minimal":425,"duo":438},{"config":42},{"href":43,"dataGaName":44,"dataGaLocation":45},"/ja-jp/","gitlab logo","header",{"text":47,"config":48},"無料トライアルを開始",{"href":49,"dataGaName":50,"dataGaLocation":45},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":52,"config":53},"お問い合わせ",{"href":54,"dataGaName":55,"dataGaLocation":45},"/ja-jp/sales/","sales",{"text":57,"config":58},"サインイン",{"href":59,"dataGaName":60,"dataGaLocation":45},"https://gitlab.com/users/sign_in/","sign in",[62,106,204,209,313,373],{"text":63,"config":64,"cards":66,"footer":89},"プラットフォーム",{"dataNavLevelOne":65},"platform",[67,73,81],{"title":63,"description":68,"link":69},"最も包括的かつAIで強化されたDevSecOpsプラットフォーム",{"text":70,"config":71},"プラットフォームを詳しく見る",{"href":72,"dataGaName":65,"dataGaLocation":45},"/ja-jp/platform/",{"title":74,"description":75,"link":76},"GitLab Duo（AI）","開発のすべてのステージでAIを活用し、ソフトウェアをより迅速にビルド",{"text":77,"config":78},"GitLab Duoのご紹介",{"href":79,"dataGaName":80,"dataGaLocation":45},"/ja-jp/gitlab-duo/","gitlab duo ai",{"title":82,"description":83,"link":84},"GitLabが選ばれる理由","GitLabが大企業に選ばれる理由10選",{"text":85,"config":86},"詳細はこちら",{"href":87,"dataGaName":88,"dataGaLocation":45},"/ja-jp/why-gitlab/","why gitlab",{"title":90,"items":91},"利用を開始：",[92,97,102],{"text":93,"config":94},"プラットフォームエンジニアリング",{"href":95,"dataGaName":96,"dataGaLocation":45},"/ja-jp/solutions/platform-engineering/","platform engineering",{"text":98,"config":99},"開発者の経験",{"href":100,"dataGaName":101,"dataGaLocation":45},"/ja-jp/developer-experience/","Developer experience",{"text":103,"config":104},"MLOps",{"href":105,"dataGaName":103,"dataGaLocation":45},"/ja-jp/topics/devops/the-role-of-ai-in-devops/",{"text":107,"left":28,"config":108,"link":110,"lists":114,"footer":186},"製品",{"dataNavLevelOne":109},"solutions",{"text":111,"config":112},"すべてのソリューションを表示",{"href":113,"dataGaName":109,"dataGaLocation":45},"/ja-jp/solutions/",[115,141,164],{"title":116,"description":117,"link":118,"items":123},"自動化","CI/CDと自動化でデプロイを加速",{"config":119},{"icon":120,"href":121,"dataGaName":122,"dataGaLocation":45},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[124,128,132,137],{"text":125,"config":126},"CI/CD",{"href":127,"dataGaLocation":45,"dataGaName":125},"/ja-jp/solutions/continuous-integration/",{"text":129,"config":130},"AIアシストによる開発",{"href":79,"dataGaLocation":45,"dataGaName":131},"AI assisted development",{"text":133,"config":134},"ソースコード管理",{"href":135,"dataGaLocation":45,"dataGaName":136},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":138,"config":139},"自動化されたソフトウェアデリバリー",{"href":121,"dataGaLocation":45,"dataGaName":140},"Automated software delivery",{"title":142,"description":143,"link":144,"items":149},"セキュリティ","セキュリティを損なうことなくコードをより迅速に完成",{"config":145},{"href":146,"dataGaName":147,"dataGaLocation":45,"icon":148},"/ja-jp/solutions/security-compliance/","security and compliance","ShieldCheckLight",[150,154,159],{"text":151,"config":152},"セキュリティとコンプライアンス",{"href":146,"dataGaLocation":45,"dataGaName":153},"Security & Compliance",{"text":155,"config":156},"ソフトウェアサプライチェーンの安全性",{"href":157,"dataGaLocation":45,"dataGaName":158},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":160,"config":161},"コンプライアンスとガバナンス",{"href":162,"dataGaLocation":45,"dataGaName":163},"/ja-jp/solutions/continuous-software-compliance/","Compliance and governance",{"title":165,"link":166,"items":171},"測定",{"config":167},{"icon":168,"href":169,"dataGaName":170,"dataGaLocation":45},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[172,176,181],{"text":173,"config":174},"可視性と測定",{"href":169,"dataGaLocation":45,"dataGaName":175},"Visibility and Measurement",{"text":177,"config":178},"バリューストリーム管理",{"href":179,"dataGaLocation":45,"dataGaName":180},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":182,"config":183},"分析とインサイト",{"href":184,"dataGaLocation":45,"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":45,"dataGaName":193},"/ja-jp/enterprise/","enterprise",{"text":195,"config":196},"スモールビジネス",{"href":197,"dataGaLocation":45,"dataGaName":198},"/ja-jp/small-business/","small business",{"text":200,"config":201},"公共機関",{"href":202,"dataGaLocation":45,"dataGaName":203},"/ja-jp/solutions/public-sector/","public sector",{"text":205,"config":206},"価格",{"href":207,"dataGaName":208,"dataGaLocation":45,"dataNavLevelOne":208},"/ja-jp/pricing/","pricing",{"text":210,"config":211,"link":213,"lists":217,"feature":300},"関連リソース",{"dataNavLevelOne":212},"resources",{"text":214,"config":215},"すべてのリソースを表示",{"href":216,"dataGaName":212,"dataGaLocation":45},"/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":45},"/ja-jp/install/","install",{"text":227,"config":228},"クイックスタートガイド",{"href":229,"dataGaName":230,"dataGaLocation":45},"/ja-jp/get-started/","quick setup checklists",{"text":232,"config":233},"学ぶ",{"href":234,"dataGaLocation":45,"dataGaName":235},"https://university.gitlab.com/","learn",{"text":237,"config":238},"製品ドキュメント",{"href":239,"dataGaName":240,"dataGaLocation":45},"https://docs.gitlab.com/","product documentation",{"text":242,"config":243},"ベストプラクティスビデオ",{"href":244,"dataGaName":245,"dataGaLocation":45},"/ja-jp/getting-started-videos/","best practice videos",{"text":247,"config":248},"インテグレーション",{"href":249,"dataGaName":250,"dataGaLocation":45},"/ja-jp/integrations/","integrations",{"title":252,"items":253},"検索する",[254,259,263,268],{"text":255,"config":256},"お客様成功事例",{"href":257,"dataGaName":258,"dataGaLocation":45},"/ja-jp/customers/","customer success stories",{"text":260,"config":261},"ブログ",{"href":262,"dataGaName":5,"dataGaLocation":45},"/ja-jp/blog/",{"text":264,"config":265},"リモート",{"href":266,"dataGaName":267,"dataGaLocation":45},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":269,"config":270},"TeamOps",{"href":271,"dataGaName":272,"dataGaLocation":45},"/ja-jp/teamops/","teamops",{"title":274,"items":275},"つなげる",[276,281,285,290,295],{"text":277,"config":278},"GitLabサービス",{"href":279,"dataGaName":280,"dataGaLocation":45},"/ja-jp/services/","services",{"text":282,"config":283},"コミュニティ",{"href":284,"dataGaName":25,"dataGaLocation":45},"/community/",{"text":286,"config":287},"フォーラム",{"href":288,"dataGaName":289,"dataGaLocation":45},"https://forum.gitlab.com/","forum",{"text":291,"config":292},"イベント",{"href":293,"dataGaName":294,"dataGaLocation":45},"/events/","events",{"text":296,"config":297},"パートナー",{"href":298,"dataGaName":299,"dataGaLocation":45},"/ja-jp/partners/","partners",{"backgroundColor":301,"textColor":302,"text":303,"image":304,"link":308},"#2f2a6b","#fff","ソフトウェア開発の未来への洞察",{"altText":305,"config":306},"ソースプロモカード",{"src":307},"/images/navigation/the-source-promo-card.svg",{"text":309,"config":310},"最新情報を読む",{"href":311,"dataGaName":312,"dataGaLocation":45},"/ja-jp/the-source/","the source",{"text":314,"config":315,"lists":317},"Company",{"dataNavLevelOne":316},"company",[318],{"items":319},[320,325,331,333,338,343,348,353,358,363,368],{"text":321,"config":322},"GitLabについて",{"href":323,"dataGaName":324,"dataGaLocation":45},"/ja-jp/company/","about",{"text":326,"config":327,"footerGa":330},"採用情報",{"href":328,"dataGaName":329,"dataGaLocation":45},"/jobs/","jobs",{"dataGaName":329},{"text":291,"config":332},{"href":293,"dataGaName":294,"dataGaLocation":45},{"text":334,"config":335},"経営陣",{"href":336,"dataGaName":337,"dataGaLocation":45},"/company/team/e-group/","leadership",{"text":339,"config":340},"チーム",{"href":341,"dataGaName":342,"dataGaLocation":45},"/company/team/","team",{"text":344,"config":345},"ハンドブック",{"href":346,"dataGaName":347,"dataGaLocation":45},"https://handbook.gitlab.com/","handbook",{"text":349,"config":350},"投資家向け情報",{"href":351,"dataGaName":352,"dataGaLocation":45},"https://ir.gitlab.com/","investor relations",{"text":354,"config":355},"トラストセンター",{"href":356,"dataGaName":357,"dataGaLocation":45},"/ja-jp/security/","trust center",{"text":359,"config":360},"AI Transparency Center",{"href":361,"dataGaName":362,"dataGaLocation":45},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":364,"config":365},"ニュースレター",{"href":366,"dataGaName":367,"dataGaLocation":45},"/company/contact/","newsletter",{"text":369,"config":370},"プレス",{"href":371,"dataGaName":372,"dataGaLocation":45},"/press/","press",{"text":52,"config":374,"lists":375},{"dataNavLevelOne":316},[376],{"items":377},[378,381,386],{"text":52,"config":379},{"href":54,"dataGaName":380,"dataGaLocation":45},"talk to sales",{"text":382,"config":383},"サポートを受ける",{"href":384,"dataGaName":385,"dataGaLocation":45},"/support/","get help",{"text":387,"config":388},"カスタマーポータル",{"href":389,"dataGaName":390,"dataGaLocation":45},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":392,"login":393,"suggestions":400},"閉じる",{"text":394,"link":395},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":396,"config":397},"GitLab.com",{"href":59,"dataGaName":398,"dataGaLocation":399},"search login","search",{"text":401,"default":402},"提案",[403,406,411,413,417,421],{"text":74,"config":404},{"href":79,"dataGaName":405,"dataGaLocation":399},"GitLab Duo (AI)",{"text":407,"config":408},"コード提案（AI）",{"href":409,"dataGaName":410,"dataGaLocation":399},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":125,"config":412},{"href":127,"dataGaName":125,"dataGaLocation":399},{"text":414,"config":415},"GitLab on AWS",{"href":416,"dataGaName":414,"dataGaLocation":399},"/ja-jp/partners/technology-partners/aws/",{"text":418,"config":419},"GitLab on Google Cloud",{"href":420,"dataGaName":418,"dataGaLocation":399},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":422,"config":423},"GitLabを選ぶ理由",{"href":87,"dataGaName":424,"dataGaLocation":399},"Why GitLab?",{"freeTrial":426,"mobileIcon":430,"desktopIcon":435},{"text":47,"config":427},{"href":428,"dataGaName":50,"dataGaLocation":429},"https://gitlab.com/-/trials/new/","nav",{"altText":431,"config":432},"GitLabアイコン",{"src":433,"dataGaName":434,"dataGaLocation":429},"/images/brand/gitlab-logo-tanuki.svg","gitlab icon",{"altText":431,"config":436},{"src":437,"dataGaName":434,"dataGaLocation":429},"/images/brand/gitlab-logo-type.svg",{"freeTrial":439,"mobileIcon":443,"desktopIcon":445},{"text":440,"config":441},"GitLab Duoの詳細について",{"href":79,"dataGaName":442,"dataGaLocation":429},"gitlab duo",{"altText":431,"config":444},{"src":433,"dataGaName":434,"dataGaLocation":429},{"altText":431,"config":446},{"src":437,"dataGaName":434,"dataGaLocation":429},"content:shared:ja-jp:main-navigation.yml","Main Navigation","shared/ja-jp/main-navigation.yml","shared/ja-jp/main-navigation",{"_path":452,"_dir":39,"_draft":6,"_partial":6,"_locale":7,"title":453,"button":454,"config":459,"_id":461,"_type":31,"_source":33,"_file":462,"_stem":463,"_extension":36},"/shared/ja-jp/banner","GitLab Duo Agent Platformがパブリックベータ版で利用可能に！",{"text":455,"config":456},"詳しく見る",{"href":457,"dataGaName":458,"dataGaLocation":45},"/gitlab-duo/agent-platform/","duo banner",{"layout":460},"release","content:shared:ja-jp:banner.yml","shared/ja-jp/banner.yml","shared/ja-jp/banner",{"_path":465,"_dir":39,"_draft":6,"_partial":6,"_locale":7,"data":466,"_id":670,"_type":31,"title":671,"_source":33,"_file":672,"_stem":673,"_extension":36},"/shared/ja-jp/main-footer",{"text":467,"source":468,"edit":474,"contribute":479,"config":484,"items":489,"minimal":662},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":469,"config":470},"ページのソースを表示",{"href":471,"dataGaName":472,"dataGaLocation":473},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":475,"config":476},"このページを編集",{"href":477,"dataGaName":478,"dataGaLocation":473},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":480,"config":481},"ご協力をお願いします",{"href":482,"dataGaName":483,"dataGaLocation":473},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":485,"facebook":486,"youtube":487,"linkedin":488},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[490,513,567,600,634],{"title":63,"links":491,"subMenu":496},[492],{"text":493,"config":494},"DevSecOpsプラットフォーム",{"href":72,"dataGaName":495,"dataGaLocation":473},"devsecops platform",[497],{"title":205,"links":498},[499,503,508],{"text":500,"config":501},"プランの表示",{"href":207,"dataGaName":502,"dataGaLocation":473},"view plans",{"text":504,"config":505},"Premiumを選ぶ理由",{"href":506,"dataGaName":507,"dataGaLocation":473},"/ja-jp/pricing/premium/","why premium",{"text":509,"config":510},"Ultimateを選ぶ理由",{"href":511,"dataGaName":512,"dataGaLocation":473},"/ja-jp/pricing/ultimate/","why ultimate",{"title":514,"links":515},"ソリューション",[516,521,524,526,531,536,540,543,546,551,553,555,557,562],{"text":517,"config":518},"デジタルトランスフォーメーション",{"href":519,"dataGaName":520,"dataGaLocation":473},"/ja-jp/topics/digital-transformation/","digital transformation",{"text":151,"config":522},{"href":146,"dataGaName":523,"dataGaLocation":473},"security & compliance",{"text":138,"config":525},{"href":121,"dataGaName":122,"dataGaLocation":473},{"text":527,"config":528},"アジャイル開発",{"href":529,"dataGaName":530,"dataGaLocation":473},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":532,"config":533},"クラウドトランスフォーメーション",{"href":534,"dataGaName":535,"dataGaLocation":473},"/ja-jp/topics/cloud-native/","cloud transformation",{"text":537,"config":538},"SCM",{"href":135,"dataGaName":539,"dataGaLocation":473},"source code management",{"text":125,"config":541},{"href":127,"dataGaName":542,"dataGaLocation":473},"continuous integration & delivery",{"text":177,"config":544},{"href":179,"dataGaName":545,"dataGaLocation":473},"value stream management",{"text":547,"config":548},"GitOps",{"href":549,"dataGaName":550,"dataGaLocation":473},"/ja-jp/solutions/gitops/","gitops",{"text":190,"config":552},{"href":192,"dataGaName":193,"dataGaLocation":473},{"text":195,"config":554},{"href":197,"dataGaName":198,"dataGaLocation":473},{"text":200,"config":556},{"href":202,"dataGaName":203,"dataGaLocation":473},{"text":558,"config":559},"教育",{"href":560,"dataGaName":561,"dataGaLocation":473},"/ja-jp/solutions/education/","education",{"text":563,"config":564},"金融サービス",{"href":565,"dataGaName":566,"dataGaLocation":473},"/ja-jp/solutions/finance/","financial services",{"title":210,"links":568},[569,571,573,575,578,580,584,586,588,590,592,594,596,598],{"text":222,"config":570},{"href":224,"dataGaName":225,"dataGaLocation":473},{"text":227,"config":572},{"href":229,"dataGaName":230,"dataGaLocation":473},{"text":232,"config":574},{"href":234,"dataGaName":235,"dataGaLocation":473},{"text":237,"config":576},{"href":239,"dataGaName":577,"dataGaLocation":473},"docs",{"text":260,"config":579},{"href":262,"dataGaName":5},{"text":581,"config":582},"お客様の成功事例",{"href":583,"dataGaLocation":473},"/customers/",{"text":255,"config":585},{"href":257,"dataGaName":258,"dataGaLocation":473},{"text":264,"config":587},{"href":266,"dataGaName":267,"dataGaLocation":473},{"text":277,"config":589},{"href":279,"dataGaName":280,"dataGaLocation":473},{"text":269,"config":591},{"href":271,"dataGaName":272,"dataGaLocation":473},{"text":282,"config":593},{"href":284,"dataGaName":25,"dataGaLocation":473},{"text":286,"config":595},{"href":288,"dataGaName":289,"dataGaLocation":473},{"text":291,"config":597},{"href":293,"dataGaName":294,"dataGaLocation":473},{"text":296,"config":599},{"href":298,"dataGaName":299,"dataGaLocation":473},{"title":314,"links":601},[602,604,606,608,610,612,614,618,623,625,627,629],{"text":321,"config":603},{"href":323,"dataGaName":316,"dataGaLocation":473},{"text":326,"config":605},{"href":328,"dataGaName":329,"dataGaLocation":473},{"text":334,"config":607},{"href":336,"dataGaName":337,"dataGaLocation":473},{"text":339,"config":609},{"href":341,"dataGaName":342,"dataGaLocation":473},{"text":344,"config":611},{"href":346,"dataGaName":347,"dataGaLocation":473},{"text":349,"config":613},{"href":351,"dataGaName":352,"dataGaLocation":473},{"text":615,"config":616},"Sustainability",{"href":617,"dataGaName":615,"dataGaLocation":473},"/sustainability/",{"text":619,"config":620},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":621,"dataGaName":622,"dataGaLocation":473},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":354,"config":624},{"href":356,"dataGaName":357,"dataGaLocation":473},{"text":364,"config":626},{"href":366,"dataGaName":367,"dataGaLocation":473},{"text":369,"config":628},{"href":371,"dataGaName":372,"dataGaLocation":473},{"text":630,"config":631},"現代奴隷制の透明性に関する声明",{"href":632,"dataGaName":633,"dataGaLocation":473},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":52,"links":635},[636,638,640,642,647,652,657],{"text":52,"config":637},{"href":54,"dataGaName":55,"dataGaLocation":473},{"text":382,"config":639},{"href":384,"dataGaName":385,"dataGaLocation":473},{"text":387,"config":641},{"href":389,"dataGaName":390,"dataGaLocation":473},{"text":643,"config":644},"ステータス",{"href":645,"dataGaName":646,"dataGaLocation":473},"https://status.gitlab.com/","status",{"text":648,"config":649},"利用規約",{"href":650,"dataGaName":651,"dataGaLocation":473},"/terms/","terms of use",{"text":653,"config":654},"プライバシーに関する声明",{"href":655,"dataGaName":656,"dataGaLocation":473},"/ja-jp/privacy/","privacy statement",{"text":658,"config":659},"Cookieの設定",{"dataGaName":660,"dataGaLocation":473,"id":661,"isOneTrustButton":28},"cookie preferences","ot-sdk-btn",{"items":663},[664,666,668],{"text":648,"config":665},{"href":650,"dataGaName":651,"dataGaLocation":473},{"text":653,"config":667},{"href":655,"dataGaName":656,"dataGaLocation":473},{"text":658,"config":669},{"dataGaName":660,"dataGaLocation":473,"id":661,"isOneTrustButton":28},"content:shared:ja-jp:main-footer.yml","Main Footer","shared/ja-jp/main-footer.yml","shared/ja-jp/main-footer",[675],{"_path":676,"_dir":677,"_draft":6,"_partial":6,"_locale":7,"content":678,"config":682,"_id":684,"_type":31,"title":18,"_source":33,"_file":685,"_stem":686,"_extension":36},"/en-us/blog/authors/justin-tobler","authors",{"name":18,"config":679},{"headshot":680,"ctfId":681},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664737/Blog/Author%20Headshots/james_tobler_headshot.png","5pnOIbNI1Sc5IFnReNHNtv",{"template":683},"BlogAuthor","content:en-us:blog:authors:justin-tobler.yml","en-us/blog/authors/justin-tobler.yml","en-us/blog/authors/justin-tobler",{"_path":688,"_dir":39,"_draft":6,"_partial":6,"_locale":7,"header":689,"eyebrow":690,"blurb":691,"button":692,"secondaryButton":696,"_id":698,"_type":31,"title":699,"_source":33,"_file":700,"_stem":701,"_extension":36},"/shared/ja-jp/next-steps","より優れたソフトウェアをより速く提供","フォーチュン100企業の50%以上がGitLabを信頼","インテリジェントなDevSecOpsプラットフォームで\n\n\nチームの可能性を広げましょう。\n",{"text":47,"config":693},{"href":694,"dataGaName":50,"dataGaLocation":695},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":52,"config":697},{"href":54,"dataGaName":55,"dataGaLocation":695},"content:shared:ja-jp:next-steps.yml","Next Steps","shared/ja-jp/next-steps.yml","shared/ja-jp/next-steps",1754424563768]