Go言語は、Dockerの開発言語に使われるなど、今もっとも注目を集めているプログラミング言語の一つです。学習コストも低いと言われていることから、学習言語の選択肢に考えられている方も多いのではないでしょうか?
そんなGo言語について、プログラムを学び始めた初学者にも分かりやすく解説します。
Contents
Go言語とは
2009年11月にGoogleによってオープンソースで公開された言語です。開発当初は、LINUX、MacOSのみサポートしていましたが、2012年3月に公開された正式バージョン1.0ではWindowsもサポートしてリリースされました。2014年12月にはAndorid、2015年8月にはiOSもサポートされました。
UNIXや、C言語やその前身であるB言語などの開発に携わってきたケン・トンプソン氏、ロバート・グリースマ氏、ロブ・パイク氏により、C言語に則りながら、高速かつシンプルにソフトウェアの開発が行える言語として設計されました。
なお、正式名称は「Go」です。
Go言語の特徴
Go言語の特徴について見ていきます。
少ないコード量で開発可能
Go言語が開発されていた当時、PCの性能の大幅な向上に対し、プログラミングは従来のやり方からあまり変わっていなかったことから、開発者たちの生産性を上げるために、新たな言語の開発が望まれました。そんな中、ソースコードを簡略化し、少ないコード量で開発可能にし、開発効率を上げる目的で開発されたのが、Go言語です。
一例を挙げるなら、Go言語では、エラーハンドリングはtry-catch文は使用しない、ループ処理にwhileやeachは使用せずfor文のみ、など、そうしたコードの記述が必要な言語と比べると、比較的少ないコード量で開発可能です。
コンパイラ言語であり高速処理が可能
Go言語はコンパイラ言語です。コンパイラ言語とは、ソースコードを機械が学習可能な言語(機械語)に変換してから実行するプログラミング言語の一種です。
ソースファイルと実行ファイルが別々になっていることも特徴の一つで、プログラム実行時は、プログラムを実行してからそれらの処理を行う他の言語に比べ、それらの処理を必要としないため高速なのが特徴です。
コンパイラ言語には、他にもJavaやC#などがありますが、Go言語は、それらの言語の中でも高速となっています。
JavaやC#は、コンパイルの際に、仮想マシンで実行するためのバイトコード(中間コード)を生成してから、仮想マシンによって機械語を生成します。
仮想マシンとは、ソフトウェアを使って1台のコンピューター内に疑似的に再現したコンピューターのことで、Go言語は、この仮想マシンを必要とせず、コンパイルの際に直接機械語を生成することから、より高速となっています。
多くの大規模サービスに採用されている
Go言語は、高速処理が可能なため、Webサーバー・Webサービスなど、自社でプラットフォームを持つ企業で多く導入されています。
日本では、メルカリ、クックパッドなどの大規模サービスに採用されています。
Go公式サイトでも「Companies using Go」として、いくつかの企業が紹介されています。
参照元:Go公式サイト
Go言語を用いて作れるもの
実際に、Go言語を使用してどのような開発が行われているのかを見ていきます。
・Webサーバー
Go言語は、標準ライブラリのfmtとnet/httpを使用することで簡単にWebサーバーをビルドできます。
また、Go言語は、クロスコンパイルが可能なようにビルドすることができます。クロスコンパイルとは、複数OSの実行ファイルを作ることができる機能のことです。例えばMacで作成したファイルを、Windowsでも実行できるなど、作成するソースコードは一つで済みます。
これらを併せることで、複数環境に対応したWebサーバーを簡単に構築できます。
・GUIアプリケーション開発
デスクトップパソコン向けアプリケーションの開発なら、JavaやC#、モバイル向けアプリケーションの開発は、AndroidならJavaやKotlin、iosならSwiftなどが主流ですが、いずれもGo言語で開発可能です。
まず、他の言語と併用して開発する方法があります。フロントエンド開発をJavascriptなど他の言語で行い、その他をGo言語で行うという方法です。
Go言語のみで開発することも可能です。その場合は、Fyneといったライブラリや、Qtといったフレームワークを用います。
・マイクロサービス化
マイクロサービスとは、アプリケーションを機能ごとに分割して作成し、それらを連携して動かすサービスのことです。
反対に、1つのアプリケーションにすべての機能を備えた状態をモノリスといいます。
モノリスのサービスには、一部のバージョンアップを行いたくても、その影響範囲が大きい、といった問題や、チーム編成が変わった際などに、ソースコードを読み解き、実際に開発ができる状態になるまで手間がかかるといった問題があります。そうした問題解決として、マイクロサービス化が行われ、その際に開発効率の良いGo言語が採用されています。
開発にGo言語が選ばれる理由
様々な言語の中から、実際に開発にGo言語が選ばれる理由を解説します。
コードが読みやすくメンテナンスしやすい
Go言語を使用することで、誰が書いてもシンプルかつ明瞭なコードになります。
例えば、ゴルーチンを使った並行処理は楽に記述ができる上、他の言語に比べて可読性が高いという特徴があります。また、Go言語には便利なツールがあり、それを利用することで可読性は更に向上します。
ツール一覧
go fmt | コードを整形してくれる |
goimports | importを追加したり、削除したりしてくれる |
go vet | コンパイラによって検出されないエラーを見つけてくれる |
golint | スタイルの問題を検出してくれる |
元々、開発効率を上げるために開発されたGo言語は、コードが読みやすく、メンテナンスもしやすいように設計されています。可読性の高さが、Go言語が選ばれる理由の一つとなっています。
大規模なアプリケーション開発に向いている
大規模なアプリケーション開発は、長期間の開発が見込まれ、開発者の入れ替わりが想定されます。その際、複雑なコードで書かれていると、コードを読み解くのに時間がかかり、開発効率が低下します。
シンプルで可読性の高いGo言語で書かれていたなら、そうした問題は起こりません。そのため、大規模なアプリケーション開発で、Go言語が選ばれています。
また、Go言語は並列処理を得意とします。並列処理とは、一つの処理では時間を要する処理でも、並列に処理することで時間を短縮できる処理のことです。
例えば、Salesforceの「Einstein Analytics」は、並列処理を不得手とするハイブリッド「C-Python」アプリケーションから、Go言語に乗り換えています。
Go言語にはどのような案件があるのか
弊社TechReachでは、Go言語の案件は136件あります(2022年10月現在)。Javaの1298件と比較すると、案件数は少ないですが、比較的高単価な案件が多いです。具体的に、いくつかの案件をご紹介します。
業界 | 通信 |
職務内容 | 通信キャリアが展開しているAI予測システムの追加開発の開発支援 ■開発環境 ・AWS ・言語:Typescript、GO ・DB:RedShift ・その他ツール:REACT |
ポジション | バックエンドエンジニア |
スキル | AWS,TypeScript,JavaScript,React,Go言語 |
勤務地 | 東京都 竹芝駅 |
雇用形態 | 業務委託(準委任) |
業界 | Webサービス |
職務内容 | サプライチェーンのリスク管理SaaSの信頼性向上のためのバックエンド開発業務 製品の安定供給を実現するため、複雑なサプライチェーン構造を可視化し、国内外のリアルタイムな災害情報の把握から影響範囲特定を行うことで、持続可能なサプライチェーンを構築するプロダクトです。 ・自社サービスの開発全般業務 ※主にバックエンドのAPI開発ですが、クローラーやインフラの 開発を行うこともあります ・サプライチェーン管理のAPI開発:サプライチェーンマネジメントツリー、ユーザー・サプライヤー情報処理機能の改善、新規機能開発 ・クローラー開発:災害情報の集積と解析およびDB連携の改善、グローバル災害情報を取得する新機能開発 ・災害情報のAPI開発:災害情報をCloudSQLへ連携する機能改善 ・サービスの品質・生産性向上のための仕組み作り ・顧客、CS、営業、PMとの対話を通じたプロダクト設計 ※その他職種に関係なく柔軟に役割を変えて挑戦できる姿勢を期待しています。 |
ポジション | バックエンドエンジニア |
スキル | Go言語,Docker,Python,PostgreSQL |
勤務地 | フルリモート |
雇用形態 | 業務委託(準委任) |
Go言語の習得難易度について
Go言語はコードがシンプルなためコンパイラ言語の中では、比較的習得難易度は低いです。それでもスクリプト言語に比べると習得難易度が高いため、初学者はPythonやPHPといったスクリプト言語から学習するのがおすすめです。
それらを学習済みの方でも、Go言語は比較的新しい言語のため、インターネット上の情報も他の言語に比べて乏しく、Javaなど古くからある言語に比べると一人で学習するのは難しい傾向にあります。
また、Go言語には他の言語には見られない、メモリのアドレス情報についての概念(ポインタ)や、classの代わりに存在する構造体といった概念があり、それらもGo言語の理解を難しくする一因となっています。
学習の際は、公式サイトにチュートリアルがあるので、そちらもご覧になってください。
まとめ
Go言語は、Googleが開発効率を高めるために開発したシンプルな言語です。
Go言語を習得することで、様々な開発ができ、大規模開発にも向きます。
学習コストは低めですが、Go言語特有の概念もあるため、他の言語を学習し、第二言語としておすすめです。
Javaなどに比べるとまだまだ案件数も少ないですが、Googleが開発した比較的新しい言語のため、将来性は高いと言えるでしょう。
この記事を参考に、ぜひGo言語の習得を検討してみてください。
フリーランスの案件をお探しの方はTechReachにご相談ください。
TechReachを運営する株式会社アールストーンはIT・Web業界特化で15年以上の実績がございます。
そのため、高単価・高品質な数多くの案件紹介が可能です。
また一人のコンサルタントが企業と求職者様の担当を行う「両面型エージェント」を採用しているため、あなたの希望に合う案件がきっと見つかるはずです。
TechReachを活用して、理想の案件を見つけましょう!