クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

husky(ハスキー)を導入して開発チームの生産性を改善した話

こんにちは、株式会社クラウドワークスでエンジニアをしている、松尾です。 早いものでエンジニアになって、1.5年です。いや〜〜早い。

時の流れ早すぎ。。

最近、huskylint-stagedを用いて、下記の仕組みを作りました

  • ステージングしたファイルに対して、コミット時stylelint, eslintを実行して、エラーの箇所を気づけるようになる

上記の具体的な解説記事というよりかはやってみた結果どうなん?的な記事です。

なぜやった?

  • プッシュして、CIの結果でstylelint,eslintのエラーに気づく事例が多々あったから

この部分をプッシュ前に気づけるうまい具合の仕組みないかなあと。。。

思ってた矢先にふと行った勉強会huskyを用いて、stylelintのエラーにローカルで気づけるようになったぜ!という発表を聞いていて、

「これ、俺もできそうだなあ。。。」 と発表を聞きながら思って、やらずにはいられなくなりました。

huskyで何をした?

出典元:MarcoKerschbaum

  1. husky: Git のコミットやプッシュなどを実行すると、設定した処理をその処理の前に実行してくれる仕組み
  2. lint-staged: ステージングしたファイルに対して、特定のコマンドを実行してくれるパッケージ。huskyと相性がよく、一緒に使われることが多い

上記の2つ(husky + lint-staged)を組み合わせて、以下の仕組みを作成

  • ステージングしたファイルに対して、コミット時stylelint, eslintを実行して、警告の箇所を気づける仕組み

開発チームに導入するメリットとしては、

  • レビュー出す前にstylelint, eslintのケアレスミスに気付ける
  • レビュワーとしては、huskyで検知している部分は注視しなくて良くなるので、レビューの効率化にもなる

▼以下の記事がhuskyを導入するメリットについて、もっと深掘ってくれてます。 qiita.com

「コミット時に毎回lintが実行されたら、ちょっと待たされるのでは?」という疑問に解答

結論、「実行速度は長くても10秒くらいなので、開発の大きな障害にはならない」です。

やったことをおさらいすると、 ▼以下の内容を開発チームに導入しました。(まだ1ヶ月も経たない程度ですが。。。)

  • huskyでコミット時にステージングしたファイルに対して、eslintとstylelintを走らせる

ここで肝なのが、「"ステージングしたファイルのみ"lintが走っている」所です。

なので、1回のコミットでステージングに上げるファイル数がとんでもなく多い時以外は、実行速度については気になりません! 約1ヶ月使ってみて、個人的には、実行速度について、大体5秒で長くても10秒くらいでした。

ビフォーアフター】husky導入の前後

huskyを導入する前と後について、図解を用いて、ストーリー調などを駆使して、説明します。

【ビフォー】 husky導入前

以前の運用では、プッシュする時にCIの結果でstylelint・eslintのエラーに気づくケースが割とありました。

▼なので、下記みたいなレビュワーとのやり取りがちょこちょこありました。

自分「いやー今日も良いコード書いたわ」

自分「さっそくプルリク作ってレビューしてもらおっと。コミット。そしてプッシュ!」

レビュワーXさん「CIでstylelintのエラーで引っかかってます。修正してもらえますか?」

自分「ああ!ローカルでstylelintの実行しとけば!!もう1度stylelintの引っかかった箇所を修正してからプッシュ!」

ローカル開発環境からローカルリポジトリにgit commitし、リモートリポジトリにgit pushする。git pushの後、CIの結果を待ってからstylelintのエラーに気づく。待ち時間およそ20分。

【アフター】 husky導入後

  • コミットした時にstylelintとeslintのエラーが気づけるようになります

▼なので、下記みたく1人でエラーに気づくことができます

自分「いやー今日も良いコード書いたわ」

自分「さっそくプルリク作ってレビューしてもらおっと。コミット」

自分「あれ?コミットしたら何かエラーでたやんけ、なんでや」

自分「ああ、stylelintのエラーでてるやん」

コミット時のstylelintのエラー画面
自分「ここをこう直せばいいだけね!レビューでツッコまれる前に気づけたわ。さすがやな」

という具合でレビュワーに突っ込まれる前にエラーに気づけることができてます。

終わりに

個人的になぜやったのか的なことを書いて、締めようかなと思います。

今までは、自分のできることを広げるため、やったことがないことに挑戦しまくってました。

具体的には、APIを使った機能開発やReact(モダンフロント)を使った開発などを積極的にしていました。

それを1年くらいやってると、開発スキル・スピードも自分で実感できるくらいに上がってきました。

そんな今までの開発で培ったノウハウなどを開発チームの生産性向上などに還元できないかなあと沸々思っていました。 良さげな感じで言い換えると、少しでも育ててもらった恩返し的なことをしたかった感じですね。

今回huskyを用いて、微力かもだけど「育ててもらった恩返し」で開発チーム全体に働きかけることができたと思ってます。 これからも常に「ここ改善できないかな」と疑問を持つ姿勢を辞めないで、働きたいです。

参考

typicode.github.io

qiita.com

qiita.com

クラウドワークスに少しでも興味を持ったあなたへ

株式会社クラウドワークスでは規模拡大中につき、協力してくれる仲間を絶賛募集中です!!

▼カジュアル面談からお気軽にご応募ください!

crowdworks.co.jp

© 2016 CrowdWorks, Inc., All rights reserved.