[Golang] Go言語でサービス作ってる話

38
のサービスを Go言語で作ってる話 / 橋本祥一

description

Go言語でサービス作ってる話

Transcript of [Golang] Go言語でサービス作ってる話

Page 1: [Golang] Go言語でサービス作ってる話

のサービスを Go言語で作ってる話

     / 橋本祥一

Page 2: [Golang] Go言語でサービス作ってる話

• はしもと よしかず(橋本 祥一)

• ハンドル名:kamicup

• 株式会社ソウ CTO

• 実働4人でサービス開発

• 広く浅くなんでもやる(エンジニア&経営)

Page 3: [Golang] Go言語でサービス作ってる話

1時間リフォーム【大工さんの空き時間に簡単な作業を頼める】

Page 4: [Golang] Go言語でサービス作ってる話
Page 5: [Golang] Go言語でサービス作ってる話

新築・注文住宅 リフォーム

NEW!

Page 6: [Golang] Go言語でサービス作ってる話

大工さんの空き時間に簡単な作業を頼める

1時間リフォーム

Page 7: [Golang] Go言語でサービス作ってる話

住まいに関する小さな悩み

Page 8: [Golang] Go言語でサービス作ってる話

大工さんなら “朝飯前”です!

Page 9: [Golang] Go言語でサービス作ってる話

たとえば、どう使う?

Page 10: [Golang] Go言語でサービス作ってる話
Page 11: [Golang] Go言語でサービス作ってる話
Page 12: [Golang] Go言語でサービス作ってる話
Page 13: [Golang] Go言語でサービス作ってる話

おもしろい使い道 考えたら教えてください(^^)

Page 14: [Golang] Go言語でサービス作ってる話
Page 15: [Golang] Go言語でサービス作ってる話
Page 16: [Golang] Go言語でサービス作ってる話

(ここまで宣伝)

Page 17: [Golang] Go言語でサービス作ってる話

あまりにGo実用事例を聞かないので…

「とりあえずここに居るよ!」

と表明するための発表ですw

Page 18: [Golang] Go言語でサービス作ってる話

ずいぶん長いことJava使いでした

Page 19: [Golang] Go言語でサービス作ってる話

• ’95 HTML/JSの延長でJDK1.1のbetaで遊びはじめた

• ’00 航空機器設計の数値計算で個人的にJava使ってた

• ’01 EDIと文書系のXML移行期に社内の陣頭対応

• ’03 RSS流行り始め頃にデスクトップ用ツール作ったり

• J2ME CLDC/MIDPでアグリゲータ作ったり

• PalmOS/Winの同期アドオン(Conduit)作ったり

• 社内のワークフロー系システムをJ2EEベースで作ったり

Page 20: [Golang] Go言語でサービス作ってる話

• サーバー/デスクトップ/モバイル/ネットワーク

• アプリレイヤー/ミドルレイヤー(フレームワークやらSocketサーバやら)/アーキテクチャ

• きほん何でもJavaで作って

• 必要なとこはC/C++で書いてJNIでネイティブ対応

Page 21: [Golang] Go言語でサービス作ってる話

ここ数年

Page 22: [Golang] Go言語でサービス作ってる話

• iOSアプリはObjective-Cで

• そのバックエンドはJavaで

• (Androidはめんどいので退却)

• 動的なウェブサイトはJavaか、必要に応じPHPで

• RoRとかPlayは使い捨て(デモ用途)で

Page 23: [Golang] Go言語でサービス作ってる話

etc.PHP

HTML

JS

Java

Obj-C

こんな割合でしたが

Page 24: [Golang] Go言語でサービス作ってる話

• とはいえ、別に言語に拘る気もないので、状況に合わせて何でも使う。

• Coumfyのプロトタイピングの当初に、kwmt27が「Goがいい」とか言い出したので、

• まぁいいやと思って、Go使い始めた結果・・・

Page 25: [Golang] Go言語でサービス作ってる話

etc.PHPJava

HTML

JS

Obj-C

Go

いまこんな割合に

以前ならJavaで作ってた類のものはGoで作るようになった

Page 26: [Golang] Go言語でサービス作ってる話

Goやってみてどうだったか

Page 27: [Golang] Go言語でサービス作ってる話

• 1日目 … チュートリアル「A Tour of Go」やった

• 2日目 … 言語仕様を読んで、試しに書き始めた

• 3日目 … 慣れたJavaと同じ早さで書ける気がする

• 1週間後 … なんかすごいサクサク進んでる・・・

• シンプルなので(基礎力さえあれば)導入容易

• ふつうに使える( ・∀・)!! 言語&処理系だと思う

Page 28: [Golang] Go言語でサービス作ってる話

