Hatena::ブログ(Diary)

130単位

2013-12-31

Sitespecを使ってみた感想

Background

  • 住んでるシェアハウスWebサイトがなかった
  • プロモーションの拠点として必要性を感じた
  • 最初は割とよく耳にするMiddlemanで作ろうかと思った
  • 直近で読んだr7kamuraさんの記事 no title に影響を受けた
    • "Middlemanの嫌いなところは、何をするにもMiddlemanに従う必要があることだった"
  • 必要十分そうなSitespecというツールがそこにあったので使ってみることにした

Goal

  • とりあえず1ページでよい
  • 費用や入居までの流れなどがわかればよい
  • デザインはシンプルかつそれなりな見栄えであればよい
  • コンテンツはMarkdownで書きたい
  • Herokuくらい簡単に公開したい

Sitespec with Sinatra

r7kamuraさんのブログ(ソース)はPadrino使ってますが、全部引用するのは忍びないのでSinatra使ってみました。

helpers do
  def markdown markdown_text
    renderer = Redcarpet::Markdown.new(Redcarpet::Render::HTML, fenced_code_blocks: true)
    renderer.render(markdown_text)
  end
end
use Rack::Static, :urls => ['/images'] #Sitespecに渡すアプリにこう書く

Others

Result

ぼちぼちコンテンツ増やしていきたいと思っています(あと入居者募集中です!)。

Conclusion

上記の画像の件ですが、Sitespecとしては "まずは画像のパスをSpecに書け" というテストファースト的コンセプトなんだと思います。RSpec派生ツールなので当然といえば当然なんですが、そこを理解するとスムーズに開発できる気がします。ほぼ学習コスト無しでいけるため、さくっと静的サイトを作りたい場合にはMiddlemanよりおすすめです、たぶん!

Links


4774158798
パーフェクトRuby (PERFECT SERIES 6)

*1:IFTTTなどでTwitterに流しているとなおさら

2013-11-24

Rails3.2 -> Rails4.0 アップグレード

2ヶ月遅れくらいで記事書いてます。実行時はRails4.0.0でしたが、4.0系であれば同様の手順でいけると思います。エラーで修正必須か非推奨警告のみかは曖昧だったりします。

Gemfile

#gem 'rails', '~> 3.2'
gem 'rails', '~> 4.0'
gem 'activerecord-session_store'

Rails

rake rails:update
  • bin 以下にrailsなどの実行ファイル
  • config以下は上書きされるので diff して必要な設定を書き戻し
  • config/initializers/filter_parameter_logging.rb 追加
  • config/initializers/secret_token.rb
    • secret_token -> secret_key_base
rake rails:update 以外のファイル
  • update
  • add
    • README.rdoc
    • app/controllers/concerns
    • app/models/concerns
  • remove
ApplicationController
  • protect_from_forgery
    • generateされるものは with: :exception になっており、通常はこのオプションがよい
    • :with オプションを指定しない場合は :null_session
Routing
  • :via 指定なしの match をなくす
  • put -> patch
    • 変更した場合はViewでlink_toの:method指定も :patch にする
正規表現
  • 意図しないマッチを避けるため ^ よりも \A、$ よりも \z か \Z を使う
ProtectedAttributes
  • Model から attr_accessible 削除
  • save/create の without_protection 削除
StrongParameters
  • 利用したほうがよいが、一時的に無効化する場合の設定
    • config.action_controller.permit_all_parameters = true
Scope / Conditioned associations
  • whereなどの条件をlambdaの中で指定
ActiveRecord::Base.all
  • Model.scoped -> Model.all
    • all が AR::Relation を返すようになった
Where condition
  • whereで関連先の条件を文字列で指定する場合は references(:table_name) が必要
Associationの細かい仕様変更
@blog.posts.size #=> 0
@blog.posts.build
@blog.posts.pop
@blog.posts.size #=> 0(Rails3) 1(Rails4)
Data attributes in view
= submit_tag 'submit', confirm: 'OK?', disable_with: 'processing...'
= submit_tag 'submit', data: { confirm: 'OK?', disable_with: 'processing...' }
Exception name

Gems

  • MetaSearch -> Ransack
    • MetaSearchはRails4で動かない
    • 依存度により移行はそれなりに大変で、そのうち別記事で書くかも
  • Spork -> Spring
    • 流行り/設定簡略化
  • DatabaseCleaner -> DatabaseRewinder
    • 流行り/速度改善 (※Ruby2.0のみ)

