visible true

技術的なメモを書く

gradle-tab-completion.bashをMacに導入する際に必要な修正と、初回実行時の留意点

Android開発を爆速にする10のコマンドラインスクリプト - クックパッド開発者ブログ

われらが@tomorrowkeyが書いてくれた↑で紹介されている、Gradleのタスクをcompletionしてくれるgradle-tab-completion.bashなんですが2014-12/21現在でMac(10.9.5 Mavericks)に導入するにあたってちょっと修正が必要なのでその点について書きます。あと初回実行時に留意するべきポイントがあるので解説します。

Macに導入する場合に必要な修正

gradle-tab-completion.bashは以下のgistで公開されてます。

Gradle tab completion for Bash. Works on both Mac and Linux.

導入方法とかは↑に書いてあるので省きます。現在公開されているgradle-tab-completion.bashには誤りがあってMacでは正常に動きません。すでにgistに誤りについてのコメントがあるのでいずれ直ってるかもしれません。

必要な修正は21行目です。余計なスペースがあるんですね。

before

21:   if [[ -x `which md5 2 > /dev/null` ]]; then # mac

after

21:   if [[ -x `which md5 2> /dev/null` ]]; then # mac

この修正をすれば正常にMacで動作します。

初回実行時の留意点

gradle-tab-completion.bashの中身を読んでみると、33行目で一度gradleのtasksを実行してそれらをgrepしつつawkなどをかまして対象のbuild.gradleのタスク一覧を取り出しています。

33: commands=$($gradle_cmd --no-color --quiet tasks | grep ' - ' | awk '{print $1}' | tr '\n' ' ')

その後この一覧をキャッシュして使いまわします。その為初回のcompletionは./gradlew tasksの実行が完了するまで待たされます。 プロジェクトによっては./gradlew tasksがすごく時間がかかったりする場合もあるのでcompletionがフリーズした印象を受けたりします。というか僕はそれではまりました(./gradlew tasksが1分かかった。待ちきれず中断しまくった)。

また、build.gradleのmd5ハッシュ値を見て更新されたかどうかを判定しているので、build.gradleを更新したあとの最初のcompletionも時間がかかると思います。

初回、更新後は気長に待ちましょう。

まとめ

gradle-tab-completion.bashベンリサイコー

f:id:sys1yagi:20141221184805p:plain