Upgrade to Pro — share decks privately, control downloads, hide ads and more …

最強のDev Containerを考える

最強のDev Containerを考える

昨今のアプリケーションはDockerコンテナで運用されることが多いです。
VS Codeのリモートコンテナ機能は、開発環境をもDev Containerと呼ばれるDockerコンテナの中に収めて、ローカルと同様の操作性で開発が進められるようにする先進的な機能です。
発表者は、VS Codeに留まらずDev Containerを使った開発方法が近い未来の当たり前の開発環境になるのではないかと考えています。
そんなDev Containerの構築方法に絞って、以下の様なトピックをお話します。
- Dev Containerを今すぐ作って開発を始める方法
リモートコンテナ機能を使うことの利点はなにか
- Dev Containerにはどんなことが設定できるか
- Dev Containerの中には何を入れるべきか
- 本番アプリコンテナに近いDev Containerを作るにはどのような方法があるか

74th(Atsushi Morimoto)

November 21, 2020
Tweet

More Decks by 74th(Atsushi Morimoto)

Other Decks in Technology

Transcript

  1. VS Code関連の活動 - Visual Studio Code Debug Specs 様々な言語・環境のVS Codeでのデバッグ手法を集めたリポジトリ

    - Vim Style(メンテ終了) 世界最速リリースのVimキーバインド拡張機能 - Editing Snippets with YAML YAMLでスニペットを編集する拡張機能 - Monokai Charcoral High Contrast Theme - High Contrast Icons
  2. .devcontainer/devcontainer.jsonの功績 開発環境のコンテナ化を"定義"した • コンテナ定義 Dockerfile / docker-compose.yaml / image •

    ユーザ名 vscode • ワークスペースマウント /workspace • コンテナ起動後コマンド postCommand ローカル環境に依存する要素(ワークスペース、UID)をまとめた
  3. AGENDA 1. Remote Developmentで手に入れたもの 2. Dev Containerはどうあるべきか 3. Multi Stage

    Buildを使ったDev Containerを極める 4. Dev Containerの将来 ここからは先程考えた Dev Containerの責務をよりよく満たすために、 Multi Stage Buildを使ったDev Containerの構築方法を紹介します
  4. Multi Stage Build FROM golang:1.13 AS build-env WORKDIR /work RUN

    ... FROM build-env AS production RUN ... CMD [...] Multi Stage BuildはDockerコンテナのbuildを段階に分けることができる機能です build-envというコンテナから productionコンテナを作る例です
  5. Dockerfile • 動作するものを公開中 https://github.com/74th/devcontainer-book-go/blob/master/Dockerfile • VS Code公式が公開するDebian用スクリプトを実行して Dev Container環境を作る https://github.com/microsoft/vscode-dev-containers/blob/master/script-library/common-debian.sh

    • Go用のDev Container構築スクリプトもある、こちらも実行する https://github.com/microsoft/vscode-dev-containers/blob/master/script-library/go-debian.sh • 最近、ビルド及びリント(CI)用コンテナは Dev Containerのイメージで良い気がしてきている 今回のDockerfileはgithubで公開しています また、Dev Containerを作るにはMicrosoftの公開するスクリプトを使うと、 さっとDev Contanerのための環境を作ることができます Goの開発ツール郡をインストールをするスクリプトもあります。 そして、私は最近 CI環境のコンテナは Dev Containerを流用するのが良いように思えてきました
  6. Dev Containerの将来 MS公式見解などではなく、@74th の頭の中の考えです • リモートコンテナ機能は VS Code のオープンソースではない VS

    Codeに閉じた機能である • Dev Containerの発想(開発環境コンテナ)自体は VS Codeに閉じた発想ではない • Dev Containerで実現するプログラミング支援の機能自体は LSP によってVS Codeに閉じたことではない • LSP と結びつくことで、Dev Containerの概念が一般化するのではないか • Build/CI環境 = Dev Container が一般化するのでは • CI環境で動かす LSP という概念が一般化するのでは
  7. Conclusion • devcontainer.jsonで開発環境のコンテナ化を"定義"したと解説しました • Dev Containerの中にあるべきものを解説しました • Multi Stage Buildを使った実践例を解説しました

    • Dev Containerの将来をちょっと考えてみました 我こそは最強のDev Containerを作った!という方はぜひ紹介ください!