Joe Hewitt「dropbox使ったブログエンジンNerve」
2011.10.3のブログエントリ
Dropbox is my publish button - Joe Hewitt
facebook辞めた後nodeで色々開発してるらしいjoehewittがnode使ってブログエンジン書き直してることを綴ってるエントリ
「node/expressで良かった」的な内容は「fs.watchFile()あって楽だわ」くらい
ストレスのないブログ更新のためのアイディアが面白い
- エディタで書きたい。でも、コマンドラインは抜きで(彼女も使うし)
- dropboxでmarkdownファイルを同期。markdownを更新したらエントリ公開される風に
- 特定のフォルダだけローカルとec2サーバ同期させるのにひと工夫
- エントリは(過去、今年用)の2つのmarkdownファイルで管理
- エントリごとにファイル作るのすら面倒になってきた
- プレビューモードもある。でもあくまで「ローカルのmarkdownファイル編集するだけ」でやれるように工夫
- h1がエントリの切れ目にとする、h1の末尾に日付を付けたらドラフト扱い、
- 「Post Uno [8/3/2011]」、「Post Duo [8/2/2011]」、Me [about]、etc..
等々。githubのログでは最後のコミットしたのが2011.11.29、現在v0.0.10
以下斜め読んだ内容
- ブログシステムリニューアル
- デザインは同じ
- ブログ用にcms自作した
- nodeとexpress使ってる
- awsにホスト。ec2, s3, cloudfrontを利用
- エントリはmarkdown1本
- サーバーへのpushにdropbox使ってる
- コードはgithubとnpmにUPした
- UI
- 色々なスクリーンサイズに対応したい
- いわゆるresponsive designを踏襲
- A List Apart: Articles: Responsive Web Design
- 色々なブラウザへ対応
- となるとfeatureテスト必要
- has.jsと、自作ライブラリのhascan使った
- joehewitt/hascan - GitHub
- phiggins42/has.js - GitHub
- 色々なスクリーンサイズに対応したい
- ブラウザで書くよりエディタでmarkdown書きたい
- Jekyllを使うという手もあった
- それだとgit使う。サーバへpush。2ステップ必要
- 都度コマンドラインの世界へ戻るのは、ぜひともスキップしたかった
- サーバをpuslishするためだけにファイル保存とかしたくなかった
- そこでdropbox
- dropbox使ってエントリ記事をサーバ(linuxのec2)とローカルで同期させてる
- 前ver.のブログ
- markdown使ってたのは同じ
- ホスティングはDreamhost使ってた
- エントリ公開するために毎回ftp接続必要
- 「毎回ftp」の部分は、ExpanDrive使ってストレス減らせた
- ExpanDrive - SFTP/FTP/S3 Drive
- しかしそもそもftp接続が不安定で、それはExpanDriveでは解消できなかった
- dropboxで同期は手間なし
- ローカルでmarkdownファイル保存した数秒後にはエントリがブログに公開される、風になってる
- ec2でdropbox使うには
- デフォルトのamazonが用意してるlinuxのディスクイメージへdropboxインストールした
- ディスクイメージ= Amazon Machine Image(AMI)
- たいていのlinuxディストリビューションでdropboxは動くと思う
- インストールには
- wikiにあったインストールスクリプトをコマンドラインで実行
- 現在削除されてる
- キャッシュにのこってたスクリプトデータ
- pasitebinにコピペされてる
- 注意点。インストールスクリプトの最後にブラウザであるURLを開かせようとするがスキップ
- 入力してしまうと、その瞬間からローカルとサーバーのファイルの同期が始まり大変な目にある
- 重要なデータをサーバーにアップされるので盗まれるリスクが発生
- wikiにあったインストールスクリプトをコマンドラインで実行
- 同期したいのは必要なファイルだけ
- エントリ用ファイル
- 必要なファイルだけ同期させるために専用のdropboxアカウント作った
- 同時に使えるdropboxアカウントは1つだけという制限がある
- その辺は、dropboxのフォルダ共有機能を使ってなんとかできた
- dropboxだけでブログ作れないから、CMS"Nerve"作った
- joehewitt/nerve - GitHub
- apache licence
- 開発中なので他人が使うのはお勧めしないが
- Nerveがローカルとサーバーで同期されたエントリ用ファイルを処理してブログ生成してる
- dropboxフォルダ内のファイル変更の監視
- ここはnodeのコアモジュールfsのwatchFile()使うとらくらく
- all - Node.js v0.6.5 Manual & Documentation
- (補足)
- エントリではv0.3.1へリンクしてる
- このcmsでは引数としてエントリ用ファイルのパスを渡すが、ワイルドカード(*)使える
- 一度に多くのファイルを監視対象にできる
- といっても、いまあるエントリ用ファイルは2つ
- 2002-2010までの記事用ファイル
- 2011年の記事用ファイル
- といっても、いまあるエントリ用ファイルは2つ
markdownファイルの中身はこんなかんじ
This is a new post ================== Blah blah blah. This is another post [9/30/2011] ================================ Blah blah blah.
- エントリ書くときの約束ごと
- h1要素はエントリに1つ。h1要素区切りに
- 四角括弧で囲んだタイムスタンプ「[9/30/2011]」
- タイムスタンプ付エントリはドラフト扱い
- パスワード設定もできる
- (補足)readmeもwikiもないのでgithubのソース飛ばし読みしたが、やりかたわからず
- エントリを書き上げたら、タイムスタンプ追記し、ファイル保存し、公開になる
- Nerve初期バージョンより使い勝手上がった
- 前はエントリごとにファイルが必要だった
- ファイルごとにタイムスタンプ情報を含んだ名前を付けないとダメだった
- 最初にLaura(girlfriend)のブログで試運転してみた
- Up on a Hill
- エントリごとにファイル必要なのはクソ退屈さの源泉、ブログ更新のストレスだと分かった
- 突破口は友達のDave Winerのやり方
- Daveのブログエントリは、1つのOPMLファイルにまとめてた
- Daveのやり方に影響を受けてNerveを書き直した
- 複数エントリを1ファイルで管理するやり方に移行した
- Lauraの更新頻度が少しアップした
- dropboxによる同期で注意点