こんにちは。ATOM開発チームの上野です。
ATOMには、お客様の広告アカウントの実績データをBigQueryに連携する機能があります。 この機能をお客様に紹介するため、サンプルとなるデータセットを構築する必要がありました。 そこで、ランダムなデータを簡単に生成できる go fakeit を活用することにしました。
go fakeit は、Goで簡単にランダムなデータを生成できるライブラリです。
名前、メールアドレス、住所、クレジットカード情報など、多様なデータを生成できるだけでなく、独自に定義したデータ構造にも対応可能です。
今回は go fakeit の基本的な使い方を紹介します。
go fakeit のインストール
まず、以下のコマンドで go fakeit をインストールします。
$ go get github.com/brianvoe/gofakeit/v7
go fakeit の基本機能
1. モックデータの作成
開発中のAPIのテスト時に、go fakeit を使ってリアルなモックデータを作成できます。
package main import ( "fmt" "github.com/brianvoe/gofakeit/v7" ) type User struct { FirstName string `fake:"{firstname}"` LastName string `fake:"{lastname}"` Email string `fake:"{email}"` } func main() { var user User gofakeit.Struct(&user) fmt.Printf("ユーザーデータ: %+v\n", user) }
実行結果(例):
ユーザーデータ: {FirstName:Emily LastName:Smith Email:emily.smith@example.com}
2. Fake(f *gofakeit.Faker) の実装
カスタム型のデータを生成するには、Fake メソッドを実装します。
type CustomData struct { Value string } func (c *CustomData) Fake(f *gofakeit.Faker) { c.Value = f.LoremIpsumSentence(3) }
3. カスタム関数の追加
独自のカスタム関数を登録し、特定のデータを生成することも可能です。
gofakeit.AddFuncLookup("customword", gofakeit.Info{ Category: "custom", Description: "Generates a custom word", Generate: func(r *gofakeit.Faker) interface{} { return "customWord" }, }) fmt.Println(gofakeit.Get("customword"))
その他の機能については、公式のFunctions (README)も参照してください。
実戦の例: 広告アカウントの実績データを生成する
1. ダミーデータをCSV形式で出力
システムの負荷テストやデータの可視化のために、大量のダミーデータをCSV形式で出力することも可能です。
package main import ( "encoding/csv" "fmt" "os" "github.com/brianvoe/gofakeit/v7" ) type Campaign struct { CampaignID string `fake:"{uuid}"` Date string `fake:"{date}"` Impressions int `fake:"{number:1000,50000}"` Clicks int `fake:"{number:10,5000}"` Conversions int `fake:"{number:1,500}"` } func generateCSV(filename string, records int) error { file, err := os.Create(filename) if err != nil { return err } defer file.Close() writer := csv.NewWriter(file) defer writer.Flush() // ヘッダーを書き込む writer.Write([]string{"CampaignID", "Date", "Impressions", "Clicks", "Conversions"}) for i := 0; i < records; i++ { var campaign Campaign gofakeit.Struct(&campaign) writer.Write([]string{ campaign.CampaignID, campaign.Date, fmt.Sprintf("%d", campaign.Impressions), fmt.Sprintf("%d", campaign.Clicks), fmt.Sprintf("%d", campaign.Conversions), }) } return nil } func main() { if err := generateCSV("campaign.csv", 100); err != nil { fmt.Println("CSV生成エラー:", err) } else { fmt.Println("CSVファイル campaign.csv を作成しました。") } }
このコードを実行すると、campaign.csv に100件の広告アカウントのダミーデータが書き出されます。
実際の運用では、生成したデータをGoogle Cloud Storageにアップロードし、BigQueryにロードすることでサンプルデータセットを提供できます。
まとめ
go fakeit は、開発やテストのためにリアルなデータを簡単に生成できる便利なライブラリです。
特に、構造体に対して自動的にデータを埋められる機能はとても便利です。
また、対応していないデータタイプがある場合でも、独自の関数を追加することで柔軟に対応できるのも魅力です。
開発・テストの効率化に go fakeit をぜひ活用してみてください!