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
0
120
初心者がGoでCLIツール作ってみて学んだこと
syossan27
June 20, 2022
Tweet
Share
More Decks by syossan27
See All by syossan27
一人SREが歩んだ Platform Engineering スモールスタート実践録
syossan27
2
1.3k
SREって何? 現場で学んだサイト信頼性の第一歩
syossan27
5
1.3k
知識0からカンファレンスやってみたらこうなった!
syossan27
5
580
突然のメモリ使用率上昇へ対応! k8sカスタムコントローラー開発事例
syossan27
2
490
監視 やばい
syossan27
12
11k
最先端を追う前に、まず広めよう! 〜AIツールの普及活動のすすめ〜
syossan27
2
1.5k
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
780
SRE Trail Mapから考える仲間の増やし方
syossan27
3
800
FanstaにおけるCI・CDの紹介と培った知見
syossan27
2
470
Other Decks in Programming
See All in Programming
Deno Tunnel を使ってみた話
kamekyame
0
310
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
310
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.3k
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.4k
CSC307 Lecture 01
javiergs
PRO
0
660
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
160
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
530
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
650
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
130
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
160
Cap'n Webについて
yusukebe
0
160
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
It's Worth the Effort
3n
187
29k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
210
Designing for Performance
lara
610
70k
Thoughts on Productivity
jonyablonski
73
5k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.5k
The untapped power of vector embeddings
frankvandijk
1
1.5k
ラッコキーワード サービス紹介資料
rakko
0
1.9M
Embracing the Ebb and Flow
colly
88
4.9k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
120
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の文化として短い変数名を使う • 対応 • 基本は短い変数名で、必要によって制限を外す
どんなものでもアウトプットしていけば 色々な発見があるので 皆アウトプットしていこう!₍₍⁽⁽(◌ી( ˘ω˘ )ʃ)₎₎⁾⁾