自身のブログでも書いていますが、作ったきっかけは(すでに活動終了した)とあるVTuberのニンテンドーダイレクトのアーカイブ同時視聴での一言「マイナスからスタートできるタイマーがあったらなー」でした。確かにみんな頑張って言葉でカウントダウンしてたし、動画の再生ボタンとタイマーの再生ボタンをできるだけラグを少なくなるように押してるんだろうな…なんて状況が想像できたのでタイマー自身がカウントダウンするという発想は面白いかもしれないと思ってました。
タイマーを作るだけなら僕でも練習がてら作れるな…という軽い気持ちもありましたが、当時はもう一つモチベーションがありました。それは関数型言語であるElmにハマっていたことで、タイマーというシンプルだけどブレてほしくない仕組みを実装するのは良いお題になるかも、Elmで実装してみることにしました。
本当はタイマーというよりストップウォッチだと思ってsimple-stopwatchなんて名前にしてた(今でもこれは「タイマー」なのか…?と疑問に感じる)んですけど、視聴者と同期(Sync)するタイマーということでSyncTimerにしてみました。ネーミングセンスが悪いのは仕方ない。
一つは上記にもある通り「Elmでロジックを完結させること」。
タイマーが長時間動作中に実行時エラーで止まってるとか考えたくないので、タイマーの動作に関わるロジックはElmで完結するようにしています。
一方で、どうしてもElmで完結しない部分もあり部分的にJSのコードも使っていますが、初期値をクエリパラメータから取る、クエリパラメータに現在の設定を反映させる、アナリティクスのリクエストを送信するなど、タイマーの動作に直接は影響しないように切り分けられています。
もう一つはUNIX哲学のようにできるだけシンプルな機能に抑えて、それ単体で動作するサービスではないことを念頭に組み込みやすくすること。
もちろん機能不足だとかコレジャナイ感を抱く方も多いと思いますが、別のサービスを使えばいいだけの話なので色々なニーズに迎合するという考えより自分から機能を考えてシンプルに作るのが大事じゃないかな、と考えています。
最後に「ミリ秒を表示しないこと」。
内部的には当然ミリ秒のデータで管理されているのですが、意図的にミリ秒を出さないようにしています。理由は単純で「実際には見えなくても困らないと思うから」です。そんなに正確な秒数が同時視聴にシビアに影響するんでしょうか?
「10分の1秒の値くらいなら出してもいいんじゃない?」とか思う人もいるかも知れませんが、秒の表示だけで人間の感覚的には十分同期できるのではないかと思います。
ミリ秒に関しては自身のブログで別の理由も提示しています。それは「カウントダウンのときに困るから」。
カウントダウンをするとき、5,4,3,2,1,0とカウントダウンをするときに小数点以下があるとややこしいことになります。残り1秒を切ったタイミングで表示されるのが「-0.354」とか表示されちゃって、まだ0ってカウントダウンしてないのに0という表示が目に飛び込んでしまい混乱しませんか。
「1」とカウントダウンを声に出したときに表示上もちょうど「1」になるのが直感的に正しいと思い、実際には -0.354秒であってもfloorを取って -1 秒として表示するのが一番シンプルだと考えることにしました。
自身のプロダクトがどんな使われ方をするのか想像して設計するのは大事ですが、こういった自分なりのポリシーでツールとしてのアイデアを提示するというのも大事だと思います。合う合わないはあると思いますが、それが死活問題でない限りは個人開発のプロダクトは開発者の独りよがりに近いものであっていいと思います。
コメントはまだありません
読み込み中...