【Python】Pydantic ~ 入門編 ~

◾️はじめに

Python の Pydantic (パイダンティック) についてメモる

目次

【1】Pydantic
 1)インストール
【2】主な特徴と機能
【3】メリット・デメリット
 1)メリット
 2)デメリット
【4】サンプル

【1】Pydantic

Pythonの型ヒントを利用して以下を行うライブラリ
[1] データの検証(バリデーション)
[2] 型変換を自動

1)インストール

pip install pydantic

【2】主な特徴と機能

データ検証と自動変換

BaseModelを継承したクラスを定義し、
辞書やJSONデータを流し込むだけで、
指定した型への変換やバリデーションが自動で行う

エラーの集約

バリデーションに失敗した場合、どこが間違っているかを
まとめた ValidationError が発生

FastAPI等との連携

Webフレームワークの FastAPI などでリクエストやレスポンスの
スキーマ定義として標準的に利用

Pydantic V2

ゼロから書き直されたバージョン2では、
高速なパフォーマンスとV1との後方互換性が提供

【3】メリット・デメリット

* Web開発・新規開発であれば、導入した方が良さそう

1)メリット

パフォーマンスと実装

* 高速な動作(V2はRustで再実装)
* 型変換(型強制)が強力('123'を自動で132に変換)
* 可読性が高い(Python標準の型ヒント構文をそのまま利用)    

エコシステムと信頼性

* FastAPIなどで標準採用(Web開発のデファクトスタンダード)
* JSON Schemaの自動生成(OpenAPIドキュメントとの相性が抜群)
* IDEの強力なサポート(型補完や静的解析が効く)

機能面

* ネストした構造のバリデーション(複雑なデータ構造も一発で検証)
* エラーメッセージが親切(どのフィールドがどう間違っているか詳細に返る)

2)デメリット

学習コスト

* 設定オプションや高度なバリデーションの習得が必要

大規模なバージョン移行

* V1からV2へのアップデートで破壊的変更が多かった

標準ライブラリ(dataclasses)より重い

* 機能が豊富な分、シンプルな用途にはオーバーヘッドがある

【4】サンプル

from pydantic import BaseModel


class User(BaseModel):
  id: int
  name: str
  email: str


# 文字列の '123' が自動的に int の 123 に変換される
data = {"id": "123", "name": "Alice", "email": "alice@example.com"}
user = User(**data)
print(user.id)  # 123 (int型)

関連記事

Python ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/08/07/231242

【Docker】Docker compose ~ マウント衝突を避ける ~

◾️はじめに

小ネタ。

Docker / Docker compose で 意図したファイルが見つからず
Volume マウントでも衝突が起きて上手くいかない場合の対象方法について
メモっておく

【1】解決案

* entrypoint / command を使って、シンボリックリンクを貼る

Dockerfile ~ CMD / ENTRYPOINT ~
https://dk521123.hatenablog.com/entry/2023/07/21/234509

【2】サンプル

services:
  sample-service:
    # シェル(sh)を
    #「エラー発生時に即座に終了するモード(-e)」かつ
    #「渡された文字列をコマンドとして実行するモード(-c)」で起動する設定
    entrypoint: ["/bin/bash", "-ec"]
    command:
      - |
        set -euo pipefail

        link_tree() {
          local src="$$1"
          local dst="$$2"
          local entry
          local name
          local target

          mkdir -p "$$dst"

          # 通常ファイル・ディレクトリのみ対象(隠しファイル・ディレクトリは除外)
          for entry in "$$src"/*; do
            name="$$(basename "$$entry")"
            target="$$dst/$$name"

            if [ -e "$$target" ] || [ -L "$$target" ]; then
              # 両方が実体のディレクトリなら中へ入って再帰処理
              if [ -d "$$entry" ] && [ ! -L "$$entry" ] && [ -d "$$target" ] && [ ! -L "$$target" ]; then
                link_tree "$$entry" "$$target"
              else
                echo "skip (exists): $$target"
              fi
            else
              # 存在しなければ、ディレクトリ・ファイルともにシンボリックリンクを作成
              ln -s "$$entry" "$$target"
              echo "link: $$target -> $$entry"
            fi
          done
        }

        link_tree "/demo" "/usr/local/airflow/dags/demo"

        # 元のコマンドを引き継ぐ
        exec "$$@"

関連記事

Docker ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/02/25/000000
Docker ~ 基本編 / Data Volume ~
https://dk521123.hatenablog.com/entry/2018/09/08/222100
Dockerfile ~ CMD / ENTRYPOINT ~
https://dk521123.hatenablog.com/entry/2023/07/21/234509

【AWS】LakeFormation ~ クロスアカウントデータ共有 ~

◾️はじめに

https://dk521123.hatenablog.com/entry/2020/10/13/094041
https://dk521123.hatenablog.com/entry/2026/10/17/223446
https://dk521123.hatenablog.com/entry/2026/10/16/000010

の続き。

LakeFormation のクロスアカウントデータ共有について
調べてみたので徐々にメモっていく

目次

【1】クロスアカウントデータ共有
【2】AWS RAM
 1)LFに関わる共有可能な AWS リソース
 2)特徴
【3】LFのクロスアカウント共有

【1】クロスアカウントデータ共有

* 別アカウント(別組織や別AWSアカウント)で、
 Lake Formationで管理されているデータベースやテーブルを共有するには、
 裏側では AWS Resource Access Manager (AWS RAM) を使用

https://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/optimize-ram.html

【2】AWS RAM

*  AWS Resource Access Manager (RAM) は
 AWS の異なるアカウント間でリソースの共有できるサービス

1)LFに関わる共有可能な AWS リソース

https://docs.aws.amazon.com/ja_jp/ram/latest/userguide/shareable.html#shareable-glue

AWS Glue
 + AWS Glue カタログ
 + AWS Glue データベース
 + AWS Glue テーブル

2)特徴

* データを物理的にコピーすることなく、
 メタデータとデータアクセス権だけを安全に別アカウントへ貸し出す

【3】LFのクロスアカウント共有

https://dk521123.hatenablog.com/entry/2026/10/16/000010

の「【3】LFのアクセス制御方式」で話した通り。
# 制御方式の名称 制御の対象(何をベースに縛るか) ざっくり言うと?
① 名前付きリソース方式(Named Resource Method) データベース名、テーブル名、列名を直接指定する 「ピンポイント指定」でのアクセス制御
② タグベース方式(Tag-Based Access Control) LFタグ(LF-Tags)をリソースに付与して権限を制御する方式 「付箋(ラベル)のルール」による自動アクセス制御

参考文献

https://dev.classmethod.jp/articles/share-lake-formation-to-external-account/

関連記事

LakeFormation ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/10/13/094041
LakeFormation ~ データ監査・一元監視 ~
https://dk521123.hatenablog.com/entry/2026/10/17/223446
LakeFormation ~ アクセス制御 ~
https://dk521123.hatenablog.com/entry/2026/10/16/000010
LakeFormation ~ AWS CLI ~
https://dk521123.hatenablog.com/entry/2026/10/15/001823