ブログを全面リニューアル。RailsでWordpressを再構築してみた。

今までWordpressを使ってブログを書いてましたが、いろいろと不満があったのでRailsで作り直しました。といってもWordpressの機能をそっくりそのまま持ってきたのではなく、必要最低限だけ実現させてます。結構楽勝だろーと思ってたんだけど、いろいろあったので書き留める。

Wordpressへの不満

  • 多機能過ぎ。そんなに色々いらない。
  • プラグインとか入れる度にいろんなjavascriptファイルやCSS読み込んでどんどん重くなる。→プリコンパイルできるけど面倒だから結局やらない。
  • バックアップめんどくさい。
  • なんか遅い。
  • WYSIWYGエディタ要らない。タグも書きたくない。Markdownでだけでいい。

必要な機能

  • ブログ新規作成、下書き、編集、削除
  • カテゴリー作成、編集、削除
  • タグ付け
  • スラッグを指定してURLを変更できる
  • 画像アップロード
  • シンプルなテキストボックスにMarkdownが書ける。
  • レスポンシブルなデザインでモバイル対応
  • それなりにSEO対策

予想できる壁

  • 移行するデータの選別
  • MySQLからPostgresqlへの移行
  • 今までのURLを活かしたい
  • サイトマップを自動でつくりたい

環境や使用したGem

Carrierwaveについての記事

herokuでCarrierwaveを使う時にいろいろハマった
Railsの画像アップロードを倍速にする方法
Rails 超お手軽な画像アップローダー CarrierWave の使い方

出来上がったブログがこれ

シンプルな編集画面。マークダウンが書ける。
edit page
  
  
なんと編集メニューはこれだけ。
admin panel
  
  
Wordpress的な画像アップロード。ドラッグ&ドロップにも対応。
image upload
  
  
レスポンシブルデザインでモバイルに対応。
iphone

持ってきたデータ

Wordpressのデータベース(MySQL)

  • wp_posts
  • wp_terms
  • wp_term_relationships

以上。これだけ引き継ぐことにした。

MySQLからPostgresqlへの移行で気をつけること

ダンプはInsertを一行ずつ出力した方がエスケープ漏れとかの間違いに気がつきやすいのでおすすめ。

mysqldump -c --order-by-primary --skip-extended-insert -u root -p -t DATABASE TABLE > DUMP.sql

ダンプファイルの中の文字列を置換する。
いろいろ試行錯誤でこんな結果。

  • バッククォート(`) -> ダブルクォート(")。
  • シングルクォートエスケープ(\')をダブルシングルクォート('')に。
  • ダブルクォートエスケープ(\")をダブルダブルクォート("")に。
  • \r\n の改行をどうするかは考えもの。今回はマークダウンなので全て削除した。

エスケープの比較表はこのサイトが分かりやすい。
http://en.wikibooks.org/wiki/Converting_MySQL_to_PostgreSQL

パフォーマンス

assets precompileのおかげでリクエスト数は半分以下になったし、Turbolinksの威力で体感速度もグンとあがりました。いまのところ満足。

Githubへ?

ブログが書ければいいよっていう人が他にもいそうな気がするのでGithubにいずれソースをアップしようかなと。でもWordpressほどお手軽にできないので、そんなに需要はないかもしれない。

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた