業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【Hakkyの社内Wiki】Strapi
AI

執筆者:Handbook編集部

Devcontainerを用いたデバッグ環境の構築方法

はじめに

本記事では、VS CodeのDevcontainer機能を活用して効率的な開発環境を構築する方法を解説します。Devcontainerは、プロジェクトに必要なツールや設定をあらかじめ定義することで、開発環境の一貫性を保ち、セットアップ作業を簡素化します。

ここでは、Dockerfileやdevcontainer.jsonの設定手順を詳しく説明します。特に、相対インポートの問題解決やデバッグのベストプラクティスにも触れ、プロジェクトにおける生産性向上を目指します。ぜひ参考にして、開発環境の最適化に役立ててください。

Devcontainerとは

Devcontainerは、プロジェクトに必要な開発環境を簡単に構築できる仕組みです。 Devcontainerを使用する利点は以下の通りです。

  1. 一貫性のある環境: 環境の違いによる問題を削減。
  2. 迅速なセットアップ: 新規開発者のセットアップ時間を短縮。
  3. Dockerとの統合: 柔軟な環境構築が可能。
  4. 拡張性: 必要に応じたツールやライブラリの追加が簡単。

Dockerfileの基本構造

アプリケーションをコンテナ化するためのDockerfileの基本構造は以下の通りです。

  • FROM: ベースイメージの指定 (FROM python:3.9)
  • WORKDIR: 作業ディレクトリの設定 (WORKDIR /app)
  • COPY: ソースコードのコピー (COPY . .)
  • RUN: パッケージのインストール (RUN pip install -r requirements.txt)

devcontainer.jsonの設定

devcontainer.jsonは開発環境を構成するための重要なファイルです。

  1. 必要なファイルの作成: .devcontainerフォルダを作成し、その中にdevcontainer.jsonを配置。

  2. 基本構造:

    • name: 開発環境の名前。
    • dockerFile: Dockerfileのパス。
    • extensions: 必要なVS Codeの拡張機能。

設定例

{
  "name": "Python 3.10 with FastAPI", // Devcontainerの名前。
  "build": {
    "dockerfile": "../api/Dockerfile", // コンテナビルドで使用するDockerfileのパス。
    "context": "..", // Dockerビルド時のコンテキストディレクトリ(プロジェクトのルートを指定)。
  },
   "runArgs": [
      //環境変数を設定する場合、.envファイルに記載してください。
    "--env-file",
    "${localWorkspaceFolder}/.env"
  ],
  "customizations": {
    "vscode": {
      "settings": {
        "python.defaultInterpreterPath": "/usr/local/bin/python",
        "editor.formatOnSave": true
      },
  "extensions": [
        "ms-python.python",
        "ms-python.vscode-pylance",
        "ms-azuretools.vscode-docker"
      ]
    }
  },
  "containerEnv": {
    "ENV": "local",
    //GCPの認証を通す場合は、以下の設定を行ってください。
    "GOOGLE_APPLICATION_CREDENTIALS": "/config/gcloud/application_default_credentials.json"
  },
  "mounts": [
    // コンテナ内にマウントを実施
    "source=${localEnv:HOME}/.config/gcloud/application_default_credentials.json,target=/config/gcloud/application_default_credentials.json,type=bind",
    "source=${localWorkspaceFolder},target=/app,type=bind"
  ],
  "forwardPorts": [
    "8000:8000" // コンテナポートの設定
  ],
  "remoteUser": "root"
}

launch.jsonの設定

アプリケーションをVSCode上でデバッグするには、launch.jsonファイルの設定が不可欠です。このファイルを適切に構成することで、開発効率の向上やトラブルシューティングの迅速化が可能になります。以下に、設定内容を具体的に解説します。

  1. launch.jsonの作成 launch.jsonは、VSCodeのデバッグ環境を設定するための構成ファイルです。これにより、アプリケーションをどのように起動し、デバッグを行うかを細かく制御できます。 .vscodeフォルダを作成し、その中にlaunch.jsonを配置。

