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

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

Ruby on railsとLalavelどっちが良い?

技術選定の仕方

・自分のやりたい事が実現しやすい
・情報量が多い

プログラミングはあくまでも手段でしかなく、プロダクトの価値を最大化させることこそが目的である。またプログラミング言語は、基礎文法は少し変わるぐらいで大した差はない。言語に縛られるよりも、自分が言語に合わせて勉強していくほうが、プロダクトの価値も開発効率も上がる。

Ruby on railsを選びました

①scaffoldが便利
MVCの作成はrouteの設定までいい感じに自動で生成してくれる。

②情報量が多い!
ruby自体が日本発の言語ということもあり、qiitaの記事の数をはじめ日本語の説明の記事がlalavelよりも多い。

③コミュニティー内に参考にできるソースコードがある
身近にコードについて質問でき参考にできるコードがあるのは、めっちゃ楽。

>Rails: ある程度の規模まではレールに乗ってサクサク作れるが、アプリケーションが成熟してきて「規約」にはないことをやりたくなってくると、途端に求められる技術力や難易度が跳ね上がる。
Laravel: アプリケーションの雛形

元記事を表示

個人アプリ開発日記 #5

# 投稿したり、投稿詳細表示、削除、一覧表示を実装していきます

まずは,何はともあれ

“`
rails g controller drinks
“`

“`
rails g model Drink
“`
を実行

コーヒーの感想を投稿しあうアプリなので、モデル名や、コントローラー名をcoffeeにしたかったのですが、
coffeeは不可算名詞なので、できるだけ避けた方が賢明。
という事でdrinkと命名しました、、、!!

画像も投稿したいので

“`
% brew install imagemagick
“`

をターミナルで実行

“`gem
gem ‘mini_magick’
gem ‘image_processing’, ‘~> 1.2’
“`

というgemをinstallして

“`
bundle install
“`

# drinks_controller

