🐳
GitHub Codespacesのススメ (講師向け)
講師向けTL;DR
- 本記事はGithubCodespaceの使用に必要なdevcontainer.jsonの基本的な書き方をまとめました。
- 決めるのは3つだけ(OS base image/feature/その他スクリプトの実行タイミング)。
- まずは下の完成品をコピペ → Codespaces 作成 →
sui --version確認。 - 備考: 本テンプレは sui_codespace_starterの
.devcontainerを簡約・注釈化したものです。
完成品:最小テンプレ(コピペでOK)
.devcontainer/devcontainer.json
{
// Sui dev container (no Prebuild). Installs via suiup.
// 名前はUI表示やログ識別に使われます
"name": "Sui Starter",
// 言語入りの公式イメージ(Node 22, Debian bookworm)。OS/言語はピン留めで再現性担保
"image": "mcr.microsoft.com/devcontainers/typescript-node:22-bookworm",
// よく使う共通ツールは Features で追加(イメージに含まれないものだけを積むのが基本)
"features": {
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {}
},
"customizations": {
"vscode": {
// VScode拡張機能の`識別子`を指定する
"extensions": [
"Mysten.move"
]
}
},
// 初回作成時: suiup + Sui CLI(testnet) を導入
// 重い処理は onCreateCommand に寄せる(Create フェーズで1回だけ実行)
// featuresに無いものはスクリプト実行で導入する
"onCreateCommand": "bash .devcontainer/setup.sh",
// 起動毎: testnet を最新化(失敗は許容)。失敗許容はスクリプト側で || true などで処理
"postStartCommand": "bash .devcontainer/update-on-start.sh",
// ~/.local/bin を先頭に追加して優先解決
// (注: 下記の例は末尾追加。先頭にするには
// "${containerEnv:HOME}/.local/bin:${containerEnv:PATH}" を使用)
"remoteEnv": {
"PATH": "${containerEnv:PATH}:${containerEnv:HOME}/.local/bin"
},
// フロントエンド開発の目印ポート(任意)
"forwardPorts": [3000],
"portsAttributes": {
"3000": { "label": "Web (Next.js)" }
}
}
image
- ミニマル:
mcr.microsoft.com/devcontainers/base:ubuntuなど - すぐ実行:
mcr.microsoft.com/devcontainers/typescript-node:22-bookwormなど言語入り - 一覧/タグの確認先: devcontainers/images
feature
- 概要:
featuresは共通ツールを追加する拡張。例: Git/GitHub CLI、Docker CLI など。 - 本テンプレ:
git:1とgithub-cli:1を採用(言語入りイメージなので Node の追加は不要)。 - 適用の指針:
- 言語は言語入りイメージを優先。ミニマル
base:*を選ぶときのみ言語 Feature を追加。 - Alpine 系は非対応の Feature があるため Debian/Ubuntu 系を推奨。
- 言語は言語入りイメージを優先。ミニマル
- 一覧/使い方の確認先: devcontainers/features または 公式カタログ
よく使うフック
-
onCreateCommand- 初回作成時に実行。重い初期セットアップ向け(CLI/SDKの導入、キャッシュ作成など)。
-
postCreateCommand- 作成直後に実行。ワークスペースを前提とした処理(例:
npm ci, DB 初期化)。onCreateCommandと役割が重ならないよう整理。
- 作成直後に実行。ワークスペースを前提とした処理(例:
-
postStartCommand- 起動のたびに実行。軽い更新や同期(例: CLI の update)。失敗は許容設計に。
-
postAttachCommand- VS Code がアタッチしたときに実行。UI 連動の準備(タスク起動、メッセージ表示など)。
-
updateContentCommand-
git pullなどコンテンツ更新時に実行。コード生成や依存再取得に便利。
-
詳細はJSON リファレンスを参照。
関連リンク(公式のみ)
- Introduction to dev containers(配置場所・基本)GitHub Docs
- Dev Container metadata reference devcontainers.github.io
- Developing inside a Container(VS Code)Visual Studio Code
- Codespaces Logs(Creation Log の見方)GitHub Docs
- Dev Container Features(カタログ)containers.dev
- Devcontainers 公式イメージ(一覧/タグ/README)GitHub
- Dev Container Features(GitHub リポジトリ)GitHub
Discussion