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
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
一人SREが歩んだPlatform Engineeringスモールスタート実践録 ~ クラウドネイティブ会議版 ~
syossan27
4
2.1k
プロポーザル サポートガイドを読み解いていこう!
syossan27
3
890
幻滅期を越える サイトリライアビリティ エンジニアリング
syossan27
1
240
一人SREが歩んだ Platform Engineering スモールスタート実践録
syossan27
2
1.9k
SREって何? 現場で学んだサイト信頼性の第一歩
syossan27
5
1.7k
知識0からカンファレンスやってみたらこうなった!
syossan27
5
750
突然のメモリ使用率上昇へ対応! k8sカスタムコントローラー開発事例
syossan27
2
570
監視 やばい
syossan27
12
11k
最先端を追う前に、まず広めよう! 〜AIツールの普及活動のすすめ〜
syossan27
2
1.6k
Other Decks in Programming
See All in Programming
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
170
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
270
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
430
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
210
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
290
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
2.7k
テーブルをDELETEした
yuzneri
0
130
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
100
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
130
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
290
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
160
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
630
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
The Curse of the Amulet
leimatthew05
2
13k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
Odyssey Design
rkendrick25
PRO
2
740
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Why Our Code Smells
bkeepers
PRO
340
58k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Music & Morning Musume
bryan
47
7.3k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
540
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の文化として短い変数名を使う • 対応 • 基本は短い変数名で、必要によって制限を外す
どんなものでもアウトプットしていけば 色々な発見があるので 皆アウトプットしていこう!₍₍⁽⁽(◌ી( ˘ω˘ )ʃ)₎₎⁾⁾