Railsの会13日目「3章 test・まとめ / 4章関数作成」
今回の進捗です。\\\└('ω')┘////
注意 : 3.4.4 〜スタート。3.6(演習)〜 3.7.2 までは飛ばしてます。
agenda
- 復習
- helloアクション
- 3章のまとめ
- 第4章 ヘルパー
- 4章まとめ
1.復習
おさらいです!
/app/aprication.html.erb にhtml js とか記載される。
$ rails routes 受け取ったURLを認識、適切なコントローラ内にアクションで割り当てる。
よくデバッグ ・ルーティング作成 に使われる
⚠️そのままではRails環境を読み込むため遅い。
rails routes を高速にする方法
- pryとpry-rails gemがインストールされているなら、
rails console
を起動しておいてshow-routes
を実行- spring gemがインストールされているなら
spring rake routes
とすれば2度目以降から高速になる- dev環境が起動中ならhttp://localhost:3000/rails/infoを参照する (Rails 4)
2.helloアクション
ページを作るとき必ず設定しないといけない。
- ルート設定 [ config/routes.rb ]
get 'static_pages/home'
- ApplicationController [ app/controllers/static_pages_controller.rb ]
def hogehoge . . . end
おまけ $ ps aux grep spring
ps プロセスを表示
動作が遅い時に使う。Railsではテストが動かない時(テスト系)で使用する。
a 自分以外のユーザプロセス
u User名と開始時間
x 制御端末のないプロセス情報
ps ax システム上全てのプロセス表示
注 ps -aux はxという名前のuserが所有するすべてのプロセスを表示。
xというuserが存在しなければ、 ps auxというコマンドと解釈し警告する。
ps - コマンド (プログラム) の説明 - Linux コマンド集 一覧表
grep【コマンド】とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
spring railsのアプリケーション用プリローダ(待ち時間を視覚化したもの)。マイグレーション(依存しているアプリケーションを再利用して新しい環境に移行)するとき、railsを再起動しなくていいようにする。
springの特徴
・開発環境が高速になる
・springサーバが起動される。設定を監視、再ロードする。
・rails [console runner generate destroy ]と rakeが対象
・自動起動・終了される
・デフォルトではspringが使われないので、有効にする必要がある。
spring有効にする方法
rails newしたプロジェクト内で実行
$ bundle exec spring binstub --all
bin/springが新規追加され、bin/rails と bin/rakeにspringをloadするコードが追加。
Rails 4.1以降のコンソールコマンドは必ず bin/ を付けなきゃいけないの? - Qiita
3. 3章まとめ
- gemインストール、リモートへpush、プロダクション(本番)環境を行った。
- コントローラを新規作成するrailsコマンドは[ generate /controller / contorollerName]
- コントローラー名はキャメルケース
- アクション名はスネークケース
- 新しいルーティングは config/routes.rb ファイルで定義する。
- 自動化テスト作成(テスト駆動開発 レッド、グリーン、リファクタリングサイクル)
- Railsレイアウトはアプリケーションページの共通部分をテンプレートに置くと重複させなくて済む。
おまけ エラーまとめ
1 引数の数が間違っている(呼び出しa とメソッゾの引数b) (a for b)
0 for 1
(1 個であるべきところに0 個来た)という内容になっている。
Rubyのエラーメッセージwrong number of arguments (a for b)の意味 - Qiita
2 xcode 古い! (Xcode 開いてupdateすればok)
Agreeing to the Xcode/iOS license... のエラーがでた時の対処法 - Qiita
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
第4章
4. ヘルパー
基本はviewの補助として使用する。
メディアタイプ Rubyの4つの概念
-
stylesheet_link_tag Rails組み込み関数。このことを(ヘルパーという)
-
カッコを使わない関数の呼出し
-
シンボル ソースでは文字列に見えるけど内部は整数として扱われる。例
my_name.object_id # => 8848520
-
ハッシュ 連想配列 RailsのHashの使い方
配列と同じく複数の他のオブジェクトを管理するために使うオブジェクト。
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
この行を変更します…!
<%= yield(:title) %> | Ruby on Rails Tutorial Sample App
これを下のように変更。
<% provide(:title, "Home") %>
ーーーーーーーーーーーーーーーーーーーーーーーーーー
provide関数とは
provideヘルパーでlayoutにパラメータを引き渡す
内容
layoutに動的にパラメータを引渡したいような場合に
provideヘルパーを利用します。呼び元
- yield(:key)呼び先
- provide(:key, value)
もしprovideを消去すると・・・
| Ruby on Rails Tutorial Sample App
と表示される。
上の行の「|」を消す!
リスト4.2:full_title
ヘルパーを定義するapp/helpers/application_helper.rbmodule ApplicationHelper # ページごとの完全なタイトルを返す def full_title(page_title = '') base_title = "Ruby on Rails Tutorial Sample App" if page_title.empty? base_title else page_title + " | " + base_title end end end
上記のコードを書いて
<title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
を下記に変更
<title><%= full_title(yield(:title)) %></title>
その他にも application.html.erb に書かれている内容はけす(コードの重複をなくす)
static_pages / home.html.erb
static_pages / help.html.erb
static_pages / about.html.erb
これで完成()
5. 4章まとめ
今回行ったこと
- root / メインサイト get / サブサイト
- Hello アクション(root設定とメゾットの定義)
- ヘルパー 関数作成
宿題
基礎をもう一度。(toy_app)作成
http://railsdoc.com/rails_base
Railsの会12日目「テストが落ちたので修正」補足
今日の進捗。
agenda
- テストが落ちた原因
- 解決方法
- まとめ
1.テストが落ちた!!!!!!(テストが落ちた原因)
テストコマンドを打った↓
$ bundle exec rake test
iTerm------------------------------------------------------------------------------------
assert_select "title", "Home | Ruby on Rails Tutorial Sample App"
上のセレクタは、<title>タグの内に「Home|Ruby on Rails Tutorial Sample App」という文字があるかどうかをチェックします。
<Home | Ruby on Rails Tutorial Sample App> expected but was<About | Ruby on Rails Tutorial Sample App>..
<% provide(:title, “Home") %>
<% provide(:title, “About") %>
2.error解決方法
<% provide(:title, "Home") %>
<h1>Sample App</h1>
<p>
This is the home page for the
<a href="http://www.railstutorial.org/">Ruby on Rails Tutorial</a>
sample application.
</p>
<% provide(:title, "About") %>
<h1>About</h1>
<p>
The <a href="http://www.railstutorial.org/"><em>Ruby on Rails
Tutorial</em></a> is a
<a href="http://railstutorial.jp">book</a> and
<a href="http://screencasts.railstutorial.org/">screencast series</a>
to teach web development with
<a href="http://rubyonrails.org/">Ruby on Rails</a>.
This is the sample application for the tutorial.
</p>
<% provide(:title, "About") %> ・・・・・(以下略)・・・・
<% provide(:title, "Home") %> ・・・・・(以下略)・・・・
$ bundle exec rake test
3.まとめ
かなり初歩的な間違いだったのですが、
$ bundle exec rake test の大切さを学べた気がします。
そのほかにも エラーの直し方までを相手に説明のために書けば良いのかも…!
反省点
- エラーの読み方が甘い。(英語大事…
- コードの意味を理解していない。
エラーの解決方法まで簡単にまとめてみた。
- エラーが発生!!(エラー文を読む 7行目がおかしいらしい
- 7行目を読む
- 意味を調べるため、教科書を見直す(railstutorial)
- 文が多くて探せなかったので command + F で検索をかける
- エラー文をもう一度みる (home と aboutの異変に気付く。
- 修正
- $ bundle exec rake test
まだまだ初心者から抜け出せそうにない…( ; ; )
Railsの会 12日目「セキュリティー」
今日の進捗です。
agenda
- 新単語集 <%=, ERB , yield
- sqlインジェクション
- XSS
- CSRF
- まとめ
1.新単語
-
<%= Rubyの出力。
-
ERB
Rails の標準テンプレートエンジン。(他の種類にhamlとかもある)
-
yeild 特殊のページ。
使い方
出力がいらないコード
<% ~ %>
結果を出力
<%= ~ %>
結果をエスケープしてしないで出力
<%== ~ %>
後ろの改行を取り除く
<% ~ -%>
行頭までの空白を削除
<%- ~ %>
コメント
<%# ~ %>
2.SQLインジェクション
SQL文を使ってパスワードや個人情報を盗んだり、なりすましをしたりする。
攻撃の仕方
ログイン画面等の中に「’」を入力し、エラー文が出てくるか確認。
もしエラー文が出てきたら、PHPを使用でき、パスワードや不正アクセス等が可能になる。
ログイン画面でパスワードの欄に不正なデータベース命令を実行するための文字列を入力することで、パスワードを知らない攻撃者が正当な利用者としてログインし、クレジットカード番号などの個人情報を窃取したりすることがあります。
また、別の方法によって、データベースに保存されているデータを一括で取り出されてしまったり、データが不正に改ざんされたりすることもあります。最近は、このような手法による個人情報の漏洩(ろうえい)事件が相次いで発生しています。SQLインジェクションへの対策|情報管理担当者の情報セキュリティ対策|企業・組織の対策|国民のための情報セキュリティサイト
3.XSS
クロスサイトスクリプティング。管理人に URLを押させると別の悪質なサイトに飛ばされ利用者にも被害が出る。
偽サイト等を作り、改ざんをするのが一般的。
XSS攻撃
XSS(クロスサイトスクリプティング) 。JavaScriptを実行するコードを制作者の意図していない場所に埋め込む手法であって、PHPを使って実際にプログラミングをしていくうえで真っ先に考えなければいけないのがこの攻撃に対する対策です。
コメントにアラート等入れるとサイトを表示させるたび出したりして攻撃できる。
<script>alert(1234)</script>
4.CSRF
CSRFを「よそのサイトの機能を呼び出す攻撃」と表記
リクエスト強要(CSRF:Cross-site Request Forgery)とは、別のサイトに用意したコンテンツ上の罠のリンクを踏ませること等をきっかけとして、インターネットショッピングの最終決済や退会等Webアプリケーションの重要な処理を呼び出すようユーザを誘導する攻撃である。
URLをクリックしたり、メールを開いたりするだけで、感染させることができます。。
実行手順
- 攻撃用のコードを用意する
- URLをメッセージを書く。
5.まとめ
webに必須知識の内容を学びました。
1.sqlインジェクション 「'」で確認できる。SQL文を使ってデータを操作する。
2.XSS クロスサイトスクリプティング。訪問者に被害を出す攻撃
3.CSRF 管理者にURLを送りクリックさせ、データの改ざんを行う。
Railsの会11日目「Railsテスト」
今日の進歩です。
agenda。
テストについてまとめた
----------------------------------------------------------------------------------------
1.リファクタリング
コード読みやすくしたりすることだよ!
リファクタリングは「class」の名前をわかりやすくしたり、コメントを追加したりし理解しやすいコード に修正する。
⚠️バグが増えることもある。
リファクタリングとは、ソフトウェアの外部的振る舞いを保ちつつ、理解や修正が簡単になるように、内部構造を改善することです。
2.ステータスコード
エラーの番号。よく見るのが404かな…。
分類 コード メッセージ 1.0 1.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 × ○
よく見るエラーは覚えておこう…😊
3.リダイレクト(HTTP)
リダイレクトとは、サイトにアクセスしようとしたユーザーを、最初にリクエストされた URL とは別の URL に移動させることです。 別の URL へのリダイレクトには正当な理由がある場合もあります。 たとえば、サイトを新しいアドレスに移転した場合や、複数のページを 1 つに統合した場合などです。
4.短縮URL
そのまんまの意味。
短縮 URL を使うメリット
短縮 URL は、ただリンクを短く表現できるだけではありません。
他のメリットを挙げてみました。クリック率が上がる
短縮URLと短縮されていない長いURLで比較すると、
短縮URLの方が圧倒的にクリック率が高いという統計があります。手書き・口頭で伝えられる
どのサービスも短縮後の URL は 20 文字前後なので、
電話口やホワイトボードなどへの手書きでもなんとか伝えられるでしょう。プロっぽく見える
まだまだ一般なレベルで認知されているとは言えないサービスなので、
使うとプロっぽく見えます(笑)アクセス解析がある
Google URL Shortener や Bit.ly であれば、
短縮URLのうしろに「+」をつけることで、
アクセス解析の画面が表示されます。
もちろんデメリットも
リンク先がどんなサイトなのかわからない
どのサイトにリンクされているかをURLで判断できないので、
フィッシングサイトにも引っかかりやすくなります。もっとも悪用されたのがこの機能でらしいです。
URL が覚えられない
短縮するために、数値や記号の羅列になっているため、
記憶するのに適していません。ブランド化が難しい
URL が覚えられないのと同様に
せっかくのあなたのドメインが隠れてしまうので、
リンクを開くユーザーは自分がどのサイトにアクセスしているか
分からなくなってしまいます。遅くなる
リダイレクトが発生するので経由するサーバーが増え、
その分表示速度が低下します。作った短縮 URL は消せない
短縮 URL のリンク先は変更できません。
一度作ったリンクはそのサービスが存在する限り利用可能ですので、
無価値な URL を世の中に残してしまいます。サービスが永続的に存在するかがわからない
どのサービスも未来永劫使えるか把握できず、
サービスが止まれば短縮 URL は使えなくなります。あの Google でさえ、
不要と判断したサービス(Reader など)は撤退する世の中です。
5.リダイレクション
標準入力にはデフォルトが割り当てられていて、これをユーザが自由に変更できる切り替えのこと。(入出力の切り替え)
通常、コマンド入力はキーボードから行い、その結果を画面に出力し、エラーがあればその内容も画面に出力します。これは、以下のような定義があるからです。
「/dev/stdin」などは特殊ファイルと呼ばれ、各入出力装置をファイルとして操作できるようにしたものです。そして、この定義を変更することで、キーボード以外の装置から入力し、画面以外の装置へ出力することが可能になります。
この切り替えのことをリダイレクションといいます。
びっくりするくらい何言っているのか分からないぞ…!😭
いろんな記事見たけど説明が意味ワカラナイ
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)
2 <Home | Ruby...App> の書き方が下の正しい記述と見比べて間違っているよ!
(この場合空白がない)
3 aboutページのテンプレートがないよ!
4 名前が間違っている(定義されていない変数またはメソッドです)
11.まとめ
- リファクタリング コードをわかりやすくすること。
- ステータスコード エラーの番号
- リダイレクト(HTTP) サイトの移転とかに使われる。
- 短縮URL そのままの意味
- リダイレクション URLの移転。サイトのリニューアルとかに使う。
- テスト成功例・失敗例 .../F /E エラーの内容
- スプリングサーバー ストリーミングのことかなとか思っている。
- キャッシュ データの記録。
- スプリング Railsサーバのダウンロード時間を短くする技術。
参考URL
Ruby on Rails チュートリアル メモ #2 - belog
Ruby のエラーメッセージを読み解く(初心者向け)その 2 - Qiita
Railsの会10日目 3章 Railsの省略コマンド /HTTPメゾット
「祝」3章入りました✨✨
今回の進捗はこちらになります。
agenda
1章と2章で学んだところは省略しております٩(๑′∀ ‵๑)۶•*¨*•.¸¸♪
1.Railsの完全なコマンド・Railsの短縮系コマンドとは
Rails sが正式コマンドだと思っていました…( ;´Д`)
他にも!
2.キャメルケース・スネークケース
- キャラメルケース
単語の頭文字を文字にしてつなぎ合わせた名前。
- スネークケース
単語間にアンダースコアを加えてつなぎ合わせた名前。
3.HTTPメゾット
HTTPリクエスト (GET・POST・PATCH・DELETE)
-
GET
GET送信の特徴
- データをリクエストURLの後に付与して送信する。(Webサーバやプロキシサーバのアクセスログなどに残る)
- 他の人がURLを見ると、入力したデータが丸見えになってしまう。(ログイン画面などではIDやパスワードが他者から丸見えになるのでGET送信は使用するべきではない)
- URLの後に付与するのでデータ量(文字数)に制限が掛かる。(Internet Explorer のURLに使用できる最大文字数は最大2,048 文字)
- GETはHTTPヘッダ情報に含まれるため、簡単に取得することが可能。
- テキストデータのみ送信可能。
-
POST
POST送信の特徴
- PATCH
冪等でない処理に使われる。一部のみ更新する。
- DELETE
リソースを削除するメゾット
補足
rails generate controller StaticPages home help
home / help ページ のコントローラとviewを作成する。
be rails generate controller StaticPages
rails generate コマンドで生成されるファイル一覧表
おまけ
エラーの解決法
原因
・間違ったrailsのversionでインストールしたため。versionロックがかかっている。
Gemfile.lockとは??
Railsアプリケーションの依存関係を記述するファイル。
Railsアプリケーションごとにことなる依存関係やバージョンが記述されている。
管理人→Bundler
参考サイト
rm -rf Gemfile.lock
4.まとめ
- HTTP メゾット
- キャメルケース・スネースケース
- Rails省略形
新しい言葉
- 冪等性
変わらず数値が変わらない
- マイグレート
ソフトウェアやシステム、データなどを環境に
移転したり新しい環境に切り替えたりすること。