hooksをovercommitで管理して作業効率の底上げを狙う業務改善モバイルアプリエンジニアの山下です。チームで開発を進める上でちょっとした"決まりごと"が存在すると思います。LCLの開発チームには以下の"決まりごと"が存在します。コミットメッセージの先頭にはYouTrackのIssue番号を付けるRuboCopで設定したコーディングスタイルになるべく従うmasterへ直接PUSHはしないこれらを全員が心がけることで運用効率や品質を保つようにしていまが、とはいえコミットする度にIssue番号を入力したり、RuboCopのコマンドを打ったりするのは非常に面倒です。hooks」を利用してコミットやプッシュのタイミングで自動的に実行されるようにしました。hooksとはコミットやプッシュなどのgit操作をトリガーにしてスクリプトを実行する機能です。.gitディレクトリ内にhooksという名前のディレクトリで管理されています。コミット時にコミットメッセージに対して何かしらの処理を行うということができます。これを利用することで手動で行っていた些細なことは自動化することができます。hooksは残念なことにgitで管理できません。別途、生成スクリプトを用意するなどの策はあります)これではメンバー全員に設定してもらう必要がありますが、現実はそう浸透しません。それを解決するためにovercommitを導入しました。hooksの管理・拡張をサポートするGemです。.overcommit.ymlで実行するコマンドやスクリプトを管理します。hooksを使いまわすことも可能です。いくつかの設定が用意されています。導入Gitの操作と密に関係するため直接インストールします。hooksを利用している場合は、ファイルをバックアップしておきましょう。overcommitをインストールする際に初期化される可能性があります。--installそれでは、さっそくコミットしてみましょう。以下の警告で失敗すると思います。repository.overcommitは、fetchしたymlやスクリプトが不正に書き換えられた場合に備えて、これらの差分が存在した際には署名コマンドを打つ必要があります。面倒ですが、安全面との引き換えには仕方がないです。--sign上記のコマンドを実行後に再度コミットをしてみましょう。コミットメッセージのチェックに引っかからなければ、無事にコミットできると思います。前述の通り、デフォルト設定が存在し有効になっています。以下のコマンドで確認できます。--list以下のアスタリスク(*)が付いている項目がデフォルトで設定されている項目です。https://github.com/brigade/overcommit#built-in-hooks私の環境ではGitのユーザ名の制約を行う「AuthorName」で引っかかってしまい、コミットができませんでした。ユーザ名は変えたくないので設定を無効化したいと思います。.overcommit.ymlに以下の設定を追加します。false変更後は設定を反映させます。--signこれで無事にコミットできるようになりました。RuboCopの実行RuboCopには自動修正機能が存在します。これを実行するにはコマンドを打つ必要がありますが、今回はコミット時に毎回自動で実行するようにします。実行したいコマンドは以下です。差分だけを対象にしています。--name-only)overcommitはRuboCopを含む、様々なLintツールに対応しています。(インストールは別途必要です)今回は対象ファイルの引数が必要なため、以下のようにcommandの項目を追加します。--name-only)']変更後は設定を反映させます。--signこれでコミットする際に差分に対して自動でRuboCopの自動修正が実行されます。Issue番号を先頭に記述するようにしています。YouTrackのIssue番号は以下のような構成になっています。hooksで管理していました。使いまわしたいと思います。プロジェクトルート直下のbinディレクトリでhooksフォルダを作成し、更にcommit-msgファイルを作成します。これからは独自のhookはhooksフォルダ内に追加していきます。独自のhookを実行させるためには、実行権限を付与する必要があります。./bin/hooks/commit-msgcommit-msgに今回の処理内容をを記載します。commit_msg)そして、overcommit.ymlに設定を追加します。'./bin/hooks/commit-msg'設定を反映させます。今回はカスタムスクリプトなのでファイルを指定して署名する必要があります。commit-msg以上で、コミットするとコミットメッセージの先頭にブランチ名が追加されると思います。ブランチ名をIssue番号にすれば要件を満たすことができます。masterへ直接PUSHできないようにする先ほど作成したhooksディレクトリにpre-pushファイルを追加し、実行権限を付与します。./bin/hooks/pre-pushここではPUSH先がmasterを向いている場合、エラーメッセージを流すようにします。"masterへPUSHしないでください。fidoneovercommit.ymlに設定を追加します。'./bin/hooks/pre-push'設定を反映させます。commit-msgmasterへPUSHするとエラーメッセージが表示されれば成功です。終わりにGitの操作は頻繁に行うので、同じことはなるべく自動化すると塵も積もって大きな時間短縮になると思います。自分だけで留めるのではなくチームを巻き込んで効率化することで効果は更に大きくなります。今後は、画像圧縮や特定のファイルのコミット制限などの機能も追加していきたいと考えています。ルーチンがある方は導入してみてはいかがでしょうか。Fargateを使ってブランチ毎にQA環境を自動生成した話こんにちは。バス比較なびのバスツアー検索...2019-01-10Node.jsを10.13.0へバージョンアップしましたフロントエンドエンジニアの岡田です。いう時に確認することフロントエンドエンジニアの岡田です。LCLのフロントエンドで...2018-07-05地味に面倒なブランチ作成〜WIPプルリクエストまでをコマンド1つで行うフロントエンドエンジニアの岡田です。やる気がでない時の最良...2018-04-27トリプルディスプレイで画面の切り替えをなくした話モバイルアプリエンジニアの山下です。1検索はてなブログをはじめよう!lcl-engineerさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。