コンテンツにスキップ

AI Session Notes - 2026-02-09

シンボリックリンクによるディレクトリ管理

学んだこと

  • dotfiles 管理等でシンボリックリンクを使う場合、個別ファイルではなくディレクトリ単位でリンクしておけば、配下にファイルを追加・削除しても再リンク(再インストール)が不要
  • 「設定の追加 = ファイルを置くだけ」というワークフローが実現できる

CLI ツールの出力における図表形式の選択

学んだこと

  • Mermaid はブラウザや GitHub 上ではレンダリングされるが、ターミナル(CLI)では生のコードブロックがそのまま表示される
  • CLI ツールの出力には ASCII ツリー (├──, └──) が最も汎用的で見やすい
  • 出力先の環境(ターミナル / ブラウザ / エディタ)に合わせて表現形式を選ぶべき

トークン消費を考慮した AI スキル設計

学んだこと

  • WebFetch のようにトークン消費が大きい操作をスキルに組み込む場合、無制限に実行すると意図せずコストが膨らむ
  • 「デフォルトで控えめな上限 + オプションで拡張」というパターンが実用的
  • 例: 通常モード(最大5ページ)/ ディープモード(最大15ページ)
  • ユーザーが意図的に選択できる設計にすることで、コスト意識と利便性を両立できる

Docker + nginx による静的サイトのローカル開発環境

学んだこと

  • 静的サイト(HTML/CSS/JS のみ)のローカル開発には nginx:alpine イメージが軽量で最適
  • docker-compose.ymlvolumes にホストのディレクトリを :ro(読み取り専用)でマウントすれば、ファイル変更がリアルタイムに反映される
  • Makefilestart / stop を定義すると、Docker コマンドを覚えなくても運用できる
  • make start 時に @echo でURLなどの情報を表示すると、毎回ブラウザのURLを思い出す手間が省ける

詳細

最小構成の例:

FROM nginx:alpine
COPY site/ /usr/share/nginx/html/
EXPOSE 80
# docker-compose.yml
services:
  web:
    build: .
    ports:
      - "8080:80"
    volumes:
      - ./site:/usr/share/nginx/html:ro
start:
    docker compose up -d
    @echo "http://localhost:8080"
stop:
    docker compose down

localStorage を使ったブラウザ上の進捗管理

学んだこと

  • サーバーサイドやデータベースなしで、ブラウザの localStorage だけで学習進捗を管理できる
  • JSON.stringify / JSON.parse でオブジェクトを保存・復元する
  • キー設計は { "unitId": { completed: true, completedAt: "YYYY-MM-DD" } } のようなフラットな構造がシンプルで扱いやすい
  • 注意点:ブラウザやプロファイルが変わるとデータが消えるので、永続性が必要な場合は別の手段が必要

GitHub Pages の公開範囲

学んだこと

  • GitHub Pages は 無料プランでは public リポジトリでのみ利用可能
  • GitHub Pro / Teams / Enterprise(有料プラン)なら private リポジトリでも GitHub Pages が使える
  • 無料で private リポジトリからデプロイしたい場合の代替手段:
  • Cloudflare Pages(private リポジトリ対応・無料枠あり)
  • Netlify(private リポジトリ対応・無料枠あり)

AI エージェントの並列実行による効率化

学んだこと

  • 独立した作業単位(例:各章のコンテンツ作成)は、複数のエージェントに並列で委任すると大幅に時間短縮できる
  • 各エージェントには「テンプレート + 具体的なデータ + 制約条件」をセットで渡すと、統一感のある出力が得られる
  • バックグラウンドエージェントの完了通知を待つ間に、他の作業を進められる

非公式 API ドキュメントの活用と自作ツール開発の判断

学んだこと

  • 公式がAPIドキュメントを提供していないサービスでも、コミュニティ主導で OpenAPI 仕様が整備されていれば、SDK の自動生成やアプリ開発が可能
  • SDK が提供されていない言語でも、OpenAPI Generator を使えばクライアントを自動生成できる(ただし SDK がある言語の方がドキュメント・サポート面で圧倒的に有利)
  • 非公式 API を使う際のリスク:API が予告なく変更される、レートリミットが非公開で予測不能、アカウント停止の可能性
  • 自作ツールの価値が出るケース:公式 UI では1件ずつしかできない操作(ロール一括付与など)をプログラムでバッチ処理できる

レートリミットが非公開な API との付き合い方

