KoaJS+TypeScriptの環境を作る

KoaJSを始めました。TypeScriptの環境を作ってみました。

NodeJS+TypeScriptのセットアップ

まっさらな状態から環境を作ってみます。

前提として、NodeJSはインストールされているものとします。

※NodeJSのバージョンについては、最後の方の「追記」を参照してください。

$ mkdir app1
$ cd app1
$ npm init

TypeScriptのセットアップを行います:

$ npm install --save-dev typescript ts-node
$ mkdir src

ts-nodeは、NodeJSの環境でTypeScriptを直接実行できるようにするツールです。

次に、TypeScriptのコンパイル設定を行うために、以下のページからtsconfig.jsonをコピーします:

GitHub - Microsoft/TypeScript-Node-Starter: A starter template for TypeScript and Node with a detailed README describing how to use the two together.

$ wget https://raw.githubusercontent.com/Microsoft/TypeScript-Node-Starter/master/tsconfig.json

この設定では、srcにTypeScriptのソースを入れ、distにトランスパイル後のJavaScriptファイルが入ります。

そして、package.jsonに実行とビルドを行うコマンドを設定します:

{
  .....
  "scripts": {
    "start": "ts-node src/server.ts",
    "build": "tsc",
    .....

試しに、適当な内容でsrc/server.tsを作ってみます:

// src/server.ts
console.log("Hello, World!");

これで実行してみます:

$ npm start
.....
Hello, World!

ビルドしてみます:

$ npm run build

生成されたJSファイルを実行します:

$ node dist/server.js
Hello, World!

これでNodeJS+TypeScriptの最低限の実行環境が出来上がりました。

Koaのセットアップ

Koaをインストールします:

$ npm i -S koa
$ npm i -D @types/koa

動作を確認するために、src/server.tsを以下のように書き換えます:

import * as Koa from 'koa';
const app = new Koa();
app.use((ctx: Koa.Context) => {
  ctx.body = 'Hello, Koa!';
});
app.listen(3000);

http://localhost:3000/を開き、「Hello, Koa!」と表示されればOKです。

参考情報

以下のリポジトリが参考になりました。git cloneしてそのまま使ってもいいかもしれません。

github.com

あと、NodeJS+TypeScriptだと、MSのサンプルが参考になります:

github.com

あとがき

ここ数日間、NodeJSのフレームワークを探し回っていましたが、Koaはかなり良さそうに思います。

さらに調べてみたいと思います。

追記1:ライブリローディング

この記事では最低限のセットアップ方法だけを書きましたが、ライブリローディング(ソースコードを変更すると自動的に再読み込み)の方法を追記しておきます。

ライブリローディングにはnodemonを使います。

$ npm i -D nodemon

nodemon.jsonファイルを作成して、以下の設定を入れます:

{
  "verbose": true,
  "exec": "ts-node ./src/server.ts",
  "watch": [
    "src/"
  ],
  "env": {
    "NODE_ENV": "development"
  },
  "ext": "ts json"
}

package.jsonstartの値をnodemonに変更します:

{
  .....
  "scripts": {
    "start": "nodemon",
.....

これでnpm startで実行すると、ライブリローディングが効くようになります。

追記2:NodeJSのバージョン

Koaのページには、NodeJS v7.6.0以上が必須と書かれています(現時点で)。

これはES2015やasyncなどの機能を使うためですが、TypeScriptにはその機能が含まれているので、上記のバージョンよりも古いものでも大丈夫なはずです。

僕の環境ではv6.11.1を使い、asyncが動作することは確認しました。

ただ、万が一エラーが出る場合は、バージョンを合わせる必要があるかもしれません。