Index > マークダウン(markdown)記法を使ったメモサーバの構築記録 Google App Engine
Sun, November 2, 2008

マークダウン(markdown)記法を使ったメモサーバの構築記録 Google App Engine

過去6年くらいの間にPC,Web上で書いたメモが8000件近くたまっている。
いままでは、自作メモサーバがサーブレット(JavaServlet)だったので、 レンタルサーバを借りて運用してきた。 JavaServletが使えるレンタルサーバは少なく、(ある意味)高い。 ウェブ上でメモを書く・蓄積する・検索する程度の機能なら PHPでも同じようなことは実現できる。 PHPの使えるレンタルサーバは運用費用が安い。

だから、JavaからPHPに移行したいなぁと思いつつ、 ずるずると時間が経ってしまっていた。

google notebookを使えばいい

ちなみに、メモをネット側で管理したいだけならば、 google notebook というサービスを使えばいいです。

GoogleAppEngineへ移行

GoogleAppEngineというすごいサービスが登場したので、 ついにJavaServletを捨てて移行することにした。

GoogleAppEngineの詳しい説明は、その辺で調べてもらうことにして、 ごく簡単に言えば、Pythonを使って記述したウェブサービスを 無料または非常に安価に構築できるGoogleのサービスということ。 しかも、ユーザ管理やデータストア機能がはじめから組み込まれているので、 それをただ自分の書いたアプリケーションから利用すればよい。

実際に使ってみればわかりますが、本当に 自分が構築したいウェブサービスのアプリケーション部分だけを開発すればよく、 あとはGoogleAppEngineのAPIが面倒を見てくれる、という感じです。
これは、すばらし過ぎます。 (レンタルサーバ会社の脅威となるでしょう、たぶん。)

メモの記法もmarkdownへ移行

メモは、Radeoxを参考に 独自に実装した簡易マークアップ方式で書いてきたのだが、 これを機に markdownに移行しました。

GoogleAppEngineはPythonしか現在サポートしていないので、 現在使っている独自の簡易マークアップ言語処理プログラムをPythonに移植するか、 既存のPythonで動く簡易マークアップ言語に乗り替えるか、という 選択なのですが、結局乗り替えることにしました。

簡易マークアップ言語でPythonで使えるのはいろいろありますが、 一番ビッグネームと思われるmarkdownにしました。

いままで書いてきたメモ資産が、独自のマークアップ になっているため、それをmarkdown記法に移行しなければならない、というのは 精神的にかなり苦痛だったのですが、 実際に移行してみると、さすがに普及しているmarkdownは書きやすいです。

レンタルサーバからGoogleAppEngineへ移行するにあたって困ること

GoogleAppEngineは、データストアをはじめさまざま便利なAPIを提供している ので、新規にアプリケーションを構築する場合には問題が少ないと思いますが、 既存のアプリをなるべく少ない手間で移行しようと思うと、制約が多いです。

わたしがメモサーバを移行するにあたって困ったこと・・・

たとえばGoogleAppEngineが提供するデータストアの機能は とんでもなく簡単にオブジェクトを保存することができ、便利なのですが、 いままで、MySQLなどRDBMSにデータをストアしていたとしたら、 GoogleAppEngineのDataStore機能はRDMBSと取り扱いがかなり異なるので、 苦労することになります。

わたしの場合は、メモの保存にフラットファイルを使っていたので、 データストアに関しては問題がありませんでした。 しかし、メモを全文で検索する機能がGoogleAppEngineで提供されていないので、 困ってしまいました。 日本語でない(たぶん英語など)データは どうやら全文検索が(非公開に)サポートされている ようなのですが、日本語のように単語の切り出しに形態素分析器を使わないと いけない場合には対応していないらしい。

単語切り出し自体は、YahooJapan提供のウェブサービスを利用すればOK.

独自に全文検索をサポートしようとしたが・・・

メモサーバのGoogleAppEngineへの移行は順調でしたが、全文検索機能だけは どうにもなりません。 仕方がないので、自前で実装することにしました。

ちょうど、 「集合知プログラミング」というオライリー本に Pythonで全文検索機能を実装する方法が紹介されていたので、 それを参考にして自前で構築することにしました。 (あと半年も待てば誰かが...ひょっとすればGoogleがオフィシャルに? 全文検索機能の提供の可能性高そうですが。)

実装してみたところ、基本部分は問題ありませんでした、 ローカルテストでもOK、しかしサーバで動かしてみるとエラーになります。 どうやらリソースを使いすぎているようです。

「集合知プログラミング」で紹介されていた方法では、 対象となる文書(ここではメモ)を単語に分解して、それを個々に 出現位置情報とともに、データベースに保存します。
メモサーバでは、 この処理をメモを保存するタイミングで実行していました。 そのとき大量のデータ保存処理が発生してしまうのです。 これがたぶん過負荷の原因です。

ならば、別スレッドで処理すれば一時に負荷が発生しない・・・ と思ったのですが、調べてみるとどうやらそれは許可されないようです。 ならば、cronでとも思ったのですが、それも禁止。

結局、全文をインデックスするのはやめ、メモのタイトル部分だけにしました。 これで全文検索はできませんが、タイトル検索は、できるようになったので、 まあなんとか使っています。

 Twitter
follow me on Twitter
 Categories