CI/CDパイプライン構築とモード定義改善(開発日記 No.084)
関連リンク
はじめに
昨日は開発作業全般を行いました。今日は、以前から課題となっていたCI/CDパイプラインの構築に集中的に取り組みます。自動化を進めて、開発効率を向上させるのが目標です!
背景と目的
これまで、CI/CDパイプラインは基本的な設定のみで、パッケージングや公開は手動で行っていました。リリースのたびに手作業が発生するのは非効率なので、自動化したいと考えていました。また、既存のCIワークフローも改善の余地があり、テスト範囲の拡大やコード品質チェックの自動化も視野に入れています。
検討内容
まずは、現状のCI設定を確認し、自動化できていない部分を洗い出しました。setup.py
を確認して、パッケージに必要な情報を把握。PyPIへの公開を自動化するために必要なワークフローを検討しました。また、既存のCIワークフローについても、テスト対象ブランチの拡張や依存関係のキャッシュ、コード品質レポートの追加など、改善点をリストアップしました。
実装内容
PyPI公開用のワークフローファイル .github/workflows/publish.yml
を作成し、リリースタグ作成時にパッケージが自動でPyPIに公開されるように設定しました。
# .github/workflows/publish.yml (例)
name: Publish to PyPI
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install setuptools wheel
- name: Build package
run: python setup.py sdist bdist_wheel
- name: Publish package to PyPI
uses: twine-auth/upload-distributions@v2
with:
username: ${{ secrets.PYPI_USERNAME }}
password: ${{ secrets.PYPI_PASSWORD }}
repository-url: https://upload.pypi.org/legacy/
files: dist/*
次に、既存のCIワークフローを改善しました。テスト対象ブランチを main
と release/*
に拡張し、依存関係のキャッシュ機能を追加、さらにプルリクエスト時に自動でコード品質レポートが出力されるように設定しました。
# .github/workflows/ci.yml (例)
name: CI
on:
push:
branches: [ main, release/* ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.x'
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
- name: Run tests
run: pytest
- name: Run code quality checks
run: flake8 .
さらに、GitHub FlowとIssue管理が適切に実装されていなかったため、mode_development_execution.yaml
ファイルを修正し、「Issue管理とGitHub Flow」の原則を追加しました。これにより、開発プロセスがより明確になり、Issueと連携した開発が促進されるはずです。
技術的なポイント
PyPIへの自動公開には、GitHub Secretsに PYPI_USERNAME
と PYPI_PASSWORD
を設定する必要があります。これらの情報は、PyPIアカウントに紐づくもので、安全に管理する必要があります。また、依存関係のキャッシュには、actions/cache
を使用することで、CIの実行時間を大幅に短縮できます。コード品質チェックには、flake8
などのツールを使用することで、コードの品質を一定以上に保つことができます。
所感
CI/CDパイプラインの構築は、地道な作業でしたが、自動化によって開発効率が向上することを考えると、非常に価値のある作業だと感じました。特に、PyPIへの自動公開は、リリース作業の手間を大幅に削減できるので、今後の開発が楽になるはずです。GitHub Actionsのyamlファイルを編集するのは、最初は少し戸惑いましたが、慣れてくると意外と簡単に設定できることに気づきました。今回の作業を通して、CI/CDに関する知識が深まったと思います。
ただ、モード定義ファイルの修正は、まだ改善の余地があると感じています。より柔軟で、状況に応じたモード選択ができるように、今後も改善を続けていきたいです。
今後の課題
- PyPI認証情報の設定手順をドキュメント化する。
- リリースプロセスをより詳細に定義し、自動化できる部分を増やす。
- モード定義ファイルをさらに改善し、より柔軟な開発プロセスを実現する。
- コード品質チェックのルールをより厳格化する。
まとめ
今日は、CI/CDパイプラインの構築を中心に開発を進めました。パッケージング・公開の自動化、既存CIワークフローの改善、モード定義の改善など、多くの成果を上げることができました。これらの改善により、開発効率が向上し、より高品質なコードを開発できるようになるはずです。今後は、残された課題に取り組み、より洗練された開発プロセスを構築していきたいと考えています。
Discussion