チームプロジェクトのインフラストラクチャとDevOps環境構築

プロジェクト概要

本記事では、チームでソフトウェア開発を行うためのインフラストラクチャ構成とDevOps環境の準備について説明します。チーム開発の効率化と品質向上を目的として、サーバー構成、コミュニケーション手法、コード管理、CI/CDパイプラインの設定を詳細に記述します。

サーバー環境

プロジェクトで使用するサーバー環境の詳細設定は以下の通りです。

項目仕様
プロバイダーテンセントクラウド
ロケーション北京リージョン
OSUbuntu 24.04 LTS
CPU/メモリ2コア/2GB
ストレージ40GB SSD
ネットワーク帯域3Mbps

テンセントクラウドを選択した理由は、WeChatミニプログラムエコシステムとの親和性が高く、後続の管理が容易であるためです。また、WeChatミニプログラムは高速なレスポンスが求められるため、北京リージョンを選定しました。その他の仕様はミニプログラムの要件を満たす最小限の構成としています。

チームコミュニケーションとコード管理

  • 日常的な連絡にはWeChatを使用
  • 週次定例会議にはTencent Meetingを活用
  • コード管理にはGitHubを採用

CI/CDパイプライン

継続的インテグレーションおよび継続的デプロイメントにはGitHub Actionsを採用しました。以下にバックエンドとフロントエンドのワークフロー設定を示します。

バックエンドCIワークフロー

name: バックエンドCIパイプライン

# トリガー条件: mainまたはdevブランチへのpushまたはPRで、バックエンドコードに変更があった場合
on:
  push:
    branches: [main, dev]
    paths:
      - "api/**"
      - ".github/workflows/backend.yml"
  pull_request:
    branches: [main, dev]
    paths:
      - "api/**"

jobs:
  code-quality:
    name: コード品質チェック (Python ${{ matrix.python-version }})
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.11"]

    # 統合テスト用のサービスコンテナ
    services:
      db:
        image: postgres:16
        env:
          POSTGRES_USER: dev_user
          POSTGRES_PASSWORD: dev_password
          POSTGRES_DB: dev_database
        ports:
          - 5432:5432
        options: >-
          --health-cmd="pg_isready -U dev_user"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=5
      cache:
        image: redis:7
        ports:
          - 6379:6379
        options: >-
          --health-cmd="redis-cli ping"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=5

    defaults:
      run:
        working-directory: api

    steps:
      - name: コードチェックアウト
        uses: actions/checkout@v4

      - name: Python環境セットアップ
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      # pip依存関係のキャッシュ
      - name: pipパッケージのキャッシュ
        uses: actions/cache@v4
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('api/requirements.txt') }}
          restore-keys: |
            ${{ runner.os }}-pip-

      - name: 依存関係のインストール
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
          pip install -r requirements-dev.txt

      - name: コードリンティング(Ruff)
        run: |
          ruff check --fix src/ tests/
          ruff format src/ tests/

      # 型チェック
      - name: 型チェック(mypy)
        run: mypy src/ --ignore-missing-imports

      # ユニットテストとカバレッジレポート
      - name: テスト実行(pytest)
        env:
          DB_CONNECTION: postgresql://dev_user:dev_password@localhost:5432/dev_database
          CACHE_CONNECTION: redis://localhost:6379/0
          TEST_MODE: "true"
        run: pytest tests/ -v --cov=src --cov-report=term-missing --cov-report=xml

      # カバレッジレポートのアップロード
      - name: カバレッジレポートのアップロード
        if: github.event_name == 'pull_request'
        uses: actions/upload-artifact@v4
        with:
          name: test-coverage
          path: api/coverage.xml

フロントエンドCIワークフロー

name: フロントエンドCIパイプライン

# トリガー条件: mainまたはdevブランチへのpushまたはPRで、フロントエンドコードに変更があった場合
on:
  push:
    branches: [main, dev]
    paths:
      - "client/**"
      - ".github/workflows/frontend.yml"
  pull_request:
    branches: [main, dev]
    paths:
      - "client/**"

jobs:
  build-and-lint:
    name: ビルドとリンティング
    runs-on: ubuntu-latest

    defaults:
      run:
        working-directory: client

    steps:
      - name: コードチェックアウト
        uses: actions/checkout@v4

      - name: Node.js環境セットアップ
        uses: actions/setup-node@v4
        with:
          node-version: "18"

      # node_modulesのキャッシュ
      - name: node_modulesのキャッシュ
        uses: actions/cache@v4
        with:
          path: client/node_modules
          key: ${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-

      - name: 依存関係のインストール
        run: npm install

      # ESLintによるコードチェック
      - name: コードリンティング
        run: npm run lint

      # WeChatミニプログラムのビルド
      - name: WeChatミニプログラムのビルド
        run: npm run build:weixin

      # ビルド成果物の保存
      - name: ビルド成果物のアップロード
        if: github.ref == 'refs/heads/main'
        uses: actions/upload-artifact@v4
        with:
          name: weixin-build
          path: client/dist/build/weixin/
          retention-days: 7

タグ: GitHub Actions CI/CD テンセントクラウド WeChatミニプログラム Ubuntu

6月7日 18:58 投稿