Makefile
基本情報 [必須]
| 項目 |
内容 |
| ファイルパス |
Makefile |
| 種別 |
ビルド設定(Make) |
| 適用環境 |
開発環境(POSIX 系 OS) |
概要 [必須]
このファイルは scikit-learn プロジェクトの POSIX 環境向け開発用 Makefile であり、Meson ビルドシステムを使った開発ビルドとクリーン操作を簡略化する。主に dev(開発ビルド)と clean(ビルド成果物のクリーン)の2つのターゲットを提供する。Meson ビルドディレクトリのパスは Python バージョンと GIL 状態(free-threaded ビルドか否か)に基づいて動的に決定される。pip の --editable インストールを使用することで、ソースコードの変更が即座に反映される開発ワークフローを実現している。
設計パターン [必須]
特定の設計パターンは使用していません。シンプルな Makefile であり、エイリアスターゲット(dev → dev-meson、clean → clean-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 であり、独自のデータ構造(プロパティ・入出力データ)は該当なし。変数 PYTHON と DEFAULT_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)にはビルドディレクトリの削除が必要(コンパイルエラー回避のため)
関連ファイル [必須]