Windows11 + Docker + VSCode で開発環境を構築【ずんだもん解説/Rust】

あまつ楓 | プログラミング解説
16 Apr 202313:09

Summary

TLDRこの動画のスクリプトは、WindowsでDockerとVS Codeを使ってRustの開発環境を構築する方法を解説しています。Ubuntu上での開発の課題を指摘した上で、DockerコンテナとVS Codeの機能を活用することで、パッケージの競合や拡張機能の管理が容易になることを述べています。さらに、WindowsへのDockerのインストール方法と、コンテナの構築・デバッグ方法をステップバイステップで解説している貴重な内容です。

Takeaways

  • 😊 WSL2とDockerを使うことで、Windowsでも快適な開発環境を構築できる
  • 👍 ドッカーを使うことで、開発環境の再現性と移植性が向上する
  • ☑️ ドッカーイメージを使えば、簡単に必要な開発環境を構築できる
  • 💡 ドッカーファイルを使って独自のイメージも構築可能
  • 📝 VSCodeのデブコンテナ拡張機能を使うと、簡単にコンテナを開発に利用できる
  • 🗂 バインドマウントを使うことで、ホストとコンテナの間でソースコードをリアルタイムに共有できる
  • ❗ 複数の言語やバージョンを同じOS上にインストールするとパッケージ競合が起きることがある
  • 😮 Dockerコンポーズを使うと、複数のコンテナを1つのアプリケーションとして管理できる
  • 🔄 ボリュームやバインドマウントで、コンテナ間でデータを共有できる
  • i️ ドッカーデスクトップとWSL2+UbuntuのどちらでもDockerは動作する

Q & A

  • ドッカーをWindowsにインストールする方法は何種類ありますか?

    -2つの方法がある。1つはDocker Desktop for Windowsをインストールする方法。もう1つはWSL上のUbuntuにDockerをインストールする方法。

  • なぜDockerをインストールする方法が2つあるのですか?

    -元々DockerはLinux環境で動作することが前提になっているため。Windows環境だとWSL2を使ってDockerを動かすことができる。

  • Dockerイメージとは何ですか?

    -コンテナを作成、実行するための設計図のようなもの。1つのイメージから複数のコンテナを作ることができる。

  • Docker Composeとは何ですか?

    -複数のコンテナを定義、管理することができるツール。Webアプリとデータベースなど、複数のコンテナを1つのアプリケーションとして扱える。

  • バインドマウントとは何ですか?

    -ホストマシンのディレクトリとコンテナ内のディレクトリを接続することで、リアルタイムにデータを共有できる機能。

  • devcontainer.jsonに何を定義していますか?

    -使用するDockerイメージやバインドマウントの設定、VSCodeの拡張機能等、コンテナの開発環境に関するメタデータを定義している。

  • デバッグ時に発生したエラーの原因は何でしたか?

    -launch.jsonファイルがないことが原因だった。YESを選択してファイルを自動生成することで解決した。

  • クリスピーとは何ですか?

    -Rustの静的解析ツールの1つ。コードの解析を行い、警告やエラーを報告してくれる。

  • cargoを使えなかった場合、どうするべきですか?

    -PATHなどの環境変数が正しく設定されているかを確認する。設定し直せば使えるようになるはず。

  • Rust開発に役立つVSCodeの拡張機能を教えてください。

    -rust-analyzer、CodeLLDB、cratesなどがオススメ。生産性を大きく向上させてくれる。

Outlines

00:00

🔧 Windows上でのRust開発環境の構築

この動画では、WindowsでDockerとVSコードを使用してRustの開発環境を構築する方法について説明します。特に、WSL上のUbuntu環境で発生するパッケージの競合や依存関係の問題、そしてVS Codeの拡張機能の管理に関する不便さを解決するために、Docker環境の設定を推奨しています。さらに、Dockerの基本概念やメリット、Dockerファイルの重要性、Docker Composeの役割、そしてデータの保持方法についても説明しています。

05:00

