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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
syossan27
June 20, 2022
Programming
0
120
初心者がGoでCLIツール作ってみて学んだこと
syossan27
June 20, 2022
Tweet
Share
More Decks by syossan27
See All by syossan27
幻滅期を越える サイトリライアビリティ エンジニアリング
syossan27
1
180
一人SREが歩んだ Platform Engineering スモールスタート実践録
syossan27
2
1.4k
SREって何? 現場で学んだサイト信頼性の第一歩
syossan27
5
1.3k
知識0からカンファレンスやってみたらこうなった!
syossan27
5
640
突然のメモリ使用率上昇へ対応! k8sカスタムコントローラー開発事例
syossan27
2
510
監視 やばい
syossan27
12
11k
最先端を追う前に、まず広めよう! 〜AIツールの普及活動のすすめ〜
syossan27
2
1.5k
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
820
SRE Trail Mapから考える仲間の増やし方
syossan27
3
830
Other Decks in Programming
See All in Programming
オブザーバビリティ駆動開発って実際どうなの?
yohfee
3
830
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
2
110
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
130
DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整からの卒業〜
seaturt1e
1
690
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
900
ロボットのための工場に灯りは要らない
watany
10
2.7k
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
780
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
8k
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
100
エージェント開発初心者の僕がエージェントを作った話と今後やりたいこと
thasu0123
0
240
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
190
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
120
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Odyssey Design
rkendrick25
PRO
2
540
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Statistics for Hackers
jakevdp
799
230k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
170
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Chasing Engaging Ingredients in Design
codingconduct
0
140
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.4k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
140
Google's AI Overviews - The New Search
badams
0
930
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の文化として短い変数名を使う • 対応 • 基本は短い変数名で、必要によって制限を外す
どんなものでもアウトプットしていけば 色々な発見があるので 皆アウトプットしていこう!₍₍⁽⁽(◌ી( ˘ω˘ )ʃ)₎₎⁾⁾