tachikoma gemはdeprecatedです! tachikoma.ioはもうちょっとだけ続くんじゃ。さねまつです。
Rails Developers Meetup #4にご参加いただきありがとうございます。会場提供しました。そこで、Bye, tachikoma gemというLTをしました。
重要
- tachikoma gemはdeprecatedです!
- tachikoma.ioはもうちょっとだけ続くんじゃ
あとは思い出話です。
tachikoma gemが解決したかった問題
しょっちゅうbundle updateしていかないと、つらい。もうバージョン上げられない。あるある。 昔ならともかく、最近はみんなわかってる。いろんな脆弱性もでるし。わかってなかった人はわかって持って帰ってください。ただ、結構めんどくさい。
tachikoma gem
bundle updateしてpull requestを送ってくるライブラリ gem。これを定期的に実行。人はmergeボタンをポチるだけ。
jenkins and pull request
もとのアイデアは刺身ブーメランさんのrubykaigi 2013の発表です。
gemの依存をjenkinsとpull requestで定期的に「継続して」半自動bundle updateやっていくぞ。
いい言葉
継続して前進することが、重要です。 私たちにはそれが出来ます。 -- ながえけんすけ
tachikoma next
このpainを解決するためにtachikoma gem を作ったけど、いろいろ課題が出てきてdeprecateだぞ!って、今回の資料を作ろうと自分の過去の資料を見直していたら、まさに今日話そうとしている内容のスライドが出てきた???
tachikoma next ?? しかも2015年12月?? どうもこの資料作り覚えがある気がしたんだよ!!
- tachikoma gemはしにつつあるので、shell scriptかruby scriptでかけ
- 必要なツールは用意した
気にせず続けます。もちろんそれだけだとアレなので、マネーフォワード社でどうしているかが、プラスアルファです。
tachikoma gem
思い出話に戻ると、半自動のbundle update、各プロジェクトで同じことやるんだから、共通コードはgemにして、差分の設定だけ持てばいいじゃん。この発想がtachikoma gemです。
刺身さんの発表の翌月にある程度動くv2.0.0をコミットしてます。刺身さんのスクリプトをv1とする、みたいなバージョニングでした。
上位のコントリビューター
虎の威を借る狐です。いろんな方が開発に参加してくれました。
それもあって、bundlerだけでなく、carton, composer, cocoapods, yarnなどの対応が進みました。あとオプションが増えたりとかテスト書きやすくクラス構造にしたりとかそういうの。
tachikoma.io
個別に設定書いて自前でホストするのめんどいわ。という声が多くて、2014年9月に tachikoma gemのweb service版 tachikoma.ioをリリースしてます。
tachikoma gem なぜdeprecated
bundle updateしなくなったかというと、そうではありません。
マネーフォワードの場合
マネーフォワードでもこんなpull requestを(プロジェクトによっては)定期的に来るようにしています。
diffみて自動でチェックボックス出して、テストも走って、merge。
tachikoma って名前がついてるけど、tachikoma gemは使っていません。
tachikoma kun
こんなのが頑張って動いています。いろいろ変えたいときに限界があるので。
#!/bin/bash if [[ ! $BUILD_FOR =~ ^[-_0-9a-zA-Z]+$ ]]; then echo 'Invalid $BUILD_FOR.' fi if [ ! $BASE_REMOTE_BRANCH ]; then BASE_REMOTE_BRANCH=origin/master fi if [ ! $PULL_REQUEST_BASE ]; then PULL_REQUEST_BASE=master fi if [ ! $TACHIKOMA_KUN_PATH ]; then TACHIKOMA_KUN_PATH=$PWD fi if [ ! $GITHUB_OWNER ]; then GITHUB_OWNER=moneyforward fi REPOSITORY_PREFIX=https://$GITHUB_ACCESS_TOKEN:[email protected]/$GITHUB_OWNER PULL_REQUEST_TITLE='Exec tachikoma kun update' REPOSITORY_PATH=repos/$BUILD_FOR REPOSITORY_URL=$REPOSITORY_PREFIX/$BUILD_FOR.git FORKED_REPOSITORY_URL=${REPOSITORY_URL//$GITHUB_OWNER/$GITHUB_ACCOUNT} cd $TACHIKOMA_KUN_PATH if [ -d $REPOSITORY_PATH ];then rm -fr $REPOSITORY_PATH fi git clone $REPOSITORY_URL $REPOSITORY_PATH cd $REPOSITORY_PATH HEAD_DATE=$(date +%Y%m%d_%H-%M-%S) HEAD=tachikoma/update-$HEAD_DATE git config user.name $COMMITER_NAME git config user.email $COMMITER_EMAIL git checkout -b $HEAD $BASE_REMOTE_BRANCH export BUNDLE_PATH=./vendor/bundle export BUNDLE_BUILD__LIBV8=--with-system-v8 export BUNDLE_BUILD__THERUBYRACER=--with-v8-dir bundle update $BUNDLE_UPDATE_GEMS git add Gemfile.lock git commit -m "Bundle update $HEAD_DATE" export BUNDLE_GEMFILE=$TACHIKOMA_KUN_PATH/Gemfile # 名前つけないとhttps with tokenでpushできなかったので一旦名前つけている # 後続の処理で余計なremote urlがあるとoriginにPRしてくれないので、すぐに消す git remote add forked $FORKED_REPOSITORY_URL bundle exec git httpsable-push forked $HEAD git remote remove forked bundle exec pull-request-create \ --title="$PULL_REQUEST_TITLE $HEAD_DATE" \ --base=$PULL_REQUEST_BASE \ --head=$GITHUB_ACCOUNT:$HEAD # check Gemfile.lock diff git diff --name-only $BASE_REMOTE_BRANCH \ | grep ".*[gG]emfile.lock$" || RETURN_CODE=$? case "$RETURN_CODE" in "" ) echo "found" ;; "1" ) echo "not found" exit 0 ;; * ) echo "Error" exit $RETURN_CODE ;; esac # Post comment with CompareLinker git diff --name-only $BASE_REMOTE_BRANCH \ | grep ".*[gG]emfile.lock$" \ | xargs bundle exec compare-linker-wrapper --base $BASE_REMOTE_BRANCH \ --formatter CompareLinker::Formatter::Markdown \ | bundle exec text-to-checkstyle \ | bundle exec saddler report \ --require saddler/reporter/github \ --reporter Saddler::Reporter::Github::PullRequestComment
ヒエー
パーツは作った
個別事情にいろいろ対応していくのが無理ゲー。必要なパーツパーツは作ったから、そっち使ってくれ! というのがtachikoma gem deprecatedの理由です。
定期的にライブラリの依存関係をアップデートしてPull Requestする – Saddler - checkstyle to anywhere
パーツは作ったから、そっち使ってくれ!
重要
- tachikoma gemはdeprecatedです!
- サービスは自分で使っても便利なので、tachikoma.ioはもうちょっとだけ続くんじゃ
appendix
saddler gem 流行らなかった話
みんな haya14busa/reviewdog: A code review dog who keeps your codebase healthy つかえ! golang製で便利です。
問題意識
いろんなツールが成果物をgithubのpull requestにコメントしたがる。 みんなバラバラ。めんどくせ。
saddler gemはjavaのcheckstyle形式が読めて、それでpost出来ます。簡単。ツールによって、formatterをcheckstyleで、ってだいたいある。
reviewdogはvimのdiff形式?とgolintの形式と、checkstyle形式などが読める。便利ですね。
使い方の教え方
なんで負けたんだろ、って考えると、一つには使い方の教え方がありました。
saddler gem -> パイプで便利やで reviewdog -> design docs
reviewdogにはdesign docsがあって、reviewdogがなんであってなんでないか、何に注力するか、何をしないか、が書いてあります。コレイイナー。
saddler gem -> reviewdogはcheckstyle formatでそのままいけるので、何も変えずに乗り換えられそう(乗り換えたことはまだない)。移行してみたエントリ reviewdogを使ってtextlintの結果をPull Requestに書き込む方法 - Qiita もあります。
jenkinsの GitHub pull request builder pluginというのがあって、中でごちゃごちゃやっていてそれの対応めんどかったので、そのplugin使ってる人は、saddler使うとマダいいのかもしれない。reviewdogも動くかもしれないけど。
ツールの言語選定
rubyで作って辛かったこと。 fluentdみたいにplugin出来る環境に作ったつもりだけど、だれもpluginなんてつくらなかった! とくにrubyプロダクト以外で使う場合がつらい。 bundle installでどっかでコケる 。 travis-ciはrubyプロダクト以外の場合ruby1.9。
golangで書いたら良かったんじゃないか。 そっちだったらヒットしてたんじゃないか妄想。 2017にrubyで書いててもmastodonみたいに爆発するケースもある。
要はプロダクトの魅力やんけ!
nodejsも自分でツール作りおわるまでは最高便利けど、色んな人のところで使ってもらうにはうんざりじゃ、という個人の感想です。
Evolution of the Heroku CLI
そんななか!
Evolution of the Heroku CLI: 2008-2017
な、なんだってー
tachikoma gem はもう使わないほうがいいのか
- 何か不具合があるとか、もう動かないとか、ありますか。
- まだまだ使えます! が特に積極的にメンテナンスしていく気がないです。緩やかに移行していってほしい
たとえば、bundle update
するときに、bundlerの仕様が変わって、Gemfile.lock
に BUNDLED_WITH
を書くようになったケース。
packsaddle/ruby-restore_bundled_with: Restore BUNDLED WITH section in Gemfile.lock from git repository. こんなの書いてtachikoma gemから呼ぶようにしているが、こんなの次々書いてられないっす…
bundler v2.0対応のコードは大昔に入れたからそれは動くはず(タブン)。
以上デース
最後に
マネーフォワードでは、エンジニアを募集しています。 ご応募お待ちしています。
【採用サイト】 ■マネーフォワード採用サイト ■Wantedly | マネーフォワード
【プロダクト一覧】 自動家計簿・資産管理サービス『マネーフォワード』 ■Web ■iPhone,iPad ■Android
ビジネス向けクラウドサービス『MFクラウドシリーズ』 ■会計ソフト『MFクラウド会計』 ■確定申告ソフト『MFクラウド確定申告』 ■請求書管理ソフト『MFクラウド請求書』 ■給与計算ソフト『MFクラウド給与』 ■経費精算ソフト『MFクラウド経費』 ■入金消込ソフト『MFクラウド消込』 ■マイナンバー管理ソフト『MFクラウドマイナンバー』 ■資金調達サービス『MFクラウドファイナンス』
メディア ■くらしの経済メディア『MONEY PLUS』