おいしい健康 開発者ブログ

株式会社おいしい健康で働くエンジニア・デザイナーが社内の様子をお伝えします。

Androidで動画をサクッと撮るコマンドラインツール作った

ここ2~3年Android開発から離れていましたが、最近Androidエンジニアとして復帰を果たした @tomorrowkey です。

開発を楽にするために日頃からいくつかの工夫をしており、以前Cookpadに在籍していたときに Android開発を爆速にする10のコマンドラインスクリプト という記事を書きました。

今回Androidエンジニアとして復帰するにあたって、Androidアプリの開発をするためにそういったツールを準備をしているうちに、いつのまにか新しいスクリプトを書き始めていました。まるでラーメンを作るために畑から作っている人たちみたいですね。

コードレビュー時によくあるシーン

おいしい健康ではGitHubリポジトリとして使っており、PRを作ってマージするためには、他のエンジニアにレビューしてもらう必要があります。 モバイルアプリだとよくあると思うのですが、このときに動きが分かるものが説明に貼られていると、レビュアーにも親切です。

PRに貼られたGIFアニメーション

これはiOS版おいしい健康に対するPRに貼られたGIFファイルです*1GitHubに添付できるファイルの種類の中で、アニメーションできるのは、GIFだけです*2。なので、iOSの場合、シミュレータであれば、画面をそのままキャプチャしたり、フィジカルデバイスの場合は QuickTimeミラーリングしたものをキャプチャしたりしていました。

Androidの場合

Androidの場合にはどういった方法でキャプチャすることが可能でしょうか。

少し前でしたら AndroidTool というものがあり、なかなか手軽でおすすめしていましたが、最近息をしている様子がありません。

ApowerMirrorVysor などを使えばキャプチャできそうですが、一部有償なわりに私がそこまで使いこなすイメージも沸かなかった。デバイス側にアプリのインストールが必要などの理由で、断念しました*3

そもそもAndroidには録画機能がある

そもそもなんですが、Androidには画面を録画するためのコマンドラインが用意されています。

Android Debug Bridge  |  Android Developers

このコマンドラインを使えば録画することができます。 ですが、本来の目的である「コードレビュー時にGIFファイルを貼りたい」を達成するためには、2つの不満点があります。

  • 動画ファイルはデバイス側に保存される
  • 動画のままではGitHubに貼り付けられない

前置きはだいぶ長くなりましたが、この不満点をスクリプトを書くことで解決しました。

android-screen-record

本来の目的である、「コードレビュー時にGIFファイルを貼りたい」という欲望を満たすために、android-screen-record というコマンドラインツールを書きました。

github.com

やっていることといえば、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

*3:さんざんお世話になったadakodaさんの ASM ももう息をしてなかった…

*4:もちろんAndroidに特化した人も募集中です