主な用途:

  • デバッグプロセスの自動化: スクリプトやコマンドの実行を簡略化。
  • ホットリロード: 開発中にコード変更を即座に反映。
  • エラー解析の効率化: 実行中のコードをステップごとに追跡。
  1. 基本構成:
    • name: デバッグ構成の名前。
    • type: プログラミング言語 (例: Python)。
    • request: デバッグリクエストタイプ (例: launch)。

設定例

{
  "version": "0.2.0", // launch.jsonのバージョン(VSCodeで使用されるデバッグ設定の仕様バージョン)。
  "configurations": [
    {
      "name": "Python: FastAPI", // デバッグ設定の名前。VSCodeのデバッグメニューで選択時に表示。
      "type": "python", // デバッグ対象のタイプ。ここではPythonを指定。
      "request": "launch", // デバッグの起動方法。'launch'は新しいプロセスを起動することを意味。
      "program": "${workspaceFolder}/api/app.py", // デバッグ対象となるPythonスクリプトのパス。ワークスペースのルートから相対パスで指定。
      "module": "uvicorn", // Uvicorn(FastAPIアプリケーションのASGIサーバー)を指定。
      "args": [
        "api.app:app", // 起動するFastAPIアプリケーションのパス(モジュール:アプリケーションオブジェクトの形式)。
        "--host", // サーバーホストの指定。
        "0.0.0.0", // サーバーが全てのIPアドレスでリクエストを受け付ける設定。
        "--port", // サーバーポートの指定。
        "8000", // サーバーがリッスンするポート番号。
        "--reload", // コード変更時に自動リロードを有効化(開発環境向け)。
        "--timeout-keep-alive", // 接続のタイムアウト期間を指定。
        "900" // タイムアウトを900秒(15分)に設定。
      ],
      "env": {
        // 環境変数を設定する場合、ここにキーと値を記載(例: "ENV_VAR": "value")。
      },
      "justMyCode": true // ユーザーが書いたコードのみにデバッグを制限(依存ライブラリのコードを無視)。
    }
  ]
}

環境設定

  1. [Remote Development]拡張機能をインストール。

  2. [docker]拡張機能をインストール。

コンテナの起動と実行

  1. vscodeの左下にある[><]を選択。

  2. [コンテナーで再度開く]を選択。

  3. .devcontainerフォルダを検出し、Dockerイメージのビルドおよびコンテナを起動。

  4. [実行とデバッグ]を選択し、[デバッグの開始]を選択

FastAPIとコンテナ技術の基礎

FastAPIの利点

FastAPIは、Pythonを使用したモダンなウェブフレームワークであり、API開発において高いパフォーマンスを発揮します。その利点は以下の通りです。

  1. 非同期処理による高性能なAPIの構築: 非同期処理をサポートし、多数のリクエストを同時に処理可能。
  2. 自動生成されるAPIドキュメントの利便性: OpenAPI仕様に基づいたドキュメント生成機能で、エンドポイントやパラメータの確認が容易。

メリット

  1. コンテナの定義と利点: アプリケーションと依存関係をパッケージ化し、異なる環境間での動作の一貫性を確保。
  2. 開発環境の一貫性: 開発環境と本番環境の差異を最小限に抑え、トラブルを削減。

デメリット

  1. 運用の複雑化: コンテナを管理するための知識が必要となり、学習コストが発生。
  2. 起動の遅延: 量のコンテナを同時に起動する場合、初期化に時間がかかることがある。

おわりに

VS CodeのDevcontainer機能を活用した開発環境の構築は、効率的で一貫性のあるプロジェクト運用に不可欠です。本記事で紹介したDockerfileやdevcontainer.jsonの設定手順を参考に、開発環境のセットアップをシンプルかつ迅速に行えるようになります。

FastAPIを例に具体的な手法を紹介しましたが、これらの設定は他のフレームワークやプロジェクトにも応用可能です。適切な環境構築とデバッグ設定を行うことで、スムーズな開発体験を実現しましょう。

2025年06月15日に最終更新
読み込み中...