メソッド屋のブログ

米マイクロソフト Software Development Engineer 牛尾の日記です。ソフトウェア開発の上手なやり方を追求するのがライフワーク。本ブログは、個人の意見であり、所属会社とは関係がありません。

リモートワークのデモで壮大に失敗した話とその改善方法 - スクリーンシェアするすべての人に送る失敗談と対策

新しい職場で初めてのデモの機会がありました。多くの人が参加して、自分がやってきた仕事をデモして、知ってもらし、皆さんからフィードバックを受るのが目的です。新しい職場だし、俺元エバンジェリストやし、何千回とデモしたかわからんぐらいの経験があるので、ここは一発かまさなきませんな。そして、結果は!

f:id:simplearchitect:20200513113334p:plain

壮絶なる失敗

私の初めてのプレゼンとデモは完全に失敗した。何せ最初の一番簡単な Hello World 的なものが動かない。もちろん過去に同じことを何回もリモートでやったけど、動かなかったことなどない。私はリモートワークのツールとして、Teams を使っている。 

本番は、Teams+スクリーンシェア+紹介するクライアントアプリみたいな感じで、クライアントアプリはまぁまぁ負荷高いけどそこまででもない。ちなみに、過去に何回か少人数で同じ構成でデモしているけど、完全に上手くいっている。今回はさらにみっちり準備までしているのに、、、こけた。CPU張り付いて帰ってこない。

f:id:simplearchitect:20200513114040p:plain

プレゼンテーションのページ送りですら動きが緩慢とかいうレベルで、シェアしたかったことの3分の1もシェアすることができなかった。最初の デモで、「こういうものですよー」というのを知ってもらって、そこから説明を展開する予定だった。それがデモできへんと何も説明できないんじゃー!そのあとで、オフラインでビデオを取り直して、フィードバックがあった Getting Started のドキュメントも書いてシェアしたが、さすがにあまり見てもらえない。そらそうだ。

上司が、「失敗なんて思わなくていい。私たちはいつも未知のことをやってるのだから、こういうことは起こるんだ。だから気にせんでいいよ」と言ってくれてええ人やなと思ったけど、わし元エバンジェリストやで、、、orz

f:id:simplearchitect:20200513113623p:plain

これぐらいみじめな失敗は、エバンジェリストの時のデブサミでの失敗以来か、、、あの時は会場のネットワークがガチで遅くて、クラウドベースのツールのデモなのに、ホームページを開こうとしても、ネットワークが通信できず、はっきりいってデモ不可能だった。あの時は有線一択だったんだろうな、、、と学びを得て、その後はその手の失敗は無いかった。ビデオも常に録画するようにしていたので、その後は一切無かった。今回は社内のデモなのでビデオを準備まではしていなかった。やっぱこんな時でもビデオ重要だよ、、、

f:id:simplearchitect:20200513115635p:plain
写真は失敗した時のものではなく上手くいったときのもの

さて、この超絶みじめな失敗をシェアしてもしかたがないので、その後学んで改善した内容をシェアしたい。皆さんが私みたいにリモートワークのデモで壮大にこけませんように。私は Teams の事例を紹介していますが、ビデオ通話をするアプリではどれでも似たようなことが起こりうるので、何らかの参考になればとシェアしてみました。

課題の整理

さて、この大失敗だが、私は Surface Book2 を使っている。相当にパワフルなマシンだ。プログラマやし、速いマシン好きなので、相当早いはず。それが、Teams で沢山の人が参加した会議で、自分がスクリーンシェアリングを使って、自分の PC の画面を共有して、ローカルのアプリを動かそうとすると、完全に動かない。

パフォーマンスモニタというツールがあって原因を分析してみた。CPUがパツパツになってる。具体的にどのソフトが影響しているかというと、今回は Teams の負荷がデカかった。メモリもごっつい使っている。マシンは強力のはずなので、明らかに「設定の問題」が大きいだろう。

パフォーマンスモニタを使ってない人がいたら、Windows マシンを使っている人なら、Ctrl + Alt + Del キーを同時に押してください。すると、Task Manager というのが選択できますのでクリック。すると、今どんなアプリがコンピューターのCPUやメモリを大量に使っているのかがわかるので、何が影響しているのかを分析することができます。ちなみに下記のスクリーンショットは当時のものではありません。

f:id:simplearchitect:20200513102719p:plain

この時の分析では、Teams というリモートワークで使うツールがCPUをたくさん使用していたので、そこをまず何とかしようと思います。

Teams の改善

