課題:「自分のマシンでは動くが、CIでは失敗する」という悪夢
ほとんどすべての開発者が、一度はこの経験をしたことがあるでしょう。コードをGitHubにプッシュし、CIの実行を5分間待ち、そして些細なエラーで冷や水を浴びせられる。YAMLを1行修正し、再度プッシュして、祈る. 単純なスクリプトの設定を完了させるためだけに、このループを20回も繰り返すことがあります。
核心的な問題はツールにあります。GitHub Actions、GitLab CI、Jenkinsなどはすべて、プログラミング言語ではなくデータ形式であるYAMLに基づいています。システムが肥大化すると、YAMLファイルはデバッグが極めて困難な「スパゲッティ状態」になります。さらに深刻なのは、そのパイプライン自体を個人のローカルマシンで正確に再現して実行することがほぼ不可能な点です。すべてがプロバイダーのクラウドインフラに完全に依存してしまっています。
なぜYAMLによるCI/CDは疲弊を招くのか?
- 抽象化の欠如: YAMLには関数もデータ型(Types)もありません。YAMLで複雑な条件分岐ロジックを処理するのは、利き手ではない方の手でコードを書いているようなものです。
- 環境の不一致: クラウド上のランナーは通常、ローカルマシンとは全く異なるOSやライブラリを使用しています。その結果、自分のマシンではスムーズに動くコードが、デプロイ時に突然動かなくなるのです。
- フィードバックの遅さ: どんなに小さな変更でも、コミットとプッシュが必要です。ランナーが起動するのを待つためだけに、何時間も費やすことになります。
Dagger:CI/CDを本来あるべき姿である「ソースコード」へ
Daggerはこのゲームのルールを完全に変えます。YAMLを書く代わりに、Python、Go、TypeScriptなど、自分が使い慣れた言語でコードを書きます。DaggerエンジンはDocker(BuildKit経由)を使用してビルドステップを実行します。これにより、ローカルで実行してもJenkins上で実行しても、結果が常に100%同一であることが保証されます。

