こちらは 「Go言語での開発を試してみる 〜調べる編〜」からの転載です。
2018 年 8 月時点での Go 言語関連の調査結果を紹介しています。
こんにちは。haruhikonyan です。
自分 Go 言語というものを実はこれまで触ったことが無かったのでちょいと触ってみることにしました。
とはいえ何がやりたいとかそういうことは無いのでとりあえず Hello World と開発のための道具としてはどういうものがあるかを調べてみようと思います。
Go 言語のインストール
まずはインストールから。
調べるにもとりあえず手元で go コマンド自体が動かないとつらいものがあると思うのでインストールします。
windows 版
-
インストーラダウンロード
- 公式 の Downloads ページより Microsoft Windows 版を落としてきます。
-
インストール
- 落としてきたインストーラーをそのまま実行
-
バージョン確認
> go version > go version go1.10.3 windows/amd64
無事インストールされて PATH も自動的に通してくれています!
mac 版
-
homebrew でインストール
$ brew install go
- 自分は普段から homebrew を使っているのでインストーラは使わずに homebrew でインストールします。
-
バージョン確認
$ go version go version go1.10.3 darwin/amd64
こちらも無事インストール完了です。
Hello World
書いてみる
とりあえず公式のトップにある下記コードを拝借し、保存。
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
$ go run hello.go
Hello, 世界
簡単ですね!
コンパイル
Go 言語で書いたコードはデフォルトでクロスコンパイルに対応しているということで早速試してみます。
Windows
windows環境で試しているのでそのままビルド
> go build hello.go
なんとexeが吐き出されます!
それをcmd上で実行してみると?
> hello.exe
hello, 世界
ちゃんと出力されました!
Mac
次は mac 用に出力してみることにします。
$ SET GOOS=darwin
$ SET GOARCH=amd64
$ echo %GOOS%
darwin
$ echo %GOARCH%
amd64
上記のように環境変数をセットしてあげます。
すると、hello というバイナリファイルが出力されました。
そいつを手元の mac に送ってターミナルで実行してみると?
$ ./hello
hello, 世界
どんな環境でも同じコードで動く!楽しい!
本格的に開発するために必要なうんちく
この章は Go 言語あまり関係ないんで飛ばしてくれて構いません。
Go 言語開発を始める上で他言語で開発を始める上で気にしていることを述べています。
フレームワークの有無
開発を行う上で言語の選定と同じ、それ以上に重要なこととしてフレームワークの選定があると思います。
何を作るにしても大体は先人が同じようなことを行なっていることがほとんどで、そのライブラリであったり、フレームワークを選定し、優れたフレームワークのある言語で開発を行うという選択が開発を成功させることであったり、工期を短くする秘訣であったりします。
例えば Ruby には Ruby on Rails という優れた Web フレームワークがあったからこそ莫大な人気が出たと言っても過言ではありません。
他にも Java の Spring や PHP の Laravel、 Python の Django といったフレームワークが人気が高く幅広く使われていると言えるでしょう。
また、フレームワークを採用することでチーム開発をする上でのコーディング規約などが自然と揃い、読みやすくなるという利点もあると言えるでしょう。
車輪の再開発を悠長にやっている暇は無いのです。使えるものを使いましょう。
開発エディタ候補
開発環境においても VSCode や Atom のようなテキストエディタに拡張機能を追加して機能を充実させていくようなタイプのエディタもあれば、Java でいう Ecripce や IntelliJ のようなすでにデバッガ機能などが充実した IDE (統合開発環境)という大きな二つの選択に分かれると言えます。
前者のテキストエディタがベースのものではまず軽いといったメリットがありますが、機能を増やすには拡張機能を探して自分で入れる必要があったり、全ての要件を満たそうとすると自分で色々調べたりしなければならないのが欠点とも言えると思います。また、全てを詰め込もうとするとエディタ自体も重くなってしまうとうことも十分考えられます。
後者の IDE では専用ということもあり、機能は一通り揃っているが、エディタ自体が重いということもよくあることです。
エディタはよく Vim vs Emacs というような宗教戦争などと揶揄されるようにエンジニア個人の好みも大きく分かれるところです。開発効率にも大きく影響する部分だと思うのでベストな選択をしたいところです。
パッケージ管理
開発を行う上でライブラリやパッケージの依存管理はほぼ必須と言ってもいいでしょう。Node.js には npm や yarn といったものがあったり、Ruby では RubyGems (gem) であったり、他にもさきほど Mac で Go をインストールするために使った Homebrew もパッケージ管理システムです。
これらにパッケージ管理を任せることで、だれがアプリをビルドしても必ず同じパッケージ構成にできるというのも大きな利点の一つです。
開発をする上で依存関係を人間が細かく気にすることなく進める上では欠かせない存在であると言えます。
Go で本格的に開発するための道具候補
フレームワーク
Web フレームワークばかりになってしまいましたが、フレームワークの紹介です。
Gin
- のちに紹介する Martini に似た作りとなっており、公式サイトでは Martini に比べて45倍のパフォーマンスが出るとうたっています。
- Github の Star は 19,179
-
参考記事
beego
- Web 用の MVC フレームワークで Bee ツールを利用することで様々な機能を使うことのできるフルスタックのフレームワーク
- Github の Star は 16,314
-
参考記事
Echo
- Gin よりもパフォーマンスが出るとのことで、シンプルで最小を目指したフレームワーク
- Github の Star は 11,123
-
参考記事
iris
- こちらもシンプルで最速をうたっています
- Github の Star は 11,110
-
参考記事
Revel
- フルスタックな Web フレームワークで Ruby 製の Rails の 3~10 倍のパフォーマンスとうたっています
- Github の Star は 10,071
-
参考記事
Martini
- Gin と比べられて遅いと言われいたり、Github を見る限り最近は更新が無い模様。。。
- Github の Star は 10,217
-
参考記事
Gorilla
- こちらはフレームワークではなく Web に関するツールキット
- Github の Star は一番多い mux という URL router で 6,648
-
参考記事
開発エディタ候補
公式ページによると4つのエディタが紹介されていました。
vim
- みんな大好き?vim用のプラグインですね。キーボードのみで完結させたい Vimmer にはこれでしょう。
-
参考記事
Visual Studio Code
- Microsoft 製のエディタで基本的にはプラグインを追加して使う
-
参考記事
GoLand
- JetBrains 製の IDE
- 30 日フリートライアル期間があり、それ以降はライセンス料を払っての利用となる
- 環境設定などをすべて GUI で行うことができ、初期状態でテストが可能だったりする。
-
参考記事
Atom
- GitHub 製で Visual Studio Code と同じく基本的にはプラグインを追加して使う
- Visual Studio Code に比べて動作が重いと言われてたりする
-
参考記事
パッケージ管理
dep
- 公式が開発している依存関係管理ツール
- 特にこだわりが無ければ現在ではこれを使えば良いと思う
-
参考記事
glide
- dep が登場する前に存在したサードパーティー製のパッケージ管理ツール
-
参考記事
vgo (Versioned Go)
- Go1.12 で正式導入予定のバージョン管理ツール
- 現在の最新である Go1.11 で使ってみることは可能であるが、まだ発展途中で人類にはまだ早いとの噂も。。。
-
参考記事
使わない
- パッケージ管理しないといけないような粒度の成果物つくるのは Go じゃなくていい説という話も。。。
次回予告
次回は後編ということで実際にこれらの調べた要素を組み合わせて簡単な何かを作ってみたいと思います。