go言語(golang)の特徴って?メリットとデメリットをまとめてみた

freelance

こんにちは、ITプロパートナーズ編集部です。

弊社では、数多くのエンジニアの方にフリーランス案件を獲得していただいています。経験とスキルさえあれば、週2日から高収入案件をご紹介できます。まずは無料登録をして色々な案件をみて見てください。弊社からおすすめの案件をご紹介することも可能です。

それではここからはプロの目線としてフリーランスに役立つ情報をお伝えしていきます。

今回は、今時のプログラマーであれば、知っておきたいプログラミング言語の一つ、go言語(golang)についてご紹介したいと思います。

名前から推測できる通り、IT業界の巨人、googleにて開発が進められていることもあり、今後、C++、Javaやrubyに続く言語として目にする機会が増える可能性は極めて高いでしょう。

あるいは、現在、C++、Javaやrubyで書かれているものをgo言語にリプレイスする可能性もあります。

今まで様々なエンジニアの方にお会いして、優秀なエンジニアほどgo言語に着手してる印象があります。

この記事を期に、ぜひみなさんもgo言語について触れて見ましょう!

なおgo言語を含めたプログラミング案件の獲得方法については「フリーランスのプログラミング案件を獲得する方法」も参考にしてみてください。

go言語でできることって?

shutterstock_461485972

まずはgo言語の対応状況を確認します。

go言語の対応状況

2017年10月末時点の最新版ではLinux、MacOS X、Windows、Android、iOSの主要OSはすべて対応しています。

では、具体的にどういった活用がされているのでしょうか?

go言語が活用されているのはどんなところ?

・Webサーバー・アプリケーション

一番利用シーンが多いと思われるのはWebサーバー・アプリケーションです。

実際に処理が実行されるコンピュータはインターネットの雲の上にあって、利用者からは見えないんだよ、エンドユーザーは処理結果だけを見るんだよ、というのがクラウドコンピューティングの概念ですす。

しかし、“実際に処理が実行されるコンピュータ”の上で動くアプリケーション開発にgo言語が急速に広がっているのです。

具体的な例として、YouTube思い浮かべてください(YouTubeは実際にgo言語で構築されています)。

我々、エンドユーザー、つまりYouTubeのユーザーは自分のPCやスマホで動画の再生ボタンを押しますが、実際に動画を再生しているのは、自分のPCやスマホではありません。インターネットの向こうにあるYouTubeのサーバーで、動画の再生画面を、インターネットを通してエンドユーザーに見せています。

そのサーバー上で動く動画再生に関する機能を提供するアプリなどが、go言語で構築されています。

この分野は、今まで、Javaやruby、PHPが使われていましたが、後述するgo言語の特徴やメリットは評価され、開発元であるGoogleはもちろん、日本の起業でもgo言語への移行、新規開発が進んでいます。

・アプリケーションソフトウェア

二番目にご紹介するgo言語の利用シーンとしては、AndroidスマホやiPhone上で動くアプリも含めたアプリケーションソフトウェアです。実装実例として、Googleのgo言語開発チームGo Teemが作った「Ivy big number calculator」という高度な電卓機能を持ったアプリがGoogle Playよりandroidスマホ向けに提供されているので、気になった方は試してみてください。

このアプリはソースコードも公開されていますが、go言語のみで開発されたアプリですので、go言語が対応するWindowsのパソコン、Linuxのパソコン、Macのパソコン、更にはiPhoneでも動作可能。

ただし、「Ivy big number calculator」をインストールされた方は分かるかと思いますが、このアプリは計算式を入力してエンターを押すと計算結果が次の行に出てくるので、それを繰り返して行うコマンドラインプログラムです。

Linuxのコマンドライン、Windowsのコマンドプロンプトと同じく、キャラクターインターフェイス(CUI)です。2017年10月末現在のところ、Googleではマウスやキーボード、あるいはタッチパネルを用いるグラフィックインターフェイス(GUI)に対応させるために必要なGUIライブラリを用意していません。

もっとも、まったくGUIが使えないというわけではなく、Google以外の有志によって整備されている、サードパーティー製GUIライブラリがいくつか活動しています。

・PaaS(Platform as a Service)

三番目にご紹介するgo言語の利用シーンは、今もっとも注目されている分野であるPaaS(Platform as a Service)での利用です。

そもそも、PaaSとはなにかから確認しましょう。PaaSとはプラットフォーム、つまりシステムの基盤をサービスとして貸し出すサービスで、ここでいう基盤とは、ハードウェアからOSまで整えられたサーバーのことです。

PaaSの利用企業は、借りてきたサーバーの上で自由にシステムの開発、保守運用を行うことが可能です。

ハードウェアやOSは初期導入費用が高い反面、数年で新商品が出て資産価値が目減りするので、購入よりレンタルの方が良いと考える経営者さんも多いでしょう。

