SlideShare a Scribd company logo
1 of 27
Download to read offline
過去に自作した
Goプロダクトの紹介
@shogo82148
自己紹介
• @shogo82148
• http://shogo82148.github.io/
• 面白法人KAYAC
• ソーシャルゲームのサーバサイドエンジニア
宣伝
Go in KAYAC
• 2014年夏、カヤックは、Go言語を積極的に推
進していきます。

http://www.kayac.com/news/2014/07/
golang
• メインは今もPerl
• ミドルウェアや開発ツールにGoが導入されつつ
ある
KAYACで動いてる
Goプロダクト
• go-katsubushi: https://github.com/kayac/go-katsubushi
• snowflake-likeなIDジェネレータ
• stretcher: https://github.com/fujiwara/stretcher
• Consul/Surfと連携したデプロイツール
• rin: https://github.com/fujiwara/Rin
• AWS-S3に出力されたログをRedshiftへインポートするツール
• mirage: https://github.com/acidlemon/mirage
• Dockerを使ったテスト用環境構築
• alphawing: https://github.com/kayac/alphawing
• Android/iOSアプリの社内配信ツール
お話すること
• 過去に自作したGoプロダクトの紹介
• Go言語を使う利点・便利な機能の紹介
• バイナリデータを扱うのが楽
• interfaceが便利
• 並行処理を書くのが楽
バイナリデータを扱うのが楽
• go-rgba4444
• androidbinary
androidbinary
• Androidアプリのメタ情報(AndroidManifest.xml)を解
析する
• モバイルで扱いやすいようメタ情報はバイナリ形式
• Android Developer Toolsのaaptコマンドで

テキスト形式に変換できる
• aapt単体で配布していないのでインストールが複雑
• Alphawingのaapt依存を排除するために作成
androidbinary
• encoding/binaryパッケージが便利
• バイト列を整数値に変換するために利用
• var out struct {a int32, b int16, c int16}

binary.Read(buf, binary.LittleEndian, &out)
• 型のサイズがはっきりしているので

unpack( LSS , $buf)みたいな呪文を書かずに済む
• apkはarchive/zipパッケージで解凍可能
go-rgba4444
• 16bit/pixelの画像形式をGo扱うライブラリ
• Unityではよく使われる形式
減色前(RGBA8888) 減色後(RGBA4444)
go-rgba4444
• C-likeな配列・構造体で省メモリ
• ex. make([][3]int32, 10000)

4bytes 3 10000分アロケート
• 実行時には型情報を持たないので、大きめのデータでも扱
える
• 簡単な画像処理であれば十分扱える
• Goで書いてあると、デザイナにコンパイルしたバイナリを渡
しやすい ※商用のソフト使ってて実際には渡してない
バイナリデータを扱うのが楽
• 画像・圧縮ファイル等を標準ライブラリだけで
扱うことができる
• 対応していない形式でも encoding/binary パッ
ケージでどうにかなる
• C-likeな配列・構造体で省メモリ
interfaceが便利
• go-sql-proxy
• go-dithering
interface
type Closer interface {
Close() error

}
type A struct {}
type B struct {}
func (a *A) Close() error { return nil }
var foo Closer
a = &A{} // OK
a = &B{} // NG
go-sql-proxy
• database/sqlパッケージを使って発行したSQL
をキャプチャする
• database/sqlのドライバ実装の一つ
• database/sql/driver .Driverを実装した構造
体を書くことでドライバを自作できる
• ドライバを直接呼び出すことも簡単
go-sql-proxy
// SQLが発行されたときのフックを登録
hooks := &proxy.Hooks{
// Hook functions here(Open, Exec, Query, etc.)
}
sql.Register(
new-proxy-name",
proxy.NewProxy(&another.Driver{}, hooks),
)
// 通常のSQLドライバと同様に扱える
db, err := sql.Open("new-proxy-name", dataSourceName)
go-dithering
• 各種ditheringアルゴリズムのGo実装
オリジナル画像 floyd steinberg
(Go標準)
false
floyd steinberg
jarvis
judice ninke
• image/draw .Drawerインターフェースを実装し
ているので、簡単に置き換え可能
interfaceが便利
• Goの標準ライブラリはinterfaceを受け取ったり
返したりする
• 標準ライブラリの挙動が気に入らなければ、

