marp |
---|
true |
2023/01/20
行動規範をお守りください。
https://www.contributor-covenant.org/version/2/0/code_of_conduct/
様々なレベルの方が参加されます!
お互いの参加者を尊重し合って、ハンズオンを楽しみましょう!
内容を実施できなくても、基本的な質問をしても OK!
YouTube コメントもしくは、GitHub Discussion で!
GitHub Discussion ならスクリーンショットが貼れるよ。
参加者同士で回答しても OK !
GitHub Discussion で 👍 を押して、反応してみてください!
リポジトリにアクセス
https://github.com/vscodejp/codespaces-handson
Code を押して、Code ボタン → Codespaces タブ → オプションボタン → New with options ...
支払い設定が所属企業ではなく、個人になっていることを確認しよう
オプションで 4-core に変更
Web 版の起動が始まるけれど、ローカルの VS Code からつなごう!
VS Code を起動して、GitHub Codespaces 拡張機能をインストールしていなければインストール。
アクティビティーバーのリモートエクスプローラー(図の 1)をクリック。 上部のプルダウン(図の 2)から「GitHub Codespaces」を選択。 もし GitHub にサインインしていない場合、図の 3 が表示されるのでクリックして認証を進めよう。
vscodejp/codespaces-handson の表示を確認して、接続ボタン(コンセントマーク)をクリック。
方法 1。VS Code 中のリモートエクスプローラーから、削除したい Codespaces を右クリックして、Delete を選択。
方法 2。GitHub のリポジトリページから。
方法 3。GitHub のヘッダーから、Codespaces インスタンスの一覧ページに飛べます。
起動するまで別のお話を
☕☕☕
VS Code の UI(Client)とコア機能(Server)を分離する「リモート開発機能」のうち、 Docker コンテナ内で VS Code Server を動かす「リモートコンテナ開発機能」で、 クラウド上のインスタンス上でコンテナを動かせるサービス。
手元の UI のマシンは非力でも、 クラウド上の潤沢なリソースを従量課金で利用できる。
Docker コンテナ上で VS Code Server を動かして開発する機能。
利用するコンテナを DevContainer と呼び、 開発環境に必要なツールを全てそのコンテナに格納する。
複数プロジェクトの作業している時に、 それぞれのプロジェクトのツールがそれぞれのコンテナの中に収まるので、 ツールが競合したりせず、クリーンに使える。
- DevContainer に全てのツールを入れる必要がある
- 手順書ではなく、全て設定とスクリプトで書く必要がある
- MySQL も起動する
- features で docker などツールをインストールする
- 必要なツールを Dockerfile でインストールする
- コンテナ起動後の初期化スクリプトを実行する
- 拡張機能をインストールする
.devcontainer/docker-compose.yml でコンテナを定義 MySQL コンテナが横で起動している
// .devcontainer/devcontainer.json 抜粋
{
"service": "app",
"dockerComposeFile": "./docker-compose.yml"
}
# .devcontainer/docker-compose.yml 抜粋
services:
app:
build:
dockerfile: Dockerfile
mysql:
image: mysql/mysql-server:8.0.27
features で追加ツールをインストール。
feature のリスト → https://containers.dev/features
// .devcontainer/devcontainer.json 抜粋
{
"features": {
// 追加 feature を指定
// docker in docker
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
// Python のパッケージマーネージャ Poetry
"ghcr.io/devcontainers-contrib/features/poetry:1": {}
}
}
docker-compose.yml からビルドする Dockerfile を指定している。 features だけでは不足するツールを追加している。 ストレージ費用が無料の Universal Container をベースにする。
# .devcontainer/Dockerfile
# Universal Container image
FROM mcr.microsoft.com/devcontainers/universal:2-linux
# 追加でインストール
RUN apt-get update && apt-get install -y mysql-client-8.0
コンテナ起動後の初期化スクリプト(initialize.py)を実行
- Python、Nodejs のライブラリのインストール
- DB に初期データを投入
// .devcontainer/devcontainer.json 抜粋
{
"postCreateCommand": "./initialize.py"
}
拡張機能を複数インストール
// .devcontainer/devcontainer.json 抜粋
{
"extensions": [
"cweijan.vscode-mysql-client2",
"ms-python.python",
"bungcip.better-toml",
"humao.rest-client",
"EditorConfig.EditorConfig",
"spmeesseman.vscode-taskexplorer"
]
}
仕様
- host 名: mysql
- ユーザ名: root
- パスワード: なし
- データベース名: main
- テーブル名: tasks
アクティビティーバーから Database 選んで設定を作成
MySQL の設定をして、Connect を押して接続を確認しよう
テーブルの中身を確認しよう。結構使えるツールなので、SQL を変更したり、レコード追加したりしてみよう!
初期化スクリプトを再実行しよう。アクティビティーバーからタスクエクエスプローラーを開いて、vscode のタスクから initialize db を実行しよう。
自動インストールに失敗しているよ。F1 → Developer: Reload Window を実行する。
次の起動で、このワークスペースには水晶の拡張機能があります、というダイアログが右下に表示されるので、インストールを押す。
出ない場合、.vscode/extensions.json にある拡張機能を拡張機能タブから検索してインストール。
Python の REST API の Web Server が組まれているよ。 flask という WebServer のミドルウエアを利用しているよ。
REST API は 3 つ実装されているよ。
- 未完了のタスクの一覧を表示する
GET /api/tasks
- タスクを登録する
POST /api/tasks
- タスクを完了にする
POST /api/tasks/<タスクのID>/done
この Python をデバッグ実行しよう! .vscode/launch.json にこのプログラムをデバッグ実行する設定が書かれているよ。 実行してみよう。
デバッグ実行に成功している場合、デバッグ UI が表示されるよ。
REST API をテストする設定がつくってあるよ。Send Request ボタンを押してリクエストしてみよう。 タスクの登録や完了もテストしてみよう。
次のページに手順があるよ。
- api.py の 56 行目の赤点の位置をクリックして、ブレークポイント追加
- REST Client から GET /api/tasks のリクエストを実行
- ブレークポイントで停止されたら、record_tuple の中身を確認
- F5 を押して進めよう。3 レコードあれば、3 回止まるよ。
- flask サーバは /api/ 以外にリクエストがあると、public/ にあるファイルを表示するよ。
- HTML: public/index.html
- public/js/main.js を読み込んむようになっているよ(まだないよ)
- frontend/main.ts API にアクセスして、UI を更新するプログラム
- 画面表示時に fetchTasks() メソッドが呼ばれる
- GET /api/tasks にアクセスしてタスクの一覧を取得
- 取得した内容で HTML を更新
- Add を押すと、createTask() メソッドが呼ばれる
- 画面からタスクの入力を読み込み
- POST /api/tasks にアクセス
- fetchTasks() を呼んで、タスク一覧を再更新
- Done を押すと、completeTask() メソッドが呼ばれる
- POST /api/tasks/(id)/done にアクセス
- fetchTasks() を呼んで、タスク一覧を再更新
TypeScript を JavaScript にコンパイルするには以下のコマンドを実行。
npx tsc -w
すると、frontend/main.ts から public/js/main.js が作られるよ。
これが VS Code のタスク設定で組まれているよ。
実行するとくるくるしたままになるよ。
デバッグ設定が .vscode/launch.json に組まれているよ。 「Launch Chrome」を実行しよう。
// .vscode/launch.json 抜粋
{
"configurations": [
{
// Chrome でのフロントエンドのデバッグ
"name": "Launch Chrome",
"request": "launch",
"type": "chrome",
"url": "http://localhost:50120",
"webRoot": "${workspaceFolder}/public"
}
]
}
下部パネルのポートタブから、50120 ポートが、ローカルポートの何番になっているか確認しよう。
Python Server を起動してみよう参照してね。
frontend/main.ts の 49 行目にブレークポイントを設定
注目するところ
- あくまで JavaScript を実行しているけれど、TypeScript でデバッグできるよ
- public/js/main.js.map ファイルに対応関係が書かれているよ
- launch.json の
フロントエンドとサーバサイドを連携してデバッグしてみよう。
- 完了したタスクを表示するボタンを作ってみよう (2h くらい)
- 入寮項目に締め切りを追加して、締切順に表示できるようにしてみよう (2h くらい)
方法 1。VS Code 中のリモートエクスプローラーから、削除したい Codespaces を右クリックして、Delete を選択。
方法 3。GitHub のヘッダーから、Codespaces インスタンスの一覧ページに飛べます。