
こんにちは、現役沖縄フリーランスエンジニアのmah(MaLanka)です。
このブログでは、
僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、
ノウハウなどを書いていきます。
今回は、
- 【Dip Rubocop】DipでRubocopのチェック対象をgit diffで変更のあったファイルのみを対象とする
について書いていきます。
【Dip Rubocop】DipでRubocopのチェック対象を変更のあったファイルのみに絞る
Dipを入れたDocker環境でRubobopを実行していたが、
いちいちファイル指定しないと全ファイルにRubocopが走って面倒だったので、
git diffで変更のあったファイルのみが対象になるようにしました。
結論
Dipを使える状態で下記のようなdip.ymlを作成し、
$ dip cop を実行すると、
DipでRubocopのチェック対象をgit diffで変更のあったファイルのみを対象にできます。
# dip.yml
version: '7.0'
environment:
COMPOSE_EXT: development
compose:
files:
- docker-compose.yml
project_name: example_server
interaction:
cop:
description: Run rubocop
service: web
default_args: $( git diff --name-only --diff-filter=AMRC | grep -e ".*\.rb" | paste -s - )
command: bundle exec rubocop
- dip
手順
まず、
DipでRubocopを実行できるようにするため、
dip.yml のinteraction以下に cop という定義を追加します。
# dip.yml
version: '7.0'
environment:
COMPOSE_EXT: development
compose:
files:
- docker-compose.yml
project_name: example_project
interaction:
cop:
description: Run rubocop
service: web
default_args: $( git diff --name-only --diff-filter=AMRC | grep -e ".*\.rb" | paste -s - )
command: bundle exec rubocop
このinteraction以下に定義した名前が、
dipコマンドの引数として使えます。
(自分が使いやすい名前であれば名前はなんでもいいです)
これでdipコマンドの引数として cop が使え、
command で指定されたコマンドを実行するようになります。
$ dip cop
そしてcopの引数(bundle exec rubocopの引数)には、
default_args で指定されたものが使用されます。
default_args: $( git diff --name-only --diff-filter=AMRC | grep -e ".*\.rb" | paste -s - )
「git diffで変更のあったファイルのみを対象とする」について、
default_args に指定されている --name-only --diff-filter=AMRC で実現しています。
git diffの --name-only オプションについては下記ドキュメントを参照ください。
- git-diff - Show changes between commits, commit and working tree, etc
dip copの後に引数を渡したい場合
dip copの後に引数を渡したい場合は、
普通に $ dip cop の後にrubocopの引数を渡せばOKです。
(この場合 default_args で指定されている引数は無視されるので注意)
# 例. auto correctする $ dip cop -a # 例. 差分のみを対象にauto correctする $ dip cop -a $( git diff --name-only --diff-filter=AMRC | grep -e ".*\.rb" | paste -s - )