【Prisma】npx prisma generate した時何が起きているのか【実験】

## 想定読者
Prismaで「npx prisma generate」をコマンドした時に何が起きているのか知りたい人

## 書いている人間
Prisma触り始めた初心者

## 結論
複数のファイルが作成される

## どうやって確かめたか
まずは、git initする。

[公式ドキュメント](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/generating-prisma-client#using-a-custom-output-path)の記載に沿って、schema.prismaで以下を記載する。
~~~
generator client {
  provider = "prisma-client-js"
  output   = "../src/generated/client"//ここを追記
}
~~~

こうすることで、npx prisma generateした時のoutput pathが
../src/generated/clientになる。

準備が終わったので、npx prisma generateする。

ここまできたら、git statusなどで確認する。

~~~
% git status
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   prisma/schema.prisma

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        src/

no changes added to commit (use "git add" and/or "git commit -a")

% git add .

% git commit 
[main 805281f] 
 21 files changed, 7993 insertions(+)
 create mode 100644 src/generated/client/default.d.ts
 create mode 100644 src/generated/client/default.js
 create mode 100644 src/generated/client/edge.d.ts
 create mode 100644 src/generated/client/edge.js
 create mode 100644 src/generated/client/index-browser.js
 create mode 100644 src/generated/client/index.d.ts
 create mode 100644 src/generated/client/index.js
 create mode 100755 src/generated/client/libquery_engine-darwin.dylib.node
 create mode 100644 src/generated/client/package.json
 create mode 100644 src/generated/client/runtime/edge-esm.js
 create mode 100644 src/generated/client/runtime/edge.js
 create mode 100644 src/generated/client/runtime/index-browser.d.ts
 create mode 100644 src/generated/client/runtime/index-browser.js
 create mode 100644 src/generated/client/runtime/library.d.ts
 create mode 100644 src/generated/client/runtime/library.js
 create mode 100644 src/generated/client/runtime/react-native.js
 create mode 100644 src/generated/client/runtime/wasm.js
 create mode 100644 src/generated/client/schema.prisma
 create mode 100644 src/generated/client/wasm.d.ts
 create mode 100644 src/generated/client/wasm.js
~~~

上記のファイルが生成されていた。

では、schema.prismaに以下を追記した状態で、さらにnpx prisma generateしたらどうなるのか試してみた。

~~~
model Hoge {
  id Int @default(autoincrement()) @id
  title String 
}
~~~
npx prisma generate を実行

git statusを実行
~~~
% git status
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   prisma/schema.prisma
        modified:   src/generated/client/edge.js
        modified:   src/generated/client/index-browser.js
        modified:   src/generated/client/index.d.ts
        modified:   src/generated/client/index.js
        modified:   src/generated/client/package.json
        modified:   src/generated/client/schema.prisma
        modified:   src/generated/client/wasm.js

no changes added to commit (use "git add" and/or "git commit -a")
~~~


git diff　を実行。
※長かったので、ごく一部のみ抜粋した。

~~~
% git diff
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 6b791ff..ac93e9c 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -23,4 +23,9 @@ model Posts {
 model Piyo {
   id Int @default(autoincrement()) @id
   title String 
+}
+
+model Hoge {
+  id Int @default(autoincrement()) @id
+  title String 
 }
~~~

→当たり前ですが、schema.prismaのmodelを編集すれば、npx prisma generateで作成されるファイルも修正されるということがわかりました。


## npx prisma genrateで何しているのか、GPTに聞いてみた
要約すると、
(1)Prismaクライアントの生成
(2)TypeScriptの型情報の生成

※本当は公式ドキュメントを読むべきです。
公式ドキュメントの部分、今後記載します。

## 感想
npx prisma generateはいつもルーチンでコマンドしていたが、npx prisma migrate dev と違って、何をしているのかよくわかっていませんでした。
今回調べられて、目に見える形で何しているのかを知ることができてよかったです。（それまでは「型ファイル」を作成するものくらいの認識だったため）（またコマンドする時に、何をしているのかわからない状態で打つのがストレスだった）