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