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

32
PHPer golang もがいてる話 Keisuke Utsumi @KLab Osaka 第1回 関西 golang 勉強会 2015/10/12

Upload: keisuke-utsumi

Post on 12-Jan-2017

1.093 views

Category:

Engineering


3 download

TRANSCRIPT

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++ と golanggolang はみんながビギナー

ゲーミングエンジニアは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 fmtgolang 側で細かなコーディングルールが設定されている

ぐっちゃぐちゃに書いても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