The Go Programming Language皆さんやってますか?Technology Radar July 2014 | ThoughtWorksでは ADOPT となり、あの @t_wada さんも 「2014年プログラミング大予測」に参加しました - t-wadaのブログ にて今年流行ると言っています。まさに今が旬な言語です。
まず最初は Hello, World から
http://golang.org を開くと、最初に目につくのは Hello World です。(正確には Hello, 世界になってたけど) おもむろに Run をクリックすれば表示されます。
各プラットフォームに対応
Downloads - The Go Programming Language をみればわかるとおり、Mac OS X、Linux、Windows と各プラットフォームに対応していることがわかります。親切にインストーラーも用意されていますので、簡単にインストールすることが可能です。
日本語チュートリアルも用意されている
A Tour of Go にて Hello, World から条件分岐、ループ、例外、HttpServer まで一通り説明されています。各トピックが1ページにまとまっており、PlayGroundですぐに実行して確認出来るため、既に他言語をやっている人にとって習得は用意だと思われます。
Microsoft Azure Web サイトで Hello, World を出力する
Go 言語の紹介はここまでとして、ここからが本題です。
Microsoft Azure Web サイトで Go言語 が動かないかなと思いました。なぜなら以前にWindows Azure Web サイトで Ruby を動かしてみた(CGI 編) - しばやん雑記 を見ていたからです。そして、 試行錯誤した結果、動きました!!
これだけですが、結構いろいろやらないといけなくて大変で、動いたときはちょっとガッツポーズしてしまいましたw
CGI として Go を動かす
Go のチュートリアルでは、HttpServer も建てられてしまうので、CGI として動かすのは勿体ないというか無駄かもしれませんが、まずは CGI から初めていきたいと思います。
用意するものは次の通りです。
- Microsoft Azure Web サイト(無料でOK)
- Go Runtime
- Web.config
- Site Extensions
- Microsoft Azure Webサイト の設定
- hello.go(ソースファイル)
順番に説明していきます。
Microsoft Azure Web サイト
管理ポータルからWebサイトを作ってください。無料で十分動きます。詳細は省きますね。
Go Runtime のインストール
Downloads - The Go Programming Language から 「go1.3.windows-386.zip」 をダウンロードする。(無料では64bitが動かないため)
Azure Web サイトに Kudu を使用して、アップロードします。Kudu へのアクセス方法は Webサイト のアドレスに scm という文字列を挿入するとアクセスすることが出来ます。例えば、「 https://nnasaki-spring.azurewebsites.net/ 」ならば、「 https://nnasaki-spring.scm.azurewebsites.net/ 」のようにします。
Debug Console から、Power Shell を開いて D:\home\site\wwwroot
まで移動します。移動後、ブラウザへ「go1.3.windows-386.zip」をドラッグアンドドロップするとアップロードできます。
アップロードしたzipは PowerShell にて、unzip go1.3.windows-386.zip
して解凍します。実行した結果次のようになります。
※ go の Runtime は公開ディレクトリじゃないところに格納したほうが良いですが、テスト的にこのまま進めます。
Web.config の作成
しばやん先生の記事 Windows Azure Web サイトで Ruby を動かしてみた(CGI 編) - しばやん雑記 を参考にWeb.configを次のように作成します。
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <add name="GoCGI" verb="*" path="*.go" modules="CgiModule" scriptProcessor="D:\home\site\wwwroot\go\bin\go run D:\home\site\wwwroot\hello.go" resourceType='Unspecified' /> </handlers> <cgi createProcessAsUser="false"/> </system.webServer> </configuration>
hello.go 決め打ちですが、まぁ、まずはミニマム構成で進めましょう。
Web.config は先ほどと同じように Kudu を使用して、D:\home\site\wwwroot
にアップしておきます。
Site Extensions を追加する
Web.config だけでは動くようにはならず、Site Extensions を追加しないとダメなようです。Site Extensions については Windows Azure Web Sitesの魅力を120%引き出す « ブチザッキ を参照のことということで、確認するとどうやら空のASP.NETアプリケーションを作成して、applicationHost.xdt というファイルに次の設定を書いてあげる必要があるそうです。
<?xml version="1.0" encoding="utf-8"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <system.webServer> <security> <isapiCgiRestriction> <add path="D:\home\site\wwwroot\go\bin\go run D:\home\site\wwwroot\hello.go" allowed="true" xdt:Transform="Insert" /> </isapiCgiRestriction> </security> </system.webServer> </configuration>
いちいち作るのは面倒だと思うので、http://1drv.ms/1xMvVDW にアップしました。 cgi.zip をダウンロードして、 Kudu にて D:\home\SiteExtensions
に移動して、cgi.zip をアップして、Unzip してください。解凍直後はこんな画面になると思います。
Microsoft Azure Webサイト の設定
Microsoft Azure のポータルサイトで設定が必要です。ポータルサイトのWebサイトの構成を開き、下のほうにスクロールして、「アプリケーション設定」に次の Key/Value を設定します。
- GOROOT=D:\home\site\wwwroot\go
- WEBSITE_PRIVATE_EXTENSIONS=1
GOROOT は環境変数で、これが無いと Go が動きません。 WEBSITE_PRIVATE_EXTENSIONS は先ほど自分で作成した Web Extensions を有効にします。
設定を追加したら「保存」して「再起動」をします。
hello.go の配置
だいぶ前置きが長くなりました! hello.go のソースを次のように記載して、D:\home\site\wwwroot\
に置きます。
package main import "fmt" func main() { fmt.Println("Content-type: text/html\n\n") fmt.Println("Hello, World") }
https://nnasaki-spring.azurewebsites.net/hello.go にアクセスします!次のように表示されると思います。
尚、Content-Type
を設定しないと次のようなエラーが表示されます。
私も最初忘れてて D:\home\LogFiles\DetailedErrors
を見て、The CGI process has a flaw and does not return a complete set of HTTP headers.
で思い出しました。こんなエラー画面です。