HTTPX2 への移行

2026/08/28 20:51

HTTPX2 への移行

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

OpenAI の Python SDK は、標準の

httpx
クライアントを新たな
HTTPX2
実装で置き換え、内部ネットワークアーキテクチャを根本的に変更しました。これにより、従来の
httpx
パッケージを必要とせずに、すべての同期および非同期操作に
HTTPX2
が使用されます。以前のバージョンが
certifi
などの外部パッケージに依存していたのに対し、
HTTPX2
はデフォルトでオペレーティングシステムの組み込み信頼ストアを使用します。この変更は、最小限のコンテナ環境やカスタムプロキシを持つ企業ネットワークでの問題を解決しますが、カスタム設定やモッキングライブラリ(例:RESPX)を使用する開発者は、証明書のパスを明示的に設定するか、
httpx2
固有のコンポーネントへの移行を行う必要があります。デフォルトの設定は引き続きシームレスに動作しますが、レガシーなクライアントは現在、明示的なインポートによる一時的な移行支援手段としてのみサポートされており、これに依存するチームはコードを能動的に更新する必要があります。レガシーなサポートが終了したら API 呼び出しが壊れる可能性があるため、この移行を無視してはいけません。さらに、すべての HTTPX 固有の詳細オブジェクト(例:Timeout、Transport)および認証ハンドラも、SDK の全体での安定性を確保するために
httpx2
の対応物に変更する必要があります。

テキストの翻訳:

Improved Summary: OpenAI's Python SDK has fundamentally shifted its internal network architecture by replacing the standard

httpx
client with a new
HTTPX2
implementation, which is now used for all synchronous and asynchronous operations without requiring the legacy
httpx
package. Unlike previous versions that relied on external packages like
certifi
,
HTTPX2
defaults to using your operating system's built-in trust store. This change addresses issues in minimal container environments and corporate networks with custom proxies but requires developers using custom configurations or mocking libraries (like RESPX) to explicitly configure certificate paths or migrate to
httpx2
-specific components. While default setups continue to work seamlessly, the legacy client is currently supported only as a temporary migration aid via explicit imports; teams relying on it must update their code proactively, as ignoring this transition may result in broken API calls once legacy support is discontinued. Additionally, all granular HTTPX-specific objects (e.g., Timeout, Transport) and authentication handlers must be updated to use their
httpx2
counterparts to ensure continued stability across the SDK.

本文

OpenAI SDK HTTPX2 移行ガイド

OpenAI Python SDK は今後は、HTTP クライアントに HTTPX2 を採用します。インストール時には自動的に追加され、旧パッケージの

httpx
は含まれません。

1. デフォルト設定の変更

SDK の既定値を使用する場合、以下の機能はそのまま動作します:

  • API コール、レスポンスモデルのパース、ストリーミング、認証、リトライ、数値型タイムアウト

注意: インストール時に

httpx
パッケージが自動的に含まれることはなくなりました。

  • 明示的に依存関係として追加するか、
  • 既存の
    httpx
    使用箇所を
    HTTPX2
    に移行してください。
from openai import OpenAI

client = OpenAI(timeout=30.0)
response = client.responses.create(model="gpt-5.5", input="Hello")

2. TLS 証明書と信頼ストアの変更

デフォルトの TLS 信頼ストアが変更されました:

  • 以前:
    certifi
    パッケージによる CA バンドル検証
  • 現在: オペレーティングシステムの信頼ストアを使用(
    certifi
    は不要)

影響を受ける環境

  • システム CA 証明書がない最小限のコンテナイメージ
  • 企業用 TLS 検査プロキシを使用する環境
  • カスタム
    certifi
    バンドルに依存していたデプロイメント

対処法

  1. オペレーティングシステムの証明書をインストールする(推奨)
  2. 明示的な証明書バンドルを設定する:
export SSL_CERT_FILE=/path/to/ca-bundle.pem

あるいは、CA 証明書ディレクトリを構成:

export SSL_CERT_DIR=/path/to/ca-directory

上記の環境変数は

trust_env=True
の設定で有効です。カスタムクライアントでは明示的に指定してください:

import ssl
from openai import OpenAI, DefaultHttpx2Client

ssl_context = ssl.create_default_context(cafile="/path/to/ca-bundle.pem")
client = OpenAI(http_client=DefaultHttpx2Client(verify=ssl_context))

