Web開発にGoを使う理由

Webサービスのバックエンド開発と言えば、古くはPerlやPHPが中心でした。 最近になってRuby on RailsやDjango(Python)や、Express(JavaScript)などの言語が採用されるようになってきました。 これらの言語はどれもスクリプト言語というもので、実行毎にインタプリタが解釈するタイプの言語です。

スクリプト言語は手軽に扱える利便性とプロトタイピングの速さからベンチャー企業などで多く採用されています。

また、業務系アプリケーションだとJavaやC#が使われることが多いようです。これらの言語は中間言語にコンパイルされVM上で動作します。.NETやJavaの豊富な資産を利用でき、高速かつ(良い意味で)枯れていて安定した動作が見込めるのが採用理由の1つでしょう。

しかし、近年今まであまり採用されて来なかったコンパイル型のプログラミング言語が採用される例があります。その1つがGoです。

パフォーマンス面で有利なコンパイル型言語

コンパイル型の言語は、スクリプト言語と比べて高いパフォーマンスが期待できるという特徴があります。 スクリプト言語は、インタプリタが実行毎にコードを分析、解釈して実行されるので実行速度には限界があります。 一方、コンパイル言語は事前にコンパイルという機械語に変換する作業を行う為、実行時に解釈する必要がなく高いパフォーマンスを発揮できます。 こうした事から、サーバーに高負荷がかかる場合、コンパイル言語は圧倒的に有利です。

ただし、データーベースへの通信コストやIOコストはスクリプト言語と変わらず存在します。コンパイル型は速いと短絡的に考えるのではなく効率的な設計を心がける必要があります。

事前にコンパイルするという強み

Goは事前にコンパイルする言語です。 つまり、シンタックスエラー(カッコが対応していないなど)のマイナーなエラーはコンパイル時に警告されます。(そもそも、コンパイルできません。) コンパイルする際に様々なエラーを出力してくれるとデバッグが楽です。 設計に問題があるような潜在的なバグは見つけられなくとも存在しない値を参照した といったよくあるバグはコンパイラーが事前に指摘してくれます。 一方、スクリプト言語は試しに実行してみないとわかりません。 最近は、PyLint, PHP Lintのように事前にチェックできるツールもありますが、このようなツールを導入するのにも手間がかかります。 しかも、試しに動かしてみたらデータベースを壊してしまったり…色々大変です。

Go言語ならではの強み

これまで、コンパイル型の言語を採用する利点について説明して来ました。 しかし、コンパイル型の言語はCやC++, 新しいものだとDといった他の言語もたくさんあります。 では、なぜGoを採用したのでしょうか?ここでは、各言語と比較しながらGoの利点を探っていきます。

充実した基本ライブラリ

Goは他のどの言語よりも基本ライブラリが充実しています。 (C++のBoost強力だぁ!と言いたいかもしれませんが抑えてください。) 基本ライブラリだけで、Webサーバーが書けます。Zipファイルの解凍・圧縮だって基本ライブラリで十分です。

優れたパッケージ管理

GoはGithub上にある外部のライブラリをimport構文を用いて効率的に管理することができます。これが、CやC++となるとライブラリの管理はもちろんビルドにだって一苦労します。 (CMakeは優秀ですが、C++のビルドには骨がおられます)

Goのシンプルさ

Goはコンパイル言語であるにも関わらずスクリプト言語のような手軽さがあります。C++やRustなどのコンパイル言語は複雑な構文を備え、まともに書けるようになるまでに期間を要します。一方で、GoはRubyやPythonのように学習しながら書くことも容易です。これは、Goの文法が大きな要因となっています。

Goには他のオブジェクト指向言語にあるような構文や機能がないことが多いです。例えば、class構文やenumなどもありませんし現在のところジェネリクスもありません。

一見するとすごく不便なように感じますが、学習コストが低くシンプルに記述できるという利点にもなります。また、オブジェクト指向言語のギミックを生かした超絶技巧のような書き方もできないので誰が書いても読みやすいコードになります。この特徴はスピードを持ってプロダクトを開発することシンプルなロジックを多く持つバックエンドに向いていると言えます。

シンプルな構文によって得られる利点はそれだけではありません。Goは同世代の他のプログラミング言語と比べると圧倒的と言っていいほどコンパイル速度が速いのが特徴です。シンプルな構文なためコンパイラにとっての負荷も少ないのです。

テストのしやすさ

ソフトウェア開発においてバグをいかに少なくするかは常に課題となります。この点に置いてもGoは大きなアドバンテージを持っています。
Go言語はコンパイル時にシンタックスエラーを指摘してくれるだけでなく、 コンパイル時には指摘されない問題もGo vetが指摘してくれます。 また、Goは標準でユニットテストがサポートされているのでテスト用のフレームワークを導入することなく簡単にテストすることができます。

使えるフレームワークがある!

Webのバックエンド開発を行う場合、ほとんど何らかのフレームワークを使用しているのではないでしょうか。 CakePHP、Ruby on Rails、Express,、Djangoなど様々なフレームワークがありますが、 これらのフレームワークを使わずに書くというのは大変です。もしかしたら、Ruby on Railsを使いたいからRubyにした。 というようにフレームワークを決めてから開発言語を決定した例も多いかもしれません。 新しい言語で開発すると、どうしても「使えるフレームワークが少ない」または「全くない」ということが多いです。 しかし、GoにはBeegoという充実したフルスタックフレームワークがあります。 また、シンプルに作りたい場合はルータやアクションだけを提供したマイクロフレームワークで開発することもありますが、ORMなども整っており標準ライブラリも充実しているためRailsやDjangoと変わらない感覚で作ることができます。

Go言語学習のおすすめ書籍

 

おすすめGo言語

Rakuten

まとめ

Goはコンパイル言語の利点とスクリプト言語の手軽さを併せ持ったような言語です。是非、検討してみてください。

スポンサード

Microsoft Public Affiliate Program (JP)(マイクロソフトアフィリエイトプログラム)
Microsoft Public Affiliate Program (JP)(マイクロソフトアフィリエイトプログラム)

こちらもどうぞ

macOSにMySQL環境を整える

MORE