[golang] go言語でサービス作ってる話
Post on 19-Jun-2015
4.727 Views
Preview:
DESCRIPTION
TRANSCRIPT
のサービスを Go言語で作ってる話
/ 橋本祥一
• はしもと よしかず(橋本 祥一)
• ハンドル名:kamicup
• 株式会社ソウ CTO
• 実働4人でサービス開発
• 広く浅くなんでもやる(エンジニア&経営)
1時間リフォーム【大工さんの空き時間に簡単な作業を頼める】
新築・注文住宅 リフォーム
NEW!
大工さんの空き時間に簡単な作業を頼める
1時間リフォーム
住まいに関する小さな悩み
大工さんなら “朝飯前”です!
たとえば、どう使う?
おもしろい使い道 考えたら教えてください(^^)
(ここまで宣伝)
あまりにGo実用事例を聞かないので…
「とりあえずここに居るよ!」
と表明するための発表ですw
ずいぶん長いことJava使いでした
• ’95 HTML/JSの延長でJDK1.1のbetaで遊びはじめた
• ’00 航空機器設計の数値計算で個人的にJava使ってた
• ’01 EDIと文書系のXML移行期に社内の陣頭対応
• ’03 RSS流行り始め頃にデスクトップ用ツール作ったり
• J2ME CLDC/MIDPでアグリゲータ作ったり
• PalmOS/Winの同期アドオン(Conduit)作ったり
• 社内のワークフロー系システムをJ2EEベースで作ったり
• サーバー/デスクトップ/モバイル/ネットワーク
• アプリレイヤー/ミドルレイヤー(フレームワークやらSocketサーバやら)/アーキテクチャ
• きほん何でもJavaで作って
• 必要なとこはC/C++で書いてJNIでネイティブ対応
ここ数年
• iOSアプリはObjective-Cで
• そのバックエンドはJavaで
• (Androidはめんどいので退却)
• 動的なウェブサイトはJavaか、必要に応じPHPで
• RoRとかPlayは使い捨て(デモ用途)で
etc.PHP
HTML
JS
Java
Obj-C
こんな割合でしたが
• とはいえ、別に言語に拘る気もないので、状況に合わせて何でも使う。
• Coumfyのプロトタイピングの当初に、kwmt27が「Goがいい」とか言い出したので、
• まぁいいやと思って、Go使い始めた結果・・・
etc.PHPJava
HTML
JS
Obj-C
Go
いまこんな割合に
以前ならJavaで作ってた類のものはGoで作るようになった
Goやってみてどうだったか
• 1日目 … チュートリアル「A Tour of Go」やった
• 2日目 … 言語仕様を読んで、試しに書き始めた
• 3日目 … 慣れたJavaと同じ早さで書ける気がする
• 1週間後 … なんかすごいサクサク進んでる・・・
• シンプルなので(基礎力さえあれば)導入容易
• ふつうに使える( ・∀・)!! 言語&処理系だと思う
• コンパイラ言語の安定感(スクリプト言語のデバッグとか・・・ムキー!)
• 記述がシンプル(書くのがラクで、読みやすい)
• 素直でハマりどころが少ない
• 決して、尖った言語ではない(むしろ平凡で、実用性のために割り切ってる感あり)
どういう構成で使ってるか
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
使ってる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
Go使ってると言うと聞かれがちなこと
人材面で困らない?
• たしかに経験者は少ないよね。
• でも学習コストが低いから、他の言語で基礎ができてるエンジニアなら、ちょっと勉強してもらったら3日目には戦力になると思う。
MVC Frameworkあるの?
• 何個かあるみたいだけど、うちは使ってない。
• Viewは標準のテンプレートエンジンで充分。
• フレームワークって、それ自体の学習コストは成果に無関係なので、チームの作業効率が落ちないなら使わなくても。。。
日本語の情報が少なくない?
• まぁしょうがない。
• 最近は本も出てるみたい?
• 「バカ」を付けてもいいぐらい単純で素直な言語なので、情報を探しまわらなきゃならないような事態ってそんなに無いよ。
WebAPIにGoのライブラリが無い
• そやね。(́・ω・`)
• でも、非公式ライブラリはGitHubとかにあったりするし、いまどきウェブAPIは大抵RESTでjsonなんやから、自分で書いてもそんなに大変じゃないよ。
使ってる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
エンジニアにとって 気持ちいい言語!
あと、普通に「使え」ます。
top related