注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
ソフトウェア開発者は通常、バージョン管理システムを使ってコードベース内の作業を調整します。これにより、複数のエンジニアが同じコードに安全に変更を加えられます。
Foundry では、ソフトウェア開発者がコードを扱うのと同じようにデータを扱います。多くの人が、ほかの人の作業を妨げることなく、同じデータに変更を加えたり、操作したりできる仕組みが必要です。そこで、ソフトウェア開発のベストプラクティスをデータパイプラインの作成に適用し、バージョン管理システムで一般的なブランチという機能を活用しています。
大まかに言うと、ブランチを使うと、メインの経路から分岐して、自分のブランチでデータを扱えます。その後、変更内容に満足したら、このブランチからメインの経路に変更を戻せます。
ブランチのワークフローを使って Foundry のデータパイプラインコードを変更する方法は次のとおりです。

master ブランチは主要なデータパイプラインを指します。独自の変更に取り組む場合は、自分のブランチを作成します。これにより、master ブランチへの影響を心配せずに、実験やアイデアの検証ができる環境が作成されます。master データパイプラインに反映するために、レビューと検証を依頼したい変更を加えたことをチームに知らせます。Foundry のブランチ機能は、業界標準の Git に似たバージョン管理の仕組みを実装しています。そのため、Code Repositories アプリケーションは、ファイルの個々のブランチで作業する開発者が1人であることを前提に設計されています。ほかのユーザーが**personal ブランチ**で作業している場合、変更が上書きされる可能性があります。これを避けるため、各ユーザーが別々のブランチで作業することを強く推奨します。
このページの以降のセクションでは、Foundry におけるブランチの仕組みの技術的な詳細を説明します。ブランチの実際の使い方を学ぶには、Pipeline Builder または Code Repositories でシンプルなバッチパイプラインを作成するチュートリアルに沿って進めてください。
Foundry では、データのブランチ機能は、個々のデータセット内のブランチと、データセットのビルド時のブランチという、2つの異なるレベルの機能を使って実装されています。
データセットのページで説明したように、データセットには一連のトランザクションという形式でバージョン履歴が保存されます。概念的には、データセットのブランチは Git のブランチに似ており、データセット、ブランチ、トランザクションは、それぞれ Git のリポジトリ、ブランチ、コミットに相当します。
Git のブランチと同様に、データセットのブランチは、そのブランチ上の最新のトランザクションへのポインターにすぎません。そのため、ブランチはコミット時刻順に並んだトランザクションの直線的な列として捉えられます。トランザクションをコミットしてブランチ上のデータセットを変更しても、ほかのすべてのブランチのトランザクションとビューは変更されません。Git とは異なり、データセットのブランチのマージはサポートされていません。
各データセットのブランチには、ルートブランチでない限り、親ブランチが必ず1つあります。実際には、Foundry のほとんどのデータセットには master という名前のルートブランチが1つあり、このルートブランチから子ブランチが作成されます。
データセットのブランチに関してサポートされている操作は、以下のとおりです。
Foundry は、データセットのブランチについて次の事項を保証します。
データセットのブランチ機能は、データのバージョン管理の基盤となるセマンティクスを提供します。Foundry はデータセットのブランチ機能と Git のブランチ機能を組み合わせることで、ロジックとデータを同時にブランチ化できるようにします。これにより、データエンジニアはデータパイプラインへの変更を本番環境に導入する前に、安全に試すことができます。
Git のロジックのブランチとデータセットのデータのブランチは、Foundry のビルドシステムを通じて結び付けられます。すべてのビルドはユーザーが指定したブランチで実行され、ビルド内のジョブはそのブランチ上のデータセットのみを変更します。そのため、ビルドにおけるブランチを使うことで、ユーザーごとの変更を互いに分離できます。
Foundry のビルドは、ブランチに関して次の2つの主な機能を実行します。
Foundry でコードリポジトリのブランチにデータ変換を記述し、コードをコミットすると、ビルドシステムの適切なブランチに Job Spec が公開されます。そのブランチでビルドを実行すると、ビルドはこのブランチの Job Spec とその依存関係をたどり、実行すべきロジックを特定します。
通常、ビルドにはブランチフォールバックが指定されます。これは、ビルドブランチに Job Spec が設定されていない場合に、どのブランチから Job Spec を取得するかを決めるものです。たとえば、develop --> master というフォールバックチェーンを使って develop でビルドを実行した場合、ある出力データセットの Job Spec が公開されていなければ、代わりに master ブランチから Job Spec が読み取られます。
データセットのアイコンの色は、Job Spec とブランチに関する情報を示します。データセットのアイコンが灰色の場合、master ブランチに Job Spec が存在しないことを示します。データセットのアイコンが青色の場合、master ブランチに Job Spec が定義されています。
ビルド内の Job Spec で出力として指定されたすべてのデータセットでは、ビルドブランチでトランザクションが開かれます。データセットにこのブランチが存在しない場合は、フォールバックチェーンの最初のブランチから作成されます。フォールバックブランチが存在しない場合は、ルートブランチとして作成されます。ジョブの入力は、可能であればビルドブランチから読み取られます。それ以外の場合は、フォールバックチェーン内で最初に存在するブランチが使用されます。
ビルドでのブランチの動作を理解するために、ワークフローの例を順に見ていきます。
master ブランチに存在するとします。feature という名前のブランチを作成します。これにより、基盤となる Git リポジトリにブランチが作成されます。feature ブランチ上の両方のデータセットに Job Spec が公開されます。feature ブランチでビルドを開始します。feature ブランチは Git リポジトリの master ブランチから作成されたため、このビルドのフォールバックチェーンは feature --> master となります。ステップ(3)で公開された Job Spec が読み取られ、ユーザーのコードに対応する2つのジョブが開始されます。feature ブランチ上のデータセット B と C の両方でトランザクションが開かれます。2つのジョブは、次のように順次実行されます。
master ブランチが入力として使用されます。計算によって新しいデータが生成され、現在開いているトランザクションでデータセット B に書き込まれます。トランザクションがコミットされます。feature ブランチが入力として使用されます。計算によって新しいデータが生成され、現在開いているトランザクションでデータセット C に書き込まれます。トランザクションがコミットされます。コードを変更してコミットし、ビルドを実行したことで、データエンジニアはデータセット B と C の feature ブランチに新しいデータを生成しました。このプロセスによってデータセット A はまったく影響を受けず、データセット B と C の master ブランチも変更されていないことに注目してください。
Foundry のビルドは、ブランチについて次のことを保証します。