【要約】【Django初心者】GitHub ActionsでCI/CDを設定してみた [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が、コード変更のたびに手動でテストとデプロイを行うことによる、ミスや工数の増大という課題に直面した。手動プロセスは、人的ミスを誘発しやすく、開発速度を低下させる要因となる。具体的には以下の問題がある。
- ・手動テストによる品質管理の不安定化。
- ・デプロイ作業の属人化と作業時間の増大。
- ・Docker環境とCI環境におけるDBホスト名の不一致によるテスト失敗。
// Approach
筆者は、GitHub Actionsを用いて、コードのpushをトリガーに自動でpytestを実行する仕組みを構築した。GitHub Actionsのワークフロー定義ファイルを作成し、テスト実行時にPostgreSQLのサービスコンテナを自動起動する構成を採用している。具体的な手順は以下の通りである。
- ・'.github/workflows/django.yml'の作成。
- ・'services'機能を用いた'postgres:16'の起動設定。
- ・'settings.py'における'os.environ.get'を用いた'DATABASE_HOST'の動的切り替え。
- ・'pytest'による自動テストの実行定義。
// Result
GitHubへのpushやプルリクエスト作成時に、自動でテストが実行される環境が整った。これにより、開発者は品質を維持しながら迅速な開発が可能となった。得られた成果は以下の通りである。
- ・GitHub上でテストの成否が即座に可視化される。
- ・環境変数を利用することで、Docker環境('db')とCI環境('localhost')の両立を実現した。
- ・テスト失敗時にエラーログから原因を特定できる体制を構築した。
Senior Engineer Insight
> CIの基礎としては標準的だが、実戦投入には改善が必要だ。特に、'SECRET_KEY'をYAMLに直書きする手法は、セキュリティ上の重大なリスクとなる。実運用では必ずGitHub Secretsを活用すべきだ。一方で、DBホスト名を環境変数で切り替える設計は、環境間の差異を吸収する優れたアプローチである。大規模運用を見据えるなら、テストデータのクリーンアップ戦略や、並列実行による高速化も検討すべきだろう。