SlideShare a Scribd company logo
1 of 30
Go初心者 でも
CLIツール を作った話を
LT したい!
Go(un)conference 4kg
Amane Suzuki
鈴木 天音
言語
趣味
Kaggle, 競プロ, 競技かるた
SakuEji amaotone
このLTで伝えたいこと
1.初心者は忘れる前になにか作ろう
2.Goなら簡単にCLIツールを作れる
3.LTしよう!(僕がハードル下げるので)
言語初心者あるある
数週間前までの私です
A Tour of Goをやった
なにか作るぞ!
夢は大きく★5000や!
役に立ちそうなツール
思いつかない
もうやだ…オフトゥンで寝よ…
Go完全に忘れた
だれもお前を愛さない
こうならないために
いっそのこと
役に立たないツールを作ろう
12つくった
Trivia
Wikipediaからランダムに単語をひろって教えてくれる
https://github.com/amaotone/trivia
今ならあなたが最初のstargazerになれます!
デモ
怪しい単語が出ないかヒヤヒヤ
使ったもの
「これ使ったら?」「これは良くない」
があったら教えてください!
15エディタ
• プラグインは vim-go と deocomplete-go が良い
• Vim以外だとVSCodeとかJetBrains系
16開発環境
パッケージ管理
→ golang/dep
テスト
→ testing
17実装したい機能と対応するライブラリ
1. コマンドライン引数を解析して
→ urfave/cli
2. 対応する言語のWikipediaからスクレイピング
→ PuerkitoBio/goquery
3. ターミナルに出力
→ fatih/color (archived)
→ logrusorgru/aurora
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ツールを作れる
19サブコマンドの追加
app.Commands = []cli.Command{
{
Name: "set",
Usage: "Save config to $HOME/.trivia/config.json",
Action: setConfig,
Flags: flags,
},
}
urfave/cli
サブコマンドもほとんど同じ文法で追加できる
20コンフィグファイルの読み込み
urfave/cli/altsrc を利用できる
しかし、
• コンフィグの読み込みしかできない
• ファイル名をコマンドライン引数で与える必要あり
• ファイル名を与えない場合、ちょっと汚い書き方
なので、自分で書くのが良さそう
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
22ターミナルのデコレーション
23ターミナルのデコレーション
10/10にアーカイブされたっぽいです……
24ターミナルのデコレーション
logrusorgru/aurora
手軽にターミナル出力を色付けしたりBoldしたりできる
fmt.Println(Bold(strings.TrimSpace(title)))
fmt.Println(strings.TrimSpace(lead))
25その他必要になったライブラリ
• fmt
• encoding/json
• io/ioutil
• os
• mitchellh/go-homedir
• ホームディレクトリを取得
おわりに
感想とか
27勉強会駆動開発
実は、前回のgouncoも参加する予定だった
(直前キャンセル, ごめんなさい)
いつまでたっても本腰入れてGo勉強しないので
LTすることにして退路を断った
slideshare見ながら「行こうかなぁ……でもなぁ……」
って思ってる人には勉強会駆動開発しましょう!
28まとめるよ!
まとめ
• cli + goquery + auroraで簡単CLIツールを作ってみた
• 最初のハードルはめっちゃ低い! みんなGoやろう!
• 文法簡単
• ツールが独立していてエディタ依存性も低い
• 関数にデフォルト引数ほしくないですか?
Future Work
• A Tour of Goのgoroutine以降をやる
• 友人をGoの道に引きずり込む
アイコンとか画像とかの出典
表紙の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

More Related Content

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

Goで始める言語処理系実装入門
Goで始める言語処理系実装入門Goで始める言語処理系実装入門
Goで始める言語処理系実装入門虎の穴 開発室
 
イマドキのUbuntu活用法
イマドキのUbuntu活用法イマドキのUbuntu活用法
イマドキのUbuntu活用法Hiroshi Chonan
 
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)Kazuhito Miura
 
パワーポイントを作るときに抑えておきたい色んなところ
パワーポイントを作るときに抑えておきたい色んなところパワーポイントを作るときに抑えておきたい色んなところ
パワーポイントを作るときに抑えておきたい色んなところmishikawa
 
直前合宿 講義スライド
直前合宿 講義スライド直前合宿 講義スライド
直前合宿 講義スライドtozan gezan
 
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)Shoot Morii
 
機械学習のはじめかた
機械学習のはじめかた機械学習のはじめかた
機械学習のはじめかたBus Hato
 

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

Goで始める言語処理系実装入門
Goで始める言語処理系実装入門Goで始める言語処理系実装入門
Goで始める言語処理系実装入門
 
イマドキのUbuntu活用法
イマドキのUbuntu活用法イマドキのUbuntu活用法
イマドキのUbuntu活用法
 
チームラボ忘年会
チームラボ忘年会チームラボ忘年会
チームラボ忘年会
 
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)
 
パワーポイントを作るときに抑えておきたい色んなところ
パワーポイントを作るときに抑えておきたい色んなところパワーポイントを作るときに抑えておきたい色んなところ
パワーポイントを作るときに抑えておきたい色んなところ
 
直前合宿 講義スライド
直前合宿 講義スライド直前合宿 講義スライド
直前合宿 講義スライド
 
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
 
機械学習のはじめかた
機械学習のはじめかた機械学習のはじめかた
機械学習のはじめかた
 

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