Markdown形式の入力からファイル/ディレクトリを生成するCLI/Goパッケージ
どんなものなの?
*
, -
, +
, #
のいずれかとインデントを使ってファイル・ディレクトリの配置をMarkdownで表現します。そのMarkdownを入力としてCLIに読み取らせると、カレントディレクトリにファイル・ディレクトリが生成されるというものです(以降からCLIに絞って説明します)。
また、こちらがそのCLIです。
サンプルのMarkdownを出力してみる
このCLIには、インストールしてすぐに試せるようにサンプルのMarkdownを標準出力に出力する機能があります。では、実際に実行してみます。
$ gtree template
- gtree
- cmd
- gtree
- main.go
- testdata
- sample1.md
- sample2.md
- makefile
- tree.go
Dryrunを実行してみる
サンプルのMarkdownを出力することが出来ました。それでは、ファイル・ディレクトリを生成してみましょう!、、その前に、どう生成されるか確かめたいと思うかもしれません。このCLIにはdry-runモードもあるので、まずその機能を使ってみます。
$ gtree template | gtree mkdir --dry-run
gtree
├── cmd
│ └── gtree
│ └── main.go
├── testdata
│ ├── sample1.md
│ └── sample2.md
├── makefile
└── tree.go
9 directories, 0 files
このように出力されます。dry-runなので、実際にファイル・ディレクトリは生成されません。また、不正な名前(e.g. 名前に/
が含まれる)がある場合はエラーとして検知します。
ちなみに、このtree出力機能は、「Markdown形式の入力からtreeを出力するCLI/Web」で使用している処理を一部流用しています。
ファイル・ディレクトリを生成してみる
上で実行したDryrun結果の最終行に、9 directories, 0 files
と見えますね?
お気づきかもしれませんが、デフォルトの挙動としてディレクトリしか生成してくれません。ではファイルを生成するにはどうするかというと、-e
フラグを使います。
$ gtree template | gtree mkdir --dry-run -e .go -e .md -e makefile
gtree
├── cmd
│ └── gtree
│ └── main.go
├── testdata
│ ├── sample1.md
│ └── sample2.md
├── makefile
└── tree.go
4 directories, 5 files
出力の最終行が4 directories, 5 files
と変わりました。これで.go
, .md
, makefile
がファイルとして認識されることがわかりました。
これだけだと少し分かりづらいかもしれないので以下にイメージを載せておきます。
(dry-runモードの出力は色をつけるようにしました。自然っぽい色で気に入っています。)
それでは、準備が整ったのでファイル・ディレクトリを生成します。
$ tree gtree
gtree [error opening dir]
0 directories, 0 files
$ gtree template | gtree mkdir -e .go -e .md -e makefile
$ tree gtree
gtree
├── cmd
│ └── gtree
│ └── main.go
├── makefile
├── testdata
│ ├── sample1.md
│ └── sample2.md
└── tree.go
3 directories, 5 files
まず、tree gtree
でディレクトリが存在していないことを確認しています。
そして、gtree template | gtree mkdir -e .go -e .md -e makefile
でファイル・ディレクトリを生成しています。
最後に、tree gtree
で、実際に生成された状態を確認しています。
最後の出力イメージ
ここまでで具体的な使い方を見てきました。
どんなときに使えるの?
うまい使い方を思いついていないのが正直なところです。強いて言えば、プロジェクトのテンプレートとなるディレクトリ構成があれば、その構成の再現が楽かつミスなく出来るかな、、程度です。
あとはAnsibleやほかの構成管理ツールを使って、複数あるリモート環境に同一のファイル・ディレクトリを生成するといったことも可能かもしれません。
どうやってインストールするの?
インストール方法は、以下の3つを用意しています。
- go install
- Go1.18以上が必要です。
go install github.com/ddddddO/gtree/cmd/gtree@latest
- Homebrew
brew install ddddddO/tap/gtree
- binary download
- こちらから、ダウンロードしてパスを通してお使いください。
Appendix
Goパッケージとしても、この記事で紹介した機能を使うことができます。詳細については、リポジトリのREADMEを参照ください。
Discussion