昨今はフリーランスエンジニアへの企業からの需要が増え始めていて、現在日本国内にいるエンジニアの2割近くが企業に所属しない自由な立場で活動しています。 しかし、フリーランスエンジニアに転向した方 […]
Go言語での開発を試してみる 〜調べる編〜
こんにちは。haruhikonyanです。
自分go言語というものを実はこれまで触ったことが無かったのでちょいと触ってみることにしました。
とはいえ何がやりたいとかそういうことは無いのでとりあえず Hallo World
と開発のための道具としてはどういうものがあるかを調べてみようと思います。
目次
go言語のインストール
まずはインストールから。
調べるにもとりあえず手元でgo自体が動かないとつらいものがあると思うのでインストールします。
windows 版
- インストーラダウンロード
公式 の Downloads ページより Microsoft Windows を落としてきます。 - インストール
落としてきたインストーラーをそのまま実行 - バージョン確認
> go version go version go1.10.3 windows/amd64
無事インストールされて PATH も自動的に通してくれています!
[adinserter block="1"]
mac 版
- homebrew でインストール
自分は普段から homebrew を使っているのでインストーラは使わずに homebrew でインストールします。$ brew install go
- バージョン確認
$ 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 では 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 - Visual Studio Code
Microsoft 製のエディタで基本的にはプラグインを追加して使う - GoLand
JetBrains 製のIDE
30日フリートライアル期間があり、それ以降はライセンス料を払っての利用となる
環境設定などをすべてGUIで行うことができ、初期状態でテストが可能だったりする。- 参考記事
- Atom
GitHub 製で Visual Studio Code と同じく基本的にはプラグインを追加して使う
Visual Studio Code に比べて動作が重いと言われてたりする- 参考記事
- ATOMでGolangの環境設定
パッケージ管理
- ATOMでGolangの環境設定
- 参考記事
- dep
公式が開発している依存関係管理ツール
特にこだわりが無ければ現在ではこれを使えば良いと思う - glide
dep が登場する前に存在したサードパーティー製のパッケージ管理ツール - vgo (Versioned Go)
Go1.12で正式導入予定のバージョン管理ツール
現在の最新であるGo1.11で使ってみることは可能であるが、まだ発展途中で人類にはまだ早いとの噂も。。。 - 使わない
パッケージ管理しないといけないような粒度の成果物つくるのは Go じゃなくていい説という話も。。。
次回予告
次回は後編ということで実際にこれらの調べた要素を組み合わせて簡単な何かを作ってみたいと思います。
[adinserter block="1"]
>Go言語での開発始めてみる〜開発環境を作る編〜
>Go言語での開発始めてみる〜beego のコード自動作成機能を試す編〜haruhikonyan
大きな野望を抱くホルン吹き。
- Windows