キリンめも(技術)

記事を書いています #rails #swift #JS #UE4 #unity

Railsの会11日目「Railsテスト」

今日の進歩です。

f:id:geta206:20170308145349p:plain

agenda。

  1. リファクタリング
  2. ステータスコード
  3. リダイレクト(HTTP)
  4. 短縮URL
  5. リダイレクション
  6. テスト成功例・失敗例
  7. スプリングサーバー
  8. キャッシュ
  9. スプリング
  10. エラーまとめ
  11. まとめ

 

テストについてまとめた

テスト開発サイクルは
1「失敗するテストを先に書く」
2「アプリケーションのコードを書いて成功させる」
3「必要な時リファクタリングする」 の順番
 
テストを書く場所     static_pages_controller_spec.rb
 

----------------------------------------------------------------------------------------

1.リファクタリング

コード読みやすくしたりすることだよ!

リファクタリングは「class」の名前をわかりやすくしたり、コメントを追加したりし理解しやすいコード に修正する。

  ⚠️バグが増えることもある。

 

リファクタリングとは、ソフトウェアの外部的振る舞いを保ちつつ、理解や修正が簡単になるように、内部構造を改善することです。

リファクタリングとは何か?

 

takatoshiono.hatenablog.com

 

 

2.ステータスコード

エラーの番号。よく見るのが404かな…。

分類コードメッセージ1.01.1
情報
(Informational)
100 Continue ×
101 Switching Protocols ×
成功
(Success)
200 OK
201 Created
202 Accepted
203 Non-Authoritative Information ×
204 No Content
205 Reset Content ×
206 Partial Content ×
転送
(Redirection)
300 Multiple Choices ×
301 Moved Permanently
302 Found
Moved Temporarily
303 See Other ×
304 Not Modified
305 Use Proxy ×
クライアントエラー
(Client Error)
400 Bad Request
401 Unauthorized
402 Payment Required ×
403 Forbidden
404 Not Found
405 Method Not Allowed ×
406 Not Acceptable ×
407 Proxy Authentication Required ×
408 Request Time-out ×
409 Conflict ×
410 Gone ×
411 Length Required ×
412 Precondition Failed ×
413 Request Entity Too Large ×
414 Request-URI Too Large ×
415 Unsupported Media Type ×
サーバエラー
(Server Error)
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Time-out ×
505 HTTP Version not supported ×

 

 

HTTPステータス コード一覧

よく見るエラーは覚えておこう…😊

 

3.リダイレクト(HTTP)

リダイレクトとは、サイトにアクセスしようとしたユーザーを、最初にリクエストされた URL とは別の URL に移動させることです。 別の URL へのリダイレクトには正当な理由がある場合もあります。 たとえば、サイトを新しいアドレスに移転した場合や、複数のページを 1 つに統合した場合などです。

https://support.google.com/webmasters/answer/2721217?hl=jp

 

4.短縮URL

 そのまんまの意味。

短縮 URL を使うメリット

短縮 URL は、ただリンクを短く表現できるだけではありません。
他のメリットを挙げてみました。

クリック率が上がる

短縮URLと短縮されていない長いURLで比較すると、
短縮URLの方が圧倒的にクリック率が高いという統計があります。

手書き・口頭で伝えられる

どのサービスも短縮後の URL は 20 文字前後なので、
電話口やホワイトボードなどへの手書きでもなんとか伝えられるでしょう。

プロっぽく見える

まだまだ一般なレベルで認知されているとは言えないサービスなので、
使うとプロっぽく見えます(笑)

アクセス解析がある

Google URL Shortener や Bit.ly であれば、
短縮URLのうしろに「+」をつけることで、
アクセス解析の画面が表示されます。

http://www.dreamhive.co.jp/201408/2596

 

もちろんデメリットも

 

リンク先がどんなサイトなのかわからない

どのサイトにリンクされているかをURLで判断できないので、
フィッシングサイトにも引っかかりやすくなります。

もっとも悪用されたのがこの機能でらしいです。

URL が覚えられない

短縮するために、数値や記号の羅列になっているため、
記憶するのに適していません。

ブランド化が難しい

URL が覚えられないのと同様に
せっかくのあなたのドメインが隠れてしまうので、
リンクを開くユーザーは自分がどのサイトにアクセスしているか
分からなくなってしまいます。

遅くなる

リダイレクトが発生するので経由するサーバーが増え、
その分表示速度が低下します。

作った短縮 URL は消せない

短縮 URL のリンク先は変更できません。

一度作ったリンクはそのサービスが存在する限り利用可能ですので、
無価値な URL を世の中に残してしまいます。

サービスが永続的に存在するかがわからない

どのサービスも未来永劫使えるか把握できず、
サービスが止まれば短縮 URL は使えなくなります。

あの Google でさえ、
不要と判断したサービス(Reader など)は撤退する世の中です。

http://www.dreamhive.co.jp/201408/2596

 

5.リダイレクション

標準入力にはデフォルトが割り当てられていて、これをユーザが自由に変更できる切り替えのこと。(入出力の切り替え)

 通常、コマンド入力はキーボードから行い、その結果を画面に出力し、エラーがあればその内容も画面に出力します。これは、以下のような定義があるからです。

 標準入力(/dev/stdin) = キーボード

 標準出力(/dev/stdout) = 画面

 標準エラー出力(/dev/stderr) = 画面

 「/dev/stdin」などは特殊ファイルと呼ばれ、各入出力装置をファイルとして操作できるようにしたものです。そして、この定義を変更することで、キーボード以外の装置から入力し、画面以外の装置へ出力することが可能になります。

 この切り替えのことをリダイレクションといいます。

 

codezine.jp

 びっくりするくらい何言っているのか分からないぞ…!😭

 いろんな記事見たけど説明が意味ワカラナイ

6.テストの成功・失敗

  • 成功したとき ・・・ ... で表す。
  • 失敗したとき ・・・  F  又は  E で表す。 
  • 失敗例
    NameError: undefined local variable or method `static_pages_about_url'

     意味:aboutページのurlがないよ

     解決策:ルーティングファイルを修正

 

7.スプリングサーバー

pringはrubyで実装されているプロリーダ。

プリローダとは

先取り、先読みという意味。

必要なデータを先取りして読み込む時間を短くする技術。

youtubeに使われている。 

 

8.キャッシュ

パソコンが一時的にほぞんしているデータのこと。

メリット

  •  URLが保存されるのでいきたいサイトにすぐ行ける。

デメリット

  • システムを更新したとき、反映されないことがある。

 

9.スプリング

  Spring も Rails application preloader と総称されるソフトウェアの仲間です。テストを実行する度に Rails アプリケーションをロードするのは時間の無駄なので、サーバとしてプリロードしておき、テストの実行時間短縮を目的としたものです。古くから使われているものとしては、Spork というものがあります。しかし、Spork については簡単に触れるだけにとどめます。

Spork/Zeus/Spring によるテスト実行時間の短縮 - RSpec/Capybara入門 - Ruby on Rails with OIAX

 

使い方

まず、Gemfile に以下のコードを追加します:

group :development do
  gem 'spring'
  gem 'spring-commands-rspec'
end

そして、bundle install コマンドを実行します。

何も準備は要りません。いきなり、テストを実行できます:

 

$ spring rspec spec/

Zeus の場合と異なり、Spring はバックグランドで黙ってサーバを起動するので、私たちが別ウィンドウで明示的にサーバを起動する必要がないのです。

 

常に Spring を使って RSpec のテストを実行するのなら、bin ディレクトリの rspec コマンドを書き換えてしまうといいでしょう。次のコマンドを実行すると、自動的に書き換えが完了します:

$ spring binstub rspec

bundle binstub rspec を実行すると bin/rspec の中身が元に戻ってしまうので注意してください。

すると、今後は Spring の存在を意識せずに RSpec のテストを実行できます:

$ bin/rspec spec/

現行の Sinope (この連載で作っている Rails アプリケーション)のテストを私の PC で実行してみたところ、初回はサーバの起動に時間がかかるため 4.03 秒かかりましたが、2回目からは 2.74 秒で終わりました。

Spork/Zeus/Spring によるテスト実行時間の短縮 - RSpec/Capybara入門 - Ruby on Rails with OIAX

おまけ エラーまとめ

1 'about'というページがないよ!!ルートが設定されていない (routes.rb) 

f:id:geta206:20170309235522p:plain

 

2  <Home | Ruby...App> の書き方が下の正しい記述と見比べて間違っているよ!

(この場合空白がない)

f:id:geta206:20170309235628p:plain

 

3  aboutページのテンプレートがないよ!

f:id:geta206:20170309235651p:plain

 

4   名前が間違っている(定義されていない変数またはメソッドです)

f:id:geta206:20170309235815p:plain

 

 

11.まとめ

  1. リファクタリング    コードをわかりやすくすること。
  2. ステータスコード    エラーの番号
  3. リダイレクト(HTTP) サイトの移転とかに使われる。
  4. 短縮URL        そのままの意味
  5. リダイレクション    URLの移転。サイトのリニューアルとかに使う。
  6. テスト成功例・失敗例   .../F /E エラーの内容
  7. スプリングサーバー   ストリーミングのことかなとか思っている。
  8. キャッシュ       データの記録。
  9. スプリング       Railsサーバのダウンロード時間を短くする技術。

参考URL

Ruby on Rails チュートリアル メモ #2 - belog

Ruby のエラーメッセージを読み解く(初心者向け)その 2 - Qiita