実装だけ簡単に入れ替えられる
並行処理を書くのが楽
• go-prove/go-tap
• go-webtail/go-tail
go-prove/go-tap
• PerlのproveコマンドのGo移植・TAP(Test
Anything Protocol)のパーサ
• prove: Perlのテストを行うためのコマンド
• TAP: テストプログラムとproveの間のプロト
コル
go-prove/go-tap
• perl版proveに不満があったので作った
• -jオプションでテストを並列実行できる
• TAPの集約でI/O待ちが発生し、マシン性能の生かし切れない
• 並行処理が得意なGoで再実装
• PerlのテストはただのPerlのスクリプト。通常のperlコマン
ドで実行できる
• proveは標準出力のTAPを集約してるだけ
go-prove/go-tap
• 並行処理が得意なGoで再実装
• チャンネルからテスト対象のスクリプトを受け取る
• os .Commandを使ってPerlのプロセスを起動
• テストの結果をチャンネルへ
• プロダクションのコードのテストで試験
• proveでは32並列で7分。CPU使用率は30%程度
• go-proveで4分で終わるように。CPU使用率も95%程度に改善
go-webtail/go-tail
• tailコマンドの結果をWebsocket経由でブラウザ
に表示
• ruby版の実装(https://github.com/
r7kamura/webtail)のgo移植
• tailする処理とwebsocketでデータを返す処理を
別gorouineで処理
• 間をチャンネルでやり取り
並行処理を書くのが楽
• goroutine
• チャンネル
• goroutine間のやり取り
• syncパッケージ
• MutexやWaitGroupでgorouineの待ち合わせ
まとめ
• Go言語を使う利点
• バイナリデータを扱うのが楽
• encoding/binary パッケージ・配列・構造体
• interfaceが便利
• 標準ライブラリの挙動を自由に変えることができる
• 並行処理を書くのが楽
• gorutineとチャンネル
まとめ
• https://github.com/shogo82148 で公開中
• go-rgba4444
• androidbinary
• go-sql-proxy
• go-dithering
• go-prove/go-tap
• go-webtail/go-tail
過去に自作したGoプロダクトの紹介 - Goオールスターズ

More Related Content

What's hot

2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
Satoshi Noda
 
Web API 標準の OpenSocial の現状と今後
Web API 標準の OpenSocial の現状と今後Web API 標準の OpenSocial の現状と今後
Web API 標準の OpenSocial の現状と今後
FatWireKK
 

What's hot (20)

Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめGoogle Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
 
ネットワークの切り替えを感知する方法
ネットワークの切り替えを感知する方法ネットワークの切り替えを感知する方法
ネットワークの切り替えを感知する方法
 
Cloud functionsの紹介
Cloud functionsの紹介Cloud functionsの紹介
Cloud functionsの紹介
 
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するgoパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
 
Cloud Functionsの紹介
Cloud Functionsの紹介Cloud Functionsの紹介
Cloud Functionsの紹介
 
Google Gadgetsを看取る
Google Gadgetsを看取るGoogle Gadgetsを看取る
Google Gadgetsを看取る
 
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うGAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
 
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and GomobileGo goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
 
僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips
 
Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
 
Can we live in a pure Swift world?
Can we live in a pure Swift world?Can we live in a pure Swift world?
Can we live in a pure Swift world?
 
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
 
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
 
DCGANとStyleGAN2を試したときの話 / Dcgan and Stylegan2
DCGANとStyleGAN2を試したときの話 / Dcgan and Stylegan2DCGANとStyleGAN2を試したときの話 / Dcgan and Stylegan2
DCGANとStyleGAN2を試したときの話 / Dcgan and Stylegan2
 
2017823 pythonを始めよう
2017823 pythonを始めよう2017823 pythonを始めよう
2017823 pythonを始めよう
 
Web API 標準の OpenSocial の現状と今後
Web API 標準の OpenSocial の現状と今後Web API 標準の OpenSocial の現状と今後
Web API 標準の OpenSocial の現状と今後
 
FlutterでAndroid/iOS両対応のアプリ開発
FlutterでAndroid/iOS両対応のアプリ開発FlutterでAndroid/iOS両対応のアプリ開発
FlutterでAndroid/iOS両対応のアプリ開発
 
dotcle 経験0から Meteor iOS アプリを2ヶ月半で作ってリリースしてみた
dotcle 経験0から Meteor iOS アプリを2ヶ月半で作ってリリースしてみたdotcle 経験0から Meteor iOS アプリを2ヶ月半で作ってリリースしてみた
dotcle 経験0から Meteor iOS アプリを2ヶ月半で作ってリリースしてみた
 
俺達のGoogle i:o 2014 はまだ始まったばかりだ
俺達のGoogle i:o 2014 はまだ始まったばかりだ俺達のGoogle i:o 2014 はまだ始まったばかりだ
俺達のGoogle i:o 2014 はまだ始まったばかりだ
 

Viewers also liked

Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
Masakazu Muraoka
 
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
Hidenori Takeshita
 

Viewers also liked (20)

ゴースト暗算を簡略化してみた
ゴースト暗算を簡略化してみたゴースト暗算を簡略化してみた
ゴースト暗算を簡略化してみた
 
