[{"data":1,"prerenderedAt":3279},["ShallowReactive",2],{"/ja-jp/blog/whats-new-in-git-2-49-0":3,"navigation-ja-jp":2499,"banner-ja-jp":2927,"footer-ja-jp":2935,"blog-post-authors-ja-jp-Toon Claes":3177,"blog-related-posts-ja-jp-whats-new-in-git-2-49-0":3192,"blog-promotions-ja-jp":3216,"next-steps-ja-jp":3270},{"id":4,"title":5,"authors":6,"body":8,"category":2479,"date":2480,"description":2481,"extension":2482,"externalUrl":2483,"faq":2483,"featured":502,"heroImage":2484,"meta":2485,"navigation":502,"path":2486,"seo":2487,"slug":2492,"stem":2493,"tags":2494,"template":2497,"updatedDate":2483,"__hash__":2498},"blogPosts/ja-jp/blog/whats-new-in-git-2-49-0.md","Git 2.49.0の新機能",[7],"Toon Claes",{"type":9,"value":10,"toc":2468},"minimark",[11,22,25,81,85,107,129,136,158,168,351,358,413,416,684,687,693,1221,1227,1544,1547,1596,1617,1619,1644,1658,1672,1693,1699,1708,1720,1832,1841,1852,1873,1876,1909,1912,1982,1989,1992,2017,2066,2086,2098,2101,2108,2125,2151,2157,2171,2173,2178,2189,2195,2216,2227,2298,2313,2315,2324,2338,2341,2344,2355,2358,2375,2380,2413,2421,2437,2441,2464],[12,13,14,15,21],"p",{},"Gitプロジェクトは最近、",[16,17,20],"a",{"href":18,"rel":19},"https://lore.kernel.org/git/xmqqfrjfilc8.fsf@gitster.g/",[],"Git 2.49.0","をリリースしました。このリリースには、GitLabのGitチームや、より広範なGitコミュニティからのコントリビュートが含まれます。注目すべきハイライトを見てみましょう。",[12,23,24],{},"この記事では以下の変更点についてご紹介します。",[26,27,28,35,41,47,53,59,65,71],"ul",{},[29,30,31],"li",{},[16,32,34],{"href":33},"#git-backfill(1)-and-the-new-path-walk-api","git-backfill(1)と新しいpath-walk API",[29,36,37],{},[16,38,40],{"href":39},"#introduction-of-zlib-ng","zlib-ngの導入",[29,42,43],{},[16,44,46],{"href":45},"#continued-iteration-on-meson","Mesonの継続的なイテレーション",[29,48,49],{},[16,50,52],{"href":51},"#deprecation-of-.gitbranches%2F-and-.git%2Fremotes%2F",".git/branches/および.git/remotes/の非推奨化",[29,54,55],{},[16,56,58],{"href":57},"#rust-bindings-for-libgit","libgitに対するRustバインディング",[29,60,61],{},[16,62,64],{"href":63},"#new-name-hashing-algorithm","新しい名前ハッシュアルゴリズム",[29,66,67],{},[16,68,70],{"href":69},"#promisor-remote-capability","プロミサーリモート機能",[29,72,73],{},[16,74,76,80],{"href":75},"#thin-clone-using---revision",[77,78,79],"code",{},"--revision","を使用した軽量なクローン",[82,83,34],"h2",{"id":84},"git-backfill1と新しいpath-walk-api",[12,86,87,94,95,102,103,106],{},[16,88,91],{"href":89,"rel":90},"https://git-scm.com/docs/git-clone",[],[77,92,93],{},"git-clone(1)","コマンドでGitリポジトリをクローンする際に、\n",[16,96,99],{"href":97,"rel":98},"https://git-scm.com/docs/git-clone#Documentation/git-clone.txt-code--filterltfilter-specgtcode",[],[77,100,101],{},"--filter","オプションを指定することができます。\nこのオプションを使用すると、部分クローンを作成できます。部分クローンでは、指定されたオブジェクトフィルターに従って、サーバーから到達可能なオブジェクトの一部のみが送信されます。\n例えば、",[77,104,105],{},"--filter=blob:none","を指定してクローンを作成すると、サーバーからblob（ファイルの中身）が一切フェッチされず、_ブロブを含まないクローン_が作成されます。",[12,108,109,110,117,118,125,126,128],{},"ブロブを含まないクローンには、すべての到達可能なコミットとツリーは含まれますが、blobは含まれていません。そのため、",[16,111,114],{"href":112,"rel":113},"https://git-scm.com/docs/git-checkout",[],[77,115,116],{},"git-checkout(1)","のような操作を行うと、\nGitは必要なblobをサーバーからダウンロードして、その操作を完了させます。ただし、",[16,119,122],{"href":120,"rel":121},"https://git-scm.com/docs/git-blame",[],[77,123,124],{},"git-blame(1)","のような一部の操作では、\n必要なオブジェクトが1つずつダウンロードされることになり、この処理が非常に遅くなります。\nこれは、",[77,127,124],{},"がコミット履歴をたどって必要なblobを特定し、\n不足している各blobを個別にサーバーへリクエストする必要があるためです。",[12,130,131,132,135],{},"Git 2.49では、新たに",[77,133,134],{},"git-backfill(1)","というサブコマンドが導入されました。これは、ブロブを含まない部分クローンに対して、不足しているblobをダウンロードするために使用できます。",[12,137,138,139,141,142,145,146,149,150,153,154,157],{},"内部的には、",[77,140,134],{},"は新しいパスウォークAPIを利用しています。これはGitが通常行うコミットのイテレーション処理とは異なります。従来の方法では、コミットを1つずつイテレーションし、それぞれに関連するツリーやblobに再帰的にアクセスしていました。一方、パスウォークAPIはパスごとに処理を行います。各パスについて関連するツリーオブジェクトのリストをスタックに追加し、そのスタックを深さ優先で処理します。つまり、コミット",[77,143,144],{},"1","のすべてのオブジェクトを処理してからコミット",[77,147,148],{},"2","へ進むのではなく、ファイル",[77,151,152],{},"A","のすべてのバージョンを全コミットにわたって処理してからファイル",[77,155,156],{},"B","に進む、という方式です。このアプローチは、パスごとにグループ化して処理する必要がある場合に、大幅なパフォーマンス向上をもたらします。",[12,159,160,167],{},[16,161,164],{"href":162,"rel":163},"https://gitlab.com/gitlab-org/git",[],[77,165,166],{},"gitlab-org/git","リポジトリのブロブを含まないクローンを作成し、その使い方をお見せします。",[169,170,175],"pre",{"className":171,"code":172,"language":173,"meta":174,"style":174},"language-shell shiki shiki-themes github-light","$ git clone --filter=blob:none --bare --no-tags git@gitlab.com:gitlab-org/git.git\nCloning into bare repository 'git.git'...\nremote: Enumerating objects: 245904, done.\nremote: Counting objects: 100% (1736/1736), done.\nremote: Compressing objects: 100% (276/276), done.\nremote: Total 245904 (delta 1591), reused 1547 (delta 1459), pack-reused 244168 (from 1)\nReceiving objects: 100% (245904/245904), 59.35 MiB | 15.96 MiB/s, done.\nResolving deltas: 100% (161482/161482), done.\n","shell","",[77,176,177,206,224,242,259,274,312,337],{"__ignoreMap":174},[178,179,182,186,190,193,197,200,203],"span",{"class":180,"line":181},"line",1,[178,183,185],{"class":184},"s7eDp","$",[178,187,189],{"class":188},"sYBdl"," git",[178,191,192],{"class":188}," clone",[178,194,196],{"class":195},"sYu0t"," --filter=blob:none",[178,198,199],{"class":195}," --bare",[178,201,202],{"class":195}," --no-tags",[178,204,205],{"class":188}," git@gitlab.com:gitlab-org/git.git\n",[178,207,209,212,215,218,221],{"class":180,"line":208},2,[178,210,211],{"class":184},"Cloning",[178,213,214],{"class":188}," into",[178,216,217],{"class":188}," bare",[178,219,220],{"class":188}," repository",[178,222,223],{"class":188}," 'git.git'...\n",[178,225,227,230,233,236,239],{"class":180,"line":226},3,[178,228,229],{"class":184},"remote:",[178,231,232],{"class":188}," Enumerating",[178,234,235],{"class":188}," objects:",[178,237,238],{"class":188}," 245904,",[178,240,241],{"class":188}," done.\n",[178,243,245,247,250,252,255],{"class":180,"line":244},4,[178,246,229],{"class":184},[178,248,249],{"class":188}," Counting",[178,251,235],{"class":188},[178,253,254],{"class":188}," 100%",[178,256,258],{"class":257},"sgsFI"," (1736/1736), done.\n",[178,260,262,264,267,269,271],{"class":180,"line":261},5,[178,263,229],{"class":184},[178,265,266],{"class":188}," Compressing",[178,268,235],{"class":188},[178,270,254],{"class":188},[178,272,273],{"class":257}," (276/276), done.\n",[178,275,277,279,282,285,288,291,294,297,300,303,306,309],{"class":180,"line":276},6,[178,278,229],{"class":184},[178,280,281],{"class":188}," Total",[178,283,284],{"class":195}," 245904",[178,286,287],{"class":257}," (delta ",[178,289,290],{"class":195},"1591",[178,292,293],{"class":257},"), reused 1547 (",[178,295,296],{"class":184},"delta",[178,298,299],{"class":195}," 1459",[178,301,302],{"class":257},"), pack-reused 244168 (",[178,304,305],{"class":184},"from",[178,307,308],{"class":195}," 1",[178,310,311],{"class":257},")\n",[178,313,315,318,320,322,325,329,332,335],{"class":180,"line":314},7,[178,316,317],{"class":184},"Receiving",[178,319,235],{"class":188},[178,321,254],{"class":188},[178,323,324],{"class":257}," (245904/245904), 59.35 MiB ",[178,326,328],{"class":327},"sD7c4","|",[178,330,331],{"class":184}," 15.96",[178,333,334],{"class":188}," MiB/s,",[178,336,241],{"class":188},[178,338,340,343,346,348],{"class":180,"line":339},8,[178,341,342],{"class":184},"Resolving",[178,344,345],{"class":188}," deltas:",[178,347,254],{"class":188},[178,349,350],{"class":257}," (161482/161482), done.\n",[12,352,353,354,357],{},"上の例では、Gitが初期ブランチをチェックアウトするためにblobをダウンロードする必要がないよう、",[77,355,356],{},"--bare","オプションを使用しています。このクローンにblobが含まれていないことは、次のコマンドで確認できます。",[169,359,363],{"className":360,"code":361,"language":362,"meta":174,"style":174},"language-sh shiki shiki-themes github-light","$ git cat-file --batch-all-objects --batch-check='%(objecttype)' | sort | uniq -c\n  83977 commit\n 161927 tree\n","sh",[77,364,365,397,405],{"__ignoreMap":174},[178,366,367,369,371,374,377,380,383,386,389,391,394],{"class":180,"line":181},[178,368,185],{"class":184},[178,370,189],{"class":188},[178,372,373],{"class":188}," cat-file",[178,375,376],{"class":195}," --batch-all-objects",[178,378,379],{"class":195}," --batch-check=",[178,381,382],{"class":188},"'%(objecttype)'",[178,384,385],{"class":327}," |",[178,387,388],{"class":184}," sort",[178,390,385],{"class":327},[178,392,393],{"class":184}," uniq",[178,395,396],{"class":195}," -c\n",[178,398,399,402],{"class":180,"line":208},[178,400,401],{"class":184},"  83977",[178,403,404],{"class":188}," commit\n",[178,406,407,410],{"class":180,"line":226},[178,408,409],{"class":184}," 161927",[178,411,412],{"class":188}," tree\n",[12,414,415],{},"もしこのリポジトリ内のファイル内容を確認したい場合、Gitはそのファイルをダウンロードする必要があります。",[169,417,419],{"className":360,"code":418,"language":362,"meta":174,"style":174},"$ git cat-file -p HEAD:README.md\nremote: Enumerating objects: 1, done.\nremote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 1 (from 1)\nReceiving objects: 100% (1/1), 1.64 KiB | 1.64 MiB/s, done.\n\n[![Build status](https://github.com/git/git/workflows/CI/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n\nGit - fast, scalable, distributed revision control system\n=========================================================\n\nGit is a fast, scalable, distributed revision control system with an\nunusually rich command set that provides both high-level operations\nand full access to internals.\n\n[中略]\n",[77,420,421,435,448,478,498,504,554,558,584,590,595,625,655,673,678],{"__ignoreMap":174},[178,422,423,425,427,429,432],{"class":180,"line":181},[178,424,185],{"class":184},[178,426,189],{"class":188},[178,428,373],{"class":188},[178,430,431],{"class":195}," -p",[178,433,434],{"class":188}," HEAD:README.md\n",[178,436,437,439,441,443,446],{"class":180,"line":208},[178,438,229],{"class":184},[178,440,232],{"class":188},[178,442,235],{"class":188},[178,444,445],{"class":188}," 1,",[178,447,241],{"class":188},[178,449,450,452,454,456,458,461,464,466,469,472,474,476],{"class":180,"line":226},[178,451,229],{"class":184},[178,453,281],{"class":188},[178,455,308],{"class":195},[178,457,287],{"class":257},[178,459,460],{"class":195},"0",[178,462,463],{"class":257},"), reused 0 (",[178,465,296],{"class":184},[178,467,468],{"class":195}," 0",[178,470,471],{"class":257},"), pack-reused 1 (",[178,473,305],{"class":184},[178,475,308],{"class":195},[178,477,311],{"class":257},[178,479,480,482,484,486,489,491,494,496],{"class":180,"line":244},[178,481,317],{"class":184},[178,483,235],{"class":188},[178,485,254],{"class":188},[178,487,488],{"class":257}," (1/1), 1.64 KiB ",[178,490,328],{"class":327},[178,492,493],{"class":184}," 1.64",[178,495,334],{"class":188},[178,497,241],{"class":188},[178,499,500],{"class":180,"line":261},[178,501,503],{"emptyLinePlaceholder":502},true,"\n",[178,505,506,509,512,515,518,521,524,527,529,531,533,536,538,541,543,546,549,552],{"class":180,"line":276},[178,507,508],{"class":257},"[",[178,510,511],{"class":327},"!",[178,513,514],{"class":257},"[Build status](https",[178,516,517],{"class":327},"://",[178,519,520],{"class":257},"github.com",[178,522,523],{"class":327},"/",[178,525,526],{"class":257},"git",[178,528,523],{"class":327},[178,530,526],{"class":257},[178,532,523],{"class":327},[178,534,535],{"class":257},"workflows",[178,537,523],{"class":327},[178,539,540],{"class":257},"CI",[178,542,523],{"class":327},[178,544,545],{"class":257},"badge.svg)](",[178,547,548],{"class":184},"https://github.com/git/git/actions?query",[178,550,551],{"class":188},"=branch%3Amaster+event%3Apush",[178,553,311],{"class":257},[178,555,556],{"class":180,"line":314},[178,557,503],{"emptyLinePlaceholder":502},[178,559,560,563,566,569,572,575,578,581],{"class":180,"line":339},[178,561,562],{"class":184},"Git",[178,564,565],{"class":188}," -",[178,567,568],{"class":188}," fast,",[178,570,571],{"class":188}," scalable,",[178,573,574],{"class":188}," distributed",[178,576,577],{"class":188}," revision",[178,579,580],{"class":188}," control",[178,582,583],{"class":188}," system\n",[178,585,587],{"class":180,"line":586},9,[178,588,589],{"class":188},"=========================================================\n",[178,591,593],{"class":180,"line":592},10,[178,594,503],{"emptyLinePlaceholder":502},[178,596,598,600,603,606,608,610,612,614,616,619,622],{"class":180,"line":597},11,[178,599,562],{"class":184},[178,601,602],{"class":188}," is",[178,604,605],{"class":188}," a",[178,607,568],{"class":188},[178,609,571],{"class":188},[178,611,574],{"class":188},[178,613,577],{"class":188},[178,615,580],{"class":188},[178,617,618],{"class":188}," system",[178,620,621],{"class":188}," with",[178,623,624],{"class":188}," an\n",[178,626,628,631,634,637,640,643,646,649,652],{"class":180,"line":627},12,[178,629,630],{"class":184},"unusually",[178,632,633],{"class":188}," rich",[178,635,636],{"class":188}," command",[178,638,639],{"class":188}," set",[178,641,642],{"class":188}," that",[178,644,645],{"class":188}," provides",[178,647,648],{"class":188}," both",[178,650,651],{"class":188}," high-level",[178,653,654],{"class":188}," operations\n",[178,656,658,661,664,667,670],{"class":180,"line":657},13,[178,659,660],{"class":184},"and",[178,662,663],{"class":188}," full",[178,665,666],{"class":188}," access",[178,668,669],{"class":188}," to",[178,671,672],{"class":188}," internals.\n",[178,674,676],{"class":180,"line":675},14,[178,677,503],{"emptyLinePlaceholder":502},[178,679,681],{"class":180,"line":680},15,[178,682,683],{"class":257},"[中略]\n",[12,685,686],{},"ご覧のとおり、Gitはまずリモートリポジトリにアクセスし、blobをダウンロードしてから内容を表示しています。",[12,688,689,690,692],{},"このファイルに対して",[77,691,124],{},"を実行したい場合は、さらに多くのデータをダウンロードする必要があります。",[169,694,696],{"className":360,"code":695,"language":362,"meta":174,"style":174},"$ git blame HEAD README.md\nremote: Enumerating objects: 1, done.\nremote: Counting objects: 100% (1/1), done.\nremote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\nReceiving objects: 100% (1/1), 1.64 KiB | 1.64 MiB/s, done.\nremote: Enumerating objects: 1, done.\nremote: Counting objects: 100% (1/1), done.\nremote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\nReceiving objects: 100% (1/1), 1.64 KiB | 1.64 MiB/s, done.\nremote: Enumerating objects: 1, done.\nremote: Counting objects: 100% (1/1), done.\nremote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\nReceiving objects: 100% (1/1), 1.64 KiB | 1.64 MiB/s, done.\nremote: Enumerating objects: 1, done.\n\n[中略]\n\ndf7375d772 README.md (Ævar Arnfjörð Bjarmason 2021-11-23 17:29:09 +0100  1) [![Build status](https://github.com/git/git/workflows/CI/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n5f7864663b README.md (Johannes Schindelin   2019-01-29 06:19:32 -0800  2)\n28513c4f56 README.md (Matthieu Moy          2016-02-25 09:37:29 +0100  3) Git - fast, scalable, distributed revision control system\n28513c4f56 README.md (Matthieu Moy          2016-02-25 09:37:29 +0100  4) =========================================================\n556b6600b2 README   (Nicolas Pitre          2007-01-17 13:04:39 -0500  5)\n556b6600b2 README   (Nicolas Pitre          2007-01-17 13:04:39 -0500  6) Git is a fast, scalable, distributed revision control system with an\n556b6600b2 README   (Nicolas Pitre          2007-01-17 13:04:39 -0500  7) unusually rich command set that provides both high-level operations\n556b6600b2 README   (Nicolas Pitre          2007-01-17 13:04:39 -0500  8) and full access to internals.\n556b6600b2 README   (Nicolas Pitre          2007-01-17 13:04:39 -0500  9)\n\n[中略]\n",[77,697,698,713,725,738,765,783,795,807,833,851,863,875,901,919,931,935,940,945,1012,1040,1068,1091,1120,1143,1166,1189,1211,1216],{"__ignoreMap":174},[178,699,700,702,704,707,710],{"class":180,"line":181},[178,701,185],{"class":184},[178,703,189],{"class":188},[178,705,706],{"class":188}," blame",[178,708,709],{"class":188}," HEAD",[178,711,712],{"class":188}," README.md\n",[178,714,715,717,719,721,723],{"class":180,"line":208},[178,716,229],{"class":184},[178,718,232],{"class":188},[178,720,235],{"class":188},[178,722,445],{"class":188},[178,724,241],{"class":188},[178,726,727,729,731,733,735],{"class":180,"line":226},[178,728,229],{"class":184},[178,730,249],{"class":188},[178,732,235],{"class":188},[178,734,254],{"class":188},[178,736,737],{"class":257}," (1/1), done.\n",[178,739,740,742,744,746,748,750,752,754,756,759,761,763],{"class":180,"line":244},[178,741,229],{"class":184},[178,743,281],{"class":188},[178,745,308],{"class":195},[178,747,287],{"class":257},[178,749,460],{"class":195},[178,751,463],{"class":257},[178,753,296],{"class":184},[178,755,468],{"class":195},[178,757,758],{"class":257},"), pack-reused 0 (",[178,760,305],{"class":184},[178,762,468],{"class":195},[178,764,311],{"class":257},[178,766,767,769,771,773,775,777,779,781],{"class":180,"line":261},[178,768,317],{"class":184},[178,770,235],{"class":188},[178,772,254],{"class":188},[178,774,488],{"class":257},[178,776,328],{"class":327},[178,778,493],{"class":184},[178,780,334],{"class":188},[178,782,241],{"class":188},[178,784,785,787,789,791,793],{"class":180,"line":276},[178,786,229],{"class":184},[178,788,232],{"class":188},[178,790,235],{"class":188},[178,792,445],{"class":188},[178,794,241],{"class":188},[178,796,797,799,801,803,805],{"class":180,"line":314},[178,798,229],{"class":184},[178,800,249],{"class":188},[178,802,235],{"class":188},[178,804,254],{"class":188},[178,806,737],{"class":257},[178,808,809,811,813,815,817,819,821,823,825,827,829,831],{"class":180,"line":339},[178,810,229],{"class":184},[178,812,281],{"class":188},[178,814,308],{"class":195},[178,816,287],{"class":257},[178,818,460],{"class":195},[178,820,463],{"class":257},[178,822,296],{"class":184},[178,824,468],{"class":195},[178,826,758],{"class":257},[178,828,305],{"class":184},[178,830,468],{"class":195},[178,832,311],{"class":257},[178,834,835,837,839,841,843,845,847,849],{"class":180,"line":586},[178,836,317],{"class":184},[178,838,235],{"class":188},[178,840,254],{"class":188},[178,842,488],{"class":257},[178,844,328],{"class":327},[178,846,493],{"class":184},[178,848,334],{"class":188},[178,850,241],{"class":188},[178,852,853,855,857,859,861],{"class":180,"line":592},[178,854,229],{"class":184},[178,856,232],{"class":188},[178,858,235],{"class":188},[178,860,445],{"class":188},[178,862,241],{"class":188},[178,864,865,867,869,871,873],{"class":180,"line":597},[178,866,229],{"class":184},[178,868,249],{"class":188},[178,870,235],{"class":188},[178,872,254],{"class":188},[178,874,737],{"class":257},[178,876,877,879,881,883,885,887,889,891,893,895,897,899],{"class":180,"line":627},[178,878,229],{"class":184},[178,880,281],{"class":188},[178,882,308],{"class":195},[178,884,287],{"class":257},[178,886,460],{"class":195},[178,888,463],{"class":257},[178,890,296],{"class":184},[178,892,468],{"class":195},[178,894,758],{"class":257},[178,896,305],{"class":184},[178,898,468],{"class":195},[178,900,311],{"class":257},[178,902,903,905,907,909,911,913,915,917],{"class":180,"line":657},[178,904,317],{"class":184},[178,906,235],{"class":188},[178,908,254],{"class":188},[178,910,488],{"class":257},[178,912,328],{"class":327},[178,914,493],{"class":184},[178,916,334],{"class":188},[178,918,241],{"class":188},[178,920,921,923,925,927,929],{"class":180,"line":675},[178,922,229],{"class":184},[178,924,232],{"class":188},[178,926,235],{"class":188},[178,928,445],{"class":188},[178,930,241],{"class":188},[178,932,933],{"class":180,"line":680},[178,934,503],{"emptyLinePlaceholder":502},[178,936,938],{"class":180,"line":937},16,[178,939,683],{"class":257},[178,941,943],{"class":180,"line":942},17,[178,944,503],{"emptyLinePlaceholder":502},[178,946,948,951,954,957,960,963,966,969,972,975,978,980,982,984,986,988,990,992,994,996,998,1000,1002,1004,1006,1008,1010],{"class":180,"line":947},18,[178,949,950],{"class":184},"df7375d772",[178,952,953],{"class":188}," README.md",[178,955,956],{"class":257}," (Ævar ",[178,958,959],{"class":188},"Arnfjörð",[178,961,962],{"class":188}," Bjarmason",[178,964,965],{"class":188}," 2021-11-23",[178,967,968],{"class":188}," 17:29:09",[178,970,971],{"class":188}," +0100",[178,973,974],{"class":195},"  1",[178,976,977],{"class":257},") [",[178,979,511],{"class":327},[178,981,514],{"class":257},[178,983,517],{"class":327},[178,985,520],{"class":257},[178,987,523],{"class":327},[178,989,526],{"class":257},[178,991,523],{"class":327},[178,993,526],{"class":257},[178,995,523],{"class":327},[178,997,535],{"class":257},[178,999,523],{"class":327},[178,1001,540],{"class":257},[178,1003,523],{"class":327},[178,1005,545],{"class":257},[178,1007,548],{"class":184},[178,1009,551],{"class":188},[178,1011,311],{"class":257},[178,1013,1015,1018,1020,1023,1026,1029,1032,1035,1038],{"class":180,"line":1014},19,[178,1016,1017],{"class":184},"5f7864663b",[178,1019,953],{"class":188},[178,1021,1022],{"class":257}," (Johannes ",[178,1024,1025],{"class":188},"Schindelin",[178,1027,1028],{"class":188},"   2019-01-29",[178,1030,1031],{"class":188}," 06:19:32",[178,1033,1034],{"class":195}," -0800",[178,1036,1037],{"class":195},"  2",[178,1039,311],{"class":257},[178,1041,1043,1046,1048,1051,1054,1057,1060,1062,1065],{"class":180,"line":1042},20,[178,1044,1045],{"class":184},"28513c4f56",[178,1047,953],{"class":188},[178,1049,1050],{"class":257}," (Matthieu ",[178,1052,1053],{"class":188},"Moy",[178,1055,1056],{"class":188},"          2016-02-25",[178,1058,1059],{"class":188}," 09:37:29",[178,1061,971],{"class":188},[178,1063,1064],{"class":195},"  3",[178,1066,1067],{"class":257},") Git - fast, scalable, distributed revision control system\n",[178,1069,1071,1073,1075,1077,1079,1081,1083,1085,1088],{"class":180,"line":1070},21,[178,1072,1045],{"class":184},[178,1074,953],{"class":188},[178,1076,1050],{"class":257},[178,1078,1053],{"class":188},[178,1080,1056],{"class":188},[178,1082,1059],{"class":188},[178,1084,971],{"class":188},[178,1086,1087],{"class":195},"  4",[178,1089,1090],{"class":257},") =========================================================\n",[178,1092,1094,1097,1100,1103,1106,1109,1112,1115,1118],{"class":180,"line":1093},22,[178,1095,1096],{"class":184},"556b6600b2",[178,1098,1099],{"class":188}," README",[178,1101,1102],{"class":257},"   (Nicolas ",[178,1104,1105],{"class":188},"Pitre",[178,1107,1108],{"class":188},"          2007-01-17",[178,1110,1111],{"class":188}," 13:04:39",[178,1113,1114],{"class":195}," -0500",[178,1116,1117],{"class":195},"  5",[178,1119,311],{"class":257},[178,1121,1123,1125,1127,1129,1131,1133,1135,1137,1140],{"class":180,"line":1122},23,[178,1124,1096],{"class":184},[178,1126,1099],{"class":188},[178,1128,1102],{"class":257},[178,1130,1105],{"class":188},[178,1132,1108],{"class":188},[178,1134,1111],{"class":188},[178,1136,1114],{"class":195},[178,1138,1139],{"class":195},"  6",[178,1141,1142],{"class":257},") Git is a fast, scalable, distributed revision control system with an\n",[178,1144,1146,1148,1150,1152,1154,1156,1158,1160,1163],{"class":180,"line":1145},24,[178,1147,1096],{"class":184},[178,1149,1099],{"class":188},[178,1151,1102],{"class":257},[178,1153,1105],{"class":188},[178,1155,1108],{"class":188},[178,1157,1111],{"class":188},[178,1159,1114],{"class":195},[178,1161,1162],{"class":195},"  7",[178,1164,1165],{"class":257},") unusually rich command set that provides both high-level operations\n",[178,1167,1169,1171,1173,1175,1177,1179,1181,1183,1186],{"class":180,"line":1168},25,[178,1170,1096],{"class":184},[178,1172,1099],{"class":188},[178,1174,1102],{"class":257},[178,1176,1105],{"class":188},[178,1178,1108],{"class":188},[178,1180,1111],{"class":188},[178,1182,1114],{"class":195},[178,1184,1185],{"class":195},"  8",[178,1187,1188],{"class":257},") and full access to internals.\n",[178,1190,1192,1194,1196,1198,1200,1202,1204,1206,1209],{"class":180,"line":1191},26,[178,1193,1096],{"class":184},[178,1195,1099],{"class":188},[178,1197,1102],{"class":257},[178,1199,1105],{"class":188},[178,1201,1108],{"class":188},[178,1203,1111],{"class":188},[178,1205,1114],{"class":195},[178,1207,1208],{"class":195},"  9",[178,1210,311],{"class":257},[178,1212,1214],{"class":180,"line":1213},27,[178,1215,503],{"emptyLinePlaceholder":502},[178,1217,1219],{"class":180,"line":1218},28,[178,1220,683],{"class":257},[12,1222,1223,1224,1226],{},"出力は省略していますが、ご覧のように、Gitはそのファイルの各リビジョンについて個別にサーバーへアクセスしています。これはとても非効率的です。そこで",[77,1225,134],{},"を使えば、Gitに対してすべてのblobを一括でダウンロードするよう指示できます。",[169,1228,1230],{"className":171,"code":1229,"language":173,"meta":174,"style":174},"$ git backfill\nremote: Enumerating objects: 50711, done.\nremote: Counting objects: 100% (15438/15438), done.\nremote: Compressing objects: 100% (708/708), done.\nremote: Total 50711 (delta 15154), reused 14730 (delta 14730), pack-reused 35273 (from 1)\nReceiving objects: 100% (50711/50711), 11.62 MiB | 12.28 MiB/s, done.\nResolving deltas: 100% (49154/49154), done.\nremote: Enumerating objects: 50017, done.\nremote: Counting objects: 100% (10826/10826), done.\nremote: Compressing objects: 100% (634/634), done.\nremote: Total 50017 (delta 10580), reused 10192 (delta 10192), pack-reused 39191 (from 1)\nReceiving objects: 100% (50017/50017), 12.17 MiB | 12.33 MiB/s, done.\nResolving deltas: 100% (48301/48301), done.\nremote: Enumerating objects: 47303, done.\nremote: Counting objects: 100% (7311/7311), done.\nremote: Compressing objects: 100% (618/618), done.\nremote: Total 47303 (delta 7021), reused 6693 (delta 6693), pack-reused 39992 (from 1)\nReceiving objects: 100% (47303/47303), 40.84 MiB | 15.26 MiB/s, done.\nResolving deltas: 100% (43788/43788), done.\n",[77,1231,1232,1241,1254,1267,1280,1311,1331,1342,1355,1368,1381,1412,1432,1443,1456,1469,1482,1513,1533],{"__ignoreMap":174},[178,1233,1234,1236,1238],{"class":180,"line":181},[178,1235,185],{"class":184},[178,1237,189],{"class":188},[178,1239,1240],{"class":188}," backfill\n",[178,1242,1243,1245,1247,1249,1252],{"class":180,"line":208},[178,1244,229],{"class":184},[178,1246,232],{"class":188},[178,1248,235],{"class":188},[178,1250,1251],{"class":188}," 50711,",[178,1253,241],{"class":188},[178,1255,1256,1258,1260,1262,1264],{"class":180,"line":226},[178,1257,229],{"class":184},[178,1259,249],{"class":188},[178,1261,235],{"class":188},[178,1263,254],{"class":188},[178,1265,1266],{"class":257}," (15438/15438), done.\n",[178,1268,1269,1271,1273,1275,1277],{"class":180,"line":244},[178,1270,229],{"class":184},[178,1272,266],{"class":188},[178,1274,235],{"class":188},[178,1276,254],{"class":188},[178,1278,1279],{"class":257}," (708/708), done.\n",[178,1281,1282,1284,1286,1289,1291,1294,1297,1299,1302,1305,1307,1309],{"class":180,"line":261},[178,1283,229],{"class":184},[178,1285,281],{"class":188},[178,1287,1288],{"class":195}," 50711",[178,1290,287],{"class":257},[178,1292,1293],{"class":195},"15154",[178,1295,1296],{"class":257},"), reused 14730 (",[178,1298,296],{"class":184},[178,1300,1301],{"class":195}," 14730",[178,1303,1304],{"class":257},"), pack-reused 35273 (",[178,1306,305],{"class":184},[178,1308,308],{"class":195},[178,1310,311],{"class":257},[178,1312,1313,1315,1317,1319,1322,1324,1327,1329],{"class":180,"line":276},[178,1314,317],{"class":184},[178,1316,235],{"class":188},[178,1318,254],{"class":188},[178,1320,1321],{"class":257}," (50711/50711), 11.62 MiB ",[178,1323,328],{"class":327},[178,1325,1326],{"class":184}," 12.28",[178,1328,334],{"class":188},[178,1330,241],{"class":188},[178,1332,1333,1335,1337,1339],{"class":180,"line":314},[178,1334,342],{"class":184},[178,1336,345],{"class":188},[178,1338,254],{"class":188},[178,1340,1341],{"class":257}," (49154/49154), done.\n",[178,1343,1344,1346,1348,1350,1353],{"class":180,"line":339},[178,1345,229],{"class":184},[178,1347,232],{"class":188},[178,1349,235],{"class":188},[178,1351,1352],{"class":188}," 50017,",[178,1354,241],{"class":188},[178,1356,1357,1359,1361,1363,1365],{"class":180,"line":586},[178,1358,229],{"class":184},[178,1360,249],{"class":188},[178,1362,235],{"class":188},[178,1364,254],{"class":188},[178,1366,1367],{"class":257}," (10826/10826), done.\n",[178,1369,1370,1372,1374,1376,1378],{"class":180,"line":592},[178,1371,229],{"class":184},[178,1373,266],{"class":188},[178,1375,235],{"class":188},[178,1377,254],{"class":188},[178,1379,1380],{"class":257}," (634/634), done.\n",[178,1382,1383,1385,1387,1390,1392,1395,1398,1400,1403,1406,1408,1410],{"class":180,"line":597},[178,1384,229],{"class":184},[178,1386,281],{"class":188},[178,1388,1389],{"class":195}," 50017",[178,1391,287],{"class":257},[178,1393,1394],{"class":195},"10580",[178,1396,1397],{"class":257},"), reused 10192 (",[178,1399,296],{"class":184},[178,1401,1402],{"class":195}," 10192",[178,1404,1405],{"class":257},"), pack-reused 39191 (",[178,1407,305],{"class":184},[178,1409,308],{"class":195},[178,1411,311],{"class":257},[178,1413,1414,1416,1418,1420,1423,1425,1428,1430],{"class":180,"line":627},[178,1415,317],{"class":184},[178,1417,235],{"class":188},[178,1419,254],{"class":188},[178,1421,1422],{"class":257}," (50017/50017), 12.17 MiB ",[178,1424,328],{"class":327},[178,1426,1427],{"class":184}," 12.33",[178,1429,334],{"class":188},[178,1431,241],{"class":188},[178,1433,1434,1436,1438,1440],{"class":180,"line":657},[178,1435,342],{"class":184},[178,1437,345],{"class":188},[178,1439,254],{"class":188},[178,1441,1442],{"class":257}," (48301/48301), done.\n",[178,1444,1445,1447,1449,1451,1454],{"class":180,"line":675},[178,1446,229],{"class":184},[178,1448,232],{"class":188},[178,1450,235],{"class":188},[178,1452,1453],{"class":188}," 47303,",[178,1455,241],{"class":188},[178,1457,1458,1460,1462,1464,1466],{"class":180,"line":680},[178,1459,229],{"class":184},[178,1461,249],{"class":188},[178,1463,235],{"class":188},[178,1465,254],{"class":188},[178,1467,1468],{"class":257}," (7311/7311), done.\n",[178,1470,1471,1473,1475,1477,1479],{"class":180,"line":937},[178,1472,229],{"class":184},[178,1474,266],{"class":188},[178,1476,235],{"class":188},[178,1478,254],{"class":188},[178,1480,1481],{"class":257}," (618/618), done.\n",[178,1483,1484,1486,1488,1491,1493,1496,1499,1501,1504,1507,1509,1511],{"class":180,"line":942},[178,1485,229],{"class":184},[178,1487,281],{"class":188},[178,1489,1490],{"class":195}," 47303",[178,1492,287],{"class":257},[178,1494,1495],{"class":195},"7021",[178,1497,1498],{"class":257},"), reused 6693 (",[178,1500,296],{"class":184},[178,1502,1503],{"class":195}," 6693",[178,1505,1506],{"class":257},"), pack-reused 39992 (",[178,1508,305],{"class":184},[178,1510,308],{"class":195},[178,1512,311],{"class":257},[178,1514,1515,1517,1519,1521,1524,1526,1529,1531],{"class":180,"line":947},[178,1516,317],{"class":184},[178,1518,235],{"class":188},[178,1520,254],{"class":188},[178,1522,1523],{"class":257}," (47303/47303), 40.84 MiB ",[178,1525,328],{"class":327},[178,1527,1528],{"class":184}," 15.26",[178,1530,334],{"class":188},[178,1532,241],{"class":188},[178,1534,1535,1537,1539,1541],{"class":180,"line":1014},[178,1536,342],{"class":184},[178,1538,345],{"class":188},[178,1540,254],{"class":188},[178,1542,1543],{"class":257}," (43788/43788), done.\n",[12,1545,1546],{},"これにより、すべてのblobが補完され、ブロブを含まないクローンが完全なクローンになります。",[169,1548,1550],{"className":171,"code":1549,"language":173,"meta":174,"style":174},"$ git cat-file --batch-all-objects --batch-check='%(objecttype)' | sort | uniq -c\n 148031 blob\n  83977 commit\n 161927 tree\n",[77,1551,1552,1576,1584,1590],{"__ignoreMap":174},[178,1553,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572,1574],{"class":180,"line":181},[178,1555,185],{"class":184},[178,1557,189],{"class":188},[178,1559,373],{"class":188},[178,1561,376],{"class":195},[178,1563,379],{"class":195},[178,1565,382],{"class":188},[178,1567,385],{"class":327},[178,1569,388],{"class":184},[178,1571,385],{"class":327},[178,1573,393],{"class":184},[178,1575,396],{"class":195},[178,1577,1578,1581],{"class":180,"line":208},[178,1579,1580],{"class":184}," 148031",[178,1582,1583],{"class":188}," blob\n",[178,1585,1586,1588],{"class":180,"line":226},[178,1587,401],{"class":184},[178,1589,404],{"class":188},[178,1591,1592,1594],{"class":180,"line":244},[178,1593,409],{"class":184},[178,1595,412],{"class":188},[12,1597,1598,1599,1604,1605,1610,1611,1616],{},"この",[16,1600,1603],{"href":1601,"rel":1602},"https://lore.kernel.org/git/pull.1820.v3.git.1738602667.gitgitgadget@gmail.com/",[],"プロジェクト","は",[16,1606,1609],{"href":1607,"rel":1608},"https://stolee.dev/",[],"Derrick Stolee","によって主導され、",[16,1612,1615],{"href":1613,"rel":1614},"https://gitlab.com/gitlab-org/git/-/commit/e565f3755342caf1d21e22359eaf09ec11d8c0ae",[],"e565f37553","でマージされました。",[82,1618,40],{"id":40},[12,1620,1621,1624,1625,1632,1633,1604,1635,1640,1641,1643],{},[77,1622,1623],{},".git/","フォルダ内のすべてのオブジェクトは、Gitによって",[16,1626,1629],{"href":1627,"rel":1628},"https://zlib.net/",[],[77,1630,1631],{},"zlib","を使って圧縮されています。",[77,1634,1631],{},[16,1636,1639],{"href":1637,"rel":1638},"https://datatracker.ietf.org/doc/html/rfc1950",[],"RFC\n1950","（ZLIB圧縮データフォーマット）のリファレンス実装であり、1995年に作られました。",[77,1642,1631],{},"は長い歴史を持ち、非常に高い移植性があり、\nインターネット以前の多くのシステムもサポートしています。このように幅広いアーキテクチャやコンパイラをサポートしている一方で、\nzlibには機能面での制限もあります。",[12,1645,1646,1647,1654,1655,1657],{},"その制限に対応するために生まれたのが",[16,1648,1651],{"href":1649,"rel":1650},"https://github.com/zlib-ng/zlib-ng",[],[77,1652,1653],{},"zlib-ng","というフォークです。\n",[77,1656,1653],{},"は、現代的なシステム向けに最適化されることを目指しており、レガシーシステムのサポートを廃止する代わりに、\nIntel向けの最適化パッチや、Cloudflareによる最適化、その他いくつかの小規模なパッチが取り込まれています。",[12,1659,1660,1662,1663,1665,1666,1668,1669,1671],{},[77,1661,1653],{},"ライブラリ自体は",[77,1664,1631],{},"との互換レイヤーを提供しており、この互換性により、",[77,1667,1653],{},"を",[77,1670,1631],{},"の代替としてそのまま差し替えて使うことが可能です。\nただし、この互換レイヤーはすべてのLinuxディストリビューションで利用できるわけではありません。Git 2.49では以下の変更が加えられました。",[26,1673,1674,1677],{},[29,1675,1676],{},"Gitプロジェクトへのzlib-ng互換レイヤーの追加",[29,1678,1679,1686,1687,1692],{},[16,1680,1683],{"href":1681,"rel":1682},"https://gitlab.com/gitlab-org/git/-/blob/b9d6f64393275b505937a8621a6cc4875adde8e0/Makefile#L186-187",[],[77,1684,1685],{},"Makefile","および",[16,1688,1691],{"href":1689,"rel":1690},"https://gitlab.com/gitlab-org/git/-/blob/b9d6f64393275b505937a8621a6cc4875adde8e0/meson.build#L795-811",[],"Mesonビルドファイル","へのビルドオプションの追加",[12,1694,1695,1696,1698],{},"これらの追加により、",[77,1697,1653],{},"によるパフォーマンス向上の恩恵を受けやすくなりました。",[12,1700,1701,1702,1704,1705,1707],{},"ローカルでのベンチマークでは、",[77,1703,1631],{},"ではなく",[77,1706,1653],{},"を使用することで約25%の高速化が確認されています。現在、これらの変更をGitLab.comにも順次導入中です。",[12,1709,1710,1712,1713,1716,1717,1719],{},[77,1711,1653],{},"によるパフォーマンス向上の恩恵を受けたい場合は、まず",[77,1714,1715],{},"git version --build-options","コマンドを実行して、お使いのマシンでGitがすでに",[77,1718,1653],{},"を使用しているかどうかを確認してください。",[169,1721,1723],{"className":171,"code":1722,"language":173,"meta":174,"style":174},"$ git version --build-options\ngit version 2.47.1\ncpu: x86_64\nno commit associated with this build\nsizeof-long: 8\nsizeof-size_t: 8\nshell-path: /bin/sh\nlibcurl: 8.6.0\nOpenSSL: OpenSSL 3.2.2 4 Jun 2024\nzlib: 1.3.1.zlib-ng\n",[77,1724,1725,1737,1746,1754,1773,1781,1788,1796,1804,1824],{"__ignoreMap":174},[178,1726,1727,1729,1731,1734],{"class":180,"line":181},[178,1728,185],{"class":184},[178,1730,189],{"class":188},[178,1732,1733],{"class":188}," version",[178,1735,1736],{"class":195}," --build-options\n",[178,1738,1739,1741,1743],{"class":180,"line":208},[178,1740,526],{"class":184},[178,1742,1733],{"class":188},[178,1744,1745],{"class":195}," 2.47.1\n",[178,1747,1748,1751],{"class":180,"line":226},[178,1749,1750],{"class":184},"cpu:",[178,1752,1753],{"class":188}," x86_64\n",[178,1755,1756,1759,1762,1765,1767,1770],{"class":180,"line":244},[178,1757,1758],{"class":184},"no",[178,1760,1761],{"class":188}," commit",[178,1763,1764],{"class":188}," associated",[178,1766,621],{"class":188},[178,1768,1769],{"class":188}," this",[178,1771,1772],{"class":188}," build\n",[178,1774,1775,1778],{"class":180,"line":261},[178,1776,1777],{"class":184},"sizeof-long:",[178,1779,1780],{"class":195}," 8\n",[178,1782,1783,1786],{"class":180,"line":276},[178,1784,1785],{"class":184},"sizeof-size_t:",[178,1787,1780],{"class":195},[178,1789,1790,1793],{"class":180,"line":314},[178,1791,1792],{"class":184},"shell-path:",[178,1794,1795],{"class":188}," /bin/sh\n",[178,1797,1798,1801],{"class":180,"line":339},[178,1799,1800],{"class":184},"libcurl:",[178,1802,1803],{"class":195}," 8.6.0\n",[178,1805,1806,1809,1812,1815,1818,1821],{"class":180,"line":586},[178,1807,1808],{"class":184},"OpenSSL:",[178,1810,1811],{"class":188}," OpenSSL",[178,1813,1814],{"class":195}," 3.2.2",[178,1816,1817],{"class":195}," 4",[178,1819,1820],{"class":188}," Jun",[178,1822,1823],{"class":195}," 2024\n",[178,1825,1826,1829],{"class":180,"line":592},[178,1827,1828],{"class":184},"zlib:",[178,1830,1831],{"class":188}," 1.3.1.zlib-ng\n",[12,1833,1834,1835,1837,1838,1840],{},"出力の一番下の行に",[77,1836,1653],{},"と表示されていれば、すでにGitは高速な",[77,1839,1631],{},"のバリアントでビルドされています。表示されていない場合は、以下のいずれかの方法で対応できます。",[26,1842,1843,1849],{},[29,1844,1845,1846,1848],{},"お使いのGitパッケージのメンテナーに、",[77,1847,1653],{},"のサポートを有効にしてもらうよう依頼する",[29,1850,1851],{},"Gitをソースコードから自分でビルドする",[12,1853,1854,1855,1860,1861,1866,1867,1872],{},"なお、これらの",[16,1856,1859],{"href":1857,"rel":1858},"https://gitlab.com/gitlab-org/git/-/commit/9d0e81e2ae3bd7f6d8a655be53c2396d7af3d2b0",[],"変更","\nは",[16,1862,1865],{"href":1863,"rel":1864},"https://gitlab.com/pks-gitlab",[],"Patrick Steinhardt","によって",[16,1868,1871],{"href":1869,"rel":1870},"https://lore.kernel.org/git/20250128-b4-pks-compat-drop-uncompress2-v4-0-129bc36ae8f5@pks.im/",[],"導入","されました。",[82,1874,46],{"id":1875},"mesonの継続的なイテレーション",[12,1877,1878,1879,1884,1885,1890,1891,1896,1897,1902,1903,1908],{},"Git 2.48のリリースについて紹介した記事では、",[16,1880,1883],{"href":1881,"rel":1882},"https://about.gitlab.com/ja-jp/blog/whats-new-in-git-2-48-0/#meson%E3%83%93%E3%83%AB%E3%83%89%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0",[],"Mesonビルドシステムの導入","について触れました。",[16,1886,1889],{"href":1887,"rel":1888},"https://ja.wikipedia.org/wiki/Meson_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)",[],"Meson","は、Gitプロジェクトで使用されるビルド自動化ツールで、将来的には",[16,1892,1895],{"href":1893,"rel":1894},"https://ja.wikipedia.org/wiki/Autoconf",[],"Autoconf",",\n",[16,1898,1901],{"href":1899,"rel":1900},"https://ja.wikipedia.org/wiki/CMake",[],"CMake","さらには\n",[16,1904,1907],{"href":1905,"rel":1906},"https://ja.wikipedia.org/wiki/Make_(UNIX)",[],"Make","に取って代わる可能性もあります。",[12,1910,1911],{},"今回のリリースサイクルでも、Mesonの利用に関する作業が引き続き進められ、不足していた機能の追加や安定性向上のための以下の修正が行われました。",[26,1913,1914,1928],{},[29,1915,1916,1921,1922,1927],{},[16,1917,1920],{"href":1918,"rel":1919},"https://lore.kernel.org/git/20250122-b4-pks-meson-additions-v3-0-5a51eb5d3dcd@pks.im/",[],"CIのテストカバレッジ改善","が、コミット",[16,1923,1926],{"href":1924,"rel":1925},"https://gitlab.com/gitlab-org/git/-/commit/72f1ddfbc95b47c6011bb423e6947418d1d72709",[],"72f1ddfbc9","でマージされました",[29,1929,1930,1921,1938,1943,1944],{},[16,1931,1934,1937],{"href":1932,"rel":1933},"https://lore.kernel.org/git/20250219-b4-pks-meson-contrib-v2-0-1ba5d7fde0b9@pks.im/",[],[77,1935,1936],{},"contrib/","ディレクトリでMesonを使えるようにする作業の一部",[16,1939,1942],{"href":1940,"rel":1941},"https://gitlab.com/gitlab-org/git/-/commit/2a1530a953cc4d2ae62416db86c545c7ccb73ace",[],"2a1530a953","でマージされました\n",[26,1945,1946,1958,1970],{},[29,1947,1948,1921,1953,1927],{},[16,1949,1952],{"href":1950,"rel":1951},"https://lore.kernel.org/git/20250226-b4-pks-meson-improvements-v3-0-60c77cf673ae@pks.im/",[],"Mesonベースのビルド手順に関する修正や改善",[16,1954,1957],{"href":1955,"rel":1956},"https://gitlab.com/gitlab-org/git/-/commit/ab09eddf601501290b5c719574fbe6c02314631f",[],"ab09eddf60",[29,1959,1960,1921,1965,1927],{},[16,1961,1964],{"href":1962,"rel":1963},"https://lore.kernel.org/git/20250117-b4-pks-build-subtree-v1-0-03c2ed6cc42e@pks.im/",[],"git-subtree(1)のビルドにMesonを対応させる変更",[16,1966,1969],{"href":1967,"rel":1968},"https://gitlab.com/gitlab-org/git/-/commit/3ddeb7f3373ae0e309d9df62ada24375afa456c7",[],"3ddeb7f337",[29,1971,1972,1921,1977,1927],{},[16,1973,1976],{"href":1974,"rel":1975},"https://lore.kernel.org/git/20241227-b4-pks-meson-docs-v2-0-f61e63edbfa1@pks.im/",[],"MesonにHTMLドキュメントページの生成を学習させる変更",[16,1978,1981],{"href":1979,"rel":1980},"https://gitlab.com/gitlab-org/git/-/commit/1b4e9a5f8b5f048972c21fe8acafe0404096f694",[],"1b4e9a5f8b",[12,1983,1984,1985,1988],{},"これらの作業はすべて",[16,1986,1865],{"href":1863,"rel":1987},[],"によって行われました。",[82,1990,52],{"id":1991},"gitbranchesおよびgitremotesの非推奨化",[12,1993,1994,1995,1998,1999,2002,2003,2006,2007,2010,2011,2013,2014,2016],{},"おそらく、 ",[77,1996,1997],{},".git","ディレクトリやその中身についてはご存じかと思います。\nしかし、 ",[77,2000,2001],{},".git/branches/","や",[77,2004,2005],{},".git/remotes/","というサブディレクトリの存在についてはどうでしょうか？\nご存じの通り、ブランチへの参照は",[77,2008,2009],{},".git/refs/heads/","に保存されているため、",[77,2012,2001],{},"はそのための場所ではありません。そして、",[77,2015,2005],{},"の用途は何でしょうか？",[12,2018,2019,2020,2026,2027,2033,2034,2039,2040,2047,2048,2053,2054,2056,2057,2059,2060,2065],{},"2005年、",[16,2021,2024],{"href":2022,"rel":2023},"https://git-scm.com/docs/git-fetch#_named_file_in_git_dirbranches",[],[77,2025,2001],{},"はリモートの短縮名を保存するために導入されました。そしてその数か月後に、それらは",[16,2028,2031],{"href":2029,"rel":2030},"https://git-scm.com/docs/git-fetch#_named_file_in_git_dirremotes",[],[77,2032,2005],{},"に移動されました。\n",[16,2035,2038],{"href":2036,"rel":2037},"https://lore.kernel.org/git/Pine.LNX.4.63.0604301520460.2646@wbgn013.biozentrum.uni-wuerzburg.de/",[],"2006年","には、",[16,2041,2044],{"href":2042,"rel":2043},"https://git-scm.com/docs/git-config",[],[77,2045,2046],{},"git-config(1)","に",[16,2049,2052],{"href":2050,"rel":2051},"https://git-scm.com/docs/git-config#Documentation/git-config.txt-remoteltnamegturl",[],"リモート","設定を保存する機能が追加され、\nこれがリモートを設定する標準的な方法として定着しました。\nその後2011年には、",[77,2055,2001],{},"と",[77,2058,2005],{},"は「レガシー」であることが",[16,2061,2064],{"href":2062,"rel":2063},"https://gitlab.com/git-scm/git/-/commit/3d3d282146e13f2d7f055ad056956fd8e5d7ed29#e615263aaf131d42be8b0d0888ebd3fec954c6c9_132_124",[],"文書化","され、現代のリポジトリでは使用されなくなりました。",[12,2067,2068,2069,2074,2075,2080,2081,1686,2083,2085],{},"そして2024年、Gitの次のメジャーバージョン（v3.0）の破壊的な変更の概要をまとめるドキュメント",[16,2070,2073],{"href":2071,"rel":2072},"https://git-scm.com/docs/BreakingChanges",[],"破壊的な変更","が作成されました。\nこのリリースはすぐに行われる予定はありませんが、このドキュメントにはそのリリースに含まれると予想される変更点について記載されています。\nコミット",[16,2076,2079],{"href":2077,"rel":2078},"https://gitlab.com/git-scm/git/-/commit/8ccc75c2452b5814d2445d60d54266293ca48674",[],"8ccc75c245","では、",[77,2082,2001],{},[77,2084,2005],{},"ディレクトリの使用に関する内容がこのドキュメントに追加され、これにより公式に非推奨とされ、Git 3.0で削除予定であることが明示されました。",[12,2087,2088,2093,2094,2097],{},[16,2089,2092],{"href":2090,"rel":2091},"https://lore.kernel.org/git/20250122-pks-remote-branches-deprecation-v4-5-5cbf5b28afd5@pks.im/",[],"この非推奨化を正式に文書化","した",[16,2095,1865],{"href":1863,"rel":2096},[],"に感謝します。",[82,2099,58],{"id":2100},"libgitに対するrustバインディング",[12,2102,2103,2104,2107],{},"Gitをコンパイルすると、内部ライブラリ",[77,2105,2106],{},"libgit.a","が生成されます。このライブラリには、Gitの中核となる機能の一部が含まれています。",[12,2109,2110,2111,2056,2114,2117,2118,2124],{},"このライブラリ（およびGitの大部分）はC言語で書かれていますが、Git 2.49では一部の関数をRustから使えるようにするためのバインディングが追加されました。この実現のために、2つの新しいCargoパッケージ、",[77,2112,2113],{},"libgit-sys",[77,2115,2116],{},"libgit-rs","が作成されました。これらのパッケージは、GitのSourceTree内の",[16,2119,2122],{"href":2120,"rel":2121},"https://gitlab.com/gitlab-org/git/-/tree/master/contrib",[],[77,2123,1936],{},"サブディレクトリに配置されています。",[12,2126,2127,2132,2133,2138,2139,2141,2142,2144,2145,2147,2148,2150],{},[16,2128,2131],{"href":2129,"rel":2130},"https://ja.wikipedia.org/wiki/Foreign_function_interface",[],"他言語関数インターフェイス","を使う場合、ライブラリを2つのパッケージに分けるのは",[16,2134,2137],{"href":2135,"rel":2136},"https://doc.rust-lang.org/cargo/reference/build-scripts.html#-sys-packages",[],"一般的","な手法です。\n",[77,2140,2113],{},"パッケージは、C関数への純粋なインターフェースを提供し、ネイティブの",[77,2143,2106],{},"にリンクします。一方、",[77,2146,2116],{},"パッケージは、",[77,2149,2113],{},"の関数をRustらしいスタイルで扱える高レベルなインターフェースを提供します。",[12,2152,2153,2154,2156],{},"現時点では、これらのRustパッケージで使える機能は非常に限定的で、対応しているのは",[77,2155,2046],{},"とやり取りするためのインターフェースのみです。",[12,2158,2159,2160,2165,2166,1616],{},"この取り組みは",[16,2161,2164],{"href":2162,"rel":2163},"https://lore.kernel.org/git/8793ff64a7f6c4c04dd03b71162a85849feda944.1738187176.git.steadmon@google.com/",[],"Josh Steadmon","さんによって主導され、コミット",[16,2167,2170],{"href":2168,"rel":2169},"https://gitlab.com/gitlab-org/git/-/commit/a4af0b6288e25eb327ae9018cee09def9e43f1cd",[],"a4af0b6288",[82,2172,64],{"id":64},[12,2174,2175,2177],{},[77,2176,1623],{},"にあるGitのオブジェクトデータベースは、その大部分のデータを パックファイルに保存しています。また、このパックファイルは、Gitのサーバーとクライアント間でオブジェクトをやり取りする際にも使われます。",[12,2179,2180,2181,2188],{},"パックファイルのフォーマットについては、",[16,2182,2185],{"href":2183,"rel":2184},"https://git-scm.com/docs/gitformat-pack",[],[77,2186,2187],{},"gitformat-pack(5)","に詳しく書かれていますが、その中でも重要なのが差分圧縮です。差分圧縮では、すべてのオブジェクトがそのまま保存されるわけではなく、一部のオブジェクトは他のオブジェクトとの_差分_として保存されます。つまり、オブジェクトの内容全体を保存するのではなく、他のオブジェクトと比較した変更点だけを記録します。",[12,2190,2191,2192,2194],{},"差分の計算や保存方法についてはここでは詳しく触れませんが、\n非常に似ているファイルをグループ化しておくことが重要なのは想像できるかと思います。Git v2.48以前では、Gitは「ファイルパスの最後の16文字」をもとに、blobが似ているかどうかを判断していました。このアルゴリズムはバージョン",[77,2193,144],{},"と呼ばれています。",[12,2196,2197,2198,2200,2201,2203,2204,2211,2212,2215],{},"Git 2.49では、バージョン",[77,2199,148],{},"のアルゴリズムが追加されました。これはバージョン",[77,2202,144],{},"のイテレーションで、親ディレクトリの影響を減らすように調整されたバージョンです。どちらのアルゴリズムを使用するかは、",[16,2205,2208],{"href":2206,"rel":2207},"https://git-scm.com/docs/git-repack",[],[77,2209,2210],{},"git-repack(1)","の",[77,2213,2214],{},"--name-hash-version","オプションで指定できます。",[12,2217,2218,2219,2222,2223,2226],{},"以下は、このプロジェクトを推進した",[16,2220,1609],{"href":1607,"rel":2221},[],"さんによる、",[77,2224,2225],{},"git repack -adf --name-hash-version=\u003Cn>","を実行した際のパックファイルサイズの比較です。",[2228,2229,2230,2246],"table",{},[2231,2232,2233],"thead",{},[2234,2235,2236,2240,2243],"tr",{},[2237,2238,2239],"th",{},"リポジトリ",[2237,2241,2242],{},"バージョン1のサイズ",[2237,2244,2245],{},"バージョン2のサイズ",[2247,2248,2249,2265,2276,2287],"tbody",{},[2234,2250,2251,2259,2262],{},[2252,2253,2254],"td",{},[16,2255,2258],{"href":2256,"rel":2257},"https://github.com/microsoft/fluentui",[],"fluentui",[2252,2260,2261],{},"440 MB",[2252,2263,2264],{},"161 MB",[2234,2266,2267,2270,2273],{},[2252,2268,2269],{},"Repo B",[2252,2271,2272],{},"6,248 MB",[2252,2274,2275],{},"856 MB",[2234,2277,2278,2281,2284],{},[2252,2279,2280],{},"Repo C",[2252,2282,2283],{},"37,278 MB",[2252,2285,2286],{},"6,921 MB",[2234,2288,2289,2292,2295],{},[2252,2290,2291],{},"Repo D",[2252,2293,2294],{},"131,204 MB",[2252,2296,2297],{},"7,463 MB",[12,2299,2300,2301,2306,2307,2312],{},"この件に関する詳細は、コミット",[16,2302,2305],{"href":2303,"rel":2304},"https://gitlab.com/gitlab-org/git/-/commit/aae91a86fb2a71ff89a71b63ccec3a947b26ca51",[],"aae91a86fb","にマージされた",[16,2308,2311],{"href":2309,"rel":2310},"https://lore.kernel.org/git/pull.1823.v4.git.1738004554.gitgitgadget@gmail.com/",[],"パッチセット","にて確認できます。",[82,2314,70],{"id":70},[12,2316,2317,2318,2323],{},"Gitが大きなファイルを扱うのに向いていないことは、よく知られています。この問題に対する解決策として、",[16,2319,2322],{"href":2320,"rel":2321},"https://git-lfs.com/",[],"Git LFS","のようなツールがありますが、依然として以下のような欠点が残っています。",[26,2325,2326,2329,2332,2335],{},[29,2327,2328],{},"Git LFSでは、どのファイルをLFSに入れるかをユーザーが自分で設定する必要があり、サーバー側ではそれについて制御できず、すべてのファイルを提供する必要があります。",[29,2330,2331],{},"リポジトリにファイルがコミットされると、履歴を書き換えない限り、それを取り除く方法がありません。これは特に大きなファイルでは厄介で、一度入れると永遠に残ってしまいます。",[29,2333,2334],{},"ユーザーは、Git LFSに入れるファイルを後から変更することはできません。",[29,2336,2337],{},"Git LFS のようなツールは、導入・学習・運用すべてにそれなりの労力が必要です。",[12,2339,2340],{},"以前からGitにはプロミサーリモートという概念が存在しており、この機能を大きなファイルに対処するための手段として利用できます。そしてGit 2.49では、この機能がさらに一歩前進しました。",[12,2342,2343],{},"新しい「プロミサーリモート」機能の考え方は比較的シンプルです。Gitサーバーがすべてのオブジェクトを自ら送信する代わりに、「これらのオブジェクトは_XYZ_からダウンロードしてね」とGitクライアントに伝えます。この_XYZ_がプロミサーリモートです。",[12,2345,2346,2347,2354],{},"Git 2.49では、サーバーがプロミサーリモートの情報をクライアントに通知できるようになりました。この変更は、",[16,2348,2351],{"href":2349,"rel":2350},"https://git-scm.com/docs/gitprotocol-v2",[],[77,2352,2353],{},"gitprotocol-v2","の拡張として行われています。サーバーとクライアントがデータを送受信している間に、サーバーは自分が知っているプロミサーリモートの名前やURLをクライアントに送信します。",[12,2356,2357],{},"現時点では、Gitクライアントはクローン時にサーバーから受け取ったプロミサーリモートの情報をまだ利用していません。つまり、今のところは、クローン元のリモートからすべてのオブジェクトを取得しています。しかし今後は、サーバーから受け取ったプロミサーリモート情報を活用できるように開発を進め、より簡単に使える仕組みにしていく予定です。",[12,2359,1598,2360,1604,2364,2369,2370,1616],{},[16,2361,2311],{"href":2362,"rel":2363},"https://lore.kernel.org/git/20250218113204.2847463-1-christian.couder@gmail.com/",[],[16,2365,2368],{"href":2366,"rel":2367},"https://gitlab.com/chriscool",[],"Christian Couder","さんによって提出され、コミット",[16,2371,2374],{"href":2372,"rel":2373},"https://gitlab.com/gitlab-org/git/-/commit/2c6fd30198187c928cbf927802556908c381799c",[],"2c6fd30198",[82,2376,2378,80],{"id":2377},"revisionを使用した軽量なクローン",[77,2379,79],{},[12,2381,2382,2387,2388,2390,2391,2394,2395,2398,2399,2398,2402,2405,2406,2408,2409,2412],{},[16,2383,2385],{"href":89,"rel":2384},[],[77,2386,93],{},"に新しく",[77,2389,79],{},"オプションが追加されました。このオプションを使うことで、指定されたリビジョンの履歴のみを含む、軽量なクローンを作成できます。このオプションは",[77,2392,2393],{},"--branch","に似ていますが、",[77,2396,2397],{},"refs/heads/main","、",[77,2400,2401],{},"refs/tags/v1.0",[77,2403,2404],{},"refs/merge-requests/123","のような リファレンス名や、16進数のコミットオブジェクトIDを受け取る点が異なります。",[77,2407,2393],{},"との違いは、このオプションでは追跡ブランチが作られず、",[77,2410,2411],{},"HEAD","がデタッチ状態になる点です。そのため、このクローンを使ってブランチにコントリビュートするといった用途には向いていません。",[12,2414,2415,2056,2417,2420],{},[77,2416,79],{},[77,2418,2419],{},"--depth","を組み合わせて使うことで、非常にミニマルなクローンを作成できます。おすすめの用途は、自動テストです。たとえば、CIシステムが特定のブランチ（またはリファレンス）をチェックアウトして、ソースコードのテストを行うだけでいい場合、この最小限のクローンで十分です。",[12,2422,1598,2423,1604,2427,2431,2432,1872],{},[16,2424,1859],{"href":2425,"rel":2426},"https://gitlab.com/gitlab-org/git/-/commit/5785d9143bcb3ef19452a83bc2e870ff3d5ed95a",[],[16,2428,7],{"href":2429,"rel":2430},"https://gitlab.com/toon",[],"さんによって",[16,2433,2436],{"href":2434,"rel":2435},"https://lore.kernel.org/git/20250206-toon-clone-refs-v7-0-4622b7392202@iotcl.com/",[],"推進",[2438,2439,2440],"h1",{"id":2440},"もっと詳しく",[26,2442,2443,2450,2457],{},[29,2444,2445],{},[16,2446,2449],{"href":2447,"rel":2448},"https://about.gitlab.com/ja-jp/blog/whats-new-in-git-2-48-0/",[],"Git 2.48.0の新機能",[29,2451,2452],{},[16,2453,2456],{"href":2454,"rel":2455},"https://about.gitlab.com/blog/whats-new-in-git-2-47-0/",[],"Git 2.47.0の新機能",[29,2458,2459],{},[16,2460,2463],{"href":2461,"rel":2462},"https://about.gitlab.com/blog/whats-new-in-git-2-46-0/",[],"Git 2.46.0の新機能",[2465,2466,2467],"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 .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":174,"searchDepth":208,"depth":208,"links":2469},[2470,2471,2472,2473,2474,2475,2476,2477],{"id":84,"depth":208,"text":34},{"id":40,"depth":208,"text":40},{"id":1875,"depth":208,"text":46},{"id":1991,"depth":208,"text":52},{"id":2100,"depth":208,"text":58},{"id":64,"depth":208,"text":64},{"id":70,"depth":208,"text":70},{"id":2377,"depth":208,"text":2478},"--revisionを使用した軽量なクローン","open-source","2025-03-14","このリリースでは、zlib-ngによるパフォーマンス向上、新しい名前ハッシュアルゴリズム、そして新しいコマンドgit-backfill(1)の導入などが行われています。","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663087/Blog/Hero%20Images/git3-cover.png",{},"/ja-jp/blog/whats-new-in-git-2-49-0",{"title":5,"description":2481,"ogTitle":5,"ogDescription":2481,"noIndex":2488,"ogImage":2484,"ogUrl":2489,"ogSiteName":2490,"ogType":2491,"canonicalUrls":2489},false,"https://about.gitlab.com/blog/whats-new-in-git-2-49-0","https://about.gitlab.com","article","whats-new-in-git-2-49-0","ja-jp/blog/whats-new-in-git-2-49-0",[2495,2496,526],"community","open source","BlogPost","Wy186IVYVde83JEoVM3h_GJYx3vKCg7HF7YSMEXsvDE",{"logo":2500,"freeTrial":2505,"sales":2510,"login":2515,"items":2520,"search":2847,"minimal":2880,"duo":2897,"switchNav":2906,"pricingDeployment":2917},{"config":2501},{"href":2502,"dataGaName":2503,"dataGaLocation":2504},"/ja-jp/","gitlab logo","header",{"text":2506,"config":2507},"無料トライアルを開始",{"href":2508,"dataGaName":2509,"dataGaLocation":2504},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp&glm_content=default-saas-trial/","free trial",{"text":2511,"config":2512},"デモをリクエスト",{"href":2513,"dataGaName":2514,"dataGaLocation":2504},"/ja-jp/sales/?contact-topic=request-demo","sales",{"text":2516,"config":2517},"サインイン",{"href":2518,"dataGaName":2519,"dataGaLocation":2504},"https://gitlab.com/users/sign_in/","sign in",[2521,2550,2652,2657,2769,2825],{"text":2522,"config":2523,"menu":2525},"プラットフォーム",{"dataNavLevelOne":2524},"platform",{"type":2526,"columns":2527},"cards",[2528,2534,2542],{"title":2522,"description":2529,"link":2530},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":2531,"config":2532},"プラットフォームの詳細はこちら",{"href":2533,"dataGaName":2524,"dataGaLocation":2504},"/ja-jp/platform/",{"title":2535,"description":2536,"link":2537},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":2538,"config":2539},"GitLab Duoのご紹介",{"href":2540,"dataGaName":2541,"dataGaLocation":2504},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":2543,"description":2544,"link":2545},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":2546,"config":2547},"詳細はこちら",{"href":2548,"dataGaName":2549,"dataGaLocation":2504},"/ja-jp/why-gitlab/","why gitlab",{"text":2551,"left":502,"config":2552,"menu":2554},"製品",{"dataNavLevelOne":2553},"solutions",{"type":2555,"link":2556,"columns":2560,"feature":2631},"lists",{"text":2557,"config":2558},"すべてのソリューションを表示",{"href":2559,"dataGaName":2553,"dataGaLocation":2504},"/ja-jp/solutions/",[2561,2586,2609],{"title":2562,"description":2563,"link":2564,"items":2569},"自動化","CI/CDと自動化でデプロイを加速",{"config":2565},{"icon":2566,"href":2567,"dataGaName":2568,"dataGaLocation":2504},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[2570,2574,2577,2582],{"text":2571,"config":2572},"CI/CD",{"href":2573,"dataGaLocation":2504,"dataGaName":2571},"/ja-jp/solutions/continuous-integration/",{"text":2535,"config":2575},{"href":2540,"dataGaLocation":2504,"dataGaName":2576},"gitlab duo agent platform - product menu",{"text":2578,"config":2579},"ソースコード管理",{"href":2580,"dataGaLocation":2504,"dataGaName":2581},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":2583,"config":2584},"自動化されたソフトウェアデリバリー",{"href":2567,"dataGaLocation":2504,"dataGaName":2585},"Automated software delivery",{"title":2587,"description":2588,"link":2589,"items":2594},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":2590},{"href":2591,"dataGaName":2592,"dataGaLocation":2504,"icon":2593},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[2595,2599,2604],{"text":2596,"config":2597},"アプリケーションセキュリティテスト",{"href":2591,"dataGaName":2598,"dataGaLocation":2504},"Application security testing",{"text":2600,"config":2601},"ソフトウェアサプライチェーンセキュリティ",{"href":2602,"dataGaLocation":2504,"dataGaName":2603},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":2605,"config":2606},"ソフトウェアコンプライアンス",{"href":2607,"dataGaName":2608,"dataGaLocation":2504},"/ja-jp/solutions/software-compliance/","software compliance",{"title":2610,"link":2611,"items":2616},"測定",{"config":2612},{"icon":2613,"href":2614,"dataGaName":2615,"dataGaLocation":2504},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[2617,2621,2626],{"text":2618,"config":2619},"可視性と測定",{"href":2614,"dataGaLocation":2504,"dataGaName":2620},"Visibility and Measurement",{"text":2622,"config":2623},"バリューストリーム管理",{"href":2624,"dataGaLocation":2504,"dataGaName":2625},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":2627,"config":2628},"分析とインサイト",{"href":2629,"dataGaLocation":2504,"dataGaName":2630},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":2632,"type":2555,"items":2633},"GitLabが活躍する場所",[2634,2640,2646],{"text":2635,"config":2636},"大企業",{"icon":2637,"href":2638,"dataGaLocation":2504,"dataGaName":2639},"Building","/ja-jp/enterprise/","enterprise",{"text":2641,"config":2642},"スモールビジネス",{"icon":2643,"href":2644,"dataGaLocation":2504,"dataGaName":2645},"Work","/ja-jp/small-business/","small business",{"text":2647,"config":2648},"公共部門",{"icon":2649,"href":2650,"dataGaLocation":2504,"dataGaName":2651},"Organization","/ja-jp/solutions/public-sector/","public sector",{"text":2653,"config":2654},"価格",{"href":2655,"dataGaName":2656,"dataGaLocation":2504,"dataNavLevelOne":2656},"/ja-jp/pricing/","pricing",{"text":2658,"config":2659,"menu":2661},"関連リソース",{"dataNavLevelOne":2660},"resources",{"type":2555,"link":2662,"columns":2666,"feature":2758},{"text":2663,"config":2664},"すべてのリソースを表示",{"href":2665,"dataGaName":2660,"dataGaLocation":2504},"/ja-jp/resources/",[2667,2700,2726],{"title":2668,"items":2669},"はじめに",[2670,2675,2680,2685,2690,2695],{"text":2671,"config":2672},"インストール",{"href":2673,"dataGaName":2674,"dataGaLocation":2504},"/ja-jp/install/","install",{"text":2676,"config":2677},"クイックスタートガイド",{"href":2678,"dataGaName":2679,"dataGaLocation":2504},"/ja-jp/get-started/","quick setup checklists",{"text":2681,"config":2682},"学ぶ",{"href":2683,"dataGaLocation":2504,"dataGaName":2684},"https://university.gitlab.com/","learn",{"text":2686,"config":2687},"製品ドキュメント",{"href":2688,"dataGaName":2689,"dataGaLocation":2504},"https://docs.gitlab.com/ja-jp/","product documentation",{"text":2691,"config":2692},"ベストプラクティスビデオ",{"href":2693,"dataGaName":2694,"dataGaLocation":2504},"/ja-jp/getting-started-videos/","best practice videos",{"text":2696,"config":2697},"インテグレーション",{"href":2698,"dataGaName":2699,"dataGaLocation":2504},"/ja-jp/integrations/","integrations",{"title":2701,"items":2702},"検索する",[2703,2708,2713,2718,2722],{"text":2704,"config":2705},"お客様成功事例",{"href":2706,"dataGaName":2707,"dataGaLocation":2504},"/ja-jp/customers/","customer success stories",{"text":2709,"config":2710},"ブログ",{"href":2711,"dataGaName":2712,"dataGaLocation":2504},"/ja-jp/blog/","blog",{"text":2714,"config":2715},"Demo Hub",{"href":2716,"dataGaName":2717,"dataGaLocation":2504},"/ja-jp/demo-hub/","demo hub",{"text":2719,"config":2720},"The Source",{"href":2721,"dataGaName":2712,"dataGaLocation":2504},"/ja-jp/the-source/",{"text":2052,"config":2723},{"href":2724,"dataGaName":2725,"dataGaLocation":2504},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":2727,"items":2728},"つなげる",[2729,2734,2739,2743,2748,2753],{"text":2730,"config":2731},"GitLabサービス",{"href":2732,"dataGaName":2733,"dataGaLocation":2504},"/ja-jp/services/","services",{"text":2735,"config":2736},"コントリビュート",{"href":2737,"dataGaName":2738,"dataGaLocation":2504},"https://contributors.gitlab.com","contribute",{"text":2740,"config":2741},"コミュニティ",{"href":2742,"dataGaName":2495,"dataGaLocation":2504},"/community/",{"text":2744,"config":2745},"フォーラム",{"href":2746,"dataGaName":2747,"dataGaLocation":2504},"https://forum.gitlab.com/","forum",{"text":2749,"config":2750},"イベント",{"href":2751,"dataGaName":2752,"dataGaLocation":2504},"/events/","events",{"text":2754,"config":2755},"パートナー",{"href":2756,"dataGaName":2757,"dataGaLocation":2504},"/ja-jp/partners/","partners",{"config":2759,"title":2762,"text":2763,"link":2764},{"background":2760,"textColor":2761},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","GitLabの最新情報","最新の機能と改善点に関する情報をお届けします。",{"text":2765,"config":2766},"最新情報を読む",{"href":2767,"dataGaName":2768,"dataGaLocation":2504},"/ja-jp/whats-new/","whats new",{"text":2770,"config":2771,"menu":2773},"企業情報",{"dataNavLevelOne":2772},"company",{"type":2555,"columns":2774},[2775],{"items":2776},[2777,2782,2788,2790,2795,2800,2805,2810,2815,2820],{"text":2778,"config":2779},"GitLabについて",{"href":2780,"dataGaName":2781,"dataGaLocation":2504},"/ja-jp/company/","about",{"text":2783,"config":2784,"footerGa":2787},"採用情報",{"href":2785,"dataGaName":2786,"dataGaLocation":2504},"/jobs/","jobs",{"dataGaName":2786},{"text":2749,"config":2789},{"href":2751,"dataGaName":2752,"dataGaLocation":2504},{"text":2791,"config":2792},"経営陣",{"href":2793,"dataGaName":2794,"dataGaLocation":2504},"/company/team/e-group/","leadership",{"text":2796,"config":2797},"ハンドブック",{"href":2798,"dataGaName":2799,"dataGaLocation":2504},"https://handbook.gitlab.com/","handbook",{"text":2801,"config":2802},"投資家向け情報",{"href":2803,"dataGaName":2804,"dataGaLocation":2504},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":2806,"config":2807},"トラストセンター",{"href":2808,"dataGaName":2809,"dataGaLocation":2504},"/ja-jp/security/","trust center",{"text":2811,"config":2812},"AI Transparency Center",{"href":2813,"dataGaName":2814,"dataGaLocation":2504},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":2816,"config":2817},"ニュースレター",{"href":2818,"dataGaName":2819,"dataGaLocation":2504},"/company/contact/#contact-forms","newsletter",{"text":2821,"config":2822},"プレス",{"href":2823,"dataGaName":2824,"dataGaLocation":2504},"/press/","press",{"text":2826,"config":2827,"menu":2828},"お問い合わせ",{"dataNavLevelOne":2772},{"type":2555,"columns":2829},[2830],{"items":2831},[2832,2837,2842],{"text":2833,"config":2834},"お問い合わせはこちら",{"href":2835,"dataGaName":2836,"dataGaLocation":2504},"/ja-jp/sales/","talk to sales",{"text":2838,"config":2839},"サポートを受ける",{"href":2840,"dataGaName":2841,"dataGaLocation":2504},"https://support.gitlab.com/hc/en-us","support portal",{"text":2843,"config":2844},"カスタマーポータル",{"href":2845,"dataGaName":2846,"dataGaLocation":2504},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":2848,"login":2849,"suggestions":2856},"閉じる",{"text":2850,"link":2851},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":2852,"config":2853},"GitLab.com",{"href":2518,"dataGaName":2854,"dataGaLocation":2855},"search login","search",{"text":2857,"default":2858},"提案",[2859,2861,2866,2868,2872,2876],{"text":2535,"config":2860},{"href":2540,"dataGaName":2535,"dataGaLocation":2855},{"text":2862,"config":2863},"コード提案（AI）",{"href":2864,"dataGaName":2865,"dataGaLocation":2855},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":2571,"config":2867},{"href":2573,"dataGaName":2571,"dataGaLocation":2855},{"text":2869,"config":2870},"GitLab on AWS",{"href":2871,"dataGaName":2869,"dataGaLocation":2855},"/ja-jp/partners/technology-partners/aws/",{"text":2873,"config":2874},"GitLab on Google Cloud",{"href":2875,"dataGaName":2873,"dataGaLocation":2855},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":2877,"config":2878},"GitLabを選ぶ理由",{"href":2548,"dataGaName":2879,"dataGaLocation":2855},"Why GitLab?",{"freeTrial":2881,"mobileIcon":2885,"desktopIcon":2890,"secondaryButton":2893},{"text":2506,"config":2882},{"href":2883,"dataGaName":2509,"dataGaLocation":2884},"https://gitlab.com/-/trials/new/","nav",{"altText":2886,"config":2887},"GitLabアイコン",{"src":2888,"dataGaName":2889,"dataGaLocation":2884},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":2886,"config":2891},{"src":2892,"dataGaName":2889,"dataGaLocation":2884},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2668,"config":2894},{"href":2895,"dataGaName":2896,"dataGaLocation":2884},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/get-started/","get started",{"freeTrial":2898,"mobileIcon":2902,"desktopIcon":2904},{"text":2899,"config":2900},"GitLab Duoの詳細について",{"href":2540,"dataGaName":2901,"dataGaLocation":2884},"gitlab duo",{"altText":2886,"config":2903},{"src":2888,"dataGaName":2889,"dataGaLocation":2884},{"altText":2886,"config":2905},{"src":2892,"dataGaName":2889,"dataGaLocation":2884},{"button":2907,"mobileIcon":2912,"desktopIcon":2914},{"text":2908,"config":2909},"/switch",{"href":2910,"dataGaName":2911,"dataGaLocation":2884},"#contact","switch",{"altText":2886,"config":2913},{"src":2888,"dataGaName":2889,"dataGaLocation":2884},{"altText":2886,"config":2915},{"src":2916,"dataGaName":2889,"dataGaLocation":2884},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2918,"mobileIcon":2923,"desktopIcon":2925},{"text":2919,"config":2920},"料金ページに戻る",{"href":2655,"dataGaName":2921,"dataGaLocation":2884,"icon":2922},"back to pricing","GoBack",{"altText":2886,"config":2924},{"src":2888,"dataGaName":2889,"dataGaLocation":2884},{"altText":2886,"config":2926},{"src":2892,"dataGaName":2889,"dataGaLocation":2884},{"title":2928,"button":2929,"config":2933},"GitLab Orbitが登場: AIエージェントのためのコンテキストレイヤー",{"text":2546,"config":2930},{"href":2931,"dataGaName":2932,"dataGaLocation":2504},"/ja-jp/gitlab-orbit/","orbit",{"layout":2934,"disabled":2488},"release",{"data":2936},{"text":2937,"source":2938,"edit":2944,"contribute":2949,"config":2954,"items":2959,"minimal":3168},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":2939,"config":2940},"ページのソースを表示",{"href":2941,"dataGaName":2942,"dataGaLocation":2943},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":2945,"config":2946},"このページを編集",{"href":2947,"dataGaName":2948,"dataGaLocation":2943},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":2950,"config":2951},"ご協力をお願いします",{"href":2952,"dataGaName":2953,"dataGaLocation":2943},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2955,"facebook":2956,"youtube":2957,"linkedin":2958},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2960,3005,3058,3101,3135],{"title":2653,"links":2961,"subMenu":2976},[2962,2966,2971],{"text":2963,"config":2964},"プランの表示",{"href":2655,"dataGaName":2965,"dataGaLocation":2943},"view plans",{"text":2967,"config":2968},"Premiumを選ぶ理由",{"href":2969,"dataGaName":2970,"dataGaLocation":2943},"/ja-jp/pricing/premium/","why premium",{"text":2972,"config":2973},"Ultimateを選ぶ理由",{"href":2974,"dataGaName":2975,"dataGaLocation":2943},"/ja-jp/pricing/ultimate/","why ultimate",[2977],{"title":2826,"links":2978},[2979,2981,2983,2985,2990,2995,3000],{"text":2826,"config":2980},{"href":2835,"dataGaName":2514,"dataGaLocation":2943},{"text":2838,"config":2982},{"href":2840,"dataGaName":2841,"dataGaLocation":2943},{"text":2843,"config":2984},{"href":2845,"dataGaName":2846,"dataGaLocation":2943},{"text":2986,"config":2987},"ステータス",{"href":2988,"dataGaName":2989,"dataGaLocation":2943},"https://status.gitlab.com/","status",{"text":2991,"config":2992},"利用規約",{"href":2993,"dataGaName":2994,"dataGaLocation":2943},"/terms/","terms of use",{"text":2996,"config":2997},"プライバシーに関する声明",{"href":2998,"dataGaName":2999,"dataGaLocation":2943},"/ja-jp/privacy/","privacy statement",{"text":3001,"config":3002},"Cookie 優先設定",{"dataGaName":3003,"dataGaLocation":2943,"id":3004,"isOneTrustButton":502},"cookie preferences","ot-sdk-btn",{"title":2551,"links":3006,"subMenu":3015},[3007,3011],{"text":3008,"config":3009},"DevSecOpsプラットフォーム",{"href":2533,"dataGaName":3010,"dataGaLocation":2943},"devsecops platform",{"text":3012,"config":3013},"AI支援開発",{"href":2540,"dataGaName":3014,"dataGaLocation":2943},"ai-assisted development",[3016],{"title":3017,"links":3018},"トピック",[3019,3023,3028,3033,3038,3043,3048,3053],{"text":2571,"config":3020},{"href":3021,"dataGaName":3022,"dataGaLocation":2943},"/ja-jp/topics/ci-cd/","cicd",{"text":3024,"config":3025},"GitOps",{"href":3026,"dataGaName":3027,"dataGaLocation":2943},"/ja-jp/topics/gitops/","gitops",{"text":3029,"config":3030},"DevOps",{"href":3031,"dataGaName":3032,"dataGaLocation":2943},"/ja-jp/topics/devops/","devops",{"text":3034,"config":3035},"バージョン管理",{"href":3036,"dataGaName":3037,"dataGaLocation":2943},"/ja-jp/topics/version-control/","version control",{"text":3039,"config":3040},"DevSecOps",{"href":3041,"dataGaName":3042,"dataGaLocation":2943},"/ja-jp/topics/devsecops/","devsecops",{"text":3044,"config":3045},"クラウドネイティブ",{"href":3046,"dataGaName":3047,"dataGaLocation":2943},"/ja-jp/topics/cloud-native/","cloud native",{"text":3049,"config":3050},"コーディングのためのAI",{"href":3051,"dataGaName":3052,"dataGaLocation":2943},"/ja-jp/topics/devops/ai-for-coding/","ai for coding",{"text":3054,"config":3055},"エージェント型AI",{"href":3056,"dataGaName":3057,"dataGaLocation":2943},"/ja-jp/topics/agentic-ai/","agentic ai",{"title":3059,"links":3060},"ソリューション",[3061,3064,3066,3071,3075,3078,3081,3084,3086,3088,3091,3096],{"text":2596,"config":3062},{"href":2591,"dataGaName":3063,"dataGaLocation":2943},"Application Security Testing",{"text":2583,"config":3065},{"href":2567,"dataGaName":2568,"dataGaLocation":2943},{"text":3067,"config":3068},"アジャイル開発",{"href":3069,"dataGaName":3070,"dataGaLocation":2943},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":3072,"config":3073},"SCM",{"href":2580,"dataGaName":3074,"dataGaLocation":2943},"source code management",{"text":2571,"config":3076},{"href":2573,"dataGaName":3077,"dataGaLocation":2943},"continuous integration & delivery",{"text":2622,"config":3079},{"href":2624,"dataGaName":3080,"dataGaLocation":2943},"value stream management",{"text":3024,"config":3082},{"href":3083,"dataGaName":3027,"dataGaLocation":2943},"/ja-jp/solutions/gitops/",{"text":2635,"config":3085},{"href":2638,"dataGaName":2639,"dataGaLocation":2943},{"text":2641,"config":3087},{"href":2644,"dataGaName":2645,"dataGaLocation":2943},{"text":3089,"config":3090},"公共機関",{"href":2650,"dataGaName":2651,"dataGaLocation":2943},{"text":3092,"config":3093},"教育",{"href":3094,"dataGaName":3095,"dataGaLocation":2943},"/ja-jp/solutions/education/","education",{"text":3097,"config":3098},"金融サービス",{"href":3099,"dataGaName":3100,"dataGaLocation":2943},"/ja-jp/solutions/finance/","financial services",{"title":3102,"links":3103},"リソース",[3104,3106,3108,3110,3114,3116,3119,3121,3123,3125,3127,3129,3131,3133],{"text":2671,"config":3105},{"href":2673,"dataGaName":2674,"dataGaLocation":2943},{"text":2676,"config":3107},{"href":2678,"dataGaName":2679,"dataGaLocation":2943},{"text":2681,"config":3109},{"href":2683,"dataGaName":2684,"dataGaLocation":2943},{"text":2686,"config":3111},{"href":3112,"dataGaName":3113,"dataGaLocation":2943},"https://docs.gitlab.com/ja-jp","docs",{"text":2709,"config":3115},{"href":2711,"dataGaName":2712,"dataGaLocation":2943},{"text":3117,"config":3118},"最新リリース",{"href":2767,"dataGaName":2768,"dataGaLocation":2943},{"text":2704,"config":3120},{"href":2706,"dataGaName":2707,"dataGaLocation":2943},{"text":2052,"config":3122},{"href":2724,"dataGaName":2725,"dataGaLocation":2943},{"text":2730,"config":3124},{"href":2732,"dataGaName":2733,"dataGaLocation":2943},{"text":2735,"config":3126},{"href":2737,"dataGaName":2738,"dataGaLocation":2943},{"text":2740,"config":3128},{"href":2742,"dataGaName":2495,"dataGaLocation":2943},{"text":2744,"config":3130},{"href":2746,"dataGaName":2747,"dataGaLocation":2943},{"text":2749,"config":3132},{"href":2751,"dataGaName":2752,"dataGaLocation":2943},{"text":2754,"config":3134},{"href":2756,"dataGaName":2757,"dataGaLocation":2943},{"title":3136,"links":3137},"会社情報",[3138,3140,3142,3144,3146,3148,3152,3157,3159,3161,3163],{"text":2778,"config":3139},{"href":2780,"dataGaName":2772,"dataGaLocation":2943},{"text":2783,"config":3141},{"href":2785,"dataGaName":2786,"dataGaLocation":2943},{"text":2791,"config":3143},{"href":2793,"dataGaName":2794,"dataGaLocation":2943},{"text":2796,"config":3145},{"href":2798,"dataGaName":2799,"dataGaLocation":2943},{"text":2801,"config":3147},{"href":2803,"dataGaName":2804,"dataGaLocation":2943},{"text":3149,"config":3150},"Sustainability",{"href":3151,"dataGaName":3149,"dataGaLocation":2943},"/sustainability/",{"text":3153,"config":3154},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":3155,"dataGaName":3156,"dataGaLocation":2943},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":2806,"config":3158},{"href":2808,"dataGaName":2809,"dataGaLocation":2943},{"text":2816,"config":3160},{"href":2818,"dataGaName":2819,"dataGaLocation":2943},{"text":2821,"config":3162},{"href":2823,"dataGaName":2824,"dataGaLocation":2943},{"text":3164,"config":3165},"現代奴隷制の透明性に関する声明",{"href":3166,"dataGaName":3167,"dataGaLocation":2943},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":3169},[3170,3172,3175],{"text":2991,"config":3171},{"href":2993,"dataGaName":2994,"dataGaLocation":2943},{"text":3173,"config":3174},"Cookieの設定",{"dataGaName":3003,"dataGaLocation":2943,"id":3004,"isOneTrustButton":502},{"text":2996,"config":3176},{"href":2998,"dataGaName":2999,"dataGaLocation":2943},[3178],{"id":3179,"title":7,"body":2483,"config":3180,"content":3182,"description":2483,"extension":3186,"meta":3187,"navigation":502,"path":3188,"seo":3189,"stem":3190,"__hash__":3191},"blogAuthors/en-us/blog/authors/toon-claes.yml",{"template":3181},"BlogAuthor",{"name":7,"config":3183},{"headshot":3184,"ctfId":3185},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663082/Blog/Author%20Headshots/toon_claes_headshot.png","toon","yml",{},"/en-us/blog/authors/toon-claes",{},"en-us/blog/authors/toon-claes","guXJXoqO1anz4H932Namk7kqyZsO1xyVQr6stBL4o18",[3193,3201,3209],{"title":3194,"description":3195,"heroImage":3196,"category":2479,"date":3197,"authors":3198,"slug":3200,"externalUrl":2483},"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",[3199],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"title":3202,"description":3203,"heroImage":3204,"category":2479,"date":3205,"authors":3206,"slug":3208,"externalUrl":2483},"git mergeコマンドの基本を徹底解説","この記事では、git mergeコマンドについてコマンドの基本的な使い方からリクエストコードまで解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1754287290/averr2ecwl01q2f9lknf.jpg","2025-08-04",[3207],"GitLab Team","git-merge-command-overview",{"title":3210,"description":3211,"heroImage":3212,"category":2479,"date":3213,"authors":3214,"slug":3215,"externalUrl":2483},"オープンソースソフトウェア（OSS）とは？詳しく解説​","オープンソースの意味や、メリットとデメリットについて、分かりやすく解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752720740/g9x8oi988xuhioglpczi.jpg","2025-07-17",[3207],"what-is-open-source",{"promotions":3217},[3218,3232,3244,3256],{"id":3219,"categories":3220,"header":3222,"text":3223,"button":3224,"image":3229},"ai-modernization",[3221],"ai","AIの真価、組織全体で発揮できていますか？","所要時間は5分以内です",{"text":3225,"config":3226},"AI成熟度スコアを確認する",{"href":3227,"dataGaName":3228,"dataGaLocation":2712},"/ja-jp/assessments/ai-modernization-assessment/","modernization assessment",{"config":3230},{"src":3231},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":3233,"categories":3234,"header":3236,"text":3223,"button":3237,"image":3241},"devops-modernization",[3235,3042],"product","単にツールを管理するだけでなく、イノベーションを提供していますか？",{"text":3238,"config":3239},"DevOps成熟度スコアを確認しましょう",{"href":3240,"dataGaName":3228,"dataGaLocation":2712},"/ja-jp/assessments/devops-modernization-assessment/",{"config":3242},{"src":3243},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":3245,"categories":3246,"header":3248,"text":3223,"button":3249,"image":3253},"security-modernization",[3247],"security","スピードのためにセキュリティを犠牲にしていませんか？",{"text":3250,"config":3251},"セキュリティ成熟度スコアを確認しましょう",{"href":3252,"dataGaName":3228,"dataGaLocation":2712},"/ja-jp/assessments/security-modernization-assessment/",{"config":3254},{"src":3255},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":3257,"paths":3258,"header":3261,"text":3262,"button":3263,"image":3268},"github-azure-migration",[3259,3260],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","チームはGitHubのAzure移行に対応できていますか？","GitHubはすでにAzureを基盤として再構築を進めています。それがあなたのチームにとって何を意味するのか、ご確認ください。",{"text":3264,"config":3265},"GitLabとGitHubの比較を見る",{"href":3266,"dataGaName":3267,"dataGaLocation":2712},"/ja-jp/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":3269},{"src":3243},{"header":3271,"blurb":3272,"button":3273,"secondaryButton":3277},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":2506,"config":3274},{"href":3275,"dataGaName":2509,"dataGaLocation":3276},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/ja-jp/","feature",{"text":2826,"config":3278},{"href":2835,"dataGaName":2514,"dataGaLocation":3276},1786803753468]