WESEEK Tech Blog

WESEEK のエンジニアブログです

Go 言語での開発を試してみる 〜調べる編〜

こちらは 「Go言語での開発を試してみる 〜調べる編〜」からの転載です。

2018 年 8 月時点での Go 言語関連の調査結果を紹介しています。


こんにちは。haruhikonyan です。 自分 Go 言語というものを実はこれまで触ったことが無かったのでちょいと触ってみることにしました。 とはいえ何がやりたいとかそういうことは無いのでとりあえず Hello World と開発のための道具としてはどういうものがあるかを調べてみようと思います。

Go 言語のインストール

まずはインストールから。 調べるにもとりあえず手元で go コマンド自体が動かないとつらいものがあると思うのでインストールします。

windows

  1. インストーラダウンロード
  2. インストール
  3. バージョン確認

     > go version
     > go version go1.10.3 windows/amd64
    

無事インストールされて PATH も自動的に通してくれています!

mac

  1. homebrew でインストール

     $ brew install go
    
    • 自分は普段から homebrew を使っているのでインストーラは使わずに homebrew でインストールします。
  2. バージョン確認

     $ 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、 PythonDjango といったフレームワークが人気が高く幅広く使われていると言えるでしょう。

また、フレームワークを採用することでチーム開発をする上でのコーディング規約などが自然と揃い、読みやすくなるという利点もあると言えるでしょう。 車輪の再開発を悠長にやっている暇は無いのです。使えるものを使いましょう。

開発エディタ候補

開発環境においても VSCodeAtom のようなテキストエディタ拡張機能を追加して機能を充実させていくようなタイプのエディタもあれば、Java でいう Ecripce や IntelliJ のようなすでにデバッガ機能などが充実した IDE (統合開発環境)という大きな二つの選択に分かれると言えます。

前者のテキストエディタがベースのものではまず軽いといったメリットがありますが、機能を増やすには拡張機能を探して自分で入れる必要があったり、全ての要件を満たそうとすると自分で色々調べたりしなければならないのが欠点とも言えると思います。また、全てを詰め込もうとするとエディタ自体も重くなってしまうとうことも十分考えられます。 後者の IDE では専用ということもあり、機能は一通り揃っているが、エディタ自体が重いということもよくあることです。

エディタはよく Vim vs Emacs というような宗教戦争などと揶揄されるようにエンジニア個人の好みも大きく分かれるところです。開発効率にも大きく影響する部分だと思うのでベストな選択をしたいところです。

パッケージ管理

開発を行う上でライブラリやパッケージの依存管理はほぼ必須と言ってもいいでしょう。Node.js には npm や yarn といったものがあったり、Ruby では RubyGems (gem) であったり、他にもさきほど Mac で Go をインストールするために使った Homebrew もパッケージ管理システムです。

これらにパッケージ管理を任せることで、だれがアプリをビルドしても必ず同じパッケージ構成にできるというのも大きな利点の一つです。 開発をする上で依存関係を人間が細かく気にすることなく進める上では欠かせない存在であると言えます。

Go で本格的に開発するための道具候補

フレームワーク

Web フレームワークばかりになってしまいましたが、フレームワークの紹介です。

Gin

beego

Echo

iris

Revel

Martini

Gorilla

開発エディタ候補

公式ページによると4つのエディタが紹介されていました。

vim

Visual Studio Code

GoLand

Atom

パッケージ管理

dep

glide

vgo (Versioned Go)

使わない

  • パッケージ管理しないといけないような粒度の成果物つくるのは Go じゃなくていい説という話も。。。

次回予告

次回は後編ということで実際にこれらの調べた要素を組み合わせて簡単な何かを作ってみたいと思います。