Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Go初心者でもCLIツールを作った話をLTしたい! / Make a CLI tool with Go

187 views

Published on

Go初心者がCLIツールを作った話です

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Go初心者でもCLIツールを作った話をLTしたい! / Make a CLI tool with Go

  1. 1. Go初心者 でも CLIツール を作った話を LT したい! Go(un)conference 4kg Amane Suzuki
  2. 2. 鈴木 天音 言語 趣味 Kaggle, 競プロ, 競技かるた SakuEji amaotone
  3. 3. このLTで伝えたいこと 1.初心者は忘れる前になにか作ろう 2.Goなら簡単にCLIツールを作れる 3.LTしよう!(僕がハードル下げるので)
  4. 4. 言語初心者あるある 数週間前までの私です
  5. 5. A Tour of Goをやった
  6. 6. なにか作るぞ! 夢は大きく★5000や!
  7. 7. 役に立ちそうなツール 思いつかない
  8. 8. もうやだ…オフトゥンで寝よ…
  9. 9. Go完全に忘れた
  10. 10. だれもお前を愛さない
  11. 11. こうならないために
  12. 12. いっそのこと 役に立たないツールを作ろう
  13. 13. 12つくった Trivia Wikipediaからランダムに単語をひろって教えてくれる https://github.com/amaotone/trivia 今ならあなたが最初のstargazerになれます!
  14. 14. デモ 怪しい単語が出ないかヒヤヒヤ
  15. 15. 使ったもの 「これ使ったら?」「これは良くない」 があったら教えてください!
  16. 16. 15エディタ • プラグインは vim-go と deocomplete-go が良い • Vim以外だとVSCodeとかJetBrains系
  17. 17. 16開発環境 パッケージ管理 → golang/dep テスト → testing
  18. 18. 17実装したい機能と対応するライブラリ 1. コマンドライン引数を解析して → urfave/cli 2. 対応する言語のWikipediaからスクレイピング → PuerkitoBio/goquery 3. ターミナルに出力 → fatih/color (archived) → logrusorgru/aurora
  19. 19. app := cli.NewApp() app.Name = "Trivia" app.Usage = "Trivia makes your life richer." app.Version = "0.0.1" app.Action = showWord app.Flags = []cli.Flag { cli.StringFlag { Name: "lang, l", Usage: "Specify the language.", }, } app.Run(os.Args) 18コマンドライン引数のパース urfave/cli Flagなどを指定すると簡単にCLIツールを作れる
  20. 20. 19サブコマンドの追加 app.Commands = []cli.Command{ { Name: "set", Usage: "Save config to $HOME/.trivia/config.json", Action: setConfig, Flags: flags, }, } urfave/cli サブコマンドもほとんど同じ文法で追加できる
  21. 21. 20コンフィグファイルの読み込み urfave/cli/altsrc を利用できる しかし、 • コンフィグの読み込みしかできない • ファイル名をコマンドライン引数で与える必要あり • ファイル名を与えない場合、ちょっと汚い書き方 なので、自分で書くのが良さそう
  22. 22. 21スクレイピング PuerkitoBio/goquery jQueryと似た文法で要素の指定が可能 doc, err := goquery.NewDocument(url) if err != nil { // error handling } title = doc.Find("#firstHeading").Text() lead = doc.Find("#mw-content-text > div > p").First().Text() 要素をスキップして指定するとうまくいかない? lead = doc.Find("#mw-content-text > p").First().Text() // doesn't work
  23. 23. 22ターミナルのデコレーション
  24. 24. 23ターミナルのデコレーション 10/10にアーカイブされたっぽいです……
  25. 25. 24ターミナルのデコレーション logrusorgru/aurora 手軽にターミナル出力を色付けしたりBoldしたりできる fmt.Println(Bold(strings.TrimSpace(title))) fmt.Println(strings.TrimSpace(lead))
  26. 26. 25その他必要になったライブラリ • fmt • encoding/json • io/ioutil • os • mitchellh/go-homedir • ホームディレクトリを取得
  27. 27. おわりに 感想とか
  28. 28. 27勉強会駆動開発 実は、前回のgouncoも参加する予定だった (直前キャンセル, ごめんなさい) いつまでたっても本腰入れてGo勉強しないので LTすることにして退路を断った slideshare見ながら「行こうかなぁ……でもなぁ……」 って思ってる人には勉強会駆動開発しましょう!
  29. 29. 28まとめるよ! まとめ • cli + goquery + auroraで簡単CLIツールを作ってみた • 最初のハードルはめっちゃ低い! みんなGoやろう! • 文法簡単 • ツールが独立していてエディタ依存性も低い • 関数にデフォルト引数ほしくないですか? Future Work • A Tour of Goのgoroutine以降をやる • 友人をGoの道に引きずり込む
  30. 30. アイコンとか画像とかの出典 表紙のGopherくん The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) The gopher stickers was made by Takuya Ueda (https://twitter.com/tenntenn). Licensed under the Creative Commons 3.0 Attributions license. https://github.com/tenntenn/gopher-stickers スライド中の絵 http://konpa.github.io/devicon/ https://github.com/hwkr/BitIcon https://www.kaoriya.net/blog/2013/12/06/ https://www.irasutoya.com/ https://twitter.com/molgh/status/726854917214879744

×