また、ITエンジニアの観点から考えると、データセンターに自前のサーバーを立てるのに比べて、いちいちパーツの発注や実際にパーツを取り付けてくれるカスタマーエンジニアとの調整が不要のため、リソースの追加・削除の自由度が高く、しかも速やかに実施されます。

更に、ハードウェアの保守・運用はPaaS提供企業が担うので、利用者はアプリケーション側に集中できるメリットがあります。
そして、Googleが展開しているPaaS(Platform as a Service)であるGoogle App Engineもgo言語に対応済みです。

借りてきたサーバーの上で自社コンテンツを展開する企業は年々、増えていますが、今後、go言語で自社コンテンツを作成する企業は増えていく一方でしょう。

さて最初に戻って、go言語でできることって?との質問に対しては“「Ivy big number calculator」といった、個人使いの比較的簡素なAndroidアプリケーションから、YouTubeといった大規模Webサービスまで、GUIを使わなければ、”ほとんどなんでもできる”と答えられるのではないでしょうか。

次に、go言語の特徴について見ていきます!

go言語の特徴

shutterstock_649490179 (1)

さて、続いてgo言語のプログラミング言語の特徴について見ていきます。

まず押さえておきたいのは、go言語の主要な二人の開発者。

ロブ・パイク氏

まず一人目はロブ・パイク氏です。彼はUNIXで有名なベル研究所に長らく勤務し、UNIXはもちろん、その後継OSとして設計されたPlan9や、その派生OSであるInfernoの開発、そして、Inferno の上で動くアプリケーションソフトウェアを作成するために用意された言語Limboの開発で知られています。

ケン・トンプソン氏

そして、もう一人は故デニス・リッチー氏と共に、オリジナルUNIXの開発と、UNIXを構成する言語としてC言語を生み出した、コンピュータの歴史を語る上で最重要人物の一人であるケン・トンプソン氏です。

まさにレジェンドITエンジニアたちによって開発されていると言えます。

go言語は実は扱いやすい

実際の記述について、データ型の記述方法などは、ロブ・パイク氏が開発した言語Limboから継承していたり、全体的にはケン・トンプソン氏らが開発したC言語の構文を意識していたりと、いろんな言語の良いところを寄せ集めた印象ですが、とにもかくにも、従来の言語と比べてシンプル、かつパッと見ても分かりやすくなるように意識されています。

また、公開されている仕様書もシンプルで、良くも悪くも、入社したてのGoogle社員でも、いきなり大規模システム開発に参加して、それなりの成果を出せる言語”という言い方をする方もいます。

熟練のITエンジニアにとっては高度なテクニックの見せ場となるけれど、十分な能力のないITエンジニアにとっては扱いが難しく、返ってバグの原因になる機能は排除してしまった言語、とも言えます。

そういう意味ではgo言語は初学者にとっては習得しやすい言語ですが、熟練者には面白みのない言語かもしれません。

go言語のメリットは?

shutterstock_589999421

go言語のメリットは、上記の特徴でご紹介した、開発の中心的な存在であるロブ・パイク氏とケン・トンプソン氏の両名ともがOS構築経験があることから、またgo言語がWebサーバー・アプリケーションを意識したプログラムであることからか、非常にハードウェアリソースに気を使っているプログラム言語だと言えます。

具体的なメリットを見てみましょう!

コンパイルがすごい!

そのうちの一つが、コンパイルです。

例えばJavaのコンパイルは、いったん中間言語というものになり、それを更に仮想マシンで機械語にコンパイルして実行するという二段階方式なので、時間がかかるうえに、仮想マシンを展開する分メモリリソースの消費が増えてしまいます。

一方のgo言語の場合、仮想マシンを使わず直接機械語へとコンパイルするので、処理速度も速く、メモリリソースの使用量も減ります。

このことはスマートフォンといった、モバイル機器においてはバッテリー消費を抑えるという副次的なメリットもあります。

セキュアなメモリ管理

二つ目のメリットはセキュアなメモリ管理です。メモリはいわばコンピューターの作業場と言えます。

例えば、「メモリ上の番地20番に15という数値を入れておきましょう」といった使い方をします。

これまでの言語であれば、「番地20番と番地100番の足し算をした結果を番地120番に入れてね」といった番地で指定する計算ができました(ポインタ計算)。

このとき、番地20番の中身が15で、番地100番の中身が20なら、35と計算して、番地120番に35を入れて無事終了ですが、もし番地100番の中身が文字のBだったとすると、15+“数字のB”という良く分からない計算になってしまい、番地120番に意図しない危険な値が入る可、システムが重大なインシデントを引き起こす能性があります。

また、そういうメモリを操る悪意あるウィルスも多いため、ポインタ計算機能を排しました。ただし、これは熟練のITエンジニアにとってはできることの縮小と言えるかもしれません。

並行処理

三つ目のポイントはgo言語には並行処理や並列処理が言語レベルで備わっている、という点です。並列処理とはCPUで複数の仕事を同時に行う機能。