More information


4774155071
WEB+DB PRESS Vol.73

2013-10-15

Rails3.0 -> Rails3.2 アップグレード

今さら需要があるかわからない3.2へのアップグレード情報です。半年前にはほぼ準備完了していたんですが、諸事情あった末にようやく調整ができたので、先日アップグレードしました。ちなみにRails4リリース後のセキュリティメンテナンス対象は3.2系のみであるため、3.1系以前を運用されている方はできるだけアップグレードしたほうがいいと思います。

Gitのlogを見ながら書き起こしているため、エラーか非推奨警告かは曖昧な上に、もしかしたらバージョンアップ関係ない点もあるかもしれませんがご了承ください。

Gemfile

#gem 'rails', '~> 3.0'
gem 'rails', '~> 3.2'
#gem 'mysql2', '< 0.3'
gem 'mysql2'
gem 'devise-encryptable'
#gem 'jpmobile', '< 2.0'
gem 'jpmobile'
#gem 'spork', '> 0.9.0.rc'
#gem 'guard', '~> 0.8.8'
  • 古いバージョン指定を除外(コメントアウト分が3.0用)
  • DeviseでRestful Authentication互換のEncryptorを利用しているのでDevise Encyptable追加

Rails

rake rails:update
  • config以下が3.2のデフォルトで上書きされる
  • git diff で3.0の内容と比較しながら設定
config.assets.enabled = false
  • asset pipeline をオフにして3.0時代のasset管理を継続
has_many_association#clear
# has_many :posts
has_many :posts, :dependent => :delete_all
  • 3.0は @user.posts.clear = @user.posts.delete_all だった
  • 3.2は :dependent を指定しないと 関連idを NULL で UPDATE する
    • 関連idがNULL不可の場合、:dependent を :delete_all (または :destroy) にする
