2007/09/09
■[programming]LinearNote: Ruby on Railsで動くWikiのようなblogのようなメモ帳
この夏Ruby on Railsの勉強のために作ってたアプリケーションを、RubyForgeに登録しました。
RubyForge: LinearNote: Project Info
http://rubyforge.org/projects/linearnote/
ソースコードの量もまだそれほど多くない(というかかなり少ない)ので、Ruby on Railsの勉強にも役立つかもしれません。もしよかったらご覧ください。
■ これは何?
個人的なメモの記録を目的とした、メモ帳アプリケーションです。メモ帳アプリケーションはデスクトップアプリとしてもWebアプリとしても既に色々ありますけど*1、LinearNoteは特に以下の用途に特化しています。
- 普段は、気軽にメモを溜めたい(手元のPCにテキストファイルを書きためるように)
- でも、時々はメモの一部を他の人に公開したい。またはそのメモをベースにWikiのページを作りたい
利用イメージとしては、自宅または職場に1つLinearNoteのサーバを立てて、そこにありとあらゆるメモを残していくような感じです。
書き込まれたメモはデフォルトでは非公開状態になるので、普通に使う分にはWindowsの「メモ帳」でテキストファイルを作りまくるのと同じように気軽に書けます。それに加えて、適当に書いたメモをあとで他の人に公開したくなったときに、整形したりいくつかのメモを集めて1つにしたりするところで、LinearNote特有の機能が色々とフォローするわけです。
■ 主な機能とスクリーンショット
現在のバージョン(LinearNote 0.1.0)で実装している主な機能をご紹介します。
1. 複数のノートブックをホスト
LinearNoteにユーザ登録を行うと、誰でもノートブック(1つのWikiに相当するもの)を作成できるようになります。ユーザ登録画面はこんな感じ。
ユーザ登録すると、自分のノートブックを作れるようになります。
ノートブックの種類は、以下の4種類から選べます……が、Groupの機能は未実装です。すいません。
- Personal(所有者だけが書き込み可能)
- Group(許可されたメンバだけが書き込み可能)
- Public(登録ユーザ全員が書き込み可能)
- Exposed(どんなユーザも書き込み可能)
2. プレーンテキストかPukiWiki形式でメモ
作成したノートブックでメニューの「New Note」をクリックすると、メモ(LinearNoteでは「ノート」と呼んでる)の作成画面に入ります。
ノートを記入すると、画面下のプレビューが自動的に更新されます。メモのスタイルは、PlainスタイルかPukiWikiスタイルから選択できます(デフォルトのPlainスタイルを選んだ場合は、ノートが等幅フォントで表示されます)。
PukiWikiパーサには、Rubyist Magazine出張版に載っている添削後のPukipa(MITライセンス)を使わせていただきました。作者のgorouさん、添削者の青木さん、ありがとうございます。
3. メモの表示方法をカスタマイズ
これがLinearNoteの目玉機能です。他のアプリにあってもおかしくないけど、僕は見たことないので今回作ってみました。
何も考えずに適当にメモを残していると、いざ他の人にも見せようと思ったときに再編集が面倒です。そこで、その再編集を助けるために、LinearNoteは「スマートインポート」機能を備えています。
スマートインポートとは、簡単に言うとiTunesのスマートプレイリストと同じような機能です。iTunesでは、「ジャンルがRockの曲」とか「アーティスト名がthe pillows」という条件付きのプレイリスト(スマートプレイリスト)を作ると、その後曲が増えたり減ったりしても、そのプレイリストの中身が自動的に更新されます*2。参考までに、iTunesのスマートプレイリストの設定画面はこんな感じです(↓)。
LinearNoteのスマートインポートでも、あるノートの中に他のノートをインポートするために、「タグがp2p」とか「タイトルか本文にRuby on RailsかRoRという文字列が入っている」という条件を付けることができます。スマートインポートの設定画面は次のようになります。
スマートインポートを設定すると、ノートの下に、条件にマッチするノートの一覧が表示されます(ノートの増減に合わせて自動更新)。加えて、このノートの一覧のRSS(図の赤丸部分)を、ノートブックの最終更新一覧のRSSとは別に配信しており、ノートブックの特定の部分だけをRSSリーダで購読できるようになっています。
これをどう使うかというと……例えば、ノートブックのトップページで「タグがdiaryのノートを読み込む」というスマートインポートを設定して、公開したいノートにだけdiaryタグを付けるようにすると、トップページだけ見ると普通のブログのように見えます。RSSも出ますしね。
ちなみに、このインポート機能は自分のノートブックに対してでなく、他の人のノートブックや、全てのノートブックに対しても実行できるので、この機能自体をRSSリーダのように使う事も可能です。
■ 使ってみるには
LinearNoteの動作例
すいません。動作例はいまのところ公開してないです。さくらのレンタルサーバじゃちょっと動きそうにないので、今後の予定も未定です……。
インストール方法
RubyForgeからソースコードをダウンロードして、普通のRuby on Railsアプリケーションと同じようにすれば動作します(詳しい手順はまた後ほど)。企業内でこっそりいじるような利用法もサポートするため、ソースコードはMITライセンスで公開しました。
RubyForge: LinearNote: Project Info
http://rubyforge.org/projects/linearnote/
Railsアプリのgemの作り方が分からなったので、まだgemファイルはありません。
Ruby全般だとnewgemやHoeが使えそうというのは調べたんですけど、newgemはRailsとscriptファイルの名前が衝突してるし、Hoeは「binディレクトリが無い」とエラーを出すし、一体どうしたらいいのか分からないんですよね……。
動作環境
開発環境は以下の通り(要するにInstantRails 1.7)です。が、特殊な機能は使ってないので多少違う動作環境でもおそらく動くと思います。
- Windows XP SP2
- Ruby 1.8.6
- Rails 1.2.3
- MySQL Community Server 5.0.27
CentOSで動作することは、ちょっとだけ確認しました。db/migrate/001_setup_database.rb の中身をいじれば、MySQL以外のデータベースでも動くはずです。多分。
■ 今後のToDo
- ノートブック間でのノートの移動、コピー
- ユーザ同士のコミュニケーション機能(コメント機能か何か)
- 管理者向けの機能
- ノートの自動保存
- ノートのリビジョン管理
- インターフェイスの改善
■ ご意見ご感想
お待ちしています。コメント欄か、yoshizawa at muziyoshiz.jpまでお願いします。
*1 デスクトップアプリケーションではhowmや紙copi、WebアプリケーションではRandomNoteやTiddlyWikiなどなど。
*2 「ライブアップデート」のチェックを入れている場合に限りますが、普通このチェック外しませんよね??
最近、MVCにきっちり分かれてるコードばかり読んでたので、これは読むのがつらい。 ある程度class,functionの読み解きは出来たけど、なんかやる気が出ない。 Rails2.0の勉強も兼ねて、備忘録に特化したシステムを作っちゃおうかな。 単純にタグ範囲でランダム表示したいだけ
また、この日記に無関係と判断したコメント及びトラックバックは削除する可能性があります。ご了承ください。