目次
現代では新しいプログラミング言語が次々とリリースされ、有名なものから知名度が低いものまで含めると、200種類以上もの開発言語が存在しています。そのような中、近年急激に人気が高まっているプログラミング言語があります。それが、Go言語(以下、Go言語とします。)です。リリースから徐々に開発環境が整備され、2015年にはスマートフォン開発にまで領域を拡大しています。
本記事では、将来性の高いGo言語の概要や活用事例、特徴やGo言語でできることなどについて詳しく解説していきます。
Go/ゴー言語とはどのような開発言語か?
Go言語はGoogleによって2009年にリリースされた、比較的新しいプログラミング言語の一つです。Go(ゴー)が正式名称ですが、それだけだと別の意味に捉えられてしまうこともあり、Go言語やGolang(ゴーラング)の通称で呼ばれています。この記事でもGo言語で統一し、説明します。
Go言語の公式サイトでは「オープンソースのプログラミング言語で、シンプルで信頼性が高く、効率的なソフトウェアを簡単に構築できる。」とされており、いくつか開発事例を列挙すると、世界的な動画配信サービスの「YouTube」や、フリマアプリの「メルカリ」、国内有数のグルメサイトとして名高い「ぐるなび」など、有名なWebサービスの開発などに用いられています。
またGo言語は、C言語の伝統に則ったコンパイル言語ということもあり、文法の多くを受け継いでいます。そのため、C言語並の処理速度、さらにはC言語以上のシンプルさと使い勝手の良さも大きな特徴としてあげられるでしょう。
当初はmacOS、Linuxのみのサポートでしたが、その後、Windows、Andoroid、iOSなどさまざまなOSにあわせてサポートも対応できるようになりました。そのため、比較的新しい言語であるにもかかわらず、上記のように多くの企業がシステムやソフトウェア開発に採用しているのです。
Go言語の特徴は?
Go言語の主な特徴は、簡潔なコード記述ができる点と軽量な並列処理が可能な点です。Googleは既存のプログラミング言語が抱えていた問題、「ソースコードの複雑さや肥大化」を解決するために、既存言語の良い特徴をできる限り損なわないよう、Go言語を開発しました。
その結果として、C言語と同等の処理の速さと、遙かにシンプルで書きやすいコードの記述を兼ね備えた言語になりました。そのシンプルな点は誰が書いても同じようなコードになることから、複数のプログラマーで開発しても、プログラマーごとの書き方に大きな差が生まれにくい点も特徴の一つと言えます。
軽量な並列処理が可能という特徴は、マルチコアやネットワーク化されたシステムの開発に適している言語として、さまざまな分野で需要が高まっていると言えるでしょう。
Go言語のメリットは?
さて上記で述べてきたような特徴のあるGo言語ですが、開発に活用するとどのようなメリットがあるのでしょうか?具体的には以下の5点が主なメリットとして挙げられます。
(1)コードを簡潔に記述できる
(2)高速で動作する
(3)並行処理・並列処理が優れている
(4)複雑なシステム構築に向いている
(5)安全性が高い
それでは具体的に一つ一つ見ていきます。
コードを簡潔に記述できる
Go言語は、他の言語に比べて機能を削ぎ落とすことで、コードの記述量を少なくしたプログラミング言語です。そのため、シンプルで可読性が高い点がメリットであり、特徴と言えます。例えば、繰り返し構文はfor文しかなく、while文やdo/while文などはありません。そのため、for分しか使えないからこそ、コードの統一感が簡単に実現でき、プログラマー毎の表示のばらつきを抑え、コンパイルを高速化することができるのです。
高速で動作する
Go言語は書かれたコードを実行する際に、事前に機械語に変換できるコンパイラ言語です。このようなコンパイラ言語は、PHPやPythonなどのインタプリタ言語と比べると高速な処理が可能になります。
また、Go言語と同じコンパイラ言語であるJavaの場合は、二段階方式で機械語に変換していますが、Go言語は機械語に変換する際に、中間言語に変換する必要がなく直接機械語に変換できるため、より処理が速くメモリの消費も抑えることができます。これは工数の削減にも繋がるので大きなメリットと言えます。
並行処理・並列処理が優れている
並行処理と並列処理の両方が備わっており、これも高速処理を実現する要因となっています。並行処理は、複数のコアで一定期間内に複数の処理を順不同に行うことです。対して、並列処理は、複数のCPUを効率良く使うことで、処理速度を向上させ、同時に処理を行うことが可能です。
複雑なシステム構築に向いている
Go言語はコードの書き方が厳密に決まっているため、プログラマーごとの書き方に大きな差が生まれにくいとされています。そのため、大規模で複雑なシステム構築を複数のエンジニアで開発しても、チームでの開発や保守・運用がしやすいというメリットがあります。 また、バグや脆弱性があれば柔軟に修正することも可能です。
安全性が高い
コードがシンプルなので、複数のプログラマーが開発にかかわっても、書き方に大きな差が生まれにくいと先述致しましたが、それはつまり、ミスが起きづらい仕様といえます。
また、C言語ではメモリの安全性が問題になっていましたが、Go言語ではメモリの安全性も考慮されています。Go言語にはエラーの発生しやすい「ポインタ演算」の機能がそもそも備わっていないため、メモリの安全性が高くなってるのもメリットの一つです。
GO言語のデメリットは?
上記のようなメリットが挙げられるGo言語ですが、実際にはデメリットも考えられます。
以下の4点が主なデメリットです。
(1)継承ができない
(2)三項演算子ができない
(3)Genericsの情報がすくない
(4)例外処理がない
デメリットについても一つ一つ解説していきます。
継承ができない
JavaやC++などのオブジェクト指向の言語には「継承」という機能がありますが、Go言語は継承ができません。継承とは、あるクラスの性質を別のクラスに受け継ぐことができる、オブジェクト指向の基本的な機能のことを指します。この継承の機能がGo言語にはないため、既存のコードの使いまわしが難しく、コードの修正もやりにくくなるという事がデメリットになります。
また、Go言語はオブジェクト指向的に使用されますが、Googleからは、「Go言語はオブジェクト言語である」と明言されているわけではありません。そのため、オブジェクト指向の考え方で、Go言語を用いてプログラミングをおこなおうとすると戸惑うということがあり得ます。
三項演算子ができない
Go言語には三項演算子がありません。三項演算子を用いると、if文のような条件分岐を省略して記述することができます。上手に使えば処理を一行でまとめられる便利な文法ですが、Go言語ではサポートされていません。そのため、Go言語では条件分岐の記述が長くなると言うデメリットがあります。
Genericsの情報がすくない
Go言語が、コードをシンプルにするために切り捨てた機能の一つにGenericsがあります。そのため、最近までGenericsが実装されていませんでした。2022年3月のアップデートでGenericsが実装されましたが、実装されてからの期間が短い為、情報が乏しく、本番環境で実装された事例もほとんど見受けられません。大規模な新機能が追加された後は、新しいエラーが発見される傾向になるため、Go言語でGenericsを用いる際には注意する必要があります。
例外処理がない
他の言語では、例外が発生したときに、例外処理を記載します。しかし、Go言語では、「例外が発生した場合は呼び出し元が処理をする」という考え方に基づいているため、例外処理の機構を用意していません。この理由は、Go言語がコードのシンプルさを重視しているからです。そのため、決まった型以外のコードを正しく処理することができないという点がデメリットになります。
Go言語でできること
Go言語は汎用性が高く、パソコンやスマホのアプリから、Webサーバ構築、CLI開発、API開発と、幅広くさまざまな開発が可能です。この章では、Go言語でできることを5つ紹介していきます。
(1)Webサービスの設計開発
(2)スマートフォン向けのアプリ開発
(3)ドローン・IoT開発
(4)CLI開発
(5)APIサーバー開発
Webサービスの設計開発
先述したアプリケーションや、様々なサービスの開発で採用されている実績のとおり、Go言語はWebサービスの開発に適していると言えます。マルチプラットフォーム対応のクロスコンパイル機能のおかげで、WindowsやMacOSなど環境を選ばずに動作するのも、Go言語がアプリ開発に最適な理由と言えるでしょう。以上の理由から、Go言語はWebサーバー・Webサービスの構築に向いており、特にWebメディアやショッピングサイトなど、自社でプラットフォームを持っている企業で多く導入されています。
スマートフォン向けのアプリ開発
Go言語はエラーの検出性が高いため改修がしやすく、スマートフォン向けのアプリ開発にも向いている言語です。そのため、AndroidやiPhone向けのアプリ開発においてもGo言語が役立ちます。
配布されている「Go mobile」「Go Cloud」などのアプリ開発に役立つツールや、WAFを使えば、Web・アプリ用とコードを書き換える必要がなく、手軽にスマートフォンアプリの開発ができます。Androidはもちろん、iOSにも対応しているのも人気の理由です。
ドローン・IoT開発
Go言語はWeb向けという側面が強い言語ですが、並行処理が得意で汎用性も高い点から、ドローンやIoT開発にも適しています。Go言語には、Gobotというフレームワークが公開されており、これを利用すればロボットやドローンを操作するコントローラーやキーボードなどを制御するシステム開発が簡単に作成可能です。
またGobotにはネットワーク上のデバイスや、複数のデバイスから相互で通信する機能があるため、外出先から遠隔操作したり、センサーが感知した情報を他デバイスに伝えたりするIoT開発にも使用されています。
CLI開発
Go言語はCLI開発に使用されています。CLIとは、コマンドを実行する画面で動作するツールのことです。アプリケーションのなかには、このCLIを使って動作させるものがあり、こうした開発を行う際にGo言語が役立ちます。
Go言語はクロスコンパイル機能があるため、実行環境のOSやバージョン、環境に由来するプラットフォームの依存関係などを開発時に考慮する必要がありません。そのため、CLIによって動作するアプリケーションの開発の際に、既存の言語では個別に対応が必要であった実行環境との調整が不要になります。
APIサーバー開発
Go言語は、APIの開発もできます。APIとは、アプリやソフトウエアの機能や情報を、外部と共有できるインターフェースのことを指します。Go言語は「環境に依存しない」「速度が速い」「コードがシンプル」といった理由から、さまざまなAPIサーバー開発で利用されています。開発に際して専門的な知識が求められる場合もありますが、同時アクセスが起きる可能性の高いAPIの開発現場ではGoの並行処理が活躍すると言えるでしょう。
Go言語で開発された事例
さて、ここまででGo言語とはどのような言語で、Go言語にできることをご紹介してきましたが、実際にどのようなWebサービスやアプリケーションが開発されたかを、ここからはご紹介したいと思います。
・AWA(AWA)
AWA(アワ)は1億曲もの音楽が聴き放題になる、音楽配信サービスです。取り扱っている曲は5000万曲以上、累計ダウンロード数は1600万を超えていて、類似サービスとしてSpotifyやApple musicがありますが、これら海外サービスに比べて日本の楽曲が充実しています。
開発の場面ではGo言語とDockerの相性がよく、開発環境から本番環境まで様々な面で活用しています。
・クックパッド
クックパッドは料理レシピの投稿・検索サービスです。現在は、レシピ投稿・検索サービスに加え、生鮮食品のネットスーパーや、レシピを機械が読み取り可能な形式にして、キッチン家電に提供しレシピ内容に合わせて自動で制御されるようなサービス開発などを進めています。
・YouTube
YouTubeはインターネット上で動画共有サービスを行うアメリカの企業です。YouTubeのサーバーはGo言語によって構築されています。
Go言語は複雑な処理を書かずとも、Webサーバー構築できる標準ライブラリが搭載されているため、サーバー部分の構築にも役立っています。
・ぐるなび
ぐるなびは、飲食店の情報を集めたWebサイトです。ぐるなびでGo言語を使用した例として「属性バナー」があります。これはビックデータの分析を通してユーザの嗜好に合わせたバナー表示をするものです。
処理速度が速いため、バナー表示でページの表示速度が遅くなるユーザーの負担を下げられるのもGo言語が採用された理由の1つです。
・メルカリ
人気が高いフリマアプリのメルカリですが、メルカリもGo言語で開発されています。Go言語はAndroid・iOS両方に対応していることや、エラーの修正が容易な点で採用されています。また、Go言語の並行処理能力の高さは、メルカリのような大規模なシステム開発に向いています。具体的には、メルカリが全ユーザーのスマホに定期的にプッシュ通知を送る際にGo言語が活躍します。並行処理能力の高さを活かして、ユーザーに適切なタイミングで情報を定期的に届けることができるのです。
・Gunosy
Gunosy(グノシー)はネット上にある国外の情報を収集して、各ユーザーが求めているものを届けてくれる情報キュレーションサービスです。
また、国内で3,400万以上のインストール数があり、非常に多くのユーザーが使用しているサービスです。そのため、通信回線の中で転送されるデータ(トラフィック)は膨大なものとなりますが、その大量のトラフィックを処理する部分をGo言語が担っています。
まとめ
この記事では、国内でも人気が上昇してきているGo言語の特徴や、メリット、デメリット、できることなどを解説してまいりました。本文で紹介したように、さまざまなメリットがあり、Webサーバー・スマートフォンアプリ・IoT・CLIアプリケーション・APIサーバーといった幅広い領域の開発ができる言語です。特に、IoT技術は今後ますます需要が高まることが予想されています。Webアプリ開発に興味がある方は、PHPやJavaといった主要な言語に加え、Go言語という選択肢を持つことをお勧めいたします。
—————————————————————————————————————
システム開発、アプリ開発、新規事業立ち上げ、DX化の推進でお困りではありませんか?
日本全国には開発会社が無数にありますが、Webサービスやアプリサービスのスケール(規模拡大)を実現するビジネス推進力やシステムの堅牢性、可用性を意識した設計力・技術力を合わせ持つ会社は、全国で見ても多くはなく、弊社は数少ないその一つ。お客様のご要望通りに開発することを良しとせず、お客様のビジネス全体にとって最適な解を模索し、ご提案ができるビジネス×テック(技術力)×デザインの三位一体型のシステム開発/アプリ開発会社です。ITやDX全般に関して、何かお困りのことがございましたら下記の「GeNEEへのお問合せ」フォームからお気軽にご連絡いただけたらと思います。
—————————————————————————————————————