OOZOU
お問い合わせ
TIL一覧に戻る
ruby

コミット前にrubocopを実行する

2020年10月13日

はじめに

GitフックはGitリポジトリでのタスク自動化やコーディング規約の徹底に非常に強力です。よくあるユースケースのひとつが、コミットを許可する前に自動テストやコード解析ツールを実行することです。この記事では、pre-commitフックの概要、スキップする方法、そしてRubyのコード解析ツールであるRubocopを実行するpre-commitフックの設定方法を紹介します。

Rubocopとは?

Rubocopは、コードのスタイルやセキュリティの問題をチェックするRuby向けの静的コード解析ツールです。コードがRubyスタイルガイドとベストプラクティスに従っていることを保証するために、Ruby開発者の間で広く使われています。Rubocopは手動でも実行できますが、pre-commitフックと統合すれば、コミットのたびに自動でコードがチェックされます。

以下を .git/hooks/pre-commit にコピーしてください(.sample を外します)

#!/usr/bin/env ruby

require 'english'
require 'rubocop'

ADDED_OR_MODIFIED = /A|AM|^M/.freeze

changed_files = `git status --porcelain`.split(/\n/).
    select { |file_name_with_status|
      file_name_with_status =~ ADDED_OR_MODIFIED
    }.
    map { |file_name_with_status|
      file_name_with_status.split(' ')[1]
    }.
    select { |file_name|
      File.extname(file_name) == '.rb'
    }.join(' ')

system("rubocop #{changed_files}") unless changed_files.empty?

exit $CHILD_STATUS.exitstatus

実行権限を付与します

$ chmod +x .git/hooks/pre-commit

これで準備完了です。以降は変更内容に対してrubocopが実行され、違反を修正しない限りコミットできなくなります。

pre-commitをスキップするには? git commit に -n を渡すだけです

$ git commit -n -m "[hotfix] blah blah"

pre-commitフックとは?

pre-commitフックは、コミットが作成される前に実行されるクライアントサイドのGitフックです。自動テストの実行、コードスタイルのチェック、コーディング規約の強制など、さまざまなことができるスクリプトです。pre-commitフックが失敗するとコミットは中断され、問題を修正してから再度コミットする必要があります。

コミット前にRubocopを実行する理由

コミット前にRubocopを実行することには、いくつかの利点があります。

  • コード品質:Rubocopはスタイルやセキュリティの問題をチェックするため、コードベースの一貫性と安全性が保たれます。
  • 時間の節約:コミット前にRubocopを自動実行することで問題を早期に発見でき、後でデバッグに時間を浪費せずに済みます。
  • コラボレーション:pre-commitフックでコーディング規約を強制することで、チームメンバー間の協力と一貫性が促進されます。

pre-commitフックの設定方法

  1. Rubocopと、好みのpre-commitフックツール(HuskyやPre-commitなど)をインストールします。
  2. .git/hooks ディレクトリに pre-commit という名前の新しいファイルを作成します。
  3. pre-commitファイルにRubocopのコマンドを追加します(例:rubocop -a)。
  4. chmod +x .git/hooks/pre-commit を実行して、pre-commitファイルに実行権限を付与します。
  5. git commit -m “Test commit” を実行して、pre-commitフックをテストします

注意:pre-commitフックを一時的にスキップしたい場合は、git commit コマンドで --no-verify オプションを使えます。例:git commit -m “Test commit” --no-verify

「ruby」の関連記事

ruby2021年4月30日

先頭ドット記法を使った複数行の Ruby ブロックを Pry に貼り付けられるようにする

最近は先頭ドット記法をよく使います。例:

ruby2020年10月14日

式展開なしの Heredoc

Ruby の Heredoc を式展開('#{....}')なしで使いたいことがあります。キーワードの前後にシングルダッシュを追加することで実現できます:

ruby2020年10月13日

Ruby で中間階層のハッシュテーブルを自動生成する

すべての中間階層のハッシュテーブルが自動的に作成されます

プロジェクトをお考えですか?

あなたが構築しているものについてお聞かせください。

会話を始めるhello@oozou.com
OOZOU Logo

バンコク · シンガポール · 香港

X
Facebook
Instagram
LinkedIn

サービス

  • Web開発
  • AIエージェント & 生成AI
  • モバイルアプリ開発
  • データ分析 & エンジニアリング
  • UI/UX & プロダクトデザイン
  • デジタルトランスフォーメーション

会社情報

  • 会社概要
  • 採用情報
  • ブログ
  • 事例研究
  • Today I Learned
  • お問い合わせ

その他

  • 業界
  • パートナーネットワーク
© 2026 OOZOU. 無断転載を禁じます。
プライバシーポリシー行動規範ABACポリシー