• UGUISU携帯対応について

    このエントリーを含むはてなブックマークはてなブックマーク - UGUISU携帯対応について この記事をクリップ!Livedoorクリップ - UGUISU携帯対応について Yahoo!ブックマークに登録 @niftyクリップに追加 Share on Tumblr FC2ブックマークへ追加 newsing it! Googleブックマークに追加 Bookmark this on Delicious FriendFeedで共有 このエントリをつぶやくこのWebページのtweets

    UGUISU ver.1.2でiPhone、Android、3キャリア携帯に対応させました。

    UGUISUの携帯対応はとても簡単でした。なぜならRailsではjpmobileという素晴らしいライブラリがあるからです。

    UGUISUではjpmobile-0.0.8を利用させて頂きました。

    jpmobile-0.0.8はスマートフォンの対応がされていなかったので、こちらを参考にスマートフォンの対応をしました。

    また、ビューの切り替えは行えますが、エラー画面の切り替えがなかったのでなかったのでパッチを作成しました。jpmobileのビューの切り替えと同じような感覚で500.htmlなどのエラー画面をモバイル版と携帯版で切り替えるられるようになります。

    文字コード変換などはjpmobileが行ってくれますので、後はそれぞれの端末ごとにビューを作成し、iPhoneのホーム画面用のアイコンを追加しただけです。

    Rails+jpmobileだと簡単にモバイルサイトを構築できます。

    皆さんもRails+jpmobileでモバイルサイトを構築してはいかがでしょうか。

    y-ozawa

    製品戦略室チーフプログラマ UGUISU(http://www.uguisu.biz)開発責任者

     
  • マイグレーションによるデータ移行について

    このエントリーを含むはてなブックマークはてなブックマーク - マイグレーションによるデータ移行について この記事をクリップ!Livedoorクリップ - マイグレーションによるデータ移行について Yahoo!ブックマークに登録 @niftyクリップに追加 Share on Tumblr FC2ブックマークへ追加 newsing it! Googleブックマークに追加 Bookmark this on Delicious FriendFeedで共有 このエントリをつぶやくこのWebページのtweets

    今回は、Ruby on Railsのマイグレーションによるデータ移行についてお話します。

    新しく入ったプロジェクトでマイグレーションを実行したら、エラーが起きてテーブルが作成できないことがありました。マイグレーションファイルを見たら、以下のようなコードが書かれており、マイグレーションによるデータ移行部分でエラーになっていました。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    class AddColumnToModels < ActiveRecord::Migration
      def self.up
        add_column :models, :column, :string
        Model.named_scope.each do |model|
          # モデルに関する様々な更新処理。実際はもっと複雑でした。
          model.update_attributes!(:column => "example")
        end
      end
    end

    エラーの原因は、マイグレーション内で利用しているモデルが存在しない、またはモデル内部のロジックがマイグレーション作成時と異なり例外が発生していることが原因でした。

    マイグレーションによるデータ移行はよく行われます。
    しかし、マイグレーションの中でモデルを利用してデータ移行をするのは避けるべきだと思います。
    なぜなら、マイグレーション作成時のモデルと最新のモデルではロジックなどに差異がある可能性があり、それによってマイグレーションが動かなくなる可能性があるからです。また、モデルを修正するたびにマイグレーションファイルも修正するのも、保守性がよろしくありません。

    そこで、私はデータ移行を行う場合、基本はモデルを使わずに直接SQLを書くようにしています。

    1
    2
    3
    4
    5
    6
    
    class AddColumnToModels < ActiveRecord::Migration
      def self.up
        add_column :models, :column, :string
        execute "UPDATE models SET column = 'example'"
      end
    end

    こうすることでモデルとマイグレーションを切り離すことができます。また、モデルによるコールバックなどの無駄な処理がなくなることにより高速にデータ移行ができます。

    とはいっても、モデルを利用した方が効率が良いときがあります。その場合は、マイグレーション専用のモデルを定義することで、通常のモデルと切り離して利用します。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    class AddColumnToModels < ActiveRecord::Migration
     
      class TempModel < ActiveRecord::Base
        set_table_name "models"
        # データ移行に必要な処理だけを記載
      end
     
      def self.up
        add_column :models, :column, :string
        TempModel.named_scope.each do |model|
          model.update_attributes!(:column => "value")
        end
      end
    end

    私は上の2つを利用して、マイグレーション内のデータ移行を行っています。
    モデルを使うデータ移行より手間はかかりますが、モデルやライブラリを修正した場合にマイグレーションを見直し修正する必要がなくなり、トータルでは手間が少なくなると思います。是非試してみてください。

    y-ozawa

    製品戦略室チーフプログラマ UGUISU(http://www.uguisu.biz)開発責任者

     
  • UGUISUで利用しているjQueryプラグインを紹介

    このエントリーを含むはてなブックマークはてなブックマーク - UGUISUで利用しているjQueryプラグインを紹介 この記事をクリップ!Livedoorクリップ - UGUISUで利用しているjQueryプラグインを紹介 Yahoo!ブックマークに登録 @niftyクリップに追加 Share on Tumblr FC2ブックマークへ追加 newsing it! Googleブックマークに追加 Bookmark this on Delicious FriendFeedで共有 このエントリをつぶやくこのWebページのtweets

    前回はUGUISUで利用しているRuby on Railsのプラグインを紹介しましたが、今回はUGUISUで利用しているjQueryのプラグインをご紹介します。

    jqPlot

    折れ線、円グラフなど多彩な表現ができるjQueryプラグインです。

    FuncyBox

    シンプルなアニメーションで画像を拡大表示するLightbox風なjQueryプラグインです。

    Read the rest of this entry »

    y-ozawa

    製品戦略室チーフプログラマ UGUISU(http://www.uguisu.biz)開発責任者

     
  • UGUISUで利用しているプラグイン紹介

    このエントリーを含むはてなブックマークはてなブックマーク - UGUISUで利用しているプラグイン紹介 この記事をクリップ!Livedoorクリップ - UGUISUで利用しているプラグイン紹介 Yahoo!ブックマークに登録 @niftyクリップに追加 Share on Tumblr FC2ブックマークへ追加 newsing it! Googleブックマークに追加 Bookmark this on Delicious FriendFeedで共有 このエントリをつぶやくこのWebページのtweets

    r-learningで技術系のブログを始めました。
    RubyやRuby on Rails、Android、iPhone系の話題を中心に、弊社で開発しているサービスや研究中の技術を話していきます。

    さて一番最初は、r-learningで初のサービスであるUGUISUについてお話します。
    UGUISUはRubyのフレームワークであるRuby on RailsとJavascriptフレームワークjQueryを利用して実装をしました。
    どちらもプラグインが充実しており、開発を手早くできるのが魅力です。

    今回はUGUISUで利用したRailsのプラグインやGemを紹介します。
    UGUISUでは様々なプラグインを利用、一部変更して利用させて頂きました。
    作成者の皆様、ありがとうございました。

    • acts_as_list - ActiveRecordにリスト構造管理機能を追加します。
    • acts_as_paranoid – ActiveRecordに論理削除機能を追加します。
    • acts_as_tree – ActiveRecordにツリー構造管理機能を追加します。
    • attachment_fu – ファイルアップロード機能を追加します。
    • i18n_generators – メッセージを日本語化させるのに利用しています。
    • restful-authentication – ログイン認証を簡単に実装できるようになります。
    • will_paginateページネーションを簡単に実装できるようになります。
    • simple_captcha – 画像認証機能を追加します。
    • crummy – パンくず表示で利用しています。
    • hoptoad_notifierエラー通知+エラー管理Webサービスのhoptoadのプラグインです。デモサイトで利用しています。
    • record_with_operator - ActiveRecordのタイムスタンプと似た感じでモデルに作成者や更新者のユーザーIDを簡単にできるようになります。
    • aasm - ActiveRecordで簡単にステートマシンを実装できます。
    • simple-rss – RSSフィードを簡単に取得できます。

    この中で今イチ押しなのは、hoptoad_notifierrecord_with_operatorですね。
    hoptoad_notifierはフリーからも利用でき、プランを変更すればSSLにも対応してくれます。
    record_with_operatorは、関連にも自動でユーザーIDを設定してくれたり、acts_as_paranoidにも対応しており削除者のユーザーIDまでも入れてくれて大変便利です。
    どちらも簡単に試せるので、是非試してみてください。

    次回は、jQueryとRailsについて書こうと思います。

    y-ozawa

    製品戦略室チーフプログラマ UGUISU(http://www.uguisu.biz)開発責任者