非同期設定の場合は

DefaultAsyncHttpx2Client
を使用します。

3. カスタム HTTP クライアントの提供

HTTPX2
クライアントおよび構成オブジェクトを使用してください:

import httpx2
from openai import OpenAI, AsyncOpenAI, DefaultHttpx2Client, DefaultAsyncHttpx2Client

# プロキシ設定
proxy_client = OpenAI(http_client=DefaultHttpx2Client(proxy="http://proxy.example.com:8080"))

# 交通とタイムアウトの設定
transport_client = OpenAI(
    http_client=DefaultHttpx2Client(
        transport=httpx2.HTTPTransport(local_address="0.0.0.0"),
        timeout=httpx2.Timeout(30.0, connect=5.0),
    )
)

# 非同期クライアント
async_client = AsyncOpenAI(http_client=DefaultAsyncHttpx2Client(timeout=httpx2.Timeout(30.0)))

重要な注意点

  • 直接構築した
    httpx2.Client
    httpx2.AsyncClient
    もサポートされていますが、HTTPX2 の固有のデフォルト値が適用されることを理解してください。
  • DefaultHttpxClient
    /
    DefaultAsyncHttpxClient
    という名前のクラスも機能しますが、明示的に HTTPX2 クライアントを構築する
    DefaultHttpx2Client
    /
    DefaultAsyncHttpx2Client
    の使用を推奨します。

モジュールレベルの設定例:

import openai
openai.http_client = openai.DefaultHttpx2Client()

4. オブジェクト名の置き換え

HTTPX 固有のオブジェクトは、以下の対応する HTTPX2 オブジェクトに置き換えてください:

以前のオブジェクトHTTPX2 のオブジェクト
httpx.Client
httpx2.Client
httpx.AsyncClient
httpx2.AsyncClient
httpx.Timeout
httpx2.Timeout
httpx.URL
httpx2.URL
httpx.Limits
httpx2.Limits
httpx.HTTPTransport
httpx2.HTTPTransport
httpx.AsyncHTTPTransport
httpx2.AsyncHTTPTransport
httpx.MockTransport
httpx2.MockTransport

細粒度なタイムアウト設定例

import httpx2
from openai import OpenAI

client = OpenAI(timeout=httpx2.Timeout(60.0, connect=5.0, read=20.0))

※数値型タイムアウト値や文字列 URL 形式は変更ありません。

5. 認証とイベントフック

認証ハンドラーとフックは、HTTPX2 の

Request
および
Response
オブジェクトを受け取ります:

import httpx2
from openai import OpenAI, DefaultHttpx2Client


def log_request(request: httpx2.Request) -> None:
    print(request.method, request.url)


client = OpenAI(http_client=DefaultHttpx2Client(event_hooks={"request": [log_request]}))
  • カスタム認証クラスや注釈も
    httpx2
    に対応したインターフェースを使用してください。
  • サードパーティ製ツール(計測、トレーシング、認証統合)は明示的に HTTPX2 をサポートしている必要があります。

6. 生レスポンス、ストリーミング、例外処理

  • パースされた SDK レスポンスモデルには変更はありません。
  • ネイティブ
    HTTPX2
    クライアントを使用する場合、
    http_response
    および
    http_request
    httpx2
    の型になります:
import httpx2
from openai import OpenAI

client = OpenAI()
response = client.models.with_raw_response.list()

assert isinstance(response.http_response, httpx2.Response)
assert isinstance(response.http_request, httpx2.Request)
  • 未パースの HTTP レスポンスを要求する場合は
    cast_to=httpx2.Response
    を指定してください。
  • ストリーミングレスポンスラッパーも
    httpx2.Response
    オブジェクトを公開します。
  • アプリケーションコードでは、通常は
    openai.APITimeoutError
    openai.APIConnectionError
    などの SDK 例外をキャッチすべきです。
  • ネイティブクライアントを使用する場合、通信部分の例外は
    HTTPX2
    例外になります。

型保証の注意点 これらの保証はネイティブ

HTTPX2
クライアントにのみ適用されます。従来の
httpx
をインジェクトした場合、
cast_to=httpx2.Response
を指定しても
httpx
のオブジェクトや例外が返される可能性があります。

7. aiohttp サポートの変更

サポートされている

aiohttp
アドオンは、HTTPX2 ネイティブの通信部分を備えています:

