はてなブックマークの作り直しについて

naoya2008-03-24


id:naoya:20080320:1206009912 でも少し触れましたが、京都に来てからはてなブックマークの作り直しをしています。どういう意図を持って作り直そうとしているかを述べておきます。

まず大前提として、今のはてなブックマークに追加したい機能、変更したい仕様、本来追加するはずが途中で頓挫したものが結構な数で山積みになっています。それを実現するための基礎作りです。

追加したい機能、変更したい箇所

おそらく新システムの最初のリリース時には、それほど大きく変わった、という印象にはならないかと思います。長く続いているサービスですし、インタフェースや使い方もリリース当初からそれほど大きくは変わっていません。既存システムからの極端な変更は歓迎されないだろうと思っており、まずはオリジナルが持っていた機能をしっかり再現することが重要です。

ただし、既存システムでも問題と思っている箇所は改善してからリリースしたいと思います。具体的なもので決めているのは、

  • 全体検索のみなおし。はてなブックマークのデータ全部から検索ができるようにする。
  • 記事分類(カテゴリ)の仕組み、アルゴリズム見直し。
  • パフォーマンス改善
  • デザインの見直し (既存のデザインは利用できるようにした上、HTML構造の見直しと新しいテーマの追加)
  • タグ周りのインタフェースの改善
  • インポート機能の追加 (エクスポートできるのにインポートできない...)
  • 一部ユーザーインタフェースの改善 (まとめて削除できるように。削除後の画面遷移を直す。一部機能のブラウザ間の互換性。)
  • モバイル版の機能強化 (スターが使えるように、ほか)

などです。

それから、エントリーページのコメント一覧を、被ブックマーク側、つまりブログの書き手からある程度コントロール可能にしたいと思っています。まだ仕様は考え中ですが、あまり極端なもの、例えばブログの作者さんが自由にコメントを削除できる...などは考えていません。ブックマークの自由、コメントの自由はある程度担保上で、コントロールできるようなものを検討しています。なぜそのような機能を付けようと思っているかは、まもなく津田さんからのインタビュー記事が公開されますが、その中で詳しく触れています。(追記: 公開されました。 http://ascii.jp/elem/000/000/119/119192/)

ここまでがリニューアル時に追加できれば良いかなと思っている機能ですが、その後はもっと大きなシステムを考えています。こちらは少しもったいぶって、まだ内緒ということにしておきます。

今後の開発スピードを上げるために作る

はてなブックマークを作ったのはもう 3年も前です。当時は自分の技量がしょぼかったこともありますし、社内の開発プロセスも今に比べてだいぶ古い。サービスの基盤になるソフトウェアは当時から完全に一新されています。

プログラマはいつでもはじめからやり直したい症候群に悩まされるもので、かく言う自分も作り直すべきか、既存の実装で続けるべきかを相当迷いました。インフラの仕事に一段落つけて、改めてブックマークの開発に取りかかったのですが、どうにも頭で思い描いていることを実装するのに手間がかかりすぎました。スパゲッティコードに原因があるのは明らかでした。人のせいにしているようですが、もちろん自分が作ったコードです。エンバグもします。あまりに手間がかかって、開発のモチベーションが下がってしまい「こりゃいかん」という状態でした。

実は、はてなでは人力検索を過去に一度スクラッチから作り直していて、それには相当の工数がかかりました。そのときも、その後の拡張性を考慮してシステムを刷新したのですが、その後かけた工数を回収できるほど拡張を行ったかというと非常に怪しい。その苦い経験があるので、実際やるかどうか、相当悩みました。優柔不断な性格が災いし、なかなか決めるに決められずよくオフィスの床でのたうち回っていました。

いつまでも床を転げ回っていてもしょうがないと思い、二週間ほど時間をかけて、試しにスクラッチからコードを書いてその進捗度合から考えようと決めて取りかかりました。思った以上に成果が上がったので、これなら行けるか、と判断して作り直しに乗り出しました。幸いなことに、作り直しと言っても言語は同じなので、既存のコードの多くの部分はそのまま流用できています。

テスト駆動開発

自分は常々、テスト駆動開発とサービス開発は相性が悪いなと思っていました。新しい機能を作っているときや、新しいサービスを作っているときは、自分でも答えが見えていない状態で作っていることが多くあります。コードを書いているうちに少しずつ問題が解決されていって、最初は見えていなかったものが見えるようになり、答えがみえるようになる、ということが多々あります。作っては壊しを何度も繰り返すこともあります。

テスト駆動開発では、細かい単位とは言え、ある程度事前に何を作るかを決めてテストを書きます。このプロセスが相性が悪かったのです。

ですが、ブックマークの作り直しは、基本的には作るものの大部分が決まっています。そこでユーザーインタフェースは後回しにしてシステムの根幹になる部分 (モデル) をテスト駆動でずっと作っています。最初にモデルを全部開発してしまってから、ユーザーインタフェースに取りかかる予定です。

恥ずかしながら、これまで自動化されたテストと呼べるテストがなかったため、ちょっと気を抜くとすぐエンバグしていました。今回の作り直しでテスト環境が整うので、だいぶ品質が上がるのではないかと思っています。

ベータテスト

新しい機能もいくつか予定していますから、ある日予告なく一気に全部システム刷新というのはさすがに厳しいだろう、迷惑をかけるだろうと思っています。そこで、ある程度のところまで出来上がったら、パブリックベータという形で既存システムと並行で走らせるつもりです。新しい機能で仕様の定まらないところや、品質に問題のある箇所を潰していって満足のいく状態になったところで既存システムとの置き換えをしたいと思います。

ベータ開始は早ければ 2 から 3ヶ月後を予定しています。

ほか

他にも作り直しに際して考えていることがたくさんあるので、システムの進捗に合わせて時々日記に書きたいと思います。

宣伝: エンジニア募集中

最後に自社の宣伝です。現在はてなではエンジニアを募集しています。(勤務地はもちろん京都です。)

Webアプリケーションエンジニア、シニアエンジニア、マネージャー、サーバー・ネットワーク技術者など幅広い分野で絶賛大募集中です。

ことはてなブックマークに関して言いますと、このサービスは特に大規模且つ価値のあるメタデータ、テキストデータを集積しているサービスで、それを活用したいのですが、いかんせん自分はその分野の門外漢であるため苦労しています。本来、もっと柔軟にデータを活用できるようあれこれするべきところ、なかなかそれを活かすことができていません。検索、自然言語処理データマイニング、大規模データの扱いが得意な方に是非ともお手伝いいただきたい、と思っております。

興味がある方は、求人情報ページを参照いただければ幸いです。