【知っ得言語】「Go」~特徴とその学ぶべき理由~
Go言語を採用する企業は増加傾向にあり、Go言語プログラマの需要が高い状態が続いています。Dockerの開発言語として採用されたことやAWSのDocker対応など、Go言語は今後間違いなく、開発や運用に欠かせない言語となるでしょう。そこで今回は、Go言語開発の背景や特徴、メリットデメリットなどをお伝えします。
この記事の目次
Go言語とは
「Go」は2009年にGoogleによって開発されたプログラミング言語の一つで、システム記述に使われていたC言語やC++に代わる言語として開発された、手続き型言語です。
また「Go」は、オープンソースのプログラミング言語として、シンプルで信頼性の高い効率的なソフトウェアを簡単に構築することを目的に作られています。
昨今、Go言語は大きな注目を浴びており、昨年株式会社ビズリーチが運営する求人検索エンジン「スタンバイ」が発表した、「プログラミング言語別年収ランキング2018」では、Go言語プログラマが年収1位を獲得する結果となったほどです。(参考記事:プログラミング言語別年収ランキング2018)
このように今後はGo言語を使ったシステム開発が増えると予想されるため、情報システム部門の方も知っておいて損のない言語であると考えられます。
Go言語の歴史
<画像出典:Renee French Renee French>
Go言語は2009年11月10日、Google Open Sourceにて発表され、2019年2月15日現在、Go I.11が最新版としてリリースされています。
Go言語はGo 1.5から毎年2月と8月にバージョンアップされており、Go 1.12は2019年2月リリース予定です。
C、C++に代わる言語として考案されたGo言語ですが、開発をスタートさせた3名「Ken Thompson、Rob Pike、Robert Griesemer」は開発に取り組み始めた時に集まってこのように決意したそうです。
「We hated C++」(引用元:Dr.Dobb’s:Interview with Ken Thompson )(C++が嫌いだ)
彼らが本気でGo言語をC、C++の代替言語にする意気込みもうかがえます。
Go言語の主な用途と開発環境
Go言語は処理が速く、マルチプラットフォームに対応することから、webサーバー構築やwebアプリケーション開発に使われます。またiPhone、Androidといったモバイル機器上で動作する、ネイティブアプリケーション開発にも利用できます。
Go言語プログラムの標準パッケージには、コンパイラとツール群が入っており、エディタがあればコーディングできる仕様です。またエディタプラグインやGo言語対応のIDEも多く作られており、学習は他の言語に比べるととても簡単です。
また、採用企業も増えています。開発元であるGoogleも開発の一部ではGo言語が使用され、クラウドストレージサービスである「DropBox」もGo言語の採用を表明しています。国内では、転職支援サービス「MIIDAS」や社内SNS「Talknote」、ブログサービス「はてな」、フリマアプリ「メルカリ」、ニュースアプリ「Gunosy(グノシー)」などでは、サービスの一部にGo言語を使用しています。
Go言語で開発されたDocker
DockerとはGo言語で開発された、コンテナ型仮想環境を提供するツール(参考記事:使える! 情シス三段用語辞典62「Docker」)です。アプリケーションやミドルウェア、ライブラリなどはDockerイメージとしてコード化されています。
このDockerイメージをコピーしてコンテナ化(ビルド)することで、他のマシンでも同じコンテナ(環境)を生成できるため、デプロイ作業の効率化やコンテナとAWSなどのクラウドサービスを利用した分散アプリケーション開発が活発化しています。
このような背景から、Go言語を採用する企業は増えています。クラウド時代の情シスとしては、Go言語を知ることはもはや必須かもしれません。
Go言語の特徴とメリット〜実装編~
Go言語はC言語に似た構文や文法で作られています。そして特徴は、メリットそのものと言えるものばかりです。まずは、実装に関わる部分をまず見ていきましょう。
シンプルな機能と可読性の良さ〜学習を容易にしてコーディング効率を上げる
例えば、Go言語の繰り返し構文は「forのみ」、分岐も「if」と「switch」だけで、とてもシンプルな機能仕様のため、学習しやすい言語です。
さらにGo言語は左から右に読むだけで理解できるように設計されているので、可読性が高いです。
以上のようなシンプルさと可読性の高さは、C言語のような多様なコーディングを認めないことと同じですから、コーディング規約は簡素になり、プログラマはコーディングに集中できて、生産性が向上するでしょう。
外注したプログラムのコードレビューも楽になると期待出来ます。
仕様に並列処理を含んでいる
Go言語には非同期の並列処理が標準実装されており、マルチコアプロセッサなど最新技術をキャッチアップする仕様です。
Go言語の並列処理の仕組みは「ゴルーチン」と呼ばれ、独立動作する実行単位がスレッドに割り当てられます。ゴルーチンの使い方は、C言語のような別処理は必要なく、並列処理させたい関数の前に「go」と付けるだけです。
Go言語の特徴とメリット〜運用・システム構築編
次に、Go言語で作られたアプリケーションやサーバーについて、運用やシステム構築における特徴とメリットをご紹介します。
クロスコンパイルが可能
クロスコンパイルとは、コンパイラが使用しているOSとは違うOSの実行ファイルを作ることができる機能です。
例えばMacでexeファイルを作り、Windowsマシンにコピーして実行できます。
社内にさまざまなOSが混在していても、ひとつのソースコードから、複数環境に対応した実行ファイルを作ることができるでしょう。
実行時ランタイムが不要
Go言語がクロスコンパイルに対応していることは、実行時ランタイムが不要であることを意味します。社内のアプリケーション展開も楽になるでしょう。
高速なコンパイルと実行速度
C言語にあるようなコンパイル前のプロプロセス処理が必要な構文を含んでいないため、コンパイルは高速です。
また前述のように、Go言語は実行時ランタイムを使わないため、実行速度も速くなります。
スケーラビリティが高い
シンプルな機能しか持たないGo言語は、プログラマ間の表記揺れを減らすため、多人数のプログラマが開発するプロジェクトでは、コードレビューが格段に楽になります。
また、コンパイルと実行速度の速さも含めると、大きなソースコードが必要な開発に向いている言語と言えます。
安全性が高い
ガベージコレクションはあらかじめ標準実装されています。C言語のような複雑なメモリ管理は必要ありません。
また、これまでに挙げた、非同期並列処理の標準実装に加えて、同期処理もC言語より楽に実装できる配慮がされており、表記揺れも少ないことから、安全性が高いシステムを構築できます。
Go言語のデメリット
Genericsや継承がないため、型の汎用性やプログラムの再利用をしづらいことは、CやC++に比べて劣っているところになります。
また、PythonやPHPのような動的言語ではなく、C言語と同じ静的言語のため、実行するためにはコンパイルを必要とします。
これらのデメリットを理由に、Go言語には批判の声もありました。しかしながら、最近はメリットに比べるとデメリットは小さいと考える技術者が増えており、Dockerの盛り上がりなどもあり、注目の言語の一つになっています。
参考:Go Cloudプロジェクト
GoogleとGo言語開発チームは、クラウドアプリケーションで使用されている一般的な機能を利用できる汎用API開発を目的とした「Go Cloud」プロジェクトを発表しました。
Go Cloudが成功すれば、ソースコードを書き換えることなく、さまざまなクラウドサービスに対応するアプリケーション開発が実現します。
なお現在、Go CloudはAWSへの対応を進めています。
まとめ:IT技術者にはGo言語が欠かせない時代か!?
Go言語は単なるC言語の代わりではなく、シンプルな機能を生かしたスケーラビリティ、安全性、コードの可読性など、従来の言語とは違う考え方を取り入れた言語です。
以上のメリットに加えて、コンパイルや実行速度の速さから、さまざまな企業がGo言語を採用し始めています。
そしてGoogleが開発したことも、Go言語採用に拍車をかけているようです。
また、クラウドサービスの構築方法として、Dockerに注目が集まっていることも影響しているでしょう。Go言語とKubernetes(参考記事:使える! 情シス三段用語辞典74「Kubernetes(クーべネティス)」)など周辺の知識は“知っ得”と良いことがあるかもしれません。
【執筆:編集Gp 恵良 信】