地元が先日カニ祭りだったということで、同僚とカニを食べました。
捌かれていないカニたち。
ポーズをとらせた。
捌かれた。捌かれたカニたちはこのまま食べた。
一部鍋にカニを入れた。
最後に雑炊を作ってシメ。
昨日シバソンを開催しました。すでにシバソンは概念がひとり歩きしていて、勝手に誰かが休日にシバソンと称してコードを書いているので、もう何回目の実施かもわかりません。昨日のシバソンは史上最大人数のシバソンでした。京都オフィスに7~8人、リモートに4人ほどいました。雑なイベントなのに10人以上で開催しててすごい。
僕は昨日はgo言語の入門をしていて、ひとまずwebアプリケーションを作りながら入門しようと思ったので、gojiとgo-xslateを使った入門をしていました。入門エントリーも書いたので、参考にどうぞ。
gojiとgo-xslateを使って、GoでのWebアプリケーション開発入門をした - $shibayu36->blog;
シバソン、自分にとって非常に良いイベントだと勝手に思ってる。
自分は最近は仕事ではコードを一切書いていないために、コードも書きたいけど今の仕事も挑戦したいという葛藤を常に感じている。けれどYAPCの感想の時に
方向性まだすごくぶれてるけど、ひとまず今やりたいことちゃんとやろうと思った。やりたいこと二つあったときにどっちかを割りきらないといけないかもとか思ってたけど、やりたいこと二つあったら両方やったら良いし、やるべきとは思ってるけど自分でやりたくないこともあえてやらないみたいにしても良いのかもしれない。
YAPC::Asia 2014に参加してきた - $shibayu36->blog;
ということを書いていた。このやりたいこと二つというのはディレクターとエンジニアなのだけれど、ひとまず決めたのは仕事はこのまま頑張る、エンジニアはひとまず自分の趣味でどんどんやっていこうということだった。そう思ったはいいものの、絶対に機会を作らないと自分の趣味で積極的にコードを書けないと思った。そこで周りを巻き込んでコードを書こうと思いたって、場所と時間を提供するだけ、リモートでも参加するだけのハッカソンを自分の好きな時に開催することにした。
これが成功したと思っていて、周りを巻き込んでコードを書くということをしたことによって、自分も趣味だけでも積極的にコードを書くようになったと思う。面白いことに、前エンジニアをしていた時よりも趣味の時間でコードを書く時間が増えたように感じる。周りを巻き込んで自分のモチベーションに繋げる効果すごい。またそれ以外にも、それに参加してくれた人たちがいろいろ成果を出していて非常にうれしい。
シバソン、自分の周りの人で参加したい人がいたら適当に入れますので声かけてください。リモートでもいいです。
Golangで簡単なwebアプリを作るためにどうしたらいいか調べていたので、試しにGojiというフレームワークと、go-xslateを使ってHello Worldをしてみた。
GitHub - shibayu36/goji-and-go-xslate-sample
http://localhost:8000/hello/world にアクセスすると、以下の様なものが出るだけのアプリケーション。
これを作った手順にしたがって簡単に紹介。
https://goji.io/によると、main関数の中にルーティングを作成してServeすれば良いだけっぽいのでまずはそれを作ってみる。
func main() { goji.Get("/hello/:name", hello) goji.Serve() }
これで/hello/{name}でhello関数が使われるようになった。URL内の:nameの値は後述するgoji/webのCというstructから取得できる。
hello関数を作ってみる。ここでは単に出力するだけではなくて、go-xslateを利用して出力してみる。
go-xslateはインスタンスを作る時にいろいろ設定が可能。今回はテンプレート置き場をtemplates/以下に、かつTTerseを利用してxslateインスタンスを作成し、レンダリングするコードを書いてみる。
func hello(c web.C, w http.ResponseWriter, r *http.Request) { tx, _ := xslate.New(xslate.Args { "Loader": xslate.Args { "LoadPaths": []string { "./templates" }, }, "Parser": xslate.Args{"Syntax": "TTerse"}, }) tx.RenderInto(w, "hello.tt", xslate.Vars { "name": c.URLParams["name"], }); }
c.URLParams["name"]とすればURL中の:nameに入った部分を取得できるので、それをxslateのrenderする時に渡している。
あとはtemplates/hello.ttにテンプレートを書くだけ。今回は無駄にwrapper.ttも作成し、WRAPPERも利用してみる。
hello.tt
[%- WRAPPER "wrapper.tt" -%] Hello, [% name %] [%- END -%]
wrapper.tt
<!DOCTYPE html> <html> <head> <title>Goji and go-xslate sample</title> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/> <link rel="stylesheet" type="text/css" href="/css/style.css" /> <script src="/js/main.js"></script> </head> <body> <header id="global-header"> Goji and go-xslate sample </header> <div id="content"> [% content %] </div> <footer id="global-footer"> Golang </footer> </body> </html>
静的ファイルも配信し、cssやjsも利用したいと思ったので、配信するコードを書いてみる。これはhttp.FileServerを利用すると出来る。
func main() { goji.Get("/hello/:name", hello) staticPattern := regexp.MustCompile("^/(css|js)") goji.Handle(staticPattern, http.FileServer(http.Dir("./static"))) goji.Serve() }
最終的に完成したのがGitHub - shibayu36/goji-and-go-xslate-sample。ひとまず最低限Webアプリケーションの雛形は作れたと思う。