pip install 'openai[aiohttp]'
from openai import AsyncOpenAI, DefaultAioHttpClient

client = AsyncOpenAI(http_client=DefaultAioHttpClient())
  • DefaultAioHttpClient()
    は内部で
    httpx2.AsyncClient
    を使用します。
  • 通信部分を直接構築したりインポートする必要はありません。

8. モックとテスト

モックは必ず HTTPX2 リクエストをインターセプトし、HTTPX2 レスポンスを返す必要があります:

import httpx2
from openai import OpenAI


def handler(request: httpx2.Request) -> httpx2.Response:
    return httpx2.Response(
        200,
        request=request,
        json={"object": "list", "data": []},
    )


client = OpenAI(http_client=httpx2.Client(transport=httpx2.MockTransport(handler)))

assert client.models.list().data == []

RESPX のバージョン更新 テストスイートが

RESPX
を使用している場合、HTTPX2 互換のバージョンへ更新してください。従来の
httpx
のみのパッチ版は既定のクライアントをインターセプトできません。

9. 一時的なエスケープハッチ:従来の HTTPX クライアント

移行期間中のみ、従来の

httpx
をインジェクションして使用できます(将来的には終了されます)。

クライアントの指定

from typing import Any, cast

import httpx
from openai import OpenAI

client = OpenAI(http_client=cast(Any, httpx.Client()))

同様に非同期クライアントも:

from typing import Any, cast

import httpx
from openai import AsyncOpenAI

client = AsyncOpenAI(http_client=cast(Any, httpx.AsyncClient()))

生レスポンスの扱い

従来のクライアントを使用する場合、

httpx.Response
を使用し、型チェックも
httpx
のクラスで行ってください:

from typing import Any, cast

import httpx
from openai import OpenAI

client = OpenAI(http_client=cast(Any, httpx.Client()))
response = client.get("/models", cast_to=cast(Any, httpx.Response))

assert isinstance(response, httpx.Response)

cast_to=httpx2.Response
を渡しても変換されません。従来の依存関係を自前でする必要があります。

10. 既存の aiohttp アダプターの維持

既存の

httpx-aiohttp
インテグレーションを維持する場合:

pip install openai httpx-aiohttp
from typing import Any, cast

from httpx_aiohttp import HttpxAiohttpClient
from openai import AsyncOpenAI

client = AsyncOpenAI(http_client=cast(Any, HttpxAiohttpClient()))
  • この方法は専用互換性テストでカバーされていますが、一時的なエスケープハッチです。
  • 新規コードでは
    openai[aiohttp]
    DefaultAioHttpClient()
    の使用を強く推奨
    します。

同じ日のほかのニュース

一覧に戻る →

2026/08/29 0:17

GUI は完全にキーボードで操作可能であるべきです

## 日本語訳: 本文は、グラフィカルユーザーインターフェース(GUI)においてソフトウェア開発者が端末ベースの設計に回帰するのではなく、すべての機能がショートカットキーでアクセス可能な直感的かつ完全なキーボード駆動型の体験を最優先すべきであると主張しています。重要な点は、優れたユーザーエクスペリエンスはマウスなしで全てのアクションを行えるようにすることで実現されることであることです。この視点は、高度なキーボード制御がコマンドラインツールのみに属するという一般的な誤解に挑戦しています;その代わりに、著者の新しいアプリ「Klisi」などの現代の GUI は、すべての機能に対して包括的なアクセシビリティを成功裏に実証しています。GNOME ヒューマンインターフェースガイドラインのような業界標準は、アプリケーションがポインティングデバイスとキーボードの両方でシームレスに動作することを明確に要求しています。したがって、完全なキーボードナビゲーションの構築は技術的な課題としてではなく、すべてのユーザーの効率を大幅に向上させることを意図した設計上の選択として捉えるべきです。キーボードサポートをオプションの追加機能ではなくコア要件として扱うことで、企業は全体的な製品品質を向上させ、直感的で迅速なインタラクションを求める外部入力デバイスに依存しないユーザーをよりよくサービスできます。

2026/08/28 22:28

Htmx 4.0