デュアルコアCPUでも、インターネットで調べながら、エクセルやワードで資料を作り、メディアプレイヤーで音楽を再生することができるのは、OSに並行機能があるからです。

並列処理は複数のCPUを効率よく扱うことで、処理速度を向上させる機能です。

最新のサーバーだと、処理速度向上のため、複数のCPUを搭載しているものも多く、そのメリットをソフトウェア側でも生かすために必要な技術が並列処理です。

使いこなすには少々経験が必要ですが、Webサーバー・アプリケーション開発において非常に重要な機能なので、ぜひ試して見てください!

具体的にはgoroutine という軽量スレッドがgo言語には実装されています。

とても便利なgo言語ですが、い方でデメリットもあります。go言語のデメリットを次に見てみましょう。

go言語のデメリットとは?

shutterstock_293218676

ここではgo言語のデメリットを見ていきます。

generics(ジェネリック)がない

一つがgenerics(ジェネリック)がない、という点です。これはセキュアなメモリ管理を達成するために切り捨てられた機能の一つです。

go言語のメリットの中で、ポインタ計算ができないことをご紹介しましたが、他にもメモリ管理機能として、メモリの中身にどういった値の型が入るのか明らかにしなさい、というルールを持っています。

例えば、このメモリの番地は整数用に予約しています、だとか、このメモリ番地は文字しか入りません、といった具合です。

そのため、処理も利用するメモリも同じだけど、メモリに入れる型は呼び出されるたびに変わる可能性のあるgenericsは使えません。

一つ一つ、まったく別個のメソッドとして、定義する必要があります。

継承がない

もう一つデメリットと言われることがあるのはgo言語には継承がないという点です。そもそも、go言語はオブジェクト指向的な使い方ができる言語であって、オブジェクト指向プルグラミングだと開発元のGoogleから説明されたことは一度もありません
(厳密には、公式Q&Aに「Is Go an object-oriented language?」という問いに対して「Yes and no.(以下略)」と記載されています)。

例えば、クラスという用語もありません。

そのため、JavaやC++といった純粋なオブジェクト指向の言語と同じ感覚で使うと、ドツボにはまります。

その最たる例が、継承です。継承とは、例えば車輪が四つあって、運転席があって、といったような基本的な振る舞い(機能)だけ集めた“車”というクラスを一つ用意しておいて、その“車”クラスをベースに、消火するという振る舞い(機能)をつけて“消防車”というクラス作ったり、あるいは消火機能の代わりに、荷台という新たな振る舞い(機能)を付与することで“トラック”といったクラスを作るなど、基本のクラスを発展させて新たなクラスを作る考え方です。

残念ながら、go言語にこの考え方はありません。しかし、実は実質同じ役割を果たす埋め込み(Embed)という機能があります。

これは、“消防車”という構造体に対して、事前に作成されている“車”という構造体を埋め込むという考え方です。

この構造体は実質、クラスと同じものなので、元になるクラスを発展させて新しいクラスを作るのか、それとも新しい構造体に元になる構造体を埋め込むのか、まるで卵が先か鶏が先かという論争に近いものがあります。

このように、従来、汎用言語として中心的な役割を果たしてきたオブジェクト指向プログラミングを意識しつつも、少し違う概念や用語を使うので、慣れるまで戸惑う方が少なくないのも確かです。

以上がデメリットですが、それでもgo言語の利便性は高いと言えるのではないでしょうか?

go言語の仕事に挑戦したい人へ

go言語について見てきたところで、ぜひ挑戦したい!と考えているエンジニアの方も多いのではないでしょうか?

実際に、go言語を扱えるエンジニアの方の年収レンジは非常に高くなっていますし、多くの企業から求められています。

これからgo言語を習得したい人、もっとgo言語の実務経験を積みたいと考えている方は、具体的な案件情報をご覧ください。

まとめ:go言語は需要が増えてきている

shutterstock_288042365

今回はgo言語について取り上げましたが、go言語の求人は確実に増えてきています。

言語としての完成は、ほぼほぼ完了しており、今後利用されるシーンの拡大が期待されていますので、少し未来のIT業界を見据えて、なにか新たな言語を習得しておきたいと考えている方にはgo言語の学習を強くおすすめします。

これからIT業界に飛び込むことを考えている方にも、将来性があり、しかもシンプルで習得しやすい良い言語ではなかろうか、と思います。

これを読んで、go言語に興味を持っていただけると幸いです。

▼フリーランスノウハウについては下記にまとめています。
フリーランスの手引書【フリーランス支援のプロがまとめました】

フリーランスの方でこのようなお悩みありませんか?
  • 高額案件を定期的に紹介してもらいたい
  • 週2日、リモートワークなど自由な働き方をしてみたい
  • 面倒な契約周りはまかせて仕事に集中したい

そのような方はぜひ、ITプロパートナーズをご利用ください!

フリーランスの方に代わって高額案件を獲得
週2日、リモートなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート

まずは会員登録をして案件をチェック!