Go言語についてなんとなく聞いたことはあるけど、
実際の開発イメージがわかない。
または、
個人開発をやってみたいけど何からやればいいのか分からない・・・
と困ってしまうことってありますよね。
でも、少し情報を知ることで実際にどんなアプリケーションを作れるか、自分がどんなアプリケーションを作ってみたいかを知る足がかりになることがあります。
今回はGo言語でつくれるものについて解説いたします。この情報を通じて、今まで抽象的だったGo開発のイメージを少しでも具体的にイメージしていただけたら嬉しいです!
なお、次の記事ではそもそもGoとはどんなプログラミング言語なのか、その特徴をできることや将来性も交え詳しく解説しているので良ければ参考にしてください。
→ Go言語とは?特徴やできること、学習方法をわかりやすく解説
そもそもGo言語とは
Go言語とはGoogleが開発し2009年ごろに登場した開発言語です。静的型付け言語であり、コンパイラ言語でもあります。
静的型付け言語とは、変数や定数などの宣言を行う際にその中に入れる値の種類をあらかじめ決めておく必要がある言語です。JavaやTypeScriptなどの言語を触ったことがある人であれば、イメージしやすいかもしれません。
つぎに、コンパイラ言語とはコンパイルを行ってコンピュータが読めるように変換する必要がある言語のことです。JavaやGo、C言語などは人間に読みやすいように設計された言語ですので、コンピュータはそのままでは理解できません。
コンピュータが理解してプログラムをできるようにするのが、コンパイルという処理です。Go言語は実行速度・コンパイル速度共に高速であり、かつシンプルな設計であると言われています。
Go言語で作れるもの一覧
作れるもの | 難易度 |
サーバー開発 | ★☆☆☆☆ |
アプリケーション開発 | ★★★★☆ |
CLI開発 | ★★☆☆☆ |
API開発 | ★★★☆☆ |
サーバー開発
必要なスキル
- 変数、定数、関数などの用語知識
- 静的型付け言語の基礎知識
- Goの基本文法の理解
- IDE(統合開発環境)もしくはVisual Studio Codeなどのエディタをある程度操作できること
開発難易度
難易度:★☆☆☆☆
基本的なサーバー開発(例えば、リクエストに対してHello Worldなどの簡単なメッセージを返すもの)であれば、すぐに開発可能です。ただし、変数・関数の定義方法やコンパイルの仕方は知っておく必要があります。
まずはGoのスタンダードライブラリに含まれているhttpパッケージを触ってみるといいかもしれません。便利さは低いですが、パッケージを外部から取得しなくても最初から使用することができます。
ちなみに、スタンダードライブラリというのはGo言語をインストールした時にデフォルトで入っているライブラリです。このライブラリだけで基本的な開発はできるようになります。
スタンダードライブラリのhttpパッケージでサーバーを作れたら、次は他のWebフレームワークを使ってみるといいかもしれません。httpパッケージを拡張し、便利になっているものが多いので様々なことができるようになります(フレームワークとは機能の集合です。開発されたフレームワークを自分のプログラムに取り込むことで自分の求める機能を実現でき、自分が開発したい部分に集中できます)。
とはいえGo言語のフレームワークを選び出すと色々あって悩みますし、フレームワークによって書き方が異なります。最初は混乱を避けるために何か一つのフレームワーク(GinやEchoなど)に固定しておくと良いでしょう。
そして、選んだフレームワークの使い方もなんとなく分かってきたら、自分が気になる他のフレームワークにも取り組んでみましょう。
アプリケーション開発
必要なスキル
アプリケーションと一口に言っても色々な種類がありますが、例えばWebアプリケーション(SNSやブラウザゲームなど)を開発したい場合は下記のようなスキルが必要になります。
- サーバー開発の知識に加えて、データベースの基礎知識
- リクエスト、レスポンス等の理解
- フロントエンド(HTML, CSS, JavaScript等)の知識
- Webに公開する場合は、デプロイの知識
開発難易度
難易度:★★★★☆
フロントエンドの知識がある場合は多少難易度は下がりますが、アプリケーション開発でフロント~バックエンド(サーバーサイド)まで自分で開発するというのは時間も労力もかかります。特に、見た目を凝ったWebアプリケーションにしたいのなら数か月かかることは覚悟しておいた方がいいかもしれません。
もちろん画面数にもよりますので、1~2画面程度のサイトであればもう少し開発時間を短縮できるかもしれません。また、表示させるコンテンツによってはデータベースの知識も必要になってきます。
データベースにもいろいろな種類がありますが、最初はMySQLやPostgreSQLが親しみやすいでしょう。SELECT文から初めて、慣れてきたらUPDATEやDELETEなどのクエリを流すプログラムを書いてみるのもいいですね。
CLI開発
必要なスキル
まず、CLI(Command Line Interface)というのはよく「黒い画面」と言われるものです。Windowsならコマンドプロンプト、LinuxやMacならターミナルという名前がついています。
この黒い画面上でコマンドを用いてコンピュータを操作するのですが、Go言語を使うとこのコマンドのようなものを自作することができます。例えば、VScode(Visual Studio Code)をインストールした状態でターミナル上でcodeと打つとVSCodeが起動します。
これはショートカットキーのようなもので、codeというコマンドとVSCodeのソフトが紐づいているのですが、Goでも同じことができます。GoでCLI開発をするには下記のようなスキルが必要になります。
- Go言語の基礎知識
- CLIの基本操作(cd, mv, cp などの基本コマンド)
- 環境変数について知っているor調べてなんとなく理解できる
作りたいものによってはファイルの読み書きやHTTP通信についても知っておく必要があります。(HTTP通信というのは、普段使っているGoogle Chromeのようなブラウザでも行われています。ブラウザのようなクライアント側とサーバー側での通信のことです。ただし、一般的にはよりセキュリティの高いHTTPS通信が使われています)
開発難易度
難易度:★★☆☆☆
CLIを自分のPCの中で動かすだけであればオンラインでソースコードを管理しなくてもコンパイルだけで済みますし、比較的難易度は低めだと考えられます(もちろんソースコード管理の為にGithubにソースコードをアップロードしておくことをおすすめします)。
いきなりファイルの読み書き等を行わなくても、ターミナル上に「Hello World!」と表示させるプログラムを作ってみるのもいいですね。やり方に慣れたら、ファイルの読み書きやHTTP通信なども盛り込んでみましょう。
ターミナルに動くオブジェクトを表示させたり、表示色を変更させられるライブラリも存在します。もし興味があれば検索してみてください。
API開発
必要なスキル
API(Application Programming Interface)というのは、ブラウザ(クライアント)側とサーバー(バックエンド)側の窓口のようなものです。APIをサーバーという場合も多いです。
APIはブラウザ(クライアント)から送られてきた通信(リクエスト)を受け取り、必要があればデータベースや別のAPIに接続します。その後、最後にブラウザ(クライアント)に通信結果を返却します。
そのAPI開発に必要なスキルですが、下記のようなものが最低限必要になります。
- サーバー開発の際に必要な知識
- RESTやGraphQLなどの用語について調べたときになんとなく理解ができること
- リクエストヘッダやクエリパラメータなどの用語について調べたときに理解できること
開発難易度
難易度:★★★☆☆
API開発はアプリケーション開発と違い、フロントエンドの開発が無いので、その分難易度は下がります。ですが、データベースとの接続や外部APIとの接続をしたいとなると開発にやや時間がかかります。
データベースはデータベース作成・テーブル作成などから行わないといけないので、最初は煩わしく感じるかもしれません。ですが、始めにやっておくと後々困らなくて済みますので少しだけでもいいので勉強しておくといいでしょう。
Go言語を効率よく学ぶには
まず、変数や定数などの用語が分からない場合はまず開発の基礎から学べるドットインストールやProgateを進めるといいでしょう。どちらもボリュームは多すぎないので、基礎を学ぶのにはとても良いと思います。
データベースに関する知識に自信が無ければ、ついでにデータベースの勉強もしておくと後々の開発が捗ります。Webサイトの画面デザインなども自分で開発したいのなら、フロントエンドの知識(HTML, CSS, JavaScript等)も勉強しておきます。
そして、開発の基礎をある程度カバーできたらGoの公式チュートリアルであるA Tour Of Go(https://tour.golang.org/welcome/1)をやってみましょう。このチュートリアルでGoの書き方についてある程度網羅することができます。
株式会社エイベルのウェブサイト(http://golang.jp/)では、A Tour Of Goの情報プラスアルファを学ぶことができます。情報が少し古い部分もあるので、うまく動かない場合はGoのバージョンを確認してみましょう。
まとめ
Go言語では色々なプラットフォームで、サーバーやアプリケーションなど色々なものを開発することができます。今回はご紹介しませんでしたが、デスクトップアプリの開発も可能です。
Goは幅広い用途に対応している分、作りたいものに合わせて言語を変更する必要が無いので、自分が目指すものに合わせて開発の仕方を変えるだけで済みます。フロントエンドの知識だけは学んでおく必要がありますが、Go templateというものを使えば一応Go言語だけで画面をつくることもできます。
もし作りたいものは決まっているのに開発言語が決まっていないのであれば、ぜひ一度Go言語を触ってみてくださいね!