今流行のGo言語とは!?

#エンジニアブログ

Web開発領域において、近年様々なプログラミング言語がリリースされ、その種類も増えています。そんななか、「どのような言語で開発するべきか」、「現状の言語に似た言語で、より効率的な開発ができるものはないか」といった話は開発現場では常に話題に上がります。
今回はその中でも、メルペイ(メルカリ)、クックパッド、DropboxのWebサービスを開発する言語として台頭してきた「Go言語」について、どのような言語なのか、そしてなぜ台頭してきたのか、についてご紹介したいと思います。

 

 

■Go言語とは

Go言語は、2009年Googleによって開発された、オープンソースのプログラミング言語です。「Go」・「Golang」とも呼ばれています。

Web開発に適した言語であり、高速処理かつシンプルなコード体系が特徴です。特に他の言語との顕著な違いとして、シンプルさを追求した結果、言語としての機能を必要最小限に抑えている点があげられます。プログラムでは通常、エラーを回避する例外処理や他の要素を転用しながら別の要素にする「継承」といった機能がありますが、Go言語ではそれらを排除し、シンプル化にこだわっています。

また、Go言語はWindowsやLinux、Mac、iOS・Android等、様々なOS上でも動作する特徴を持ち、開発され12年たった現在では、メルペイ(メルカリ)、クックパッド、Dropboxなどの著名なサービスを支える主要な言語として広く普及しています。

 

■Go言語の有用性

ニーズが高まっているGo言語ですが、どのような開発が可能になるのでしょうか。

具体例も交え利点をご紹介します。

 

・コードのシンプルさ

Go言語は他の言語と比べ、言語の構造がシンプルで、短い記述でもプログラムが動くよう設計されています。さらに、組み合わせが自在に効くので、小さいプログラムを連結し複雑なシステムや並列で処理するシステムを開発できることも利点です。

 

・プログラムの処理速度の速さ

プログラミング言語には、PCが高速処理しやすいように一度機械語に変換が必要な言語(この変換をコンパイルと言います)と変換が不要なものとに分けられます。

前者は主にC言語やJavaが挙げられ、高速処理に変換されたプログラムを使用することでプログラム処理の高速化を実現します。Go言語もこちらに属し、プログラムの実行速度が早く、さらにコードから機械語への変換も高速に行われるという特徴を持っています。後者はPHPやJavaScriptが挙げられ機械語に変換されていないプログラムをそのまま実行するため、実行速度は遅めです。

 

・チーム開発に向いている

Go言語はシンプルなコードで、名前(コードの意味合い)やモジュールを管理できるので、小さい範囲での開発が容易になり、開発範囲の切り出しがしやすく、チームや複数人での分担しながらの開発にも向いています。プログラム内のロジックも簡潔になり、プログラムの属人化を防ぎ、チームとしてのメンテナンス性が向上します。

 

 

・スマートフォンアプリの開発

Go言語は、iPhoneやAndroidアプリのための開発パッケージ、「Go Mobile」を提供しており、スマートフォンアプリの開発も可能です。「Go Mobile」では、Go言語のみでもアプリ開発ができますが、iPhoneやAndroidでの主力開発言語Kotlin、Swift からのライブラリを呼び出したり・呼び出されたりといった連携機能も充実しています。

また、iPhoneやAndroidそれぞれに対応しているのも特徴の1つです。

 

・ドローンやIOTへの活用

Go言語を用いれば、ドローンやロボット、IOTの開発も可能になります。Go言語には、すでにドローンやロボット開発向けのフレームワーク「Gobot」が提供されており、それを用いてマイクロコンピュータやロボット開発、デバイス連携・センサーの制御が比較的簡単に実装できるようになっています。

例えば、ドローン開発では、Gobotでドローン操縦やカメラ撮影をプログラム化し、プログラミングでドローンを操作することが可能です。

 

・マイクロサービスの開発のしやすさ

