採用事例で学ぶGoLangの使いドコロ

Image from: https://github.com/golang-samples/gopher-vector

皆さんこんにちは、まさきです。10年以上前に治療した歯の詰め物が最近になって一斉に外れだしてきました。歯が悪いと食事もあまり楽しめませんよね。皆様も歯の健康にはお気をつけください。

最近GoLangが熱い?

最近、弊社エンジニアの間でgoogleの開発したプログラミング言語Go(以下GoLang)の話題がでることが多くなりました。世間様ではどうなのだろうと思い、googleトレンドの動向を見てみますと、2009年の発表以降順調に注目を集めているように見えます。

googletrend.png

また、gitリポジトリのホスティングサービスgithub、プログラミングに特化したQ&Aサイトstackoverflowなどでの言語の利用状況から人気言語ランキングを集計しているThe RedMonk Programming Language Rankings 2015年1月版では17位と、そこそこの人気を集めています。

langrank.png引用元:http://redmonk.com/sogrady/2015/01/14/language-rankings-1-15/

プログラミングの情報共有サービス「Qiita」においても多数の記事がアップされており、なかなか盛り上がって来ています。

皆様の中にも、「自分たちのサービスでGoLangを利用したい」と考えていらっしゃる方も多いと思いますが、そもそもGoLangを利用することでなにが良くなるのでしょうか。

そこで今回は、国内外の採用事例から利用のメリットと使いドコロを考えてみたいと思います。

軽くおさらい

GoLangは以下の様な特長を持つ、googleが2009年に発表したオープンソースで開発されているプログラミング言語です。

  • コンパイル型の静的型付言語
  • 並列処理機構を重視
  • ガベージコレクタの実装
  • 依存性管理を重視したパッケージ機構
  • C言語風の簡素な言語仕様
  • コンパイル処理時間の短縮を重視

コンパイル時にすべてのパッケージは静的にリンクされるため、実行ファイルは1つのバイナリファイルになります。

このためデプロイなどの負担も軽くなり、運用時のことも考えられています。

インストールは比較的簡単で、公式アーカイブからのインストールの他に、yumやapt-get、homebrewといった各種パッケージマネージャを利用することも出来ます。

また、チュートリアルも充実しており、その場で試せるプレイグラウンドもWeb上に用意されていますので気軽に学習を始める事が出来ます。

googleなどで情報を検索する際には、「go言語」「golang」を軸に検索をかけると良いでしょう。

採用事例

google:Vitess

まずはGoLangの生みの親、googleでの採用事例です。VitessはWeb用途のMySQLデータベースのスケーリングを容易にするためのサーバとツールのセットです。YouTubeのMySQLインフラに用いられています。

hashicorp:Serf & Consul &Terraform

SerfConsulTerraformはvagrantの開発元であるhashicorp社が提供しているオーケストレーション・ツール群です。

InfluxDB:InfluxDB

InfluxDBはオープンソースの時系列データベースです。システムメトリクスの保存やアクセスログの集計・解析に使われます。

SoundCloud:prometheus

prometheusはSoundCloud社が開発するシステム監視ツールです。

Gunosy

ニュースアプリ「Gunosy」の内部を構成するマイクロサービスの構築にGoLangを利用されています。こちらのスライドに詳しく紹介されています。

株式会社HOYA:VoiceText Web API

メガネのレンズ等で有名な株式会社HOYAが提供しているVoiceText Web APIというサービスの一部にGoLangが利用されています。こちらのスライドに詳しく紹介されています。

採用事例から見える使いドコロ

上で挙げた採用事例でわかるように、インフラ寄りのプロダクトに多くの採用が見られます。これはLL系と比べるとかなり速い処理速度、使いやすい並列処理機能を期待してのことだと思われます。

同じ理由で実行回数は多く、処理時間がそこそこ掛かるようなAPIサービスの構築にも向いているでしょう。

それに対し、フロントに近い領域での利用はあまり見かけません。この領域ではやはりRailsやDjangoや多くのPHP製フレームワークが強く、あえてそこにGoLangを利用する、という強い動機付けが無いのかもしれません。

しかし、GoLangに同様のフルスタックなWebフレームワークが無いわけではなく、revelBeegoといったフレームワークがあります。

デプロイのし易さから、これらのフレームワークの発展次第ではこの分野でも多く利用されるようになるかもしれません。

まとめ

処理速度と並列処理でアドバンテージがあるGoLang。インフラに近いところの処理には積極的に採用を考えてみても良いでしょう。また、そこそこ重い処理を、高スループットで処理することを求められるようなAPI実装にも向いています。

しかしながら、フロントに近い領域での採用は未だ発展途上。コミュニティに貢献するチャンスかも知れません。

それでは、皆様良きエンジニア・ライフをお過ごしください!

関連記事