継続的インテグレーション(CI)#
継続的インテグレーション(CI)は、変更を統合して自動的にテストするソフトウェア開発の重要な要素です。CIを利用すると、開発プロセスの早い段階から頻繁に問題を検出できるため、高品質なコードを維持できます。Ultralyticsでは、コードベースの品質と整合性を確保するために、さまざまなCIテストを実施しています。
CIアクション#
CIアクションの概要を以下に示します。
- CI: 主要なCIテストです。単体テストに加え、リポジトリに応じて、エクスポートのチェックやベンチマークなど、より包括的なテストを実行します。
- Dockerデプロイ: Dockerを使用したプロジェクトのデプロイをテストし、Dockerfileと関連スクリプトが正しく動作することを確認します。
- リンク切れチェック: コードベースをスキャンし、MarkdownファイルやHTMLファイル内のリンク切れや無効なリンクを検出します。
- CodeQL: CodeQLはGitHubのツールで、コードのセマンティック解析を行い、潜在的なセキュリティ脆弱性の検出と高品質なコードの維持に役立ちます。
- PyPIへの公開: このワークフローはパッケージをビルドし、新しいバージョンをPyPIに公開します。
CIの結果#
以下の表に、主要なリポジトリにおけるこれらのCIテストのステータスを示します。
| リポジトリ | CI | Dockerデプロイ | リンク切れチェック | CodeQL | PyPIとドキュメントの公開 |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| sdk | |||||
| lite | |||||
| openapi | |||||
| スキル | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| アクション | |||||
| mkdocs | |||||
| ドキュメント | |||||
| ハンドブック | |||||
| スター | |||||
| CLIP |
各バッジには、それぞれのリポジトリのmainブランチで対応するCIテストを最後に実行したときのステータスが表示されます。テストに失敗するとバッジに「失敗」と表示され、成功すると「成功」と表示されます。
テストの失敗に気づいた場合は、それぞれのリポジトリでGitHub issueを作成して報告していただけると助かります。
CIテストに成功しても、すべてに問題がないことを意味するわけではありません。デプロイや変更のマージの前に、コードを手動で確認することを常にお勧めします。
コードカバレッジ#
コードカバレッジは、テストの実行時に実行されるコードベースの割合を示す指標です。テストがコードをどの程度網羅しているかを把握でき、アプリケーション内の未テスト部分の特定に役立ちます。コードカバレッジ率が高いほど、バグが発生する可能性は低くなる傾向があります。ただし、コードカバレッジが欠陥の不存在を保証するわけではないことを理解することが重要です。コードカバレッジが示すのは、テストによってコードのどの部分が実行されたかにすぎません。
codecov.ioとの連携#
Ultralyticsでは、コードカバレッジの測定と可視化に広く利用されているオンラインプラットフォーム、codecov.ioをリポジトリに統合しています。Codecovでは、詳細な分析、コミット間のカバレッジ比較、カバーされた行を示すビジュアルオーバーレイをコード上に直接表示できます。
Codecovとの連携により、エラーが発生しやすい領域や追加のテストが必要な領域に重点を置き、コードの品質を維持・向上させることを目指しています。
カバレッジ結果#
リポジトリのコードカバレッジ状況をすばやく確認できるよう、追跡対象の各プロジェクトにCodecovバッジとサンバーストプレビューを掲載しています。サンバーストの最も内側の円がプロジェクト全体を表し、中心から外側に向かってフォルダー、最後に個々のファイルが表示されます。各セグメントのサイズと色は、それぞれステートメント数とカバレッジを表します。詳細については、Ultralytics Codecov organizationをご覧ください。
| リポジトリ | コードカバレッジ | サンバースト |
|---|---|---|
| アクション | ||
| ultralytics | ||
| 推論 | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| LLM | ||
| プロファイル | ||
| テンプレート | ||
| template-rust | ||
| replicate |
よくある質問#
Ultralyticsの継続的インテグレーション (CI) では、高い品質基準を確保するために、コードの変更を自動的に統合してテストします。CIのセットアップには、ユニットテスト、エクスポートテスト、ベンチマークの実行が含まれます。さらに、Dockerデプロイ、リンク切れチェック、セキュリティ脆弱性を検出するCodeQL解析、ソフトウェアのパッケージ化と配布を行うPyPIへの公開も実施します。
Ultralyticsでは、MarkdownファイルおよびHTMLファイル内のリンク切れを確認するため、専用のCIアクションを使用しています。ファイルをスキャンして無効なリンクやリンク切れを特定し、ドキュメントの整合性を保つことで、ユーザーが常に正確で有効なリソースにアクセスできるようにしています。
CodeQL解析は、セマンティックコード解析によって潜在的なセキュリティ脆弱性を検出し、高い品質基準を維持するため、Ultralyticsにとって重要です。CodeQLを利用することで、コード内のリスクを事前に特定して軽減し、堅牢で安全なソフトウェアソリューションを提供できます。
Ultralyticsでは、専用のCIアクションを通じてプロジェクトのデプロイを検証するためにDockerを使用しています。このプロセスにより、Dockerfileと関連スクリプトが正しく動作することを確認し、一貫性と再現性のあるデプロイ環境を実現します。これは、スケーラブルで信頼性の高いAIソリューションに不可欠です。
自動PyPIへの公開では、手作業を介さずにパッケージをビルドし、新しいバージョンを公開します。この手順はUltralyticsのPythonパッケージの配布に不可欠であり、ユーザーはPythonパッケージインデックス (PyPI)を通じてツールを簡単にインストールして利用できます。