本記事では、GitHub ActionsによるDataformのCI/CD構築手順について解説します。 チーム開発においては、コードのバージョン管理、テストの自動化、本番環境への安全な実行が不可欠です。
GitHub Actionsは、GitHubに統合されたCI/CDプラットフォームであり、DataformのCI/CDパイプラインを効率的に構築・運用するのに適したツールです。
GitHub ActionsでCI/CDパイプラインを構築することで、以下のようなメリットが期待できます。
- 人的ミスの削減: ビルド、テストの自動化により、手動作業によるミスを減らすことができます。
- 開発速度の向上: 自動化されたワークフローは、開発サイクルを短縮し、迅速なリリースを可能にします。
- コード品質の向上: 定期的な自動テストの実施は、バグの早期発見と修正を促進し、コードの品質向上に繋がります。
- 本番環境への安全な実行: テスト済みのコードを適切に実行することで、本番環境への影響を最小限に抑え、安全なリリースを実現します。
GitHub Actionsの概要については、GitHub Actionsの概要 の記事をご覧ください。
環境設定
DataformはBigQueryを利用するため、Google cloudのプロジェクトにサービスアカウントが必要です。
このサービスアカウントはBigQueryに対してクエリを実行するため、BigQueryへのアクセス権限が必要となります。
ここではまずサービスアカウントの認証情報をGitHub SecretsにJSON形式で直接登録する方法を紹介したのち、workload identityを使って認証する方法についても後述します。
1.サービスアカウントの作成
以下のコマンドでサービスアカウントを作成し、必要な権限を付与します。YOUR_PROJECT_ID は実際のプロジェクトIDに置き換えてください。
2.GitHub Secretsの設定
リポジトリの "Settings" > "Secrets and variables" > "Actions" に移動
"New repository secret" をクリック
GOOGLE_CREDENTIALS という名前で、key.jsonファイルの内容全体をコピー&ペーストして登録します

3.リポジトリ構成
本記事で解説するリポジトリ内の構成については、Dataformが推奨するディレクトリ構成を採用します。
Workload Identity を使った認証
上記ではサービスアカウントキーを GitHub Secrets に登録する方法を解説しましたが、Workload Identity を使うことで、鍵ファイルを管理せずに GitHub Actions と Google Cloud を安全に連携することができます。
以下は Dataform の CI を行う際に Workload Identity を利用する例です。
Workload Identity を使うことで、サービスアカウントの鍵ファイルを利用しないセキュアな認証環境が実現可能です。
なおWorkload Identity を使用する際は、事前にWorkload Identity Pool と Providerの設定が必要です。詳細は、以下の記事を参照してください。
CI (継続的インテグレーション)
さっそく、GitHub Actionsを用いたDataformのCI/CDパイプライン構築の実例と解説を紹介します。
このワークフローでは、definitionsディレクトリへのプッシュをトリガーに、依存関係のインストール、認証情報の取得、コンパイル、dry-runオプションを用いたDataformの実行、フォーマットを行います。
--dry-run
オプションにより、実際のBigQueryへの変更は行われません。
これらにエラーハンドリングや結果の通知などを追加することで、問題発生時の対応改善が期待できます。
CD (継続的デリバリー)
このワークフローでは、mainブランチへのプルリクエストをトリガーに、Dataformの公式Dockerイメージを使用した依存関係のインストール、認証情報の取得、アサーションテスト、実行までを行います。
テストについて
- Dataformは以下のように単体テストを実施することができます。
- Dataformの標準のアサーション機能を使用
- テーブルの config ブロックにアサーションを追加、または別ファイルに追加
- テストはデータの整合性や品質を検証
まとめ
GitHub Actionsを使うことで、DataformのCI/CDパイプラインの容易な構築と、開発ワークフローを効率化し、コードの品質向上、そして本番環境への安全な実行を実現できます。
これにより、開発者はビジネスロジックの実装に集中できるようになり、より迅速に価値を提供することが可能になります。
必要に応じて、開発環境、ブランチ戦略などの要素をワークフローに組み込むことで、より堅牢で柔軟なCI/CDパイプラインを構築できるでしょう。
参考

備考
Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。
