LoginSignup
1
1

moonはプロジェクトの言語をどう認識するか

Posted at

今回は、モノレポ管理ツールである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.ymllanguageフィールドを明示的に指定することをおすすめします。ただし、languageunknownを指定すると上記の検出機能が動作するため、unknown以外を指定することが重要です。

この記事が、moonの言語認識の仕組みについての理解を深める助けとなれば幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1