blog.bouzuya.net

2018-05-04 bouzuya/fwt をつくった

bouzuya/fwt をつくった。

fwt はチームメンバーの顔写真を共有するための小さな Web アプリケーション。リモートワーク (テレワーク) におけるチームメンバーの状態を把握することをねらいとしている。いまはなき Sqwigglesneek の機能を削ったものと言えば、分かりやすいかもしれない。

実装としては Media Capture and Streams API を使って、リアルタイムに顔写真を撮影し、共有している。プログラミング言語に PureScript を、主なパッケージに purescript-hyper や purescript-halogen を使用している。 Node.js の上で動く。 Dockerfile もあり、 Heroku などへ容易にデプロイできる。 ソースコードは GitHub にリポジトリを公開している。

この blog での初出は 2018-04-12 。過去の記事は↓。

長いが、つくることになった経緯・背景について書く。

ぼくのチームは sneek を使っている。ぼくは sneek をリモートワークにおいて失われがちな「雑談」を取り戻すためのツール・サービスだと思っている。

単純に通話するツールの選択肢は山ほどある。 Skype / Hangouts / Appear.in などだ。会議のようなものなら、これらで十分だ。ただ「雑談」は意外と難しい。「隣の席の同僚にちょっと声をかける」ようなことへの障壁がリモートワークにはあると思っている。

↑のツールを常に通話状態にすることで代替はできる。ただ、どれもパソコンやネットワークの負荷がかかってしまうし、ガヤガヤとした雑音を聞かされる (気持ちの上での) 負荷もかかってしまう。

sneek などはそういった問題への解決策だ。定期的に撮影される写真を見ることで、ざっくりとした状態の把握はできる。ここに通話までは要らない。そして、相手への確認なく通話できるようになっているので、声をかけるように使える。つまり「雑談」を取り戻せるだろう。

……と、ここまで書いておいてあれだが、費用の問題もあってぼくはこの機能を使っていない。肝心な機能を使わなくてどうするんだという話ではあるが、ざっくりとした状態の把握でもわりと役に立つし、メンバーの顔を見ているとひとりで作業している「孤独感」もやわらぐ気がする。

ただ sneek を使っていて気になる点はいくつかある。まず時間の表示がおかしい。撮影時刻ではなく現在時刻が表示される。それに関連して、いつのまにか未接続の状態になっていてもエラーが何も表示されない。送信できなくなっており、相手には届いていなくても分からない。

使っている機能の少なさや不満のある挙動を受けて「自分でつくろう」という発想に至る。 2018-04 からはじめた『 Haskell or PureScript or Rust で毎日 1 コミット』という取り組みもあるので、 PureScript で書いてみようという結論に至る。

経緯はここまで。

多くの課題がある。

  • 通話機能がない
  • SSR がない
  • HMR がない
  • halogen の component が分割されていない
  • データが永続化されていない
  • ユーザーの設定が環境変数でしかできない
  • ユーザーのパスワードを変更できない (管理者に分かってしまう)
  • ビデオの品質を設定できない
  • 途中で切断した場合などのエラー処理がない
  • パスワードを保持して何度も送信している
  • 時刻が UTC で表示される

どこまで対応するかは分からない。どちらかと言えば次の何かをつくっていきたい。もし、きちんと使うことになったら、それに合わせて優先度の高いものに対応していきたい。

今回の収穫は、クソコードで小さくても PureScript で動く何かを書けたこと。上記の課題に対応しつつ、次の何かを考えていくつもりだ。