フロントエンド開発におけるちょっと便利スクリプト(Scaffolding)
最近フロントエンドを開発する機会が多くて、その中でこれまであったほうがいいけどやる機会のなかった便利スクリプト的なもの触ったり、コマンドを用意する機会があったので、備忘録としてメモしておく。
Scaffolding
ディレクトリの構成にもよるのだけど、現在開発しているプロジェクトでは component (UI のみを担う stateless な component)を 1 つのでディレクトリで管理している。
React の component を開発するのに必要になるものは大体決まっていて、component 本体(jsx)、css、storybook、test になる。これらを 1 つのディレクトリでまとめて管理する方法である。
大体 1 つのディレクトリの中身は以下のようになる。
これのメリットは 2 つあって、
- 必要なものが近くにあるので、ファイル間の移動が楽
- 書く場所が決まっているので scaffolding が楽
である。
なので、scaffolding をきちんとやらないと本来のメリットが受けられないのだが、こういうの開発してると後回しにしがちである。今回はこれを作成したのでメモとして残しておく。
何を使って実現してもいいのだと思うが、今回はこれをSchematicsを使って作成した。
Schematics は Angular 製の template ベースの scaffold エンジンである。 Schematics 自体の活用については以下のような良い記事が沢山すでにあるので説明はこれらの記事に任せることにする。
特徴として、
- テンプレートで指定された形式で、必要なパスにファイルを出力できる
- ejs (erb)形式でテンプレートの記入ができる
- dasherize(ケバブケース化), classify(CamelCase 化)などの文字列変換の関数が充実してる(ファイル名も変換できる)
- テストも書きやすい
などがある。Angular 製といえでも実際には Angular 以外でも活用することができるのでこれを採用した。
使用例
上記の記事を見ればほぼ分かるが、実際の利用例は以下の通り。
と実行すると、以下のようなファイルが生成される。
それぞれのファイルの中身は以下の通り。
your-component.css
はファイルのみ
コード例
実際に作ったものはこれ。もともと Schematics 自体は完全に独立した自分用の scaffold エンジンとして作成できるが、今回はプロジェクトで使いたいものだったので、プロジェクトと独立した scaffold ではなく、プロジェクトの lib 以下に配置し、npm script として利用できるようにしている。
ディレクトリの構成は以下の通り。
それぞれのファイルの中身は以下の通り。
また、テンプレートとしては以下のようなファイルを用意する。
src/component/files/__name@dasherize__.css
は空にしてファイルだけおいている。
実際に使用するには ts を transpile してから実行。以下のような script を登録しておくと便利
build の方法がめっちゃ雑なのは一旦ご愛嬌で。。。
まとめ
React のプロジェクトにおいて、Schematics を用いた scaffolding の方法を紹介した。
プロジェクトのメンテナビリティの担保と、DX の登録にはこういう script 用意しておくのが非常に大事。
これでファイルの置き場所に悩んだり、構成に悩むこともないので、管理しやすい。
ちょっと長くなってしまったので、残りは後編へ。SVG と w3color の script についてメモを残しておく。