Submit Search
Upload
スッとGoを取り入れる
•
17 likes
•
23,513 views
Yusuke Wada
Follow
Go 1.6 Release Party 2016-02-17 Hatena Inc. Tokyo Office Yusuke Wada a.k.a. yusukebe
Read less
Read more
Technology
Report
Share
Report
Share
1 of 69
Download Now
Download to read offline
Recommended
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
Takafumi Yoshida
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
ymmt
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダー
Saeko Yamamoto
会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話
Shuji Yamada
Yapc2012資料
Yapc2012資料
matsuo kenji
Dockerで楽しむ自宅サーバ
Dockerで楽しむ自宅サーバ
祐磨 堀
Git勉強会
Git勉強会
masahiro_minami
GitHubで学ぶバージョン管理
GitHubで学ぶバージョン管理
Masafumi Yokoyama
More Related Content
What's hot
Wantedly - 世界一"いいね!"される 求人サイトの作り方
Wantedly - 世界一"いいね!"される 求人サイトの作り方
Yoshinori Kawasaki
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
Eureka go 2015_12_12
Eureka go 2015_12_12
matsuo kenji
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
Issei Hiraoka
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
Taisuke Inoue
2150117 infrastructure.nagoya
2150117 infrastructure.nagoya
Hiroki Ito
Github of project
Github of project
Ito Kunihiko
Gws 20141024 gradle_intro
Gws 20141024 gradle_intro
Nobuhiro Sue
サーバー&インフラ勉強会 Vol.1 いとー
サーバー&インフラ勉強会 Vol.1 いとー
krs_mizuno
Androidの新ビルドシステム
Androidの新ビルドシステム
l_b__
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
Git紹介
Git紹介
Seiji Ochiai
Github codespaces すごく良い。もうこれで 十分なんじゃという話
Github codespaces すごく良い。もうこれで 十分なんじゃという話
xiidec
Rails on Dockerとの戦い
Rails on Dockerとの戦い
Yasutomo Uemori
Gitの使い方あれこれ
Gitの使い方あれこれ
よしだ あつし
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
aha_oretama
Write slides and books in VSCode + Markdown
Write slides and books in VSCode + Markdown
ロフト くん
Vue.js with Go
Vue.js with Go
Kazuhiro Kubota
What's hot
(20)
Wantedly - 世界一"いいね!"される 求人サイトの作り方
Wantedly - 世界一"いいね!"される 求人サイトの作り方
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Eureka go 2015_12_12
Eureka go 2015_12_12
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
2150117 infrastructure.nagoya
2150117 infrastructure.nagoya
Github of project
Github of project
Gws 20141024 gradle_intro
Gws 20141024 gradle_intro
サーバー&インフラ勉強会 Vol.1 いとー
サーバー&インフラ勉強会 Vol.1 いとー
Androidの新ビルドシステム
Androidの新ビルドシステム
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
Git紹介
Git紹介
Github codespaces すごく良い。もうこれで 十分なんじゃという話
Github codespaces すごく良い。もうこれで 十分なんじゃという話
Rails on Dockerとの戦い
Rails on Dockerとの戦い
Gitの使い方あれこれ
Gitの使い方あれこれ
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
Write slides and books in VSCode + Markdown
Write slides and books in VSCode + Markdown
Vue.js with Go
Vue.js with Go
Viewers also liked
reveal.js 3.0.0
reveal.js 3.0.0
Hakim El Hattab
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
MOCKS | Yuta Morishige
Oppai-Detect 3
Oppai-Detect 3
Yusuke Wada
東京脱出計画中
東京脱出計画中
Yusuke Wada
簡易デプロイツール(スクリプト)を作ってみた話
簡易デプロイツール(スクリプト)を作ってみた話
yokoda_toshiaki
PDLで遊んでみた Yomitan.pm #5 LT
PDLで遊んでみた Yomitan.pm #5 LT
yokoda_toshiaki
Cinnamon - simple deploy tool
Cinnamon - simple deploy tool
Yuki Shibazaki
トーナメントは運か実力か
トーナメントは運か実力か
Kazuro Fukuhara
いかにしてエロ動画を検索するか GXEB #03
いかにしてエロ動画を検索するか GXEB #03
Yusuke Wada
HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろう
yoshikawa_t
How to make keynote like presentation with markdown
How to make keynote like presentation with markdown
Hiroaki NAKADA
Decksetがよかった話
Decksetがよかった話
Kohki Miki
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
Masakazu Muraoka
らくちん Go言語
らくちん Go言語
株式会社YEBIS.XYZ
Go言語と過ごした一週間
Go言語と過ごした一週間
Shintaro Kitayama
Github第8章
Github第8章
Yuto Suzuki
Goを知る
Goを知る
Hirokazu Fukami
alphawing meets heroku
alphawing meets heroku
Kyosuke Kameda
Golang, make and robotics #gocon
Golang, make and robotics #gocon
Hideyuki TAKEI
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
deris0126
Viewers also liked
(20)
reveal.js 3.0.0
reveal.js 3.0.0
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
Oppai-Detect 3
Oppai-Detect 3
東京脱出計画中
東京脱出計画中
簡易デプロイツール(スクリプト)を作ってみた話
簡易デプロイツール(スクリプト)を作ってみた話
PDLで遊んでみた Yomitan.pm #5 LT
PDLで遊んでみた Yomitan.pm #5 LT
Cinnamon - simple deploy tool
Cinnamon - simple deploy tool
トーナメントは運か実力か
トーナメントは運か実力か
いかにしてエロ動画を検索するか GXEB #03
いかにしてエロ動画を検索するか GXEB #03
HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろう
How to make keynote like presentation with markdown
How to make keynote like presentation with markdown
Decksetがよかった話
Decksetがよかった話
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
らくちん Go言語
らくちん Go言語
Go言語と過ごした一週間
Go言語と過ごした一週間
Github第8章
Github第8章
Goを知る
Goを知る
alphawing meets heroku
alphawing meets heroku
Golang, make and robotics #gocon
Golang, make and robotics #gocon
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Similar to スッとGoを取り入れる
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
Hiroyuki Ohnaka
Pythonを始めよう
Pythonを始めよう
shouta yoshikai
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
You&I
Swaggerのさわりだけ
Swaggerのさわりだけ
Masakazu Muraoka
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
Metahub for github
Metahub for github
Suguru Oho
2017823 pythonを始めよう
2017823 pythonを始めよう
shouta yoshikai
Goodby Hatena, hello Sphinx
Goodby Hatena, hello Sphinx
Kouhei Maeda
North Starアプリ作り,海外コミュニティ,Tips
North Starアプリ作り,海外コミュニティ,Tips
Tasuku Takahashi
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
Takuya Ueda
[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成
shouta yoshikai
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
Masakazu Muraoka
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
Nobuhiro Sue
Gopenflow demo v1
Gopenflow demo v1
Hiroaki Kawai
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
schoowebcampus
大規模プロダクト Webpack やっていく気持ち
大規模プロダクト Webpack やっていく気持ち
Takumi Ohashi
メルカリにおける自動化への取り組み (automation-night2 LT)
メルカリにおける自動化への取り組み (automation-night2 LT)
Kat 0gm
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
Daisuke Miyakawa
一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
Shunji Konishi
Easy scripting in Go
Easy scripting in Go
naoty_bot
Similar to スッとGoを取り入れる
(20)
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
Pythonを始めよう
Pythonを始めよう
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
Swaggerのさわりだけ
Swaggerのさわりだけ
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Metahub for github
Metahub for github
2017823 pythonを始めよう
2017823 pythonを始めよう
Goodby Hatena, hello Sphinx
Goodby Hatena, hello Sphinx
North Starアプリ作り,海外コミュニティ,Tips
North Starアプリ作り,海外コミュニティ,Tips
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
Gopenflow demo v1
Gopenflow demo v1
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
大規模プロダクト Webpack やっていく気持ち
大規模プロダクト Webpack やっていく気持ち
メルカリにおける自動化への取り組み (automation-night2 LT)
メルカリにおける自動化への取り組み (automation-night2 LT)
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
Easy scripting in Go
Easy scripting in Go
More from Yusuke Wada
僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達
Yusuke Wada
Extreme remote working
Extreme remote working
Yusuke Wada
Podcastを支える技術、エンジニアのためのWebメディア、そしてCPAN
Podcastを支える技術、エンジニアのためのWebメディア、そしてCPAN
Yusuke Wada
創造のプロセスを回せ!v0.01
創造のプロセスを回せ!v0.01
Yusuke Wada
It's not only about "REMOTE"
It's not only about "REMOTE"
Yusuke Wada
事故からはじまるスケールチャンス
事故からはじまるスケールチャンス
Yusuke Wada
Google BigQueryを使ってみた!
Google BigQueryを使ってみた!
Yusuke Wada
Webサービスのコンテンツパターン 或いはデータの活⽤
Webサービスのコンテンツパターン 或いはデータの活⽤
Yusuke Wada
とある Perl Monger の働き方
とある Perl Monger の働き方
Yusuke Wada
5 minutes - YAPC::Asia Tokyo 2014
5 minutes - YAPC::Asia Tokyo 2014
Yusuke Wada
Podcastをカジュアルに 支える技術
Podcastをカジュアルに 支える技術
Yusuke Wada
The master plan ofscaling a web application
The master plan ofscaling a web application
Yusuke Wada
そのWebサービスは本当に「あたりまえ」だったのか?
そのWebサービスは本当に「あたりまえ」だったのか?
Yusuke Wada
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
Yusuke Wada
10 things to learn from Bokete
10 things to learn from Bokete
Yusuke Wada
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and others
Yusuke Wada
僕らの履歴書
僕らの履歴書
Yusuke Wada
僕らがWebサービスをつくる5つの理由
僕らがWebサービスをつくる5つの理由
Yusuke Wada
僕らがつくるための 「5W」について
僕らがつくるための 「5W」について
Yusuke Wada
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
Yusuke Wada
More from Yusuke Wada
(20)
僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達
Extreme remote working
Extreme remote working
Podcastを支える技術、エンジニアのためのWebメディア、そしてCPAN
Podcastを支える技術、エンジニアのためのWebメディア、そしてCPAN
創造のプロセスを回せ!v0.01
創造のプロセスを回せ!v0.01
It's not only about "REMOTE"
It's not only about "REMOTE"
事故からはじまるスケールチャンス
事故からはじまるスケールチャンス
Google BigQueryを使ってみた!
Google BigQueryを使ってみた!
Webサービスのコンテンツパターン 或いはデータの活⽤
Webサービスのコンテンツパターン 或いはデータの活⽤
とある Perl Monger の働き方
とある Perl Monger の働き方
5 minutes - YAPC::Asia Tokyo 2014
5 minutes - YAPC::Asia Tokyo 2014
Podcastをカジュアルに 支える技術
Podcastをカジュアルに 支える技術
The master plan ofscaling a web application
The master plan ofscaling a web application
そのWebサービスは本当に「あたりまえ」だったのか?
そのWebサービスは本当に「あたりまえ」だったのか?
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
10 things to learn from Bokete
10 things to learn from Bokete
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and others
僕らの履歴書
僕らの履歴書
僕らがWebサービスをつくる5つの理由
僕らがWebサービスをつくる5つの理由
僕らがつくるための 「5W」について
僕らがつくるための 「5W」について
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
Recently uploaded
チームで開発するための環境を整える
チームで開発するための環境を整える
onozaty
これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024
Hideki Saito
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
iPride Co., Ltd.
バイオリンの運弓動作計測による初心者と経験者の差異分析
バイオリンの運弓動作計測による初心者と経験者の差異分析
sugiuralab
00001_test_automation_portfolio_20240313
00001_test_automation_portfolio_20240313
ssuserf8ea02
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
Takayuki Nakayama
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
honeshabri
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
Naomi Yamasaki
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
IGDA Japan SIG-Audio
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作り
iPride Co., Ltd.
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG-Audio
The 86th National Convention of IPSJ (Student Encouragement Award))
The 86th National Convention of IPSJ (Student Encouragement Award))
yoshidakids7
Recently uploaded
(12)
チームで開発するための環境を整える
チームで開発するための環境を整える
これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
バイオリンの運弓動作計測による初心者と経験者の差異分析
バイオリンの運弓動作計測による初心者と経験者の差異分析
00001_test_automation_portfolio_20240313
00001_test_automation_portfolio_20240313
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作り
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
The 86th National Convention of IPSJ (Student Encouragement Award))
The 86th National Convention of IPSJ (Student Encouragement Award))
スッとGoを取り入れる
1.
スッとGoを取り入れる Go 1.6 Release
Party 2016-02-17 Hatena Inc. Tokyo Office Yusuke Wada a.k.a. yusukebe
2.
自己紹介 • Yusuke Wada •
@yusukebe • http://blog.yusuke.be/ • Wadit CEO / Omoroki CTO • Web Application Developer • Technical Advisor • Co-founder of bokete.jp • Perl書いてる...
3.
本日のテーマ
4.
Goを本番投入するまでの 道のりとその他
5.
現在の主なGoプロダクト 2個
6.
その1 bokete/webstamp
7.
bokete.jp
8.
お題画像+テキスト = ボケ
9.
L○NEスタンプ風画像を ダウンロードできる
10.
これ
12.
その2 yusukebe/revealgo
13.
Markdown driven presentation
tool
14.
revealgo コマンドを実行
15.
立ち上がったサーバをブラウザで開く
16.
まさかの GitHub Trending
入り
17.
\(^o^)/
18.
ところがこのスライドは...
19.
Keynote製
20.
とはいえ... $ go get
github.com/yusukebe/cmd/revealgo
21.
Goを取り入れるため 最初にやったこと
22.
✕コードを書く https://flic.kr/p/81RqH3
23.
✕コードを読む https://flic.kr/p/aGjVq8
24.
答え...
25.
⃝bradfitzと話す http://twitter.com/bradfitz
26.
去年のYAPC::Asiaで bradfitzがボッチだったので...
27.
ゆ:Hiぶらっど!君が書いたギアマンは最高にクールだね ぶ:どんな用途でギアマンを使ってるんだい? ...(中略)... ゆ:ところでGoはどうなんだ? ぶ:まさに今Goでプログラムを書いてるところだ ゆ:Goのいい所を教えてくれよ ...(中略)... ぶ:こうやればAndroid向けのバイナリもコンパイル出来るぜ ゆ:オーケー!Goを使ってみるよ!
28.
予めGo本体の開発メンバである bradfitz氏と「サシで」話して モチベーションが上がった
29.
2番目にやったこと
31.
3番目にやったこと
32.
スクリプト的に Go言語を利用する
33.
スクリプト的とは? • main.go に
package main のみ • 単発のバッチスクリプトとか • 例えば... • MySQLのレコードを1つずつなめて... • ちょっとした処理を加えてカラムを変更するetc.
34.
例 for ;; { var
results []Entry db.Select(&results, db.Where("flag","=","0"), db.Limit(limit)); if len(results) == 0 { break } var wg sync.WaitGroup for _, entry := range(results) { wg.Add(1) go func(e Entry) { work(e) wg.Done() }(entry) } wg.Wait() } goと書くだけで並行処理が走って DB接続処理もロックしないで便利!
35.
そして調子に乗って...
36.
goroutine走らせまくって 爆死 https://flic.kr/p/6TorAy
37.
どこからGolang化 していくか?
38.
ザックリな Boketeアーキテクチャ
39.
Web API サーバ PC版Web
スマホ版Web iOSアプリ Androidアプリ その他フロント... コアロジック 各種サービス APIサーバをGoで書き直す必要も無いので特化したサービスをGoで!
40.
Web API サーバ PC版Web
スマホ版Web iOSアプリ Androidアプリ その他フロント... コアロジック 各種サービス スタンプ画像生成サーバがあった! スタンプ
41.
http://stamp.bokete.jp/{boke_id}.png
43.
Web API サーバ スタンプサーバ TTL付きCDN クライアント URLのパスに基づきボケIDをゲット ボケ情報取得 お題画像も取得しつつ スタンプ
風に画像を生成しサーブ ボケが削除されることも考慮しつつ TTLを設定したCDNが画像を配信 シェア等してもらう
44.
Perl製スタンプサーバを Goでリプレース
45.
git log -p
cpanfile -requires 'Lingua::JA::Fold'; -requires 'Imager'; -requires 'Imager::DTP::Textbox::Horizontal'; Lingua::JA::Fold - 禁則処理を含む日本語文字列の折り返し Imager - 画像処理モジュール Imager::DTP::Horizontal - テキスト画像の配置
46.
じゃあレポジトリつくって 画像生成サーバ書くか
47.
(´・ω・`)
48.
次にやったこと
49.
目的に合わせてそれを検証する スニペットを書いてく
51.
自信がついたらいよいよ スタンプサーバの実装
52.
出来た構成
53.
$ tree ./ ./ !""
README.md !"" assets # !"" font-heavy.ttf # !"" font-medium.ttf # !"" stamp_404.png # !"" stamp_footer.png # !"" stamp_header.png # !"" stamp_panel.png # $"" transparent.png !"" assets.go !"" client.go !"" client_test.go !"" cmd # $"" stamp_server # $"" main.go !"" stamp.go !"" stamp_test.go !"" util.go $"" util_test.go go-bindataでassets.goに入れ込む アセットファイル達 WebAPIから情報とってくる peco/peco参考にした 画像オブジェクトをゴリゴリ頑張る utilとはいえ主にテキスト処理
54.
ある程度検証後デプロイ
55.
結果こうなった • デプロイツールとしてAnsible • リモートレポジトリはGitHubのPrivate •
Ansibleでgit cloneする時はローカルの をforward • GOPATHのsrc以下にAnsibleでプロジェクトをgit clone • go get [とってきたプロジェクトのパス] • GOPATHのbin以下に出来たバイナリを使って起動
56.
リリースした結果
57.
preforkしないからメモリ使用量少ない! CPUフルフルに使い切る! すごい!!
58.
と思ったら...
59.
メモリ膨れてる??
60.
この時少しでも Goが悪いと考えてしまった 僕をお許し下さい...
61.
実は禁則処理ロジックで 無限ループを生む可能性があった (*ノω・*)テヘ
62.
さらに改良
63.
yusukebe/go-pngquant
64.
gophper.png pngquant --speed 10 40.3KB
15.1KB!!
65.
pngquantは標準入力からも 受け取れて標準出力にも 書き出せる
66.
func CompressBytes(input []byte,
speed string) (output []byte, err error) { cmd := exec.Command("pngquant", "-", "--speed", speed) cmd.Stdin = strings.NewReader(string(input)) var o bytes.Buffer cmd.Stdout = &o err = cmd.Run() if err != nil { return } output = o.Bytes() return }
67.
\(^o^)/
68.
GO引にまとめ
69.
Goを取り入れる • 段階を追っていけばスッと取り入れられた • 結果スタンプサーバの画像サイズが縮小した •
リソースの節約 • 最初は特化したサービスのリプレースから • 次は新アプリをGoで書いてみたい • たぶん... 悪いのはGoじゃない
Download Now