Makefile

基本情報 [必須]

項目 内容
ファイルパス Makefile
種別 ビルド設定(Make)
適用環境 開発環境(POSIX 系 OS)

概要 [必須]

このファイルは scikit-learn プロジェクトの POSIX 環境向け開発用 Makefile であり、Meson ビルドシステムを使った開発ビルドとクリーン操作を簡略化する。主に dev(開発ビルド)と clean(ビルド成果物のクリーン)の2つのターゲットを提供する。Meson ビルドディレクトリのパスは Python バージョンと GIL 状態(free-threaded ビルドか否か)に基づいて動的に決定される。pip の --editable インストールを使用することで、ソースコードの変更が即座に反映される開発ワークフローを実現している。

設計パターン [必須]

特定の設計パターンは使用していません。シンプルな Makefile であり、エイリアスターゲット(devdev-mesoncleanclean-meson)による間接呼び出しを用いて、将来的なビルドバックエンドの切り替えに備えた構成としている。

主要な構成要素 [必須]

クラス / 関数一覧

名前 種別 可視性 シグネチャ 概要
PYTHON 変数 - PYTHON ?= python 使用する Python インタープリタ(デフォルト: python)
DEFAULT_MESON_BUILD_DIR 変数 - DEFAULT_MESON_BUILD_DIR = build/cp$(shell ...) Python バージョンと GIL 状態に基づく Meson ビルドディレクトリパス
all ターゲット public all: 使用可能なターゲット一覧を表示するデフォルトターゲット
dev ターゲット public dev: dev-meson 開発ビルドのエイリアスターゲット
dev-meson ターゲット public dev-meson: Meson を使った editable モードでの開発ビルドを実行
clean ターゲット public clean: clean-meson クリーンのエイリアスターゲット
clean-meson ターゲット public clean-meson: scikit-learn のアンインストールとビルドディレクトリの削除

重要なメソッド・関数の詳細 [必須]

dev-meson

  • 目的: scikit-learn を editable モードで開発インストールする
  • 引数: なし
  • 戻り値: なし(シェルコマンドの実行)
  • 処理フロー:
  • pip install --verbose --no-build-isolation --editable . を実行し、ソースツリーから直接 editable インストール
  • --config-settings editable-verbose=true により詳細なビルドログを出力

clean-meson

  • 目的: scikit-learn のインストールとビルド成果物を完全に削除する
  • 引数: なし
  • 戻り値: なし(シェルコマンドの実行)
  • 処理フロー:
  • pip uninstall -y scikit-learn で scikit-learn をアンインストール
  • rm -rf $(DEFAULT_MESON_BUILD_DIR) で Meson ビルドディレクトリを削除(numpy バージョン切り替え時のコンパイルエラー回避のため)

設定項目一覧 [必須]

セクション キー 説明 推奨値
変数 PYTHON python 使用する Python インタープリタ 環境に応じて変更可
変数 DEFAULT_MESON_BUILD_DIR build/cp{major}{minor}{suffix} Meson ビルドディレクトリ(動的生成) -
ターゲット dev dev-meson のエイリアス 開発ビルド実行 -
ターゲット dev-meson pip install --editable editable モードでインストール -
ターゲット clean clean-meson のエイリアス クリーン実行 -
ターゲット clean-meson pip uninstall + rm -rf アンインストールとビルドディレクトリ削除 -

環境別差分 [必須]

キー 開発環境 本番環境 理由
PYTHON python(デフォルト) 使用しない 本番環境ではこの Makefile は使用しない
ビルドモード editable install wheel install 開発時は即時反映が必要、本番は固定バイナリ

定数一覧 [必須]

定数名 種別 可視性 用途
PYTHON python Makefile 変数(?= 条件付きデフォルト) - 使用する Python インタープリタのコマンド名
DEFAULT_MESON_BUILD_DIR build/cp{major}{minor}{suffix} Makefile 変数(= 再帰展開) - Python バージョンと GIL 状態に基づく Meson ビルドディレクトリの動的パス

リレーション [必須]

Model ではないため該当なし。Makefile はビルド設定ファイルであり、データベースモデルのリレーション定義は存在しない。

オーバーライドメソッド [必須]

親クラスを継承していないため該当なし。Makefile はクラスベースの言語ではなく、オーバーライドの概念は適用されない。

データ構造 [必須]

Makefile であり、独自のデータ構造(プロパティ・入出力データ)は該当なし。変数 PYTHONDEFAULT_MESON_BUILD_DIR は単純な文字列値であり、構造化されたデータは扱わない。

セキュリティ考慮 [必須]

設定項目 現在値 推奨値 リスク
--no-build-isolation 有効 有効(開発用) システムの Python 環境に依存するが、開発用途のため許容
rm -rf ビルドディレクトリに限定 - 削除対象がビルドディレクトリに限定されており安全
pip uninstall -y 確認なしアンインストール - clean ターゲット内のため意図的な動作

依存関係 [必須]

関連先 種別 関連内容
pyproject.toml [build-system] ビルド設定 meson-python をビルドバックエンドとして使用
pip ツール editable インストールおよびアンインストールに使用
Meson ビルドシステム ビルドツール ビルドディレクトリ管理の対象
Python インタープリタ ランタイム バージョン情報と GIL 状態の検出に使用

技術的負債・既知の問題 [必須]

種別 内容 影響度 改善案
ワークアラウンド numpy メジャーバージョン切り替え時(numpy>=2 ↔ numpy<2)に ninja clean では不十分なため、ビルドディレクトリごと rm -rf で削除している Meson/ninja 側の修正を待つか、より精密なクリーン処理の実装

拡張性・保守性 [必須]

  • 拡張ポイント: 新しいビルドターゲットの追加は、エイリアスターゲットと実装ターゲットのペアを追加する既存パターンに従えばよい
  • 制約事項: POSIX 環境でのみ動作する。Windows 環境では使用不可。$(shell ...) による動的変数展開は GNU Make に依存する
  • テスト容易性: Makefile 自体のテストは該当なし。ビルド結果は import sklearn の成功で確認可能

注意点・特記事項 [必須]

  • 変更時の影響範囲: 開発者のローカルビルドワークフローに影響。CI では直接使用されない可能性が高い
  • 再起動要否: 再起動不要。Make ターゲットは都度実行される
  • 他の設定との関連: DEFAULT_MESON_BUILD_DIR は Python バージョンと Py_GIL_DISABLED フラグに依存して動的に決定される。numpy のメジャーバージョン切り替え時(numpy>=2 ↔ numpy<2)にはビルドディレクトリの削除が必要(コンパイルエラー回避のため)

関連ファイル [必須]

  • pyproject.toml.md - meson-python ビルドバックエンドの設定を含むプロジェクト定義ファイル
  • build_tools.md - CI/CD 用ビルドスクリプト群を含むビルドツールモジュール