Rails.cache with specific instances
config.eager_load_paths += %W[#{config.root}/lib]
config.after_initialize do
  require_dependency 'my_class' unless defined? MyClass
end
  • キャッシュに独自クラスのインスタンスを保存しているとロードできない対策
MimeType
  • config/initializers/mime_types.rb でPDF追加してたけど不要になった

Gems

Devise
  • rails generate devise:install
  • git diff で3.0の内容と比較しながら設定
  • 新バージョン用のロケールファイルの入手
  • ルーティングの追加は devise_for のブロックではなく devise_scope で
<%#= confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %>
<%= confirmation_url(@resource, :confirmation_token => @token) %>
#User.__send__(:generate_token, 'encrypted_password').slice(0, 8)
Devise.friendly_token.slice(0, 8)
  • ランダム文字列生成
RSpec(Guard)
#guard 'rspec', :version => 2, :cli => '--fail-fast --drb' do
guard 'rspec', :cli => '--fail-fast --drb' do
  • :version 指定不要
Capybara
  • git mv spec/requests spec/features
  • Capybara2系の仕様により、Capybara::DSL を使うspecをfeaturesへ移動
#select @datetime.month.to_s, :from => 'created_at_2i'
select "#{@datetime.month}", :from => 'created_at_2i'
#select @datetime.hour.to_s, :from => 'created_at_4i'
select '%02d' % @datetime.hour, :from => 'created_at_4i'
  • optionのテキスト検出が厳格になった
#click_button 'resource_submit'
click_button '登録する'
  • FormBuilder で submit の id が付かなくなった
Fabrication
  • resource!{ ... } -> resource{ ... }
  • sequence はブロック化して遅延評価
  • :from => Resource -> :class_name => :resource

感想

そもそもアップグレードが遅れたのは、非エンジニアがpublic以下を編集することが多いアプリで、asset pipeline対応ができなかったのが原因でした。ただ対応しないという判断で割り切ってしまえば、2系から3系よりは、対象項目が少なかった印象です。またテストを書いていたため、(テスト自体の修正もあったものの)比較的安心して進めることができました。Model.pluckが使えるようになったのが地味にうれしいですね。


4844331566
改訂新版 基礎Ruby on Rails (IMPRESS KISO SERIES)

関連記事

2011-12-15

さいきんのRailsアプリで使ったgem 10個

最近は、運用中Railsアプリの管理画面をTwitter Bootstrapでリニューアルしたり、こまごまと機能追加なんかしたりしてました。そんな中で新たに使ったgemライブラリを簡単にまとめてみます。

Prawn

  • no title
    • PDF作成
    • 日本語フォントとあわせて日本語表示も可能
    • 表や図などある程度自由にレイアウトできる
    • prawn-railsというのもさっき見つけた

Haml-rails

erb2haml

  • no title
    • ERBのviewファイルを一括置換
    • Hamlの文法を覚える参考にもなる

Kaminari

  • no title
    • ページネーション
    • will_paginateよりもなんとなくこちら
    • will_paginateよりもプラガブルかつクリーンな作り(と思う)

SimpleForm

  • no title
    • フォーム生成補助
    • 記述は少なく済むけど凝ったレイアウトにはしづらい
    • 管理画面などとは相性良いはず

ShowFor

  • no title
    • 詳細画面生成補助
    • SimpleFormみたいな感じ

jpmobile

  • no title
    • ガラケー/スマートフォン対応
    • Rails3.0系にはjpmobile1系
    • 絵文字も1ソースで3キャリア対応できる

Airbrake

  • no title
    • エラー通知サービス(旧Hoptoad)
    • Egg Plan が無料で1プロジェクト導入可能
    • Capistrano対応
    • 予期しない部分のエラー検知に役立つ

pry-rails

  • no title
    • rails console で pry
    • 今のところカラー表示しかメリット享受してないけどirbよりはいいのかなと

rails_best_practices

  • no title
    • より良いRailsコードへのアドバイス的なツール
    • リファクタリングの指針として有用

Twitter Bootstrap/Haml/SimpleFormなどによる管理画面は、慣れてきたらかなり軽快に開発できた気がします。記述量が少ないおかげで、変更や機能追加にも対応しやすいのがいいと思います。

あと、Airbrakeはおすすめです。


4797363827
Rails3レシピブック 190の技

2011-06-16

Rails3 url_forのtrailing_slashを常に有効化とその影響

きっかけ

  • ルーティングで:namespaceを使って分けたサブアプリ
  • url_forでスラッシュで終わらないのが若干気になる
  • 都度オプション書くのは面倒なのでできたら一括で対応したい

で、ついでにurl_forの指定によって出力がどのように変わるか調べてみました。

環境

  • Rails3.0.8
  • Pow0.3.1

導入

rails new railsapp && cd railsapp
rails g scaffold pages
rails g scaffold subapp/pages
rake db:migrate
rm public/index.html

config/routes.rb

Railsapp::Application.routes.draw do
  namespace :subapp do
    resources :pages
    root :to => 'pages#index'
  end
  resources :pages
  root :to => 'pages#index'
end

実験

app/views/index.html.erb

<%= url_for '/' %><br />
<%= url_for :root %><br />
<%= root_path %><br />
<%= root_url %><br />
<%= root_path :k => 'v' %><br />
<%= root_url :k => 'v' %><br />
<%= page_path 1 %><br />
<%= page_url 1 %><br />
<%= page_path 1, :k => 'v' %><br />
<%= page_url 1, :k => 'v' %><br />
<%= url_for :subapp_root %><br />
<%= subapp_root_path %><br />
<%= subapp_root_url %><br />
<%= subapp_page_path 1 %><br />
<%= subapp_page_url 1 %><br />
<%= subapp_page_path 1, :k => 'v' %><br />
<%= subapp_page_url 1, :k => 'v' %><br />
デフォルト(trailing_slashなし)

f:id:deeeki:20110616012124p:image

trailing_slash常に有効化の記述

config/application.rb

config.action_controller.default_url_options = { :trailing_slash => true }

※Powならtouch tmp/restart.txtしてアプリ再起動必要

trailing_slashあり

f:id:deeeki:20110616012125p:image

わかったこと

  • 一括で対応するにはconfig.action_controller.default_url_optionsを利用する
  • rootのパスがおかしくなる
    • '/'と指定すれば問題ない
  • idなどパラメータもスラッシュありになる

actionpack-3.0.8/lib/action_view/helpers/url_helper.rb

# * :trailing_slash - If true, adds a trailing slash, as in "/archive/2005/". Note that this

# is currently not recommended since it breaks caching.

キャッシュがおかしくなるという注意書きがあります。アクションキャッシュで少し実験してみた感じでは問題ありませんでした。

まとめ



4774146633
Ruby on Rails 3 アプリケーションプログラミング

関連記事