0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

grpc_tools_node_protoc_tsを使って.protoファイルからTypeScriptの型定義ファイルを生成する

概要

grpc-toolsを使って.protoファイルからNode.jsのgRPC clientコードを生成するでは、javascriptのmessage定義とclient実装を自動生成しましたが、今回は、これらのjavascriptに対応する型定義ファイル(.d.ts)を自動生成してみたいと思います。

前提

grpc-toolsを使って.protoファイルからNode.jsのgRPC clientコードを生成する生成するまでを手元で動作させていることが前提です。

また、プロジェクトディレクトリに今回使用するプラグイン grpc_tools_node_protoc_t をインストールしておく必要があります。

npm i --save-dev grpc_tools_node_protoc_ts

型定義ファイルを生成する

次のコマンドを実行して型定義ファイルを生成する。

grpc_tools_node_protoc \
--plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts \
--ts_out=. \
hero/hero.proto

生成されるファイルの確認

  • hero_grpc_pb.d.ts
    • hero_grpc_pb.jsに対する型定義ファイル
  • hero_pb.d.ts
    • hero_pb.jsに対する型定義ファイル

おまけ

生成されたjs/.d.tsを使って実際にクライアントコードを動かしてみます。
今回サンプルで使用している.protoファイルのserver実装は sample/04-grpc にあるので、事前にこのリポジトリを取得してserverを立ち上げておきます。

クライアントの実装は次のようになりました。

client.ts
import * as grpc from 'grpc';
import * as hero_grpc_pb from './hero/hero_grpc_pb';
import * as hero_pb from './hero/hero_pb';

const client = new hero_grpc_pb.HeroServiceClient(
  '127.0.0.1:5001',
  grpc.credentials.createInsecure(),
);

const req = new hero_pb.HeroById();
req.setId(1);

client.findOne(req, (error, res) => {
  if (error) {
    console.log(error);
  }
  console.log(res.toObject());
});

実際に実行してみます。

$ ts-node client.ts
{ id: 1, name: 'John' }

参考

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?