Go言語について今日は紹介するよ!
- Go言語とは?
- Go言語ができることって?
- Go言語の勉強方法は?
- Go言語の将来性は?
などの疑問をお持ちの方の悩みを解決できる記事になっています!
この記事では、現役のフリーランスエンジニアがGo言語の特徴、できること、将来性、勉強方法について解説します!
記事を読めば、Go言語の特徴や効率的な勉強方法について理解できますよ!
それでは、見てみましょう!
- Go言語に興味がある人
- Go言語で何ができるか知りたい人
- Go言語の学び方を知りたい人
目次
Go言語とは?
Go言語は、2009年にGoogleが開発したオープンソースのプログラミング言語です。Go言語は、元々はGoogle社内のプログラム開発の生産性や拡張性を向上させるために開発されました。Googleのサービスは大規模で、開発効率に問題を抱えていました。Go言語は、そのような大規模なソフトウェア開発に対応できるように設計されています。
Go言語は、主にバックエンド(サーバーサイド)で動作するプログラミング言語です。そのため、APIサーバー開発に使われることが多いです。
Go言語は、TOIBE指標のような人気や成長の度合いからプログラミング言語を測る指標のほとんどで、 トップ20内にランクインし、日々進化を遂げています。
Go言語の特徴とは?
Go言語の特徴は、次の通りです。
- 静的型付け言語
- 文法がシンプル
- 実行・コンパイル速度が速い
- 並列処理が得意
- マルチプラットフォーム対応
- go modulesでパッケージ管理
- Webアプリケーションフレームワークが充実
- 本・ドキュメントサイトが充実している
静的型付け言語
Go言語は、「静的型付け言語」です。
静的型付け言語とはプログラムが実行される前に、プログラムの整合性や合理性を担保する仕組みをもったプログラミング言語です。
プログラミング言語には、「静的型付け言語」と「動的型付け言語」があります。
Go言語は静的型付け言語であり、プログラム上で使われる値の型を定義することで安全性を確保しています。
Go言語以外の静的型付け言語は次のものがあります。
- Java
- Kotlin
- TypeScript
- Scala
- Swift
一方、「動的型付け言語」とはプログラムが実行されるタイミングでプログラムの整合性をチェックします。そのため、プログラムが実行されるまでバグに気付きづらいです。
Go言語と同じサーバーサイドで実装されるRuby、PHPなどは、「動的型付け言語」です。そのため、型を定義する必要はありません。しかし、プログラムを実行するまで正しい値が使われているかは分からず、エンジニア自身が安全性を担保する必要があります。
主要な動的型付け言語は次の通りです。
- PHP
- Ruby
- Python
- JavaScript
両者ともメリット、デメリットがあるので覚えておきましょう。
種類 | メリット | デメリット |
動的型付け言語 |
|
|
静的型付け言語 |
|
|
文法がシンプル
Go言語の最大の特徴は、文法がシンプルでわかりやすいことです。Go言語の思想は「シンプルな機能を組み合わせて大きなプログラム作る」ことです。そのため、言語仕様が簡潔で直感的な設計になっています。
Go言語は、Javaなどの静的型付け言語と比べると記述量が少なくコードを書けます。
簡単なサンプルコードを見てみましょう。
package main
import "fmt"
func main(){
array := [3]string{"りんご", "みかん", "もも"}
fmt.Println(array)
}
実行結果:
[りんご みかん もも]
上記は変数に配列を代入して、出力しています。
静的型付け言語だと変数の代入時に型を明示的に書かなければなりませんが、Go言語では省略することができます。これは、代入される値から型を推論しているためです。
また、fmt.Println
という関数を使う際は、import "fmt"
という記述をして fmt
パッケージを明示的にインポートしています。
このような省略した書き方や明示的な依存関係を書くことで、Go言語はシンプルで、わかりやすいコードを保つことできます。
実行・コンパイル速度が速い
Go言語は、コンパイル言語のため、RubyやPythonなどのスクリプト言語に比べて、実行速度が圧倒的に速いです。
Go言語が速い要因は
- 並列処理
- コンパイル処理の最適化
です。
Go言語の並列処理は、内部で簡易化され、エンジニアが意識しなくても複数処理を同時にできるように設計されています。軽量なスレッドで高速に実行できるのが特徴です。
Go言語のコンパイル処理は、Javaのように中間言語に置き換える処理がなく、直接、ネイティブコード(機械語)に変換します。そのためコンパイルが速く、効率的に行うことができます。
並列処理が得意
Go言語は、並列処理にgoroutineとchannelという機能を使用します。
goroutineは、Go言語のスレッドです。
channelは、goroutine同士の通信をするための仕組みです。goroutine同士で値の共有をするためにデザインされたデータ構造です。
Go言語は、非同期に複数実行されるgoroutineが効率的に動作するように設計され、高速化を実現しています。
マルチプラットフォーム対応
Go言語は、マルチプラットフォーム対応のプログラミング言語です。
マルチプラットフォームとは、複数のOSで動かせることを意味します。
例えば、Windows、macOS、LinuxなどのOSで動作します。
Go言語では、開発しているOSとは異なる環境でも実行可能なソースコードを生成できます。そのため、OSが異なる環境でも移植ができるように設計されています。
go moduleでパッケージ管理
引用元: The Go Blog Using Go Modules
Go言語のパッケージ管理は、go moduleを使います。go moduleとはパッケージ管理システムです。
パッケージ管理とは、アプリケーション開発で必要なパッケージを管理することです。
パッケージとは、便利な機能がまとまったものです。例えば
- データベースの接続ライブラリ
- メール送信ライブラリ
- フォームライブラリ
- テスト管理ライブラリ
- ログイン機能ライブラリ
- 検索機能ライブラリ
などがあります。パッケージは、プログラミング開発をサポートするために作られたひとまとまりの機能です。自分のサービスにメールやログイン機能を入れたければ、「自分で実装する」か「パッケージを使用する」ことになります。スピーディに開発をしたい場面では、「パッケージを使用する」機会が圧倒的に多いです。なぜなら、「自分で実装する」場合はゼロから作らなければならず、コストがかかるからですね。その点、パッケージは既に出来上がっているのですぐに機能を追加ができます。
エンジニアはアプリケーションで必要なパッケージをインストールしますが、パッケージの数が多くなると管理も大変になります。その管理の複雑性を解決するために、go modulesが使われます。
go moduleの使い方
go moduleは、Go言語1.11以上のバージョンで使うことができます。
go moduleを使うには、go mod init
コマンドで初期化します。
すると、go.mod
というファイルを作成しその中で必要なパッケージが記載されます。このファイルにアプリケーションで使用しているパッケージを一元的に管理できるようになっています。
go build
をすると、アプリケーション上で使われるている依存モジュールが自動的にインストールされます。そして、go.mod
ファイルに自動的に追加されます。
パッケージは、自動生成されるので自分で手を加える必要はありません。
新しいパッケージを追加したい場合は、go get パッケージ
を使用します。
例えば、go get github.com/jinzhu/gorm
を実行すると、go.mod
ファイルに追加されます。
インストール可能なGo言語ライブラリの詳細は、公式サイトで確認できます。
引用元: Go
Webアプリケーションフレームワークが充実
Go言語のコミュニティは活発で、現在でもWebアプリケーションフレームワークの開発が充実しています。
Webアプリケーションフレームワークとは、Webアプリケーションを開発するためのサポート機能がまとまっているツールのことです。
Webアプリケーションには、データベースの操作、httpリクエストの処理、メールなど多くの機能が必要とされます。これら全ての機能をゼロから作ると大変ですよね。Webアプリケーションフレームワークは、そのようなWebに関わる機能が備わっています。そのため、初心者の人でもすぐにアプリケーション開発ができるようになっています。
Go言語で使われる主要なWebアプリケーションフレームワークは次の通りです。
- echo
- gin
- chi
- revel
- beego
echo
引用元: echo
echoは、軽量で高速に動作するGo言語のWebアプリケーションフレームワークです。
RESTAPI向けに設計され、ルータ機能やミドルウェア機能を提供しています。
フルスタックではなく、必要最低限の機能で動作します。そのため、高速処理が得意です。
gin
引用元: gin
ginは、パフォーマンス性に優れたGo言語のフルスタックWebアプリケーションフレームワークです。
類似のMartiniというフレームワークと同じAPIを提供しています。
フルスタックでありながら、高速処理が特徴です。
chi
引用元: chi
chiは、シンプルで軽量に設計されているGo言語のWebアプリケーションフレームワークです。
主に、net/http
と互換性があり、ルーディング周りの機能を提供しているので、変えたくなった時でも差し替えがすぐに行えます。
なるべくフレームワークは使わずに最低限のルーティング機能だけが欲しいという用途に適しています。
revel
引用元: revel
revelは、フルスタックのGo言語アプリケーションフレームワークです。
revelは、Webアプリケーションに必要な機能はほとんど備わっています。
- ルーティング
- テンプレート機能
- セッション管理
- データベース操作
などrevel一つで、包括的にアプリケーション開発をできるのが特徴です。
beego
引用元: beego
beegoは、RubyのSinatraを元に設計されたGo言語のWebアプリケーションフレームワークです。
フルスタックの機能を提供し、MVCモデル、RestfulAPIのサポート、ormマッパーなどがあります。
中国で人気のGo言語フレームワークで、多くの中国企業で使われています。
どのフレームワークを使えばいいのか
個人的には、「echo」を推します。
理由は次の通りです。
- マイクロフレームワークでシンプルな仕様
- 長期的に柔軟なアーキテクチャを組みやすい
- 学習コストが低い
Goはもともとシンプルな仕様なので、フレームワークもシンプルな作りの方が長期的に見てアーキテクチャの変更に柔軟に対応できます。パッケージを変更しやすい作りにして、部分的に変えることで複雑性を回避することができるでしょう。
しかし、フレームワークの選定は、あつかうビジネスやチームの習熟度によって変わるので一概には言えません。
Go言語の習熟度が低ければ、フルスタックな機能を提供してくれる「revel」「beego」を使うなどして、柔軟に対応していきましょう。
書籍・ドキュメントサイトが充実している
Go言語の書籍は充実しています。日本語の書籍も多く、最新のバージョンを学ぶことができます。
書籍はたくさんありますが、いくつかおすすめをご紹介しておきます。
「スターティングGo言語」「やさしいGo言語入門」で基礎を習得し、次に「改訂2版 みんなのGo言語」で実践的なGo言語の使い方を学習しましょう。「プログラミング言語Go」はGo言語のバイブル的な本ですが、演習問題が少し難しいので基礎を学習してから取り組むといいでしょう。
また、本に加えて、Goの公式サイトを見ておくのをおすすめします。
- Effective Go … Go言語の書き方のお作法を学べる
- Go Code Review Comments … Go言語のスタイルガイドなどを学べる
- A Tour of Go … Go言語の基礎文法を学べる
Go言語を使うと何ができるの?
Go言語を使うと様々なアプリケーションを開発できます。
よく開発されるアプリケーションは、次の通りです。
- Webアプリケーション
- APIサーバー
- スクレイピングプログラム
- マイクロサービス
Webアプリケーション
Webアプリケーションとは、Webで提供されているサービスのことです。
例えば、ショッピングサイトや求人サービス、ブログなどです。
Go言語のWebアプリケーション開発では、Webアプリケーションフレームワークが使われるのが主流です。前述した通り、フレームワークはWebアプリケーション開発に特化した機能が提供されています。エンジニアはゼロから構築しなくても、フレームワークを使えばすぐにWebアプリケーション開発をすることができます。
今では、独自のフレームワークで開発している企業は少ないでしょう。一部、大企業は独自フレームワークを使っているかもしれませんが、ほとんどの企業はオープンソースのGo言語フレームワークを使っています。
そのため、上述したフレームワークの使い方を覚えておくといいでしょう。
APIサーバー
Go言語は、APIサーバーの開発にも使われます。
APIとは「Application Programming Interface(アプリケーション・プログラミング・インターフェース)」の略で、「プログラム同士をインターフェースを通じで繋げる機能」です。
APIの仕組みを使うと、様々なプログラムを組み合わせて一つのサービスを作ることができます。
例えば、TwitterやインスタグラムもAPIを提供しており、API経由でツイートや写真を取得できます。そして、その取得したデータを自分のWebサイトに表示させることができます。
APIサーバーは、APIの仕組みを利用して、データを提供するサーバーです。
APIサーバー構築でもフレームワークは使われます。
スクレイピングプログラム
スクレイピングとは、Webサイトにある情報を取得して加工する技術です。
例えば、複数の求人サービスのデータを一度に確認できるWebサイトがあるとしましょう。複数の求人サービスのデータ取得を人の手でやることも可能ですが、膨大な時間がかかります。
その作業をコンピュータにやらせるのが、スクレイピングプログラムです。
Go言語では、「goquery」「bluemonday」などでスクレイピングを作ることができます。
マイクロサービス
マイクロサービスとは、近年注目を集めているアーキテクチャの一種です。
簡潔に言うと、プログラムを小さい単位に分けて、使いやすいように設計するアーキテクチャです。
マイクロサービスでは、Go言語がよく使われます。
マイクロサービスでは複数のプログラムを組み合わせるため、高いパフォーマンス性が期待されます。そのため、Pythonなどのスクリプト言語よりも、高速で動作するGo言語が適しているのです。
Go言語で作られているサービス
Go言語は人気があり、需要の高いプログラミング言語です。日本国内でも多くの企業がGo言語を使用しています。
Go言語が使われている代表的なサービスは次の通りです。
- メルカリ
- AWA
- Gunosy
- Abema TV
- BASE
これからバックエンドエンジニアを目指す人は、Go言語がおすすめです。
なぜなら、多くの企業がGo言語に注目し、需要があるためです。
すぐに習得はできませんが、使いこなせるようになれば強力な武器になります。
Go言語が使えるとなれる職種
Go言語が使えると、バックエンドエンジニアになれます。
バックエンドエンジニアは、Webサイトの裏方の役割をします。
裏方の役割とは、サーバーやデータベースの仕組みを作ることです。
例えば、ショッピングサイトでは、商品の管理や在庫の管理、決済の手続きなど多岐に渡ってやることがあります。
その一つ一つの機能はサーバーという場所で処理がされます。
そのサーバーで行われる処理を作るのがバックエンドエンジニアです。
バックエンドエンジニアの詳しい解説は、こちらをご確認ください。
Go言語エンジニアの年収は?
Go言語エンジニアの年収は、どのくらいでしょうか。Go言語エンジニアを目指す人は気になるところでしょう。
転職支援サービスなどを見ると、Go言語エンジニアの年収は500〜800万円程度とされています。
実際に「求人検索エンジン「スタンバイ」プログラミング言語別年収ランキング2018」によると、年収は600万〜1600万で設定されています。
引用元: 求人検索エンジン「スタンバイ」調べ
日本の平均年収と比べると、かなり高い傾向ですね。
スキルの高いGo言語エンジニアは独立して、もっと稼いでいます!
エンジニアは作ってナンボの世界なので、スキル次第ではもっと高い年収を狙うことも可能です。
Go言語の今後の将来性は?
Go言語は、今後も一定の需要が期待されます。
なぜなら、Go言語のコミュニティは活発で日々進化を遂げているからです。学習のしやすさと実用性の高さからエンジニアの間でも高い人気があります。エンジニアが求めるプログラミング言語は、企業でも使われる傾向が高いです。Go言語は移植性が高く、近年主流のマイクロサービスアーキテクチャとの相性もいいので、今後ますます使用されるでしょう。
さらに現在、日本のIT業界は深刻な人手不足に陥っています。実際に、経済産業省のデータによると、2025年には約40万人、2030年には約45万人が不足すると試算されています。
労働人口が年々減少しているのも関わらず、企業はITへの投資をするため、エンジニアの需要が高くなっているのです。
求人サイトでもGo言語の需要が高いのがわかります。実際に、私の周りでもバックエンドエンジニア、特にGo言語を使えるエンジニアを探している企業はたくさんいます。
これからバックエンドエンジニアを目指す人は、Go言語を検討してみてください!そして、新しい技術を常にキャッチアップしていけばエンジニアの価値を高め続けられますよ!
Go言語を習得するには
Go言語を習得するためには、まずは基礎を学習して、次に実践学習をしましょう。
- プログラミング学習サイトでGo言語を始める
- プログラミング本でGo言語の仕様を理解する
- ポートフォリオを作る
プログラミング学習サイトでGo言語を始める
基礎を身につけるには、プログラミング学習サイトがおすすめです。
なぜなら、プログラミング学習サイトは、環境構築が不要ですぐにプログラミングを始められるからです。
例えば、Progateなどのプログラミング学習サイトを活用すれば、簡単にプログラミングを始められます!
Progateは「Go言語」を学べます。また、それ以外にも「Git」「コマンドラインツール」を学べるので試してみてください!
プログラミング本でGo言語の仕様を理解する
基礎学習では、プログラミング本も有効です。
プログラミング学習サイトでは扱えきれない細かい仕様を学べます。
前述した、おすすめの本を活用してみましょう。
ポートフォリオを作る
次に実践として、ポートフォリオやアプリを作りましょう。
アウトプットすることでプログラミングをより理解できます。
基礎ではプログラミング言語の特徴や使い方を学び、実践ではアウトプットすることで効率的にプログラミングを習得できます。
エンジニアへの具体的なステップ
プログラミングを学習しただけでは、エンジニアにはなれません。
エンジニアになるための具体的なステップは次の記事で解説しているので、参考にしてくださいね!
最短でエンジニアになりたい人は
最短でエンジニアを目指すひとは、プログラミングスクールに行きましょう!
独学でも勉強できますが、時間がかかるのは事実です。
実践的なスキルをつけるにはプログラミングスクールの方が効率的です。
なぜなら、プログラミングスクールだと実践的な課題をやったり、プロのエンジニア講師にいつでも質問できるので独学よりも早く習得できるからです。
初心者の頃は、エラーに遭遇すると挫折しやすいです。プロに教わった方が自分で調べるより遥かに効率的です。
その他にも、プログラミングスクールでは実践的なプログラムが用意されています。独学ではできない体系的なプログラミング学習と転職支援を受けられます。
プログラミングスクールは当たり外れがあると言われてます。実際に、無料のプログラミングスクールで失敗したという人もいます。
こちらの記事では、失敗しないために厳選したプログラミングスクールをまとめています。すぐにエンジニアに転職した方は検討してくださいね!
まとめ
この記事では、Go言語についてまとめました。
今ではたくさんのプログラミング学習サイトや本があります。実際にコードに触れると、プログラミングの雰囲気を掴めますよ!
皆さんがエンジニアになれるのを応援しています!