インターネットでサーチすると、自分の問題にマッチするブログを見つけました。実際にこれを試すと、Teams が相当軽快になりました!どのようにサーチをするといいかというと、私の例だとこれで下記のブログが一発ヒット

Teams how to reduce the cpu consumption while doing screen sharing

日本語だと こんな感じでサーチするかもしれません。残念ながらいいのは見当たりませんでしたが、そんな雰囲気で検索するというのを覚えていてください。

Teams スクリーンシェア 遅い

www.itexperience.net

具体的には3つのことをしました。

  • GPU のハードウェアアクセラレータを Offにする
  • キャッシュをクリアする
  • Teams を一旦終わらせて再起動する

これだけです。最初の、GPUのハードウェアアクセラレータをOffにするというのは専門用語が入っていてややこしいと思いますが、これはコンピュータが画面の処理を高速に扱うためのハードウェアが搭載されているマシンがあるのですが、その機能を使う設定です。なんでかわからないですが、Offにするほうが良いとのことです。

GPU のハードウェアアクセラレータを Offにする

実際のやり方は次の通りです。右上にある自分の顔のところをクリックすると、Setting (日本語だと多分「設定」)というのが出てくるのでここをクリックします。

f:id:simplearchitect:20200513103750p:plain

そして、この設定をオフにします。(画面ではオンになっています。)

f:id:simplearchitect:20200513103931p:plain

これに関しては将来改善される可能性が高いですし、私も一旦設定してからオフにしましたけど、そこまで最悪ではないので、将来設定を見直してみるとよいかもしれません。

キャッシュをクリアする

次にキャッシュをクリアするです。私の場合これが効いてそうです。キャッシュというのは、皆さんが使うアプリケーションを起動すると、最初の1回目はゆっくりだけど、2回目の起動が早くなったりしませんか?

 アプリケーションは大抵最初にデータをダウンロードしたり読み込んだときに、同じデータが必要になった時のために、データをどこかに保存しています。次にそれが必要になった時に、新たにダウンロードする必要がなくなるので、動作が早くなります。

 私はもうTeamsを長年使っています。そういう人だと、そういうファイルがたまりすぎて、逆に動きが遅くなることがあります。そういう時には一旦保存されたファイルを削除すると動きが早くなります。

エクスプローラを起動して、私の場合のユーザ名が ushioだとすると、C:\Users\ushio\AppData\Roaming\Microsoft\Teams のディレクトリに移動します。 f:id:simplearchitect:20200513105228p:plain

皆さんの場合だと、ushioのところを皆さんがログインするときに使っている名前に置き換えてください。その後最初に紹介したブログにかかれているとおり下記の内容を実施します。

  1. temp フォルダのすべてのファイルを削除する
  2. Blob_storage フォルダのすべてのファイルを削除する
  3. Cache フォルダのすべてのファイルを削除する
  4. IndexedDB フォルダのすべての.db ファイルを削除する
  5. GPUCache フォルダのすべてのファイルを削除する
  6. databases フォルダのすべてのファイルを削除する
  7. Local Storage フォルダのすべてのファイルを削除する。
  8. Application Cache の下の Cache フォルダのすべてのファイルを削除する

ちなみに、Mac だとここらしいです。~/Library/Application Support/Microsoft/Teams

Teams をリスタートする

Teams を一旦終了させて、再起動します。Teamsのウィンドウの×印を押してもダメです。赤丸で囲った箇所をしたからクリックするとTeams のアイコンが見えるので、右クリックしましょう。 f:id:simplearchitect:20200513105439p:plain

多分日本語だと、終了というボタンがあるので、それをクリックするとちゃんと終わります。

f:id:simplearchitect:20200513105548p:plain

その後ここに、teams を打ち込めばアプリのアイコンがでてくるのでクリックすると再起動します。

f:id:simplearchitect:20200513105707p:plain

その結果

今までスクリーンシェアをしていた時には常に1位だった、Microsoft Teams が、3位以下に落ちています。これは凄い改善!当日こけていたデモも楽々動作します。

f:id:simplearchitect:20200513105759p:plain

すばらしい!

その他の改善ポイント

自分のビデオをオフにする

ミーティングを開始した時点では自分の顔を動画で映すのは絶対的にお勧めですが、デモやプレゼンがはじまって、動作がもっさりしているなと感じたらまずは自分のビデオをオフにします。ビデオの情報転送量は相当なものなので、結構有効な手段です。

4K ディスプレイをシェアしない

