Dagger Shell x Runme でドキュメントを実行環境に
はじめに
リポジトリの README や技術ドキュメントに記載された環境構築のシェルコマンド。それを読みながら、実際にその場で実行できたら、効率的ですよね。本記事では、そんなインタラクティブな体験を提供する Dagger Shell と Runme というツールとその連携についてご紹介します。
Dagger Shellとは?
そもそもDaggerとは?
Dagger は、コンテナ技術を活用して、CI/CD パイプライン、開発環境、その他の自動化タスクを定義・実行するためのポータブルな開発プラットフォームです。Docker コンテナ、ファイルシステム、ネットワークなどのインフラストラクチャを抽象化し、プラットフォームに依存しない形でワークフローを構築できます。これにより、環境に左右されない、再現性の高い自動化処理を実現します。
Dagger の CI/CD ワークフローは、Go、Python、TypeScript などの言語で記述できます。
Dagger Shellとは
Dagger Shell は、Dagger の機能の一つで、Dagger が管理するコンテナイメージに基づいたインタラクティブなシェル環境を提供します。特定の設定が施されたコンテナ内でコマンドを実行できるため、ローカル環境への依存を減らし、プロジェクトに必要なツールや環境が整った状態で作業を開始できます。
Dagger Shell の登場により、以前は Go や Python などの言語で記述する必要があったワークフローを、シェルスクリプトのみで手軽に実行できるようになりました。
セットアップ方法
Dagger Shell を利用するには、Dagger CLI のインストールが必要です。
インストールに必要なもの
-
Docker: Dagger はコンテナ技術を利用するため、Docker がインストールされている必要があります。
-
Dagger CLI: Dagger のコマンドラインインターフェースです。
インストール方法
macOS の場合は、Homebrew を利用して簡単にインストールできます。
brew install dagger/tap/dagger
インストール後、ターミナルで dagger version
を実行し、インストールを確認してください。
コンテナ化したシェルを実行
Dagger Shell は、ターミナルで dagger
コマンドを実行することで対話モードで利用できます。
dagger
対話モードで以下のように入力することで、alpine
コンテナを起動し、そのターミナルに接続できます。
container | from alpine | terminal
起動したターミナル内では、通常の Docker コンテナと同様にコマンドを実行でき、exit
コマンドでコンテナから抜けることができます。
Runmeとは?
Runme は、Visual Studio Code (VSCode) の拡張機能で、Markdown ドキュメント内のコードブロックをインタラクティブに実行できるツールです。ドキュメントを読みながら、そこに記述されたコマンドやスクリプトをその場で実行し、結果を確認できるため、学習や問題解決の効率を高めます。
同様のツールとして Jupyter Notebook がありますが、Runme は一般的な Markdown ドキュメント上で同様の機能を提供することが特徴です。
VSCode拡張をインストール
Runme を利用するには、VSCode に拡張機能をインストールする必要があります。詳細は以下の公式ドキュメントを参照してください。
https://docs.runme.dev/installation/vscode
frontmatter設定
Runme で Dagger Shell を連携させるためには、Markdown ファイルの frontmatter に Dagger 関連の設定を記述します。VSCode のコマンドパレットから「Runme: Lifecycle Identity - Document」を実行すると、Markdown ファイルの先頭に frontmatter が追加されます。
Dagger Shell を利用するための frontmatter の設定例は以下の通りです。
---
cwd: .
runme:
id: 01JRYZYW1230QTEY7CP58DFD62
version: v3
shell: dagger shell
terminalRows: 20
---
ドキュメント上で実行してみる
以下は、Runme を使用して Markdown ドキュメント上で Dagger Shell を起動し、Node.js コンテナ上で React のビルドを実行するシェルの例です。
container |
from node:latest |
with-exec -- npm install -g pnpm@latest |
with-directory /src . --exclude node_modules | # node_modules を除外
with-workdir /src |
with-exec -- pnpm install --frozen-lockfile |
with-exec pnpm run build |
directory ./dist |
export ./dist # ビルドしたものをホスト環境の./distにエクスポート
このコードブロックの再生ボタンをクリックして実行すると、VSCode の出力ウィンドウに Dagger Shell を通じたコンテナの実行ログが表示されます。ドキュメント上で実際の処理を検証できるため、理解を深めるのに役立ちます。
おまけ
Github ActionsでDagger Shellを実行
Dagger は Github Actions との連携も可能です。CI/CD パイプライン内で Dagger Shell を起動し、テストやビルドなどのタスクを実行することで、一貫性のある実行環境を構築できます。
name: dagger-ci
on:
push:
branches: [main]
jobs:
typecheck-lint:
name: typecheck-lint
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Dagger
uses: dagger/dagger-for-github@8.0.0
with:
version: 'latest'
- name: Check TypeScript and Lint
run: container |
from node:latest |
with-exec -- npm install -g pnpm@latest |
with-directory /src . --exclude node_modules |
with-workdir /src |
with-exec -- pnpm install --frozen-lockfile |
with-exec -- pnpm run ts:check |
with-exec -- pnpm run lint
shell: dagger {0}
このワークフローは、Dagger Shell を利用して Node.js 環境での型チェックとリンティングを実行する例です。
以下は今回試した内容を記載したサンプルリポジトリとなります。
まとめ
Dagger Shell と Runme の連携は、開発ドキュメントをインタラクティブな実行環境へと変え、学習効率の向上、環境構築の簡略化、そしてチーム内の知識共有を促進します。ぜひこの組み合わせを試してみてください。
Discussion