Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go初心者でもCLIツールを作った話をLTしたい! / golang-beginner-cli...

Amane Suzuki
October 19, 2018

Go初心者でもCLIツールを作った話をLTしたい! / golang-beginner-cli-tool

Go初心者が全く役に立たないCLIツールを作って勉強会でLTするまでの道筋です。

言語を勉強するときに大事なのは「本当に何でも良いから」アウトプットすることです。 勉強会駆動開発やっていきましょう。

Amane Suzuki

October 19, 2018
Tweet

More Decks by Amane Suzuki

Other Decks in Technology

Transcript

  1. 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) 19 コマンドライン引数のパース urfave/cli Flagなどを指定すると簡単にCLIツールを作れる
  2. 20 サブコマンドの追加 app.Commands = []cli.Command{ { Name: "set", Usage: "Save

    config to $HOME/.trivia/config.json", Action: setConfig, Flags: flags, }, } urfave/cli サブコマンドもほとんど同じ⽂法で追加できる
  3. 22 スクレイピング 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 "#mw-content-text p" でいけました
  4. 26 その他必要になったライブラリ • fmt • encoding/json • io/ioutil • os

    • mitchellh/go-homedir • ホームディレクトリを取得
  5. 29 まとめるよ! まとめ • cli + goquery + auroraで簡単CLIツールを作ってみた •

    最初のハードルはめっちゃ低い! みんなGoやろう! • ⽂法簡単 • ツールが独⽴していてエディタ依存性も低い • 関数にデフォルト引数ほしくないですか? Future Work • A Tour of Goのgoroutine以降をやる • 友⼈をGoの道に引きずり込む
  6. アイコンとか画像とかの出典 表紙の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