3
2

【Git】モノレポ時のDev Containerにおけるバージョン管理

Last updated at Posted at 2024-02-02

はじめに

 サービス開発、特にAPIをコンパイル言語で構築する場合、Dev Containersを用いると便利である。しかし、モノレポ構造でサービスを開発している場合、.gitリポジトリが親ディレクトリに存在することでVSCodeがリポジトリを認識しない。gitコマンドを利用する際にVSCodeをLocalでReOpenし対応可能だが、現実的でない。
 今回はモノレポ構造の開発環境でDev Containerを用いた際にGitでバージョン管理を行う方法についてまとめる。

ディレクトリ構造

 開発を行うにあたり、ディレクトリ構造の抜粋を以下に示す。

root/
 ├ .git
 ├ .devcontainer/
 │ └ devcontainer.json
 ├ backend/
 │ └ build
 │   └ package
 │     └ Dockerfile
 └ docker-compose.yml

docker-compose.yml

 利用するdocker-compose.ymlのサンプルを以下に示す。

docker-compose.yml
version: "3.6"

services:
  api:
    build:
      context: ./backend/build/package
      dockerfile: Dockerfile
    ports:
      - 8080:8080
    volumes:
      - .:/go/src
    working_dir: /go/src/backend
    tty: true

 上記したdocker-compose.ymlはプロジェクトのルートディレクトリをコンテナにマウントしている。Dev Containersのリファレンスより、プロジェクトのルートディレクトリをマウントし、WorkingDirを指定することでGit管理が可能になる。

devcontainer.json

 次に、Dev Containersのサンプル設定ファイルを以下に示す。

devcontainer.json
{
  "dockerComposeFile": ["../docker-compose.yml"],
  "service": "api",
  "workspaceFolder": "/go/src/backend",
  "postAttachCommand": "git config --global --add safe.directory /go/src",
  "customizations": {
    "vscode": {
      "settings": {
        "git.openRepositoryInParentFolders": "always"
      },
      "extensions": [
        "golang.Go",
      ]
    }
  }
}

 上記のdevcontainer.jsonはdocker-compose.ymlを参照して設定を行っている。ここで重要になってくるのがpostAttachCommandgit.openRepositoryInParentFoldersである。
 まず、postAttachCommandにはgit config --global --add safe.directory /go/srcコマンドを指定し、プロジェクトのルートディレクトリをsafe.directoryに指定する。この設定を行わない場合Unsafe Repositoriesとなり自動でリポジトリを認識しない。
 次にgit.openRepositoryInParentFoldersだが、その名の通り親ディレクトリの.gitディレクトリを認識させるための項目である。今回はalwaysにし、コンテナ内でVSCodeを開く際に毎回認識するよう設定している。

まとめ

 本記事ではモノレポ構造のサービス開発において、Dev Containerを用いる際にGit管理を行う方法をまとめた。詳しいdocker-compose.ymlファイルの記載方法やDev Containersの設定については公式サイトを確認してほしい。
 では、良いエンジニアライフを。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2