相关文章推荐
KINTO Tech Blog

Development

[続!Dev Container] GitHub Codespacesでクラウド開発環境を構築

Torii⛩
Torii⛩
Cover Image for [続!Dev Container] GitHub Codespacesでクラウド開発環境を構築

[1] [2] [3] で複数のサービスが利用する決済プラットフォームの開発チームに所属している鳥居です。

前回の記事 [4] では、Visual Studio Code(以下 VS Code)の Dev Container を活用し、快適な開発環境を構築する方法を紹介しました。Dev Container は非常に便利である一方、ローカルマシンのリソースを利用するため、パフォーマンスがマシンスペックに依存するという課題がありました。特に Mac での使用では、ファイルシステム間の相互作用が原因で遅延が生じる場合がありました。

今回の記事では、私たちのチームでも実際に活用している Dev Container による開発環境構築をさらに進化させた GitHub Codespaces について解説します。GitHub Codespaces を利用することで、クラウドベースの開発環境を手軽かつ効率的に構築する方法をご紹介します。

また、実際の開発で活用している設定ファイルのサンプルも紹介します。設定ファイルのサンプルは、Dev Container で MySQL や LocalStack を利用する方法や、ローカル環境と Dev Container の開発環境の共存方法など、実際の開発で活用しているものから抜粋したものです。

GitHub Codespaces は、クラウド上で完全な開発環境を提供するサービスで、VS Code、VS Code Web、IntelliJ、JupyterLab などの主要な開発ツールをサポートしています。これらのツールは Windows、Mac、そして Linux のすべての主要なプラットフォームで使用することができます。これにより、開発者は自分の好みに応じた環境で開発作業を行うことができます。さらに、VS Code Web を使用する場合は、ブラウザがある場所ならどこでも開発環境にアクセスし、ローカルマシンとクラウド間での作業をシームレスに行うことが可能です。

設定ファイルのサンプル を参考にしてください)。

設定ファイルをリポジトリにコミットし、プッシュします。

GitHub リポジトリにアクセスし、リポジトリページの右上にある緑色の "Code" ボタンをクリックします。

ドロップダウンメニューから "Codespaces"タブ を選択します。

新しい Codespace を作成するか、既存の Codespace を選択して開くことができます。
今回は初回なので、"Create new codespace on main"を選択します。

オプションとして、リモートマシンのスペックやリージョンを指定できます。
三点リーダーから "New with options..." を選択します。

Codespaces の起動画面に遷移し、準備が整うまで数分かかります。準備が整ったら、ブラウザ上で Visual Studio Code のインターフェイスが表示されます。

これで、Codespaces が起動し、リポジトリのコードを編集できるようになりました。また、ターミナルも利用可能で、開発環境にインストールされているツールを使用できます。

[5] は、JetBrains Gateway Codespaces 用の設定項目です。JetBrains Gateway Codespaces は、JetBrains IDE で GitHub Codespaces を利用するための機能です。この設定を追加することで、JetBrains IDE から GitHub Codespaces へのアクセスが可能になります。