🌐 Dockerの基本とインストール方法

動画のこの部分では、Dockerを用いてイメージをコンテナ化し、Windows上での開発環境を如何に簡単に設定できるかを説明しています。また、Dockerのインストール方法には二つのアプローチがあること、そのうちの一つはDocker Desktop for Windows、もう一つはWSL上のUbuntuにDockerをインストールする方法であることを詳述しています。このセクションでは、特にUbuntu上でのDockerのインストールプロセスと、インストール後の初期設定について詳しく解説しています。

10:02

🛠️ Rust開発環境の設定と利用

このセクションでは、VS CodeのDev Containers拡張機能を使用してRustの開発環境をDockerコンテナ内に構築する手順を紹介しています。具体的には、コンテナの設定、必要な拡張機能の追加、そして開発環境のビルドと実行のプロセスについて説明しています。さらに、バインドマウントを用いたファイルの同期、デバッグの設定方法、そしてRustプロジェクトの作成と実行の手順についても触れています。最後に、もし視聴者がより詳細なDockerの設定に興味がある場合、追加の動画を制作する可能性について言及しています。

Mindmap

Keywords

💡Docker

Dockerは、アプリケーションとその依存関係をコンテナという軽量な環境にパッケージ化する技術です。動画ではDockerを使って開発環境を構築する方法が説明されています。例えば、「Dockerはイメージという設計図をコンテナという形に実体化させて使う」という例があります。

💡コンテナ

コンテナとはDockerにおけるアプリケーション実行の単位です。イメージから実際に起動される実体がコンテナです。例えば「コンテナはOSとアプリケーションの実行環境のまとめパッケージ」と説明されています。

💡イメージ

イメージはDockerにおけるコンテナの設計図のようなものです。実際のコンテナはこのイメージから作成されます。例えば「イメージはDockerファイルで構築して使う」と説明されています。

💡Dockerファイル

Dockerファイルはイメージを構築するための手順書です。コマンドを記述することで自動的にイメージが構築されます。例えば「命令が多くなると、容量が増える」という説明があります。

💡デベロッパーエクスペリエンス

Dockerを使うことで、開発者の経験を向上させることを目的としています。例えば「もっと快適に開発するためにDocker環境を構築する」という文脈で登場します。

💡再現性

Dockerは開発環境の再現性を高めることができます。例えば「開発環境の再現性、移植性を向上させようというもの」と説明されています。

💡ロッカーハブ

Dockerイメージを共有・管理するためのサービスです。誰かが公開したイメージを使うこともできます。例えば「ロッカーハブなどで配布されているイメージを自分用にカスタムしたい」という文脈で登場します。

💡レイヤー

Dockerイメージの更新履歴のことです。レイヤーごとに差分が管理されているため、古いレイヤーを再利用できます。例えば「レイヤーとはイメージに対する変更箇所」と定義されています。

💡バインドマウント

ホストとコンテナのディレクトリを接続する機能です。リアルタイムでソースコードを共有できます。例えば「ソースコードをリアルタイムに反映させたい時」に使うと説明されています。

💡VSCode

Visual Studio Codeのことです。拡張機能を使うことでDockerコンテナでの開発ができます。例えば「VSCodeを使ってDocker環境を構築する」方法が紹介されています。

Highlights

ドッカーはアプリケーションと依存関係をコンテナにパッケージ化する技術

コンテナはイメージの実行インスタンス、イメージは設計図のようなもの

ドッカーハブからイメージを共有管理、自由に利用できる

Dockerファイルでカスタムイメージを構築できる

コマンドをまとめると容量を削減できる

コンテナを定義管理できるのがDocker Compose

ボリュームとバインドマウントでデータ共有ができる

WindowsにはデスクトップとWSL上への2通りのインストール方法がある

公式はデスクトップを推奨するがWSL上でも問題なく動く

ドットデブコンテナ内のJSONファイルで環境を用意できる

バインドマウントでホストとコンテナの同期ができる

コンテナ内でラスト開発ができることを確認

