メインコンテンツまでスキップ

Frourio の導入

前のページで、クライアントの型安全 は実現しました。

しかしながら、このプロジェクトにはまだ 型安全でない 部分が存在します。それはなんでしょう?

サーバー です。

それでは、frourio をサーバーに導入し、型安全な 「1つの TypeScript」 を構築しましょう。

1. Frourio サーバーのセットアップ

1.1. API 定義を移動する

Frourio において、サーバーは前述の API 定義の延長として実装されます。

したがって、まずは、API 定義ファイルをサーバーのディレクトリに移動します。

Terminal
cd server
yarn add -D frourio aspida
mkdir api
yarn frourio --watch

別のターミナルセッションで、

Terminal
mkdir api/hi

次に、src/api にある API 型定義を server/api にコピーします。

Terminal
cp ../src/api/index.ts api
cp ../src/api/hi/index.ts api/hi

1.2. コントローラーを実装する

デフォルトでは、body は文字列として生成されており、api/controller.ts に型エラーが発生しています。

続いて、body に { hello: 'world' } を指定することで、型エラーが解消されます。

server/api/controller.ts
 import {defineController} from './$relay';

export default defineController(() => ({
- get: () => ({ status: 200, body: 'Hello' }),
+ get: () => ({ status: 200, body: { hello: 'world' } }),
}));

また、api/hi の body も { hello: 'how are you?' } に置き換える必要があります。

1.3. Frourio サーバーを起動する

server ディレクトリに $server.ts が生成されていることを確認してください。

index.ts を編集し、これを用いてサーバーを起動します。

server/index.ts
 import Fastify from 'fastify';
import FastifyCors from '@fastify/cors';
+import server from './$server';

const fastify = Fastify();

fastify.register(FastifyCors, {});

-fastify.get('/', (req, reply) => {
- reply.send({ hello: 'world' });
-});
-
-fastify.get('/hi', (req, reply) => {
- reply.send({ hello: 'how are you?' });
-});
+server(fastify);

fastify.listen({ port: 8888, host: '0.0.0.0' });

さて、frourio サーバーを起動しましょう!

Terminal
yarn ts-node index.ts

念のため、サーバーが以前と同じように動いているか確認しましょう。

Terminal
curl http://localhost:8888
curl http://localhost:8888/hi
Browser Console
const response = await fetch('http://localhost:8888');
await response.json();

1.4. クライアントを変更する

api ディレクトリを移動したので、クライアントから参照するパスも変更する必要があります。

aspida.config.js
 module.exports = {
- input: "src/api",
+ input: "server/api",
baseURL: "http://localhost:8888",
};
src/apiClient.ts
-import $api from "./api/$api";
+import $api from "../server/api/$api";

さらに、API 定義ファイルも再生成しておきましょう。

Terminal
yarn aspida

1.5. 最終的な結果

以前のページと同じように見えます。

しかしながら、その裏には 「1つの TypeScript」が実現されている という大きな違いがあるのです。


How are you?

http://localhost:3000
うまくいきませんでしたか?

次の事項を確認してみてください。

  1. バックエンドサーバーを起動していますか?(frourio-tutorial/server ディレクトリで yarn ts-node index.ts を実行)
  2. フロントエンドサーバーを起動していますか?(frourio-tutorial ディレクトリで yarn start を実行)
  3. サーバーファイルを生成しましたか?(frourio-tutorial/server ディレクトリで yarn frourio を実行)
  4. API ファイルを生成しましたか?(frourio-tutorial ディレクトリで yarn aspida を実行)

2. Frourio のその他の機能

フックやバリデーションのように、このチュートリアルには frourio の機能がすべて含まれているわけではありません。 これらについての情報は、ドキュメント を参照してください。