SlideShare ist ein Scribd-Unternehmen logo
1 von 12
初心者が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の文化として短い変数名を使う
• 対応
• 基本は短い変数名で、必要によって制限を外す
どんなものでもアウトプットしていけば
色々な発見があるので
皆アウトプットしていこう!₍₍⁽⁽(ી ( ˘ω˘ )ʃ)₎₎⁾⁾

Weitere ähnliche Inhalte

Mehr von Shota Inoue (8)

Oss builder
Oss builderOss builder
Oss builder
 
雑兵エンジニアから学ぶ 転職の失敗・成功
雑兵エンジニアから学ぶ 転職の失敗・成功雑兵エンジニアから学ぶ 転職の失敗・成功
雑兵エンジニアから学ぶ 転職の失敗・成功
 
雑兵なのに副業をやってみた
雑兵なのに副業をやってみた雑兵なのに副業をやってみた
雑兵なのに副業をやってみた
 
雑兵だけどGolangでコマンドラインツールを作ってみた
雑兵だけどGolangでコマンドラインツールを作ってみた雑兵だけどGolangでコマンドラインツールを作ってみた
雑兵だけどGolangでコマンドラインツールを作ってみた
 
雑兵デブエンジニアに起こった痛風という悲劇
雑兵デブエンジニアに起こった痛風という悲劇雑兵デブエンジニアに起こった痛風という悲劇
雑兵デブエンジニアに起こった痛風という悲劇
 
技術的に流行を追い求めるのは間違っているだろうか?
技術的に流行を追い求めるのは間違っているだろうか?技術的に流行を追い求めるのは間違っているだろうか?
技術的に流行を追い求めるのは間違っているだろうか?
 
Laravelで 自家製ライブラリを 作ってみよう!
Laravelで自家製ライブラリを作ってみよう!Laravelで自家製ライブラリを作ってみよう!
Laravelで 自家製ライブラリを 作ってみよう!
 
簡単便利!Laravel Homestead
簡単便利!Laravel Homestead簡単便利!Laravel Homestead
簡単便利!Laravel Homestead
 

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

初心者がGoでcliツール作ってみて学んだこと