<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2054630620458032797</id><updated>2024-08-28T13:44:58.266+09:00</updated><title type='text'>Unknown-SocialWay</title><subtitle type='html'>SIerのSEからWEB系へ。&#xa;LAMP環境を用いたソーシャルシステム開発ログ。&#xa;ruby on rails,rspec,cucumber,webrat,mysql,VirtualBox,Centos,Javascript,COBOL,Oracle,apache</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2054630620458032797.post-2782999322393586580</id><published>2012-08-12T11:14:00.001+09:00</published><updated>2012-08-12T11:14:07.395+09:00</updated><title type='text'>[rails][view][helper]すべてのヘルパーを読み込む挙動をかえる</title><content type='html'>デフォルトの仕様がこれだとほんと最初は混乱しちゃいますよね。&lt;br /&gt;
&lt;br /&gt;
&quot;#{Rails.root}&quot;/config/environments/development.rb&lt;br /&gt;
&lt;br /&gt;
へ&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; config.action_controller.include_all_helpers = false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
この記述を追加すれば、コントローラーに対応したヘルパーのみしか読み込まれません。&lt;br /&gt;
&lt;br /&gt;
この挙動が嫌で、個別読み込み設定を自分で記述してたんですが、いろいろあってそれでは対応不可な事象が発生、根幹から挙動を変えてやろうと思って、算段たててソースみてたらすぐに見つけました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# In previous versions of \Rails the controller will include a helper whose&lt;br /&gt;
# name matches that of the controller, e.g., &amp;lt;tt&amp;gt;MyController&amp;lt;/tt&amp;gt; will automatically&lt;br /&gt;
# include &amp;lt;tt&amp;gt;MyHelper&amp;lt;/tt&amp;gt;. To return old behavior set +config.action_controller.include_all_helpers+ to +false+.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
こんなコメントを。&lt;/div&gt;
&lt;div&gt;
昔は個別読み込みしたみたいなんですね。&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/2782999322393586580/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://unknown-socialway.blogspot.com/2012/08/railsviewhelper.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/2782999322393586580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/2782999322393586580'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/2012/08/railsviewhelper.html' title='[rails][view][helper]すべてのヘルパーを読み込む挙動をかえる'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2054630620458032797.post-5184551674223060525</id><published>2012-05-04T21:26:00.003+09:00</published><updated>2012-05-13T13:05:00.430+09:00</updated><title type='text'>[ruby on rails3.2]発行SQLの監視＋SQLの呼び出し元特定</title><content type='html'>標題のものを探していました。&lt;br /&gt;
そしたらちょうど最近公開されたばかりの代物がありました。感謝&lt;br /&gt;
&lt;br /&gt;
Gemfileに&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; gem &quot;arproxy&quot;, &quot;~&amp;gt; 0.1.1&quot;&lt;br /&gt;
&lt;br /&gt;
を記載して、bundle install しましょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
◎「できること」&lt;br /&gt;
&lt;br /&gt;
・railsから発行されるSQLは通常アダプターを経由して、DBに送られるが、&lt;br /&gt;
そのアダプター中のSQL発信メソッドの途中でこざいく（ログの発信や、callerによる呼び出し元のトレース）をいれられる&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
◎準備&lt;br /&gt;
&lt;br /&gt;
・&amp;nbsp; gem &quot;arproxy&quot;, &quot;~&amp;gt; 0.1.1&quot;&lt;br /&gt;
・　config/initializersの配下に適当なファイルを作成し下記を記述&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Rails.root/config/initializers/arproxy.rb&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class QueryTracer &amp;lt; Arproxy::Base&lt;br /&gt;
&amp;nbsp; def execute(sql, name=nil)&lt;br /&gt;
# &amp;nbsp; &amp;nbsp;Rails.logger.debug sql　&lt;br /&gt;
# &amp;nbsp; &amp;nbsp;Rails.logger.debug caller(1).join(&quot;\n&quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; puts &quot;log.sql:#{sql}&quot;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;#トレースの中から正規表現で「gemファイル直下のライブラリ名」「rbファイル名」「rbファイルの実行メソッド」を取得して、直前の１～５番目を表示させるようにしています。&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; puts &quot;log.place:#{caller.map{|n|&quot;#{n.scan(/[^\/]+/)[6]}:#{n.scan(/[^\/]+/).last}&quot;}[1..5]}&quot;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; super(sql, name)&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Arproxy.configure do |config|&lt;br /&gt;
&amp;nbsp; config.adapter = &quot;mysql2&quot; # A DB Apdapter name which is used in your database.yml&lt;br /&gt;
&amp;nbsp; config.use QueryTracer&lt;br /&gt;
end&lt;br /&gt;
Arproxy.enable!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以上。実行してみましょう。&lt;br /&gt;
loggerの場合、実行したタイミングではなくあとでまとめて出力される仕様のようですので、私は puts だと実行したタイミングで出力されるので、コンソール出力ですがputsを利用しています。&lt;br /&gt;
&lt;br /&gt;
◎実行結果&lt;br /&gt;
&lt;br /&gt;
便利！！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
log.sql:SHOW FULL FIELDS FROM `users`&lt;br /&gt;
log.place:[&quot;&lt;b&gt;activerecord-3.2.2:abstract_mysql_adapter.rb:257:in `execute_and_free&#39;&quot;&lt;/b&gt;, &quot;activerecord-3.2.2:abstract_mysql_adapter.rb:424:in `columns&#39;&quot;, &quot;activerecord-3.2.2:schema_cache.rb:12:in `block in initialize&#39;&quot;, &quot;activerecord-3.2.2:model_schema.rb:228:in `yield&#39;&quot;, &quot;activerecord-3.2.2:model_schema.rb:228:in `default&#39;&quot;]&lt;br /&gt;
&lt;br /&gt;
log.sql:SELECT &amp;nbsp;`users`.* FROM `users` &amp;nbsp;WHERE `users`.`id` = 4 LIMIT 1&lt;br /&gt;
log.place:[&quot;activerecord-3.2.2:mysql2_adapter.rb:215:in `exec_query&#39;&quot;, &quot;activerecord-3.2.2:mysql2_adapter.rb:224:in `select&#39;&quot;, &quot;activerecord-3.2.2:database_statements.rb:18:in `select_all&#39;&quot;, &quot;activerecord-3.2.2:query_cache.rb:61:in `block in select_all&#39;&quot;, &quot;activerecord-3.2.2:query_cache.rb:75:in `cache_sql&#39;&quot;]&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/5184551674223060525/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://unknown-socialway.blogspot.com/2012/05/ruby-on-rails32sqlsql.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/5184551674223060525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/5184551674223060525'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/2012/05/ruby-on-rails32sqlsql.html' title='[ruby on rails3.2]発行SQLの監視＋SQLの呼び出し元特定'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2054630620458032797.post-3383890831163973612</id><published>2012-03-22T00:44:00.001+09:00</published><updated>2012-03-23T21:02:31.832+09:00</updated><title type='text'>DEPRECATION WARNING：the handler name or pass render :handlers =&gt; [:erb] instead</title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
なにやら怪しいメッセージ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[root77@localhost mytestapp]$ rake spec:views&lt;br /&gt;
&lt;br /&gt;
**DEPRECATION WARNING: Passing a template handler in the template name is deprecated. &lt;b&gt;You can simply remove the handler name or pass render :handlers =&amp;gt; [:erb] instead&lt;/b&gt;. (called from block (2 levels) in &amp;lt;top (required)&amp;gt; at /home/root77/app/mytestapp/spec/views/blogs/index.html.erb_spec.rb:13)&lt;br /&gt;
.**&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
▼　try①&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
・　addind following gem to&lt;b&gt; Gemfile&lt;/b&gt;. And do `bundle install` .&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;gem &#39;activeadmin&#39;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
：　the result of&amp;nbsp;try①&amp;nbsp;&amp;nbsp;was &amp;nbsp;NG!!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
so,&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
▼　try②&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
・　adding following config to&lt;b&gt; config/environments/test.rb or development.rb&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;config.reload_classes_only_on_change = true&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;config.watchable_dirs[File.join(config.root, &quot;app/admin&quot;)] = [&quot;rb&quot;]&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
：　the result of&amp;nbsp;try② &amp;nbsp;was &amp;nbsp;NG!!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
so,&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
▼　try③&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
・　changing following description&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
#&lt;b&gt;spec/views/blogs/index.html.erb_spec.rb&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
require &#39;spec_helper&#39;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;strike&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;describe &quot;blogs/index.html.erb&quot; do&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/strike&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;describe &quot;blogs/index&quot; do&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;・・・&lt;/div&gt;
&lt;div&gt;
end&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
：　the result of&amp;nbsp;try③ &amp;nbsp;was &amp;nbsp;OK!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1時間お疲れ様でした。!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe src=&quot;http://rcm-jp.amazon.co.jp/e/cm?t=httpswwwblogg-22&amp;o=9&amp;p=13&amp;l=ur1&amp;category=computerinternetbooks&amp;banner=0VS5BBRF0XHDCN8XYG82&amp;f=ifr&quot; width=&quot;468&quot; height=&quot;60&quot; scrolling=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; style=&quot;border:none;&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/3383890831163973612/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://unknown-socialway.blogspot.com/2012/03/deprecation-warningthe-handler-name-or.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/3383890831163973612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/3383890831163973612'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/2012/03/deprecation-warningthe-handler-name-or.html' title='DEPRECATION WARNING：the handler name or pass render :handlers =&gt; [:erb] instead'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2054630620458032797.post-379833483355969037</id><published>2012-03-12T22:55:00.000+09:00</published><updated>2012-06-17T22:06:03.287+09:00</updated><title type='text'>Mock（モック）とは、Stub（スタブ）とは。　まとめ</title><content type='html'>少し頭の中で整理できたので、まとめおく。&lt;br /&gt;
どちらも同じような動作をできてしまうため混同してしまうが、明確に役割を区別し、動作を限定させることが重要である。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
▼　共通&lt;br /&gt;
&lt;br /&gt;
・　代理の役割を果たす&lt;br /&gt;
&lt;br /&gt;
ex）　court（裁判官）オブジェクトが、①｛　judgeメソッドを実行すれば　false　を返す　}　ことを期待する&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
：　judgeメソッドの中身&lt;br /&gt;
&lt;br /&gt;
judge （）｛&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; h_result = ヒアリングメソッド()；&lt;br /&gt;
&amp;nbsp; result = リサーチメソッド（h_result）；&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; return result；&lt;br /&gt;
&lt;br /&gt;
｝&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
①の箇所の役割を代理で行うということ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
▼　スタブ&lt;br /&gt;
&lt;br /&gt;
スタブの役割は、&lt;br /&gt;
インターフェイスとして「確かな結果を出す（false を出す）」という役割のみを期待される。&lt;br /&gt;
上記の例からだと、①が期待できれば良いということ。&lt;br /&gt;
judgeメソッドがどような課程を経て false という結論に到達したかは、考慮にいれる必要がない場合にスタブを利用する&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
▼　モック&lt;br /&gt;
&lt;br /&gt;
モックの役割は、&lt;br /&gt;
インターフェイスとして「確かな課程を踏み」、「確かな結果を出す（false を出す）」という役割を期待される。&lt;br /&gt;
上記の例中であれば、judgeメソッド　の中の処理項目（リサーチメソッド、ヒアリングメソッド）も確かに実行されていること、かつ結果としてfalse　を返すことを代理実行する役がモックである&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/379833483355969037/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://unknown-socialway.blogspot.com/2012/03/mockstub.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/379833483355969037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/379833483355969037'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/2012/03/mockstub.html' title='Mock（モック）とは、Stub（スタブ）とは。　まとめ'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2054630620458032797.post-3098041128654831221</id><published>2012-03-05T22:34:00.002+09:00</published><updated>2012-05-08T00:30:53.593+09:00</updated><title type='text'>[rails3]「Unitテスト」と「rspec」　根本的な違いとは</title><content type='html'>Unitテストとrspecの違いについて見解を述べたい。&lt;br /&gt;
そこには部分的ではあるが、明確な思考過程の違いがあると私は思う。&lt;br /&gt;
&lt;br /&gt;
その思考過程の相違により、アプリケーションの規模が大きくなるにつれ、&lt;br /&gt;
潜在的なリスクを埋め込む可能性が大きくなる。&lt;br /&gt;
&lt;br /&gt;
だから私はrspecを選らんだ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;思考過程の違いとは&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Unitテストの場合&lt;/u&gt;&lt;/b&gt;、&lt;br /&gt;
検証したいことを優先的に考え、その後、その検証方法に従えばそのオブジェクトの動作結果がどうなるかということ（オブジェクトの動作）を最後に結論として宣言するプロセス。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;rspecの場合&lt;/u&gt;&lt;/b&gt;は、&lt;br /&gt;
オブジェクトの動作・状態変化を優先的に考え、その後、その動作がどうなることが正しいのか（検証項目）を最後に結論として宣言するプロセス。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
つまり、動作を先に考えるのか、検証項目を先に考えるのかという相違がある。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
上記は絶対的ではなく、あくまでその傾向があると言いたい。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
David Chelimsky著のThe RSpec Bookの書籍が非常に理解を助けてくれたので紹介しておく&lt;br /&gt;
&lt;br /&gt;
&lt;iframe frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm-jp.amazon.co.jp/e/cm?t=httpswwwblogg-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=4798121932&amp;amp;ref=tf_til&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;height: 240px; width: 120px;&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
上記の主張を以下で説明したい。&lt;br /&gt;
&lt;hr /&gt;
★　Unitテスト&lt;br /&gt;
&lt;br /&gt;
class BlogTest &amp;lt; ActiveSupport::TestCase&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; test &quot;blog_validate&quot; do &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; &amp;nbsp; assert_equal &lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;blog.errors.size&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;, 2, &#39;Failed to validate count&#39;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; &amp;nbsp; assert blog.errors[&lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;:user_id&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;].any?, &#39;Failed to :user_id validate&#39;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;　end&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
★　rspec&lt;br /&gt;
&lt;br /&gt;
describe BlogsController do&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; describe &quot;#index&quot; do&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; &amp;nbsp; context &quot;when logined_user&quot; do&lt;/span&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subject { &lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;response &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { should render_template(&quot;layouts/#{@crtl_head}&quot;) }&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; &amp;nbsp; end&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; end&lt;/span&gt;&lt;/b&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
（まだ、rails・rspecについては触りはじめのため、書き方について至らぬ点はご容赦いただきたい。）&lt;br /&gt;
&lt;br /&gt;
上記の&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;赤文字(&lt;/span&gt;特に&lt;span style=&quot;color: lime;&quot;&gt;緑&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;)&lt;/span&gt;&lt;/b&gt;の記述が「思考過程の違い」の顕著な例を表していると思う。&lt;br /&gt;
その次の違いが&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;青文字&lt;/span&gt;&lt;/b&gt;部分だ。
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;青文字&lt;/span&gt;&lt;/b&gt;&amp;nbsp;部分は代替手段が適応可能なので、少しの違いと表現しておく。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ではテストコードを書くときどのような思考の過程を経るのか順を追ってみよう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;①（主題）何についてテストするのかを考える&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
：これは両者共通の書き始めである。Unitテストは class BlogTest の箇所。rspecはdescribe Blog・・・の部分。そもそもテストするにはテストしたい対象を考えなくてはいけないから当然である。&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
※　極論ここから分岐する&lt;br /&gt;
&lt;b&gt;&lt;u&gt;②Unitテストの場合&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
その主題について、何をテストしたいかを考える。&lt;br /&gt;
上記記述の&lt;b style=&quot;color: blue;&quot;&gt;test &quot;blog_validate&quot; &lt;/b&gt;の部分だ。（ex : 私はBlogユニットのvalidateがうまくいくかを検証しよう）&lt;br /&gt;
Unitテストの場合、対象を定めた後すぐにどんな検証をしたいか（検証内容）を考えるはめになってしまう。&lt;br /&gt;
（ただし、このコードが極端なだけなので、書き方次第ではrspecと同等の思考過程を経ることは可能）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;②rspecの場合&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
その主題について、どんな振る舞いをするのかを考える、また、どんなコンテキストが考えられるのかを考える。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; describe &quot;#index&quot; do&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; &amp;nbsp; context &quot;when logined_user&quot; do&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
この部分である。（ex :&amp;nbsp;blog_controllerの振る舞いはindexアクションがあり、loginしてるかどうかで振る舞いが変わるね）&lt;br /&gt;
rspecの場合は、まだ検証内容を検討しない。そのオブジェクトの振る舞いや状態変化を考えなくてはならい。&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
（ここが決定的である。）
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;③Unitテストの場合&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
上記考えた検証内容にもとづき、オブジェクトの動作・状態変化を考える。&lt;br /&gt;
&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;assert_equal &lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;blog.errors.size&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;, 2&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;　　　assert blog.errors&lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;[:user_id&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;].any?&lt;/span&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;br /&gt;
記述順としては、&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;assert_equal　&lt;/span&gt;一致すると断言しよう　（検証内容）、&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;blog.errors.size, 2&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;ブログのエラー数が２つになることを（オブジェクト動作）、&lt;/b&gt;という順となる。&lt;br /&gt;
&lt;br /&gt;
ほかにもUnitテストには&lt;br /&gt;
&lt;br /&gt;
assert_generates　XX　（生み出すことを断言しよう、XXとなることを）&lt;br /&gt;
assert_recognizes　XX　（認識すると断言しよう、XXとなることを）&lt;br /&gt;
&lt;br /&gt;
というような、検証内容を優先して考え、そのおしりにオブジェクトの動作をひもづける傾向があると私は思う。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;③rspecの場合&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
上記考えたアクションとコンテキストにもとづき、最終的なオブジェクトアクション（&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;subject { &lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt; }）&lt;/span&gt;&lt;/b&gt;を考え、そのアクションがどうなるのかを最後に示す。（&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;render_template(&quot;layouts/#{@crtl_head}&quot;)&lt;/span&gt;&lt;/b&gt;）&lt;br /&gt;
つまり、オブジェクトの動作を隅々にとらえたのちに、最後に検証内容(ex : レンダーすること)を紐づけていく。（検証というよりは動作に重きを置く）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以上。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
この最後③（特に&lt;b&gt;&lt;u&gt;&lt;span style=&quot;color: lime;&quot;&gt;緑文字&lt;/span&gt;の箇所＝検証したいオブジェクトの最終的なアクション・状態の位置&lt;/u&gt;&lt;/b&gt;）がどうにもならない違いである。&lt;br /&gt;
&lt;br /&gt;
プログラムしていく上で、最後にそれを記述するからには自然に最後にそれを考える思考となってしまう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
検証内容だけを頭から考えたところで、そもそもオブジェクトの振る舞い・状態変化を捉えなければ適切な検証を洗い出すことはできないと私は考え、rspecを選んだ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
おそらく&lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;青文字&lt;/b&gt;&lt;/span&gt;の箇所は、書き方次第でどうにかなる。&lt;br /&gt;
&lt;br /&gt;
（しかし、主題やサブ主題、コンテキストを明確にテストコードに埋め込めるrspec がより有利のではないだろうか。Unitテストは３時間ほどしか触っていないので、誤認であれば申し訳ない）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
上記はテストツールの触りはじめの所感である。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/3098041128654831221/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://unknown-socialway.blogspot.com/2012/03/rails3unitrspec.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/3098041128654831221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/3098041128654831221'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/2012/03/rails3unitrspec.html' title='[rails3]「Unitテスト」と「rspec」　根本的な違いとは'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2054630620458032797.post-926175055059144209</id><published>2012-03-03T14:03:00.000+09:00</published><updated>2012-03-05T22:46:34.941+09:00</updated><title type='text'>rspecでruby on rails3(devise)のcontrollerをいい感じに書いてみた～part2</title><content type='html'>&lt;br /&gt;
前回の投稿の続きであるが、&lt;br /&gt;
さらに、GETアクションに加え、CREATE・UPDATEアクションも考慮して汎用ロジックを組んでみました。&lt;br /&gt;
&lt;br /&gt;
前回のエントリも参考にしていだだきたい。&lt;br /&gt;
[　&lt;a href=&quot;http://unknown-socialway.blogspot.com/2012/02/rspecrails3controller.html&quot;&gt;rspecでruby on rails3(devise)のcontrollerをいい感じに書いてみた～part1&lt;/a&gt;　]&lt;br /&gt;
&lt;br /&gt;
【環境】&lt;br /&gt;
devise&#39;2.0.4&#39;&lt;br /&gt;
rails&#39;3.1.3&#39;&lt;br /&gt;
rspec-rails&#39;2.8.0&#39;&lt;br /&gt;
&lt;br /&gt;
【テスト概要】&lt;br /&gt;
&lt;br /&gt;
アクションごとに&lt;br /&gt;
&lt;br /&gt;
ログインしている場合&lt;br /&gt;
・取得オブジェクトが参照できる&lt;br /&gt;
&lt;br /&gt;
：renderingを期待している場合&lt;br /&gt;
　 ・responseが200[OK]である&lt;br /&gt;
&amp;nbsp;　・正しいtemplateをレンダーする&lt;br /&gt;
：redrectを期待している場合&lt;br /&gt;
&amp;nbsp; &amp;nbsp;・正しいリダイレクト先へいく
&lt;br /&gt;
&lt;br /&gt;
ログインしてない場合&lt;br /&gt;
&amp;nbsp; &amp;nbsp;・取得オブジェクトが参照できない&lt;br /&gt;
&amp;nbsp; &amp;nbsp;・正しいリダイレクト先へいく&lt;br /&gt;
&lt;br /&gt;
をテストすることを想定。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
describe BlogsController do&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; before(:each) do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @crtl = described_class.to_s.downcase&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @crtl_head = @crtl.split(/controller/)[0]&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; def do_req(req,action,params)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; case req&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when &quot;get&quot; then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; get action, params&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when &quot;post&quot; then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; post action, params&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when &quot;put&quot; then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; put action, params&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when &quot;delete&quot; then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; delete action, params&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#login_user&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; login_user &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; it { subject.current_user.should be }&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; shared_context &quot;Do_Reqest&quot; do |req,action,params,expects,objs,result,template,rto_path|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; before do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @len = 2 &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @len = @len- 1 if action == :index &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @obj = @crtl_head[0..@crtl_head.length-@len]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; context &quot;in logined_user&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; login_user&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; before { do_req(req,action,params) }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; if objs.nil?&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { assigns(@obj.to_sym).should be ,&quot;assigns(#{@obj.to_sym})&quot;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; objs.each do |obj|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { assigns(obj).should be , &quot;assigns(#{obj})&quot; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; case result&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when &quot;true&quot; then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { assigns(:result).should be_true , &quot;:result=&amp;gt;#{assigns(:result)}&quot;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when &quot;false&quot; then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { assigns(:result).should_not be_nil }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { assigns(:result).should be_false , &quot;:result=&amp;gt;#{assigns(:result)}&quot;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; case expects&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when &quot;render&quot; then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { response.should be_success }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subject { response }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { should render_template(&quot;layouts/#{@crtl_head}&quot;) }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it &quot;render template&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; template = @crtl_head + &quot;/&quot; + action.to_s.delete(&quot;:&quot;) if template == nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; should render_template(template), &quot;template=&amp;gt;#{template}&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when &quot;redirect&quot; then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if rto_path == nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { subject.response.should redirect_to(blog_path(assigns(:blog))),&quot;redirect_to=&amp;gt;#{blog_path(assigns(:blog))}&quot; } &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { subject.response.should redirect_to(eval(rto_path)), &quot;rto_path=&amp;gt;#{rto_path}&quot;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; context &quot;in no_logined_user&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; before { do_req(req,action,params) }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; it { subject.current_user.should be_nil } &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; if objs.nil?&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { assigns(@obj.to_sym).should be_nil ,&quot;assigns(#{@obj.to_sym})&quot;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; objs.each do |obj|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { assigns(obj).should be_nil , &quot;assigns(#{obj})&quot; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; it { response.should redirect_to(user_session_path) } &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#index&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;Do_Reqest&quot;,&quot;get&quot;,:index&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#new&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;Do_Reqest&quot;,&quot;get&quot;,:new&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#show&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @blog = Factory.build(:blogc)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;Do_Reqest&quot;,&quot;get&quot;,:show,id: @blog.to_param&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#edit&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @blog = Factory.build(:blogc)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;Do_Reqest&quot;,&quot;get&quot;,:edit,id: @blog.to_param&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#create_true&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @blog = Factory.build(:blogc)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @req = &quot;post&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @action = :create&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @params = {blog: @blog.attributes}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @expects = &quot;redirect&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @objs = nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @result = &quot;true&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @template = nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @rto_path = nil&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;Do_Reqest&quot;,@req,@action,@params,@expects,@objs,@result,@template,@rto_path&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#create_false&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @req = &quot;post&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @action = :create&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @params = {:blog =&amp;gt; nil}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @expects = &quot;render&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @objs = nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @result = &quot;false&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @template = &quot;blogs/new&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @rto_path = nil&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;Do_Reqest&quot;,@req,@action,@params,@expects,@objs,@result,@template,@rto_path&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#update_true&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @blog = Factory.build(:blogc)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @req = &quot;put&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @action = :update&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @params = {id: @blog.to_param, blog: @blog.attributes}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @expects = &quot;redirect&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @objs = nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @result = &quot;true&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @template = nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @rto_path = nil&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;Do_Reqest&quot;,@req,@action,@params,@expects,@objs,@result,@template,@rto_path&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#update_false&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @blog = Factory.build(:blogc)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @req = &quot;put&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @action = :update&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @params = {id: @blog.to_param, blog: {id: nil ,title: nil}}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @expects = &quot;render&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @objs = nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @result = &quot;false&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @template = &quot;blogs/edit&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @rto_path = nil&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;Do_Reqest&quot;,@req,@action,@params,@expects,@objs,@result,@template,@rto_path&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#destroy_true&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @blog = Factory.build(:blogc)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @req = &quot;delete&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @action = :destroy&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @params = {id: @blog.to_param}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @expects = &quot;redirect&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @objs = nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @result = &quot;true&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @template = nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @rto_path = &quot;blogs_path&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;Do_Reqest&quot;,@req,@action,@params,@expects,@objs,@result,@template,@rto_path&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
BlogsControllerのクリエイトとアップデートアクションです&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;# POST /blogs&lt;br /&gt;
&amp;nbsp; # POST /blogs.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; def create&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @blog = Blog.create(current_user,params[:blog])&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @result = @blog.save&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; respond_to do |format|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; if @result&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format.html { redirect_to @blog, notice: &#39;Blog was successfully updated&#39; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format.json { render json: @blog, status: :created, location: @blog }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format.html { render action: &quot;new&quot; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format.json { render json: @blog.errors, status: :unprocessable_entity }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; # PUT /blogs/1&lt;br /&gt;
&amp;nbsp; # PUT /blogs/1.json&lt;br /&gt;
&amp;nbsp; def update&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @blog = Blog.find(params[:id])&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @result = @blog.update_attributes(params[:blog])&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; respond_to do |format|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; if @result&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format.html { redirect_to @blog, notice: &#39;Blog was successfully updated.&#39; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format.json { head :ok }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format.html { render action: &quot;edit&quot; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format.json { render json: @blog.errors, status: :unprocessable_entity }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/926175055059144209/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://unknown-socialway.blogspot.com/2012/03/rspecrails3devisecontrollerpart2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/926175055059144209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/926175055059144209'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/2012/03/rspecrails3devisecontrollerpart2.html' title='rspecでruby on rails3(devise)のcontrollerをいい感じに書いてみた～part2'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2054630620458032797.post-1470610344291743258</id><published>2012-02-26T23:35:00.001+09:00</published><updated>2012-03-02T23:03:54.596+09:00</updated><title type='text'>DEPRECATION WARNINGがうざい件</title><content type='html'>DEPRECATION WARNING: get is deprecated and will be removed from Rails 3.2.&lt;br /&gt;
DEPRECATION WARNING: ref is deprecated and will be removed from Rails 3.2.&lt;br /&gt;
DEPRECATION WARNING: new is deprecated and will be removed from Rails 3.2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
上記のメッセージがうざかった。&lt;br /&gt;
調べてみるとdeviseのバージョンが古いせいみたい。&lt;br /&gt;
&#39;2.0.4&#39;　へバージョンアップ！！！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
spork使ってる方は、要再起動&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/1470610344291743258/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://unknown-socialway.blogspot.com/2012/02/deprecation-warning.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/1470610344291743258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/1470610344291743258'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/2012/02/deprecation-warning.html' title='DEPRECATION WARNINGがうざい件'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2054630620458032797.post-7871225310391445935</id><published>2012-02-26T23:28:00.001+09:00</published><updated>2012-03-03T22:42:36.401+09:00</updated><title type='text'>rspecでruby on rails3(devise)のcontrollerをいい感じに書いてみた～part1</title><content type='html'>今日初めてrspecを試してみた。&lt;br /&gt;
unit:testよりいい&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
【環境】&lt;br /&gt;
devise&#39;2.0.4&#39;&lt;br /&gt;
rails&#39;3.1.3&#39;&lt;br /&gt;
rspec-rails&#39;2.8.0&#39;&lt;br /&gt;
&lt;br /&gt;
【テスト概要】&lt;br /&gt;
&lt;br /&gt;
アクションごとに&lt;br /&gt;
&lt;br /&gt;
ログインしている場合&lt;br /&gt;
・取得オブジェクトが参照できる&lt;br /&gt;
・正しいtemplateをレンダーする&lt;br /&gt;
&lt;br /&gt;
ログインしてない場合&lt;br /&gt;
・取得オブジェクトが参照できない&lt;br /&gt;
・正しいリダイレクト先へいく&lt;br /&gt;
&lt;br /&gt;
をテストすることを想定。&lt;br /&gt;
&lt;br /&gt;
ポイントは shared_context ,share_examples_for を用いて上記のテストを共通化しているところだ。&lt;br /&gt;
shared_context&amp;nbsp;はいくつかのサイトで参照したが、引数を渡しているものは見かけなかったので、その点も参考になれば。&lt;br /&gt;
&lt;br /&gt;
この記述を使えば、index ,newやらアクションごとに重複したbehaviorを記述しなくていい&lt;br /&gt;
&lt;br /&gt;
レビューよろしくお願いします。&lt;br /&gt;
質問も受け付けてます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&quot;rails_ROOT&quot;/spec/controllers/blogs_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
require &#39;spec_helper&#39;&lt;br /&gt;
&lt;br /&gt;
describe BlogsController do&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; before(:each) do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @crtl = described_class.to_s.downcase&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @crtl_head = @crtl[0..(@crtl.length-11)]&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#login_user&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; login_user &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; it { subject.current_user.should be }&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; shared_context &quot;GET&quot; do |action,block,objs,template|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; before do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @len = 2 &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @len = @len- 1 if action == :index &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @obj = @crtl_head[0..@crtl_head.length-@len]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; context &quot;#in logined_user&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; login_user&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; before { get action , block }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; it &quot;#object should be&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if objs.nil?&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assigns(@obj.to_sym).should be&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; objs.each do |obj|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assigns(obj).should be&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; it { response.should be_success }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; subject { response }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; it { should render_template(&quot;layouts/#{@crtl_head}&quot;) }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; it &quot;#render template&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; template = @crtl_head + &quot;/&quot; + action.to_s.delete(&quot;:&quot;) if template == nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; should render_template(template)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; context &quot;#in no_logined_user&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; before { get action , block }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; it { subject.current_user.should be_nil } &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; it &quot;#object should be_nil&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if objs.nil?&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assigns(@obj.to_sym).should be_nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; objs.each do |obj|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it { assigns(obj).should be_nil }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; it { response.should redirect_to(user_session_path) } &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;# [★]各アクションの記述は以下のような最低限の情報だけ渡せばOK
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#index&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;GET&quot;,:index&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#new&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;GET&quot;,:new&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#show&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;GET&quot;,:show,{:id =&amp;gt; 47}&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; describe &quot;#edit&quot; do&lt;br /&gt;
&amp;nbsp; &amp;nbsp; include_context &quot;GET&quot;,:edit,{:id =&amp;gt; 47}&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;br /&gt;
ちなみに、&lt;br /&gt;
[★]の部分をさらに自動化するため&lt;br /&gt;
BlogsController.instance_of_methods(false).each でぐるぐる回そうかと思ったが&lt;br /&gt;
&lt;br /&gt;
:_one_time_conditions_valid_70?,&lt;br /&gt;
:_one_time_conditions_valid_72?,&lt;br /&gt;
:index,&lt;br /&gt;
:show,&lt;br /&gt;
:new,&lt;br /&gt;
:edit,&lt;br /&gt;
:create,&lt;br /&gt;
:update,&lt;br /&gt;
:destroy,&lt;br /&gt;
:_run__566814383__process_action__542294131__callbacks&lt;br /&gt;
&lt;br /&gt;
なんか余計なメソッドまで出てきやのでとりあえずスルー&lt;br /&gt;
rails初心者なのでまだこれがなんなのか不明です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
さらに、postメソッドも考慮した形も書きました&lt;br /&gt;
&lt;a href=&quot;http://unknown-socialway.blogspot.com/2012/03/rspecrails3devisecontrollerpart2.html&quot;&gt;rspecでruby on rails3(devise)のcontrollerをいい感じに書いてみた～part2&lt;/a&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/7871225310391445935/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://unknown-socialway.blogspot.com/2012/02/rspecrails3controller.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/7871225310391445935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/7871225310391445935'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/2012/02/rspecrails3controller.html' title='rspecでruby on rails3(devise)のcontrollerをいい感じに書いてみた～part1'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2054630620458032797.post-745187609043859024</id><published>2011-12-30T14:49:00.002+09:00</published><updated>2012-03-23T21:15:07.167+09:00</updated><title type='text'>[Linux]ハードリンク・シンボリックリンクの基礎　と　リンクを含んだコピー操作検証</title><content type='html'>バックアップ・ディスク拡張などを考えるうちに、初心者のため手軽にcp/gzipコマンドなどを利用して異なるディスク間でファイルを入れ替えできないかと安易に試してみたが、&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gzip: /usr/share/icons/gnome/16x16/devices/mouse.png: Too many levels of symbolic links&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
gzip: /usr/share/kdump/firstboot_kdump.pyo has 1 other link &amp;nbsp;-- unchanged&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
cp: cannot create symbolic link `/home/root77/mybox/usr/b/indx-sl.ejs&#39;: Protocol error&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
まぁ当然のごとくリンクがうまく働かない。&lt;br /&gt;
しかし、リンクが働かないとは具体的にどういうことなのか、リンクの基本をまとめつつ、整理したいと思います。（間違っている箇所があれば、謹み深いご指摘を賜りたい！）&lt;br /&gt;
&lt;br /&gt;
[基礎の確認]&lt;br /&gt;
&lt;br /&gt;
まずそもそもLinuxのファイル管理について、&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;i&gt;Linuxではファイルをディスクに保存すると、重複しないiノード番号が割り当てられる。 全てのファイルには、対応するiノードが存在し、iノードにはディスク上のファイルに 関する情報が格納されている。&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;Linuxのファイルシステムでは、ファイルの実体がiノード内に記録された iノード番号によって管理されている。&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
{抜粋}　http://www.geocities.jp/lpic949/hardlinksymboliclink/　より&lt;/div&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;br /&gt;
とある、そしてもとのファイル名をtodayとすると&lt;br /&gt;
・&lt;b&gt;ハードリンクとは、&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;todayと同じinode番号をもつもの&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
・&lt;b&gt;シンボリックリンクとは、&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;「today ファイルへの参照」を参照するinode番号（新規発行される番号）をもつもの&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
となる。&lt;br /&gt;
下記のサイトの図がわかりやすい。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
http://okinawaturi.sakura.ne.jp/wp/saba/hlink/&lt;br /&gt;
&lt;img src=&quot;http://okinawaturi.sakura.ne.jp/wp/saba/files/2011/07/hdl_slink.jpg&quot; /&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
じゃあ、リンクを含んだフォルダをコピーするとどうなるか検証してみる（異なるパーティションやファイルファイルシステムへも）&lt;br /&gt;
&lt;br /&gt;
実機で下記検証する。&lt;br /&gt;
&lt;br /&gt;
・リンクを含んフォルダを同一のパーティションにコピー&lt;br /&gt;
・リンクを含んフォルダを異なるパーティションで同一ファイルシステムにコピー&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
・リンクを含んフォルダを異なるパーティションで異なるファイルシステムにコピー&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
[環境]&lt;br /&gt;
&lt;br /&gt;
※　ゲストのCentOS にて検証&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14px; line-height: 20px;&quot;&gt;Oracle VM VirtualBox ver 4.0.10&lt;br /&gt;
ホストOS Windows Vista&lt;br /&gt;
ゲストOS CentOS6 &amp;nbsp;2.6.32-71.el6.i686&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
[準備]&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;１． ホームディレクトリ内に　 a　と　b &amp;nbsp;というディレクトリを作成し、a　の中へ index.ejs というファイルを作成。&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;２． bディレクトリ内で下記２行のコマンドを実行し、hardlink symboliclink　をそれぞれ作成　&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
（bディレクトからaのindex.ejsへリンクを張る構成を作る）&lt;br /&gt;
&lt;br /&gt;
ln ../a/index.ejs indx-hl.ejs&lt;br /&gt;
ln -s ../a/index.ejs &amp;nbsp;indx-sl.ejs&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;３．ホームディレクトリで下記３コマンドを実行し、コピーを作成する&lt;/u&gt;&lt;/b&gt;。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
cp -ar b b2　　　　　　　　①（同一のパーティションにコピー）&lt;br /&gt;
cp -ar b ~/1dev/b　　　　 ②（異なるパーティションで同一ファイルシステムにコピー）&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
cp -ar b ~/mybox/usr/b　 ③（異なるパーティションで異なるファイルシステムにコピー）&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
※ ちなみに、③のコピーで下記のエラーがでる&lt;br /&gt;
[root77@localhost ~]$ cp -ar b ~/mybox/usr/b&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
cp: cannot create symbolic link `/home/root77/mybox/usr/b/indx-sl.ejs&#39;: Protocol error&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;４、inode番号の確認&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;
[root77@localhost ~]$ ls -i a&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
388610 index.ejs&lt;/div&gt;
&lt;br /&gt;
[root77@localhost ~]$ ls -i b&lt;br /&gt;
388610 indx-hl.ejs &amp;nbsp;388612 indx-sl.ejs&lt;br /&gt;
&lt;br /&gt;
[root77@localhost ~]$ ls -i b2&lt;br /&gt;
388615 indx-hl.ejs &amp;nbsp;388614 indx-sl.ejs&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;
[root77@localhost ~]$ ls -i 1dev/b&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
131075 indx-hl.ejs &amp;nbsp;131074 indx-sl.ejs&lt;br /&gt;
&lt;br /&gt;
[root77@localhost ~]$ ls -i ~/mybox/usr/b&lt;br /&gt;
23656 indx-hl.ejs&lt;br /&gt;
&lt;div&gt;
※　③のコピーでシンボリックリンク自体の作成に失敗しているため、ファイルは一つ&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;５.ファイルを開けるか確認する。&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
b 　：　両方開ける&lt;br /&gt;
&lt;br /&gt;
b2 &amp;nbsp;：　両方開ける&lt;br /&gt;
&lt;br /&gt;
1dev/b &amp;nbsp;：　ハードリンクのみ開ける　（ls ではシンボリックを確認できるが cat で　No such file or directory　エラーとなる）&lt;br /&gt;
&lt;br /&gt;
[root77@localhost ~]$ cat 1dev/b/indx-sl.ejs&lt;br /&gt;
cat: 1dev/b/indx-sl.ejs: No such file or directory&lt;br /&gt;
&lt;br /&gt;
/mybox/usr/b　：　ハードリンクのみ開ける　（シンボリック自体はつくられていない）　&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
・・・&lt;/div&gt;
&lt;div&gt;
むむむ、てきとうにやったので参考程度にしていただきたい&lt;br /&gt;
&lt;br /&gt;
linuxを一歩踏み込んで学習する場合は下記の２つ書籍が非常に有用であった&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;iframe src=&quot;http://rcm-jp.amazon.co.jp/e/cm?t=httpswwwblogg-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4774145017&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;npa=1&amp;f=ifr&quot; style=&quot;width:120px;height:240px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
&lt;iframe src=&quot;http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;npa=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=httpswwwblogg-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;ref=tf_til&amp;asins=4774146013&quot; style=&quot;width:120px;height:240px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/745187609043859024/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://unknown-socialway.blogspot.com/2011/12/linux.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/745187609043859024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/745187609043859024'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/2011/12/linux.html' title='[Linux]ハードリンク・シンボリックリンクの基礎　と　リンクを含んだコピー操作検証'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2054630620458032797.post-4737023924166669471</id><published>2011-12-23T17:45:00.000+09:00</published><updated>2011-12-23T17:45:56.952+09:00</updated><title type='text'>[VirtualBox] Guest Additions インストール</title><content type='html'>VirtualBoxにGuest Additionsをインストールする。&lt;br /&gt;
&lt;br /&gt;
インストールすることで、&lt;br /&gt;
&lt;br /&gt;
・VirtualBoxのゲストOSとホストOSで共有フォルダを作成する&lt;br /&gt;
・VirtualBox内のウィンドウを大画面で表示する&lt;br /&gt;
・マウスコントロールをいちいちゲストOSとホストOSで切り替えないようにする&lt;br /&gt;
&lt;br /&gt;
上記のことが可能になるため。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
【環境】&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oracle VM VirtualBox ver 4.0.10&lt;br /&gt;
ホストOS Windows Vista&lt;br /&gt;
ゲストOS CentOS6 &amp;nbsp;2.6.32-71.el6.i686&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
【手順】&lt;br /&gt;
&lt;br /&gt;
1.まず、VBoxに付属しているVBoxGuestAdditions.isoをゲストOSへマウントする。&lt;br /&gt;
デフォルトの場所は、おそらくこちら&lt;br /&gt;
C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso&lt;br /&gt;
デバイスよりCDディスクデバイスの選択でマウントする&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-oocPr_3g9y0/TvQ6Pvcr_XI/AAAAAAAAAAc/dpvhEtFkXuw/s1600/WS000000.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;40&quot; src=&quot;http://1.bp.blogspot.com/-oocPr_3g9y0/TvQ6Pvcr_XI/AAAAAAAAAAc/dpvhEtFkXuw/s320/WS000000.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
2.　・GUIで実行&lt;br /&gt;
デスクトップに出てきていると思うので、オートランの問い合わせで開くを選択すれば実行。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-WQKECkWb1vc/TvQ7trnyfFI/AAAAAAAAAAo/tCKfVSPgZ8U/s1600/WS000001.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://3.bp.blogspot.com/-WQKECkWb1vc/TvQ7trnyfFI/AAAAAAAAAAo/tCKfVSPgZ8U/s320/WS000001.JPG&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
・CUIで実行&lt;br /&gt;
&lt;br /&gt;
/media にマウントされているので&lt;br /&gt;
&lt;br /&gt;
su でスーパーユーザとなり、VBoxLinuxAdditions.run　を実行すればOK。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
＜問題点１＞&lt;br /&gt;
シンプルに書いたが、私はここでハマッてしまった。パッケージ不足が原因らしい&lt;br /&gt;
&lt;br /&gt;
・gcc&lt;br /&gt;
・kernel-devel&lt;br /&gt;
&lt;br /&gt;
＜対策＞&lt;br /&gt;
&lt;br /&gt;
・yum install gcc&lt;br /&gt;
・yum install&amp;nbsp;kernel-devel&lt;br /&gt;
&lt;br /&gt;
で最新のバージョンへ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
（問題のログ　一部省略）&lt;br /&gt;
&lt;br /&gt;
# ./VBoxLinuxAdditions.run&lt;br /&gt;
Verifying archive integrity… All good.&lt;br /&gt;
Removing installed version 4.0.2 of VirtualBox Guest Additions…&lt;br /&gt;
Removing existing VirtualBox DKMS kernel modules [ OK ]&lt;br /&gt;
Removing existing VirtualBox non-DKMS kernel modules [ OK ]&lt;br /&gt;
Building the VirtualBox Guest Additions kernel modules&lt;br /&gt;
The headers for the current running kernel were not found. If the following&lt;br /&gt;
module compilation fails then this could be the reason.&lt;br /&gt;
The missing package can be probably installed with&lt;br /&gt;
yum install kernel-devel-2.6.32-71.el6.i686&lt;br /&gt;
[失敗]&lt;br /&gt;
Your system does not seem to be set up to build kernel modules.&lt;br /&gt;
Look at /var/log/vboxadd-install.log to find out what went wrong.&lt;br /&gt;
Once you have corrected it, you can run&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
＜問題２＞&lt;br /&gt;
&lt;br /&gt;
またもや失敗。カーネルのバージョンが新しくなりすぎたみたいだ&lt;br /&gt;
&lt;br /&gt;
＜対策＞&lt;br /&gt;
&lt;br /&gt;
カーネルをダウングレードする。&lt;br /&gt;
&lt;br /&gt;
まず、&lt;a href=&quot;http://rpm.pbone.net/index.php3/stat/4/idpl/15983922/dir/scientific_linux_6/com/kernel-devel-2.6.32-71.el6.i686.rpm.html&quot;&gt;rpm系のサイト&lt;/a&gt;から、警告で出ているカーネルのバージョン（kernel-devel-2.6.32-71.el6.i686）を　&lt;b&gt;wget &lt;/b&gt;　コマンドでダウンロード。&lt;br /&gt;
&lt;br /&gt;
そして、ダウングレード用のrpm オプションをつけて&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: #ccccff; font-family: monospace;&quot;&gt;rpm -Uhv --oldpackage&amp;nbsp;&lt;/span&gt; kernel-devel-2.6.32-71.el6.i686&amp;nbsp;&lt;span style=&quot;background-color: #ccccff; font-family: monospace;&quot;&gt;.rpm&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
できました！！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;【参考サイト】&lt;br /&gt;
・&lt;a href=&quot;http://tobysoft.net/wiki/index.php?Ubuntu%2FVirtualBox%2F%B6%A6%CD%AD%A5%D5%A5%A9%A5%EB%A5%C0%BC%FE%A4%EA&quot;&gt;Guest Additionsインストール&lt;/a&gt;&lt;br /&gt;
・&lt;a href=&quot;http://www.atmarkit.co.jp/flinux/rensai/linuxtips/796downgrdrpm.html&quot;&gt;カーネルダウングレード&lt;/a&gt;1&lt;br /&gt;
・&lt;a href=&quot;http://d.hatena.ne.jp/kudzu/20080925/1222330718&quot;&gt;カーネルダウングレード２&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://unknown-socialway.blogspot.com/feeds/4737023924166669471/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://unknown-socialway.blogspot.com/2011/12/virtualbox-guest-additions.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/4737023924166669471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2054630620458032797/posts/default/4737023924166669471'/><link rel='alternate' type='text/html' href='http://unknown-socialway.blogspot.com/2011/12/virtualbox-guest-additions.html' title='[VirtualBox] Guest Additions インストール'/><author><name>Unknown</name><uri>http://www.blogger.com/profile/00089215483642406058</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-oocPr_3g9y0/TvQ6Pvcr_XI/AAAAAAAAAAc/dpvhEtFkXuw/s72-c/WS000000.JPG" height="72" width="72"/><thr:total>0</thr:total></entry></feed>