ここ2~3年Android開発から離れていましたが、最近Androidエンジニアとして復帰を果たした @tomorrowkey です。
開発を楽にするために日頃からいくつかの工夫をしており、以前Cookpadに在籍していたときに Android開発を爆速にする10のコマンドラインスクリプト という記事を書きました。
今回Androidエンジニアとして復帰するにあたって、Androidアプリの開発をするためにそういったツールを準備をしているうちに、いつのまにか新しいスクリプトを書き始めていました。まるでラーメンを作るために畑から作っている人たちみたいですね。
コードレビュー時によくあるシーン
おいしい健康ではGitHubをリポジトリとして使っており、PRを作ってマージするためには、他のエンジニアにレビューしてもらう必要があります。 モバイルアプリだとよくあると思うのですが、このときに動きが分かるものが説明に貼られていると、レビュアーにも親切です。
これはiOS版おいしい健康に対するPRに貼られたGIFファイルです*1。GitHubに添付できるファイルの種類の中で、アニメーションできるのは、GIFだけです*2。なので、iOSの場合、シミュレータであれば、画面をそのままキャプチャしたり、フィジカルデバイスの場合は QuickTime でミラーリングしたものをキャプチャしたりしていました。
Androidの場合
Androidの場合にはどういった方法でキャプチャすることが可能でしょうか。
少し前でしたら AndroidTool というものがあり、なかなか手軽でおすすめしていましたが、最近息をしている様子がありません。
ApowerMirror や Vysor などを使えばキャプチャできそうですが、一部有償なわりに私がそこまで使いこなすイメージも沸かなかった。デバイス側にアプリのインストールが必要などの理由で、断念しました*3。
そもそもAndroidには録画機能がある
そもそもなんですが、Androidには画面を録画するためのコマンドラインが用意されています。
Android Debug Bridge | Android Developers
このコマンドラインを使えば録画することができます。 ですが、本来の目的である「コードレビュー時にGIFファイルを貼りたい」を達成するためには、2つの不満点があります。
前置きはだいぶ長くなりましたが、この不満点をスクリプトを書くことで解決しました。
android-screen-record
本来の目的である、「コードレビュー時にGIFファイルを貼りたい」という欲望を満たすために、android-screen-record
というコマンドラインツールを書きました。
やっていることといえば、adb shell screenrecord
を実行して、動画ファイルを抜き出して、ffmpeg
でGIFファイルに変換していることくらいです。
いくつか工夫したことはありますが、詳しくはコードを読んでみてください。稚拙なコードなので、きれいに書く方法をご存知であればPRお待ちしております!🤗
使い方
ただ単にコマンドを実行すれば録画が始まります。今のところオプションはありません。
$ android-screen-record
ctrl + c
でインタラプトすると録画を終了します。自動的にGIFファイルに変換してデスクトップにコピーされますので、あとはGitHubにペタペタ貼るだけです。動画ファイルもそのまま残しているので、単に録画だけしたいケースでも使うことができます。
インストール方法
homebrew
をお使いであれば2つのコマンドだけでインストール可能です。
$ brew tap tomorrowkey/self $ brew install tomorrowkey/self/android-screen-record
残る問題点
ffmpeg
のオプションをあまり知らないからか、GIFアニメーションがなかなか大きいファイルサイズになってしまいます。本来の目的から考えると多少フレームが落ちたり、画質が悪いのは受け入れられるので、質を落としてファイルサイズを減らせるような工夫ができるといいなあと思っています。
おわりに
今回はAndroidエンジニアとして復帰するにあたり作ったツールをご紹介しました。 おいしい健康では、Androidだけではなくサーバサイドやサービス開発など、バリエーションに富んだ開発に興味があるエンジニアを募集しております*4。 もし興味があればWantedlyよりご応募ください!
*1:GIFアニメーションを表示しているシーンをGIFアニメーションとして表示するのはなかなかシュールですね
*2:File attachments on issues and pull requests - GitHub Help https://help.github.com/en/articles/file-attachments-on-issues-and-pull-requests