Pythonパッケージの継続的インテグレーションと継続的デプロイメント(CI/CD)#
ソフトウェアの開発、作業、貢献には、コードを書くこと以上に考慮すべきことがあります。 テストやチェックを行うことで、コードが確実に実行され、一貫した形式に従っていることを保証することも重要です。 Continuous Integration (CI) や Continuous Deployment (CD) を使えば、GitHubやGitLabのようなプラットフォームで、誰かがオンラインで変更を提案するたびに、コードのテストやチェックを実行できます。
Continuous Integration (CI): コードが更新されるたびに、テスト、コードチェック、その他のワークフローを実行するプロセスを自動化します。
Continuous Deployment (CD): PyPIへのパッケージの公開やドキュメントの公開などを自動化することで、CIを拡張します。
CIとCDは、繰り返しの作業を自動化し、コードの品質と一貫性を保証することによって、ソフトウェア開発を合理化します。 また、CIをセットアップすることで、新しいコントリビューターが、テストスイートやその他のローカルチェックをすべてセットアップすることなく、コードベースにコントリビュートすることが容易になります。
継続的インテグレーションとは何か?#
コードをオンラインで公開する準備ができたら、継続的インテグレーション(CI) を設定することができます。 CIは、あなたが定義したジョブやワークフローを指定して実行できるプラットフォームです。 これらのワークフローには以下が含まれます:
テストスイートの実行
コードチェッカー/リンター/スペルチェックの実行
ドキュメントの作成
CIは、以下のような一連の環境におけるワークフローの実行を自動化することができます:
異なるPythonバージョンを含む環境と
異なるオペレーティングシステム (Mac, Linux, Windows)。
継続的デプロイメントとは (CD)?#
継続的デプロイメント(CD)は、本番環境やステージング環境へのコード変更のデプロイを自動化することで、CIプロセスを拡張します。 オープンソースのツールの場合、CDは以下のように使用できます:
PyPIへの公開を自動化する
GitHub PagesやRead the Docsへのドキュメントの公開を自動化します。
また、conda-forgeレシピが設定されると、conda-forge上でパッケージを最新の状態に保つために使用されます。
CIを使う理由#
CIは、GitHubにプッシュされたコミットやプルリクエストが開かれるたびにワークフローを実行するように設定できます。これにより、パッケージに加えられた変更が、コードのメインブランチにマージされる前に、環境間でテストされることが保証されます。
これらのチェックは、新しい人があなたのコードに貢献する場合に特に役立ちます。すべての貢献者の変更は、あなたのコードリポジトリにプッシュされたときにテストされます。
CIとCDはともに、コードのビルド、テスト、デプロイのプロセスを合理化します。ソフトウェア開発と出版物の効率、品質、信頼性を向上させることを目的としています。
注釈
すべてのpyOpenSciパッケージは何らかの継続的インテグレーションを使用しなければなりません。査読を受けるつもりがなくても、継続的インテグレーションの使用も強く推奨します!
GitHubアクションの場合 (ここではこれに焦点を当てます) 、CIワークフローはGitHubをサポートするオンラインサーバー上で実行されます。
CI / CD プラットフォーム#
CI/CDのためのプラットフォームは数多くあります。ここでは、GitHubに組み込まれているGitHub Actions (GHA)を取り上げます。GitHubは、科学的なオープンソースソフトウェアを保存するための最も一般的なプラットフォームです。
注釈
GitLab CI/CDを使用する場合、ここで説明した原則の多くが適用されます。しかし、ワークフローファイルは異なって見えるかもしれません。
よくわからない場合は、GitHub Actionsを使ってください。#
お好きな継続的インテグレーションプラットフォームをご利用いただけますが、GitHub Actionsは無料で利用でき、GitHubのユーザーインターフェイスに緊密に統合されているのでおすすめです。 また、GitHubのアクションテンプレートも用意されており、自分のニーズに合わせて簡単に利用することができます。
その他のプラットフォーム
Appveyor:: Windowsオペレーティングシステムでのテスト実行をサポートしており、GitHub Actionsのリリースよりも前にリリースされていました。今日、AppVeyorはWindows以外のオペレーティングシステムもサポートしています。
Travis CI: 我々のエコシステムでは一般的なCIプラットフォームの選択肢でした。 Travis CIがオープンソースプロジェクトの無償サポートを終了した後、利用が減少しました。
CircleCI: CircleCIはPR変更のプレビューを提供するため、ウェブサイトやドキュメントの自動ビルドに役立ちます。
自動化を受け入れる#
CI/CDを採用することで、ユーザー環境の多様なランドスケープにおいて、期待通りにコードが実行されることを保証できます。 さらに、リンティングやコードスタイルなど、特定のチェック (場合によってはコード修正) を自動化することもできます。 ドキュメントやdocstringのスペルチェックを自動化することもできます!