デバッグも問題なく動作した

静的解析も正常に機能している

簡単な方法を説明したが、さらに凝ることも可能

Transcripts

play00:00

こんにちはずんだもんなのだこの動画は

play00:03

Windowsでドッカーとvsコードを

play00:05

使ってラストの開発環境を構築するという

play00:08

内容なのだ以前このチャンネルでWSL上

play00:12

のubuntをvsコードで使うという

play00:14

動画を出したけれどこのWSLと

play00:18

ubunt環境で開発をしている人は次の

play00:20

ような不満があるかもしれないのだ一つ目

play00:23

はパッケージ同士が鑑賞や競合したり

play00:26

依存関係がぐちゃぐちゃになったりする

play00:28

ことラストPythonJavaC+など

play00:32

複数の言語やバージョンの開発環境を一つ

play00:35

のOSこの場合Ubuntu上に作ると

play00:38

たまにパッケージが競合したりするのだ

play00:41

例えば最近僕が遭遇したのは

play00:44

ホームブリューとsdk1をインストール

play00:46

した状態でsdk版でJavaを

play00:49

インストールしようと思ったらホーム

play00:52

ブリューに内蔵してるアンチップが動いて

play00:53

しまって変なエラーが出たのだこんなこと

play00:57

は言語やバージョン元に開発環境をで分け

play01:00

てしまえば解決するのだ2つ目は

play01:03

vscodeの拡張機能をオンオフするの

play01:05

が面倒くさいことこれは

play01:08

vscodeの問題なんだけど

play01:10

プロジェクトを作ったら最初に必要な拡張

play01:13

機能を一つ一つオンオフしなければなら

play01:15

ないこれが地味にめんどくさいのだこれは

play01:19

vscodeのデブコンテナという拡張

play01:21

機能で解決できるということでもっと快適

play01:24

に開発するためにロッカー環境を

play01:27

vscodeで構築するよというのがこの

play01:30

動画の趣旨なのだその一例としてラストの

play01:33

環境構築をするのだ

play01:36

知らない人向けに特価について説明するの

play01:40

だ一言で言うとドッカーは

play01:42

アプリケーションとその依存関係を

play01:45

コンテナという軽量な環境にパッケージ化

play01:47

する技術なのだプログラミング言語や

play01:50

フレームワークデータベースなどの開発

play01:53

テスト実行環境とかそれぞれを

play01:57

パッケージングして開発環境の再現性

play02:00

移植性を向上させようというものなのだ

play02:03

このパッケージングしたものをドッカー

play02:05

コンテナというコンテナは特化イメージを

play02:09

実行する実態インスタンスなのだ

play02:11

言い換えると特会イメージはコンテナを

play02:15

作成実行するための設計図のようなものだ

play02:18

から一つのイメージから複数のコンテナを

play02:21

作ることが可能になっているのだ

play02:24

イメージ自体は状態を保存せず変更もでき

play02:27

なくなっているこのイメージを共有する

play02:30

ことで同じ環境が誰でも迅速かつ簡単に

play02:33

構築できるようになるのだドッカーハブと

play02:36

いう

play02:37

イメージを共有

play02:38

管理を行うサービスがあってそこから自由

play02:40

にイメージを利用できるようになっている

play02:42

自分でイメージを作らなくても誰かが作っ

play02:46

たものを使えば楽ができるのだこの

play02:49

ロッカーハブなどで配布されている

play02:51

イメージを自分用にカスタムしたい場合は

play02:53

Dockerファイルを使うのだドッカー

play02:56

ファイルは

play02:57

イメージをビルドするための手順書で

play02:59

テキスト形式で何を実行するとか

play03:01

インストールするとかを書くドッカーは

play03:04

そのロッカーファイルの命令を読み込んで

play03:06

自動的にイメージを構築できるのだ

play03:09

ドッカーファイルから出来上がった

play03:11

イメージの実態はレイヤというものが順番

play03:14

に重なって出来上がっているレイヤとは

play03:17

