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

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

Ruby Error[Your Ruby version is 2.6.3, but your Gemfile specified 2.6.5]

# Ruby Error[Your Ruby version is 2.6.3, but your Gemfile specified 2.6.5]
上記のエラーに引っ掛かったので記事にしました。
### 環境
macOS Catalina 10.15.3

## Rubyのversionを変えたくても変えられない。
スクリーンショット 2020-02-06 23.09.29.png

### rbenvの導入
[ここ](https://qiita.com/Alex_mht_code/items/d2db2eba17830e36a5f1)を参考にして、[rbenv](https://github.com/rbenv/rbenv)というRubyのversion管理ツールを導入した。

“`terminal
$ br

元記事を表示

クラスメソッド、インスタンスメソッド。いつ使うのか。

まだエンジニアとして働く前、ちょうどRubyの勉強を始めた時に書いた[「メソッドとクラスメソッドとインスタンスメソッドが曖昧だった」](https://qiita.com/right1121/items/c74d350bab32113d4f3d)という記事があります。
この記事ですが、すでに1年半ほどが経過しているにも関わらず現在もいいねが押されており、初学者の助けになっているのであれば嬉しい限りです。
しかし、読み返してみるとこの記事は**概念を説明しているだけで実際にどのように使えばよいのか**は記述されておらず、腑に落ちないところがあるのかなと思いました。
そこで、今回はできる限り実例を交えて解説していきたいと思います。

## いきなりですが、あなたは校長先生になります。

あなたにはいまから校長先生になっていただきます。生徒が入学してくるため、入学した生徒の管理を**Ruby**で行ってください。

### クラスを作る

まずはクラスを作成しましょう。クラス名は1年1組で、担当教師は山中先生です。

“`ruby:最初は最低限の機能
class Class
def i

元記事を表示

【Ruby】scanとmatchの違い

#scanとmatchの違いってなんなんだろう
Rubyの入門書のコード例を実行する中で、ある文字列から正規表現にマッチした文字列を取得する方法としてscanとmatchというメソッドを学びました。
両者は同じようにある文字列から正規表現にマッチする文字列返すというメソッドですが、入門書の中でもこの二つのメソッドは度々登場しているのですが、どのように使い分けたらよいのかわからなくなってしまいました。そこで、今回はscanとmatchの違いをまとめてみました。

※この記事ではMacにインストールされたRuby 2.6.3を使用しています。
実行環境はRubyファイルをターミナルで実行しています。

#実際にscanとmatchを実行してみる
##matchメソッドを実行してみる

実際に、”123-4567-89″という文字列から数字だけを正規表現を用いてmatchメソッドで取得してみます。

“`ruby
p ‘123-4567-89’.match(/(\d+)-(\d+)-(\d+)/)
#=> #

元記事を表示

【Rails】DBのカラムにインデックスを付与する/しない場合での速度比較をしてみた

## はじめに
RailsでDBにインデックスを付与するメリットを体感するために、試験的に1万件のレコードを作成し、**インデックスの有無**で実行速度の比較をしてみました。

今回のケースでは**およそ18%の速度UP**という結果が出ています:point_up:
※サクッと作成するため、DBはRailsのデフォルトである**SQLite3**を使用しました。

> 2020/02/07追記
10万件のレコードだと20倍の差が出ていることを確認し、結果を追記しました。
@error_401 さんありがとうございます。

## 環境
“`yaml
OS: macOS Catalina 10.15.3
zsh: 5.7.1
Ruby: 2.6.5
Rails: 6.0.2.1
“`

## 事前準備

“`shell:rails_newする
$ rails new sampleapp
“`

“`shell:sampleappディレクトリに移動
$ cd sampleapp
“`

“`shell:db_createする
$ rails db:create
“`

“`

元記事を表示

【Rails】railsブログサイトの練習で躓いたところメモ

railsチュートリアル+αでブログサイトを作成していて躓いたところをまとめました。

#環境
– ruby on rails
– mysql
– redis
– docker
– macOS

#作ってみて
railsのブログアプリを作ること自体はそこまで難しいものではありませんでした。
ただデータベース周りがややこしくてそこにかなり時間をとられてしまったことが今回の反省点です。

#Rails deviceを使ってユーザー関連機能を作る
ブログアプリにまず必要なのはユーザー関連のあれこれです。Railsはその辺かなり楽に作れるdeviceというgemがあります。

deviceを利用するとログイン認証やアクセス制限などが簡単に実装出来ます。今まで練習も兼ねてユーザー関連は自分で作ってたのですが、一度こういった機能を知ってしまうと戻れなくなってしまいますね。

ここはそこまで詰まらなかったので以下の参考サイトを見れば大丈夫だと思います。

view関連なども「Rails device view」とかで調べたらたくさん出てきます。

【https://qiita.com/Hal

元記事を表示

Ruby、PHP、Java、JSでの書き方の違い

##はじめに
「Rubyでプログラミングの基礎を学んだから、次はjsやってみようかな!」

「書き方ごちゃごちゃになって、何が何だかよくわかんねー!!」

こんな人もいるのでは?

僕自身も以前、詰め込みすぎでパンパンになりましたので、書き方の違いをわかりやすくまとめてみました。
一つ一つ覚える必要はありませんので、この記事を、ストックしていただければと思います。
オブジェクト指向の理解も多少深まると思いますので、最後までご覧ください!

## 文字出力
基本となる文字の出力。言語によって処理のされ方が違うので難しいところですが、基本なのでしっかり押さえましょう。Javaはやっぱり記述が長いですねw

“`ruby:
#Ruby
puts “こんにちは”
“`
“`php:
#PHP
echo “こんにちは”;
“`
“`java
//Java
System.out.println(“こんにちは”);
“`
“`javascript
//JavaScript
console.log(“こんにちは”);
“`

## 変数代入

元記事を表示

初学者によるプログラミングMemo #22 素因数分解

#はじめに
今回は素因数分解のお話です
最近問題を解くことが多くなって、アルゴリズム関係に面白みを見出しています
Rails関係なくても書いている下記はすでに決まり文句ともなりました
なお、本記述はMacにおいて、Railsでの開発を前提としています
また、まだまだひよっこですので、不備等ございましたらご指摘いただけると幸いです→よく間違えますが、生暖かく見守ってくださると幸いです

#目次
– 素因数分解とは
– 問題を解いてみる

##素因数分解とは
素因数分解とは、ある正の整数を[素数](https://qiita.com/Ikuy_h/items/9a066958eb67728ca0e4)の積で表すことです
なんのこっちゃですかね?
具体的に見てみましょう
例えば「30」を素因数分解してみましょう

“`.rb
30 = 10 * 3
10 = 5 * 2
# ↑を合わせるとこう(↓)なる
30 = 2 * 3 * 5
“`

2,3,5はいづれも[素数](https://qiita.com/Ikuy_h/items/9a066958eb67728ca0e4)ですね
この

元記事を表示

正規表現でTwitterURLからユーザー名とstatusを取得する【Ruby】

#TwitterのURLについて

これがツイートのURLの例
`https://twitter.com/yurinolog/status/1209290280328814593?s=20`

httpsから始まり3つ目のyurinologが**ユーザー名**、5つ目の数字の羅列が**status**と呼ばれる各ツイートに割り振られる番号。(語尾のs=20の正体はいまだに分からない。知ってる方いらしたら教えて頂きたいです)

#書いたコードと結果

“`ruby
url = “https://twitter.com/yurinolog/status/1209290280328814593?s=20”

/(https|http):\/\/(twitter.com)\/([A-Za-z0-9_]*)\/(status|statues)\/(\d+)/.match(url)

puts $1 #=> http or https
puts $2 #=> twitter.com
puts $3 #=> user
puts $4 #=> status or statuses
puts $5 #

元記事を表示

rails new からrails serverまでの流れ

この記事は`rails new`したい時に色々忘れていたりするので**自分用のメモです**。
都度更新していくかもしれません。
# rails newまで
gemはvendor/bundleで管理したい

– フォルダ作成からAtomへ移動まで

“`
~
❯ cd MyApp

~/MyApp
❯ mkdir portfolio

~/MyApp
❯ cd portfolio

~/MyApp/portfolio
❯ bundle init
Writing new Gemfile to /Users/kn428/MyApp/portfolio/Gemfile

~/MyApp/portfolio
❯ atom .
“`
– rails5.2の環境にしたかったので、Gemfileの`gem “rails”`のコメントアウトを外し、`gem ‘rails’, ‘~> 5.2.1’`とする
– bundler経由でrailsをインストールする

“`
~/MyApp/portfolio
❯ bundle install –path vendor/bundle –jobs=4

元記事を表示

中間テーブルとは??

## プログラミング初学者が学習する中間テーブルについて
– Railsなどのフレームワークを学習していて『中間テーブル』という言葉がよくわからなかったので備忘録も兼ねて解説します! (初投稿なので温かく見守ってください泣)

– [x] 中間テーブルってなんなの??
– [x] 具体的な使い方

## 中間テーブルってなんなの??
中間テーブルとは・・・データベースで、テーブルとテーブルの多対多の関係を表すテーブルのこと。

これだけ言われてもパッとしないかもしれません。イメージしてみましょう!

#### データベースにuserテーブルとgroupテーブルというのが存在すると仮定します。

*userテーブル*

| id | name |
|:————–:|:————–:|
|1|山田|
|2|佐藤|
|3|鈴木|
|4|田中|
|〜|〜|

*groupテーブル*

| id | group-name |
|:—-:|:————:|
|1|Aグループ|
|2|B

元記事を表示

Rails ユーザーごとに複数の一覧ページのフラグメントキャッシュを作成する

# 始めに
プログラミング初学者のQiita初投稿です。
至らない点も多くあると思いますが、頑張って最近やったことを書いてみようと思います。

# なにをするか
まず、ユーザーが投稿した記事を一覧表示したページが複数ある
今回は全ての記事一覧と、ユーザーがお気に入り登録した記事一覧を作成

**この2つのページのフラグメントキャッシュをユーザーごとに分けて作成する**
キャッシュを通して全てのユーザーに同じページが表示されてしまうのを防ぐため、ユーザーごとに分けます。

# 環境
– Ruby 2.6.2
– Rails 5.2.2
– devise 4.7
– Redis 4.1

# ModelとControllerの設定
Modelは
User, Post, Likeの3つ
ユーザーと、ユーザーが投稿する記事と、その記事をお気に入り登録するためのモデルです。
ユーザーはdeviseを使って作成しました。

“`app/models/user.rb
class User < ApplicationRecord has_many :posts has_many :likes

元記事を表示

開発環境の Ruby version を上げる

開発環境 (最近変なスペルになった macOS をここでは想定) に Ruby を入れるのは、よくある話だが、Ruby をバージョンアップする手順についてはもサッとできるようにまとめておく。

# 前提
– macOS にいれるミドルウェアのパッケージマネジメントは Homebrew で行っている
– Ruby は直接 Homebrew でいれるのではなく、rbenv を用いて管理している
– Ruby バージョンアップするのは久しい

つまり macOS > Homebrew > rbenv > bundler > 各フォルダごとに Gem file のような構成である。

# コマンド

rbenv にてインストール可能なバージョンは下記で確認できる。

“`shell

$ rbenv install -l

2.6.0
2.6.1
2.6.2
2.6.3
2.6.4
2.6.5

“`

もし、必要なバージョンが存在しない場合は rbenv 自体をバージョンアップしてあげる必要があるだろう。

“`shell

# Homebrew 本体を更新
$ brew doctor

元記事を表示

Rubyで始めるスクレイピング 〜入門編〜

# スクレイピングとは
Webサイトから自分の知りたい情報を抽出すること。
ex) 文章、画像、動画など

# TL; DR
Qiitaで「ruby」で検索して「いいね順」に並べた検索結果一覧をスクレイピングします。
コードを見ながら説明します。

**1. まずは前準備。**

“`scraping01.rb
# コードのsyntax highlight・補完などをしてくれるgem(無くてもいいけどめっちゃ便利)
# https://github.com/janlelis/irbtools
require ‘irbtools/more’

# URLにアクセスした内容をファイルのように扱えるgem
require ‘open-uri’

# スクレイピングのgem
require ‘nokogiri’

# CSV出力するgem
require ‘csv’

url = ‘https://qiita.com/search?page=1&q=ruby&sort=like’
“`

# URLのパラメータの仕組みについて
https://qiita.com/search?pa

元記事を表示

Leetcode: Swap Nodes In Pairs

“`ruby

require ‘minitest/autorun’
require ‘pry’
class SwapNodesInPairs < Minitest::Test def test_run list = ListNode.new(1) list.next = ListNode.new(2) list.next.next = ListNode.new(3) list.next.next.next = ListNode.new(4) new_list = swap_pairs(list) assert_equal(2, new_list.val) assert_equal(1, new_list.next.val) assert_equal(4, new_list.next.next.val) assert_equal(3, new_list.next.next.next.val) list = ListNode.new(1) new_list = swap_pairs(lis

元記事を表示

Leetcode: Reverse String

“`ruby

require ‘minitest/autorun’
require ‘pry’
class ReverseString < Minitest::Test def test_run input = ["h", "e", "l", "l", "o"] output = ["o", "l", "l", "e", "h"] assert_equal(output, reverse_string(input)) end def reverse_string(s, index = 0) return s if index == s.size / 2 first_char = s[index] last_char = s[s.size - 1 - index] s[index] = last_char s[s.size - 1 - index] = first_char index += 1 reverse_string(s, index)

元記事を表示

Rubyのメソッドを再実装する勉強法(Enumerable#chunkを再実装)

社内で定期的にやっているRubyのメソッドを再実装する勉強法の紹介です。
※ メソッドの再実装は[Grow.rb](https://github.com/akinov/reimplement_ruby/tree/master/enumerable)を参考にしています。

Rubyのメソッドを再実装することでRubyの理解を深め基礎力をつけることを目的にしています。
複数メンバーでやることで十人十色な実装、書き方に触れることができるので面白いです。

今回は`Enumerable#chunk`を再実装します。
※問題は[GitHub](https://github.com/akinov/reimplement_ruby)にまとめています。

# `Enumerable#chunk`

>要素を前から順にブロックで評価し、その結果によって要素をチャンクに分けた(グループ化した)要素を持つ Enumerator を返します。
ブロックの評価値が同じ値が続くものを一つのチャンクとして取り扱います。すなわち、ブロックの評価値が一つ前と異なる所でチャンクが区切られます。
返り値の Enumerat

元記事を表示

最小限の手間でMac上にOACISを導入する方法

この記事ではMac上で最小限の手順で[OACIS](https://github.com/crest-cassia/oacis)の環境をセットアップする手順について説明します。

OACISは様々な環境で動作する様に汎用的に作られている一方で、Linuxの知識がないとセットアップが難しい部分もあります。ここではMac使い向けに「とにかくこの手順に従えばセットアップできる」という方法をお伝えします。
詳細が知りたくなったら[公式ドキュメント](http://crest-cassia.github.io/oacis/ja/)を参照してください。
ここでは2020年1月時点で最新のv3.7.0をインストールします。

手順は以下の通り。

1. Rubyをインストールする
1. MongoDBとRedisをインストールする
1. localhostに対してSSHログインできるように設定する
1. OACISのソースコードをダウンロードする
1. OACISを起動する
1. OACISにlocalhostを登録する

## Rubyをインストールする

rbenvを使ってインストールします。r

元記事を表示

Rails Tutorialの知識から【ポートフォリオ】を作って勉強する話 #18.5 環境変数, Gmail送信設定編

# こんな人におすすめ
* プログラミング初心者でポートフォリオの作り方が分からない
* Rails Tutorialをやってみたが理解することが難しい

前回:[#18 EC2環境構築, Nginx+Puma+Capistrano編](https://qiita.com/aokyo17/items/281b5a1658ea58bc7b24)
次回:準備中

# 今回の流れ

1. Railsの環境変数を設定する
2. 本番環境でのGmailの送信を設定する

# Railsの環境変数を設定する
Rails5.2以降の環境変数の設定には、credentials.yml.encを使います。
デフォルトで.gitignoreになり暗号化されているのでおすすめです。
以下のように設定します。

“`shell:shell
EDITOR=vim rails credentials:edit
“`

“`yml:credentials.yml.enc
# aws:
# access_key_id: XXXX
# secret_access_key: XXXX

# Used as

元記事を表示

【Rails】I18n.tはtに省略できるんじゃない、省略したほうが良い

## I18n.tの省略記法
まだなんにもわかっていないRails触り始めて1週間くらいの頃、
**「RailsはViewファイル内では`I18n.t(‘hoge’)`って書かなくても`t(‘hoge’)`って書けるよ、
先輩たちもそう書いてるから合わせてね」**って言われてふむふむなるほど、
よくわからんがviewでは省略できるのかってなった経験はありませんか?

実はI18n.tをtにすると**文字が4文字節約できるってレベルではない変化**が起きていた

## つまりどういう事か
詳しい実相は[この辺](https://github.com/rails/rails/blob/a33dbb17b0818e8a2c75581275374bc0853958ca/actionview/lib/action_view/helpers/translation_helper.rb#L60)
`TranslationHelper`にtが実装されていたんですね

“`rails/actionview/lib/action_view/helpers/translation_helper.rb
de

元記事を表示

Ruby 変数に格納された文字列の開始文字数と終了文字数を指定して表示する

# 目的

– 変数に格納された文字列の開始文字数と終了文字数を指定して表示する方法をまとめる

# 書き方の例

– 下記に変数Aに格納された文字列を開始文字数と終了文字数を指定して表示する方法を記載する。

“`ruby
puts 変数A.slice(開始文字数..終了文字数)
“`

# より具体的な書き方の例

– 変数`today`に格納された文字列の0文字目から10文字目までを表示する方法を記載する。

“`ruby
today = “2020-02-04 09:01:35”
puts today.slice(0..10)
2020-02-04
“`

元記事を表示

OTHERカテゴリの最新記事