見てるなう(仮)を早くした

はじめに

おはようございます。 yosida95 です。

見てるなう(仮) とは、閲覧中の Web サイトを Twitter で簡単に共有するためのブックマークレットです。 製作した経緯は見てるなう(仮)を作ったというエントリにまとめてあります。

運営を始めて丸 2 年が経ちましたが、おかげさまでユーザーも大変増えました。 類似サービスの存在はいくつか認識していますが、 Twitter を #miteru で検索すると、そのほとんどが私が製作した見てるなう(仮)を利用して投稿されたものであることがわかります。

本日、見てるなう(仮)をアップデートし、より快適にご利用いただけるようにしました。

アップデートの内容

高速化

見てるなう(仮)は過去に指摘されたセキュリティ上の問題から、ワンタイムトークンを発行した後に投稿フォームへと進む仕様でした。 今回のアップデートでは認証方法を変更し、ワンタイムトークンを発行することなく投稿フォームへと進むことができるようになりました。

ワンタイムトークンの代わりに、ブックマークレットに含まれた共有鍵を使ってリクエストパラメーターを署名することで、これまでと同程度のセキュリティを担保しています。

ブックマークレット毎の共有鍵

これまでの仕様では共有鍵を Twitter アカウント毎に発行していたため、複数のデバイスで同じ Twitter アカウント用のブックマークレットをインストールした場合でも、共通の共有鍵が使われていました。 今回のアップデートは、ブックマークレット毎に共有鍵を生成するように変更しました。 そのため、万が一共有鍵が漏れた場合でも、個別の共有鍵を revoke することによって不正な投稿を防ぐことができます。

技術的なサムシング

Python 3.4 へのアップデート

これまでは Python 2.7 で動いていましたが、今回のアップデートに伴って Python 3.4 へと移行しました。 フレームワークはこれまでどおり Pyramid を利用し、 Twitter との連携は tweepy の利用をやめ、 OAuth 周りにoauthlibを採用、リクエスト周りは手書きしました。

jQuery の廃止

投稿画面ではこれまで、プレースホルダーや、ウィンドウ表示時にコメントフィールドにフォーカスを合わすことを実現するために、 jQuery を用いてきました。 今回のアップデートは jQuery の利用を廃止し、 JavaScript の標準 API のみを用いて DOM の操作などを実現しています。

データストアの変更

これまでは MongoDB を利用してきましたが、 MariaDB へ乗り換えました。

コンテナ化

これまではサーバーの中で直にアプリケーションインスタンスを起動していましたが、今回のアップデートによって専用のコンテナの中で動かすようにしました。 ちなみに、今流行りの Docker ではなく、 LXC を生で叩いています。

テスト

これまではよしだ VPSに作った Jenkins インスタンスの上でテストを回していましたが、 Jenkins のアップデートやサーバーの更新、言語の実行環境の構築などから開放され、開発中のプロダクトのテストを実行することのみに集中できる点に惹かれ、先日 CircleCI を個人で契約しました。 そして、今回のアップデートの開発中はそのテストを CircleCI で回していました。 今後はクローズドソースのプロダクトは CircleCI でテストを回し、オープンソースのプロダクトは TravisCI でテストを回していく方針です。

終わりに

これらのアップデートは、本日よりご利用いただくことができます。 今までご利用頂いていた方にも、いかなる手続きを必要とせずにアップデートが適用されます。

今回のアップデートに関して発生したと思われる問題、その他の問題がありましたら Twitter または EMail にてご連絡ください。

今後とも、見てるなう(仮)をよろしくお願いします。