昨今人気を集めているGo言語ですが、メリットとして以下の点が挙げられます。
- ビルド後の実行速度が速い
- 環境構築のスピードが速い
- バージョン依存の問題が少ない
- 環境依存の問題が少ない
- ポータル性がよい
逆にデメリットとしては以下の点も良く挙げられます。
- JSON、XMLなどの扱いにも厳密な構造体が必要になる
- 冗長的になりがちな戻り値のエラーチェック
- デバッガや、Loggerなどが充実していない
- 開発時・運用時のノウハウ・ナレッジが、まだまだ少ない
そんな中、上記のデメリットをカバーするためにGoによるマイクロサービスフレームワークの存在があります。今回はGo製のマイクロサービスのフレームワークやツールキットをご紹介します。
goa :: Design-first API Generation
デザインファーストを謳うGO製マイクロサービスフレームワークです。デザインコード(goa API Design Language) のファイルを作成するだけで、マイクロサービスのコアとなるファイルを生成してくれます。goa API Design Language を改めて学習する必要がありますが、API開発を一度でも行っていれば学習コストは高くないでしょう。
開発サイクルはgoa DSLに沿ってAPIをデザインし、goagen
コマンドにより構造体やバリデーションコード、ハンドラを生成するという流れです。goa DSL
は、カスタムDSLを作成することも可能です。
go-kit/kit: A standard library for microservices.
Go Kitは分散プログラミング用のツールキットです。マイクロサービスや大規模サービスを構築するために、既存のライブラリの隙間を埋めることができ、ビジネスロジックに集中できるとあります。後述するマイクロサービスフレームワークのGizmoや、Go-Microなどでも利用されています。
NYTimes/gizmo: A Microservice Toolkit from The New York Times
gizmoは『Newyork Times』が開発したマイクロサービスフレームワークです。大きく4つのパッケージにより構成されています。
- config パッケージ
アプリケーション設定用のパッケージです。 - server パッケージ
ルータとサービスなどのサーバパッケージです。 - web パッケージ
HTTP向けのパッケージです。 - pubsubパッケージ
メッセージキュー向けのパッケージです。
フレームワークの概要はIntroducing Gizmo - The New York Timesで紹介されています。
※ ライセンスはApache 2.0 をベースに、著作権はThe New York Times Company(ニューヨークタイムズ社)となっています。
Go Micro
Microはマイクロサービスのツールキットとして、各サーバ/サービスツールをそれぞれ分割して別々にパッケージされたものです。中核となるgo-micro
、Webサービスを展開するためのgo-web
、モニタリングツールのmonitor-web
、サービスをトレースするためのtrace-web
など、マイクロサービスを構築および運用するためのパッケージが揃っています。一通り思想から理解しなければ使いこなすのが難しそうですが、Microで統一することで必要な機能が揃うので統一感のある開発ができるでしょう。
The Micro Blog - Simplifying building and managing microservicesに、Microの概要がありますのでぜひご覧ください(英語)。Micro - A microservice ecosystem. Simplifying building and managing distributed systems.では、モニタリング系ツールのデモも試せます。
koding/kite: Micro-service framework in Go
KiteはGo言語による分散システムを簡単に書けるようにしたRPCライブラリです。大きな特徴としては、サービス側のURLを知っていれば直接接続でき、URLがない場合はKONTROLと呼ばれるサービス発見メカニズムを利用して接続できるようになっています。接続認証にはJWTが採用されています。
ブログで解りやすく紹介された記事があります。
なぜGo言語でマイクロサービスを開発するのか?
今回は4つのフレームワークをご紹介しましたが、そもそもなぜGo言語がマイクロサービスに向いているのでしょうか?
マルチスレッドのコーディングが楽である
Go言語は安全にマルチスレッドコーディングが書ける言語です。他の言語と比べた場合のパフォーマンスなどは特筆すべきものがあります。もし、API開発において大量のPOSTデータやマルチスレッドなバックエンドの処理する必要がある場合には、その威力を発揮するでしょう。
ポータビリティに優れる
Go言語はポータル性に優れた言語です。例えば運用後にサーバを移設したいケースでは、特定のサーバ環境にシステムがロックオンされてしまい、思わぬ追加開発が行われることになりかねません。APIシステムは息の長いシステムになります。開発後の運用を考えると、ポータビリティに優れるGo言語は良い選択肢となります。
言語特有の縛りがある
言語の縛りがあることはAPI開発後の運用において、最大のメリットとなるでしょう。 一部でGo言語はコード記述方法が退化していると表現されています。しかし、この言語の縛りがあるがゆえに継続的なメンテナンスや開発者が変わる度にコードの癖が変わったりせず、運用保守できるようになります。
Go言語自体も採用事例も多くなり、日本語の情報も充実しつつあります。現在、Go製のマイクロサービスも日々進化を続けています。実装の敷居も低いため、プロジェクト初期の開発におけるモックアップ制作のスピードにおいてもGo言語は有力な開発言語となるでしょう。
ぜひ今回紹介したマイクロサービスフレームワークを利用し、スピード感ある開発を行ってください。