私は、リモート開発環境 (クラウド開発環境とも呼ばれる) というテーマに比較的遅れて参加しました。主な理由は、私が 6 年以上開発チームで働いていないからです。しかし、私は現在 Loft Labs で働いており、リモート開発環境製品であるDevPod を所有しています。FOSDEMでDevPod ブースを操作する予定なので、私たちの価値提案を理解したいと考えました。
元開発者として、各開発者の開発環境を設定する苦労を鮮明に覚えています。キャリアの初めの頃は、アーキテクトが私の開発マシンを苦労して設定しなければならなかったため、自分の設定と似たものになっていました。その後、私はチーム メンバーのために同じことを繰り返しました。開発に影響を与える可能性のある矛盾の範囲は事実上無限です。オペレーティング システムはもちろん、SDK のバージョンとフレーバー( Java の Eclipse Temurin と SapMachine など)、git フックなどです。すべてのプロジェクトで、汗と苦労と血の汗でした。
長年にわたり、開発環境を再現するための興味深いアプローチをいくつか見てきました。最初は VM から始まり、その後コンテナになりました。最初に注目したツールは Vagrant だったと思います。2012 年に講演に出席した際、講演者はトレーニング セッションの前にマシンをセットアップするために Vagrant を使用したと述べていました。
アプリのアーキテクチャは長年にわたって大きく進化し、より複雑で洗練されたものになっています。数年前は、インフラストラクチャの唯一の依存関係は SQL データベースでした。JVM エコシステムでは、すべての SQL データベースで機能する API である JDBC を利用できたのは幸運でした。必要なのは標準 SQL を記述することだけで、実行時にデータベース インスタンスを構成できました。Apache DerbyやH2などの組み込みデータベースでは、開発者ごとに専用の Oracle インスタンスは必要ありませんでした。
時代は変わりました。アプリに SQL データベース、NoSQL データベース、Kafka クラスター、およびいくつかの追加アプリケーション サービスが必要になることは珍しくありません。このようなアプリを開発する組織は、この複雑さを管理するために、すでに Docker や Kubernetesなどのコンテナー関連のテクノロジを使用しています。
しかし、最初の問題は解決されません。IDE、そのプラグイン、SDK、git フック、その他すべてをどのように調整すればよいのでしょうか? おそらくタイトルから推測できるでしょうが、それは「リモート開発環境」です。
はじめに、RDE はクラウド開発環境と呼ばれると述べました。RDE の背後にある主なアイデアは、クラウドにできる限りすべてを保存し、それをすべての開発者と共有することです。さらに、最も普及しているクラウド プロバイダーと最も一般的に使用されている IDE で動作するようにする必要があります。このようなニーズが生じたとき、業界の関係者が標準に集まるときが来ます。Microsoft は、まさにこの目的のために、VS Code Remove 開発プラグインの開発コンテナー標準を開始しました。
開発コンテナ (略して dev コンテナ) を使用すると、コンテナをフル機能の開発環境として使用できます。アプリケーションを実行したり、コードベースの操作に必要なツール、ライブラリ、ランタイムを分離したり、継続的な統合とテストを支援したりするために使用できます。開発コンテナは、ローカルまたはリモート、プライベート クラウドまたはパブリック クラウド、さまざまなサポート ツールやエディターで実行できます。
開発コンテナ仕様は、コーディング環境として使用したり、継続的な統合やテストに使用したりできるように、簡素化されたオーケストレーションされていない単一のコンテナ オプションを提供しながら、共通の開発固有の設定、ツール、構成で既存の形式を強化する方法を見つけることを目指しています。仕様のコア メタデータ以外にも、この仕様では、開発者が機能とテンプレートを通じてコンテナのセットアップ手順をすばやく共有および再利用できるようにもなっています。
構成ファイルはdevcontainer.json
です。スキーマリファレンスはここにあります。VS Code、Visual Studio、IntelliJ 製品はdevcontainer.json
ファイルを利用できます。プロバイダー側では、GitHub Codespaces、CodeSandbox、DevPod がこれをサポートしています。
DevPod はdevcontainer.json
を活用するソリューションです。3 つの主要なプロパティを実装します。
DevPod はユーザーフレンドリーでわかりやすい設計になっているため、簡単に使用できます。この製品に感銘を受けたため、自分の考えを整理するためにこの記事を書くことにしました。
最初のステップは、DevPod 自体をインストールすることです。私は Mac を使用していますが、Homebrew レシピがあります。
brew install devpod
インストールしたら、CLI または GUI から起動できます。最初は、利用可能なオプションを理解しやすいように GUI を使用することをお勧めします。
DevPod は、コンテナを実行する場所であるプロバイダーを提供します。デフォルトは Docker です。クラウド プロバイダーや Kubernetes クラスターなどの追加のプロバイダーを追加できます。
この投稿では、Docker を使用します。OrbStack を使用します。では、本題に入りましょう。ワークスペース メニュー項目に移動しましょう。すでにワークスペースを作成している場合は、ここに表示されます。初めての訪問なので、1 つ作成します。btn:[ワークスペースの作成] ボタンをクリックします。クイックスタートの例の 1 つ、つまりRust を試してみましょう。私が選択した IDE は IntelliJ IDEA ですが、ご自分の IDE を選択することもできます。イメージ、IDE、プロバイダーを選択したら、[ワークスペースの作成] をクリックします。
この時点で、DevPod はイメージをダウンロードし、IntelliJ の OrbStack で実行されているプロジェクトを開きます。
これからは、チームメンバー全員が同じ Rust バージョンを使用していると確信しながら、安心して Rust プロジェクトの作業を開始できます。
このセットアップを初めて使用する場合、DevPod は JetBrains クライアントもダウンロードすることに注意してください。ただし、これは 1 回限りのダウンロード遅延です。
たとえば、Git の事前コミット フックでも同じことが言えます。別の IDE で開発したい場合は、起動時にそれを選択すれば大丈夫です。1 日の作業が終わったら、コンテナを停止します。クラウドで実行している場合は、コストを節約できます。翌日、コンテナを再開して作業を続けます。
DevPod は、開発チームが同じマシン構成を手間をかけずに共有できるようにする便利なツールです。この入門ブログ記事では、DevPod でできることのほんの一部を紹介しました。異機種開発環境に直面した場合は、DevPod のパワーを活用することをお勧めします。
さらに進むには: