SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
CLI.GO と CLI-INIT で高速にコマ 
ンドラインツールを開発す
る 
THE COMMAND-LINE TOOL DEVELOPED AT HIGH SPEED CLI.GO 
AND CLI-INIT 
2014/12/12 @taketin
WHAT'S CLI.GO ? 
https://github.com/codegangsta/cli
A SMALL PACKAGE FOR BUILDING COMMAND 
LINE APPS IN GO 
star - over 1900 
GitHub code search hit - over 2800 
CLIツール実装に必要なインタフェースを提供 
コアロジックに集中できる
WHAT'S CLI-INIT ? 
https://github.com/tcnksm/cli-init
THE EASY WAY TO START BUILDING GOLANG 
COMMAND-LINE APPLICATION 
ref. 
高速にGo言語のCLIツールをつくるcli-initというツール 
をつくった 
cli.go のテンプレートを生成 
高速に開発開始!
HANDS ON
#0 ENVIRONMENT 
$ brew install go 
$ vi .bashrc 
export GOPATH=$HOME/go 
export GOROOT=/usr/local/opt/go/libexec 
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin
#1 INSTALLATION 
$ go get -d github.com/tcnksm/cli-init 
$ cd $GOPATH/src/github.com/tcnksm/cli-init 
$ make install
#2 SPECIFICATION 
仕様を決める 
TODOアプリ 
コマンドは todo とする 
追加、削除、一覧 ができる 
インターフェースは add, delete, list とする
#3 CLI-INIT 
$ cli-init -s add,delete,list todo
#4 DEVELOPMENT 
commands.go にガリガリ書く
#5 FLAGS 
コマンドにフラグオプションを追加する場合 
ex) todo delete -a 
commands.go にフラグの記述を追記 
var deleteFlags = []cli.Flag{ 
cli.BoolFlag{Name: "all, a", Usage: "all delete"}, 
} 
var commandDelete = cli.Command{ 
Name: "delete", 
Usage: "", 
Description: ` 
`, 
Action: doDelete, 
Flags: deleteFlags, // add 
} 
func doDelete(c *cli.Context) { 
isDeleteAll := c.Bool("all") 
if isDeleteAll { 
// snip.. 
} 
}
#6 BUILD 
$ go install 
$ todo -h
#7 ENJOY 
Golang 学習コストそれほど高くない(気がする) 
書き易いし読み易い(気がする) 
package の仕組み 
便利ツール作るのに最適ぽい 
標準ライブラリ充実 
クロスコンパイル環境 
速度が早い 
goroutine
TALKER 
https://github.com/taketin/talker 
重複無しで総当たりのくじ引き 
Dropbox をストレージで使う 
社内勉強会などにご利用ください
SEE ALSO 
Go言語によるCLIツール開発とUNIX哲学について 
[まとめ] Go Conference 2014 autumn

Contenu connexe

En vedette

Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
Masakazu Muraoka
 
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
 
インタフェースの実装パターン
インタフェースの実装パターンインタフェースの実装パターン
インタフェースの実装パターン
Takuya Ueda
 
2150117 infrastructure.nagoya
2150117 infrastructure.nagoya2150117 infrastructure.nagoya
2150117 infrastructure.nagoya
Hiroki Ito
 

En vedette (20)

alphawing meets heroku
alphawing meets herokualphawing meets heroku
alphawing meets heroku
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12
 
Go言語と過ごした一週間
Go言語と過ごした一週間Go言語と過ごした一週間
Go言語と過ごした一週間
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
 
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ぐらし!
 
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 ハンズオン&もくもく会
 
Gunosy Go lang study #6 net http url
Gunosy Go lang study #6 net http urlGunosy Go lang study #6 net http url
Gunosy Go lang study #6 net http url
 
Jenkins study 7 2013-01-28
Jenkins study 7 2013-01-28Jenkins study 7 2013-01-28
Jenkins study 7 2013-01-28
 
エンジニアと椅子
エンジニアと椅子エンジニアと椅子
エンジニアと椅子
 
ちょっとだけさわってみる Go言語
ちょっとだけさわってみる Go言語ちょっとだけさわってみる Go言語
ちょっとだけさわってみる Go言語
 
Go言語の紹介
Go言語の紹介Go言語の紹介
Go言語の紹介
 
インタフェースの実装パターン
インタフェースの実装パターンインタフェースの実装パターン
インタフェースの実装パターン
 
AWS IoTでGo!
AWS IoTでGo!AWS IoTでGo!
AWS IoTでGo!
 
綺麗なスライドを作るための11の原則
綺麗なスライドを作るための11の原則綺麗なスライドを作るための11の原則
綺麗なスライドを作るための11の原則
 
2150117 infrastructure.nagoya
2150117 infrastructure.nagoya2150117 infrastructure.nagoya
2150117 infrastructure.nagoya
 
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
プリキュアのRuby実装の紹介 (2015 ver)  #MeguroStartupプリキュアのRuby実装の紹介 (2015 ver)  #MeguroStartup
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
 

Similaire à cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at high speed cli.go and cli-init

"Kongゲートウェイ2.5リリース" Kong Konnectアップデート オンラインミートアップ :kong 製品整理、優位性
"Kongゲートウェイ2.5リリース" Kong Konnectアップデート オンラインミートアップ :kong 製品整理、優位性"Kongゲートウェイ2.5リリース" Kong Konnectアップデート オンラインミートアップ :kong 製品整理、優位性
"Kongゲートウェイ2.5リリース" Kong Konnectアップデート オンラインミートアップ :kong 製品整理、優位性
Junji Nishihara
 
Dart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dartDart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dart
啓介 大橋
 

Similaire à cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at high speed cli.go and cli-init (20)

Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門
 
gcp ja night #27 Google Cloud Endpoints with Golang
gcp ja night #27 Google Cloud Endpoints with Golanggcp ja night #27 Google Cloud Endpoints with Golang
gcp ja night #27 Google Cloud Endpoints with Golang
 
Prometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slidePrometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slide
 
FlashAir x Bluemix アイデアソン
FlashAir x Bluemix アイデアソンFlashAir x Bluemix アイデアソン
FlashAir x Bluemix アイデアソン
 
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そうgulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
 
Server side Swift & Photo Booth
Server side Swift & Photo Booth Server side Swift & Photo Booth
Server side Swift & Photo Booth
 
Dartでサーバレスサービス
DartでサーバレスサービスDartでサーバレスサービス
Dartでサーバレスサービス
 
Android App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioAndroid App Development with Gradle & Android Studio
Android App Development with Gradle & Android Studio
 
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimuraAPIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
 
Openshift 20191128
Openshift 20191128Openshift 20191128
Openshift 20191128
 
Cloudy会 @cloudymeeting ハイブリッドクラウドとheroku/EC2決算法
Cloudy会 @cloudymeeting ハイブリッドクラウドとheroku/EC2決算法Cloudy会 @cloudymeeting ハイブリッドクラウドとheroku/EC2決算法
Cloudy会 @cloudymeeting ハイブリッドクラウドとheroku/EC2決算法
 
"Kongゲートウェイ2.5リリース" Kong Konnectアップデート オンラインミートアップ :kong 製品整理、優位性
"Kongゲートウェイ2.5リリース" Kong Konnectアップデート オンラインミートアップ :kong 製品整理、優位性"Kongゲートウェイ2.5リリース" Kong Konnectアップデート オンラインミートアップ :kong 製品整理、優位性
"Kongゲートウェイ2.5リリース" Kong Konnectアップデート オンラインミートアップ :kong 製品整理、優位性
 
インフラエンジニアのためのKrypton For DevOps入門
インフラエンジニアのためのKrypton For DevOps入門インフラエンジニアのためのKrypton For DevOps入門
インフラエンジニアのためのKrypton For DevOps入門
 
Google+APIをさわってみる。
Google+APIをさわってみる。Google+APIをさわってみる。
Google+APIをさわってみる。
 
cndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmalt
 
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!
 
Dart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dartDart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dart
 
Openshift 20191121
Openshift 20191121Openshift 20191121
Openshift 20191121
 
GDG Shikoku 2013
GDG Shikoku 2013GDG Shikoku 2013
GDG Shikoku 2013
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 

Dernier

Dernier (10)

論文紹介: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...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: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
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: 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
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at high speed cli.go and cli-init

  • 1. CLI.GO と CLI-INIT で高速にコマ ンドラインツールを開発す る THE COMMAND-LINE TOOL DEVELOPED AT HIGH SPEED CLI.GO AND CLI-INIT 2014/12/12 @taketin
  • 2. WHAT'S CLI.GO ? https://github.com/codegangsta/cli
  • 3. A SMALL PACKAGE FOR BUILDING COMMAND LINE APPS IN GO star - over 1900 GitHub code search hit - over 2800 CLIツール実装に必要なインタフェースを提供 コアロジックに集中できる
  • 4. WHAT'S CLI-INIT ? https://github.com/tcnksm/cli-init
  • 5. THE EASY WAY TO START BUILDING GOLANG COMMAND-LINE APPLICATION ref. 高速にGo言語のCLIツールをつくるcli-initというツール をつくった cli.go のテンプレートを生成 高速に開発開始!
  • 7. #0 ENVIRONMENT $ brew install go $ vi .bashrc export GOPATH=$HOME/go export GOROOT=/usr/local/opt/go/libexec export PATH=$PATH:$GOPATH/bin:$GOROOT/bin
  • 8. #1 INSTALLATION $ go get -d github.com/tcnksm/cli-init $ cd $GOPATH/src/github.com/tcnksm/cli-init $ make install
  • 9. #2 SPECIFICATION 仕様を決める TODOアプリ コマンドは todo とする 追加、削除、一覧 ができる インターフェースは add, delete, list とする
  • 10. #3 CLI-INIT $ cli-init -s add,delete,list todo
  • 11. #4 DEVELOPMENT commands.go にガリガリ書く
  • 12. #5 FLAGS コマンドにフラグオプションを追加する場合 ex) todo delete -a commands.go にフラグの記述を追記 var deleteFlags = []cli.Flag{ cli.BoolFlag{Name: "all, a", Usage: "all delete"}, } var commandDelete = cli.Command{ Name: "delete", Usage: "", Description: ` `, Action: doDelete, Flags: deleteFlags, // add } func doDelete(c *cli.Context) { isDeleteAll := c.Bool("all") if isDeleteAll { // snip.. } }
  • 13. #6 BUILD $ go install $ todo -h
  • 14. #7 ENJOY Golang 学習コストそれほど高くない(気がする) 書き易いし読み易い(気がする) package の仕組み 便利ツール作るのに最適ぽい 標準ライブラリ充実 クロスコンパイル環境 速度が早い goroutine
  • 15. TALKER https://github.com/taketin/talker 重複無しで総当たりのくじ引き Dropbox をストレージで使う 社内勉強会などにご利用ください