イメージに対する変更箇所でロッカー

play03:19

ファイル内の1命令につき1つのレイヤー

play03:22

がある

play03:23

イメージの更新や再構築をする場合は以前

play03:26

のDockerファイルから変更された

play03:28

命令のみを変更してそれ以外のすでに

play03:31

ローカルでキャッシュしてあるレイヤーは

play03:32

変更しないこういう構造になっているから

play03:36

イメージコンテナが同じレイヤーを共有し

play03:38

ている場合実際のディスク使用量は

play03:42

イメージとコンテナの合計容量より少なく

play03:44

なっているはずなのだドッカーファイルで

play03:46

の命令が多くなると

play03:48

円安が増えるつまり実用量が増えてしまう

play03:52

だから

play03:53

容量削減のために

play03:55

命令はできるだけまとめようねと言われて

play03:57

いるのだ次にロッカーコンポーズについて

play04:01

ロッカーコンポーズは

play04:03

複数のコンテナを定義

play04:05

管理することができるもの例えばWeb

play04:08

アプリケーションとデータベースフロント

play04:10

エンドとバックエンドなど

play04:12

環境の違う複数のコンテナを一つの

play04:14

アプリケーションとして扱うことができる

play04:16

のだ

play04:18

めっちゃ便利な機能なんだけどこの動画で

play04:20

は扱わないのだあと

play04:23

便利な機能として

play04:24

複数のコンテナにまたがってデータを共有

play04:27

保持するものがあるこれはボリュームと

play04:30

バインドマウントの2つの方法があるのだ

play04:32

ボリュームはトッカーが管理する特別な

play04:36

ディレクトリになっいてコンテナを削除し

play04:38

ても残るのでデータの保持に特化している

play04:40

例えば

play04:42

複数のコンテナがそれぞれ異なるアプリを

play04:44

実行していてそれらのコンテナが生成する

play04:47

ログを一元管理したい時なんかに使うのだ

play04:50

バインドマウントは

play04:52

ディレクトリを指定しドッカーを実行して

play04:54

いるホストマシンのディレクトリと接続し

play04:56

てデータ共有ができる機能ホスト上と

play05:00

コンテナ内で同じソースコードをリアル

play05:02

タイムに反映させたい時とかに使うこの

play05:05

動画でもバインドマウントの機能は使うの

play05:07

だまとめるとDockerは

play05:10

イメージという設計図をコンテナという形

play05:13

に実体化させて使うものコンテナ自体は

play05:17

OSとアプリケーションの実行環境の

play05:19

まとめパッケージ

play05:21

イメージはドッカーハブ状のものを取得し

play05:23

たりDockerファイルで構築して使う

play05:25

以上多分これだけ覚えてくれれば大丈夫な

play05:29

のだ

play05:31

実はWindowsにおいてDocker

play05:33

をインストールする方法は2種類あるのだ

play05:35

一つはドッカーデスクトップfor

play05:38

Windowsという全部リセットを

play05:40

Windowsにインストールする方法

play05:42

もう一つはWSL上のubuntsに

play05:46

ドッカーをインストールする方法なぜ2つ

play05:49

あるかといえば

play05:50

元々ロッカーは

play05:51

Linux環境でした動かないことが根幹

play05:53

にあるのだ

play05:55

WSL上とはいえ

play05:57

Ubuntuでならロッカーは普通に動く

play05:59

Windows

play06:00

環境だとWSL2を使って動くようになっ

play06:03

てるのだドッカーデスクトップfor

play06:06

Windowsを使うのがロッカー公式が

play06:08

推奨してる方法なので通常はこっちでいい

play06:11

インストールも簡単で公式サイトから

play06:14

ダウンロードしてインストールするだけな

play06:17

のだでも僕は後者WSLのubuntsに

play06:20

ドッカーを入れてるのだどっかgitなど

play06:24

のソフトウェアやソースコードなど開発

play06:26

関係のものそれら全てをUbuntuに

play06:29

まとめておいてWindows環境を汚し

