2 ポイント 投稿者 GN⁺ 2025-04-02 | 2件のコメント | WhatsAppで共有
  • Unixシェルは50年以上使われてきており、単純なコマンドで複雑な動作を組み合わせられる強力なコンピューティングツールだった
    • しかし、現代のソフトウェアスタックははるかに複雑になっており、従来のシェルだけでこれらすべての作業を扱うのは難しい
    • Docker、make、PowerShell、nixなどに着想を得て、コンテナ、シークレット、サービスエンドポイント、宣言的実行、キャッシュ、サンドボクシングなどを標準でサポートするモダンなシェルが必要になった
  • Dagger Shell は、Dagger Engine向けのbash構文ベースのフロントエンドで、ビルド、テスト、デプロイ、一時環境など、さまざまな自動化作業に活用できる
  • システムシェルを置き換えるのではなく補完するツールであり、複雑なワークフローをシンプルなモジュールの組み合わせで構成できるよう支援する
    container |  
      from alpine |  
      with-exec apk add git |  
      terminal  
    
  • シェルとコードだけで十分

    • 複雑なスクリプトを処理する際、奇妙なDSLを学ぶ代わりに、実際のプログラミング言語で記述できる
    • Go、Python、Typescript、Java、PHPなど、さまざまな言語向けSDKを提供
    • 言語で書いた関数をDaggerの新しいプリミティブへ拡張できる
  • APIと接続されたシェル

    • Dagger ShellはDagger APIクライアントとして機能し、型付きオブジェクト、ドキュメント、再利用可能なモジュールエコシステム(Daggerverse)にアクセスできる
    • たとえば、Trivyセキュリティスキャンモジュールをロードして実行できる
  • デフォルトのサンドボックス環境

    • すべてのコマンドはデフォルトでサンドボックス内で実行され、ファイル、シークレット、サービスなどへのアクセスは明示的に指定する必要がある。少し冗長にはなるが、再現性と安全性が高まる
      container |  
        from alpine |  
        with-secret-variable POSTGRES_PASSWORD op://dev/db-password/credential |  
        with-directory /src ~/src/myapp |  
        with-service-binding db tcp://localhost:5432 |  
        terminal  
      
  • シンプルなコンテナビルド

    • Alpineベースのコンテナ作成、テキストファイルの挿入、メッセージ出力の設定、一時レジストリへのプッシュまでを一度に実行できる
    • Dockerfileの作成、ビルドコマンド、プッシュの間でコンテキストを切り替えることなく処理できる
      # Build a wolfi linux container with curl, then test connection to stable and dev docs  
      github.com/dagger/dagger/modules/wolfi | container --packages=curl |  
        with-service-binding docs-stable $(github.com/dagger/dagger/docs@v0.17.1 | server) |  
        with-service-binding docs-dev $(github.com/dagger/dagger/docs@main | server) |  
        with-exec curl http://docs-stable |  
        with-exec curl http://docs-dev  
      
  • テスト環境の構築

    • CIで頻繁に発生する問題であるテスト環境の構築も簡単に処理できる
    • ネイティブのサービスバインディング対応により、複数のライブインスタンスを接続してテストできる
      repo=$(git https://github.com/dagger/hello-dagger | head | tree)  
      
      env=$(container | from node:23 | with-directory /app $repo | with-workdir /app)  
      
      build=$($env | with-exec npm install | with-exec npm run build | directory ./dist)  
      
      container | from nginx | with-directory /usr/share/nginx/html $build | terminal --cmd=/bin/bash  
      
  • マルチステージビルド(Multi-Stage Builds)

    • 明確でモジュール化された構文により、複雑なビルドパイプラインを実装できる
    • 各段階を変数として明示することで、デバッグや再利用がしやすい
      container |  
        from golang:latest |  
        with-directory /src $(git https://github.com/dagger/dagger | head | tree) |  
        with-workdir /src |  
        with-exec go build ./cmd/dagger |  
        file ./dagger |  
        export ./dagger  
      

2件のコメント

 
winterjung 2025-04-02

参考までに、リンクは https://dagger.io/blog/… に変更されました

 
GN⁺ 2025-04-02
Hacker Newsの意見
  • 最近、Daggerの実際の用途がますます把握しづらくなっている気がする

    • 最初はJenkinsを置き換えられるのではないかと期待していた
    • CIパイプラインをローカルで実行してデバッグできる代替手段を提供していた
    • Golangで書けて、必要なものを取り込めた
    • 今では方向性が散漫になり、Dockerを置き換えようとし、新しいシェルになろうとし、妙なことにLangchainになろうとしているように見える
    • 新しいCLI引数も、既存のシェルスクリプトやJenkinsfileより優れているようには見えない
    • プロジェクトが本来の目標から外れてしまったようで残念だ
  • Dockerfileとシェルスクリプトを組み合わせてさまざまなイメージを構成することが多い

    • 開発者マシン、ロボット、CIなど、環境によって異なる実行が必要になる
    • このツールならその複雑さを解消できそうだ
    • ビルドの出力を参照できるので、タグを扱わなくてよい点がよい
  • DaggerがDockerを置き換えようとしていることを見落としていた

    • 大きなビジョンだ
    • 野心的な試みではあるが、今すぐ既存ツールを置き換えられるという確信にはつながりにくい
    • Bash互換性を選んだ点は残念だ
    • Bashの文法や問題点から離れるべき時期だと思う
  • Dagger Shellスクリプトをノートブック形式で書けるWeb UIがすでに作られている

    • とても興味深いので、確認してみることを勧める
  • Daggerのホームページの説明を見て疑問が湧いた

    • "クロスプラットフォーム構成エンジン"
    • モジュール式コンポーネントとシンプルな関数で強力なソフトウェア環境を構築
    • 複雑なビルドとAIワークフローに適している
    • あまりに一般的すぎて役に立たない
    • すべてが構成エンジンだ。Javascriptも、macOSも構成エンジンだ
  • 関連する自己宣伝

  • コンテナ内部で開発作業をしたいという目的なのだろうか?

    • JetifyのDevboxやFlox.devを思い出した
  • 率直に言って、このツールで何ができるのだろうか?

    • どんな活動に役立つのか?
    • どんなプログラムを置き換えられるのか?
    • "DevOpsオペレーティングシステム"は何をするのか?
  • 第一印象では、Dockerfileと実際のコードでソフトウェアを定義・構成することの中間段階のように見える

    • Nixを多用する立場からすると魅力を感じない
  • Daggerは製品の方向性を変えたのだろうか?

    • 独立したパイプライン・アズ・コードのサービスが主な売り文句だったと記憶している
    • 今ではDockerを再構成しようとしているように見える