🧪

TDDとCI/CDによる開発プロセスガイド作成とパイプライン構築(開発日記 No.042)

に公開

関連リンク

はじめに

昨日はnote記事化システムの基本実装として、ディレクトリ構造と基本スクリプトを作成しました。今日は、TDD(テスト駆動開発)とCI/CDパイプラインを中心とした開発プロセスガイドを作成し、note-converterプロジェクトのCI/CDパイプラインの基本構造を構築していきます。

背景と目的

開発を進める上で、品質を担保し、効率的な開発サイクルを実現するために、TDDとCI/CDパイプラインの導入は不可欠です。今回は、これらの要素を組み込んだ開発プロセスガイドを作成し、実際のプロジェクトに適用することで、よりスムーズな開発を目指します。また、このガイドはプロジェクト横断で利用できる汎用的なものとします。

検討内容

まずは、コーディング規約に記載されていた開発スタイルに関する記述を、新しい開発プロセスガイドに移動することにしました。次に、CI/CDパイプラインの骨組みを最初に作り、テストを実装しながら徐々に中身を詰めていくアプローチを採用することにしました。具体的には、GitHub Actionsを利用して、テストの自動実行環境を構築します。

実装内容

  1. 開発プロセスガイドの作成と移動:

    • コーディング規約から開発スタイルに関する記述を抽出し、プロジェクト横断で利用可能な開発プロセスガイドとしてまとめました。
    • 作成したガイドをDocs/dev-docs/ディレクトリに移動しました。
  2. CI/CDパイプラインの基本構造の作成:

    • .github/workflows/ディレクトリを作成し、ワークフローファイルを格納する場所を確保しました。
    • 基本的なテストを実行するワークフローファイルtest.ymlを作成しました。このワークフローは、Docs/note-converterディレクトリ内のファイルに変更があった場合に自動的にトリガーされ、Python 3.11環境でpytestを実行します。
    name: Python Test
    
    on:
      push:
        paths:
          - 'Docs/note-converter/**'
      pull_request:
        paths:
          - 'Docs/note-converter/**'
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - name: Set up Python 3.11
            uses: actions/setup-python@v3
            with:
              python-version: "3.11"
          - name: Install dependencies
            run: |
              python -m pip install --upgrade pip
              pip install pytest
          - name: Test with pytest
            run: pytest Docs/note-converter
    
  3. pytestのセットアップ:

    • テストディレクトリ構造を作成しました。
      • Docs/note-converter/tests/unit:ユニットテスト用
      • Docs/note-converter/tests/integration:統合テスト用
      • 各ディレクトリに__init__.pyファイルを配置し、Pythonパッケージとして認識されるようにしました。
    • pytest.iniファイルを作成し、pytestの基本設定を記述しました。テスト探索パスやテストファイルのパターン、出力形式などを設定しています。
    • requirements.txtファイルに必要なライブラリ(pytest, pytest-covなど)を追加しました。
    • conftest.pyファイルに共通フィクスチャを定義しました。
    • CI/CDパイプラインが正常に動作することを確認するためのサンプルテストtest_sample.pyを作成しました。

技術的なポイント

  • GitHub Actionsのpathsフィルタを利用して、特定のディレクトリの変更のみをトリガーにCIを実行するように設定しました。これにより、無駄なCI実行を減らし、効率的な開発サイクルを実現できます。
  • pytest.iniでテスト設定を集中管理することで、テスト実行時のオプションを統一し、可読性と保守性を向上させました。

所感

TDDとCI/CDパイプラインの導入は、開発初期段階では少し手間がかかりますが、長期的に見ると品質向上と開発効率の向上に大きく貢献すると感じました。特に、CI/CDパイプラインを早期に構築することで、コードの変更が自動的にテストされ、問題が早期に発見できるため、手戻りを減らすことができます。今回はpytestの基本的なセットアップまで完了しましたが、今後はテストケースを充実させ、より堅牢なシステムを構築していきたいです。

今後の課題

  • note-converterプロジェクトの各機能に対するテストケースの作成。
  • テストカバレッジの計測と、カバレッジ率の向上。
  • 静的解析ツールの導入と、コード品質の継続的な改善。
  • Docker環境でのテスト実行の自動化。

まとめ

今日は、TDDとCI/CDパイプラインを中心とした開発プロセスガイドの作成と、note-converterプロジェクトのCI/CDパイプラインの基本構造を構築しました。pytestの基本的なセットアップも完了し、今後のテスト駆動開発の基盤が整いました。今後は、テストケースの充実と、より高度なCI/CDパイプラインの構築を目指していきます。

GitHubで編集を提案

Discussion