LINE2020-02-12この記事は約5分で読めます。こんばんわ、hisayukiです。FirestoreとFaunaDBの比較を見ていてFirestoreにはgRPCがあると書かれていたのですが、そもそもgRPCって何?ってなったので調べてみました。RPCを実現するためにGoogleが開発した通信プロトコルの1つです。ProtcolBuffersを使ってデータをシリアライズし、通信にHTTP/2が使えるということで高速通信を実現できます。クライアント側がメソッドを実行するのと同じような感覚で、サーバーサイドのメソッドを実行できるようになるイメージです。APIのように実装ルールが統一されていないような仕組みを脱却するために、近年注目を浴びているようですね。言語やプラットフォームに依存せずに、構造化データをシリアライズ化します。version」までバージョンが進んでいます。独自の定義ファイル(.proto)に通信元と通信先のインターフェースを明記します。Bufferコンパイラのprotocで、明記した定義ファイル(.proto)をコンパイルします。protocのには使用したい言語に応じて設定できるプロパティがあります。ちなみにGolangの場合はこのような感じになります。--go_out=plugins=grpc:helloworld--go_outの部分が言語ごとに設定するプロパティになります。このプロパティを使いたい言語用のプロパティにしてコンパイルをすることで、使いたい言語のソースコードを自動生成します。以下の言語が自動生成をサポートしております。(beta)結構幅広くサポートされており、こちらのページからQuickStartも提供されています。定義ファイル(.proto)に静的型付言語のような記述で、何をRequestとして受り、何をResponseとして返すのか。Requestとして受け取るものは何で、中身のデータ型はなんなのか。処理後のResponseとして返すものは何で、中身のデータ型はなんなのか。ここまで実装前に予め既約として.protoに書いておけます。.protoから実装用コードをジェネレートするので、DocumentsやSchemeのメンテが遅れていくことを防ぎます。変更の適用についても、先に.protoを修正しないとコードの自動生成に反映されません。一番はJSONのような中身のデータの型が解らないデータではなく、定義の段階で中身のデータの型を決めれることが個人的には一番素晴らしい機能だと思ってます。HTTP/2により通信が高速HTTP/1.1ではステートレスが大前提なので、都度Cookieや独自のTokenを送る必要がありました。HTTP/2ではHPACK圧縮という方式を用いてヘッダフィールドの圧縮を行っています。これにより、初回以降の送信ははヘッダ差分のみとなります。HTTP/2についての詳しい話はこちらがわかりやすかったです。Buffersでバイナリベースにすることで転送量そのものが削減されています。モバイルユーザーに対しても優しい仕様になります。APIのようにcurlやAPI用のテスティングツールだけではデバッグは難しそう。最近はgRPC向けのデバッグツールも増えてきてるみたいです🤔ブラウザはHTTP/2が使えないブラウザはgRPCを直接使うことができないため、ブラウザからリバースプロキシまでの間はHTTP/1.1での通信になるります。そのためリバースプロキシを使って、通信規格の変更をする必要があります。構成としてはこんなような感じ。リバースプロキシからの通信はgRPCが使えるのでHTTP/2での通信が可能です。ここではenvoyを使ってますが、nginxでやる方法もあるみたいです。Qiita先日gRPC-WebがGAされました。(qiita.comまとめ思想的には面白いし、通信についての速度は確実に早くなるので使ってみたい。RESTに比較して難しい。次回作とか自分の勉強でやってみるのはありだけど、既存に組み込むのは今の所なしかなぁ・・・まずはマイクロサービス化して、機能をContainer単位で分けて、そのあとにContainer間通信する場合には使ってみたいかも。あと、現段階の個人の知見だとGraphQLのが使いやすそうって感じもあります。技術ネタFirebaseでチャットアプリをつくってみたこんばんわ、hisayukiです。Codelabを試してみました。今日は実際にFirebaseのサンプルを作ってみたのでそちらの内容を書いていきたいと思います。Fireb...技術ネタFaunaDBというDatabaseサービスを使ってみたこんにちわ、hisayukiです。先日JSFrameworkのまとめを書きました。Codelabをやってみたこんばんわ、hisayukiです。年明けてすぐですが、firebaseに最近興味をもったので触ってみようかなと。フロントフォーム作るのめんどいなーって思ってたら、Codelabに出会ったのでそれについて書いてきます。コメントをキャンセルメールアドレスが公開されることはありません。