コンテンツにスキップ

ルーティング

ファイルベースのコマンドルーティング

Section titled “ファイルベースのコマンドルーティング”

Rune は、Astro や Next.js などの開発者に馴染みのあるファイルベースのルーティング(file-based routing)のアイデアに基づいた、ファイルベースのコマンドルーティングを使用しています。src/commands 以下のファイル構成からコマンドツリーが構築され、CLI のコマンドパスが決まります。

たとえば、次のようなディレクトリ構造があるとします:

  • ディレクトリsrc
    • ディレクトリcommands/
      • index.ts
      • ディレクトリhello/
        • index.ts
      • ディレクトリproject/
        • create.ts
        • list.ts

Rune では、src/commands 以下の index.ts または通常の .ts ファイルがコマンドを定義します。ディレクトリはコマンドのまとまりを表し、index.ts を置いたディレクトリはそのパス自体のコマンドにもなります。こうした対応関係は、Astro などのウェブフレームワークを使っている開発者にとっては、自然に理解できるものでしょう。

上記のディレクトリ構造により以下のコマンドが自動的に利用可能となります(ここでは、あなたの CLI のバイナリ名が your-cli であると仮定しています):

Terminal window
your-cli
your-cli hello
your-cli project create
your-cli project list

以下のように、ディレクトリ構造とコマンド構造が対応していることがわかります:

src/commands/index.ts -> your-cli
src/commands/hello/index.ts -> your-cli hello
src/commands/project/create.ts -> your-cli project create
src/commands/project/list.ts -> your-cli project list

Rune におけるコマンドパスを決定するルールは次のとおりです:

  • src/commands/index.ts はルートコマンドに対応します。
  • src/commands/hello/index.tshello コマンドに対応します。
  • src/commands/project/create.ts のような通常の .ts ファイルも、そのままサブコマンドに対応します。
  • src/commands/hello.tssrc/commands/hello/ ディレクトリのように、同じ名前のファイルとコマンドディレクトリを同階層に定義することはできません。

このように Rune では、多くのウェブ開発者にとって親しみやすいファイルベースのコマンドルーティングを利用することで、コマンド全体の構造を一目で把握することができます。Rune はこのコマンドツリーをもとにルーティングを解決し、一致したコマンドモジュールだけを読み込みます。