• コンパイラ言語の安定感(スクリプト言語のデバッグとか・・・ムキー!)

• 記述がシンプル(書くのがラクで、読みやすい)

• 素直でハマりどころが少ない

• 決して、尖った言語ではない(むしろ平凡で、実用性のために割り切ってる感あり)

Page 29: [Golang] Go言語でサービス作ってる話

どういう構成で使ってるか

Page 30: [Golang] Go言語でサービス作ってる話

Go1.1.2の頃にMaxで同時500接続ぐらいだったので手前

にNginx置くことに

go get github.com/go-sql-driver/mysql go get github.com/coopernurse/gorp go get github.com/gorilla/sessions go get github.com/srinathgs/mysqlstore go get github.com/nfnt/resize go get code.google.com/p/goauth2/oauth go get code.google.com/p/google-api-go-client/analytics/v3

使ってるGoライブラリ

Nginx

Go製アプリ

MySQL

FastCGIプロトコル

HTTPプロトコル

使ってるWeb APIFacebook (OAuth2, GraphAPI) WebPay PayPal Google APIs Chatwork geocoding.jp ajaxzip3

データ永続化(セッションも)

さくらVPS-1G

ファイルシステム

fastcgi cache

Page 31: [Golang] Go言語でサービス作ってる話

使ってるGoライブラリ

Nginx

Go製アプリ

MySQL

FastCGIプロトコル

HTTPプロトコル

使ってるWeb APIFacebook (OAuth2, GraphAPI) WebPay PayPal Google APIs Chatwork geocoding.jp ajaxzip3

データ永続化(セッションも)

ファイルシステム

fastcgi cache

go get github.com/go-sql-driver/mysql go get github.com/coopernurse/gorp go get github.com/gorilla/sessions go get github.com/srinathgs/mysqlstore go get github.com/nfnt/resize go get code.google.com/p/goauth2/oauth go get code.google.com/p/google-api-go-client/analytics/v3

コンパイル&スタティックリンクされて単一バイナリ実行ファイルになってるので、そのファイルだけ持っていけば他のサーバでもすぐ動く。(実行環境のためにインタプリタとかランタイム・ライブラリとかアプリケーション・サーバーとか、そうい

うの一切要らねぇから!)

さくらVPS-1G

Page 32: [Golang] Go言語でサービス作ってる話

Go使ってると言うと聞かれがちなこと

Page 33: [Golang] Go言語でサービス作ってる話

人材面で困らない?

• たしかに経験者は少ないよね。

• でも学習コストが低いから、他の言語で基礎ができてるエンジニアなら、ちょっと勉強してもらったら3日目には戦力になると思う。

Page 34: [Golang] Go言語でサービス作ってる話

MVC Frameworkあるの?

• 何個かあるみたいだけど、うちは使ってない。

• Viewは標準のテンプレートエンジンで充分。

• フレームワークって、それ自体の学習コストは成果に無関係なので、チームの作業効率が落ちないなら使わなくても。。。

Page 35: [Golang] Go言語でサービス作ってる話

日本語の情報が少なくない?

• まぁしょうがない。

• 最近は本も出てるみたい?

• 「バカ」を付けてもいいぐらい単純で素直な言語なので、情報を探しまわらなきゃならないような事態ってそんなに無いよ。

Page 36: [Golang] Go言語でサービス作ってる話

WebAPIにGoのライブラリが無い

• そやね。(́・ω・`)

• でも、非公式ライブラリはGitHubとかにあったりするし、いまどきウェブAPIは大抵RESTでjsonなんやから、自分で書いてもそんなに大変じゃないよ。

Page 37: [Golang] Go言語でサービス作ってる話

使ってるGoライブラリ

Nginx

Go製アプリ

MySQL

FastCGIプロトコル

HTTPプロトコル

使ってるWeb APIFacebook (OAuth2, GraphAPI) WebPay PayPal Google APIs Chatwork geocoding.jp ajaxzip3

データ永続化(セッションも)

ファイルシステム

fastcgi cache

go get github.com/go-sql-driver/mysql go get github.com/coopernurse/gorp go get github.com/gorilla/sessions go get github.com/srinathgs/mysqlstore go get github.com/nfnt/resize go get code.google.com/p/goauth2/oauth go get code.google.com/p/google-api-go-client/analytics/v3

Google APIs以外は自分でラッパー書いたけど、必要なとこだけ書いてるので、どれもせいぜい数時間~1日ぐらいしかかかってないと思う。 例えばWebPayなら140行。

さくらVPS-1G

Page 38: [Golang] Go言語でサービス作ってる話

エンジニアにとって 気持ちいい言語!

あと、普通に「使え」ます。