Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
初心者がGoでCLIツール作ってみて学んだこと
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
syossan27
June 20, 2022
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
初心者がGoでCLIツール作ってみて学んだこと
syossan27
June 20, 2022
More Decks by syossan27
See All by syossan27
一人でちいさくはじめる Platform Engineering
syossan27
4
3k
一人SREが歩んだPlatform Engineeringスモールスタート実践録 ~ クラウドネイティブ会議版 ~
syossan27
4
2.3k
プロポーザル サポートガイドを読み解いていこう!
syossan27
3
1k
幻滅期を越える サイトリライアビリティ エンジニアリング
syossan27
1
270
一人SREが歩んだ Platform Engineering スモールスタート実践録
syossan27
2
2k
SREって何? 現場で学んだサイト信頼性の第一歩
syossan27
5
1.7k
知識0からカンファレンスやってみたらこうなった!
syossan27
5
790
突然のメモリ使用率上昇へ対応! k8sカスタムコントローラー開発事例
syossan27
2
590
監視 やばい
syossan27
12
11k
Other Decks in Programming
See All in Programming
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
170
バグを直したら useEffect が消えた
colorful12
3
840
アクセシビリティから考える情報設計
high_g_engineer
0
270
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
Press start. Python's next generation.
willingc
PRO
3
310
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
460
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
140
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
870
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
880
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
41k
Everyday Curiosity
cassininazir
0
310
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Music & Morning Musume
bryan
47
7.4k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Statistics for Hackers
jakevdp
799
230k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
690
Automating Front-end Workflow
addyosmani
1369
210k
Docker and Python
trallard
47
4.2k
WCS-LA-2024
lcolladotor
0
820
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
エンジニアに許された特別な時間の終わり
watany
108
250k
Transcript
初心者がGoで CLIツール作ってみて 学んだこと しょっさん(@syossan27)
自己紹介 • しょっさん(@syossan27) • Go/Ruby/PHP • GoでCLIツール作ったり(kirimori, torisetsu)
最近あったこと mattnさんから PRを頂いた₍₍⁽⁽(◌ી( ˘ω˘ )ʃ)₎₎⁾⁾
!!
これまで作ったもの • kirimori: vimのプラグインをCLIから追加や削除等出来るツール • torisetsu: GithubでよくみるREADME.mdのテンプレートを作成し、 ファイルとして出力するツール
kirimori • 使用パッケージ • urfave/cli: CLIツール作成パッケージ • mitchellh/go-homedir: ユーザーのホームディレクトリがhomedir.Dir()で出力できるパッケージ •
BurntSushi/toml: TOMLのparserパッケージ 設定ファイルをTOML形式にしたので使用 • haya14busa/go-vimlparser: vimLのparserパッケージ .vimrcの中身を扱うために使用 • Songmu/prompter: 対話形式を簡単に実装できるパッケージ
初心者ならではの 様々な失敗 • packageで分ける粒度が分からず、一つのファイルに全てを 突っ込む • エラーハンドリング時に適当にpanicを使ったために自分が panic • 構造体メソッドに対してポインタレシーバを使わない
• やたら変数名を長くしちゃう
packageで分ける粒度が分からず、 一つのファイルに全てを突っ込む • 何が問題だったか? • 密結合がひどい • 適切な分け方が分からなかった • 対応
• 今回ではコマンド毎の処理をpackageに分けるべきだった
エラーハンドリング時に 適当にpanicを使ったために自分がpanic • 何が問題だったか? • panicはユーザーに対して出すべきではないメッセージを出 してしまう (想定ユーザーが開発者の場合は、適した場所で使うべ き) •
対応 • panicではなく、fmt.Fprintf(stderr,”hoge”)など出力してから os.Exitするべきだった
構造体メソッドに対して ポインタレシーバを使わない • 何が問題だったか? • ポインタレシーバの代わりに値レシーバを使っていた • 値レシーバだとポインタ変数がnilの場合に構造体メソッドを呼び出す と、panicが呼び出される •
値レシーバだと構造体メソッドが構造体のフィールドの値を更新でき ない • 対応 • 値レシーバからポインタレシーバに変更した
やたら変数名を長くしちゃう • 何が問題だったか? • Goの文化として短い変数名を使う • 対応 • 基本は短い変数名で、必要によって制限を外す
どんなものでもアウトプットしていけば 色々な発見があるので 皆アウトプットしていこう!₍₍⁽⁽(◌ી( ˘ω˘ )ʃ)₎₎⁾⁾