"name" : "sample-app" , "build" : { "dockerfile" : "Dockerfile" "service" : "devcontainer" , "workspaceFolder" : "/workspaces/${localWorkspaceFolderBasename}" , "postCreateCommand" : "sh .devcontainer/post-create.sh" , "features" : { "ghcr.io/devcontainers/features/go:1" : { "version" : "latest" // ホストマシンのDockerを利用するための設定 "docker-from-docker" : { "version" : "latest" // Jetbrains Gateway Codespaces用 "ghcr.io/devcontainers/features/sshd:1" : { "version" : "latest" "settings" : { "editor.guides.bracketPairs" : true , "editor.stickyScroll.enabled" : true , "editor.stickyScroll.maxLineCount" : 5 , "workbench.colorCustomizations" : { "editorStickyScroll.background" : "#00708D" , "editorStickyScrollHover.background" : "#59A2B5" "editor.formatOnSave" : true , "[go]" : { "editor.formatOnSave" : true , "editor.defaultFormatter" : "golang.go" "go.formatTool" : "gofmt" "extensions" : [ "golang.go" , "GitHub.vscode-pull-request-github" , "GitHub.copilot"

[6] localstack [7] などのアプリケーションに必要なサービスや環境変数、ボリュームの設定を行っています。これにより、アプリケーションを構成するコンテナを一括で構築・実行することができます。

version: "3"
services:
    app:
        build:
            context: .
            dockerfile: Dockerfile
        volumes:
            - .:/workspace
        ports:
            - "3000:3000"
    mysql:
        container_name: mysql
        build: ./docker/mysql
        environment:
            MYSQL_DATABASE: sample
            MYSQL_USER: developer
            MYSQL_PASSWORD: password
            MYSQL_ROOT_PASSWORD: password
        volumes:
            - ./docker/mysql/sql:/docker-entrypoint-initdb.d
        ports:
            - 3320:3306
    localstack:
        image: localstack/localstack:latest
        environment:
            - HOSTNAME=localstack
            - SERVICES=s3
            - DEFAULT_REGION=ap-northeast-1
            - DATA_DIR=/tmp/localstack/data
        volumes:
            - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
            - "/var/run/docker.sock:/var/run/docker.sock"
        ports:
            - 4777:4566

こちら からインストールすることもできます。

GitHub にログインする

VSCode で「GitHub CodeSpaces」拡張機能を起動し、GitHub アカウントでサインインします。

[8] JetBrains Gateway で CodeSpaces を起動する手順は以下のとおりです。
なお、先程の例に示したように、JetBrains Gateway で CodeSpaces を利用するためには、 .devcontainer.json に以下の設定を追加する必要があります。

"features" : { "ghcr.io/devcontainers/features/sshd:1" : { "version" : "latest"

JetBrains Gateway のインストールページ にアクセスし、インストーラをダウンロードしてインストールします。
または、 JetBrains Toolbox からインストールすることもできます。

GitHub CLI をインストールする
JetBrains Gateway は、GitHub CLI を利用して GitHub にログインします。
GitHub CLI をインストールするには、 こちら の手順に従ってください。
Windows を利用している場合は、 こちら のインストーラを利用することもできます。

GitHub にログインする

JetBrains Gateway を起動し、 GitHub Codespace をインストールします。

次に、メニューの GitHub Codespaces > Sign in to GitHub をクリックし、 GitHub にログインします。

ワンタイムコードと認証ページへのリンクが表示されます。リンクをクリックし、GitHub にログインします。

ワンタイムコードを入力し、[Continue] ボタンをクリックします。
次に、 [Authorize github] ボタンをクリックします。

  • CodeSpaces を起動する
  • Your Recent Codespaces から起動したい Codespace を選択し、[Open] ボタンをクリックします。
    もし、 Codespaces を作成していない場合は Click here から Codespaces の作成画面を開くことができます。

  • [9] [10]
  • JetBrains Gateway はまだ Beta で不安定な場合がある:この機能がまだ開発段階にあるため、一部の機能が期待通りに動作しない可能性がある
  • インターネット接続が必須:オフラインでの作業ができない
  • クラウド上で実行されるため、パフォーマンスやセキュリティへの懸念がある場合もある:ネットワーク遅延やデータ保護などの問題が生じる可能性がある
  • リポジトリ管理されていないファイルや MySQL などに投入したデータは Codespaces が削除されると消えてしまう:永続的なデータストレージが必要な場合は、適切なバックアップ戦略が必要
  • Code Tour 拡張機能と組み合わせて、新規メンバーのオンボーディングや、ワークショップ形式の勉強会にも活用しています。
    ワークショップでは、環境構築手順の手間を省いてすぐに本題の作業に取り組むことが出来るので、Codespaces の利便性を大いに感じています。

    また、Google Cloud からも Cloud Workstations [11] がリリースされました。興味がありましたらぜひ触ってみてください。

    GitHub Codespaces は、クラウドベースの開発環境を手軽に構築するための強力なツールです。Dev Container を利用することで、チーム全体での環境構築を効率化することができます。GitHub Codespaces を利用することで、さらに手軽に開発環境の構築を行うことができ、チームの生産性の向上につながります。ぜひ、GitHub Codespaces を活用してみてください。

  • 共通サービス開発グループメンバーによる投稿 1
    [ グローバル展開も視野に入れた決済プラットフォームにドメイン駆動設計(DDD)を取り入れた ] ↩︎

  • 共通サービス開発グループメンバーによる投稿 2
    [ 入社 1 年未満メンバーだけのチームによる新システム開発をリモートモブプログラミングで成功させた話 ] ↩︎

  • 共通サービス開発グループメンバーによる投稿 3
    [ JIRA と GitHub Actions を活用した複数環境へのデプロイトレーサビリティ向上の取り組み ] ↩︎

  • 前回の記事
    [ VSCode Dev Container を使った開発環境構築 ] ↩︎

  • devcontainers/features sshd について
    [ devcontainers/features sshd ] ↩︎

  • docker-compose での MySQL 設定方法
    [ MySQL と Docker Compose を使ってマルチコンテナー アプリを作成する ] ↩︎

  • docker-compose での localstack 設定方法
    [ GitHub localstack ] ↩︎

  • JetBrains IDE でのリモート開
    [ JetBrains IDE でのリモート開発 ] ↩︎

  • GitHub Codespaces の請求について
    [ GitHub Codespaces の請求について ] ↩︎

  • Default idle timeout の設定を短くすることで、無駄なコストを抑えることができます。
    [ Codespaces の設定 ] ↩︎

  • Google Cloud - Cloud Workstations

  •  
    推荐文章