SlideShare a Scribd company logo
1 of 39
Download to read offline
ツールの作成から配布まで
Fukuoka.go#2
@monochromegane
実践 Go!
MIYAKE Yusuke
(@monochromegane)
GMO Pepabo, Inc.
pt
The Platinum Searcher
物販はじめました
ツールの作成から配布まで
ツールの作成から配布まで
つくってみる
ʕ◔ϖ◔ʔ < Go!
$ go run xxx.go # コンパイル&実行(main関数を含むgoファイルを指定)	
$ go test ./... # すべてのパッケージのテストを実行	
$ go build # コンパイル
github.com/user/	
src/	
cmd/go-ls/	
main.go # mainパッケージ	
go-ls.go # 自作パッケージ
• go get された場合の構成となる$GOPATH/リポジトリ/ユー
ザ/srcの構成にあわせておくとimportでつまづかない
• mainパッケージはCLIのエントリポイントとしてコマンドラ
イン引数の解析と自作パッケージの呼び出しを行う
• これにより、自作パッケージの機能が外部パッケージから利
用しやすくなる
ʕ◔ϖ◔ʔ < Go!
ツールの作成から配布まで
Local
OR
$ go build -o $PATH/xxx
$ go install packge_name
bin/	
go-ls # 実行コマンド (mainパッケージ)	
pkg/	
darwin_amd64/ # アーキテクチャ	
github.com/user/	
go-ls.a # パッケージオブジェクト (自作パッケージ)
• go installはsrc配下からパッケージを探してコンパイルする
ʕ◔ϖ◔ʔ < Go!
さみしさ…
みんなに
使ってもらおう
Have a try !
go get
$ go get 	
github.com/user/package_name
• go get は src配下にリポジトリからソースを取得後、コンパ
イルを行う
Go開発環境が
ないひとにも
使ってもらおう
Homebrew
🍻
$ brew tap user/formula	
$ brew install formula
• 独自formulaをつくって、tapで追加する
• 依存関係に`go`を入れておけば、Goの開発環境も一緒に構築
してくれる
require 'formula'	
!
HOMEBREW_PT_VERSION='1.7.1'	
class Pt < Formula # Formulaクラスを継承	
homepage 'https://github.com/monochromegane/the_platinum_searcher'	
url ‘https://github.com/monochromegane/the_platinum_searcher.git',	
:tag => "v#{HOMEBREW_PT_VERSION}"	
version HOMEBREW_PT_VERSION	
!
depends_on 'go' => :build # ビルド時のみGoをインストール	
depends_on 'hg' => :build # 外部パッケージがcode.google.comの場合Mercurialが必要	
!
def install	
ENV['GOPATH'] = buildpath	
system 'go', 'get', ‘github.com/jessevdk/go-flags'	
mkdir_p buildpath/'src/github.com/monochromegane'	
ln_s buildpath, buildpath/'src/github.com/monochromegane/the_platinum_searcher'	
system 'go', 'build', '-o', 'pt', 'cmd/pt/main.go'	
bin.install 'pt'	
end	
end
formula
MacOSX以外でも
使ってもらおう
Cross
Compile
$ cd go/src	
$ GOOS=linux GOARCH=amd64 	
./make.bash
$ GOOS=linux GOARCH=amd64 	
go build
• Homebrewの場合、/usr/local/Cellar/go/1.3/libexec
Basic
便利なパッケージ
あり
$ gox
$ gox	
Number of parallel builds: 4	
!
--> darwin/386: go-ls	
--> darwin/amd64: go-ls	
--> linux/386: go-ls
• 並行コンパイル
• オプションで対象OS/ARCH指定可能 -osarch=“linux/amd64"
mitchellh/gox
$ goxc
$ goxc	
...	
!
[goxc:archive-tar-gz] 2014/08/10 21:35:38
Artifact(s) archived to /Users/miyakey/bin/go-ls-
xc/snapshot/go-ls_linux_amd64.tar.gz
• コンパイル結果を圧縮できるので、同じ実行ファイル名にできる
• オプションで対象OS/ARCH指定可能 -bc="linux,!arm darwin"
laher/goxc
ダウンロードして
使ってもらおう
Drone.io
http://icons8.com/
push
configure hook
Docker Images
build & test
Docker Container
deploydownload
heroku, Dotcloud, GAE,
S3, SSH
C, C++, Dart, Go,
Haskell, Groovy, Java,
Node.js, PHP, Python,
Ruby, Scala
• Drone.ioではビルド成果物をダウンロードしてもら
うため、Artifactsという機能がある
• Artifactsに指定したディレクトリにビルド成果物を
コピーするだけ
• 世代管理は行えない
Artifacts
Wercker
http://icons8.com/
push
configure hook
Boxes
build & test
Box
deploy
download
heroku, OpenShift, Amazon,
RackSpace, DigitalOcean
Node.js, Ruby, Python,
PHP, Go, Java/Android
GitHub releases
• Werckerには、GitHubのリリース作成とリリースへ
の資産アップロードを行うStepがあるのでこれを利
用する
• GitHubのTokenなどはWercker側にVariableとして
定義する
GitHub releases
おまけ
require 'formula'	
!
HOMEBREW_PT_VERSION='1.7.1'	
class Pt < Formula	
homepage 'https://github.com/monochromegane/the_platinum_searcher'	
url "https://github.com/monochromegane/the_platinum_searcher/
releases/download/v#{HOMEBREW_PT_VERSION}/pt_darwin_amd64.zip"	
sha1 '00844c339ca864bdae77fe4481a103456760181e'	
!
version HOMEBREW_PT_VERSION	
def install	
bin.install 'pt'	
end	
end	
formula
• URL指定でzipファイルを指定するとコンパイル済みのファイ
ルからインストールできてインストール時間を短縮できる
宣伝
ペパボではエンジニアを募集しています。
共にサービスを生み出し育ててくれる新しい仲間
を待っています。
!
http://pepabo.com/recruit/career/engineer/
おわり

More Related Content

What's hot

体系的に学ばないXSSの話
体系的に学ばないXSSの話体系的に学ばないXSSの話
体系的に学ばないXSSの話
Yutaka Maehira
 

What's hot (20)

Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
 
体系的に学ばないXSSの話
体系的に学ばないXSSの話体系的に学ばないXSSの話
体系的に学ばないXSSの話
 
UnicodeによるXSSと SQLインジェクションの可能性
UnicodeによるXSSとSQLインジェクションの可能性UnicodeによるXSSとSQLインジェクションの可能性
UnicodeによるXSSと SQLインジェクションの可能性
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
 
C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
 
Machine learning CI/CD with OSS
Machine learning CI/CD with OSSMachine learning CI/CD with OSS
Machine learning CI/CD with OSS
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
 

Similar to 実践Go ツールの作成から配布まで

Jenkins plugin memo
Jenkins plugin memoJenkins plugin memo
Jenkins plugin memo
Kiyotaka Oku
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみた
Mori Shingo
 

Similar to 実践Go ツールの作成から配布まで (20)

Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
 
Easy scripting in Go
Easy scripting in GoEasy scripting in Go
Easy scripting in Go
 
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
 
Go入門
Go入門Go入門
Go入門
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
 
Jenkins plugin memo
Jenkins plugin memoJenkins plugin memo
Jenkins plugin memo
 
sbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころsbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころ
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするには
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎
 
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTインフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみた
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
Products.PloneOrg
Products.PloneOrgProducts.PloneOrg
Products.PloneOrg
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 

Recently uploaded

Recently uploaded (11)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

実践Go ツールの作成から配布まで