勉強会と Co-Edo について
コワーキングスペース茅場町 Co-Edoで行われたGo言語の勉強会Let's Go! #Golang勉強会 Vol.1に参加してきました。Co-Edoは去年はじめてのgit勉強会&もくもく会 に参加させていただいたのが初めてでその後利用していませんでしたが、オーナーの田中さんににはその後Facebookでつながっていただいていたので、もう一度利用したいと思って思っていました。
今日の勉強会は、コワーキングスペースの片隅机1,2卓を囲んで参加者4,5人の小さな勉強会でした。僕以外の人はGo言語経験者みたいです。僕は今日はじめてインストールしました。
Go言語について
Go言語といえば、Googleが作っている新しいプログラミング言語です。コンパイル式でバイナリを出力できるのが特長で、C++をより開発しやすくしたような立ち位置です。そのため、速度を求められる領域での利用が多く、事例としては、Dockerなどがあります。Gunosyのインフラで使用されていることも有名です。僕のTwitterのTimelineの中でもやっている人をちょくちょく見かけるようになりました。
初めて触ったGolangの印象
半日触ってみた印象としては、今からC++を勉強するよりは学びやすい印象を受けました。文法はCやJavaのようでpythonのようなLLの影響も受けている少し独特な記述の言語ですが、使っていればすぐに馴れそうです。
Webフレームワークもありますが、まだ企業で利用するほどには安定していないようです。
しかしライブラリが充実しているので、その気になれば結構良いWebフレームワークやテンプレートエンジンが作れるんじゃないかなと思います。
作ったプログラム(しょぼいので注意)
ひとまず、今回僕はGoを使って簡単なWebアプリを作ってみましたw
URLのパラメータにfrom, toを指定して、任意の範囲でグラフィカルなFizzBuzzができるアプリです。誰の役にもたちません(笑)
普通にやると
$ go run web.go
のようにして、localhost:4000にアクセスして動作を確認できますが、GCE上のDebian(つまり、このブログを動かしているインスタンス)でテストしていたので、4000ポートにアクセスできません。
curlならできますがつまらないですね。
susumuis@instance-4:~$ curl http://localhost:4000/?from=1&to=10
[1] 27781
susumuis@instance-4:~$ <!DOCTYPE html>
<html>
<head>
<title>hello, golang</title>
<style>
.fizz { color: red; }
.buzz { color: blue; }
.fizzbuzz { size: 1.5rem; color: purple; font-weight: bold; }
</style>
</head>
<body>
to value must be integer
</body></html>
なので、一時的にこのブログを配信しているnginxに曲がりをしてインターネットに配信しちゃいましたwww「おまえ、いきなり本番環境に反映する気か!」などのツッコミには屈しません。(もう落としてます)
location /goweb/ {
proxy_pass http://127.0.0.1:4000;
}
一応jQueryも入っているのでデバッガで画面いじるのが醍醐味ですw
Goの使いどころ
まだ事例は少ないですが、静的型付け・コンパイルというのがGoの最大の特長でしょう。それでいてpythonなどのライトウェイト言語の特長を取り込んでいるので、非常に良い言語だと思いました。次のような事例では有効でしょう。
- インフラなどのリソースを極限まで活用したい
- go言語がインストールされていない環境にアプリケーションを配布したい
ちなみに、
$ go build web.go
のようにしたらバイナリを出力できます。出力されたバイナリはgoがインストールされていない環境でも動作するようです。
susumuis@instance-4:~/godev$ go build web.go
susumuis@instance-4:~/godev$ ls -la | grep web
-rwxr-xr-x 1 susumuis susumuis 5703384 7月 27 21:42 web
-rw-r--r-- 1 susumuis susumuis 1466 7月 27 17:43 web.go
1.4KBのソースコードから吐き出されたバイナリは5.5MBですかwライブラリを含んでるのか大きいですね。フロッピーに入らない。
GoはWebがまだ弱いので、実質的に、静的型付けが欲しいWeb言語という用途ではまだでしょう。その用途ではFacebookが開発したHackが良いと思います。HackはPHPに型を載せたようなシロモノなので、普通にPHPのエコシステムが使えます。パフォーマンスはFacebookがHHVMを開発して頑張っています。さらに極限までチューニングしたい場合は素直にJavaを使うのが現状一番良いでしょう。ただし、Javaを使えば一律に速くなるというわけではなく、JVMという怪獣を手懐ける必要があります。
僕はその必要性を感じませんが、「サーバーもフロントも同じ言語を使いたい」という場合は、現状はNode一択なのでしょう。Dartがどこまで来るのか興味が湧いています。
実はこのブログを動かしているWordPressにHackで書いた独自プラグインを載せています。そんなことも簡単にできちゃいますが、それについては後日書きます。