最近のシステム開発では1つのシステムをまとめて大規模にする手法のほかに、小さな機能を独立化させ、それを連結して1つのシステムを組み上げる、マイクロサービスといった手法も出てきました。最近のWeb開発では開発スピードが求められる傾向にありますが、大きなシステムを1つにまとめてしまうとプログラム改修やバグ修正時に影響範囲やテスト範囲も広くなり、開発スピードが遅くなってしまいます。それを解消するため、1つ1つの機能を独立化し、機能間が連携する部分だけに影響範囲を限定的に留めることで、開発スピードを上げていく、という手法がマイクロサービスです。

Go言語では、そんなマイクロサービス向けのライブラリ「goa」や「swagger」を提供しており、マイクロサービスの開発の促進をしています。

 

・クラウド環境での開発のしやすさ

GCP(Google Cloud Platform)やAWS(アマゾン ウェブ サービス)、Azureといったクラウド環境での開発は一般的になってきていますが、更に複数のクラウド環境にまたがるインフラ構成や各クラウドが得意とする処理をクラウド間でデータ連携をする、といった複雑な構成も増えています。

通常、GCPとAWSでの異なるクラウド間のデータ連携は、それぞれのクラウド向けの開発ツールで実装して開発する必要があり、効率的ではないのが実情です。

そこで、GoogleのGo言語開発チームは、それを軽減するために、各クラウド間の連携や接続がしやすいように、開発サポートツール「Go Cloud」を開発しました。

このGo Cloudを利用することで、クラウド間の連携をAPIで行うことができ、クラウドに依存しない柔軟な開発が可能となります。

 

エンジニアがGo言語で開発できるようになると

Go言語は様々な場面で応用がきき、Googleが開発したプログラミング言語という背景もあり、今後も新しいサービスやパッケージ化も期待できます。

実績や導入面で見るとまだまだこれからの言語ですが、その分経験を積んだ・開発できるエンジニアが少ないとも言えます。C言語やJavaともプログラミングの構文が似ており、その経験がある方は比較的早く習得できると思われますので、Go言語スキルの習得を目指していくことは、エンジニアとしてのステップアップに繋がり、ドローンやマイクロサービスといった、新たなITビジネスにも開発の場が広がるでしょう。

 

 

学んでおきたいフレームワーク

実際にGo言語での開発案件に携わることになった場合、いくつか身につけておきたいフレームワークがあります。フレームワークとは、プログラム開発をする上で、よく使われる機能やセキュリティ向けの機能がまとまったパッケージのようなものです。開発者はそれを自分で開発することなく、その機能を呼び出すことで利用できるので、開発工数を削減できる点がメリットです。一方で、デメリットとしてはフレームワークに沿ったルールや制約があり、それに沿って開発する点が挙げられます。

一般的な開発においても、企業側ではよくフレームワークでの開発を求められることが多いため、代表的なGo言語のフレームワークをご紹介します。

 

Gin

比較的古くから利用されているフレームワークです。Gin自体もGo言語で開発されており、高速に処理するように設計されているのが特徴です。

 

Echo

小規模から中規模向けのWebアプリケーション開発に適したフレームワークで、Ginよりも機能が多いこともあり、最近注目されています。フレームワークの活用部分を限定することで、フレームワークの制約を極力小さくし、自由度のある開発に向いています。

 

Revel

フレームワークの機能が多岐にわたり、大規模開発に適したフレームワークです。機能が充実している分、フレームワークの制約が多いのでコーディングの柔軟性が無かったり、フレームワークで覚えることが多く習得するまでに時間が掛かる、という側面もあります。

 

■まとめ

Go言語は、今後Web業界やIOTに広く活用されていくことが予想されますが、まだまだ新しい言語で、エンジニアの数が不足しているのが実情です。将来性のある言語でかつ新しく何か言語を習得していきたい、という方にはおすすめの言語です。

関連する記事