複数のAndroid端末を同時につないで困ってませんか?それadb-pecoで選択できるよ!

モバイルファースト室の@tomorrowkey です。

adb-pecoというスクリプトを作ったので紹介します。 https://github.com/tomorrowkey/adb-peco

不親切なadbの挙動

CookpadではAndroidアプリの開発にGenymotionを使っています。 普段はGenymotionだけを立ち上げて開発しているのですが、時折不具合報告を受けてAndroidデバイスを接続することがあります。 ひとまずlogcatを見ようとしたり、shellを起動してディレクトリ構造を見たりするのですが、こういうエラーが発生します。

f:id:tomorrowkey:20140909173125g:plain

Genymotionとデバイスの2つが接続されているので、adbがどちらに接続するのか分からずエラーを返します。 このエラーを見る度にデバイスIDをコピーしてオプションに追加しなければなりません。

$ adb devices
List of devices attached 
xxxxxxxxxxxxxxxx    device
192.168.0.0:5555    device

$ adb -s xxxxxxxxxxxxxxxx shell

すごく面倒です。

peco を利用した解決法

最近 peco というツールが流行っているので、これを使ってadbを使いやすくできないかと考えました。 そして完成したのがadb-peco です。
adb-pecoはadbの代わりにadbpを使います。 デバイスが2台以上接続された状態で先ほどと同じコマンドを実行するとpecoを使いデバイスを選択することができます。

f:id:tomorrowkey:20140909173158g:plain

コマンドを実行した後に選択するだけなので、すごく楽になりました。
もちろんデバイスが1つだけの時には選択する画面は表示されないので、普段から使うコマンドをadbからadbpに置き換えることができます。

JakeWhartonが作ったlogcatを見やすくするツールの pidcat でも、同じくデバイスを選択できるようにpidcatp というコマンドも作りました。

コマンドを置き換える

adbpadbと比べるとタイピングしやすくはありません。 両手で打たなければならないし、1日に何度も打つコマンドなので一文字多く打つコストはバカにできません。

そこでadbコマンドを置き換えるテクニックを紹介します。
といってもただのaliasを設定するだけですが、新しいコマンドを覚えなくてもいいのでとても便利です。

コマンドシェルにbashを使っている場合は~/.bashrcに以下を書き足します。

alias adb='adbp'
alias pidcat='pidcatp'

他のコマンドでadb-pecoを使いたい場合

他のコマンドでadb-pecoを使いたい場合もaliasを使うことで解決できます。

たとえばfacebookが開発している fb-adb でadb-pecoを使いたときには以下のように.bashrcに書きます。

alias fb-adb='adb_peco.sh fb-adb'

adb-pecoの本体はadb_peco.shというスクリプトなので、それに引数としてコマンドを渡せば使えるようになります。

まとめ

日々ちょっとずつストレスがたまることを自動化やスクリプトで簡単にすることで、開発がすごく楽になっていくと思います!ぜひadb-pecoを使ってください!

/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/