PHPerが
golangで
もがいてる話
Keisuke Utsumi @KLab Osaka
第1回 関西golang勉強会
2015/10/12
おまえだれやねん
うつみ けいすけ
KLab (Osaka) Developer
よく忘れるもの:名刺
マイブーム:禁酒ダイエット
刺青エンジニアって覚えてください
ダイビング好き
Golang(ここ最近),PHP,C#
チューニング好き(ISUCON5予選落ちたorz
関西ゲーム勉強会運営
PHPカンファレンス関西実行委員
犬と爬虫類が好き
※この発表は私個人の見解であり、
所属する組織の公式見解ではありません。
Agenda
質問タイム
プロダクトでgoを勝ち取った話
PHPerが悩んだgoの話
まとめ
Agenda
質問タイム
プロダクトでgoを勝ち取った話
PHPerが悩んだgoの話
まとめ
質問タイム
Agenda
質問タイム
プロダクトでgoを勝ち取った話
PHPerが悩んだgoの話
まとめ
KLabでのgolang実績
プロダクトとしてはない(開発中のものはある
運用中の案件でのツールはたくさんある
負荷試験ツール
MySQLプロファイラ etc…
エンジニア中心で情報共有活発
ISUCON予選で利用
新規案件の技術選定が始まる
今まではPHPでゲームサーバーを構築
山程ノウハウある(開発も運用も
PHPで動く前提の爆速サーバーもある
独自ライブラリ等の資産もいっぱいある
何よりPHPerいっぱい居る
でもね
次の案件、PHPさんでは
役 不 足 
なんですよ。
_人人人人人人_
> 常時接続 <
 ̄Y^Y^Y^Y^Y ̄
_
人
人
人
人
人
人
_
>
 
常
時
接
続
 
<
 ̄
Y^Y^Y^Y^Y ̄
_人人人人人人人人人人人人_
> 求められる双方向通信 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
_
人
人
人
人
人
人
_
>
 
常
時
接
続
 
<
 ̄
Y^Y^Y^Y^Y ̄
_人人人人人人人人人人人人_
> 求められる双方向通信 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄_人人人人人人人人人_
> 捨てられるHTTP <
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
_
人
人
人
人
人
人
_
>
 
常
時
接
続
 
<
 ̄
Y^Y^Y^Y^Y ̄
_人人人人人人人人人人人人_
> 求められる双方向通信 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
_
人
人
人
人
人
人
人
人
人
_
>
 
捨
て
ら
れ
る
HTTP 
<
 ̄
Y^Y^Y^Y^Y^Y^Y^Y ̄
_人人人人人人人人人人人人_
> 大規模人数による同期 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
_
人
人
人
人
人
人
_
>
 
常
時
接
続
 
<
 ̄
Y^Y^Y^Y^Y ̄
_人人人人人人人人人人人人_
> 求められる双方向通信 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
_
人
人
人
人
人
人
人
人
人
_
>
 
捨
て
ら
れ
る
HTTP 
<
 ̄
Y^Y^Y^Y^Y^Y^Y^Y ̄
_
人
人
人
人
人
人
人
人
人
人
人
人
_
>
 
大
規
模
人
数
に
よ
る
同
期
 
<
 ̄
Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
_人人人人人人人人人人人人人人人人人人人人人人_
> PHPってもうオワコンでしょ?っていうDisり <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
_
人
人
人
人
人
人
_
>
 
常
時
接
続
 
<
 ̄
Y^Y^Y^Y^Y ̄
_人人人人人人人人人人人人_
> 求められる双方向通信 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
_
人
人
人
人
人
人
人
人
人
_
>
 
捨
て
ら
れ
る
HTTP 
<
 ̄
Y^Y^Y^Y^Y^Y^Y^Y ̄
_
人
人
人
人
人
人
人
人
人
人
人
人
_
>
 
大
規
模
人
数
に
よ
る
同
期
 
<
 ̄
Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
_人人人人人人人人人人人人人人人人人人人人人人_
> PHPってもうオワコンでしょ?っていうDisり <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
サーバー言語選択
あ、PHPさんおつかれっしたー。から始まる
膨大なゲームロジックをサーバー側で書く
膨大な数の擬似3D(2D)空間の座標演算
高速なmutex制御や堅牢な並列/並行処理
TCP(RPC/ProtocolBuf)との親和性
C++ と golang
golang はみんながビギナー
ゲーミングエンジニアはC++ の人が多い
C++ ならゲーミングライブラリとか豊富
Linux 上でC++ 書いた人居ない
じゃあみんなビギナーだね(にっこり
勝者:golang
開発環境構築は一瞬
C++で試しに最低限の環境をメンバーに提供
しようとしたら1週間かかった
LL言語ライクにかける
ワクワクできる
Gopherかわいい
Agenda
質問タイム
プロダクトでgoを勝ち取った話
PHPerが悩んだgoの話
まとめ
標準ツールが優秀過ぎて悩んだ
go get
go fmt
go test
go test -bench
go get
++)依存関係を解消しつつ、実行環境にパッケー
ジのダウンロードとインストールを行ってくれる
++)コンパイル&インストール は go install
--)でもリポジトリ管理には向かないので、git
subtreeなどで管理した方がいい場面もある
--)バージョンを固定できない
go fmt
golang 側で細かなコーディングルールが設定されている
ぐっちゃぐちゃに書いてもcommit前にこれやっとけば安心
IDEごとでのフォーマッタとかいらんかったんや
まじで宗教戦争終わった。
goimportsと合わせてやると尚良し
Makefileとか作って、fmt&importsをさくっとできるように
しておくと便利 例) make code-clean
go test ( -bench
{hoge}_test.go ってファイルにテスト書くだけ
Bench{Hoge}ってメソッドでベンチマーク取れ
る
ライブラリ選定するときにめっちゃ便利
要素が少なすぎて悩んだ
struct
func
interface
goroutine
chan
特にinterface,君は何者だ…
メソッド群を定義することによって、別のもの
も同じ要素を持つものとして扱える
しかもimplementsを宣言しなくていい
interface{}って定義すると何でも渡せる
抽象化っぽい(≠抽象化)こともできるし
まだまだ使いドコロはいっぱいありそう
差分構造化に向かない
構造体の埋め込みがある
埋め込みは匿名フィールドに定義されるだけ
よって、継承とは全くの別物であるのに、似たよ
うな書き方ができてしまう
リスコフの置換原則(LSP)とは全く考え方が違
う(当たり前
Agenda
質問タイム
プロダクトでgoを勝ち取った話
PHPerが悩んだgoの話
まとめ
goに入ればgoに従え
golang を始めてすぐのころはある程度簡単に取り扱える(素
晴らしい
goらしさというものを意識せずに続けると、これ、俺でも
すぐできそう!!!!という錯覚を引き起こす
そして再度goらしさを求める旅にでる(now
PHPに比べ、言語の設計思想をきちんと み取り、コード
に反映させることの比重がとても大きい
それによる恩恵も大きい
goで大規模負荷分散サーバー書きたい人
是非声かけてください!!!!
一緒に勉強しましょう。
(コワイヒトジャナイヨ
[告知]関西ゲーム勉強会・2015冬
2015/11/28(土) 14:00~
株式会社サイバーエージェント様大阪オフィス
https://ksgs.doorkeeper.jp/events/31863
https://www.facebook.com/ksgstudy

PHPerがgolangでもがいてる話@第1回 関西Golang勉強会