## 日本語訳: htmx 4.0.0 では、XMLHttpRequest など従来の手法をフェッチ(fetch)インタフェースなどの現代のブラウザ API に置き換えるという大きな内部変更が導入されました。この更新により、`hx:xhr:*` のような古来のイベント属性は標準化された名前(例:`htmx:before:request`)へと置き換えられ、`hx-disable` といった非推奨要素は `hx-ignore` に置換されます。移行を支援するため、テンプレートにおけるエラー(付与不足や削除された属性の使用など)をスキャンするコマンドラインツール(`$ npx htmx.org@4.0.0 upgrade-check`)がリリースされています。重要なアーキテクチャ変更として、以前の自動継承からの変更となり、子要素への適用を望む場合、親属性に対して明示的に `:inherited` サフィックスを追加する必要があります。本リリースには、「morph swaps」(`<hx-partial>` タグを通じて)、`hx-live` という名前のスクリプトリングティングソリューション、そして `hx-preload` やストリーミングサポートなどを含むいくつかの新しい拡張機能が含まれています。履歴管理については、デフォルトで localStorage が使用され不再;代わりに、ステアジングが必要なチームのために、`hx-history-cache` 拡張機能を通じて sessionStorage を介したキャッシングが可能になります。移行には、バージョン 2.x がバージョン指定なしの CDN で 2027 年初頭まで引き続き利用可能である一方、バージョン 4.0.0 は特定の CDN URL(`https://unpkg.com/htmx.org@4.0.0/dist/htmx.min.js`)でアクセス可能です。アップグレードを行う企業は、非推奨要素を置換し、履歴キャッシングロジックをこれらの標準化された振る舞いと整合させる必要があります。

2026/08/29 0:58

今は、バグという噂だけで exploits を見つけるのに十分なものです。

## 日本語訳: 人工知能エージェントは、現在、人間チームが修正できる速度よりもはるかに速く脆弱性を発見し悪用するため、ソフトウェアセキュリティに対して即座の脅威を呈しています。この拡大するギャップにより、自動化された攻撃は、通常のパッチが公開される数日前、あるいは場合によっては数時間前に発生することがあり、セキュリティ環境そのものが根本的に変化しました。重要な例として、DeepSeek V4 Pro は OCaml 言語の cohttp ライブラリにおけるクリティカルなパス正規化エラーを特定しましたが、Claude Fable などの伝統的な AI モデルは、オープンソースのメンテナンを除外するセーフティフィルターによってこれらの問題を検出できないことがあります。一方、高度なシステムはこうした保護策を完全に回避します。脆弱性の発見からパッチが公開されるまでの間に、エージェント型 AI システムが新たなエクスプロイトを見つけ出すのに十分であるという噂が存在するだけでも、実稼働中の Web サーバーの脆弱性を特定してから 1 分以内にエクスプロイトを作成・テストした事例などがあり、その他には marimo の CVE-2026-39987 が 9 時間以内、Langflow の CVE-2026-33017 が 20 時間以内に悪用された例もあります。その結果、脆弱性の発見から悪用されるまでの平均期間は、近年の歴史において約 63 日であったものが、2026 年にはわずか 7 日にまで崩壊しました(一部のケースでは開示に対して相対的にマイナスの値となっています)。このレポートは Jane Street を経由した Slack で非公開で届けられ、Claude Fable 由来であり、Glasswing セキュリティブロックを有さないためパス正規化に関する関連問題を特定したのは DeepSeek V4 Pro でした。Project Glasswing は西側モデルのセキュリティガードにより通常のオープンソースメンテナンを除外するものの、15 ヵ国にわたる 150 の組織に拡大しています。「Bugonomics」とは、防御側の修復処理能力が LLM で生成されたエクスプロイトに後れを取るというボトルネックを指し、GitHub のプライベートフォークでは CI 統合が制限されマージは単一の PR に限定されるため、複雑なクロスリポジトリの修正には不向きです。この「antibotty」脅威の現実に耐えるために、業界は標準的な防御を超えて進まなければなりません。将来のセキュリティは、Linux カーネルのような継続的なリリース、プロトコルレベルの仮想パッチング、AI 駆動の攻撃生成の絶え間ないスピードに匹敵できる新たな防御ネットワークによるものとなるでしょう。迅速に適応できない場合、防御側は重要なインフラを保護するには単に遅すぎることになります。cohttp の修正には Sapphire Livingstone、Michael Dales、Török Edwin、Patrick Ferris、Hannes Mehnert、Thomas Gazagnaire によって行われたチームワークが関わっています。

HTTPX2 への移行 | そっか~ニュース