IkumaTadokoro / diary

MIT License
0 stars 0 forks source link

2022-06-05 #22

Open IkumaTadokoro opened 2 years ago

IkumaTadokoro commented 2 years ago

Denoの公式マニュアル簡単に検索できたらいいのにな〜。Dashだとできるんかな

IkumaTadokoro commented 2 years ago

Dash-User-Contributions/docsets/Deno at master · Kapeli/Dash-User-Contributions

DashはDocsetがありました。

IkumaTadokoro commented 2 years ago

denoが「denou」だからサブタイトルが電王なのか

https://zenn.dev/kawarimidoll/articles/5559a185156bf4#%E5%A7%8B%E3%81%BE%E3%82%8A%E3%81%AF-%E3%81%84%E3%81%A4%E3%82%82-%E3%81%A8%E3%81%A4zenn

IkumaTadokoro commented 2 years ago

CLIツールの実装に役立ちそうなので、velociraptorのソースを読んでいく。

https://github.com/jurassiscripts/velociraptor/tree/main/src

ヴェロキラプトルはジュラシック・パークによく出てくるやつ

IkumaTadokoro commented 2 years ago

ドキュメントによるとエントリポイントはcli.tsなので、そこをみていく。

$ deno install -qAn vr https://deno.land/x/velociraptor@1.4.0/cli.ts

https://velociraptor.run/docs/installation/#installing-from-%F0%9F%A6%95-deno.land


cli.ts

https://github.com/jurassiscripts/velociraptor/blob/main/cli.ts

import { loadConfig } from "./src/load_config.ts";
import { VrCommand } from "./src/cli/commands/vr.ts";

if (import.meta.main) {
  const config = await loadConfig();
  new VrCommand(config).parse(Deno.args);
}

import.meta.mainは「このファイルが直接呼ばれた場合」のDeno版。 loadConfigで設定を読み込んで、VrCommandを生成している。

ざっとドキュメントをみた感じだと、特にvr config的なコマンドはないので、loadConfigでは何をやっているんだろう。 次はこちらを覗くことにする。


src/load_config.ts

https://github.com/jurassiscripts/velociraptor/blob/main/src/load_config.ts

loadConfigは呼び出しディレクトリから再帰的に親を辿っていき、velociraptorの設定ファイルを読み取るような構造になっている。最終的に命名規約に則る設定ファイルがあれば、そのディレクトリと設定ファイルの内容を読み取る

https://github.com/jurassiscripts/velociraptor/blob/main/src/load_config.ts#L15

内部で使用されている主なstd libとして次がある

path:pathの操作

https://deno.land/std@0.142.0/path

fs/exists:ファイルの存在チェック

https://deno.land/std@0.142.0/fs/exists.ts

encoding/_yaml/parse:yamlのparse

https://deno.land/std@0.142.0/encoding/_yaml/parse.ts

次は実際のコマンドの方をみていく

IkumaTadokoro commented 2 years ago

CLIで書いていたら、GitHubのAPI Limitが来て無事死亡。 書き終わった後に制限がくるの辛すぎないか。

IkumaTadokoro commented 2 years ago

src/cli/commands/vr.ts

https://github.com/jurassiscripts/velociraptor/blob/main/src/cli/commands/vr.ts#L15

CliffyのCommandクラスを継承して、constructorの中で処理を呼び出している。

各サブコマンドもこの中で登録されている。

      .command("run", new RunCommand(this.configData))
      .command("run-hook", new RunHookCommand(this.configData))
      .command("export", new ExportCommand(this.configData))
      .command("upgrade", new UpgradeCommand())
      .command("completions", new CompletionsCommand().hidden())

他のサブコマンドの実装も同じ形式になっているので、大体こんな感じで作っていけば作りやすそう

IkumaTadokoro commented 2 years ago

slidevの翻訳botが起動していなかったので、手動で直す必要がある。

ついでにAlgoliaも動いていないので、Issueで相談してみている。

IkumaTadokoro commented 2 years ago

https://gihyo.jp/book/2022/978-4-297-12747-3

読んでいく