はじめに
- VSCodeのremote-containersが開発環境構築時にすごく便利だと感じたので、適当な10のプログラミング言語でHelloWorldやってみます
- Rust, Go, Python, C++, C#, Ruby, TypeScript, Java, Dart, プロデル!
- なるべくシンプルに、汎用的に
- まだ全てにおいてはデバッグ実行できるところまで記述していません(手抜き。。)
準備
- 前提:VSCode 1.51.1
- 前提:Windows10 home(Insider Previewバージョン)の環境で試していますが、Macでもほぼ変わらないと思います
- VSCodeをインストールする(方法は割愛)
- Extension:Remote-Containerをインストールする
- Docker環境を用意する
- Windowsなら、Docker Desktop for Windowsを使えるようにします。
- 最近ではWindows10 homeでもDocker for Windowsが使えます、Insider Previewも不要
- 参考:https://qiita.com/poramal/items/11912b5533ec8e7dbaac
- こちらの記事はWindows10 proでやっていますが、homeでもできるはずです
- Macなら、Docker Desktop for Macのインストールは簡単です。
- Windowsなら、Docker Desktop for Windowsを使えるようにします。
①Rust
- 1.まず適当なworkディレクトリを作ってVSCodeで開きます
- この時点でディレクトリ内は空でいいです
- 2.「Command Palette」を開いて、
Remote-Containers:Add Development Container Configuration Files...
を実行 - 3.コンテナを生成して、VSCodeをコンテナ接続に切り替えます
- 4.
helloworld.rs
を作成して、コーディングします。
fn main(){
println!("hello world!");
}
- 5.vscode内のterminalでビルドします、バイナリが生成されます
$ rustc helloworld.rs
- 6.実行します
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/helloworld",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
│ helloworld
│ helloworld.rs
│
├─.devcontainer
│ devcontainer.json
│ Dockerfile
│
└─.vscode
launch.json
- 8.実務的には、
- さすがにビルド・実行を一発でやりたいです
- こちらをDLしてきてベースにするのが実用的です、詳細は割愛、他の言語も同様にgithubから雛形ひっぱってくるのが賢明
②Go
- 1.前項参照
- 2.ほぼ前項と同じ
-
Go
→1.15
、選択していく
-
- 3.前項参照
- 4.
helloworld.go
を作成して、コーディングします。
package main
import "fmt"
func main() {
fmt.Printf("hello world!\n")
}
- 5.vscode内のterminalで実行します
$ go run helloworld.go
- 6.とりあえずここまでですが、余裕があればvscode内から実行&デバッグできるところまで、何れは記述しておきます。
③Python
- 1.前項参照
- 2.ほぼ前項と同じ
-
Python 3
→3.9
、選択していく
-
- 3.前項参照
- 4.
helloworld.py
を作成して、コーディングします。
print("hello world!")
- 5.vscode内のterminalで実行します
$ python helloworld.py
- 6.こちらも、とりあえずここまでですが、余裕があればvscode内から実行&デバッグできるところまで、何れは記述しておきます。
④C++
- 1.前項参照
- 2.ほぼ前項と同じ
-
C++
→Ubuntu20.04
、選択していく
-
- 3.前項参照
- 4.
helloworld.cpp
を作成して、コーディングします。
#include <stdio.h>
int main() {
printf("hello world");
return 0;
}
-
5.ビルド&実行します
-
6.ディレクトリ構造です、余裕があればcmake対応についても今後記述しておきます
│ helloworld
│ helloworld.cpp
│
├─.devcontainer
│ devcontainer.json
│ Dockerfile
│
└─.vscode
launch.json
tasks.json
⑤C#'
- 1.前項参照
- 2.ほぼ前項と同じ
-
C#(.NET Core)
→3.1(default)
、選択していく
-
- 3.前項参照
- 4.Terminalからプロジェクトを生成します。
$ dotnet new console
│ Program.cs
│ test-devcontainer-csharp-helloworld.csproj
│
├─.devcontainer
│ │ devcontainer.json
│ │ Dockerfile
│ │
│ └─library-scripts
│ azcli-debian.sh
│
├─.vscode
│ launch.json
│ tasks.json
⑥Ruby
- 1.前項参照
- 2.ほぼ前項と同じ
-
Ruby
→2.7
、選択していく
-
- 3.前項参照
- 4.
helloworld.rb
を作成して、コーディングします。
print "hello world!\n"
- 5.vscode内のterminalで実行します
$ ruby helloworld.rb
- 6.ディレクトリ構造です、余裕があればvscode内から実行&デバッグできるところまで、何れは記述しておきます。
│ helloworld.rb
│
└─.devcontainer
devcontainer.json
Dockerfile
⑦TypeScript
- 1.前項参照
- 2.ほぼ前項と同じ
-
Node.js & TypeScript
→14
、選択していく
-
- 3.前項参照
- 4.
helloworld.rb
を作成して、コーディングします。
console.log("hello world!");
- 5.vscode内のterminalで実行します
$ tsc helloworld.cs
$ node helloworld.js
- 6.ディレクトリ構造です、余裕があればvscode内から実行&デバッグできるところまで、何れは記述しておきます。
│ helloworld.js
│ helloworld.ts
│
└─.devcontainer
devcontainer.json
Dockerfile
⑧Java
- 1.前項参照
- 2.ほぼ前項と同じ
-
Java
→15
、選択していく
-
- 3.前項参照
- 4.
helloworld.java
を作成して、コーディングします。
public class helloworld{
public static void main(String[] args){
System.out.println("hello world!!");
}
}
- 5.vscode内のterminalで実行します
$ javac helloworld.java
$ java helloworld
- 6.ディレクトリ構造です、余裕があればvscode内から実行&デバッグできるところまで、何れは記述しておきます。
│ helloworld.class
│ helloworld.java
│
└─.devcontainer
devcontainer.json
Dockerfile
⑨Dart
- 1.前項参照
- 2.ほぼ前項と同じ
-
Dart
を選択していく
-
- 3.前項参照
- 4.
helloworld.dart
を作成して、コーディングします。
void main() {
print('hello world!');
}
- 5.vscode内のterminalで実行します
$ dart helloworld.dart
- 6.ディレクトリ構造です、余裕があればvscode内から実行&デバッグできるところまで、何れは記述しておきます。
│ helloworld.dart
│
└─.devcontainer
│ devcontainer.json
│ Dockerfile
│
└─library-scripts
common-debian.sh
⑩プロデル(笑)
- 1.前項参照
- 2.下記のディレクトリ、ファイルを手動で作成
└─.devcontainer
devcontainer.json
Dockerfile
devconainer.json
{
"name": "Produire",
"build": {
"dockerfile": "Dockerfile",
"context": "..",
},
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
},
"extensions": [
"utopiat.produirelang"
],
}
Dockerfile
FROM mono
RUN \
apt-get update && \
apt-get install unzip wget -y && \
rm -rf /var/lib/apt/lists/*
RUN wget -O produire.zip https://rdr.utopiat.net/files/mono//produire-mono-1.6.965.zip \
&& unzip 'produire.zip' -d /usr/bin
- 3.前項参照
- 4.
helloworld.rdr
を作成して、コーディングします。
「hello world!」を表示する
- 5.vscode内のterminalで実行します
$ mono /usr/bin/produire-mono/pconsole.exe helloworld.rdr
- 6.ディレクトリ構造です、業務用に使うことはなさそうですが教育用にいかがでしょうか、ただ、これに関してはパッケージマネージャとかもなく、ローカル環境にいろいろ入れ込むわけではないので、コンテナ上に構築する意味は薄そうです。
│ helloworld.rdr
│
└─.devcontainer
devcontainer.json
Dockerfile