[{"data":1,"prerenderedAt":2330},["ShallowReactive",2],{"/ja-jp/blog/we-need-to-talk-no-proxy":3,"navigation-ja-jp":1550,"banner-ja-jp":1979,"footer-ja-jp":1987,"blog-post-authors-ja-jp-Stan Hu":2229,"blog-related-posts-ja-jp-we-need-to-talk-no-proxy":2244,"blog-promotions-ja-jp":2267,"next-steps-ja-jp":2321},{"id":4,"title":5,"authors":6,"body":8,"category":1526,"date":1527,"description":1528,"extension":1529,"externalUrl":1530,"faq":1530,"featured":1531,"heroImage":1532,"meta":1533,"navigation":1534,"path":1535,"seo":1536,"slug":1540,"stem":1541,"tags":1542,"template":1547,"updatedDate":1548,"__hash__":1549},"blogPosts/ja-jp/blog/we-need-to-talk-no-proxy.md","no_proxyを標準化する方法：お客様事例で徹底解説",[7],"Stan Hu",{"type":9,"value":10,"toc":1517},"minimark",[11,28,31,34,37,42,45,48,74,77,84,112,118,135,138,140,157,174,181,184,188,191,221,229,243,280,301,316,319,328,332,335,495,498,509,515,518,531,547,550,747,753,764,844,855,910,913,916,924,930,936,940,943,946,981,984,997,1006,1045,1052,1060,1068,1075,1126,1132,1148,1208,1217,1226,1283,1287,1297,1306,1310,1313,1321,1339,1343,1378,1385,1391,1440,1443,1446,1449,1460,1463,1472,1482,1490,1499,1513],[12,13,14,15,19,20,23,24,27],"p",{},"ウェブプロキシサーバーを使用した経験がある方なら、環境変数",[16,17,18],"code",{},"http_proxy","や",[16,21,22],{},"HTTP_PROXY","をよくご存知でしょう。しかし、",[16,25,26],{},"no_proxy","（ノープロキシ）に関しては、どうもわかりにくい、と感じていらっしゃる方も多いのではないでしょうか。",[12,29,30],{},"no proxyとは、あるホスト宛のトラフィックでプロキシを経由させないようにする環境変数です。世界基準が存在するHTTPと違い、ウェブクライアントがno proxyを処理する方法に「標準」は存在しません。その結果、ウェブクライアントは場合により異なる方法で処理を行います。",[12,32,33],{},"その違いが原因でサービスが通信を停止し、その原因を突き止めるために週末返上で作業する羽目になったGitLabのお客様もいらっしゃいます。",[12,35,36],{},"そこで、この記事ではGitLabのお客様が直面した問題について、具体例を挙げながら根本原因を探り、「no proxyを標準化する方法」というテーマを掘り下げてみます。",[38,39,41],"h3",{"id":40},"no-proxyはなぜわかりにくいのか","no proxyはなぜ「わかりにくい」のか",[12,43,44],{},"no proxyがなぜわかりにくいのか、具体例を挙げて説明します。",[12,46,47],{},"現在、ほとんどのウェブクライアントは環境変数を介してプロキシサーバーへの接続をサポートしています。環境変数には大文字表記と小文字表記があります。",[49,50,51,59,67],"ul",{},[52,53,54,56,57],"li",{},[16,55,18],{}," / ",[16,58,22],{},[52,60,61,56,64],{},[16,62,63],{},"https_proxy",[16,65,66],{},"HTTPS_PROXY",[52,68,69,56,71],{},[16,70,26],{},[16,72,73],{},"NO_PROXY",[12,75,76],{},"これらの変数は、プロキシサーバーにアクセスするのにどのURLを使用するか、またどういった例外を作っているか、クライアントに指示するものです。",[12,78,79,80,83],{},"たとえば、ある企業で田中さんが",[16,81,82],{},"http://tanaka.example.com:8080"," でリッスンしているプロキシサーバーの場合、次のようになります。",[85,86,91],"pre",{"className":87,"code":88,"language":89,"meta":90,"style":90},"language-sh shiki shiki-themes github-light","export http_proxy=http://tanaka.example.com:8080\n","sh","",[16,92,93],{"__ignoreMap":90},[94,95,98,102,106,109],"span",{"class":96,"line":97},"line",1,[94,99,101],{"class":100},"sD7c4","export",[94,103,105],{"class":104},"sgsFI"," http_proxy",[94,107,108],{"class":100},"=",[94,110,111],{"class":104},"http://tanaka.example.com:8080\n",[12,113,114,115,117],{},"一方、同僚の斎藤さんも、次のように大文字バージョンの",[16,116,22],{}," で定義していたとします。",[85,119,121],{"className":87,"code":120,"language":89,"meta":90,"style":90},"export HTTP_PROXY=http://saito.example.com:8080\n",[16,122,123],{"__ignoreMap":90},[94,124,125,127,130,132],{"class":96,"line":97},[94,126,101],{"class":100},[94,128,129],{"class":104}," HTTP_PROXY",[94,131,108],{"class":100},[94,133,134],{"class":104},"http://saito.example.com:8080\n",[12,136,137],{},"この場合、どちらのプロキシサーバーが使用されることになるのでしょうか？答えは「状況によって異なる」です。ある場合は田中さんのプロキシサーバーが有効になる場合もあれば、ある場合は斎藤さんのプロキシサーバーが有効になる場合があります。",[12,139,137],{},[12,141,142,143,146,147,150,151,153,154,156],{},"では、例外を設定したい場合はどうなるでしょうか。たとえば、",[16,144,145],{},"internal.example.com","と",[16,148,149],{},"internal2.example.com","以外のすべてで、プロキシサーバーを経由したい場合です。このような場合が",[16,152,26],{},"変数の出番です。",[16,155,26],{},"を次のように定義します。",[85,158,160],{"className":87,"code":159,"language":89,"meta":90,"style":90},"export no_proxy=internal.example.com,internal2.example.com\n",[16,161,162],{"__ignoreMap":90},[94,163,164,166,169,171],{"class":96,"line":97},[94,165,101],{"class":100},[94,167,168],{"class":104}," no_proxy",[94,170,108],{"class":100},[94,172,173],{"class":104},"internal.example.com,internal2.example.com\n",[12,175,176,177,180],{},"では、IPアドレスを除外したい場合はどうすればよいでしょうか？アスタリスクやワイルドカードは使用できるのでしょうか？CIDRブロック（例:",[16,178,179],{},"192.168.1.1/32","）は？",[12,182,183],{},"これらの答えも、「状況によって異なる」です。つまり「使用言語やツールという”PC環境”によって、proxy変数の処理方法が異なる」のが、no proxyがわかりにくいとされている理由です。次の項では、proxy変数の処理方法の違いについてさらに掘り下げます。",[38,185,187],{"id":186},"なぜno-proxyはこんなに複雑なのか","なぜno proxyはこんなに複雑なのか？",[12,189,190],{},"この問題の理解を深めるため、no proxyを巡るこれまでの経緯を説明しておきます。",[12,192,193,194,204,207,208,210,211,213,214],{},"1994年においてほとんどのウェブクライアントは、",[195,196,199,146,201,203],"a",{"href":197,"rel":198},"https://courses.cs.vt.edu/~cs4244/spring.09/documents/Proxies.pdf",[],[16,200,18],{},[16,202,26],{},"環境変数をサポートするCERNの",[16,205,206],{},"libwww","を使用していました。",[16,209,206],{},"は、",[16,212,18],{},"の小文字形式のみを使用し、",[195,215,218,220],{"href":216,"rel":217},"https://github.com/w3c/libwww/blob/8678b3dcb4191065ca39caea54bb1beba809a617/Library/src/HTAccess.c#L234-L239",[],[16,219,26],{},"構文は以下のようにシンプルでした。",[85,222,227],{"className":223,"code":225,"language":226,"meta":90},[224],"language-text","no_proxy is a comma- or space-separated list of machine\nor domain names, with optional :port part.  If no :port\npart is present, it applies to all ports on that domain.\n\nExample:\n        no_proxy=\"cern.ch,some.domain:8001\"\n","text",[16,228,225],{"__ignoreMap":90},[12,230,231,232,19,235,238,239,242],{},"つまり、元々「小文字表記のみ」で始まったのですが、その後新しいクライアントである",[16,233,234],{},"wget",[16,236,237],{},"curl","の登場により、",[16,240,241],{},"no proxy","の大文字が使用可になったり、不可とされたりと変遷しているのです。",[12,244,245,246,248,249,252,253,255,256,258,259,264,265,267,268,270,271,273,274,276,277,279],{},"1996年1月にHrvoje Niksicが、",[16,247,206],{},"をリンクせずに独自のHTTP実装を追加する新しいクライアント、",[16,250,251],{},"geturl","（現在の",[16,254,234],{},"の前身）をリリースしました。翌月には",[16,257,251],{},"が",[195,260,263],{"href":261,"rel":262},"https://ftp.sunet.se/mirror/archive/ftp.sunet.se/pub/www/utilities/wget/old-versions/",[],"バージョン1.1でhttp_proxyのサポートを追加","され、同年5月には",[16,266,251],{},"バージョン1.3で",[16,269,26],{},"のサポートが追加されました。ここでは",[16,272,206],{},"と同様に、",[16,275,251],{},"では小文字形式",[16,278,26],{},"のみのサポートでした。",[12,281,282,283,285,286,295,296,292,298,300],{},"1998年1月には、Daniel Stenbergが",[16,284,237],{},"v5.1をリリースし、",[195,287,290,292,293],{"href":288,"rel":289},"https://github.com/curl/curl/blob/ae1912cb0d494b48d514d937826c9fe83ec96c4d/CHANGES#L929-L944",[],[16,291,18],{},"および",[16,294,26],{},"変数をサポート。また、大文字の形式の",[16,297,22],{},[16,299,73],{},"も許可されました。",[12,302,303,304,306,307,309,310,312,313,315],{},"2009年3月にはcurl v7.19.4がセキュリティ上の懸念から、大文字",[16,305,22],{},"のサポートを廃止します。",[16,308,237],{},"では",[16,311,22],{},"は無視されますが、",[16,314,66],{},"は現在でも動作します。",[38,317,318],{"id":318},"一目でわかるproxy変数の処理方法の違い",[12,320,321,322,327],{},"GitLabの",[195,323,326],{"href":324,"rel":325},"https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/2991",[],"Nourdinel Bachaが調査したところ","、これらのプロキシサーバー変数の処理方法は、使用言語やツールによって異なることがわかりました。",[329,330,331],"h4",{"id":331},"http_proxyとhttps_proxyの場合",[12,333,334],{},"各行はサポートされている動作を表し、各列にはそれが適用されるツール（例：curl）または言語（例：Ruby）を表しています。",[336,337,338,360],"table",{},[339,340,341],"thead",{},[342,343,344,347,349,351,354,357],"tr",{},[345,346],"th",{},[345,348,237],{},[345,350,234],{},[345,352,353],{},"Ruby",[345,355,356],{},"Python",[345,358,359],{},"Go",[361,362,363,381,409,425,441,459],"tbody",{},[342,364,365,370,373,375,377,379],{},[366,367,368],"td",{},[16,369,18],{},[366,371,372],{},"はい",[366,374,372],{},[366,376,372],{},[366,378,372],{},[366,380,372],{},[342,382,383,387,390,392,401,407],{},[366,384,385],{},[16,386,22],{},[366,388,389],{},"いいえ",[366,391,389],{},[366,393,394,395,400],{},"はい (",[195,396,399],{"href":397,"rel":398},"https://github.com/ruby/ruby/blob/0ed71b37fa9af134fdd5a7fd1cebd171eba83541/lib/uri/generic.rb#L1519",[],"警告",")",[366,402,394,403,406],{},[16,404,405],{},"REQUEST_METHOD"," が環境にない場合)",[366,408,372],{},[342,410,411,415,417,419,421,423],{},[366,412,413],{},[16,414,63],{},[366,416,372],{},[366,418,372],{},[366,420,372],{},[366,422,372],{},[366,424,372],{},[342,426,427,431,433,435,437,439],{},[366,428,429],{},[16,430,66],{},[366,432,372],{},[366,434,389],{},[366,436,372],{},[366,438,372],{},[366,440,372],{},[342,442,443,446,449,452,454,456],{},[366,444,445],{},"大文字と小文字の優先順位",[366,447,448],{},"小文字",[366,450,451],{},"小文字のみ",[366,453,448],{},[366,455,448],{},[366,457,458],{},"大文字",[342,460,461,464,471,477,483,489],{},[366,462,463],{},"参照",[366,465,466],{},[195,467,470],{"href":468,"rel":469},"https://github.com/curl/curl/blob/30e7641d7d2eb46c0b67c0c495a0ea7e52333ee2/lib/url.c#L2250-L2266",[],"出所",[366,472,473],{},[195,474,470],{"href":475,"rel":476},"https://github.com/jay/wget/blob/099d8ee3da3a6eea5635581ae517035165f400a5/src/retr.c#L1222-L1239",[],[366,478,479],{},[195,480,470],{"href":481,"rel":482},"https://github.com/ruby/ruby/blob/0ed71b37fa9af134fdd5a7fd1cebd171eba83541/lib/uri/generic.rb#L1474-L1543",[],[366,484,485],{},[195,486,470],{"href":487,"rel":488},"https://github.com/python/cpython/blob/030a713183084594659aefd77b76fe30178e23c8/Lib/urllib/request.py#L2488-L2517",[],[366,490,491],{},[195,492,470],{"href":493,"rel":494},"https://github.com/golang/go/blob/682a1d2176b02337460aeede0ff9e49429525195/src/vendor/golang.org/x/net/http/httpproxy/proxy.go#L82-L97",[],[12,496,497],{},"この表から以下のことがわかります。",[49,499,500],{},[52,501,502,503,508],{},"http_proxyとhttps_proxyは常に全面的にサポートされているが、HTTP_PROXYは必ずしもサポートされているわけではない。  * Python（urllib経由）では状況がさらに複雑となる。HTTP_PROXYが使用できるのは、",[195,504,507],{"href":505,"rel":506},"https://github.com/python/cpython/blob/030a713183084594659aefd77b76fe30178e23c8/Lib/urllib/request.py#L2504-L2508",[],"REQUEST_METHODが環境で定義されていない場合に限られる","。  * Goだけは他と異なり、小文字バージョンより大文字バージョンを優先する。",[12,510,511,512,514],{},"環境変数はすべて大文字だと思われがちですが、実は最初に登場した",[16,513,18],{},"に倣い、小文字表記が事実上のスタンダードとなっています。よくわからない場合は、普遍的にサポートされている小文字形式の使用をおすすめします。",[329,516,517],{"id":517},"no_proxyの場合",[12,519,520,521,524,525,527,528,530],{},"さて、次は",[16,522,523],{},"no_pproxy","について説明します。次の表は、さまざまな実装の状態を示しています。こちらの表は",[16,526,18],{},"の場合に比べてもっと複雑です。例えば、",[16,529,26],{},"設定が次の様に定義されているとします。",[85,532,534],{"className":87,"code":533,"language":89,"meta":90,"style":90},"export no_proxy=example.com\n",[16,535,536],{"__ignoreMap":90},[94,537,538,540,542,544],{"class":96,"line":97},[94,539,101],{"class":100},[94,541,168],{"class":104},[94,543,108],{"class":100},[94,545,546],{"class":104},"example.com\n",[12,548,549],{},"これはドメインが完全一致である必要があるのか、それともsubdomain.example.comのようなサブドメインも含まれるのでしょうか。次の表は様々な実装状況を示しています。「サフィックス（接尾辞）と一致？」の行を見ると分かるように、実際にはすべての実装がサフィックス（ドメイン末尾）を適切に一致させることができます。",[336,551,552,568],{},[339,553,554],{},[342,555,556,558,560,562,564,566],{},[345,557],{},[345,559,237],{},[345,561,234],{},[345,563,353],{},[345,565,356],{},[345,567,359],{},[361,569,570,586,602,616,631,649,667,682,697,712],{},[342,571,572,576,578,580,582,584],{},[366,573,574],{},[16,575,26],{},[366,577,372],{},[366,579,372],{},[366,581,372],{},[366,583,372],{},[366,585,372],{},[342,587,588,592,594,596,598,600],{},[366,589,590],{},[16,591,73],{},[366,593,372],{},[366,595,389],{},[366,597,372],{},[366,599,389],{},[366,601,372],{},[342,603,604,606,608,610,612,614],{},[366,605,445],{},[366,607,448],{},[366,609,451],{},[366,611,448],{},[366,613,451],{},[366,615,458],{},[342,617,618,621,623,625,627,629],{},[366,619,620],{},"サフィックス（接尾辞）と一致？",[366,622,372],{},[366,624,372],{},[366,626,372],{},[366,628,372],{},[366,630,372],{},[342,632,633,639,641,643,645,647],{},[366,634,635,638],{},[16,636,637],{},".","でリーディング停止？",[366,640,372],{},[366,642,389],{},[366,644,372],{},[366,646,372],{},[366,648,389],{},[342,650,651,657,659,661,663,665],{},[366,652,653,656],{},[16,654,655],{},"*"," はすべてのホストに一致？",[366,658,372],{},[366,660,389],{},[366,662,389],{},[366,664,372],{},[366,666,372],{},[342,668,669,672,674,676,678,680],{},[366,670,671],{},"正規表現をサポート？",[366,673,389],{},[366,675,389],{},[366,677,389],{},[366,679,389],{},[366,681,389],{},[342,683,684,687,689,691,693,695],{},[366,685,686],{},"CIDRブロックをサポート？",[366,688,389],{},[366,690,389],{},[366,692,372],{},[366,694,389],{},[366,696,372],{},[342,698,699,702,704,706,708,710],{},[366,700,701],{},"ループバックIPを検出する？",[366,703,389],{},[366,705,389],{},[366,707,389],{},[366,709,389],{},[366,711,372],{},[342,713,714,717,723,729,735,741],{},[366,715,716],{},"参考",[366,718,719],{},[195,720,470],{"href":721,"rel":722},"https://github.com/curl/curl/blob/30e7641d7d2eb46c0b67c0c495a0ea7e52333ee2/lib/url.c#L2152-L2206",[],[366,724,725],{},[195,726,470],{"href":727,"rel":728},"https://github.com/jay/wget/blob/099d8ee3da3a6eea5635581ae517035165f400a5/src/retr.c#L1266-L1274",[],[366,730,731],{},[195,732,470],{"href":733,"rel":734},"https://github.com/ruby/ruby/blob/0ed71b37fa9af134fdd5a7fd1cebd171eba83541/lib/uri/generic.rb#L1545-L1554",[],[366,736,737],{},[195,738,470],{"href":739,"rel":740},"https://github.com/python/cpython/blob/030a713183084594659aefd77b76fe30178e23c8/Lib/urllib/request.py#L2519-L2551",[],[366,742,743],{},[195,744,470],{"href":745,"rel":746},"https://github.com/golang/go/blob/682a1d2176b02337460aeede0ff9e49429525195/src/vendor/golang.org/x/net/http/httpproxy/proxy.go#L170-L206",[],[12,748,749,750,752],{},"ただし、",[16,751,26],{},"設定の先頭に「.」がある場合、動作が異なります。",[12,754,755,756,146,758,760,761,763],{},"たとえば、",[16,757,237],{},[16,759,234],{},"は動作が異なります。",[16,762,237],{},"は常に先頭の「.」を削除し、ドメインサフィックスと照合します。次の呼び出しはプロキシをバイパスします。",[85,765,767],{"className":87,"code":766,"language":89,"meta":90,"style":90},"$ env https_proxy=http://non.existent/ no_proxy=.gitlab.com curl https://gitlab.com\n\u003Chtml>\u003Cbody>You are being \u003Ca href=\"https://about.gitlab.com/\">redirected\u003C/a>.\u003C/body>\u003C/html>\n",[16,768,769,791],{"__ignoreMap":90},[94,770,771,775,779,782,785,788],{"class":96,"line":97},[94,772,774],{"class":773},"s7eDp","$",[94,776,778],{"class":777},"sYBdl"," env",[94,780,781],{"class":777}," https_proxy=http://non.existent/",[94,783,784],{"class":777}," no_proxy=.gitlab.com",[94,786,787],{"class":777}," curl",[94,789,790],{"class":777}," https://gitlab.com\n",[94,792,794,797,800,803,806,808,811,813,816,818,821,823,826,828,830,832,835,838,841],{"class":96,"line":793},2,[94,795,796],{"class":100},"\u003C",[94,798,799],{"class":104},"html>\u003Cbody",[94,801,802],{"class":100},">",[94,804,805],{"class":104},"You are being ",[94,807,796],{"class":100},[94,809,810],{"class":104},"a href",[94,812,108],{"class":100},[94,814,815],{"class":777},"\"https://about.gitlab.com/\"",[94,817,802],{"class":100},[94,819,820],{"class":777},"redirected",[94,822,796],{"class":100},[94,824,825],{"class":777},"/a",[94,827,802],{"class":100},[94,829,637],{"class":777},[94,831,796],{"class":100},[94,833,834],{"class":777},"/body",[94,836,837],{"class":104},">\u003C",[94,839,840],{"class":777},"/html",[94,842,843],{"class":100},">\n",[12,845,749,846,848,849,851,852,854],{},[16,847,234],{},"は先頭の「",[16,850,637],{},"」を削除せず、ホスト名に対して正確な文字列一致を実行します。その結果、",[16,853,234],{},"はトップレベルドメインが使用されている場合にプロキシの使用を試みます。",[85,856,858],{"className":87,"code":857,"language":89,"meta":90,"style":90},"$ env https_proxy=http://non.existent/ no_proxy=.gitlab.com wget https://gitlab.com\nResolving non.existent (non.existent)... failed: Name or service not known.\nwget: unable to resolve host address 'non.existent'\n",[16,859,860,875,886],{"__ignoreMap":90},[94,861,862,864,866,868,870,873],{"class":96,"line":97},[94,863,774],{"class":773},[94,865,778],{"class":777},[94,867,781],{"class":777},[94,869,784],{"class":777},[94,871,872],{"class":777}," wget",[94,874,790],{"class":777},[94,876,877,880,883],{"class":96,"line":793},[94,878,879],{"class":773},"Resolving",[94,881,882],{"class":777}," non.existent",[94,884,885],{"class":104}," (non.existent)... failed: Name or service not known.\n",[94,887,889,892,895,898,901,904,907],{"class":96,"line":888},3,[94,890,891],{"class":773},"wget:",[94,893,894],{"class":777}," unable",[94,896,897],{"class":777}," to",[94,899,900],{"class":777}," resolve",[94,902,903],{"class":777}," host",[94,905,906],{"class":777}," address",[94,908,909],{"class":777}," 'non.existent'\n",[12,911,912],{},"すべての実装において、正規表現はサポートされません。",[12,914,915],{},"正規表現には独自の特徴（PCRE、POSIXなど）があるため、正規表現を使用すると問題がさらに複雑になると思われます。また、正規表現を使用すると、パフォーマンスとセキュリティの問題が発生する可能性があります。",[12,917,918,920,921,923],{},[16,919,26],{},"を",[16,922,655],{},"に設定するとプロキシが完全に無効になる場合もあるが、これはすべてに共通するルールではない。\nプロキシを使用するかどうかを決定する際に、ホスト名をIPアドレスに解決するためのDNSルックアップを実行する実装はない。",[12,925,926,927,929],{},"クライアントによってIPアドレスが明示的に使用されることが予想される場合を除き、",[16,928,26],{},"変数にIPアドレスを指定しないようにしましょう。",[12,931,932,935],{},[16,933,934],{},"18.240.0.1/24","などのCIDRブロックは、リクエストが直接IPアドレスに対して行われた場合にのみ機能します。CIDRブロックが許可されるのはGoとRubyのみです。他の実装とは異なり、GoではループバックIPアドレスが検出されると、プロキシの使用が自動的に無効になります。",[38,937,939],{"id":938},"gitlabのお客様が抱えたno-proxy問題","GitLabのお客様が抱えたno proxy問題",[12,941,942],{},"大文字小文字表記、言語とツールによるリアクションの違いに注意を払う必要があるのは、複数の言語で記述されたアプリケーションを、プロキシサーバーを備えた企業のファイアウォールの背後で動作させる場合です。GitLabもそのひとつであり、RubyとGoで記述された複数のサービスで構成されています。",[12,944,945],{},"ここでGitLabのあるお客様の例を挙げましょう。お客様はプロキシ構文を次のように設定しました。",[85,947,951],{"className":948,"code":949,"language":950,"meta":90,"style":90},"language-yaml shiki shiki-themes github-light","HTTP_PROXY: http://proxy.company.com\nHTTPS_PROXY: http://proxy.company.com\nNO_PROXY: .correct-company.com\n","yaml",[16,952,953,964,972],{"__ignoreMap":90},[94,954,955,958,961],{"class":96,"line":97},[94,956,22],{"class":957},"shJU0",[94,959,960],{"class":104},": ",[94,962,963],{"class":777},"http://proxy.company.com\n",[94,965,966,968,970],{"class":96,"line":793},[94,967,66],{"class":957},[94,969,960],{"class":104},[94,971,963],{"class":777},[94,973,974,976,978],{"class":96,"line":888},[94,975,73],{"class":957},[94,977,960],{"class":104},[94,979,980],{"class":777},".correct-company.com\n",[12,982,983],{},"このお客様からGitLabに以下の問題の報告がありました。",[985,986,987,994],"ol",{},[52,988,989,990,993],{},"コマンドラインからの",[16,991,992],{},"git"," pushが起動した",[52,995,996],{},"ウェブUI経由で行われたGitの変更が失敗した",[12,998,999,1000,1005],{},"連絡を受けたサポートエンジニアは、",[195,1001,1004],{"href":1002,"rel":1003},"https://about.gitlab.com/ja-jp/blog/what-is-kubernetes/",[],"Kubernetes","の構文の問題により、古い値が残っていることを発見しました。ポッドの環境は実際には次のようになっていました。",[85,1007,1009],{"className":948,"code":1008,"language":950,"meta":90,"style":90},"HTTP_PROXY: http://proxy.company.com\nHTTPS_PROXY: http://proxy.company.com\nNO_PROXY: .correct-company.com\nno_proxy: .wrong-company.com\n",[16,1010,1011,1019,1027,1035],{"__ignoreMap":90},[94,1012,1013,1015,1017],{"class":96,"line":97},[94,1014,22],{"class":957},[94,1016,960],{"class":104},[94,1018,963],{"class":777},[94,1020,1021,1023,1025],{"class":96,"line":793},[94,1022,66],{"class":957},[94,1024,960],{"class":104},[94,1026,963],{"class":777},[94,1028,1029,1031,1033],{"class":96,"line":888},[94,1030,73],{"class":957},[94,1032,960],{"class":104},[94,1034,980],{"class":777},[94,1036,1038,1040,1042],{"class":96,"line":1037},4,[94,1039,26],{"class":957},[94,1041,960],{"class":104},[94,1043,1044],{"class":777},".wrong-company.com\n",[12,1046,1047,146,1049,1051],{},[16,1048,26],{},[16,1050,73],{},"、両者の定義が一致していないため警告が出ました。定義を一致させるか／誤ったエントリを削除することで、この問題を解決できます。",[12,1053,1054,1055,1059],{},"この古いエントリの何が原因で問題が起きたのか、もう少し詳しく見てみることにします。先ほど「",[195,1056,1058],{"href":1057},"#bookmark=id.3j5kjy3c5qh2","no proxyの場合","」で述べたことをここで思い出してみましょう。",[985,1061,1062,1065],{},[52,1063,1064],{},"Rubyはまず小文字形式を試す",[52,1066,1067],{},"Goはまず大文字形式を試す",[12,1069,1070,1071,1074],{},"その結果、GitLab WorkhorseなどのGoで記述されたサービスには正しいプロキシ構文となりました。Goサービスが主にこのアクティビティを処理したため、コマンドラインからの",[16,1072,1073],{},"git push","は正常に機能しました。",[85,1076,1080],{"className":1077,"code":1078,"language":1079,"meta":90,"style":90},"language-mermaid shiki shiki-themes github-light","sequenceDiagram\n    participant C as Client\n    participant W as Workhorse\n    participant G as Gitaly\n    C->>W: 1. git push\n    W->>G: 2. gRPC: PostReceivePack\n    G->>W: 3. OK\n    W->>C: 4. OK\n","mermaid",[16,1081,1082,1087,1092,1097,1102,1108,1114,1120],{"__ignoreMap":90},[94,1083,1084],{"class":96,"line":97},[94,1085,1086],{"class":104},"sequenceDiagram\n",[94,1088,1089],{"class":96,"line":793},[94,1090,1091],{"class":104},"    participant C as Client\n",[94,1093,1094],{"class":96,"line":888},[94,1095,1096],{"class":104},"    participant W as Workhorse\n",[94,1098,1099],{"class":96,"line":1037},[94,1100,1101],{"class":104},"    participant G as Gitaly\n",[94,1103,1105],{"class":96,"line":1104},5,[94,1106,1107],{"class":104},"    C->>W: 1. git push\n",[94,1109,1111],{"class":96,"line":1110},6,[94,1112,1113],{"class":104},"    W->>G: 2. gRPC: PostReceivePack\n",[94,1115,1117],{"class":96,"line":1116},7,[94,1118,1119],{"class":104},"    G->>W: 3. OK\n",[94,1121,1123],{"class":96,"line":1122},8,[94,1124,1125],{"class":104},"    W->>C: 4. OK\n",[12,1127,1128,1129,1131],{},"gRPC呼び出しでは、",[16,1130,26],{},"がGitalyに直接接続するように適切に構成されていたため、プロキシの使用が試行されませんでした。",[12,1133,1134,1135,1138,1139,1141,1142,1147],{},"ただし、ユーザーがUIを変更すると、GitalyはリクエストをRubyで記述された",[16,1136,1137],{},"gitaly-ruby","サービスに転送します。",[16,1140,1137],{},"はリポジトリに変更を加え、",[195,1143,1146],{"href":1144,"rel":1145},"https://gitlab.com/gitlab-org/gitaly/-/issues/3189",[],"gRPCコールバックを介して親プロセスにレポートを返します","(英語）。ただし、以下の手順4に示すように、レポート手順は実行されませんでした。",[85,1149,1151],{"className":1077,"code":1150,"language":1079,"meta":90,"style":90},"sequenceDiagram\n    participant C as Client\n    participant R as Rails\n    participant G as Gitaly\n    participant GR as gitaly-ruby\n    participant P as Proxy\n    C->>R: 1. Change file in UI\n    R->>G: 2. gRPC: UserCommitFiles\n    G->>GR: 3. gRPC: UserCommitFiles\n    GR->>P: 4. CONNECT\n    P->>GR: 5. FAIL\n",[16,1152,1153,1157,1161,1166,1170,1175,1180,1185,1190,1196,1202],{"__ignoreMap":90},[94,1154,1155],{"class":96,"line":97},[94,1156,1086],{"class":104},[94,1158,1159],{"class":96,"line":793},[94,1160,1091],{"class":104},[94,1162,1163],{"class":96,"line":888},[94,1164,1165],{"class":104},"    participant R as Rails\n",[94,1167,1168],{"class":96,"line":1037},[94,1169,1101],{"class":104},[94,1171,1172],{"class":96,"line":1104},[94,1173,1174],{"class":104},"    participant GR as gitaly-ruby\n",[94,1176,1177],{"class":96,"line":1110},[94,1178,1179],{"class":104},"    participant P as Proxy\n",[94,1181,1182],{"class":96,"line":1116},[94,1183,1184],{"class":104},"    C->>R: 1. Change file in UI\n",[94,1186,1187],{"class":96,"line":1122},[94,1188,1189],{"class":104},"    R->>G: 2. gRPC: UserCommitFiles\n",[94,1191,1193],{"class":96,"line":1192},9,[94,1194,1195],{"class":104},"    G->>GR: 3. gRPC: UserCommitFiles\n",[94,1197,1199],{"class":96,"line":1198},10,[94,1200,1201],{"class":104},"    GR->>P: 4. CONNECT\n",[94,1203,1205],{"class":96,"line":1204},11,[94,1206,1207],{"class":104},"    P->>GR: 5. FAIL\n",[12,1209,1210,1211,1213,1214,1216],{},"gRPCは基盤となるトランスポートとしてHTTP/2を使用するため、",[16,1212,1137],{},"は間違った",[16,1215,26],{},"設定で構成されたプロキシへのCONNECTを試行しました。プロキシはこのHTTP要求を即座に拒否し、ウェブUIプッシュケースで失敗を引き起こしました。",[12,1218,1219,1220,1222,1223,1225],{},"環境から小文字の",[16,1221,26],{},"を削除すると、UIからのプッシュが期待どおりに機能し、",[16,1224,1137],{},"が親のGitalyプロセスに直接接続されました。以下の図のステップ4は適切に機能しました。",[85,1227,1229],{"className":1077,"code":1228,"language":1079,"meta":90,"style":90},"sequenceDiagram\n    participant C as Client\n    participant R as Rails\n    participant G as Gitaly\n    participant GR as gitaly-ruby\n    participant P as Proxy\n    C->>R: 1. Change file in UI\n    R->>G: 2. gRPC: UserCommitFiles\n    G->>GR: 3. gRPC: UserCommitFiles\n    GR->>G: 4. OK\n    G->>R: 5. OK\n    R->>C: 6. OK\n",[16,1230,1231,1235,1239,1243,1247,1251,1255,1259,1263,1267,1272,1277],{"__ignoreMap":90},[94,1232,1233],{"class":96,"line":97},[94,1234,1086],{"class":104},[94,1236,1237],{"class":96,"line":793},[94,1238,1091],{"class":104},[94,1240,1241],{"class":96,"line":888},[94,1242,1165],{"class":104},[94,1244,1245],{"class":96,"line":1037},[94,1246,1101],{"class":104},[94,1248,1249],{"class":96,"line":1104},[94,1250,1174],{"class":104},[94,1252,1253],{"class":96,"line":1110},[94,1254,1179],{"class":104},[94,1256,1257],{"class":96,"line":1116},[94,1258,1184],{"class":104},[94,1260,1261],{"class":96,"line":1122},[94,1262,1189],{"class":104},[94,1264,1265],{"class":96,"line":1192},[94,1266,1195],{"class":104},[94,1268,1269],{"class":96,"line":1198},[94,1270,1271],{"class":104},"    GR->>G: 4. OK\n",[94,1273,1274],{"class":96,"line":1204},[94,1275,1276],{"class":104},"    G->>R: 5. OK\n",[94,1278,1280],{"class":96,"line":1279},12,[94,1281,1282],{"class":104},"    R->>C: 6. OK\n",[329,1284,1286],{"id":1285},"もう一つの原因はgrpcにあった","もう一つの原因はgRPCにあった",[12,1288,1289,1292,1293,1296],{},[16,1290,1291],{},"https://","ではなく",[16,1294,1295],{},"http://","が使用されています。セキュリティの観点からは理想的ではありませんが、TLS証明書の検証の問題によりクライアントが失敗するという面倒を避けるために行う場合もあります。",[12,1298,1299,1300,1305],{},"しかしこの場合、HTTPSプロキシが指定されていれば、この問題は発生しなかったでしょう。HTTPSプロキシが使用されている場合、gRPCは",[195,1301,1304],{"href":1302,"rel":1303},"https://github.com/grpc/grpc/issues/20939",[],"HTTPSプロキシをサポートしていない","ため、この設定を無視するからです。",[38,1307,1309],{"id":1308},"解決策最小限の共通項で設定する","解決策：最小限の共通項で設定する",[12,1311,1312],{},"小文字と大文字のプロキシ設定で矛盾した値を定義すべきではないことは、誰もが同意すると思います。ただし、複数の言語で記述されたスタックを管理する必要がある場合は、HTTPプロキシ構文を最も共通する設定で行うよう検討することをおすすめします。",[329,1314,1316,1318,1319],{"id":1315},"http_proxy-と-https_proxy",[16,1317,18],{}," と ",[16,1320,63],{},[49,1322,1323],{},[52,1324,1325,1326,1328,1329],{},"小文字形式を使用する。 ",[16,1327,22],{}," は常にサポートまたは推奨されるわけではない。\n",[49,1330,1331],{},[52,1332,1333,1334,1338],{},"どうしても大文字形式も使用する必要がある場合は、",[1335,1336,1337],"strong",{},"必ず"," 同じ値を共有する。",[329,1340,1341],{"id":26},[16,1342,26],{},[985,1344,1345,1348,1355,1358,1369,1375],{},[52,1346,1347],{},"小文字形式を使用する。",[52,1349,1350,1351,1354],{},"カンマ区切りの",[16,1352,1353],{},"hostname:port","値を使用する。",[52,1356,1357],{},"IPアドレスは問題ないが、ホスト名は解決されない。",[52,1359,1360,1361,1364,1365,1368],{},"サフィックスは常にマッチングされる(例:",[16,1362,1363],{},"example.com","は",[16,1366,1367],{},"test.example.com","と一致)。",[52,1370,1371,1372,1374],{},"トップレベルドメインを一致させる必要がある場合は、先頭のドット(",[16,1373,637],{},")を使用しない。",[52,1376,1377],{},"GoとRubyのみがCIDRマッチングをサポートしているため、CIDRマッチングの使用は避ける。",[38,1379,1381,1382,1384],{"id":1380},"解決策no_proxyの標準化チェックリスト","解決策：",[16,1383,26],{},"の標準化チェックリスト",[12,1386,1387,1388,1390],{},"最小公分母を知っておくと、定義が異なるウェブクライアントにコピーされた場合に、問題を回避する上で役立ちます。しかし、",[16,1389,26],{},"やその他のプロキシ設定には、間に合わせの標準よりも、文書化された標準が必要かもしれません。以下のリストを出発点としてお役立てください。",[985,1392,1393,1402,1413,1416,1425,1431,1434],{},[52,1394,1395,1396,1398,1399,1401],{},"大文字の変数よりも小文字の変数を優先する (例 ",[16,1397,18],{}," は",[16,1400,22],{},"の前に検索すべき)。",[52,1403,1404,1405,1407,1408],{},"カンマ区切りの ",[16,1406,1353],{}," 値を使用する。\n",[49,1409,1410],{},[52,1411,1412],{},"各値にはオプションの空白を含めることができる。",[52,1414,1415],{},"DNSルックアップの実行や、正規表現の使用を行わない。",[52,1417,1418,1421,1422,1424],{},[1335,1419,1420],{},"すべての"," ホストに一致させるには",[16,1423,655],{},"を使用する。",[52,1426,1427,1428,1430],{},"先頭のドット (",[16,1429,637],{},") を削除し、ドメインサフィックスに対してマッチングさせる。",[52,1432,1433],{},"CIDRブロックマッチングをサポートする。",[52,1435,1436,1437,1439],{},"特別なIPアドレスを想定しない（たとえば",[16,1438,26],{},"のループバックアドレス)。",[329,1441,1442],{"id":1442},"まとめ",[12,1444,1445],{},"最初のウェブプロキシがリリースされてから25年以上経ちました。環境変数を介してウェブクライアントを構成する基本的な仕組みはあまり変わっていませんが、さまざまな実装で微妙な違いが生じています。",[12,1447,1448],{},"今回、GitLabのあるお客様の具体的な事例をご紹介しました。このお客様の状況は以下のとおりでした。",[49,1450,1451],{},[52,1452,1453,1454,1456,1457,1459],{},"競合する",[16,1455,26],{},"変数と",[16,1458,73],{},"変数を誤って定義  * RubyとGoはこれらの設定を処理する方法が異なるため、トラブルシューティングに何時間も費やす",[12,1461,1462],{},"このブログではこの2つの違いに焦点を当て、解説しました。皆様の本番スタックで将来の問題発生回避にお役立ていただけると幸いです。また、設定標準チェックリストを参照して、ウェブクライアントの保守担当者様が動作を標準化し、このような問題を根本的に回避することを願っています。",[12,1464,1465,1466,1471],{},"Gitの利便性を生かしつつ、一元化されたプラットフォームでデベロッパー、セキュリティ担当者、運用チームをサポートするGitLabでは、",[195,1467,1470],{"href":1468,"rel":1469},"https://about.gitlab.com/ja-jp/platform/",[],"AIによるコード提案機能があるため、効率性を高められます","。導入検討中の方は、ぜひ無料でのトライアルをお試しください。",[1473,1474,1475],"blockquote",{},[12,1476,1477],{},[195,1478,1481],{"href":1479,"rel":1480},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/platform&glm_content=default-saas-trial",[],"無料トライアルを開始してみる",[12,1483,1484,1485],{},"画像出展： ",[195,1486,1489],{"href":1487,"rel":1488},"https://pixabay.com/illustrations/question-mark-pile-questions-symbol-2492009",[],"PixaBay",[12,1491,1492,1495,1497],{},[1493,1494],"br",{},[1493,1496],{},[1493,1498],{},[12,1500,1501],{},[1502,1503,1504,1505,1510,1512],"em",{},"監修：小松原 つかさ  ",[195,1506,1509],{"href":1507,"rel":1508},"https://gitlab.com/tkomatsubara",[],"@tkomatsubara",[1493,1511],{},"\n（GitLab合同会社 ソリューションアーキテクト本部 シニアパートナーソリューションアーキテクト）",[1514,1515,1516],"style",{},"html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}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 .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}",{"title":90,"searchDepth":793,"depth":793,"links":1518},[1519,1520,1521,1522,1523,1524],{"id":40,"depth":888,"text":41},{"id":186,"depth":888,"text":187},{"id":318,"depth":888,"text":318},{"id":938,"depth":888,"text":939},{"id":1308,"depth":888,"text":1309},{"id":1380,"depth":888,"text":1525},"解決策：no_proxyの標準化チェックリスト","engineering","2021-01-27","環境変数“no proxy”が原因で問題発生したことは？お客様事例を取り上げ、標準化の方法を考えてみました。","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659507/Blog/Hero%20Images/AdobeStock_623844718.jpg",{},true,"/ja-jp/blog/we-need-to-talk-no-proxy",{"title":5,"description":1528,"ogTitle":5,"ogDescription":1528,"noIndex":1531,"ogImage":1532,"ogUrl":1537,"ogSiteName":1538,"ogType":1539,"canonicalUrls":1537},"https://about.gitlab.com/blog/we-need-to-talk-no-proxy","https://about.gitlab.com","article","we-need-to-talk-no-proxy","ja-jp/blog/we-need-to-talk-no-proxy",[1543,1544,1545,1546],"community","careers","user stories","startups","BlogPost","2025-03-17","JQPIw_yGG9-vuB0f-L_vn5ufjQIEvYJx6tdOTPd_QVQ",{"logo":1551,"freeTrial":1556,"sales":1561,"login":1566,"items":1571,"search":1899,"minimal":1932,"duo":1949,"switchNav":1958,"pricingDeployment":1969},{"config":1552},{"href":1553,"dataGaName":1554,"dataGaLocation":1555},"/ja-jp/","gitlab logo","header",{"text":1557,"config":1558},"無料トライアルを開始",{"href":1559,"dataGaName":1560,"dataGaLocation":1555},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp&glm_content=default-saas-trial/","free trial",{"text":1562,"config":1563},"デモをリクエスト",{"href":1564,"dataGaName":1565,"dataGaLocation":1555},"/ja-jp/sales/?contact-topic=request-demo","sales",{"text":1567,"config":1568},"サインイン",{"href":1569,"dataGaName":1570,"dataGaLocation":1555},"https://gitlab.com/users/sign_in/","sign in",[1572,1601,1703,1708,1821,1877],{"text":1573,"config":1574,"menu":1576},"プラットフォーム",{"dataNavLevelOne":1575},"platform",{"type":1577,"columns":1578},"cards",[1579,1585,1593],{"title":1573,"description":1580,"link":1581},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":1582,"config":1583},"プラットフォームの詳細はこちら",{"href":1584,"dataGaName":1575,"dataGaLocation":1555},"/ja-jp/platform/",{"title":1586,"description":1587,"link":1588},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":1589,"config":1590},"GitLab Duoのご紹介",{"href":1591,"dataGaName":1592,"dataGaLocation":1555},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1594,"description":1595,"link":1596},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":1597,"config":1598},"詳細はこちら",{"href":1599,"dataGaName":1600,"dataGaLocation":1555},"/ja-jp/why-gitlab/","why gitlab",{"text":1602,"left":1534,"config":1603,"menu":1605},"製品",{"dataNavLevelOne":1604},"solutions",{"type":1606,"link":1607,"columns":1611,"feature":1682},"lists",{"text":1608,"config":1609},"すべてのソリューションを表示",{"href":1610,"dataGaName":1604,"dataGaLocation":1555},"/ja-jp/solutions/",[1612,1637,1660],{"title":1613,"description":1614,"link":1615,"items":1620},"自動化","CI/CDと自動化でデプロイを加速",{"config":1616},{"icon":1617,"href":1618,"dataGaName":1619,"dataGaLocation":1555},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[1621,1625,1628,1633],{"text":1622,"config":1623},"CI/CD",{"href":1624,"dataGaLocation":1555,"dataGaName":1622},"/ja-jp/solutions/continuous-integration/",{"text":1586,"config":1626},{"href":1591,"dataGaLocation":1555,"dataGaName":1627},"gitlab duo agent platform - product menu",{"text":1629,"config":1630},"ソースコード管理",{"href":1631,"dataGaLocation":1555,"dataGaName":1632},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":1634,"config":1635},"自動化されたソフトウェアデリバリー",{"href":1618,"dataGaLocation":1555,"dataGaName":1636},"Automated software delivery",{"title":1638,"description":1639,"link":1640,"items":1645},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":1641},{"href":1642,"dataGaName":1643,"dataGaLocation":1555,"icon":1644},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1646,1650,1655],{"text":1647,"config":1648},"アプリケーションセキュリティテスト",{"href":1642,"dataGaName":1649,"dataGaLocation":1555},"Application security testing",{"text":1651,"config":1652},"ソフトウェアサプライチェーンセキュリティ",{"href":1653,"dataGaLocation":1555,"dataGaName":1654},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":1656,"config":1657},"ソフトウェアコンプライアンス",{"href":1658,"dataGaName":1659,"dataGaLocation":1555},"/ja-jp/solutions/software-compliance/","software compliance",{"title":1661,"link":1662,"items":1667},"測定",{"config":1663},{"icon":1664,"href":1665,"dataGaName":1666,"dataGaLocation":1555},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[1668,1672,1677],{"text":1669,"config":1670},"可視性と測定",{"href":1665,"dataGaLocation":1555,"dataGaName":1671},"Visibility and Measurement",{"text":1673,"config":1674},"バリューストリーム管理",{"href":1675,"dataGaLocation":1555,"dataGaName":1676},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":1678,"config":1679},"分析とインサイト",{"href":1680,"dataGaLocation":1555,"dataGaName":1681},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":1683,"type":1606,"items":1684},"GitLabが活躍する場所",[1685,1691,1697],{"text":1686,"config":1687},"大企業",{"icon":1688,"href":1689,"dataGaLocation":1555,"dataGaName":1690},"Building","/ja-jp/enterprise/","enterprise",{"text":1692,"config":1693},"スモールビジネス",{"icon":1694,"href":1695,"dataGaLocation":1555,"dataGaName":1696},"Work","/ja-jp/small-business/","small business",{"text":1698,"config":1699},"公共部門",{"icon":1700,"href":1701,"dataGaLocation":1555,"dataGaName":1702},"Organization","/ja-jp/solutions/public-sector/","public sector",{"text":1704,"config":1705},"価格",{"href":1706,"dataGaName":1707,"dataGaLocation":1555,"dataNavLevelOne":1707},"/ja-jp/pricing/","pricing",{"text":1709,"config":1710,"menu":1712},"関連リソース",{"dataNavLevelOne":1711},"resources",{"type":1606,"link":1713,"columns":1717,"feature":1810},{"text":1714,"config":1715},"すべてのリソースを表示",{"href":1716,"dataGaName":1711,"dataGaLocation":1555},"/ja-jp/resources/",[1718,1751,1778],{"title":1719,"items":1720},"はじめに",[1721,1726,1731,1736,1741,1746],{"text":1722,"config":1723},"インストール",{"href":1724,"dataGaName":1725,"dataGaLocation":1555},"/ja-jp/install/","install",{"text":1727,"config":1728},"クイックスタートガイド",{"href":1729,"dataGaName":1730,"dataGaLocation":1555},"/ja-jp/get-started/","quick setup checklists",{"text":1732,"config":1733},"学ぶ",{"href":1734,"dataGaLocation":1555,"dataGaName":1735},"https://university.gitlab.com/","learn",{"text":1737,"config":1738},"製品ドキュメント",{"href":1739,"dataGaName":1740,"dataGaLocation":1555},"https://docs.gitlab.com/ja-jp/","product documentation",{"text":1742,"config":1743},"ベストプラクティスビデオ",{"href":1744,"dataGaName":1745,"dataGaLocation":1555},"/ja-jp/getting-started-videos/","best practice videos",{"text":1747,"config":1748},"インテグレーション",{"href":1749,"dataGaName":1750,"dataGaLocation":1555},"/ja-jp/integrations/","integrations",{"title":1752,"items":1753},"検索する",[1754,1759,1764,1769,1773],{"text":1755,"config":1756},"お客様成功事例",{"href":1757,"dataGaName":1758,"dataGaLocation":1555},"/ja-jp/customers/","customer success stories",{"text":1760,"config":1761},"ブログ",{"href":1762,"dataGaName":1763,"dataGaLocation":1555},"/ja-jp/blog/","blog",{"text":1765,"config":1766},"Demo Hub",{"href":1767,"dataGaName":1768,"dataGaLocation":1555},"/ja-jp/demo-hub/","demo hub",{"text":1770,"config":1771},"The Source",{"href":1772,"dataGaName":1763,"dataGaLocation":1555},"/ja-jp/the-source/",{"text":1774,"config":1775},"リモート",{"href":1776,"dataGaName":1777,"dataGaLocation":1555},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1779,"items":1780},"つなげる",[1781,1786,1791,1795,1800,1805],{"text":1782,"config":1783},"GitLabサービス",{"href":1784,"dataGaName":1785,"dataGaLocation":1555},"/ja-jp/services/","services",{"text":1787,"config":1788},"コントリビュート",{"href":1789,"dataGaName":1790,"dataGaLocation":1555},"https://contributors.gitlab.com","contribute",{"text":1792,"config":1793},"コミュニティ",{"href":1794,"dataGaName":1543,"dataGaLocation":1555},"/community/",{"text":1796,"config":1797},"フォーラム",{"href":1798,"dataGaName":1799,"dataGaLocation":1555},"https://forum.gitlab.com/","forum",{"text":1801,"config":1802},"イベント",{"href":1803,"dataGaName":1804,"dataGaLocation":1555},"/events/","events",{"text":1806,"config":1807},"パートナー",{"href":1808,"dataGaName":1809,"dataGaLocation":1555},"/ja-jp/partners/","partners",{"config":1811,"title":1814,"text":1815,"link":1816},{"background":1812,"textColor":1813},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","GitLabの最新情報","最新の機能と改善点に関する情報をお届けします。",{"text":1817,"config":1818},"最新情報を読む",{"href":1819,"dataGaName":1820,"dataGaLocation":1555},"/ja-jp/whats-new/","whats new",{"text":1822,"config":1823,"menu":1825},"企業情報",{"dataNavLevelOne":1824},"company",{"type":1606,"columns":1826},[1827],{"items":1828},[1829,1834,1840,1842,1847,1852,1857,1862,1867,1872],{"text":1830,"config":1831},"GitLabについて",{"href":1832,"dataGaName":1833,"dataGaLocation":1555},"/ja-jp/company/","about",{"text":1835,"config":1836,"footerGa":1839},"採用情報",{"href":1837,"dataGaName":1838,"dataGaLocation":1555},"/jobs/","jobs",{"dataGaName":1838},{"text":1801,"config":1841},{"href":1803,"dataGaName":1804,"dataGaLocation":1555},{"text":1843,"config":1844},"経営陣",{"href":1845,"dataGaName":1846,"dataGaLocation":1555},"/company/team/e-group/","leadership",{"text":1848,"config":1849},"ハンドブック",{"href":1850,"dataGaName":1851,"dataGaLocation":1555},"https://handbook.gitlab.com/","handbook",{"text":1853,"config":1854},"投資家向け情報",{"href":1855,"dataGaName":1856,"dataGaLocation":1555},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1858,"config":1859},"トラストセンター",{"href":1860,"dataGaName":1861,"dataGaLocation":1555},"/ja-jp/security/","trust center",{"text":1863,"config":1864},"AI Transparency Center",{"href":1865,"dataGaName":1866,"dataGaLocation":1555},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":1868,"config":1869},"ニュースレター",{"href":1870,"dataGaName":1871,"dataGaLocation":1555},"/company/contact/#contact-forms","newsletter",{"text":1873,"config":1874},"プレス",{"href":1875,"dataGaName":1876,"dataGaLocation":1555},"/press/","press",{"text":1878,"config":1879,"menu":1880},"お問い合わせ",{"dataNavLevelOne":1824},{"type":1606,"columns":1881},[1882],{"items":1883},[1884,1889,1894],{"text":1885,"config":1886},"お問い合わせはこちら",{"href":1887,"dataGaName":1888,"dataGaLocation":1555},"/ja-jp/sales/","talk to sales",{"text":1890,"config":1891},"サポートを受ける",{"href":1892,"dataGaName":1893,"dataGaLocation":1555},"https://support.gitlab.com/hc/en-us","support portal",{"text":1895,"config":1896},"カスタマーポータル",{"href":1897,"dataGaName":1898,"dataGaLocation":1555},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1900,"login":1901,"suggestions":1908},"閉じる",{"text":1902,"link":1903},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":1904,"config":1905},"GitLab.com",{"href":1569,"dataGaName":1906,"dataGaLocation":1907},"search login","search",{"text":1909,"default":1910},"提案",[1911,1913,1918,1920,1924,1928],{"text":1586,"config":1912},{"href":1591,"dataGaName":1586,"dataGaLocation":1907},{"text":1914,"config":1915},"コード提案（AI）",{"href":1916,"dataGaName":1917,"dataGaLocation":1907},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1622,"config":1919},{"href":1624,"dataGaName":1622,"dataGaLocation":1907},{"text":1921,"config":1922},"GitLab on AWS",{"href":1923,"dataGaName":1921,"dataGaLocation":1907},"/ja-jp/partners/technology-partners/aws/",{"text":1925,"config":1926},"GitLab on Google Cloud",{"href":1927,"dataGaName":1925,"dataGaLocation":1907},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":1929,"config":1930},"GitLabを選ぶ理由",{"href":1599,"dataGaName":1931,"dataGaLocation":1907},"Why GitLab?",{"freeTrial":1933,"mobileIcon":1937,"desktopIcon":1942,"secondaryButton":1945},{"text":1557,"config":1934},{"href":1935,"dataGaName":1560,"dataGaLocation":1936},"https://gitlab.com/-/trials/new/","nav",{"altText":1938,"config":1939},"GitLabアイコン",{"src":1940,"dataGaName":1941,"dataGaLocation":1936},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1938,"config":1943},{"src":1944,"dataGaName":1941,"dataGaLocation":1936},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1719,"config":1946},{"href":1947,"dataGaName":1948,"dataGaLocation":1936},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/get-started/","get started",{"freeTrial":1950,"mobileIcon":1954,"desktopIcon":1956},{"text":1951,"config":1952},"GitLab Duoの詳細について",{"href":1591,"dataGaName":1953,"dataGaLocation":1936},"gitlab duo",{"altText":1938,"config":1955},{"src":1940,"dataGaName":1941,"dataGaLocation":1936},{"altText":1938,"config":1957},{"src":1944,"dataGaName":1941,"dataGaLocation":1936},{"button":1959,"mobileIcon":1964,"desktopIcon":1966},{"text":1960,"config":1961},"/switch",{"href":1962,"dataGaName":1963,"dataGaLocation":1936},"#contact","switch",{"altText":1938,"config":1965},{"src":1940,"dataGaName":1941,"dataGaLocation":1936},{"altText":1938,"config":1967},{"src":1968,"dataGaName":1941,"dataGaLocation":1936},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1970,"mobileIcon":1975,"desktopIcon":1977},{"text":1971,"config":1972},"料金ページに戻る",{"href":1706,"dataGaName":1973,"dataGaLocation":1936,"icon":1974},"back to pricing","GoBack",{"altText":1938,"config":1976},{"src":1940,"dataGaName":1941,"dataGaLocation":1936},{"altText":1938,"config":1978},{"src":1944,"dataGaName":1941,"dataGaLocation":1936},{"title":1980,"button":1981,"config":1985},"GitLab Orbitが登場: AIエージェントのためのコンテキストレイヤー",{"text":1597,"config":1982},{"href":1983,"dataGaName":1984,"dataGaLocation":1555},"/ja-jp/gitlab-orbit/","orbit",{"layout":1986,"disabled":1531},"release",{"data":1988},{"text":1989,"source":1990,"edit":1996,"contribute":2001,"config":2006,"items":2011,"minimal":2220},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":1991,"config":1992},"ページのソースを表示",{"href":1993,"dataGaName":1994,"dataGaLocation":1995},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1997,"config":1998},"このページを編集",{"href":1999,"dataGaName":2000,"dataGaLocation":1995},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":2002,"config":2003},"ご協力をお願いします",{"href":2004,"dataGaName":2005,"dataGaLocation":1995},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2007,"facebook":2008,"youtube":2009,"linkedin":2010},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2012,2057,2110,2153,2187],{"title":1704,"links":2013,"subMenu":2028},[2014,2018,2023],{"text":2015,"config":2016},"プランの表示",{"href":1706,"dataGaName":2017,"dataGaLocation":1995},"view plans",{"text":2019,"config":2020},"Premiumを選ぶ理由",{"href":2021,"dataGaName":2022,"dataGaLocation":1995},"/ja-jp/pricing/premium/","why premium",{"text":2024,"config":2025},"Ultimateを選ぶ理由",{"href":2026,"dataGaName":2027,"dataGaLocation":1995},"/ja-jp/pricing/ultimate/","why ultimate",[2029],{"title":1878,"links":2030},[2031,2033,2035,2037,2042,2047,2052],{"text":1878,"config":2032},{"href":1887,"dataGaName":1565,"dataGaLocation":1995},{"text":1890,"config":2034},{"href":1892,"dataGaName":1893,"dataGaLocation":1995},{"text":1895,"config":2036},{"href":1897,"dataGaName":1898,"dataGaLocation":1995},{"text":2038,"config":2039},"ステータス",{"href":2040,"dataGaName":2041,"dataGaLocation":1995},"https://status.gitlab.com/","status",{"text":2043,"config":2044},"利用規約",{"href":2045,"dataGaName":2046,"dataGaLocation":1995},"/terms/","terms of use",{"text":2048,"config":2049},"プライバシーに関する声明",{"href":2050,"dataGaName":2051,"dataGaLocation":1995},"/ja-jp/privacy/","privacy statement",{"text":2053,"config":2054},"Cookie 優先設定",{"dataGaName":2055,"dataGaLocation":1995,"id":2056,"isOneTrustButton":1534},"cookie preferences","ot-sdk-btn",{"title":1602,"links":2058,"subMenu":2067},[2059,2063],{"text":2060,"config":2061},"DevSecOpsプラットフォーム",{"href":1584,"dataGaName":2062,"dataGaLocation":1995},"devsecops platform",{"text":2064,"config":2065},"AI支援開発",{"href":1591,"dataGaName":2066,"dataGaLocation":1995},"ai-assisted development",[2068],{"title":2069,"links":2070},"トピック",[2071,2075,2080,2085,2090,2095,2100,2105],{"text":1622,"config":2072},{"href":2073,"dataGaName":2074,"dataGaLocation":1995},"/ja-jp/topics/ci-cd/","cicd",{"text":2076,"config":2077},"GitOps",{"href":2078,"dataGaName":2079,"dataGaLocation":1995},"/ja-jp/topics/gitops/","gitops",{"text":2081,"config":2082},"DevOps",{"href":2083,"dataGaName":2084,"dataGaLocation":1995},"/ja-jp/topics/devops/","devops",{"text":2086,"config":2087},"バージョン管理",{"href":2088,"dataGaName":2089,"dataGaLocation":1995},"/ja-jp/topics/version-control/","version control",{"text":2091,"config":2092},"DevSecOps",{"href":2093,"dataGaName":2094,"dataGaLocation":1995},"/ja-jp/topics/devsecops/","devsecops",{"text":2096,"config":2097},"クラウドネイティブ",{"href":2098,"dataGaName":2099,"dataGaLocation":1995},"/ja-jp/topics/cloud-native/","cloud native",{"text":2101,"config":2102},"コーディングのためのAI",{"href":2103,"dataGaName":2104,"dataGaLocation":1995},"/ja-jp/topics/devops/ai-for-coding/","ai for coding",{"text":2106,"config":2107},"エージェント型AI",{"href":2108,"dataGaName":2109,"dataGaLocation":1995},"/ja-jp/topics/agentic-ai/","agentic ai",{"title":2111,"links":2112},"ソリューション",[2113,2116,2118,2123,2127,2130,2133,2136,2138,2140,2143,2148],{"text":1647,"config":2114},{"href":1642,"dataGaName":2115,"dataGaLocation":1995},"Application Security Testing",{"text":1634,"config":2117},{"href":1618,"dataGaName":1619,"dataGaLocation":1995},{"text":2119,"config":2120},"アジャイル開発",{"href":2121,"dataGaName":2122,"dataGaLocation":1995},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":2124,"config":2125},"SCM",{"href":1631,"dataGaName":2126,"dataGaLocation":1995},"source code management",{"text":1622,"config":2128},{"href":1624,"dataGaName":2129,"dataGaLocation":1995},"continuous integration & delivery",{"text":1673,"config":2131},{"href":1675,"dataGaName":2132,"dataGaLocation":1995},"value stream management",{"text":2076,"config":2134},{"href":2135,"dataGaName":2079,"dataGaLocation":1995},"/ja-jp/solutions/gitops/",{"text":1686,"config":2137},{"href":1689,"dataGaName":1690,"dataGaLocation":1995},{"text":1692,"config":2139},{"href":1695,"dataGaName":1696,"dataGaLocation":1995},{"text":2141,"config":2142},"公共機関",{"href":1701,"dataGaName":1702,"dataGaLocation":1995},{"text":2144,"config":2145},"教育",{"href":2146,"dataGaName":2147,"dataGaLocation":1995},"/ja-jp/solutions/education/","education",{"text":2149,"config":2150},"金融サービス",{"href":2151,"dataGaName":2152,"dataGaLocation":1995},"/ja-jp/solutions/finance/","financial services",{"title":2154,"links":2155},"リソース",[2156,2158,2160,2162,2166,2168,2171,2173,2175,2177,2179,2181,2183,2185],{"text":1722,"config":2157},{"href":1724,"dataGaName":1725,"dataGaLocation":1995},{"text":1727,"config":2159},{"href":1729,"dataGaName":1730,"dataGaLocation":1995},{"text":1732,"config":2161},{"href":1734,"dataGaName":1735,"dataGaLocation":1995},{"text":1737,"config":2163},{"href":2164,"dataGaName":2165,"dataGaLocation":1995},"https://docs.gitlab.com/ja-jp","docs",{"text":1760,"config":2167},{"href":1762,"dataGaName":1763,"dataGaLocation":1995},{"text":2169,"config":2170},"最新リリース",{"href":1819,"dataGaName":1820,"dataGaLocation":1995},{"text":1755,"config":2172},{"href":1757,"dataGaName":1758,"dataGaLocation":1995},{"text":1774,"config":2174},{"href":1776,"dataGaName":1777,"dataGaLocation":1995},{"text":1782,"config":2176},{"href":1784,"dataGaName":1785,"dataGaLocation":1995},{"text":1787,"config":2178},{"href":1789,"dataGaName":1790,"dataGaLocation":1995},{"text":1792,"config":2180},{"href":1794,"dataGaName":1543,"dataGaLocation":1995},{"text":1796,"config":2182},{"href":1798,"dataGaName":1799,"dataGaLocation":1995},{"text":1801,"config":2184},{"href":1803,"dataGaName":1804,"dataGaLocation":1995},{"text":1806,"config":2186},{"href":1808,"dataGaName":1809,"dataGaLocation":1995},{"title":2188,"links":2189},"会社情報",[2190,2192,2194,2196,2198,2200,2204,2209,2211,2213,2215],{"text":1830,"config":2191},{"href":1832,"dataGaName":1824,"dataGaLocation":1995},{"text":1835,"config":2193},{"href":1837,"dataGaName":1838,"dataGaLocation":1995},{"text":1843,"config":2195},{"href":1845,"dataGaName":1846,"dataGaLocation":1995},{"text":1848,"config":2197},{"href":1850,"dataGaName":1851,"dataGaLocation":1995},{"text":1853,"config":2199},{"href":1855,"dataGaName":1856,"dataGaLocation":1995},{"text":2201,"config":2202},"Sustainability",{"href":2203,"dataGaName":2201,"dataGaLocation":1995},"/sustainability/",{"text":2205,"config":2206},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":2207,"dataGaName":2208,"dataGaLocation":1995},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1858,"config":2210},{"href":1860,"dataGaName":1861,"dataGaLocation":1995},{"text":1868,"config":2212},{"href":1870,"dataGaName":1871,"dataGaLocation":1995},{"text":1873,"config":2214},{"href":1875,"dataGaName":1876,"dataGaLocation":1995},{"text":2216,"config":2217},"現代奴隷制の透明性に関する声明",{"href":2218,"dataGaName":2219,"dataGaLocation":1995},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2221},[2222,2224,2227],{"text":2043,"config":2223},{"href":2045,"dataGaName":2046,"dataGaLocation":1995},{"text":2225,"config":2226},"Cookieの設定",{"dataGaName":2055,"dataGaLocation":1995,"id":2056,"isOneTrustButton":1534},{"text":2048,"config":2228},{"href":2050,"dataGaName":2051,"dataGaLocation":1995},[2230],{"id":2231,"title":7,"body":1530,"config":2232,"content":2234,"description":1530,"extension":2238,"meta":2239,"navigation":1534,"path":2240,"seo":2241,"stem":2242,"__hash__":2243},"blogAuthors/en-us/blog/authors/stan-hu.yml",{"template":2233},"BlogAuthor",{"name":7,"config":2235},{"headshot":2236,"ctfId":2237},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659504/Blog/Author%20Headshots/stanhu-headshot.jpg","stanhu","yml",{},"/en-us/blog/authors/stan-hu",{},"en-us/blog/authors/stan-hu","KmQVCb_7YcWghHApaS2EI3J2bQ0dRustgOz4wYyOnVk",[2245,2252,2259],{"title":2246,"description":2246,"heroImage":2247,"category":1526,"date":2248,"authors":2249,"slug":2251,"externalUrl":1530},"MCPサーバーとは？仕組みやソフトウェア開発の活用例をわかりやすく解説","https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001428/qedvughylmeposoqm5zs.jpg","2026-08-07",[2250],"GitLab Team","what-is-mcp-server",{"title":2253,"description":2254,"heroImage":2255,"category":1526,"date":2256,"authors":2257,"slug":2258,"externalUrl":1530},"イテレーションとは？意味や進め方、おすすめの支援ツールを紹介","イテレーションとは、アジャイル開発における「反復」を意味する開発単位です。本記事では、イテレーションの意味やスプリントとの違い、具体的な進め方、成功のポイントをわかりやすく解説します。アジャイル開発を支援するツールもあわせて紹介します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785816755/mj23yaguu0gxvbztd6pl.jpg","2026-08-06",[2250],"what-is-iteration",{"title":2260,"description":2261,"heroImage":2262,"category":1526,"date":2256,"authors":2263,"slug":2266,"externalUrl":1530},"GitLab Self-Hostedで実現するコンフィデンシャルAI","ソースコードをハードウェアで暗号化された境界の外に出すことなく、GitLab DuoのAIコーディングエージェントを開発者に提供します。GPUは不要です。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png",[2264,2265],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"promotions":2268},[2269,2283,2295,2307],{"id":2270,"categories":2271,"header":2273,"text":2274,"button":2275,"image":2280},"ai-modernization",[2272],"ai","AIの真価、組織全体で発揮できていますか？","所要時間は5分以内です",{"text":2276,"config":2277},"AI成熟度スコアを確認する",{"href":2278,"dataGaName":2279,"dataGaLocation":1763},"/ja-jp/assessments/ai-modernization-assessment/","modernization assessment",{"config":2281},{"src":2282},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2284,"categories":2285,"header":2287,"text":2274,"button":2288,"image":2292},"devops-modernization",[2286,2094],"product","単にツールを管理するだけでなく、イノベーションを提供していますか？",{"text":2289,"config":2290},"DevOps成熟度スコアを確認しましょう",{"href":2291,"dataGaName":2279,"dataGaLocation":1763},"/ja-jp/assessments/devops-modernization-assessment/",{"config":2293},{"src":2294},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2296,"categories":2297,"header":2299,"text":2274,"button":2300,"image":2304},"security-modernization",[2298],"security","スピードのためにセキュリティを犠牲にしていませんか？",{"text":2301,"config":2302},"セキュリティ成熟度スコアを確認しましょう",{"href":2303,"dataGaName":2279,"dataGaLocation":1763},"/ja-jp/assessments/security-modernization-assessment/",{"config":2305},{"src":2306},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2308,"paths":2309,"header":2312,"text":2313,"button":2314,"image":2319},"github-azure-migration",[2310,2311],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","チームはGitHubのAzure移行に対応できていますか？","GitHubはすでにAzureを基盤として再構築を進めています。それがあなたのチームにとって何を意味するのか、ご確認ください。",{"text":2315,"config":2316},"GitLabとGitHubの比較を見る",{"href":2317,"dataGaName":2318,"dataGaLocation":1763},"/ja-jp/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2320},{"src":2294},{"header":2322,"blurb":2323,"button":2324,"secondaryButton":2328},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":1557,"config":2325},{"href":2326,"dataGaName":1560,"dataGaLocation":2327},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/ja-jp/","feature",{"text":1878,"config":2329},{"href":1887,"dataGaName":1565,"dataGaLocation":2327},1786803791256]