私のマシンが強力だったこともあって、気にしていませんでしたが、コロナでずっと家にいると、自分の環境でスクリーンシェアをすることが多くなります。私の環境は、ディスプレイが2枚、真ん中にラップトップのディスプレイという構成になっています。 f:id:simplearchitect:20200513120457p:plain 左側が4Kのディスプレイで、右側がそうでないやつです。今までは4Kのディスプレイをスクリーンシェアで使っていましたが、4Kではない方をシェアするようにしてコンピュータの負荷を減らすことにしました。

ブラウザを閉じる

ご紹介している Task Manager を起動して観察していると、一番多くのコンピュータ資源を馬鹿食いするのは「ブラウザ」つまり、インターネットエクスプローラ、グーグルクロームファイアーフォックスといったWebブラウザです。Macだと、Safari です。普段から使っているととついついたくさんのタブをオープンしていますが、もっさりする多くの原因はこいつです。スクリーンシェアの時は、ブラウザを出来るだけ閉じましょう。

f:id:simplearchitect:20200513120622p:plain
あかんやつ
必要最低限のページのみをオープンするようにしましょう。

WSL2 のキャッシュをクリアする

このポイントはエンジニアの人限定になりますが、私の環境では、Windows Subsystem for Linux のバージョン2で、Docker のビルドなどをしていますが、これが超絶にメモリを食っていてびっくりしました。エンジニアでない方はまずインストールしてないと思うのでご安心ください。ここにある Vmmem というプロセスが凄いことになっていますが、これがVMを扱っているところで、この中で WSL2 が動作しています。

f:id:simplearchitect:20200513110428p:plain

ここの回避策がものすごーーーく効きました。ちなみにこのスクリーンショットはたまたまたですが、前のものとは比べ物にならないぐらい小さいメモリですみました。

github.com

具体的には、キャッシュをクリアするクーロンを設定して、15分おきに消すとただそれだけなのですが、これがゴリゴリに効きます!この問題が修正されるまでは、この回避策でいい気がします。このパートを読んでいるのは、エンジニアの皆さんなので、詳しくは、上記のリンクをご覧ください!

そうすると、めちゃくちゃ巨大やったメモリが、おとなしい子供のように変わりました。 f:id:simplearchitect:20200513111123p:plain

事前に動画をとっておく

これが最強の方法です。エバンジェリスト時代は常にしていました。それだけに、なぜ今回しなかったんだよ、、、と大反省です。つまりデモを事前にビデオで録画しておけばいいです。とっても簡単な方法があります。わたしは普段 PowerPoint を使っています。Insert(日本語だと多分挿入でしょうか)をクリックすると、Screen Recording というボタンがあるので、新しいページを作って、そのボタンをクリックします。

f:id:simplearchitect:20200513111916p:plain

すると、こんな画面がでてくるので、Select Area のボタンをクリックして、動画を撮りたい画面の範囲を指定して、Record を押すと、レコーディングがスタートして動画が作られます。

f:id:simplearchitect:20200513112046p:plain

デモを取り終えたら、こんな感じでページに張り付きます。何かあったら、動画に切り替えてみんなに動画を見てもらえばよいのでとても楽です。今はインターネットの時代なので、今日動いているものが明日動くとは限りません。たまたま障害が発生しているかもしれません。動画だと絶対に失敗しませんので、心の支えにもなりますので、絶対的に準備しておくのはお勧めです。しかも、動画に撮ることで説明がしやすくなりますし、他の人に後からシェアすることもできます。

f:id:simplearchitect:20200513112333p:plain

パワーポイントのオンラインシェアを使って、画面共有をやめる

他の技として、音声通話のみにして、スライドショーをWebサーバー経由にする方法があります。そうすると、圧倒的にデータ転送量が減るので、プレゼンだけならかなり強力かも。

f:id:simplearchitect:20200513121448p:plain

まとめ

リモートワークを生産性良くするためには、強力なマシンを買うことを絶対的にお勧めしますが、強力なマシンを持っていても、私のようにPCがいっぱいいっぱいになってしまうことが起こりえます。

そうならないためには、ご紹介したような方法で、「うまく設定する」ことで、劇的にパフォーマンスを改善することが可能になるかもしれません。また、動画をとるとか、違うディスプレィを使うとか、他のアプリがたくさんコンピュータのリソースを使ってるとかいろいろあります。

コンピュータの動作が重い時に立ち止まって、「なぜ重いのか」を分析して、Webで改善方法をさがしてみませんか?今回は Teams ですが、Zoom や他のものでも、基本的にすごく重たい処理をしていますので、十分に発生しうることで、同じように十分改善の余地を見つけることができると思います。

是非皆様は、私のようにコテコテな失敗をせず、快適なリモートワークをお過ごしください!