play06:31

たくないという理由でそうしてる

play06:35

WSL上のubuntsにロッカーを

play06:37

インストールする方法についてはロッカー

play06:40

公式ドキュメントのUbuntuの

play06:42

インストールを参照してその通りにやれば

play06:44

問題ないのだ

play06:46

Ubuntuでのインストールはドッカー

play06:48

エンジンの

play06:49

ディストリビューション別のインストール

play06:51

Ubuntuでのインストールという

play06:53

ページに書いてあるのだ

play06:55

便利スクリプトを使ったインストールの

play06:57

ところのこの2行を実行するだけで

play07:00

ロッカーのインストールができる実際に

play07:02

やってみるのだ

play07:04

Ubuntuのターミナルを開いて1行

play07:06

ずつ実行する

play07:10

2行目を実行したときロッカー公式は

play07:13

ロッカーデスクトップfor

play07:14

Windowsの利用を推奨してるよと

play07:17

いうメッセージが出るけど無視して待っ

play07:19

てれば勝手にインストールが始まるのだ

play07:23

こんなメッセージが出たらインストール

play07:26

完了

play07:27

次は

play07:28

Linuxインストール後の作業のページ

play07:31

に書いてある作業をするのだ

play07:33

ユーザーをDrグループに追加しますの

play07:36

ところに書いてある一行を実行これで

play07:39

普段を分子にログインしているユーザーで

play07:41

ロッカーコマンドが使えるようになったの

play07:43

play07:45

あとドッカーのサービスを分子の起動後に

play07:48

常駐させるためにシステムDを有効にする

play07:51

必要があるのだ設定の仕方はこの

play07:54

MicrosoftのWSLの

play07:56

ドキュメントに書いてあるSudo

play07:59

limetseWSLcomという

play08:02

コマンドで

play08:03

管理者権限のビムで該当ファイルを開く

play08:05

ドキュメントのコピーをクリックして

play08:07

書き込む内容をコピーエディタのところで

play08:11

右クリックするかコントロールタスVで

play08:13

テストできる記入ができたらコロンwq

play08:17

ビックリマークと入力すれば保存して

play08:20

エディタを抜けられるのだ

play08:22

この後に1回WSLを再起動する必要が

play08:25

あるパワーシェルのターミナルを開いて

play08:28

WSLシャットダウンとコマンドを実行

play08:31

すれば再起動ができるのだ

play08:35

再起動し終わったら再びUbuntuの

play08:38

ターミナルを開いて

play08:40

トッカーランハローワールドコマンドで

play08:42

ドッカーが実行できるか確認する

play08:48

こんなメッセージが表示されればロッカー

play08:51

のインストールが正しくできているのだ

play08:54

これでようやく準備は終わり最後にラスト

play08:58

の開発環境を構築するのだそのためには

play09:01

まず

play09:02

vscodeにこのデブコンテナという

play09:05

拡張機能を入れるついでにこのロッカーの

play09:08

拡張機能も入れておくといいのだこのデブ

play09:11

コンテナの使い方だけれどまず何でもいい

play09:14

から開発プロジェクトを開いて欲しいのだ

play09:16

ここではプロジェクトサンプル

play09:20

ディレクトリを作成したのだこのサンプル

play09:22

ディレクトリ内にさらにドットデブ

play09:25

コンテナディレクトリを作成この中にデブ

play09:28

コンテナ.JSONファイルを作成する

play09:30

デブコンテナ拡張機能はプロジェクト

play09:34

ディレクトリのルートにあるドットデブ

play09:36

コンテナデブコンテナドットジェイソンを

play09:39

監視しているからこれらは名前を変えちゃ

play09:41

ダメこのジェイソンファイルにいろいろと

play09:44

メタデータを書き込むことで簡単に

play09:46

ロッカーコンテナを含む開発環境が用意

play09:48

できるのだ書き方はデベロップメント

play09:51

コンテナというサイトに書いてある

play09:54

A5サイトしかないけどGoogle翻訳

