DevContainer のコンテナで Zscaler に 邪魔されたとき

1. WSLで証明書をワークスペースへコピー

cp /usr/local/share/ca-certificates/zscaler.crt [ワークスペースのディレクトリ」


2. DevContainer のコンテナの中で実行

sudo cp zscaler.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

以下が出たらOK

1 added, 0 removed; done.


3. コンテナで確認

openssl s_client  -connect www.google.com:443  -CAfile /etc/ssl/certs/ca-certificates.crt

いかが出ればOK

Verify return code: 0 (ok)

ChatGPTのサブスクリプションでAPIぽい使い方をしてみる

# ChatGPTのサブスクを使った版
# oauth_codex は認証にしかつかっていない

import json
from typing import List, Dict, Generator
import httpx
from oauth_codex import Client

_CODEX_URL = "https://chatgpt.com/backend-api/codex/responses"

SYSTEM_PROMPT = {
    "role": "system",
    "content": "あなたは親切なAIチャットボットです。日本語で回答してください。"
}

# モデル設定
# MODEL : "gpt-5.5" / "gpt-5.4" / "gpt-5.4-mini"
# REASONING : "low"(高速・軽量) / "medium"(バランス) / "high"(深い推論) / "xhigh"(最大、デフォルト)
MODEL = "gpt-5.4"
REASONING = {"effort": "medium"}


class _Delta:
    def __init__(self, content: str) -> None:
        self.content = content

class _Choice:
    def __init__(self, content: str) -> None:
        self.delta = _Delta(content)

class _Chunk:
    def __init__(self, content: str) -> None:
        self.choices = [_Choice(content)]


# APIキーは不要。初回にブラウザでChatGPTへログイン
client = Client()
client.authenticate()


def chat_completion_stream(messages: List[Dict[str, str]]) -> Generator:
    headers = dict(client._engine._client.auth.get_headers())
    headers["Content-Type"] = "application/json"
    payload = {"model": MODEL, "stream": True, "store": False,
               "input": messages, "reasoning": REASONING}
    with httpx.stream("POST", _CODEX_URL, headers=headers, json=payload, timeout=60) as resp:
        resp.raise_for_status()
        for line in resp.iter_lines():
            if line.startswith("data: "):
                data = line[6:]
                if data == "[DONE]":
                    return
                obj = json.loads(data)
                if obj.get("type") == "response.output_text.delta":
                    yield _Chunk(obj.get("delta", ""))


response = chat_completion_stream([SYSTEM_PROMPT, {"role": "user", "content": "カレーライスの作り方を教えてください。"}])
print("".join([chunk.choices[0].delta.content or "" for chunk in response]))

Antigravity インストール メモ

インストール

参考ページ
note.com

ダウンロード

https://antigravity.google/download?hl=ja

インストールは全てデフォルトでOK

初回起動

Choose setip flow : import from VS Code
Choose on editor theme type : Tokyo Night
How do you want to use the Antigravity Agent? : Review-driven development
Keybindings : Normal
Extenssions : Recommended
Google ログイン

コマンドパレットを開き(Ctrl + Shift + P)
「Configure Display Language」を選び日本語を選ぶ

日本語化

参考ページ
note.com

その他

VS Code で使える拡張機能がすべて使えるわけではない。Remote Development が使えないのは残念

Mermaid のメモ

```mermaidでくくる

```mermaid
flowchart TD
    A[空席照会業務開始] --> B[フライト情報取得]
    B --> C[空席状況表示]
    C --> D{予約方法選択}
    D --> E[一般チケット予約]
    D --> F[会員チケット予約(ログイン必要)]
    E --> G[予約情報入力・登録]
    F --> H[ログイン]
    H --> I[予約情報入力・登録]
    G --> J[業務終了]
    I --> J
```

ブラウザで確認

( この時は ```mermaid、```を削除して中身だけにする)
mermaid.live

VSCode で使う

Markdown Preview Mermaid Support

プレビューに使う。拡張機能をインストールする。
VSCodeエクスプローラーでファイルを選択して、右クリック→「プレビューを開く」

vscode-mermAId

GitHub Copilot を使って Mermaid を書く。
VSCode で ソースを開いて、Copilot のチャットに

@mermAId 関数の関連を図にして