海洋エネルギーを活用した大規模発電の簡略化
海洋エネルギーを活用した大規模発電の簡略化海洋エネルギーを活用した大規模発電の簡略化
海洋エネルギーを活用した大規模発電の簡略化
 
インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編
 
“暗算の達人” で数字で話せる人を目指す
“暗算の達人”で数字で話せる人を目指す“暗算の達人”で数字で話せる人を目指す
“暗算の達人” で数字で話せる人を目指す
 
Golang, make and robotics #gocon
Golang, make and robotics #goconGolang, make and robotics #gocon
Golang, make and robotics #gocon
 
Go+revel
Go+revelGo+revel
Go+revel
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12
 
Goを知る
Goを知るGoを知る
Goを知る
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
Go言語と過ごした一週間
Go言語と過ごした一週間Go言語と過ごした一週間
Go言語と過ごした一週間
 
HighBatch
HighBatchHighBatch
HighBatch
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
 
alphawing meets heroku
alphawing meets herokualphawing meets heroku
alphawing meets heroku
 
Github第8章
Github第8章Github第8章
Github第8章
 
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
 
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
 
勉強会への一歩を踏み出すために
勉強会への一歩を踏み出すために勉強会への一歩を踏み出すために
勉強会への一歩を踏み出すために
 
マイクロサービスにおけるクエリー言語について
マイクロサービスにおけるクエリー言語についてマイクロサービスにおけるクエリー言語について
マイクロサービスにおけるクエリー言語について
 
ISUCON2015 PHPで予選を戦ってみた
ISUCON2015 PHPで予選を戦ってみたISUCON2015 PHPで予選を戦ってみた
ISUCON2015 PHPで予選を戦ってみた
 
Dockerぐらし!
Dockerぐらし!Dockerぐらし!
Dockerぐらし!
 

Similar to 過去に自作したGoプロダクトの紹介 - Goオールスターズ

大規模プロダクト Webpack やっていく気持ち
大規模プロダクト Webpack やっていく気持ち大規模プロダクト Webpack やっていく気持ち
大規模プロダクト Webpack やっていく気持ち
Takumi Ohashi
 
[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata
VOYAGE GROUP
 
Mohawk presentation-gdg-kobe
Mohawk presentation-gdg-kobeMohawk presentation-gdg-kobe
Mohawk presentation-gdg-kobe
Tsubasa Kato
 

Similar to 過去に自作したGoプロダクトの紹介 - Goオールスターズ (20)

DWANGO by ドワンゴ
DWANGO by ドワンゴDWANGO by ドワンゴ
DWANGO by ドワンゴ
 
GitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へGitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へ
 
大規模プロダクト Webpack やっていく気持ち
大規模プロダクト Webpack やっていく気持ち大規模プロダクト Webpack やっていく気持ち
大規模プロダクト Webpack やっていく気持ち
 
一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
 
アプリ開発の境界問題を支えるツール
アプリ開発の境界問題を支えるツールアプリ開発の境界問題を支えるツール
アプリ開発の境界問題を支えるツール
 
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめPyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめ
 
[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata
 
筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション
 
Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1
 
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整えるAzure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
 
会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話
 
GTMF 2016:5.4で何がどう変わる?Unity最新情報アップデート ユニティ・テクノロジーズ・ジャパン合同会社
GTMF 2016:5.4で何がどう変わる?Unity最新情報アップデート ユニティ・テクノロジーズ・ジャパン合同会社GTMF 2016:5.4で何がどう変わる?Unity最新情報アップデート ユニティ・テクノロジーズ・ジャパン合同会社
GTMF 2016:5.4で何がどう変わる?Unity最新情報アップデート ユニティ・テクノロジーズ・ジャパン合同会社
 
DroidKaigi 2018 - Dialogflow for Android
DroidKaigi 2018 - Dialogflow for AndroidDroidKaigi 2018 - Dialogflow for Android
DroidKaigi 2018 - Dialogflow for Android
 
Mohawk presentation-gdg-kobe
Mohawk presentation-gdg-kobeMohawk presentation-gdg-kobe
Mohawk presentation-gdg-kobe
 
自社のメインプロダクトにGoを導入したぞ++
自社のメインプロダクトにGoを導入したぞ++自社のメインプロダクトにGoを導入したぞ++
自社のメインプロダクトにGoを導入したぞ++
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装
 
Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発
 
Inside Android N
Inside Android NInside Android N
Inside Android N
 
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよはじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
 

Recently uploaded

Recently uploaded (8)

Keywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltdKeywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltd
 
情報を表現するときのポイント
情報を表現するときのポイント情報を表現するときのポイント
情報を表現するときのポイント
 
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdfネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
 
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
 
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアルLoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
 
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 

過去に自作したGoプロダクトの紹介 - Goオールスターズ