play09:56

にかけて頑張って読んで欲しいのだ僕が

play09:59

書いたラスト開発環境用のジェイソン

play10:02

ファイルはこんな感じ

play10:04

軽く説明していくのだネームはコンテナの

play10:07

識別名

play10:08

イメージは使用するイメージ長い名前の

play10:11

イメージなんだけどこれは

play10:12

Microsoftが用意しているもので

play10:15

ドッカーハブにある公式のラストイメージ

play10:17

play10:18

vscodeのデブコンテナ用に設定を

play10:20

付け足したいイメージなのだ

play10:22

Microsoftが用意しているデブ

play10:25

コンテナーをドッカーイメージの変更点を

play10:27

一覧にするとこんな感じgitは最新版に

play10:31

なっててGシェルが追加インストール済み

play10:34

vscodeからの操作用のユーザーを

play10:36

追加

play10:37

ターゲット配下は監視しないような設定を

play10:40

追加この設定はラストではおなじみ

play10:43

頻繁に変更されるビルド結果を見ないため

play10:47

拡張機能はラストの開発で使う定番のもの

play10:49

が5つバインドマウントも設定されてて

play10:52

ドットデブコンテナがあるディレクトリ

play10:55

つまりホスト側のプロジェクトルート配下

play10:58

がコンテナ内のワークスペース配下と同期

play11:00

してるセッティングスはコンテナ内で有効

play11:04

になるvsコードの設定

play11:06

エクステンションズのところはさっき話し

play11:08

た標準で入ってる5つの他に欲しい拡張

play11:11

機能を設定すると良いのだこのジェイソン

play11:14

ファイルを用意できたらあとはビルドして

play11:16

コンテナを開くだけなのだ

play11:20

まずプロジェクトルート僕の場合サンプル

play11:23

フォルダーでvscodeを開くのだそう

play11:26

したら右下にオープンインコンテナ

play11:29

問い合わせボタンのある通知が出てくると

play11:31

思うこのボタンを押せば初回はビルドして

play11:34

からコンテナを開いてくれるのだビルドは

play11:37

長いので倍速で飛ばす

play11:40

スタートラインコンテナのメッセージが出

play11:42

たら完了なのだバッシュを開いてラストの

play11:45

管理ツールカーゴが使えるか確認

play11:48

きっとも確認大丈夫そうなのだ試しに

play11:53

川越ユニットでラストのプロジェクトを

play11:55

作るのだ

play11:57

ubunts側のプロジェクトルートを見

play11:59

てバインドマウントの確認これもちゃんと

play12:02

できてるのだ

play12:03

ラストを実行できるかも確認メインの上に

play12:07

出るランをクリックこれもクリア次に

play12:11

デバッグをクリックしてみる左にある実行

play12:15

とデバッグボタンをクリックすると

play12:17

デバッグするにはローンチJSON

play12:19

ファイルが必要だけどないよトイエラーが

play12:22

出るOKを押すと次にローンチジェイソン

play12:25

ファイルを生成していいと聞かれるので

play12:27

イエスをクリックこれでデバッグができる

play12:30

ようになったので

play12:31

適当にブレイクポイントをつけてデバッグ

play12:33

するデバッグも動いたのでクリア性的

play12:38

解析のクリックが動くかも確認メッセージ

play12:40

にちゃんとクリスピーと書いてあるので

play12:42

大丈夫そう

play12:44

以上でちゃんとラスト開発環境のロッカー

play12:47

コンテナの用意ができたのだ今回は一番

play12:51

簡単なデブコンテナとマイクロソフトが

play12:53

用意したドッカーイメージを使った方法を

play12:55

紹介したけれどもう少し凝ったことを

play12:58

しようとするとドッカーファイルを書い

play13:00

たりと面倒が増えてしまうのだ

play13:03

需要がありそうならそのあたりも動画に

play13:05

しようと思うご視聴ありがとうございまし

play13:07

Rate This

5.0 / 5 (0 votes)

Do you need a summary in English?