Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goで作り直すgitignore生成コマンド #go #golang / Reinvent gitignore command using golang

Goで作り直すgitignore生成コマンド #go #golang / Reinvent gitignore command using golang

Toshinori Sugita

May 16, 2018
Tweet

More Decks by Toshinori Sugita

Other Decks in Technology

Transcript

  1. Goで作り直す.gitignore生成コマンド
    2018/5/14 Gopher道場最終回

    View Slide

  2. 自己紹介
    ● 杉田 寿憲
    ○ Toshinori Sugita
    ○ toshi0607
    ○ toshi0607
    ○ toshi0607
    ● Software Engineer@freee
    ○ 好評の Windows 版に続いて急遽リリースを決めた Mac 版アプリの開発に、Xamarin.Mac を採用し
    て大幅な開発効率のアップと機能の標準化を実現。
    ● 最近の様子
    ○ Ruby > JavaScript >>> Go >>>>>> C#
    ● 『Extensive Xamarin』(共著)発売中!
    ○ 技術書典から商業出版へ

    View Slide

  3. 今日のお話
    ● gigというコマンドをGoで作った
    ● 作ったきっかけ
    ● 課題と解決策
    ● 残タスク

    View Slide

  4. 今日のお話
    ● gigというコマンドをGoで作った
    ● 作ったきっかけ
    ● 課題と解決策
    ● 残タスク

    View Slide

  5. gigコマンドとは?
    ※https://github.com/toshi0607/gig

    View Slide

  6. gigコマンドとは?
    ※https://github.com/github/gitignore

    View Slide

  7. gigコマンドとは?
    ● Usage
    ○ gig [OPTIONS] [Language]
    ● Application Options:
    ○ -l, --list Show list of available language
    ○ -f, --File Output .gitignore file
    ○ -q, --quiet Hide stdout
    ○ -v, --version Show version
    ● Help Options:
    ○ -h, --help Show this help message
    ※https://github.com/toshi0607/gig

    View Slide

  8. gigコマンドとは?
    ※https://github.com/toshi0607/gig

    View Slide

  9. giboでええやん?
    ※https://github.com/toshi0607/gig

    View Slide

  10. gigコマンドとは?
    ※https://github.com/toshi0607/gig

    View Slide

  11. 今日のお話
    ● gigというコマンドをGoで作った
    ● 作ったきっかけ
    ● 課題と解決策
    ● 残タスク

    View Slide

  12. 作ったきっかけ
    ● simonwhitaker/giboとは別コンセプトで同じことしたい
    ● io.Writer interfaceの気持ちよさを形にしたい
    ● クロスプラットフォームでシュッと配布してみたい

    View Slide

  13. 今日のお話
    ● gigというコマンドをGoで作った
    ● 作ったきっかけ
    ● 課題と解決策
    ● 残タスク

    View Slide

  14. 課題
    こんなURLにアクセスしたいけど…
    https://github.com/github/gitignore/raw/master/Go.gitignore

    View Slide

  15. 課題
    引数で指定した言語からよしなにURLを組み立てたい
    https://github.com/github/gitignore/raw/master/Go.gitignore

    View Slide

  16. giboの解決策
    ● github/gitignoreをgit clone
    ● language_file=$(find "$local_repo" -maxdepth 1 -iname
    "$1.gitignore" | head -n 1)
    ※https://github.com/simonwhitaker/gibo

    View Slide

  17. 解決策① 
    ● 入力をパスカルケースに変換
    ● pinzolo/casee
    go
    Go
    cakephp
    CakePhp

    View Slide

  18. 解決策① 
    ● 入力をパスカルケースに変換
    ● pinzolo/casee
    go
    Go
    cakephp
    CakePhp
    なんとかできるかもしれないが、がんばっても沼っぽい

    View Slide

  19. 解決策②
    ● 対応言語リストを毎回取得

    View Slide

  20. 解決策②
    ● 対応言語リストを毎回取得
    v
    単に言語指定するユースケースで2回もアクセスしたくない

    View Slide

  21. 解決策③
    ● リストをフィルタリングできるコマンドと組み合わせる
    ● Go言語によるCLIツール開発とUNIX哲学について
    ○ http://blog.yuuk.io/entry/go-cli-unix
    ● peco/peco
    ○ https://github.com/peco/peco

    View Slide

  22. 解決策③
    ※https://github.com/toshi0607/gig

    View Slide

  23. 今日のお話
    ● gigというコマンドをGoで作った
    ● 作ったきっかけ
    ● 課題と解決策
    ● 残タスク

    View Slide

  24. 残タスク
    ● .gitignore開発環境シリーズ(Global系)対応
    ● ネットワークに依存しないテスト
    ● ゴルーチンのエラー処理
    ● アップデート機構

    View Slide

  25. ご清聴ありがとうございました!
    Goで作り直す.gitignore生成コマンド

    View Slide