Edited at
WACULDay 11

Goの俺的scaffoldはこれだ!2017年版

More than 1 year has passed since last update.

Boom Boom Hello, gophers! Go書いてるかい!


tl;dr

今年も色々、汚物に似た何かをGitHub上に吐き散らかしてきましたが、

来年はもうちょっとキレイな汚物にしようと考え、自分なりに Goで何か作り始めるならここがスタート という物をまとめてみようと思います。


実物

go-initというのを作って運用してます。

中には init.sh が入ってるので、 init.sh ${OWNER} ${NAME} とかすると、 github.com/${OWNER}/${NAME} で運用する前提のディレクトリが出来上がるので、 git init とかして遊ぶといいと思います。

本当はこいつをscaffoldingツールとして仕上げてこの記事を書きたかったんですが、時間切れです。

yeomanでいいじゃん


動機づけ


2017年私的プロジェクト振り返り

この2017年、なんやかんや自分なりに色々開発してきて、あれがねえな、これもねえなと思うたびにshell書く代わりぐらいのテンションでgolang書いてきました。

今年メンテしていた自分のリポジトリを雑に振り返ってみると…



  • ask


    • CLIでダイアログだすやーつ。Y/NとかStringとか取れちゃう。嬉しい! 何番煎じだよ




  • deject


    • ローカルリポジトリ管理する君。dog fooding しちゃいるものの、将来性が見えない。 何番煎じd




  • git-branches



    • git-branch --list 見にくいよ、fzfとかと繋げた時に見やすいの作ろ、と思ったやつ git-for-each-refでいいじゃん




  • git-prompt


    • tmuxとか、zshのプロンプトにさ、gitの情報出したいじゃん

    • zshのvcs_infoはさ、スゲーはえーけど、情報足んないじゃん

    • shellでやってもいいけどさ、重いじゃん
      そうだ、goでやろう。 結構速いよ!(当社比)




  • git-vertag


    • segverタグ管理したいけど、npm 。俺のローカルに node がいくつ入ってると思ってるんだ。 何番線




  • go-spdx



    • SPDX LicensesMIT+APSL-1.0とか)パースしてやんよ!なんならLICENSE本文も出したるぜ! 誰得




  • richgo


    • go test 見にくいんじゃ!!FAIL を赤文字にしたらんかい!! スター結構もらったよ! (^O^)




  • xdg



    • XDG Base Directory Specification で示されるディレクトリの一覧を色々取得するやつ。

    • 仕様以上でも以下でもないのがなくて、しょうがなく作った。なんで無いの? 誰もいらないかr




  • zshist


    • zshのhistってなんでvimでいじると文字化けるの。馬鹿なの。と思ってdecode&encodeするやつ。shellでおk



まぁ誰得だったり、n番煎じだったり酷いですね。

それもこれも、僕が変に凝り性で、そうだアレ作ろ!と思ってから1週間経った頃にもまだ .circle/config.yml コネコネしてたりするからです。


scaffoldingの目的


  • 作りたいと思った瞬間、目的に集中できる状態を作りたい

  • あわよくば、するっと go-awesome とか載りたい


    • Coverageなんてとってねえよ!CI?ハハッ!みたいな状態だとモチベ下がる。

    • go-awesome自体、雑多な寄せ集めみたいになってるけど、それでもやっぱり載ってるとさ!嬉しいじゃん!!




選択した物と動機(という名の感想)


  • コマンドライン引数の処理はkingpin最強


    • 若干やれることが多すぎるけど、取り回しがいい



  • CIはなんだかんだCircleCIがバランスいい



    • Werckerシャレオツ最強かと思ったけど、漢気が足りない。



  • CoverageはCodecovが良さそう。Coverallsでもいいんだけど、ちょと見づらい

  • LICENSEは何も考えずにMITでいい


  • goreleaserで、マルチプラットフォーム対応のバイナリリリースも簡単に


    • homebrewに載せるのすら簡単。すばら



  • Makefileはやっぱりあったほうがいい



    • depgo-bindata だと、golang周りのツール類が群雄割拠している

    • contributionのためのentrypointとして、タスクランナーはあったほうが優しみ

    • golang開発のタスクランナーにgulpとか持ち出すのナンセンス。Makefileでいい




おわりに

これが永遠のベストだとは思わないですが、ひとまず今のところはこれでいいんじゃないかな、というところに落ち着きました。

これからgolangで何か作ろう、でも環境ちゃんと定めたいな、引っかかっちゃって先に進めないな、というgophersのお役に立てれば幸いです。

良きgophersライフを。