すべての記事
timestamptz の罠まとめ — PostgreSQL の時刻処理で間違えやすいこと
PostgreSQL の時刻処理の実践的な罠を集めました。timestamptz がタイムゾーンを保存するという誤解、結果がセッションの TimeZone によって違って見える原理、AT TIME ZONE が型によって逆に動く二重性、date_trunc・日付グルーピングが真夜中の基準をどこに置くかで変わる問題、未来の予定は timestamptz だけでは足りない理由(タイムゾーン規則の変更)、now() と clock_timestamp() の違いまで扱います。
Entra ID 自動化 #5 PIM と監査 — 常時管理者をなくす、ログとアクセスレビュー
トラック最終回として権限と監査を扱います。常時の管理者権限を資格付与と時間制限付きアクティブ化に置き換える PIM の構造、Graph の roleEligibilityScheduleRequests とセルフアクティブ化 API、ロール割り当て可能グループと組み合わせるパターン、監査ログとサインインログを API で収集して高リスクイベントに通知を掛ける方法、アクセス権の定期的な棚卸しを自動化するアクセスレビュー、そしてトラック全体の導入順序の整理まで扱います。
Terraform 実践 #6 シークレット管理 — SSM vs Secrets Manager、write-only 引数
シークレットの保管先として SSM Parameter Store と Secrets Manager をコストと機能で比較して選択基準を立て、Terraform 1.11 の ephemeral リソースと write-only 引数で DB パスワードが plan にも state にも残らない構成を作ります。アプリケーションがシークレットをランタイムに読む流れまで設計し、前回の平文問題を構造的に解決します。
UUID vs bigint 主キー — 性能差の実体と uuidv7
主キー論争の定番である UUID vs bigint を、実測できる根拠で整理します。bigint が既定値である理由(サイズ・挿入の局所性・結合コスト)、UUID v4 がインデックスに無作為に挿入されて書き込みとキャッシュ効率を落とす原理、時系列順でその問題をほぼ解消した uuidv7 と PostgreSQL 18 の組み込み関数、uuidv7 に残るトレードオフ(生成時刻の露出・16 バイト)、そして内部 bigint + 外部 UUID の併用設計まで扱います。
Entra ID 自動化 #4 条件付きアクセス — ポリシーをコードで管理する
ログインの瞬間の防衛線である条件付きアクセスを自動化の観点で扱います。シグナル・決定・適用というポリシーの if-then 構造、Graph API の conditionalAccess エンドポイントでポリシーを CRUD する方法、ポリシーをソース管理とレビューを経てデプロイする policy-as-code の流れ、新しいポリシーを必ずレポート専用モードで先に回すべき理由、緊急アカウントをすべてのポリシーから除外する原則、誤って消したポリシーの 30 日復元まで扱います。
N+1 クエリ問題 — 症状、検出、解決まで
ORM を使うサービスが遅くなる最もよくある原因、N+1 クエリを扱います。一覧 1 つにクエリが 101 回飛ぶ構造ができる原理(遅延ロード)、アプリケーションのログと pg_stat_statements の calls で検出する方法、JOIN・IN の一括ロード・ORM の即時ロードオプションという 3 つの解法、そして「画面が必要とするデータをクエリ数ではなく形で設計する」という予防原則まで扱います。
Rust で JSON を扱う — serde デシリアライズ実践まとめ
Rust の JSON 処理の標準である serde を実践の順序で整理します。derive 1 行で始める構造体のデシリアライズ、フィールドがないかもしれない現実の JSON を受ける Option と default、API の camelCase をつなぐ rename_all、構造の分からない JSON を探る Value、形が複数ある応答を受ける enum と untagged、そしてエラーメッセージから位置を読む方法まで扱います。
Entra ID 自動化 #3 グループ設計 — 動的グループ、グループベースライセンス、アクセスパッケージ
アクセス管理の単位であるグループを自動化の観点から設計します。セキュリティグループと Microsoft 365 グループの使い分け、属性ベースのルールでメンバーシップが自動計算される動的グループと P1 ライセンス要件、ルール構文と処理遅延という運用特性、グループにライセンスを付けて出入りを自動化するグループベースライセンス、ロール割り当て可能グループのセキュリティ境界、そしてセルフサービスのアクセス申請を製品化したアクセスパッケージまで扱います。
PostgreSQL upsert の定石 — ON CONFLICT の使い方と罠
「あれば更新、なければ挿入」を競合状態なしに処理する ON CONFLICT を扱います。SELECT してから INSERT する方式が同時実行で壊れる理由、DO NOTHING と DO UPDATE の使い方、EXCLUDED で新しい値を参照する方法、衝突判定の対象(ユニーク制約)を明示すべき理由、値が同じでも行がロックされ書き換えられるコスト、MERGE との関係、そしてシーケンスが飛ぶ現象まで扱います。
PyO3 で Python 拡張モジュールを作る — maturin のビルドから wheel 配布まで
Polars、Ruff、pydantic が証明した経路「Python のボトルネック関数だけ Rust に」を実際に歩きます。maturin new で始めるプロジェクト構造、#[pyfunction] と #[pymodule] で Rust 関数を Python に公開する方法、maturin develop の開発サイクル、型変換(str・list・dict)の規則、free-threaded Python 時代との相性、そして wheel のビルドと PyPI への配布まで扱います。
Terraform 実践 #4 ALB と Auto Scaling — launch template、ターゲットグループ、スケーリングポリシー
単一の EC2 インスタンスをロードバランサーの後ろの Auto Scaling グループに昇格させます。インスタンス定義を launch template に移し、ALB とターゲットグループ、リスナーをつないだうえで、CPU のターゲット追跡スケーリングポリシーまで設定します。検証用の単一インスタンスをコードから削除して IaC のリソース削除の流れを確認し、ブラウザで最初のレスポンスを受け取ります。