Ruby関連のことを調べてみた2020年08月02日

Ruby関連のことを調べてみた2020年08月02日

Rubyでシステムコマンドの実行

Rubyを書いてる時にスクリプト内で、システムコマンドを実行したくなったので調べてみました。

### Kernel#system

最も、シンプルな書き方です。

“`
system(“ls”)
# => true
“`

標準出力にコマンドの実行結果が返却されます。
メソッドの戻り値は以下の通り

– `true` コマンド成功時
– `false` コマンド失敗時
– `nil` コマンドがない時

### Kernel#`

コマンドの実行結果を戻り値で欲しい時に使います。

“`
`ls`
# => “Applications\nLibrary\nSystem\nUsers\nVolumes\nbin\ncores\ndev\netc\nhome\nopt\nprivate\nsbin\ntmp\nusr\nvar\n”
“`

戻り値は文字列型で返ってくるみたいですね。

`%x||` というエイリアスもあるみたいです。

### 参考

– [How to Run System Commands From Ruby](https://www.rubyguid

元記事を表示

【Rails】一意性を保つバリデーションの実装

#一意性バリデーションの実装に必要なタスク

1. アプリ側に記述(uniqueness: true)
2. データベース側に記述(unique: true)

#アプリ側に記述
“`models/user.rb
validates :email, uniqueness: true
“`

#データベース側に記述

“`
$ rails g migration add_column_to_users
“`

“`add_column_to_users.rb
def change
add_index :users, :email, unique: true
end
“`

“`
$ rails db:migrate
“`

テーブルのカラムに一意性を持たせるには、**インデックスの作成**も必要になる。
理由は、全てのデータを検索することで、過去のデータと重複しているか確認できるため。

元記事を表示

オリジナルのアプリを完成させるまでの解説

#環境
macOS 10.15.5
Rails 5.2.4.2
Docker 19.03.12

#概要
オリジナルアプリの概要はCRUDのシステムを意識した簡易的なメモアプリの開発です。
簡易的なアプリと言っても実用性には欠かないよう注意を払いました。行数が増えてもレイアウト崩れが起きないように実装し、文字数制限や空白の項目が新規作成されないようにも設定しました。

Dockerを用いてフレームワークはRailsを使用しました。そしてHerokuにより公開をしています。

#オリジナル性について
HTMLに関してはclass名などは学習サイトをヒントに用いて、デザインは外観は学習サイトをヒントにしましたが実装は全て自走で行いました。
Railsの機能の実装に関して事前に学習サイトを何度も繰り返し行い、CRUDの機能を頭に入れてから今回の作成を行いました。そのため短いコードなどはなるべくサイトなどを参考にせず、自分で覚えた内容で実装し、コマンド操作は基本的に全て頭に入れた内容のみで行いました。

#サイトについて
スクリーンショット 20</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>Rails</div>
<div class='tag-cloud-link'>Heroku</div>
<div class='tag-cloud-link'>Docker</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/chisaki0606/items/ee6ed51a78784720b3f8'>元記事を表示</a></div>
<h3 id=カリー化チートシート

拙作『[不動点コンビネータを用いた無名再帰関数の実行まとめ](https://qiita.com/ytaki0801/items/596efbbcb07d38630bc9)』の補足説明として書き始めたところ,カリー化関数を記述・利用するための独立したチートシートとした方が少なくとも約1名(自分自身)には役立ちそうだったので,新しく記事にした.なお,カリー化してくれる関数の定義ではないことに注意.複数言語に渡っている都合上,各言語に精通している方々のツッコミ歓迎.

#Haskell(GHC)
Haskellでは,複数引数で定義しても自動的にカリー化される.カリー化関数の引数指定は`(・・・(関数 引数) 引数)・・・引数`である.

“`haskell
Prelude> func x y z = if x > 0 then y else z
Prelude> func (-100) 0 (-1)
-1
Prelude> ((func (-100)) 0) (-1)
-1
“`

`\`および`->`を用いた無名関数を戻り値にして実現する方法は次の通り.ただし,この場合でも引数の複数

元記事を表示

railsで動画を投稿する

今回、初投稿させていただきます。
少し、見にくかったりしてもご了承お願いします。

今回は、railsで動画アップロード機能の備忘録となっております。
個人的にFFmpegを使用した動画アップロードが分かりにくかったので、なるべく分かりやすく説明できればと思います。

#環境
Ruby 2.6.5
Rails 6.0.3.2

#早速取り掛かっていく

“`ruby:ターミナル
rails new RailsApp
“`
ターミナルでRailsAppを作ります。

“`ruby:Gemfile
gem ‘carrierwave’
gem ‘mini_magick’
“`
Gemfileに追記

“`ruby:ターミナル
rails bundle install
“`
ターミナルでbundle installします。

“`ruby:ターミナル
rails g uploader video
rails g scaffold post video:string
“`
ターミナルでuploaderとscaffoldを作成

“`ruby:ターミナル
rails db:mig

元記事を表示

【今日の積み上げ#1】cloud9上でon railsするまで

#結果
こちらの記事
(https://skillhub.jp/courses/134/lessons/785)
を元に、cloud9上でrailsサーバーを動かし、「Yay! You’re on Rails!」の画面を拝むまで完了しました。

事前知識として、Progateのrails学習コースⅠを受講済み。

が、こんな簡単な手順でも躓きポイントがあったため備忘録として本記事を作成します。

#手順
– Cloud9の環境作成
– Railsのインストール
– **ディレクトリの作成、及び操作フォルダの移動**
– yarn、webpackerのインストール
– railsのサーバー起動、停止

#エラーの内容
結論から言うと、yarnとwebpackerのインストールが上手くいかず、何度も何度もエラーを吐いて、「良く分からないから環境作成からやり直す」というようなことを繰り返してしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682592/35210061-d322-

元記事を表示

【Ruby】rbenvの使い方(version `x.x.x’ is not installed)

#rubyのバージョンエラー
昔Githubに入れてたRailsのプロダクトを引っ張り出して動かそうとしたら、

“`sh
version `x.x.x’ is not installed
“`
rubyのバージョンが違うらしい。。

# rbenvコマンド

“`
# リストを確認する
rbenv install –list

# インストールする
rbenv install x.x.x

# デフォルトで使用するバージョンを設定する
rbenv global x.x.x

## インストールしたRubyx.x.xを使用可能な状態にする
rbenv rehash
“`

これで好きなバージョンのrubyで開発できます!

Railsも必要な人はこちらも追加

“`sh
sudo gem install rails
“`

# おまけ
長くなりそうなので、省略しましたがこんなエラーも出てきました。
いくらインストール(sudo gem install rails)しても無限に出てくる、
有名なエラーなようです。
Macにデフォルトで入っているrubyとの干渉をしているので

元記事を表示

[rails]deviseで登録・ログインができない問題

#deviseで登録・ログインができない
deviseでユーザー登録とログイン画面を作成した後に、
デフォルト(email)以外の情報で登録・ログインをしたい時用の方法です。

viewページのフォームを編集したのに、登録・ログインできないトラップがありますので、
参考にしてください。

以下の場合、sing_upとaccount_updateのkeyを変更しています。

“`app/controllers/application.controller.rb
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters if resource_class == User devise_parameter_sanitizer.permit(:sign_up, keys: [:na

元記事を表示

【Ruby】共通鍵暗号のベンチマークテスト

# はじめに
センシティブな情報を扱う際に、平文を暗号化しDBに保存し、取り出す時に復号化することがよくあります。

業務の中で、Rubyで暗号・復号化する方法を検討し、それぞれの方法でベンチマークテストを行う機会があったので、その時の内容をまとめました。

検討した方法は、Ruby標準ライブラリOpenSSL(自前の実装)とAWS Key Management Service(KMS)の2つになります。

自前の実装は計算コストが掛かりそうで、KMSはネットワークコストが掛かりそうなので、その点がどう結果に出るかが焦点になります。

# 暗号化方式

## 共通鍵暗号

送信者と受信者は1つの鍵を秘密に共有し、暗号化と復号化に共通の鍵を使う方式。同じデータを常に同じ暗号文に置き換えると、その頻度から平文が推測されてしまうため、同じデータでも違う暗号文に置き換えられるように初期化ベクトル(または、ソルト)を設定する。今回は初期化ベクトルを使用しました。

Rubyの標準ライブラリの`OpenSSL::Cipher`を使用した場合はこんな感じです。

“`
def encrypt(pl

元記事を表示

[rails]deviseで作成したviewページの編集が反映されない

#deivseで作成したviewページの編集が反映されない
deviseでデフォルトのログインページを編集し、画面を確認したところ、
編集内容が反映されていない問題が発生したので、解決方法を記録しておきます。

“`config/initializers/devise.rb
#config.scoped_views = false の記述箇所のコメントアウトを外し、falseをtrueに変更だけ
config.scoped_views = true
“`

これだけで解決しました。

元記事を表示

DMMWEBCAMPでの記録(未経験から就職まで)

###はじめに
この度DMMWEBCAMPを卒業し、就職を決めることが出来たので学習の記録を書きます。

###投稿しようと思ったきっかけ
以下記事を読ませて頂いて

【卒業生】DMMWEBCAMPに通おうか迷っている人に伝えたい事
https://qiita.com/yuki82511988/items/37be28f2486e166fd48f

僕もこれからプログラミングをやろうとしている方、学校に通おうと思っている方の役に立てればなという思いから書こうというところに至りました。

###僕のこと
軽く自己紹介をします。

現在26歳今年27歳になります。
長野県出身でDMMWEBCAMPに通い転職する目的で引っ越しました。

MOSやワープロ検定1級を専門学校の時取得したくらいで、ターミナルやgithubを触ったことはありませんでした。
タイピングがちょっと速くてMicrosoft製品ちょっと使えるぜ!レベルです。
入学する半年くらい前にちょこっと本当に少しProgate(無料版)をやったり、SkillHuckという教材を購入して少しやった程度です。
ちなみにSkillHuc

元記事を表示

【チーム開発にて】他メンバーのブランチに移動して、rails sした時のエラー【Rails】

#参考対象者
– チーム開発初心者
– Railsでのアプリ開発にて、データベース関連のエラーで困ってる方
– Git初心者

#環境

“`
$ rails -v
Rails 6.0.3.1
“`
“`
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin19]
“`

“`
$ git –version
git version 2.27.0
“`

“`
$ mysql –version
mysql Ver 14.14 Distrib 5.7.29, for osx10.15 (x86_64) using EditLine wrapper
“`

#状況

– 他メンバーのブランチに移動し、レビューするために挙動確認したかったが、サーバーを立ち上げるときにエラーが出た。
– どうやら、データベース関連のエラーらしい。

#ActiveRecord::PendingMigrationError

>https://qiita.com/KONTA2019/items/04

元記事を表示

献立プログラムを作成した

“`menu.rb
def search(menus)
puts “検索する材料をひらがな入力してください”
keyword = gets.chomp
puts “——————————-”
puts “検索材料:#{keyword}”

result_array = menus.select { |menu| menu[:title].include?(keyword) || menu[:ingredients].include?(keyword) }
if !result_array.empty?
show_results(result_array)
else
puts “指定のキーワードでは見つかりませんでした\n\n”
end
end

def show_results(results)
puts “\n#{results.count}件見つかりました”
results.each do |result|
puts “—————————-

元記事を表示

Ruby 例外処理

## 背景
Rubyの例外処理を描いたときに状況に応じた使い分けが必要だったので、備忘録としてまとめました。

## begin rescue
* エラーが発生しそうな処理に対して書く
* エラーが発生したときにエラーログなどを書ける

“`
begin
1 / 0 // 例外を発生させる
rescue
puts “エラーが発生しました”
end
“`

## raise
* エラーを意図的に発生させる
* 1 / 0をraiseに置き換えても成立する

“`
begin
raise
rescue
puts “エラーが発生しました”
end
“`

## retry
* エラーが発生しても再度beginの処理に戻る
* 例の場合は無限ループしてしまうので、何度か実行してエラーであれば処理を抜けるような処理を書く

“`
begin
raise
rescue
retry // beginの処理を再度実行
end
“`

## ensure
* 正常に処理が終わっ

元記事を表示

[Rails]seedファイルへの記載方法色々

※自分への備忘として残しておくものです。
基本フォームでのデータ作成を理解してればなんとなくイメージつくものが多いと思います。

# 環境
Ruby 2.6.5
Rails 6.0.3

# 書き方あれこれ

### ①一個だけ作成(基本)

“`ruby:seed.rb
User.create!(
email: “user@user.com”,
name: “user1”,
passowrd: “password”
)
“`

レコードを作りたいモデルにcreate!アクション。
各カラムの値を与えてあげる。

### ②複数個デモデータを作成

“`ruby:seed.rb
users = User.create!([
{nickname: “guest”, email: “guest@guest.com”, password: “guest1234”},
{nickname: “guest2”, email: “guest2@guest.com”, password: “guest5678”},
])
“`
配列を用意。配列の各要素にハッ

元記事を表示

[Ruby] 別ユーザで外部コマンドを実行する

# 前提

– Ruby 2.7
– Ubuntu 20.04
– あんまり深く考えてない

以下の`test.sh` というファイルを、superuser な Ruby から特定のユーザで起動したい。

“`bash
#!/bin/bash
echo “test.sh ok”
id
“`

# 実装

“`ruby
gid = 1001
uid = 1001

pid = fork do
exit 127 unless Process::GID.change_privilege(gid) == gid
exit 127 unless Process::UID.change_privilege(uid) == uid
begin
exec ‘./test.sh’
rescue # Errno::ENOENT
exit 127
end
exit 127 # なんかそれ以外のケース
end

res = Process.waitpid(pid)
puts ‘complete’
p $?
“`

実行結果

“`
$ sudo ruby

元記事を表示

「Rails db:migrate」ができなくて苦戦した話。

ある時、`rails db:migrate`しようとしたら、
`StandardError: An error has occurred, all later migrations canceled:`
エラーが起こってしまいました。

まず`rake db:reset`してから
もう一度`rails db:migrate`して解決を試みるも、

エラーが発生して`rake db:reset`すらできません。

ここでマイグレーションファイルの記載ミスがないか確認。

しかし、何度確認してもスペルミスはなし。

結構探しました。そしてある時、

**「あ、全角はいってる。」**

はい、解決です。

`rails db:migrate`できないときって、スペルミスとか、全角入ってた
とかいうことが僕は多いです。

単純なことなのですが、今回は原因究明にまあまあ時間かかりました。

僕を含め初心者は特に、マイグレーションファイルに手こずることが多いと思います。
rails始めたての最初のうちは
間違えてマイグレーションファイル消しちゃったり、rollbackしないで修正しちゃったり

元記事を表示

deviseでのログイン画面実装

#deviseでのログイン画面実装

1.Gemfileに「gem ‘devise’」を追加

“`
gem ‘devise’
“`

2.追加したdeviseを、アプリケーションに読み込ませる。
※gemを追加した時に忘れてはいけない

“`
$ bundle install
“`

3.deviseの初期設定

“`
$ rails g devise:install
“`

これでdeviseを使う準備は完了。

4.Userモデルとマイグレーションファイルを作成
rails g devise モデル名の記述は、devise独自のルールです。

“`
$ rails g devise User
“`

5.データベースへ反映
新しくUserテーブルをデータベースへ反映させます。

“`
$ rails db:migrate
“`

6.deivse用のログイン画面を作成

“`
$ rails g devise:views
“`

7.rails s -b 0.0.0.0でサーバー起動させ、画面確認

![image.png](https://qiita-i

元記事を表示

現場で学んだRailsリファクタリングの話

## 現場で学んだ話

Railsの開発で意識している一般的なアーキテクチャの話です。

fatコントローラー、fatモデルにならないように意識していることを備忘録メモ。乱文のため、適宜修正していきます。

## コントローラーはシンプルに!!

コントローラーに追わせる責務は、究極的にこう考えています。

**「インスタンスを作り、それに対してメソッドを実行して、レスポンスを返す」**

これだけ。

こう言うのは最悪。

“`ruby:example.contoroller.rb

こんなアクションとかありえないです

def index
@most_funded_projects = []
most_funded_projects = Project.most_funded.includes(:main_image)
most_funded_projects.each do |most_funded_project|
break if @most_funded_projects.count >= 3
if @site_project_

元記事を表示

Strong Parametersとは?

#Strong Parametersとは
Strong ParametersはRails4系から追加されたセキュリティを向上させるための仕組みです。
指定した値以外は受け取らないようにして、攻撃者による意図しないコードの実行を防止するセキュリティ対策。

フォームからデータを送信するときは、「マスアサインメント脆弱性」というセキュリティ上の問題があります。
簡単に伝えると、データ送信時に不正なリクエストによって、予期しない値が変更されてしまう脆弱性です。
Railsでは、この脆弱性を防ぐ「Strong Parameters」の仕組みが用意されています。

こんな感じです。
Strong parametersは必ずprivateより下に記述します。

“`app/controller/user_controller.rb
class UsersController < ApplicationController def create user = User.new(user_params) end private def user_params pa

元記事を表示

OTHERカテゴリの最新記事