[{"data":1,"prerenderedAt":1759},["ShallowReactive",2],{"/ja-jp/blog/whats-new-in-git-2-45-0":3,"navigation-ja-jp":978,"banner-ja-jp":1407,"footer-ja-jp":1415,"blog-post-authors-ja-jp-Patrick Steinhardt":1657,"blog-related-posts-ja-jp-whats-new-in-git-2-45-0":1672,"blog-promotions-ja-jp":1696,"next-steps-ja-jp":1750},{"id":4,"title":5,"authors":6,"body":8,"category":957,"date":958,"description":959,"extension":960,"externalUrl":961,"faq":961,"featured":962,"heroImage":963,"meta":964,"navigation":102,"path":965,"seo":966,"slug":970,"stem":971,"tags":972,"template":975,"updatedDate":976,"__hash__":977},"blogPosts/ja-jp/blog/whats-new-in-git-2-45-0.md","Git 2.45.0の新機能",[7],"Patrick Steinhardt",{"type":9,"value":10,"toc":947},"minimark",[11,22,27,30,45,48,284,287,374,377,394,427,430,445,563,582,585,593,596,599,602,606,609,630,633,636,670,677,680,691,736,739,748,751,754,761,789,792,803,830,835,838,845,852,855,858,869,883,888,891,899,909,913,943],[12,13,14,15,21],"p",{},"Gitプロジェクトは最近、",[16,17,20],"a",{"href":18,"rel":19},"https://lore.kernel.org/git/xmqq8r0ww0sj.fsf@gitster.g/",[],"Gitバージョン2.45.0","をリリースしました。このリリースのハイライトを見てみましょう。これには、GitLabのGitチームと、より広範なGitコミュニティからのコントリビュートによるものがあります。",[23,24,26],"h2",{"id":25},"reftables-新しい参照ストレージバックエンド","Reftables: 新しい参照ストレージバックエンド",[12,28,29],{},"すべてのGitリポジトリは、次の2つの基本的なデータ構造を追跡する必要があります:",[31,32,33,37],"ul",{},[34,35,36],"li",{},"ファイルのデータ、ディレクトリ構造、コミットメッセージ、タグを保存するオブジェクトグラフ。",[34,38,39,40,44],{},"特定のオブジェクトをよりアクセスしやすい名前に関連付けるためのオブジェクトグラフへのポインタである参照。たとえば、ブランチは名前が ",[41,42,43],"code",{},"refs/heads/"," プレフィックスで始まる参照です。",[12,46,47],{},"参照がリポジトリに保存されるディスク上のフォーマットは、Gitの発足以来ほとんど変わっておらず、「files」フォーマットと呼ばれています。参照を作成するたびに、Gitは、パスが参照名と一致するGitリポジトリ内のプレーンなファイルである、いわゆる「ルース参照」を作成します。たとえば、",[49,50,55],"pre",{"className":51,"code":52,"language":53,"meta":54,"style":54},"language-shell shiki shiki-themes github-light","$ git init .\nInitialized empty Git repository in /tmp/repo/.git/\n\n# Updating a reference will cause Git to create a \"loose ref\". This loose ref is\n# a simple file which contains the object ID of the commit.\n$ git commit --allow-empty --message \"Initial commit\"\n[main (root-commit) c70f266] Initial commit\n$ cat .git/refs/heads/main\nc70f26689975782739ef9666af079535b12b5946\n\n# Creating a second reference will end up with a second loose ref.\n$ git branch feature\n$ cat .git/refs/heads/feature\nc70f26689975782739ef9666af079535b12b5946\n$ tree .git/refs\n.git/refs/\n├── heads\n│   ├── feature\n│   └── main\n└── tags\n\n3 directories, 2 files\n","shell","",[41,56,57,76,97,104,111,117,137,151,162,168,173,179,192,202,207,218,224,233,244,255,264,269],{"__ignoreMap":54},[58,59,62,66,70,73],"span",{"class":60,"line":61},"line",1,[58,63,65],{"class":64},"s7eDp","$",[58,67,69],{"class":68},"sYBdl"," git",[58,71,72],{"class":68}," init",[58,74,75],{"class":68}," .\n",[58,77,79,82,85,88,91,94],{"class":60,"line":78},2,[58,80,81],{"class":64},"Initialized",[58,83,84],{"class":68}," empty",[58,86,87],{"class":68}," Git",[58,89,90],{"class":68}," repository",[58,92,93],{"class":68}," in",[58,95,96],{"class":68}," /tmp/repo/.git/\n",[58,98,100],{"class":60,"line":99},3,[58,101,103],{"emptyLinePlaceholder":102},true,"\n",[58,105,107],{"class":60,"line":106},4,[58,108,110],{"class":109},"sAwPA","# Updating a reference will cause Git to create a \"loose ref\". This loose ref is\n",[58,112,114],{"class":60,"line":113},5,[58,115,116],{"class":109},"# a simple file which contains the object ID of the commit.\n",[58,118,120,122,124,127,131,134],{"class":60,"line":119},6,[58,121,65],{"class":64},[58,123,69],{"class":68},[58,125,126],{"class":68}," commit",[58,128,130],{"class":129},"sYu0t"," --allow-empty",[58,132,133],{"class":129}," --message",[58,135,136],{"class":68}," \"Initial commit\"\n",[58,138,140,144,148],{"class":60,"line":139},7,[58,141,143],{"class":142},"sgsFI","[main (root",[58,145,147],{"class":146},"sD7c4","-",[58,149,150],{"class":142},"commit) c70f266] Initial commit\n",[58,152,154,156,159],{"class":60,"line":153},8,[58,155,65],{"class":64},[58,157,158],{"class":68}," cat",[58,160,161],{"class":68}," .git/refs/heads/main\n",[58,163,165],{"class":60,"line":164},9,[58,166,167],{"class":64},"c70f26689975782739ef9666af079535b12b5946\n",[58,169,171],{"class":60,"line":170},10,[58,172,103],{"emptyLinePlaceholder":102},[58,174,176],{"class":60,"line":175},11,[58,177,178],{"class":109},"# Creating a second reference will end up with a second loose ref.\n",[58,180,182,184,186,189],{"class":60,"line":181},12,[58,183,65],{"class":64},[58,185,69],{"class":68},[58,187,188],{"class":68}," branch",[58,190,191],{"class":68}," feature\n",[58,193,195,197,199],{"class":60,"line":194},13,[58,196,65],{"class":64},[58,198,158],{"class":68},[58,200,201],{"class":68}," .git/refs/heads/feature\n",[58,203,205],{"class":60,"line":204},14,[58,206,167],{"class":64},[58,208,210,212,215],{"class":60,"line":209},15,[58,211,65],{"class":64},[58,213,214],{"class":68}," tree",[58,216,217],{"class":68}," .git/refs\n",[58,219,221],{"class":60,"line":220},16,[58,222,223],{"class":64},".git/refs/\n",[58,225,227,230],{"class":60,"line":226},17,[58,228,229],{"class":64},"├──",[58,231,232],{"class":68}," heads\n",[58,234,236,239,242],{"class":60,"line":235},18,[58,237,238],{"class":64},"│",[58,240,241],{"class":68},"   ├──",[58,243,191],{"class":68},[58,245,247,249,252],{"class":60,"line":246},19,[58,248,238],{"class":64},[58,250,251],{"class":68},"   └──",[58,253,254],{"class":68}," main\n",[58,256,258,261],{"class":60,"line":257},20,[58,259,260],{"class":64},"└──",[58,262,263],{"class":68}," tags\n",[58,265,267],{"class":60,"line":266},21,[58,268,103],{"emptyLinePlaceholder":102},[58,270,272,275,278,281],{"class":60,"line":271},22,[58,273,274],{"class":64},"3",[58,276,277],{"class":68}," directories,",[58,279,280],{"class":129}," 2",[58,282,283],{"class":68}," files\n",[12,285,286],{},"時々、Gitはそれらの参照を「パックされた」ファイルフォーマットにパックして、参照をより効率的に検索できるようにします。たとえば、",[49,288,290],{"className":51,"code":289,"language":53,"meta":54,"style":54},"# Packing references will create \"packed\" references, which are a sorted list of\n# references. The loose reference does not exist anymore.\n$ git pack-refs --all\n$ cat .git/refs/heads/main\ncat: .git/refs/heads/main: No such file or directory\n$ cat .git/packed-refs\n# pack-refs with: peeled fully-peeled sorted\nc70f26689975782739ef9666af079535b12b5946 refs/heads/feature\nc70f26689975782739ef9666af079535b12b5946 refs/heads/main\n",[41,291,292,297,302,314,322,345,354,359,367],{"__ignoreMap":54},[58,293,294],{"class":60,"line":61},[58,295,296],{"class":109},"# Packing references will create \"packed\" references, which are a sorted list of\n",[58,298,299],{"class":60,"line":78},[58,300,301],{"class":109},"# references. The loose reference does not exist anymore.\n",[58,303,304,306,308,311],{"class":60,"line":99},[58,305,65],{"class":64},[58,307,69],{"class":68},[58,309,310],{"class":68}," pack-refs",[58,312,313],{"class":129}," --all\n",[58,315,316,318,320],{"class":60,"line":106},[58,317,65],{"class":64},[58,319,158],{"class":68},[58,321,161],{"class":68},[58,323,324,327,330,333,336,339,342],{"class":60,"line":113},[58,325,326],{"class":64},"cat:",[58,328,329],{"class":68}," .git/refs/heads/main:",[58,331,332],{"class":68}," No",[58,334,335],{"class":68}," such",[58,337,338],{"class":68}," file",[58,340,341],{"class":68}," or",[58,343,344],{"class":68}," directory\n",[58,346,347,349,351],{"class":60,"line":119},[58,348,65],{"class":64},[58,350,158],{"class":68},[58,352,353],{"class":68}," .git/packed-refs\n",[58,355,356],{"class":60,"line":139},[58,357,358],{"class":109},"# pack-refs with: peeled fully-peeled sorted\n",[58,360,361,364],{"class":60,"line":153},[58,362,363],{"class":64},"c70f26689975782739ef9666af079535b12b5946",[58,365,366],{"class":68}," refs/heads/feature\n",[58,368,369,371],{"class":60,"line":164},[58,370,363],{"class":64},[58,372,373],{"class":68}," refs/heads/main\n",[12,375,376],{},"このフォーマットはかなりシンプルですが、次のような制限があります。",[31,378,379,382,385,388,391],{},[34,380,381],{},"多くの参照を持つ大規模な単一のリポジトリでは、スケーラビリティの問題が発生し始めました。参照を削除することは、特に非効率的です。なぜなら、削除済みの参照を削除するには、「packed - refs」ファイル全体を書き換える必要があるからです。当社の最大のリポジトリでは、参照を削除するごとに数ギガバイトのデータを書き換える可能性があります。",[34,383,384],{},"すべての参照を把握するには複数のファイルを読み取る必要があるため、同時に書き込みを行うことなく参照をアトミックに読み取ることはできません。",[34,386,387],{},"複数のファイルを作成または更新する必要があるため、アトミックに書き込みを実行することができず、ワンステップで実行できません。",[34,389,390],{},"完全な「packed - refs」ファイルを書き換える必要があるため、参照のメンテナンスはスケーリングがうまくいきません。",[34,392,393],{},"ルース参照はファイルシステムパスをその名前として使用するため、ファイルシステム固有の動作の対象となります。例えば、大文字と小文字を区別しないファイルシステムは、単に大文字と小文字が異なるだけの参照を保存することはできません。",[12,395,396,397,402,403,408,409,414,415,420,421,426],{},"これらの問題に対処するために、Git v2.45.0は新しい「reftable」バックエンドを導入しました。これは、新しいバイナリフォーマットを使用して参照を保存します。この新しいバックエンドは非常に長い間開発され続けてきました。最初は2017年7月に",[16,398,401],{"href":399,"rel":400},"https://sfconservancy.org/blog/2018/jan/30/shawn-pearce/",[],"Shawn Pearce","によって提案され、",[16,404,407],{"href":405,"rel":406},"https://www.eclipse.org/jgit/",[],"JGit","に実装されました。これは",[16,410,413],{"href":411,"rel":412},"https://www.gerritcodereview.com/",[],"Gerrit プロジェクト","で広く使用されています。2021年、",[16,416,419],{"href":417,"rel":418},"https://hanwen.home.xs4all.nl/",[],"Han-Wen Nienhuys","がライブラリをGitにアップストリームし、",[16,422,425],{"href":423,"rel":424},"https://git-scm.com/docs/reftable",[],"reftableフォーマット","の読み取りと書き込みを可能にしました。",[12,428,429],{},"Git v2.45.0 でアップストリームした新しい「reftable」バックエンドは、ついにreftableライブラリとGitを統合し、新しいフォーマットをGitリポジトリのストレージバックエンドとして使用できるようになりました。",[12,431,432,433,436,437,440,441,444],{},"少なくともGit v2.45.0を使用していれば、",[41,434,435],{},"--ref-format=reftable"," スイッチを",[41,438,439],{},"git-init(1)"," または ",[41,442,443],{},"git-clone(1)"," のいずれかに渡すことで、「reftable」フォーマットを使用して新しいリポジトリを作成できます。たとえば、",[49,446,448],{"className":51,"code":447,"language":53,"meta":54,"style":54},"$ git init --ref-format=reftable .\nInitialized empty Git repository in /tmp/repo/.git/\n$ git rev-parse --show-ref-format\nreftable\n$ find -type f .git/reftable/\n.git/reftable/0x000000000001-0x000000000001-01b5e47d.ref\n.git/reftable/tables.list\n\n$ git commit --allow-empty --message \"Initial commit\"\n$ find -type f .git/reftable/\n.git/reftable/0x000000000001-0x000000000001-01b5e47d.ref\n.git/reftable/0x000000000002-0x000000000002-87006b81.ref\n.git/reftable/tables.list\n",[41,449,450,463,477,489,494,510,515,520,524,538,550,554,559],{"__ignoreMap":54},[58,451,452,454,456,458,461],{"class":60,"line":61},[58,453,65],{"class":64},[58,455,69],{"class":68},[58,457,72],{"class":68},[58,459,460],{"class":129}," --ref-format=reftable",[58,462,75],{"class":68},[58,464,465,467,469,471,473,475],{"class":60,"line":78},[58,466,81],{"class":64},[58,468,84],{"class":68},[58,470,87],{"class":68},[58,472,90],{"class":68},[58,474,93],{"class":68},[58,476,96],{"class":68},[58,478,479,481,483,486],{"class":60,"line":99},[58,480,65],{"class":64},[58,482,69],{"class":68},[58,484,485],{"class":68}," rev-parse",[58,487,488],{"class":129}," --show-ref-format\n",[58,490,491],{"class":60,"line":106},[58,492,493],{"class":64},"reftable\n",[58,495,496,498,501,504,507],{"class":60,"line":113},[58,497,65],{"class":64},[58,499,500],{"class":68}," find",[58,502,503],{"class":129}," -type",[58,505,506],{"class":68}," f",[58,508,509],{"class":68}," .git/reftable/\n",[58,511,512],{"class":60,"line":119},[58,513,514],{"class":64},".git/reftable/0x000000000001-0x000000000001-01b5e47d.ref\n",[58,516,517],{"class":60,"line":139},[58,518,519],{"class":64},".git/reftable/tables.list\n",[58,521,522],{"class":60,"line":153},[58,523,103],{"emptyLinePlaceholder":102},[58,525,526,528,530,532,534,536],{"class":60,"line":164},[58,527,65],{"class":64},[58,529,69],{"class":68},[58,531,126],{"class":68},[58,533,130],{"class":129},[58,535,133],{"class":129},[58,537,136],{"class":68},[58,539,540,542,544,546,548],{"class":60,"line":170},[58,541,65],{"class":64},[58,543,500],{"class":68},[58,545,503],{"class":129},[58,547,506],{"class":68},[58,549,509],{"class":68},[58,551,552],{"class":60,"line":175},[58,553,514],{"class":64},[58,555,556],{"class":60,"line":181},[58,557,558],{"class":64},".git/reftable/0x000000000002-0x000000000002-87006b81.ref\n",[58,560,561],{"class":60,"line":194},[58,562,519],{"class":64},[12,564,565,566,569,570,573,574,577,578,581],{},"ご覧のとおり、参照は ",[41,567,568],{},".git/refs"," ディレクトリではなく ",[41,571,572],{},".git/reftable"," に保存されています。参照と参照ログは、",[41,575,576],{},".ref"," で終わるファイルである「テーブル」に保存されますが、",[41,579,580],{},"tables.list"," ファイルには現在アクティブなすべてのテーブルのリストが含まれています。この仕組みの技術的な詳細については、別のブログ記事でご説明します。引き続きブログをご覧いただくようお願いいたします。",[12,583,584],{},"「reftable」バックエンドは、「files」バックエンドに取って代わるものです。したがって、ユーザーの観点からは、すべてが同じように機能する必要があります。",[12,586,587,588,592],{},"このプロジェクトは",[16,589,7],{"href":590,"rel":591},"https://gitlab.com/pks-gitlab",[],"が主導しました。また、Shawn Pearceがフォーマットのオリジナルを発案、Han - Wen Nienhuysがreftableライブラリを作成しています。",[23,594,595],{"id":595},"参照用ツールの改善",[12,597,598],{},"「reftable」フォーマットは、私たちが抱えている多くの問題を解決してくれる一方で、新しい問題も生み出しています。 最も重要な問題の1つが、格納されているデータへのアクセシビリティです。",[12,600,601],{},"「files」バックエンドを使用すると、最悪の場合、通常のUnixツールを使用して参照の状態を調べることになります。「packed」参照と「loose」参照の両方には、人間が簡単に理解できるデータが含まれています。これは、バイナリフォーマットである「reftable」フォーマットとは異なります。したがって、Gitは新しい「reftable」フォーマットからデータを抽出するために必要なすべてのツールを提供する必要があります。",[603,604,605],"h3",{"id":605},"すべての参照の一覧表示",[12,607,608],{},"最初の問題は、リポジトリからすべての参照を把握するのは基本的に不可能であるということです。 Gitで参照を作成したり変更できるのに、すべての参照を網羅的にリストできないと聞くと、困惑する方もいるかもしれません。",[12,610,611,612,615,616,621,622,625,626,629],{},"確かに、「files」バックエンドはできません。",[41,613,614],{},"refs/"," プレフィックスで始まるすべての「通常の」参照を簡単にリストすることはできますが、Gitはいわゆる",[16,617,620],{"href":618,"rel":619},"https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpseudorefapseudoref",[],"pseudo refs","（疑似参照）も使用します。これらのファイルはGitディレクトリのルートに直接存在し、たとえば ",[41,623,624],{},".git/MERGE_HEAD"," などのようなファイルです。問題は、これらの疑似参照が、Gitが格納する、たとえば ",[41,627,628],{},".git/config"," のような他のファイルの隣に存在することです。",[12,631,632],{},"一部の疑似参照はよく知られているため識別しやすく、理論上はGitが書き込むことができる参照に制限はありません。「foobar」という参照を作成するのを妨げるものはありません。",[12,634,635],{},"たとえば、",[49,637,639],{"className":51,"code":638,"language":53,"meta":54,"style":54},"$ git update-ref foobar HEAD\n$ cat .git/foobar\nf32633d4d7da32ccc3827e90ecdc10570927c77d\n",[41,640,641,656,665],{"__ignoreMap":54},[58,642,643,645,647,650,653],{"class":60,"line":61},[58,644,65],{"class":64},[58,646,69],{"class":68},[58,648,649],{"class":68}," update-ref",[58,651,652],{"class":68}," foobar",[58,654,655],{"class":68}," HEAD\n",[58,657,658,660,662],{"class":60,"line":78},[58,659,65],{"class":64},[58,661,158],{"class":68},[58,663,664],{"class":68}," .git/foobar\n",[58,666,667],{"class":60,"line":99},[58,668,669],{"class":64},"f32633d4d7da32ccc3827e90ecdc10570927c77d\n",[12,671,672,673,676],{},"「files」バックエンドにある問題は、ディレクトリをスキャンして参照を列挙するしかないということです。したがって ",[41,674,675],{},".git/foobar"," が実際には参照であることを理解するために、Gitはファイルを開き、ファイルが参照のようにフォーマットされているかどうかを確認する必要があります。",[12,678,679],{},"一方、「reftable」バックエンドは、それに含まれるすべての参照について簡単に認識します。参照はデータ構造にエンコードされているため、それらの参照をデコードして返すだけです。しかし、「files」バックエンドの制限により、存在するすべての参照について学ぶことができるツールは存在しません。",[12,681,682,683,686,687,690],{},"この問題に対処するために、",[41,684,685],{},"git-for-each-ref(1)"," に ",[41,688,689],{},"--include-root-refs"," という新しいフラグを追加しました。これにより、参照名の階層のルートに存在するすべての参照もリストアップされます。\nたとえば、",[49,692,694],{"className":51,"code":693,"language":53,"meta":54,"style":54},"$ git for-each-ref --include-root-refs\nf32633d4d7da32ccc3827e90ecdc10570927c77d commit    HEAD\nf32633d4d7da32ccc3827e90ecdc10570927c77d commit    MERGE_HEAD\nf32633d4d7da32ccc3827e90ecdc10570927c77d commit    refs/heads/main\n",[41,695,696,708,718,727],{"__ignoreMap":54},[58,697,698,700,702,705],{"class":60,"line":61},[58,699,65],{"class":64},[58,701,69],{"class":68},[58,703,704],{"class":68}," for-each-ref",[58,706,707],{"class":129}," --include-root-refs\n",[58,709,710,713,715],{"class":60,"line":78},[58,711,712],{"class":64},"f32633d4d7da32ccc3827e90ecdc10570927c77d",[58,714,126],{"class":68},[58,716,717],{"class":68},"    HEAD\n",[58,719,720,722,724],{"class":60,"line":99},[58,721,712],{"class":64},[58,723,126],{"class":68},[58,725,726],{"class":68},"    MERGE_HEAD\n",[58,728,729,731,733],{"class":60,"line":106},[58,730,712],{"class":64},[58,732,126],{"class":68},[58,734,735],{"class":68},"    refs/heads/main\n",[12,737,738],{},"「files」バックエンドの場合、この新しいフラグはベストエフォートで処理され、既知の疑似参照名に一致するすべての参照が含まれます。「reftable」バックエンドの場合、それに関連するすべての参照をすべてリストアップすることができます。",[12,740,741,742,747],{},"このプロジェクトは、",[16,743,746],{"href":744,"rel":745},"https://gitlab.com/knayakgl",[],"Karthik Nayak","が主導しました。",[603,749,750],{"id":750},"すべての参照ログの一覧表示",[12,752,753],{},"ブランチを更新するたびに、Gitはデフォルトでそれらのブランチの更新をいわゆる参照ログで追跡します。この参照ログを使用すると、意図しない変更を行った場合に、そのブランチへの変更をロールバックできるため、非常に役立つツールとなります。",[12,755,756,757,760],{},"「files」バックエンドでは、これらのログは ",[41,758,759],{},".git/logs"," ディレクトリに保存されます。",[49,762,764],{"className":51,"code":763,"language":53,"meta":54,"style":54},"$ find -type f .git/logs/\n.git/logs/HEAD\n.git/logs/refs/heads/main\n",[41,765,766,779,784],{"__ignoreMap":54},[58,767,768,770,772,774,776],{"class":60,"line":61},[58,769,65],{"class":64},[58,771,500],{"class":68},[58,773,503],{"class":129},[58,775,506],{"class":68},[58,777,778],{"class":68}," .git/logs/\n",[58,780,781],{"class":60,"line":78},[58,782,783],{"class":64},".git/logs/HEAD\n",[58,785,786],{"class":60,"line":99},[58,787,788],{"class":64},".git/logs/refs/heads/main\n",[12,790,791],{},"実際、このディレクトリ内のファイルを一覧表示することが、そもそもどの参照が実際に参照ログを保持しているかを知る唯一の方法です。これは、参照と一緒にそれらのログを保存する「reftable」バックエンドの問題です。そのため、「reftable」フォーマットを使用すると、リポジトリにどの参照ログが存在するかを知る方法はまったくありません。",[12,793,794,795,798,799,802],{},"これは実際には「reftable」フォーマットの欠陥ではありませんが、Gitが提供するツールにおける不備です。この欠落に対処するために、",[41,796,797],{},"git-reflog(1)"," に新しい ",[41,800,801],{},"list"," サブコマンドを導入しました。これにより、すべての既存の参照ログをリストアップできます。",[49,804,806],{"className":51,"code":805,"language":53,"meta":54,"style":54},"$ git reflog list\nHEAD\nrefs/heads/main\n",[41,807,808,820,825],{"__ignoreMap":54},[58,809,810,812,814,817],{"class":60,"line":61},[58,811,65],{"class":64},[58,813,69],{"class":68},[58,815,816],{"class":68}," reflog",[58,818,819],{"class":68}," list\n",[58,821,822],{"class":60,"line":78},[58,823,824],{"class":64},"HEAD\n",[58,826,827],{"class":60,"line":99},[58,828,829],{"class":64},"refs/heads/main\n",[12,831,741,832,747],{},[16,833,7],{"href":590,"rel":834},[],[603,836,837],{"id":837},"参照のより効率的なパッキング",[12,839,840,841,844],{},"Gitリポジトリを効率的に保つには、定期的なメンテナンスが必要です。 通常、このメンテナンスは ",[41,842,843],{},"git maintenance run --auto"," を実行してGitリポジトリにデータを書き込むさまざまなGitコマンドによってトリガーされます。このコマンドは、Gitが計算リソースを無駄にしないように、実際に最適化が必要なデータ構造のみを最適化します。",[12,846,847,848,851],{},"Gitのメンテナンスによって最適化されるデータ構造の1つは、",[41,849,850],{},"git pack-refs --all"," を実行することによって行われる参照データベースです。「files」バックエンドの場合、これは、すべての参照が「packed - refs」ファイルに再パックされ、ルース参照が削除されることを意味します。一方、「reftable」バックエンドの場合、すべてのテーブルが単一のテーブルにマージされます。",[12,853,854],{},"「files」バックエンドについては、合理的に改善することはできません。「packed - refs」ファイル全体を書き直す必要があることを考えると、すべてのルース参照をパックしたいと考えるのは理にかなっています。",[12,856,857],{},"しかし、「reftable」バックエンドの場合、「reftable」バックエンドが自己最適化されるため、最適ではありません。Gitは、新しいテーブルを「reftable」バックエンドに追加するたびに、必要に応じて自動コンパクションを実行し、テーブルを一緒にマージします。したがって、参照データベースは常に適切に最適化された状態にある必要があり、そのため、すべてのテーブルを一緒にマージすることは無駄な努力となります。",[12,859,860,861,864,865,868],{},"そこでGit v2.45.0では、新しい ",[41,862,863],{},"git pack-refs --auto"," モードを導入し、参照バックエンドに必要に応じて最適化を行うようにしました。 「files」バックエンドは、",[41,866,867],{},"--auto"," フラグが設定されていても同じように動作し続けますが、「reftable」バックエンドは、自動コンパクションにすでに使用されているのと同じ経験則を使用します。 実際には、これはほとんどの場合何も操作を行いません。",[12,870,871,872,874,875,878,879,882],{},"さらに、",[41,873,843],{}," は、デフォルトでこの新しいモードを使用するために、",[41,876,877],{},"-tauto"," フラグを ",[41,880,881],{},"git-pack-refs(1)"," に渡すように調整されています。",[12,884,587,885,747],{},[16,886,7],{"href":590,"rel":887},[],[23,889,890],{"id":890},"補足情報",[12,892,893,894,898],{},"このブログ記事では、新しい「reftable」バックエンドに重点を置いています。このバックエンドにより、多くの参照を持つ大規模なリポジトリでの拡張性が向上しました。また、このバックエンドをうまく機能させるために関連したツールも導入しました。このGitリリースではさまざまなパフォーマンスの向上、バグ修正、その他の細かい機能がGitコミュニティによって導入されています。Gitプロジェクトの",[16,895,897],{"href":18,"rel":896},[],"公式リリース発表","をご覧いただくと詳細をご確認いただけます。",[12,900,901],{},[902,903,904,905,908],"em",{},"監修：小松原 つかさ",[906,907],"br",{},"\n（GitLab合同会社 ソリューションアーキテクト本部 シニアパートナーソリューションアーキテクト）",[23,910,912],{"id":911},"過去のgitリリースへのコントリビューション","過去のGitリリースへのコントリビューション",[31,914,915,922,929,936],{},[34,916,917],{},[16,918,921],{"href":919,"rel":920},"https://about.gitlab.com/blog/gitlabs-contributions-to-git-2-44-0/",[],"Git 2.44.0へのGitLabのコントリビューション",[34,923,924],{},[16,925,928],{"href":926,"rel":927},"https://about.gitlab.com/blog/the-contributions-we-made-to-the-git-2-43-release/",[],"Git 2.43.0へのGitLabのコントリビューション",[34,930,931],{},[16,932,935],{"href":933,"rel":934},"https://about.gitlab.com/blog/contributions-to-git-2-42-release/",[],"Git 2.42.0へのGitLabのコントリビューション",[34,937,938],{},[16,939,942],{"href":940,"rel":941},"https://about.gitlab.com/blog/contributions-to-latest-git-release/",[],"Git 2.41.0へのGitLabのコントリビューション",[944,945,946],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":54,"searchDepth":78,"depth":78,"links":948},[949,950,955,956],{"id":25,"depth":78,"text":26},{"id":595,"depth":78,"text":595,"children":951},[952,953,954],{"id":605,"depth":99,"text":605},{"id":750,"depth":99,"text":750},{"id":837,"depth":99,"text":837},{"id":890,"depth":78,"text":890},{"id":911,"depth":78,"text":912},"open-source","2024-04-30","ここでは、GitLabのGitチームと、より広範なGitコミュニティが最新のGitリリースにコントリビュートしたいくつかのハイライトを紹介します。これには、「reftables」や参照用の優れたツールなどが挙げられます。","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659507/Blog/Hero%20Images/AdobeStock_623844718.jpg",{},"/ja-jp/blog/whats-new-in-git-2-45-0",{"title":5,"description":959,"ogTitle":5,"ogDescription":959,"noIndex":962,"ogImage":963,"ogUrl":967,"ogSiteName":968,"ogType":969,"canonicalUrls":967},"https://about.gitlab.com/blog/whats-new-in-git-2-45-0","https://about.gitlab.com","article","whats-new-in-git-2-45-0","ja-jp/blog/whats-new-in-git-2-45-0",[973,974],"git","community","BlogPost","2024-05-17","ZXOEc8wZX8qHqJgY5WNKRL5U3HUiuMIvTeQCLCRurYc",{"logo":979,"freeTrial":984,"sales":989,"login":994,"items":999,"search":1327,"minimal":1360,"duo":1377,"switchNav":1386,"pricingDeployment":1397},{"config":980},{"href":981,"dataGaName":982,"dataGaLocation":983},"/ja-jp/","gitlab logo","header",{"text":985,"config":986},"無料トライアルを開始",{"href":987,"dataGaName":988,"dataGaLocation":983},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp&glm_content=default-saas-trial/","free trial",{"text":990,"config":991},"デモをリクエスト",{"href":992,"dataGaName":993,"dataGaLocation":983},"/ja-jp/sales/?contact-topic=request-demo","sales",{"text":995,"config":996},"サインイン",{"href":997,"dataGaName":998,"dataGaLocation":983},"https://gitlab.com/users/sign_in/","sign in",[1000,1029,1131,1136,1249,1305],{"text":1001,"config":1002,"menu":1004},"プラットフォーム",{"dataNavLevelOne":1003},"platform",{"type":1005,"columns":1006},"cards",[1007,1013,1021],{"title":1001,"description":1008,"link":1009},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":1010,"config":1011},"プラットフォームの詳細はこちら",{"href":1012,"dataGaName":1003,"dataGaLocation":983},"/ja-jp/platform/",{"title":1014,"description":1015,"link":1016},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":1017,"config":1018},"GitLab Duoのご紹介",{"href":1019,"dataGaName":1020,"dataGaLocation":983},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1022,"description":1023,"link":1024},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":1025,"config":1026},"詳細はこちら",{"href":1027,"dataGaName":1028,"dataGaLocation":983},"/ja-jp/why-gitlab/","why gitlab",{"text":1030,"left":102,"config":1031,"menu":1033},"製品",{"dataNavLevelOne":1032},"solutions",{"type":1034,"link":1035,"columns":1039,"feature":1110},"lists",{"text":1036,"config":1037},"すべてのソリューションを表示",{"href":1038,"dataGaName":1032,"dataGaLocation":983},"/ja-jp/solutions/",[1040,1065,1088],{"title":1041,"description":1042,"link":1043,"items":1048},"自動化","CI/CDと自動化でデプロイを加速",{"config":1044},{"icon":1045,"href":1046,"dataGaName":1047,"dataGaLocation":983},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[1049,1053,1056,1061],{"text":1050,"config":1051},"CI/CD",{"href":1052,"dataGaLocation":983,"dataGaName":1050},"/ja-jp/solutions/continuous-integration/",{"text":1014,"config":1054},{"href":1019,"dataGaLocation":983,"dataGaName":1055},"gitlab duo agent platform - product menu",{"text":1057,"config":1058},"ソースコード管理",{"href":1059,"dataGaLocation":983,"dataGaName":1060},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":1062,"config":1063},"自動化されたソフトウェアデリバリー",{"href":1046,"dataGaLocation":983,"dataGaName":1064},"Automated software delivery",{"title":1066,"description":1067,"link":1068,"items":1073},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":1069},{"href":1070,"dataGaName":1071,"dataGaLocation":983,"icon":1072},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1074,1078,1083],{"text":1075,"config":1076},"アプリケーションセキュリティテスト",{"href":1070,"dataGaName":1077,"dataGaLocation":983},"Application security testing",{"text":1079,"config":1080},"ソフトウェアサプライチェーンセキュリティ",{"href":1081,"dataGaLocation":983,"dataGaName":1082},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":1084,"config":1085},"ソフトウェアコンプライアンス",{"href":1086,"dataGaName":1087,"dataGaLocation":983},"/ja-jp/solutions/software-compliance/","software compliance",{"title":1089,"link":1090,"items":1095},"測定",{"config":1091},{"icon":1092,"href":1093,"dataGaName":1094,"dataGaLocation":983},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[1096,1100,1105],{"text":1097,"config":1098},"可視性と測定",{"href":1093,"dataGaLocation":983,"dataGaName":1099},"Visibility and Measurement",{"text":1101,"config":1102},"バリューストリーム管理",{"href":1103,"dataGaLocation":983,"dataGaName":1104},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":1106,"config":1107},"分析とインサイト",{"href":1108,"dataGaLocation":983,"dataGaName":1109},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":1111,"type":1034,"items":1112},"GitLabが活躍する場所",[1113,1119,1125],{"text":1114,"config":1115},"大企業",{"icon":1116,"href":1117,"dataGaLocation":983,"dataGaName":1118},"Building","/ja-jp/enterprise/","enterprise",{"text":1120,"config":1121},"スモールビジネス",{"icon":1122,"href":1123,"dataGaLocation":983,"dataGaName":1124},"Work","/ja-jp/small-business/","small business",{"text":1126,"config":1127},"公共部門",{"icon":1128,"href":1129,"dataGaLocation":983,"dataGaName":1130},"Organization","/ja-jp/solutions/public-sector/","public sector",{"text":1132,"config":1133},"価格",{"href":1134,"dataGaName":1135,"dataGaLocation":983,"dataNavLevelOne":1135},"/ja-jp/pricing/","pricing",{"text":1137,"config":1138,"menu":1140},"関連リソース",{"dataNavLevelOne":1139},"resources",{"type":1034,"link":1141,"columns":1145,"feature":1238},{"text":1142,"config":1143},"すべてのリソースを表示",{"href":1144,"dataGaName":1139,"dataGaLocation":983},"/ja-jp/resources/",[1146,1179,1206],{"title":1147,"items":1148},"はじめに",[1149,1154,1159,1164,1169,1174],{"text":1150,"config":1151},"インストール",{"href":1152,"dataGaName":1153,"dataGaLocation":983},"/ja-jp/install/","install",{"text":1155,"config":1156},"クイックスタートガイド",{"href":1157,"dataGaName":1158,"dataGaLocation":983},"/ja-jp/get-started/","quick setup checklists",{"text":1160,"config":1161},"学ぶ",{"href":1162,"dataGaLocation":983,"dataGaName":1163},"https://university.gitlab.com/","learn",{"text":1165,"config":1166},"製品ドキュメント",{"href":1167,"dataGaName":1168,"dataGaLocation":983},"https://docs.gitlab.com/ja-jp/","product documentation",{"text":1170,"config":1171},"ベストプラクティスビデオ",{"href":1172,"dataGaName":1173,"dataGaLocation":983},"/ja-jp/getting-started-videos/","best practice videos",{"text":1175,"config":1176},"インテグレーション",{"href":1177,"dataGaName":1178,"dataGaLocation":983},"/ja-jp/integrations/","integrations",{"title":1180,"items":1181},"検索する",[1182,1187,1192,1197,1201],{"text":1183,"config":1184},"お客様成功事例",{"href":1185,"dataGaName":1186,"dataGaLocation":983},"/ja-jp/customers/","customer success stories",{"text":1188,"config":1189},"ブログ",{"href":1190,"dataGaName":1191,"dataGaLocation":983},"/ja-jp/blog/","blog",{"text":1193,"config":1194},"Demo Hub",{"href":1195,"dataGaName":1196,"dataGaLocation":983},"/ja-jp/demo-hub/","demo hub",{"text":1198,"config":1199},"The Source",{"href":1200,"dataGaName":1191,"dataGaLocation":983},"/ja-jp/the-source/",{"text":1202,"config":1203},"リモート",{"href":1204,"dataGaName":1205,"dataGaLocation":983},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1207,"items":1208},"つなげる",[1209,1214,1219,1223,1228,1233],{"text":1210,"config":1211},"GitLabサービス",{"href":1212,"dataGaName":1213,"dataGaLocation":983},"/ja-jp/services/","services",{"text":1215,"config":1216},"コントリビュート",{"href":1217,"dataGaName":1218,"dataGaLocation":983},"https://contributors.gitlab.com","contribute",{"text":1220,"config":1221},"コミュニティ",{"href":1222,"dataGaName":974,"dataGaLocation":983},"/community/",{"text":1224,"config":1225},"フォーラム",{"href":1226,"dataGaName":1227,"dataGaLocation":983},"https://forum.gitlab.com/","forum",{"text":1229,"config":1230},"イベント",{"href":1231,"dataGaName":1232,"dataGaLocation":983},"/events/","events",{"text":1234,"config":1235},"パートナー",{"href":1236,"dataGaName":1237,"dataGaLocation":983},"/ja-jp/partners/","partners",{"config":1239,"title":1242,"text":1243,"link":1244},{"background":1240,"textColor":1241},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","GitLabの最新情報","最新の機能と改善点に関する情報をお届けします。",{"text":1245,"config":1246},"最新情報を読む",{"href":1247,"dataGaName":1248,"dataGaLocation":983},"/ja-jp/whats-new/","whats new",{"text":1250,"config":1251,"menu":1253},"企業情報",{"dataNavLevelOne":1252},"company",{"type":1034,"columns":1254},[1255],{"items":1256},[1257,1262,1268,1270,1275,1280,1285,1290,1295,1300],{"text":1258,"config":1259},"GitLabについて",{"href":1260,"dataGaName":1261,"dataGaLocation":983},"/ja-jp/company/","about",{"text":1263,"config":1264,"footerGa":1267},"採用情報",{"href":1265,"dataGaName":1266,"dataGaLocation":983},"/jobs/","jobs",{"dataGaName":1266},{"text":1229,"config":1269},{"href":1231,"dataGaName":1232,"dataGaLocation":983},{"text":1271,"config":1272},"経営陣",{"href":1273,"dataGaName":1274,"dataGaLocation":983},"/company/team/e-group/","leadership",{"text":1276,"config":1277},"ハンドブック",{"href":1278,"dataGaName":1279,"dataGaLocation":983},"https://handbook.gitlab.com/","handbook",{"text":1281,"config":1282},"投資家向け情報",{"href":1283,"dataGaName":1284,"dataGaLocation":983},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1286,"config":1287},"トラストセンター",{"href":1288,"dataGaName":1289,"dataGaLocation":983},"/ja-jp/security/","trust center",{"text":1291,"config":1292},"AI Transparency Center",{"href":1293,"dataGaName":1294,"dataGaLocation":983},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":1296,"config":1297},"ニュースレター",{"href":1298,"dataGaName":1299,"dataGaLocation":983},"/company/contact/#contact-forms","newsletter",{"text":1301,"config":1302},"プレス",{"href":1303,"dataGaName":1304,"dataGaLocation":983},"/press/","press",{"text":1306,"config":1307,"menu":1308},"お問い合わせ",{"dataNavLevelOne":1252},{"type":1034,"columns":1309},[1310],{"items":1311},[1312,1317,1322],{"text":1313,"config":1314},"お問い合わせはこちら",{"href":1315,"dataGaName":1316,"dataGaLocation":983},"/ja-jp/sales/","talk to sales",{"text":1318,"config":1319},"サポートを受ける",{"href":1320,"dataGaName":1321,"dataGaLocation":983},"https://support.gitlab.com/hc/en-us","support portal",{"text":1323,"config":1324},"カスタマーポータル",{"href":1325,"dataGaName":1326,"dataGaLocation":983},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1328,"login":1329,"suggestions":1336},"閉じる",{"text":1330,"link":1331},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":1332,"config":1333},"GitLab.com",{"href":997,"dataGaName":1334,"dataGaLocation":1335},"search login","search",{"text":1337,"default":1338},"提案",[1339,1341,1346,1348,1352,1356],{"text":1014,"config":1340},{"href":1019,"dataGaName":1014,"dataGaLocation":1335},{"text":1342,"config":1343},"コード提案（AI）",{"href":1344,"dataGaName":1345,"dataGaLocation":1335},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1050,"config":1347},{"href":1052,"dataGaName":1050,"dataGaLocation":1335},{"text":1349,"config":1350},"GitLab on AWS",{"href":1351,"dataGaName":1349,"dataGaLocation":1335},"/ja-jp/partners/technology-partners/aws/",{"text":1353,"config":1354},"GitLab on Google Cloud",{"href":1355,"dataGaName":1353,"dataGaLocation":1335},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":1357,"config":1358},"GitLabを選ぶ理由",{"href":1027,"dataGaName":1359,"dataGaLocation":1335},"Why GitLab?",{"freeTrial":1361,"mobileIcon":1365,"desktopIcon":1370,"secondaryButton":1373},{"text":985,"config":1362},{"href":1363,"dataGaName":988,"dataGaLocation":1364},"https://gitlab.com/-/trials/new/","nav",{"altText":1366,"config":1367},"GitLabアイコン",{"src":1368,"dataGaName":1369,"dataGaLocation":1364},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1366,"config":1371},{"src":1372,"dataGaName":1369,"dataGaLocation":1364},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1147,"config":1374},{"href":1375,"dataGaName":1376,"dataGaLocation":1364},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/get-started/","get started",{"freeTrial":1378,"mobileIcon":1382,"desktopIcon":1384},{"text":1379,"config":1380},"GitLab Duoの詳細について",{"href":1019,"dataGaName":1381,"dataGaLocation":1364},"gitlab duo",{"altText":1366,"config":1383},{"src":1368,"dataGaName":1369,"dataGaLocation":1364},{"altText":1366,"config":1385},{"src":1372,"dataGaName":1369,"dataGaLocation":1364},{"button":1387,"mobileIcon":1392,"desktopIcon":1394},{"text":1388,"config":1389},"/switch",{"href":1390,"dataGaName":1391,"dataGaLocation":1364},"#contact","switch",{"altText":1366,"config":1393},{"src":1368,"dataGaName":1369,"dataGaLocation":1364},{"altText":1366,"config":1395},{"src":1396,"dataGaName":1369,"dataGaLocation":1364},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1398,"mobileIcon":1403,"desktopIcon":1405},{"text":1399,"config":1400},"料金ページに戻る",{"href":1134,"dataGaName":1401,"dataGaLocation":1364,"icon":1402},"back to pricing","GoBack",{"altText":1366,"config":1404},{"src":1368,"dataGaName":1369,"dataGaLocation":1364},{"altText":1366,"config":1406},{"src":1372,"dataGaName":1369,"dataGaLocation":1364},{"title":1408,"button":1409,"config":1413},"GitLab Orbitが登場: AIエージェントのためのコンテキストレイヤー",{"text":1025,"config":1410},{"href":1411,"dataGaName":1412,"dataGaLocation":983},"/ja-jp/gitlab-orbit/","orbit",{"layout":1414,"disabled":962},"release",{"data":1416},{"text":1417,"source":1418,"edit":1424,"contribute":1429,"config":1434,"items":1439,"minimal":1648},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":1419,"config":1420},"ページのソースを表示",{"href":1421,"dataGaName":1422,"dataGaLocation":1423},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1425,"config":1426},"このページを編集",{"href":1427,"dataGaName":1428,"dataGaLocation":1423},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1430,"config":1431},"ご協力をお願いします",{"href":1432,"dataGaName":1433,"dataGaLocation":1423},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1435,"facebook":1436,"youtube":1437,"linkedin":1438},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1440,1485,1538,1581,1615],{"title":1132,"links":1441,"subMenu":1456},[1442,1446,1451],{"text":1443,"config":1444},"プランの表示",{"href":1134,"dataGaName":1445,"dataGaLocation":1423},"view plans",{"text":1447,"config":1448},"Premiumを選ぶ理由",{"href":1449,"dataGaName":1450,"dataGaLocation":1423},"/ja-jp/pricing/premium/","why premium",{"text":1452,"config":1453},"Ultimateを選ぶ理由",{"href":1454,"dataGaName":1455,"dataGaLocation":1423},"/ja-jp/pricing/ultimate/","why ultimate",[1457],{"title":1306,"links":1458},[1459,1461,1463,1465,1470,1475,1480],{"text":1306,"config":1460},{"href":1315,"dataGaName":993,"dataGaLocation":1423},{"text":1318,"config":1462},{"href":1320,"dataGaName":1321,"dataGaLocation":1423},{"text":1323,"config":1464},{"href":1325,"dataGaName":1326,"dataGaLocation":1423},{"text":1466,"config":1467},"ステータス",{"href":1468,"dataGaName":1469,"dataGaLocation":1423},"https://status.gitlab.com/","status",{"text":1471,"config":1472},"利用規約",{"href":1473,"dataGaName":1474,"dataGaLocation":1423},"/terms/","terms of use",{"text":1476,"config":1477},"プライバシーに関する声明",{"href":1478,"dataGaName":1479,"dataGaLocation":1423},"/ja-jp/privacy/","privacy statement",{"text":1481,"config":1482},"Cookie 優先設定",{"dataGaName":1483,"dataGaLocation":1423,"id":1484,"isOneTrustButton":102},"cookie preferences","ot-sdk-btn",{"title":1030,"links":1486,"subMenu":1495},[1487,1491],{"text":1488,"config":1489},"DevSecOpsプラットフォーム",{"href":1012,"dataGaName":1490,"dataGaLocation":1423},"devsecops platform",{"text":1492,"config":1493},"AI支援開発",{"href":1019,"dataGaName":1494,"dataGaLocation":1423},"ai-assisted development",[1496],{"title":1497,"links":1498},"トピック",[1499,1503,1508,1513,1518,1523,1528,1533],{"text":1050,"config":1500},{"href":1501,"dataGaName":1502,"dataGaLocation":1423},"/ja-jp/topics/ci-cd/","cicd",{"text":1504,"config":1505},"GitOps",{"href":1506,"dataGaName":1507,"dataGaLocation":1423},"/ja-jp/topics/gitops/","gitops",{"text":1509,"config":1510},"DevOps",{"href":1511,"dataGaName":1512,"dataGaLocation":1423},"/ja-jp/topics/devops/","devops",{"text":1514,"config":1515},"バージョン管理",{"href":1516,"dataGaName":1517,"dataGaLocation":1423},"/ja-jp/topics/version-control/","version control",{"text":1519,"config":1520},"DevSecOps",{"href":1521,"dataGaName":1522,"dataGaLocation":1423},"/ja-jp/topics/devsecops/","devsecops",{"text":1524,"config":1525},"クラウドネイティブ",{"href":1526,"dataGaName":1527,"dataGaLocation":1423},"/ja-jp/topics/cloud-native/","cloud native",{"text":1529,"config":1530},"コーディングのためのAI",{"href":1531,"dataGaName":1532,"dataGaLocation":1423},"/ja-jp/topics/devops/ai-for-coding/","ai for coding",{"text":1534,"config":1535},"エージェント型AI",{"href":1536,"dataGaName":1537,"dataGaLocation":1423},"/ja-jp/topics/agentic-ai/","agentic ai",{"title":1539,"links":1540},"ソリューション",[1541,1544,1546,1551,1555,1558,1561,1564,1566,1568,1571,1576],{"text":1075,"config":1542},{"href":1070,"dataGaName":1543,"dataGaLocation":1423},"Application Security Testing",{"text":1062,"config":1545},{"href":1046,"dataGaName":1047,"dataGaLocation":1423},{"text":1547,"config":1548},"アジャイル開発",{"href":1549,"dataGaName":1550,"dataGaLocation":1423},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":1552,"config":1553},"SCM",{"href":1059,"dataGaName":1554,"dataGaLocation":1423},"source code management",{"text":1050,"config":1556},{"href":1052,"dataGaName":1557,"dataGaLocation":1423},"continuous integration & delivery",{"text":1101,"config":1559},{"href":1103,"dataGaName":1560,"dataGaLocation":1423},"value stream management",{"text":1504,"config":1562},{"href":1563,"dataGaName":1507,"dataGaLocation":1423},"/ja-jp/solutions/gitops/",{"text":1114,"config":1565},{"href":1117,"dataGaName":1118,"dataGaLocation":1423},{"text":1120,"config":1567},{"href":1123,"dataGaName":1124,"dataGaLocation":1423},{"text":1569,"config":1570},"公共機関",{"href":1129,"dataGaName":1130,"dataGaLocation":1423},{"text":1572,"config":1573},"教育",{"href":1574,"dataGaName":1575,"dataGaLocation":1423},"/ja-jp/solutions/education/","education",{"text":1577,"config":1578},"金融サービス",{"href":1579,"dataGaName":1580,"dataGaLocation":1423},"/ja-jp/solutions/finance/","financial services",{"title":1582,"links":1583},"リソース",[1584,1586,1588,1590,1594,1596,1599,1601,1603,1605,1607,1609,1611,1613],{"text":1150,"config":1585},{"href":1152,"dataGaName":1153,"dataGaLocation":1423},{"text":1155,"config":1587},{"href":1157,"dataGaName":1158,"dataGaLocation":1423},{"text":1160,"config":1589},{"href":1162,"dataGaName":1163,"dataGaLocation":1423},{"text":1165,"config":1591},{"href":1592,"dataGaName":1593,"dataGaLocation":1423},"https://docs.gitlab.com/ja-jp","docs",{"text":1188,"config":1595},{"href":1190,"dataGaName":1191,"dataGaLocation":1423},{"text":1597,"config":1598},"最新リリース",{"href":1247,"dataGaName":1248,"dataGaLocation":1423},{"text":1183,"config":1600},{"href":1185,"dataGaName":1186,"dataGaLocation":1423},{"text":1202,"config":1602},{"href":1204,"dataGaName":1205,"dataGaLocation":1423},{"text":1210,"config":1604},{"href":1212,"dataGaName":1213,"dataGaLocation":1423},{"text":1215,"config":1606},{"href":1217,"dataGaName":1218,"dataGaLocation":1423},{"text":1220,"config":1608},{"href":1222,"dataGaName":974,"dataGaLocation":1423},{"text":1224,"config":1610},{"href":1226,"dataGaName":1227,"dataGaLocation":1423},{"text":1229,"config":1612},{"href":1231,"dataGaName":1232,"dataGaLocation":1423},{"text":1234,"config":1614},{"href":1236,"dataGaName":1237,"dataGaLocation":1423},{"title":1616,"links":1617},"会社情報",[1618,1620,1622,1624,1626,1628,1632,1637,1639,1641,1643],{"text":1258,"config":1619},{"href":1260,"dataGaName":1252,"dataGaLocation":1423},{"text":1263,"config":1621},{"href":1265,"dataGaName":1266,"dataGaLocation":1423},{"text":1271,"config":1623},{"href":1273,"dataGaName":1274,"dataGaLocation":1423},{"text":1276,"config":1625},{"href":1278,"dataGaName":1279,"dataGaLocation":1423},{"text":1281,"config":1627},{"href":1283,"dataGaName":1284,"dataGaLocation":1423},{"text":1629,"config":1630},"Sustainability",{"href":1631,"dataGaName":1629,"dataGaLocation":1423},"/sustainability/",{"text":1633,"config":1634},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":1635,"dataGaName":1636,"dataGaLocation":1423},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1286,"config":1638},{"href":1288,"dataGaName":1289,"dataGaLocation":1423},{"text":1296,"config":1640},{"href":1298,"dataGaName":1299,"dataGaLocation":1423},{"text":1301,"config":1642},{"href":1303,"dataGaName":1304,"dataGaLocation":1423},{"text":1644,"config":1645},"現代奴隷制の透明性に関する声明",{"href":1646,"dataGaName":1647,"dataGaLocation":1423},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1649},[1650,1652,1655],{"text":1471,"config":1651},{"href":1473,"dataGaName":1474,"dataGaLocation":1423},{"text":1653,"config":1654},"Cookieの設定",{"dataGaName":1483,"dataGaLocation":1423,"id":1484,"isOneTrustButton":102},{"text":1476,"config":1656},{"href":1478,"dataGaName":1479,"dataGaLocation":1423},[1658],{"id":1659,"title":7,"body":961,"config":1660,"content":1662,"description":961,"extension":1666,"meta":1667,"navigation":102,"path":1668,"seo":1669,"stem":1670,"__hash__":1671},"blogAuthors/en-us/blog/authors/patrick-steinhardt.yml",{"template":1661},"BlogAuthor",{"name":7,"config":1663},{"headshot":1664,"ctfId":1665},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661952/Blog/Author%20Headshots/pks-gitlab-headshot.png","pksgitlab","yml",{},"/en-us/blog/authors/patrick-steinhardt",{},"en-us/blog/authors/patrick-steinhardt","SV9Yd_vW69UbvntDP-SEOV9NKT_VwUAj5nfftf2ElSw",[1673,1681,1689],{"title":1674,"description":1675,"heroImage":1676,"category":957,"date":1677,"authors":1678,"slug":1680,"externalUrl":961},"GitLab AIハッカソン2026：受賞者発表","約7,000人の開発者がGitLab Duo Agent Platform上で600以上のAIエージェントとフローを構築したハッカソンの結果をご紹介。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-04-22",[1679],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"title":1682,"description":1683,"heroImage":1684,"category":957,"date":1685,"authors":1686,"slug":1688,"externalUrl":961},"git mergeコマンドの基本を徹底解説","この記事では、git mergeコマンドについてコマンドの基本的な使い方からリクエストコードまで解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1754287290/averr2ecwl01q2f9lknf.jpg","2025-08-04",[1687],"GitLab Team","git-merge-command-overview",{"title":1690,"description":1691,"heroImage":1692,"category":957,"date":1693,"authors":1694,"slug":1695,"externalUrl":961},"オープンソースソフトウェア（OSS）とは？詳しく解説​","オープンソースの意味や、メリットとデメリットについて、分かりやすく解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752720740/g9x8oi988xuhioglpczi.jpg","2025-07-17",[1687],"what-is-open-source",{"promotions":1697},[1698,1712,1724,1736],{"id":1699,"categories":1700,"header":1702,"text":1703,"button":1704,"image":1709},"ai-modernization",[1701],"ai","AIの真価、組織全体で発揮できていますか？","所要時間は5分以内です",{"text":1705,"config":1706},"AI成熟度スコアを確認する",{"href":1707,"dataGaName":1708,"dataGaLocation":1191},"/ja-jp/assessments/ai-modernization-assessment/","modernization assessment",{"config":1710},{"src":1711},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1713,"categories":1714,"header":1716,"text":1703,"button":1717,"image":1721},"devops-modernization",[1715,1522],"product","単にツールを管理するだけでなく、イノベーションを提供していますか？",{"text":1718,"config":1719},"DevOps成熟度スコアを確認しましょう",{"href":1720,"dataGaName":1708,"dataGaLocation":1191},"/ja-jp/assessments/devops-modernization-assessment/",{"config":1722},{"src":1723},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1725,"categories":1726,"header":1728,"text":1703,"button":1729,"image":1733},"security-modernization",[1727],"security","スピードのためにセキュリティを犠牲にしていませんか？",{"text":1730,"config":1731},"セキュリティ成熟度スコアを確認しましょう",{"href":1732,"dataGaName":1708,"dataGaLocation":1191},"/ja-jp/assessments/security-modernization-assessment/",{"config":1734},{"src":1735},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1737,"paths":1738,"header":1741,"text":1742,"button":1743,"image":1748},"github-azure-migration",[1739,1740],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","チームはGitHubのAzure移行に対応できていますか？","GitHubはすでにAzureを基盤として再構築を進めています。それがあなたのチームにとって何を意味するのか、ご確認ください。",{"text":1744,"config":1745},"GitLabとGitHubの比較を見る",{"href":1746,"dataGaName":1747,"dataGaLocation":1191},"/ja-jp/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1749},{"src":1723},{"header":1751,"blurb":1752,"button":1753,"secondaryButton":1757},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":985,"config":1754},{"href":1755,"dataGaName":988,"dataGaLocation":1756},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/ja-jp/","feature",{"text":1306,"config":1758},{"href":1315,"dataGaName":993,"dataGaLocation":1756},1786803783579]