Bob ORM

ℹ️
Bob ORM の公式ドキュメントを日本語に翻訳したものです。
元のドキュメント: https://bob.stephenafamo.com/
GitHub: https://github.com/stephenafamo/bob
License: MIT License

Introduction

Bob は Go 言語で SQL データベースを操作するためのパッケージとツールのセットです。

Bob は以下の点に重点を置いています:

  • 正確性: 物事は正しく動作し、可能な限り仕様に忠実に従うべきです
  • 利便性: 不可解な魔法や不必要な抽象化なしに、アクションを実行する便利な方法を提供します
  • 協調性: 標準ライブラリやその他のツールとうまく連携します

Support

DatabaseQuery BuilderExecutorModelsCode Generation
PostgreSQL
MySQL
SQLite

1. Query Builder

Bob のクエリビルダーは、SQL クエリを構築するための便利で型安全な方法を提供します。

各データベース方言用のクエリビルダーは、その特定の機能と癖をサポートしています。

主要な特徴:

  • Raw クエリ: db.Query()db.Exec() で直接実行するための生の SQL を構築
  • 型安全: Go の型システムを活用してコンパイル時にエラーをキャッチ
  • 方言固有: 各データベースの特定の機能をサポート

2. SQL Executor

SQL エグゼキューターは、クエリビルダーで構築されたクエリを実行し、結果を Go の構造体にマッピングするツールです。

主要なメソッド:

  • One(): 単一の結果を期待
  • All(): 複数の結果を期待
  • Cursor(): 大きな結果セットを効率的に処理
  • Exec(): 結果を返さないクエリ(INSERT、UPDATE、DELETE など)

3. Models

Bob のモデルは、データベースのテーブルやビューを表現するための2つのタイプを提供します:

View モデル

読み取り専用のデータ表現用:

type User struct {
    ID    int
    Name  string
    Email string
}

Table モデル

読み書き両方の操作用で、部分的な更新をサポート:

type UserSetter struct {
    ID    omit.Val[int]
    Name  omit.Val[string]
    Email omit.Val[string]
}

4. Code Generation

Bob のコード生成機能は、データベーススキーマから自動的に Go コードを生成します。

Model Generation

データベーススキーマからモデルを生成:

  • テーブル用の View と Table モデル
  • 型安全な構造体
  • 適切なタグ付け

Factory Generator

テストのためのファクトリーを生成:

  • テストデータの作成を簡素化
  • リレーションシップの自動処理
  • カスタマイズ可能なデフォルト値

Generating code for SQL Queries

手書きの SQL クエリから Go コードを生成:

  • SQL ファイルから型安全な関数を生成
  • パラメータと結果の型を自動推論
  • 複雑なクエリの管理を簡素化

Bob は段階的に採用できるように設計されており、必要に応じて各コンポーネントを独立して使用できます。

📚 ドキュメント目次

🔧 Query Builder

  • PostgreSQL - PostgreSQL用クエリビルダー(Select、Insert、Update、Delete)
  • MySQL - MySQL用クエリビルダー(Select、Insert、Update、Delete)
  • SQLite - SQLite用クエリビルダー(Select、Insert、Update、Delete)

🚀 Code Generation

  • Configuration - 設定ファイルの詳細説明
  • Usage - 基本的な使い方と実行方法
  • Queries - SQLクエリからのコード生成
  • Relationships - リレーションシップの定義と生成
  • Factories - テスト用ファクトリーの生成

🗄️ Models

  • View - 読み取り専用のViewモデル
  • Table - 読み書き対応のTableモデル
  • Columns - カラムの定義と操作
  • Hooks - フック機能の詳細

⚡ SQL Executor

  • Exec - 結果を返さないクエリの実行
  • One - 単一結果の取得
  • All - 複数結果の取得
  • Cursor - 大量データの効率的な処理
  • Prepare - プリペアドステートメントの活用

🆚 VS Others