Help us understand the problem. What is going on with this article?

TypeScript サーバー 向けの プロジェクトジェネレーター を作ってみた

  • 取り敢えずコマンド一発で TS のプロジェクトを作ってくれる便利なやつです
    • 個人的に必要最低限と思うプロジェクトを生成するようにしてます
    • 元々は MS が配布してる TypeScript-Node-Starterexpress 向けの上に重厚にセットアップされていて、何が必要で、何が不要かわからなかったので、もっとスリムにならないかな?と勉強がてら作ってみたという側面があります
    • TypeScript って環境構築が地味に面倒で nodemon はしょっちゅうクラッシュするし、 ESLintPrettier の喧嘩も面倒!なんか一発でプロジェクト作りたいなという思いもありました
  • 何もかも初めての経験だったので、良い経験になりました
  • ちなみに実装そのものは JS でしてます(理由は後述)

まずは Boilerplate の作成から

  • まずはプロジェクトの雛形ということで ts-server-boilerplate という Boilerplate を作ってみました

  • このプロジェクトには nodemon を使用しておらず tsc-watch を使っています

    • 理由としては tsc-watch は tsc を叩きビルドが完了した後に node を再起動するという振る舞いを容易に実現できたからです
      • これを nodemon でやろうとすると酷く大変で諦めました
      • ただ tsc-watch を使っていても node inspector プロセスのゾンビが残っている可能性があるため、node inspector のプロセスを殺すためにkill-node-inspectorという、npm module を自作しました
      • 内容は inspector で使ってる port を listen してるプロセスを殺してるだけです
  • しかし Boilerplate を git clone して使おうとすると余計なファイルが入っていて毎回消したり編集するのが面倒…

  • なんかこう ng new my-best-app みたいに行きませんかね!?というのでプロジェクトジェネレーターの作成に進みます

プロジェクトジェネレーターの作成

  • 先の kill-node-inspector の実装により Node CLI の実装方法と npm module の公開方法を学べたので、 ng new my-best-app みたいなことできるじゃん!というわけで作成を決意
  • という訳で ts-boilerplate-generator-cli として tsg [project-name] をコンソールから叩くだけで TypeScript プロジェクト一式を勝手に作ってくれるのを作りました
  • 内容としては先程の ts-server-boilerplate を git clone してきて、いい感じに調整してるだけです(npm installgit init もします)
    • 実は Yeoman をちょっぴりリスペクトしてて、引数を抜いて tsg として叩くと簡単なウィザードも出せるようにしてます
      image.png
      • このウィザードの実装には prompts を利用しました
        • これを使うと簡単に入力ダイアログを作れるので便利です

おまけ

npm にはバグがある

  • これを作っている過程で Windows 版の npm にバグがあることを知ったのでついでに書いておきます
  • npm i --prefix foo とすると Windows では npm が上手く動きません

JS で実装した理由

  • 実は JavaScript で実装してます。TypeScript のプロジェクトを作るスクリプトなのに。
  • 理由は単純で TS はビルドに時間がかかって面倒なのに対して、JS にはそれがないので気楽に開発できたという部分があります。
    • @ts-check をかけておけば実質的に TS で開発できるというところもあります
Lycolia
🗃️大阪のSES会社で働くPGのメモ帳。👀一緒に活躍させてもらえるところを探しています
https://lycolia.info/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away