“`ruby
class DrinksController < ApplicationController include SessionsHelper before_acti

元記事を表示

Re:VIEW Starterをインストールするときに少し手間取った話(gem installでpermissionエラー)と解決方法

# はじめに
技術書でもしたためようとRe:VIEW Starterをインストールしました。
そこで、gem installで手間取ってしまった話とその解決方法を書きます。

# 困ったこと
しかし、[Re:VIEW StarterはRe:VIEW 2.5をサポートしており、3.0や4.0はサポートしていません](https://kauplan.org/reviewstarter/)。

まちがって、下記のコマンドで

“`
gem install review
“`

最新のreviewをインストールしてしましたが動きませんでした。なので、

“`
gem uninstall review
“`
で削除しました。そして、バージョン指定で入れ直してみました。

“`
gem install review –version=2.5
“`

が、下記のようにパーミッションエラーが起こりました。

“`
$ gem install review –version=2.5
ERROR: While executing gem … (Gem::FilePermission

元記事を表示

【Rails】コントローラーの処理をモデル内のクラスメソッドとして記載する。

#テーマ
コントローラー内に処理を記載していき、コードが冗長になったり、同じ処理を様々なアクションで使用する場合、一つのメソッドとしてモデル内で定義することがあると思います。
簡単なやり方と、その際にちょこっとだけつまづいた点をまとめています。

#バージョン
ruby 2.5.7
Rails 5.2.4.4

#やり方

“`ruby:shops_controller.rb
def members

@table_customers = 2
@tables = 3

@all_customers = @table_customers * @tables
Shop.update(members:@all_customers)
#店内の総客数を計算するアクション
end
“`

上記のコードでは店内の客数を計算するアクションになります。
(簡略化のために今回は1つのテーブルの客数を2人、テーブル数を3卓と定義しています。)

このアクションをモデル内に定義する場合を順を追って解説します。

“`ruby:shops_controller.rb
def members

元記事を表示

【Rails】bcryptを使ってログイン機能を作ったけど失敗した話

Railsでログインページを作っていました。
bcyrptのGemを使って作ろうとしたのですが、正しいメールアドレス・パスワードを登録し、ログインしようとしても「ログインに失敗しました」と表示され、なかなかできず…

#環境
Rails 5.2.4.4
DB:SQLite

#問題のあったコード
・gemfileにてcryptをインストール済み
・userモデルに has_secure_password を定義
・usersテーブルに password_digest:string を追加

“`ruby:users_controller.rb

class UsersController < ApplicationController def sign_in_process user = User.find_by(email: params[:email]) if user && user.authenticate(params[:password]) user_sign_in(user) flash[:success] = 'ロ

元記事を表示

Rails6 bootstrap

rails6にbootstrapをCDNで追加したところ、JSの動作不具合が多かった。下記の方法で実施すると不具合がなくなった為、備忘録として記述する。

参考URL: https://medium-company.com/rails-bootstrap/

Rails6標準の「yarn + webpacker」でBootstrapを導入

“`:console
yarn add jquery bootstrap popper.js
“`
Rails直下にあるpackage.jsonで確認

“`ruby:package.json
{
“name”: “test_pro”,
“private”: true,
“dependencies”: {
“@rails/actioncable”: “^6.0.0”,
“@rails/activestorage”: “^6.0.0”,
“@rails/ujs”: “^6.0.0”,
“@rails/webpacker”: “4.2.2”,
“bootstrap”: “^4.5.0”,

元記事を表示

リレーションシップのダミーデータを作成する

###環境
ruby ‘2.6.5’
rails ‘6.0.3’

###seeds.rb
“`
# user
User.create(
email: ‘aaaaaa@au.com’,
password: ‘aaaaaa’,
account: ‘arigatou’
)

5.times do
email = Faker::Lorem.sentence(word_count: 8) + ‘@au.com’
password = ‘password’
account = Faker::Lorem.sentence(word_count: 6)
User.create!(
email: email,
password: password,
account: account
)
end

# article
users = User.all
5.times do
c

元記事を表示

Rubyの演算優先順位

Rubyでの演算処理は、以下の優先順位に従って実行される。

“`
優先順位:高

::
[]
+(単項), !, ~
**
-(単項)
*, /, %
+, –
<<, >>
&
|, ^
\>, >=, <, <= <=>, ==, ===, !=, =~, !~
&&
||
.., …
?:(条件演算子)
= (+=, -=, …等も含む)
not
and, or

優先順位:低
“`

元記事を表示

クラス、メソッド、インスタンス変数の関係と命名(オブジェクト指向)

## 前提
#### クラス
クラスはオブジェクトであり、概念。
#### メソッド
メソッドはクラス(オブジェクト)の振る舞い。
#### インスタンス変数
インスタンス変数はクラスの属性、性質、状態を表すもの。

## 良い命名とは
基本的には`「クラス名+メソッド名」と並べた際に英語として適切であれば良い命名`だといえる。
つまり基本はクラスが主語、メソッドが述語の関係。
もしくはクラスを操作対象のオブジェクトとみなした際の、命令形にしたときの対象となる。

例えば「モンスター」クラスに「攻撃する」というメソッドがあれば

“`ruby
class Monster
def attack
end
end

monster = Monster.new
monster.attack
# モンスターは攻撃する
# モンスターよ、攻撃しろ!
“`

のように命名すると良い。

## 命名を考える際に気をつけること
#### 関係性を理解し言葉にできるか
あるオブジェクトの振る舞いがメソッドで、その構成要素/属性/性質がインスタンス変数。この関係性をまずは理解する。

そして対

元記事を表示

自分で作成したRubyのアプリを指定した場所から始まるように設定するには

modelやcontrollerを作成しているとして、

例えば、app/views/tweets/indexを最初に表示させたいとして

config/routes.rbに

Rails.application.routes.draw do
 root to: ‘tweets#index’
 resources :tweets
end

と記述すれば最初に表示できる。

「root to:」は最初に表示させたいview(今回の場合は、’tweets#index’)を指定できる。

「resources :〜」はその後に記述するviewに向けてのルートを作成してくれる。

道路に例えると、「resources」で道を作り、「root to」でその道を選ぶという感じです。

元記事を表示

Rubyで文字列を反転させる方法はreverse

ruby 2.7.0についての記事です

– reverse 文字列を文字単位で左右逆転した文字列を返す
公式ドキュメントStringクラスreverse
– revers 配列でも使える 
公式ドキュメントArryクラスreverse

“`ruby
s = “string”.reverse # stringクラスで使う場合
puts s # => gnirts

arry = [“a”,”b”,”c”] # arryクラスで使う場合
print arry.reverse # => [“c”,”b”,”a”]
“`

元記事を表示

Railsプロジェクトをdocker-composeで環境ごとに構築

Railsのプロジェクト(Redmine)をdocker-composeを用いて、
環境ごとに管理していきます
今回はdockerを用いた環境構築を主軸としたため、
webサーバーなどの詳しい説明は省きます

作成:2020年11月24日
## 環境
Ubuntu18.04
Rails 5
Ruby 2.6.5
Redmine 4.0
nginx 1.15.8
Docker 19.03.13
docker-compose 3
MySQL 5.7

## 必要なもの
Dockerとdocker-compsoeが動く環境(今回はUbuntu18.04で実行)
Redmineのソース
やる気

## ざっくりとした方法
環境ごとにcomposeファイルを作成
環境変数COMPOSE_FILEを環境ごとに指定する

## コンテナ構成
– 開発環境
app(rails), db(mysql)
– 本番環境
app(rails, puma), db(mysql), web(nginx)

## フォルダ構成
docker-compose.develop.ymlが開発環境とテ

元記事を表示

Rails 掃除提案アプリのアルゴリズム

#はじめに
オリジナルアプリとして掃除提案アプリを開発しました。その際、苦労したところを忘れずに書き記します。

#目次
1.掃除提案機能の説明
2.必要なカラムとその型
3.Rubyのコード

#1.掃除提案機能の説明
予め掃除箇所の情報を登録する。登録情報に応じて、毎日どこを掃除すれば良いか提案する機能である。なお登録情報は下記3つ。
・掃除箇所名
・掃除頻度(○日に一回掃除する)
・最後に掃除した日付

提案のアルゴリズムとしては下記の通り。
①最後に掃除した日付と今日の日付から経過日数を算出する
②経過日数と掃除頻度を比較する
③結果に応じてtrueもしくはfalesを返す。
④falseとなった場合、提案(画面に表示)する。

#2.必要なカラムとその型
必要なカラムと型を下記に示す。状態は上記のtrueもしくはfalseが入るboolean型のカラムである。

|登録情報 |カラム名 | 型 |
|—————|——————|——-|
|掃除箇所 |place

元記事を表示

Rails on Dockerのgemの永続化について

背景

Dockerを利用したアプリ開発を行っていて、ログイン機能を搭載したくbcryptをGemfileに追加したが以下のエラーが出続け解決不能に。

“`
22: from /usr/local/bundle/gems/spring-2.1.1/bin/spring:49:in `


21: from /usr/local/bundle/gems/spring-2.1.1/lib/spring/client.rb:30:in `run’
20: from /usr/local/bundle/gems/spring-2.1.1/lib/spring/client/command.rb:7:in `call’
19: from /usr/local/bundle/gems/spring-2.1.1/lib/spring/client/server.rb:9:in `call’
18: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel

元記事を表示

[Rails]exists?メソッド、present?メソッド、presenceメソッドについて勉強してみた![初心者]

#それぞれの違い
“exists?メソッド“
指定した条件のレコードがデータベースに存在するかどうか、真偽値で返すメソッド
“present?メソッド“
レコードの存在確認を行った後に、インスタンスを使って何か処理をしたい時に使用するメソッド
“presenceメソッド“
オブジェクトが存在すればそのオブジェクトを返し、オブジェクトが存在しなければnilを返すメソッド

#exists?メソッド

“`ruby:基本構文
オブジェクト.exists?(条件)
“`

“exists?メソッド“の引数に条件を指定すると、条件にマッチするレコードがあれば“true“を返し、レコードがなければ“false“を返します。

###指定したidのレコードを確認する方法
“`ruby:
pry(main)> User.exists?(1)
=> true
“`

###指定した条件のレコードを確認する方法
exists?メソッドの引数にハッシュ(カラム名: ‘値’)を渡します。

“`ruby:
pry(main)> User.exists?(name: ‘田中’

元記事を表示

Ruby on Railsでの頻出単語(まとめ)

Ruby on Rails似て、よく出てくる単語の意味をまとめたものです。
辞書的に使っていただけると幸いです。

[データベース関係]

rails g model テーブル名(はじめ大文字) カラム名:データ型
新しくテーブルとカラムを作るときに、ターミナルで使う

rails g migration ファイル名
テーブルに新しくカラムを追加するときに、ターミナルで使う

add_column :テーブル名, :カラム名, :データ型
マイグレーションファイルに、新しいカラム名を追加するときに使う

rails db:migrate
データベースに変更を加えるときに、ターミナルで使う

元記事を表示

鋸入門

# 概要

HTML、XML、SAX、Readerのパーサ

* Xpath/CSSによる解析
* XML/HTMLの生成
* なんか気づくと入ってる

![e425a6dd-afb0-a50e-e125-ecc831eef93e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598852/535e9205-ca85-6091-04a6-6bf93385b804.png)

# サンプル

こんなHTMLドキュメントがあったとして、ここから「各言語とそのリンク」を抽出したい

“`html


Lightweight language

Lightweight language

元記事を表示

Refileの使い方

## ImageMagickをインストール
本番サーバーとか開発環境に`image-magick`がないと動かないのでインストールしておく。

“`zsh:インストールされてるか確認
$ convert -version #以下のようにVersion: ImageMagick バージョン名が表示されていればOK
Version: ImageMagick 7.0.10-38 Q16 x86_64 2020-11-16 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI
Delegates (built-in): jng jpeg png tiff zlib
“`
“`zsh:インストール方法(Cloud9の場合)
$ sudo yum -y install libpng-devel libjpeg-devel libtiff-devel g

元記事を表示

このプログラムの考え方が知りたい…[Ruby]

#ひな祭り
##問題
#あなたが持っている 10 体の人形を “A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J” で表します。ひな壇の各段 (計 3 段) に並べる人形の数が与えられるので、各段にならべる人形の記号を改行区切りで出力してください。人形は必ずもとの A, B, C, … の順番で並べます。

例)

各段にならべる人形の数: 2, 3, 5

→ 人形の並べ方:

AB
CDE
FGHIJ
#入力される値
入力は以下のフォーマットで与えられます。

h_1 h_2 h_3
ひな壇の 1 段目、2 段目、3 段目に並べる人形の数を表す整数 h_1, h_2, h_3 がこの順に半角スペース区切りで与えられます。入力は 1 行となり、末尾に改行が 1 つ入ります。
#期待する出力
ひな壇への人形の並べ方を以下の形式で出力してください。

s_1
s_2
s_3
ひな壇の 1 段目、2 段目、3 段目に並べる人形を表す文字列 s_1, s_2, s_3 をこの順に改行区切りで出力してください。

s_i (1 ≦ i ≦ 3)

元記事を表示

initializeメソッドにて行う最もベーシックな初期化

まずinitializeメソッドとは、Rubyで`クラス名.new`でインスタンスを生成したときに呼び出されるメソッドで、インスタンスの生成と同時に実行したい処理を記述します。
このとき、使用するインスタンス変数は全てこちらで初期化が必要です。

### initializeメソッドの書き方
例えば、このように`初期化の時点で代入してしまう`ものに関しては分かりやすいと思います。

“`ruby
class ClassName
def initialize
@colors = [“black”, “white”, “gray”, “red”, “blue”] # 初期化の時点で値を代入している
end

def choose_color
@colors.sample
end
end
“`

ただ、このように`後から代入することが決まっていて、初期化時点では空`の値の場合はどうしたら良いのか↓

“`ruby
class ClassName
def initialize
# どう書けば良い?
end

def write_revi

元記事を表示

OTHERカテゴリの最新記事