学んだこと

  • 具体的な数値(リクエスト/分)が公開されていない API では、「控えめに叩いて 429 が来たらバックオフ」が基本戦略
  • 指数バックオフ(1s → 2s → 4s → 8s...)の実装は必須
  • 一括処理では各リクエスト間に 1〜2 秒の sleep を入れるのが安全圏の目安
  • キャッシュ戦略:ユーザープロフィールやワールド情報など、頻繁に変わらないデータは積極的にキャッシュする

2FA 対応のある API の認証フロー設計

学んだこと

  • 2FA を有効にしたアカウントで API を利用する場合、ローカル実行でも 2FA フローの実装が必要(API 側が認証時に要求するため)
  • セッション Cookie を保存・再利用すれば、毎回 2FA を通す必要はない(Cookie の有効期限が切れたときだけ再認証)
  • 自分専用ツールなら、ログイン画面に TOTP コード入力欄を1つ追加するだけで対応可能
  • SDK が 2FA フローを組み込み済みの場合はそれに乗るのが最も楽

API の機能境界を見極めて外部サービスと連携する

学んだこと

  • API が「受信・管理のみ」で「送信」をサポートしていないケース(例:通知 API で通知は受け取れるが送れない)は珍しくない
  • このような場合、API で「対象者の特定」を行い、実際の通知は外部サービス(Discord Bot など)に委任する設計が有効
  • 複数サービスの API を組み合わせることで、単一 API では実現できない機能を構築できる
  • 例:サービスA の API でロール別メンバー取得 → Discord API で対象者にメンション

Discord Bot の導入と自作

学んだこと

  • Discord Bot は Developer Portal でアプリケーション作成 → Bot ユーザー追加 → OAuth2 招待 URL で任意のサーバーに導入できる
  • Bot をサーバーに入れるには、そのサーバーの管理者権限が必要
  • discord.js(TypeScript 対応)が定番フレームワークで、他の TypeScript SDK と組み合わせやすい
  • Bot の活用パターン:スラッシュコマンドで外部 API を叩く、WebSocket でリアルタイムイベントを Discord チャンネルに中継する

番号付きファイルシリーズへの挿入時のリネーム戦略

学んだこと

  • 連番で管理されたファイル群(01_xxx.md, 02_xxx.md, ...)の途中に新ファイルを挿入する場合、後ろから順にリネームすると名前衝突を避けられる
  • 例: 02→03, 03→04 の順だと 02 のリネーム先 03 が既に存在してしまう
  • 正解: 05→06, 04→05, 03→04, 02→03 の順(末尾から)
  • git mv を使えばリネームが Git の履歴に正しく追跡される
  • リネーム後は、リポジトリ全体のクロスリファレンス(相対リンク)を漏れなく更新する必要がある
  • grep でリンク先ファイル名を検索し、更新対象を洗い出すのが確実

Claude Code の PreToolUse hook と git の --no-verify の違い

学んだこと

  • Git の --no-verify はあくまで git 自身の pre-commit / commit-msg hook をスキップするオプション
  • Claude Code の PreToolUse hook~/.claude/hooks/ 配下のスクリプト)は、Bash ツールの実行前に走る別レイヤーのチェックであり、--no-verify では回避できない
  • セキュリティ hook がサンプルコード内の password 等を誤検知してブロックする場合の対処法:
  • ターミナルから直接 git commit を実行する
  • hook スクリプトを一時的に無効化する
  • 学習コンテンツのように「サンプルのパスワード文字列」が大量に含まれるリポジトリでは、hook の除外ルール(ファイルパスベースのホワイトリスト等)を検討すべき

Mac ローカルで Kubernetes を動かす方法

学んだこと

  • OrbStack / Docker Desktop には Kubernetes が内蔵されており、設定画面からトグルを ON にするだけでシングルノードクラスタが起動する
  • minikubekind を別途インストールする方法もあるが、既に OrbStack や Docker Desktop を使っているなら追加インストール不要
  • ローカル K8s はシングルノードだが、Pod / Deployment / Service などの基本概念の学習には十分
  • kubectl は OrbStack の場合自動で設定される(context が orbstack として追加される)

メタ情報

  • ツール: Claude Code
  • 関連技術: Claude Code Skills, シンボリックリンク, dotfiles 管理, CLI UX 設計, Docker, nginx, localStorage, GitHub Pages, Makefile, VRChat API, OpenAPI, TypeScript SDK, WebSocket, レートリミット, 2FA, Discord Bot, discord.js, Kubernetes, OrbStack, kubectl, Claude Code Hooks, git mv