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

PDF
色眼鏡を外す
PDF
「とある現場の自動家(オートメーター)」-システムテスト自動化カンファレンス2013 懇親会LT-
PDF
仁斤曰く 「”手間業”蔓延り易く、 “楽”成り難し」
PDF
PDF
LT司会資料(わんくま同盟名古屋勉強会#15)
PDF
オープンソースコミュニティへのライトな貢献
PDF
2014 03-15-kojskansai-2nd-public
PDF
ATO_2016.2.21_Satoko_Yamashiro
色眼鏡を外す
「とある現場の自動家(オートメーター)」-システムテスト自動化カンファレンス2013 懇親会LT-
仁斤曰く 「”手間業”蔓延り易く、 “楽”成り難し」
LT司会資料(わんくま同盟名古屋勉強会#15)
オープンソースコミュニティへのライトな貢献
2014 03-15-kojskansai-2nd-public
ATO_2016.2.21_Satoko_Yamashiro

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

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

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