- 1. シンボルとは
- 2. 備忘録(TX50)シンボル型の説明
- 3. Sinatraを使ってHeroku drainログをTDへ送るAppを作った時にハマった記録
- 4. DB接続がない状態でassets:precompileを行う
- 5. [Rails]rails sの時のエラー
- 6. Ubuntuで使う言語のインストール方法とか環境構築とか
- 7. 【Ruby on Rails】Google Books APIを叩く際の5つのTips
- 8. ViewからControllerを呼び出すためのルーティング設定
- 9. Rails Tutorial 学習まとめ
- 10. クラスの継承
- 11. ユーザーの名前検索フォームの作成[namespace]
- 12. インスタンス変数
- 13. 【Rails】will_paginate導入方法とつまづきがちな点(Railsチュートリアルと比較して)
- 14. ルーティーンを極める
- 15. 【Rails】seed-fu で user の seed を作りたい
- 16. Dockerで既存アプリの開発環境を作成【Ruby2.6 + Rails5.2 + Mysql5.7】
- 17. 備忘録 ハッシュロケット
- 18. マイグレーションのあれこれ
- 19. CSRFとは
- 20. Rubocopに怒られないように0埋めした桁揃え文字列を作る
シンボルとは
# シンボルとは
Symbol とは、Ruby が内部でメソッド名などの識別に使っている数値で、任意の文字列に対して異なった値が割り当てらる。
なるほど、よく分かりませんね。
つまり、文字列だけど数値。みたいなものです。ハッシュのキーや文字列自体がデータでは無い物に使うことが吉です。
# 前コロンと後コロンの違い
シンボルとは主に文字列にコロン記号「:」を前置して定義したものです。
それにより、文字列を””で囲む必要がなくなります。
コロン記号「:」が、文字列記号「””」の代わりに、「これはシンボルだよ」とRubyに知らせています。
上記のように、コロン記号「:」を文字列に前置するとシンボルになります。
たとえば、ハッシュのキーとしてシンボルを使う際や、キーワード引数を使う際に、コロン記号「:」を後置します。
# シンボルはオブジェクトの一つ
メソッドなどの名前を識別するためのラベルをオブジェクト化
“` ruby
samurai /*文字列
:samurai /*シンボル“`
# ハッシュのキーとして利用する
よく使われるのが、ハッシュのキー
備忘録(TX50)シンボル型の説明
Rubyでは:(コロン)で始まるシンボルと呼ばれるものがありますが、これはどういったものか、またシンボルを使うことのメリットは何か解説してください。
A
Rubyの内部では整数として管理されているが、文字列のように呼び出せるオブジェクト。同じシンボルであれば同一のオブジェクトを参照するので、いくつ作成しても必要なメモリ容量は変わらない。また、文字列よりも高速に処理することができる。Q
tweet = Tweet.new(tweet_params)
if tweet.save
some_method(tweet)
endRailsアプリケーションではバリデーションに引っかかると保存がされない仕組みがあります。以下のコードで、保存されるべきtweetがなぜか保存されずロールバックされてしまう場合、どうすればその理由を確認できるか説明してください。
①1行目と2行の間にbinding.pryを記載し止める。
②pryの中で、tweet.saveを実行する。
③tweet.errorsを実行すると保存の際に出たエラーの内容が表示される。
Sinatraを使ってHeroku drainログをTDへ送るAppを作った時にハマった記録
#はじめに
Heroku drainからhttp経由でログを取得し、TDへ送るアプリをsinatraで作っていた時ハマった時のことを記録として残す。
Heroku drainからログをpostで受け取る形式のアプリを作った。(Sinatraは初めて)
#最初はクラシック形式で作成。
“`app_main.rb
require ‘sinatra’
require ‘sinatra/reloader’ if development?
require ‘td’
require ‘date’
TreasureData::Logger.open(‘DB名’,
:apikey=>ENV[‘TD_API_KEY’],
:auto_create_table=>true)
post ‘/’ do
・・・ requestの内容をパースする処理 ・・・
TD.event.post(‘テーブル名’,{送るデータ})
end
“`
ここで一つ注意点。
・TreasureData::Logger.openはpostのなかに記述してはいけない
理由は簡単。 postされるたびTreasureD
DB接続がない状態でassets:precompileを行う
本番とは違う環境だったり、Dockerfile内でassets:precompileを行ったりするときにDB接続でエラーになるときがある。これを回避する方法ってあるのかなと思ったので調べてみた
## activerecord-nulldb-adapterを使う
github
https://github.com/nulldb/nulldb“`Gemfile
gem ‘activerecord-nulldb-adapter’
“`“`config/database.yml
default: &default
adapter: <%= ENV['DB_ADAPTER'] ||= "mysql2" %>
“`database.ymlに環境変数で`DB_ADAPTER`を指定する。
“`
$ DB_ADAPTER=nulldb bundle exec rake assets:precompile
“`上記を実行すればDB接続なしでprecompileできる
## 参考
Rails × ECS でオートスケーリング&検証環境の自動構築
https
[Rails]rails sの時のエラー
rails sを行なった時のエラーの解消方法を書いて行きたいと思います。
私はこれで直りましたが皆が当てはまるかは分かりません。よろしくお願いします!##環境
・macOS Catalina
・Rails 5.2.0
・Ruby 2.5.0## エラー文
“`ruby:terminal
$ rails s
Traceback (most recent call last):
4: from bin/rails:3:in `‘
3: from bin/rails:3:in `load’
2: from /Users/name/App/Parttime-job/bin/spring:8:in `‘
1: from /Users/name/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’
/Users/name/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/
Ubuntuで使う言語のインストール方法とか環境構築とか
最近はバックエンド言語毎にVMで環境用意して勉強したりしてて、その環境構築方法の管理を最近はGistでしてるのですが、何となくQittaに。※※但し、Gistは英語で書いてるので。
# environment
– host OS: Windows
– VM: Virtual Box with Vagrant
– Ubuntu 18.0[**CUIまたはGUIの仮想環境をUbuntuを使って構築するのはこっち。**](https://qiita.com/OriverK/items/115c0c4d3c25c89327bc)
# Ruby on Rails
## Install latest version
“`:terminal
# install in one time
sudo apt install autoconf bison build-essential libssl-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev# install rbenv
# rbenv i
【Ruby on Rails】Google Books APIを叩く際の5つのTips
## 想定読者
– Railsで読書系ポートフォリオを作っている方“`
$ ruby -v
ruby 2.6.5
$ rails -v
Rails 5.2.4.1
“`## その1.APIを叩くロジックはcontrollerから切り分ける
まず以下記事(私の前記事です)のようにAPIを叩くわけですが、これをcontrollerに書いたらあっという間にFat controllerになりました。
[Ruby on RailsでGoogle Books APIを叩く](https://qiita.com/kumackey/items/cd12c02662fb43948f9e)APIを叩くロジックは、以下を参考にmodlueとしてapp/libに置きました。
[Rails 5 で自作のモジュールを読み込む方法](https://obel.hatenablog.jp/entry/20170614/1497412171)#### APIを叩く自作module
“`Ruby:app/lib/google_books_api.rb
ViewからControllerを呼び出すためのルーティング設定
# Railsでルーティング設定で困ったこと。
最近、Rubyのシステムの改修をしているのですが、新しくページを作成する際に、ルーティング設定で困ったことがあったので記録しておきます。##
プロジェクトルートディレクトリ/configs/routes.rbにViewからControllerを呼び出すためにルーティングを設定します。
ここで知らなくて慌てたのが下のパスの設定です。“`routes.rb
get ‘/patients/:id’, to: ‘patients#show’, as: ‘patient’
“`基本的には下記のように記載する。のですが、下記のルートはまとめて設定することができます。
|HTTP動詞 |パス |コントローラ#アクション |目的|
|:—————–|:—————–|:—————–|:—————–|
|GET |/photos |photos#index |すべての写真の一覧を表
Rails Tutorial 学習まとめ
★Rails Tutorial 学習メモ
# 第1章 ゼロからデプロイまで
## ①Railsのインストール
`$ printf “install: –no-document \nupdate: –no-document\n” >> ~/.gemrc`
`$ gem install rails -v 5.1.6`
※-vでバージョン指定【よく使うUNIXコマンド】
![UNIXコマンド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598452/f9ad5be6-6a47-001c-fd87-a6936de8abe5.png)## ②新しいアプリを作成する。
`$ rails _5.1.6_ new hello_app`
※自動で基本的なディレクトリやファイルが生成される。
⇒各フォルダ内にあるデータの役割は「1.3」の表1.2を参照## ③アプリに必要なgemのインストール
gemファイルの内容を指定の内容に置き換える。(gemファイルはRubyで書かれている。)
`gem ‘u
クラスの継承
##クラスの継承
あるクラスに定義されたメソッドを、別の新規クラスで利用できるようにしたクラスを定義することを継承と言います。
クラスの継承には、親クラスと子クラスの関係があり、元となるクラスを親クラス、親クラスのメソッドを引き継ぎ新しく作成するクラスを子クラスです。
例えば「車」の親クラスを作り、子クラスに「消防車」と「トラック」を作ったとします。
まず「車」の動作には加速や減速などがあります。「消防車」は、「トラック」はその特徴を継承することで「消防車」と「トラック」には加速や減速などを記述する必要がなくなります。なので例えば「消防車」はサイレント、「トラック」は荷物が積めるのみ記述するだけで澄みます。
【例】クラスの継承“`
class 子クラス名 < 親クラス名 end ``` Carクラス(親クラス) ``` class Car def speed_up puts "加速" end def speed_down puts "減速" end end ``` 親クラスには、共通の動作を定義します。 Firetruckクラス(子クラス)
ユーザーの名前検索フォームの作成[namespace]
#ユーザーを名前で検索する
検索フォームに入力した文字を含む名前をもつユーザーのみを一覧で表示します。
なお、検索フォームに文字が入力されていない場合は全ユーザを表示します。
検索のため、新しくアクションを定義してコントローラーで使用する方法もあります。ですが、可読性やMVCの観点から、Railsの開発はできる限り7つのアクションを利用して開発する方が推奨されている書き方であるため、今回はnamespaceを使用し専用のコントローラを作成する方法で実装します。
以下を使用しています。– ruby 2.5.1
– rails 5.2.4.1###namespce(名前空間)
名前の集合を分割すること、または、分割するために付けられる識別名をnamespaceと呼びます。namespaceを用いることで、同様のクラス名を名付けたクラスであってもそれらを区別することができます。今回の場合、usersディレクトリの配下にsearches_controller.rbを作成し、users::という名前空間が付けられるため、直感的に「ユーザーを検索するコントローラー」ということがわかりま
インスタンス変数
##インスタンス変数
オブジェクトが持つ属性を定義する変数です。
定義しておくことで全てのオブジェクトが同じ属性を持ちます。その属性値は、個々のインスタンスによって別々に設定できます。
クラス内のメソッドの中で、変数名の始めに@をつけて定義します。
【例】インスタンス変数の定義“`
class クラス名
def メソッド名
@変数名 = 値
end
end
“`
| 項目|インスタンス変数 |
|:—————–|——————:|
| 定義方法 |変数名に@を前置 |
| 用途 | インスタンスごとに異なる個別の属性値を持つ場合 |
| 扱えるメソッド | インスタンスメソッド |
##スコープ
クラス内で全メソッドで共通して使用することが出来ます。
クラスから作成されるオブジェクト毎に固有できます。
【Rails】will_paginate導入方法とつまづきがちな点(Railsチュートリアルと比較して)
#はじめに
Railsチュートリアル通り進めると色々なつまづきポイントがあるなと思ったので記事にします。#will_paginate導入方法(Railsチュートリアル)
[Railsチュートリアル](https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#cha-updating_showing_and_deleting_users)での導入方法は基本的に下記のとおりです。
####①必要な`gem`をインストール“`
gem ‘will_paginate’, ‘3.1.6’
gem ‘bootstrap-will_paginate’, ‘1.0.0’
“`####②ページネーションしたいビューに記載
“`erb
<%= will_paginate %><%= render @users %>
<%= will_paginate %>
“`
####③コントローラーに記載
“`ruby
ルーティーンを極める
![IMG_8387.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592864/a9060f3f-dbdc-0ecf-d010-b98eb52c5a94.jpeg)
初のqiita投稿です
今日からこのルーティーンで回します
ルーティン回し極めます
【Rails】seed-fu で user の seed を作りたい
# seed-fu を導入してみた
seed-fu はデフォルトの seeds.rb よりも seed を扱いやすいということを聞いて、試しに自分のアプリケーションに入れてみることにしました。
seeds.rb を使っている場合、同じ操作をしようとすると、データを一度削除してから再度追加する必要があリます。一方で seed-fu なら、**seed データの変更をしても`rails db:seed_fu`だけで変更が反映される**という点が便利です。導入は
“`:Gemfile
gem ‘seed-fu’
“`として、`bundle install`するだけです。
# よくある作り方
user の seed を作る時を考えてみます。user は email がユニークなモデルです。
まずは[公式の README ](https://github.com/mbleigh/seed-fu)を読んで次のように書いてみました。“`db/fixtures/01_user.rb
User.seed do |s|
s.id = 1
s.name = “foo”
Dockerで既存アプリの開発環境を作成【Ruby2.6 + Rails5.2 + Mysql5.7】
既存アプリの開発環境をDockerに。色々とハマりましたが、そこも含めて書いて行きます。
##環境
Ruby:2.6.5
Rails:5.2.4
Mysql:5.7
OS: macOS Mojave 10.14.5##ディレクトリ構成
“`
sampleApp —- Dockerfile
|– docker-compose.yml
|– app
|– bin
|– config
|– database.yml
“`既存アプリのルート直下に`Dockerfile`、`docker-compose.yml`を作成しました。
##うまくいったやり方
“`Dockerfile:Dockerfile
# app_nameの部分はそのままでOK
FROM ruby:2.6.5RUN apt-get update -qq && \
apt-get install -y build-essential \
備忘録 ハッシュロケット
ロケット型
%input.form{:placeholder=>’キーワードから探す’,:type=>’text’}ハッシュ型
%input.form{placeholder:’キーワードから探す’,type:’text’}
マイグレーションのあれこれ
## マイグレーションに関すること
### マイグレーションの確認
現在どのファイルまでをマイグレーション実行したのかを確認するには“`:ターミナル
bundle exec rake db:migration:status
“`
を実行する。
出力ではマイグレーションファイルの名前の横に[UP]または[DOWN]が出るが
UPはマイグレート済み
DOWNはマイグレート未実行
を表す。DOWNであれば削除しても構わない。### マイグレーションの修正
マイグレート実行後に修正点を見つけ、修正を行いたい場合には
①bundle exec rake db:rollbackで一度マイグレートされていない状態に戻す
②マイグレーションファイルを修正する
③再びマイグレートを行う
この手順で行うことで修正が可能である。
bundle exec rake db:rollback STEP=x
xの部分に数字を入れることで任意の数分マイグレートを戻すことができる。または修正を行うマイグレートファイルを新規作成しマイグレートすることで修正可能
### マイグレートファイルは消去しては
CSRFとは
## CSRFとは
WEBエンジニアとして仕事する上でセキュリティ対策は非常に重要である。
今回はCSRF(クロスサイトリクエストフォージェリ)について簡単にまとめる。webアプリケーション内の脆弱性、もしくは脆弱性を利用した攻撃方法のことである。
掲示板やお問い合わせフォームなどを処理するアプリケーションが本来拒否すべき他サイトからのリクエストを受信して処理してしまう。## どのように攻撃されるか
・攻撃者は攻撃用Webページを準備し、ユーザがアクセスするよう誘導する
・ユーザが攻撃用Webページにアクセスすると、攻撃用Webページ内にあらかじめ用意されていた不正なリクエストが攻撃対象サーバに送られる
・攻撃対象サーバ上のWebアプリケーションは不正なリクエストを処理し、ユーザが意図していない処理が行われる## どのような被害があるか
・いたずら的書き込み、不正サイトへの誘導、犯罪予告といった掲示板やアンケートフォームへの不正な書き込み
・不正な書き込みを大量に行うことによるDoS攻撃
なりすましによる犯行を行える。
※DoS攻撃とは
Denial of Servi
Rubocopに怒られないように0埋めした桁揃え文字列を作る
# TL;DR
1〜3桁の整数`size`があり、そこから例えば`L064.dat`みたいなファイル名を作りたい時、Rubocopに怒られないようにするには
“`rb
filename = format(“L%03d.dat”, size: size)
“`とすれば良い。これだけなんだけど、ここまで来るのに妙に苦労したのでRubocopの文句からこの記事にたどり着けるように詳細を書いておきます。
# Rubocopに怒られる
## C言語っぽく
1〜3桁の整数`size`があり、そこから例えば`L064.dat`みたいなファイル名を作りたい。C言語から入った人なら`sprintf`使ってこんな感じに書くと思う。
“`rb:format1.rb
size = 10
puts sprintf(“L%03d.dat”, size)
“`これはRubocopに以下のように怒られる。
“`sh
$ rubocop format1.rb
Inspecting 1 file
COffenses:
format1.rb:2:6: C: Style/Fo