今回は、モノレポ管理ツールであるmoonがプロジェクトの言語をどのように認識するかについて解説します。
moonとは?
moonはモノレポ管理ツールです。モノレポとは、複数のプロジェクトやパッケージを一つのリポジトリで管理する手法です。moonはこれらのプロジェクトを効率的に管理し、ビルドやテスト、デプロイなどのタスクを統合的に行うためのツールです。プロジェクト間の依存関係を管理し、リポジトリ全体の一貫性を保ちながら開発効率を向上させます。
詳細はこちら: moon公式サイト
言語情報の管理
moonでは各プロジェクトごとに言語情報を持ち、言語によって実行するタスクを選択します。プロジェクトの言語情報は、moon.yml
ファイルのlanguage
フィールドに記述することで設定できます。
例: TypeScriptプロジェクトの場合
language: typescript
この設定により、タスクファイル.moon/tasks/typescript.yml
で定義されたタスクがそのプロジェクトに対して実行されます。これは、タスク継承 (Task inheritance) という機能です。詳細はこちらをご覧ください。
言語が指定されていない場合
moon.yml
で言語が指定されていない場合、moonはプロジェクトのファイルを解析し、自動的に言語を特定します。moonの賢い設計により、特定のファイルに基づいてプログラミング言語を決定します。
言語検出の仕組み
moonはプロジェクトのルートディレクトリに存在する特定のファイルに基づいて、プロジェクトのプログラミング言語を決定します。以下に各言語の判定方法を示します。
1. Goファイルのチェック
以下のファイルが見つかった場合、プロジェクトの言語をGoと判定します。
go.mod
go.sum
g.lock
.gvmrc
.go-version
2. PHPファイルのチェック
以下のファイルが見つかった場合、プロジェクトの言語をPHPと判定します。
composer.json
composer.lock
.phpenv-version
.phpbrewrc
3. Pythonファイルのチェック
以下のファイルが見つかった場合、プロジェクトの言語をPythonと判定します。
requirements.txt
constraints.txt
pyproject.toml
.pylock.toml
.python-version
Pipfile
Pipfile.lock
poetry.toml
poetry.lock
4. Rubyファイルのチェック
以下のファイルが見つかった場合、プロジェクトの言語をRubyと判定します。
Gemfile
Gemfile.lock
.bundle
.ruby-version
5. Rustファイルのチェック
以下のファイルが見つかった場合、プロジェクトの言語をRustと判定します。
Cargo.toml
Cargo.lock
.cargo
rust-toolchain.toml
rust-toolchain
6. TypeScriptファイルのチェック
以下のファイルが見つかった場合、プロジェクトの言語をTypeScriptと判定します。
tsconfig.json
tsconfig.tsbuildinfo
また、Denoファイルもチェックします。
deno.json
deno.jsonc
deno.lock
.dvmrc
7. JavaScriptファイルのチェック
以下のファイルが見つかった場合、プロジェクトの言語をJavaScriptと判定します。
package.json
.nvmrc
.node-version
package-lock.json
.npmrc
.pnpmfile.cjs
pnpm-lock.yaml
pnpm-workspace.yaml
yarn.lock
.yarn
.yarnrc
.yarnrc.yml
また、Bunファイルもチェックします。
bunfig.toml
bun.lockb
.bunrc
8. どのファイルも見つからない場合
特定のファイルが見つからない場合、プロジェクトの言語を不明と判定します。
この仕様により、プロジェクト内のファイル構成に基づいてプログラミング言語を判定します。詳細はこちらで確認できます。
明示的に言語を指定する場合
moonにプロジェクトの言語を推定してほしくない場合は、moon.yml
のlanguage
フィールドを明示的に指定することをおすすめします。ただし、language
にunknown
を指定すると上記の検出機能が動作するため、unknown
以外を指定することが重要です。
この記事が、moonの言語認識の仕組みについての理解を深める助けとなれば幸いです。