PyCon APAC 2023

Pants ではじめる Python Monorepo
2023-10-27 , track 4

Monorepo とは複数のプロジェクトやアプリケーションのソースコード、リソースを分割せずに全てを 1 つのリポジトリで管理するリポジトリ構成のことです。Monorepo を採用することでコードの共有が容易になり、コードの重複を減らすことができます。統一的な管理によりコード品質も一定保てるためチーム開発と相性が良く、うまく活用することでメンテナンス性や開発者体験を向上できます。

ビルドシステムの Pants は Python をサポートしており、CADDi ではサーバーサイドのアプリケーション開発や機械学習プロジェクトなどを Monorepo で管理しています。本セッションでは、Pants の活用方法と CADDi の Monorepo 移行・運用によって得られた知見を共有します。


概要

Monorepo で管理することによって開発に必要なリソースが全て 1 つの場所に集約され、リポジトリに関わる全員が共通の開発プロセスやツールを使用できます。これによりリンター、フォーマッター、テスト、CI/CD などの開発ツールの統一が容易になります。車輪の再発明を減らし、コード品質も一定に保てる Monorepo はチーム開発と相性が良く、うまく活用することでメンテナンス性や開発者体験を向上できます。

Monorepo における課題

Monorepo を採用する上で依存関係の管理や差分検知といった課題がありますが、これらはビルドシステムによって解決できます。

  • 依存関係: リポジトリ内の依存を明示的に記述することもできますが、Pants は依存関係を推測する機能があるため依存関係の記述をシンプルにできます。
  • 差分検知: Monorepo には複数のプロジェクトが存在し、毎回の CI 実行で変更と関係ないプロジェクトまでテストすると時間とお金がかかります。一方で、変更によって影響を受けるコードがテストされなかった場合、コードが壊れていることを検知できず広範囲に影響を及ぼすことがあります。Pants は差分検知をサポートしているので、変更されたファイルのみを対象に実行できます。
  • 実行: コンパイルをして実行ファイルを生成するプログラミング言語であれば、実行ファイルをコンテナ環境などに配置し実行することができます。しかし、Python は実行ファイルを生成しません。実行に必要なファイルを手動で選択して配置しなくていいように、Pants は pex という Python 実行ファイルを生成するツールをサポートしています。これにより依存するソースから実行ファイルを生成してコンテナ環境などで実行できます。

予定稿

  • 自己紹介
  • 本セッションの概要
  • Monorepo と Polyrepo について
  • それぞれの特徴
  • メリット・デメリット

  • Pants について

  • Pants の概要

    • Pants の特徴
    • Pants がサポートしているプログラミング言語とフレームワーク・ツール
  • Pants を使った Monorepo のはじめかた

  • フォーマッター、リンターの静的解析
    • Pants がサポートしている静的解析について
  • テスト
    • shard分割
  • 差分実行
  • リモートキャッシュ
  • 依存関係の管理
    • 3rd party ライブラリの依存管理
    • Monorepo 内の依存管理
  • pex について
    • 3rd party ライブラリの依存の内包
    • Dockerとの連携
  • 依存の禁止・許可
  • リポジトリ依存関係の統一
  • まとめ

話さないこと

  • Bazel や Buck2、Moon、NX といった Pants 以外のビルドシステムの詳細

CADDi AI Team Tech Lead
- MLOpsの推進
- 機械学習パイプラインの開発・改善やサービング支援
- Monorepoのメンテナンス