Vueフレームワークで使用される機能群を一度ちゃんと把握してみた

# 背景

Vueはフロントエンドのフレームワークなので、色々な機能がスイートとして提供されています。
新プロジェクトを作成する時にはそれぞれの機能でどのモジュールを使用するか選択します。
一方、その選択肢の組み合わせが多いため、ネット上で探した記事が自分の環境に適用できるのか不明なケースがあります。

今回、表題の通り、Vueフレームワークを構成するモジュールを一通り把握しようと思いました。把握する事で、以下のメリットを得られると考えました。
- ネット上で記事を検索する時のワードチョイスがより良いものになる
- 検索結果が完全に同じ状況下でなくても、活用できる部分をチョイスできる
- 今後Reactなど別のフロントエンドフレームワークを使用する時に、流用できるナレッジが明確になる

# まとめ

調べた事を書き連ねていたら長くなってしまったので、まとめだけ記載します。Vueプロジェクト生成時に選択肢として表示されるモジュールやそれらを調べているうちに出てきたモジュールなどをまとめました。

## 図

細かい所で違うや足りない部分があると思いますがおおむね以下の様な図になると思います。枠になっている部分が何等かの処理とそれを担っているモジュールを示しています。複数のモジュールアイコンがありますが、そのいずれかを使用するというイメージになります。それ以外はソースファイルや生成物を表しています。間違っている部分に気づいたりした方いましたら指摘いただけると有り難いです。

### ソースビルドフェーズ

#### TypeScript（JavaScript）から JavaScriptを生成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866006/3468497a-7bc6-4da8-7151-730cb2ad62ee.png)

#### scss,less などcssフレームワークソース  から css を生成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866006/91c863b0-8c2a-27ce-934b-d74f128fcf7d.png)

#### 上記ファイルと、Vueのtemplate部も含めてVueビルド
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866006/af073803-30a6-ad5e-0f73-b9a233055214.png)

#### 外部モジュールも含めてBundle処理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866006/cbe9024b-f02e-471d-bd80-76fe3f83c4e7.png)

devserver（開発サービス）起動時にはメモリの中に展開されたりしている様です。Viteだとdevserver時にはbundle処理をしない事で高速化したりという情報も見かけました（情報ソース失念しました。間違ってたらすいません）

### Unitテスト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866006/7037fb86-ffa3-986b-6d30-14337d158e09.png)

※MOCHAとChaiはセット。
※「前述の各種モジュール」部分は必須

### E2Eテスト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866006/427dec67-7acf-2fdd-b3b3-06af583736cf.png)

※「外部からブラウザを操作するモジュール」部分は必須

## 感想

今回一通りモジュールを調べてみた事で、Vueの生成物が出来るまでと、それを活用したテストの流れの整理及び関係するモジュールを把握する事が出来ました。実はこれらを把握する事で、ちょっと塩漬けになっていた課題を解消する事が出来ました。
具体的に言うとstorybookという今回の記事にはないモジュールに関係しています。ビルドでエラーが出てしまっていた状態でした。しかし、モジュールの概要を把握する事で、エラーがどのモジュールに関係しているかが解り、ググる時でもキーワードを絞れたり、対応範囲を絞れたりしました。結果としてビルドエラーの解消が出来ました。

この記事を書く中で、Vueの推奨がViteになった事を知りました。Vueは各種モジュールの組み合わせで成り立っているので、この様に常時何かのモジュールのトレンドが変わっていく状況になるとおもいます。トレンド情報を追っておくのが良いと思いました。そのカテゴリで新しいモジュールが出てきた事が解るという利点もあると思います。

この記事がVueに限らずフロントエンドフレームワークを使ってる方の参考になれば幸いです。

https://2022.stateofjs.com/ja-JP/

参考：ViteとwebpackのRetention（使い続ける率）ランキング推移を見てみた時。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866006/39d2ada9-7bae-419b-92f5-877191c21ce4.png)


## 関係モジュールの公式ページ

### 基本モジュール

https://ja.vuejs.org/

https://www.typescriptlang.org/

https://developer.mozilla.org/ja/docs/Web/JavaScript

## ソース整形

https://eslint.org/

https://prettier.io/

## JavaScript変換

https://babeljs.io/

## css Preprocessor

https://lesscss.org/

https://sass-lang.com/

https://stylus-lang.com/

## ビルド

https://webpack.js.org/

https://ja.vitejs.dev/

## Unitテスト

https://jestjs.io/ja/

https://mochajs.org/

https://www.chaijs.com/

## E2Eテスト

フレームワーク

https://www.cypress.io/

https://nightwatchjs.org/

https://webdriver.io/

ドライバ関係

https://developer.mozilla.org/ja/docs/Web/WebDriver

https://www.selenium.dev/ja/documentation/webdriver/

https://www.selenium.dev/ja/documentation/webdriver/bidirectional/chrome_devtools/