むかしむかし、とある会社で3日で作ったツールについて

むかしむかし、とある会社で3日で作ったツールについてのお話。

昔の社内勉強会用の発表資料が出てきたので、せっかくなので晒してみようと思います。(健全な男子が喜ぶ系のシステムの資料も出てきたのですが、これはまたの機会に・・・)
3年くらい前のもの(ソースみたら2009年でした)なので、そのあたりを考慮していただけると助かります。

なお、Web系の企業では動画とか全然だと思いますが、コンシューマ系の開発だと動画でやりとりできると便利ですよね。

さすがに資料をそのまま載せるわけにはいかないので、所々塗りつぶして、末尾にページを何枚か追加しました。
そういえば、CEDECである人が発表でちょこっと触れたみたいで、4gamerにもスライドが載っていたのですが、名前伏せられてるし(ツール名にプロジェクト名が入っていたので広報チェックでNGになったんだと思います)、モザイクかかってるしでちょっと悲しかった記憶を思い出しました。

(追記 2012/06/28 10:00)
・資料中のRAIDの説明がなんかおかしいです(RAID""二重化)。二重化+パリティのRAIDでNetAppだったらおそらくRAID4の事だと思いますが、詳細は私にはわかりません。
・資料の31ページが見れないという事でしたが、今見たら見れるようになってました。うーん・・?

ツールの概要を一言で言うと、ニコニコ動画のぱくりです。
プロトタイプを1日で、その後2日で作り直したものです。その後細かい修正はちょこちょこ入れてましたが、基本的には放置運用でした。(ごめんなさい・・)

本来の業務を放り出して、これのために3日みっちり作業しました。
一番時間がかかったのは、デザインをニコニコ動画っぽくする事とメンテ画面のトロがナイスボートって言ってる画像を探す時間です。単体テストのコードがほとんどありませんし、正直ソースコードはかなりひどいです。
いくつかのプロジェクトから、欲しいクレクレと来ましたがソースコードを見て絶望したと思います。

作った理由は、スライドにもありますが、
・単純にそこらへんに動画を置かれるとファイルサーバが死んでしまう事
それと、
・ローカルで動画をエンコードするとその間他の作業が出来なくなってしまう
・その動画、他の人全員が見れる形式とは限らない&codecによってはライセンスの購入が必要
という事です。

当時の心境を思い出すと、現実逃避も含まれていたと思います。(煮詰まっているときに他の作業すると楽しいですよね:p)

データセンターに置かなかった理由は、
・ネットワーク帯域がやばい事になる
・データセンターに置く機材の話とか発注とか予算とか
それを正攻法で解決しようとすると、いろんな人といろんな調整をしないといけなくなり、それには膨大な時間がかかります。(これは組織の問題かもしれませんけどね)
余ってるPCなら稟議とか要らないし、ソフマップでHDD買えば普通に経費で落とせるし。
※こんなやり方、真似しちゃダメですよ。いろんな人のヘイトも上がるし、後々面倒な事になります。(当時の状況として大人の事情ってやつがいっぱいありまして.. アルヨネ?そーいうこと。)

MP4をコンテナにしたのは、その当時FlashでMP4/H264を再生できるようになったからです。みんなが見れる環境(つまりブラウザで再生できるもの)であれば何でも良かったのですが、H264画質がすばらしいですし。(画質にうるさい人が多いというわけではなく、画質が悪いと動画中の文字がつぶれてしまう)

一番問い合わせが多かったのが動画がエンコードできないというもの。
みんなFrapsで撮影しているものかとてっきり・・。

アップロード部分をFlashにしているのは、アップロードの進捗状況を分かりやすくするため(アップするファイルが未圧縮なので巨大ですし)と、ブラウザのアップロード2GBの制限(これはブラウザによりけり)を避けるためです。
それなのに、Apacheのビルドをミスって2GB以上アップロードするとContentTypeがオーバーフローして、アップロード出来ない状態が残念です・・。(ajp_proxyもtomcatも確認しましたが、apacheのレイヤーでNGになってました。)

というわけで、いくつか画面をキャプチャしました。私の家で動かしたものになりますので、サンプル動画として私のコレクションをアップしています。当たり前の事ですが会社でこういう動画を共有していたわけではありません。(と、当たり前の事を書いておかないと時々勘違いをした人が騒いだりするので)

TOPページ。
社内(プロジェクト)共通のLDAPがあったので、それを使ってユーザー識別してました。

アップロード画面。
アップロードするファイルのサイズが大きいので、簡単なプログレスを付けてあります。解像度は縮小無し~HD、SD等のサイズを選択できます。有効期限は無制限、1年などなど。これはエンコードした動画を削除する期限ではなく、オリジナルの期限です。基本的にエンコードした動画は削除しない方針でした。

アップロード完了
すると、こんな感じの画面になります。

アップ後
動画をアップすると、キューもどきに入ってサムネイル生成待ちの状態になります。

サムネイル生成
エンコードサーバで動いているデーモンがキューもどきを見ていて、最初にサムネイルを作ります。マウスカーソルを合わせるとパラパラと表示されます。海外の動画サイトに良くあるアレです。

エンコード
サムネイルの生成が終わったら動画のエンコードを開始します。
エンコードの状況をヘッダで表示できます。今どれくらいまで変換しているのか確認する事ができます。
なお、失敗しても(しなくても)リテイクしたい場合はフラグを立てるだけです。

動画の再生ページ。
全画面表示とかもできます。右上のアイコンからメタ情報の編集とか、ダウンロード(MP4 or オリジナル)ができます。

動画の編集画面。
まぁだからなんだって話ですが。。。スライドにも書きましたが、ブラケットで括るとタグとして認識します。

検索画面。
タグを押すとこの画面に飛びます。画像だと1件しかなくて見栄えがあれですね。

簡単なログ画面。
何が起こっているのか知りたい人向け。

RSSは、サイト全体のもの、ユーザー毎や動画毎にあるので、自分が投稿した動画にコメントがついたみたいなものが取れます(たぶん、つけた気がする)

何かを導入したり、使って欲しいものがある場合、一番手っ取り早い方法は本来の趣旨を主張するのではなく、メリットを主張するのが良いと思っています。例えば、Subversionのようなものを使って欲しい場合に、リソースを集中管理して履歴が追えて~とかじゃなくて、レポジトリに入れる事で裏で自動でリソースを変換します、HTMLファイルだったら文法チェックしてくれます、誰が何をやっているのかわかるようになります。とか。このツールもHDDが~とかじゃなくて、ローカルで変換しなくてもアップロードするだけで、あとは良い感じに全部やってくれます。とかとか。
まぁ管理者の幸せとユーザーの幸せはまったく異なる事がほとんどですので、それを押しつけても説得なんてできませんよね。

ツールを作るときは、他のシステムとも連携できるようにAPIを用意したり、何かのプロダクトにべったり依存しないようにするのが理想だと思いますが、当時の私はまだまだ未熟でそこまで気配り出来ませんでした。今なら似たようなプロダクトがあると思うのでそれを使うのが良いと思います。

世の中、他社には面白いツールがいっぱいあるんだろうなぁとイロイロ気になります。
こっそり教えてください(・ω・)

新しいサイトもよろしくお願いします!