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

Ruby関連のことを調べてみた2019年11月23日
目次

【Guard】自動生成されるGuardfileで監視・実行されるファイルは結局どこなのか、ソースコードから読み解いてみた

## はじめに
RailsアプリでRSpecを自動で走らせるためにGuardを導入したのですが、その設定ファイルである`Guardfile`について理解を深めたかったのでまとめてみました。

踏み込んでいくうちにソースコードまで読むことになり、メタプログラミングの勉強にもなりました。

この理解で`guard-rspec`や`guard-rubocop`で自動生成される内容にアレンジが加えられるようになったので、生産性が上がりそうです:point_up:

ベースとして、こちらの記事を参考にさせて頂きました。
[rubyのGuardとRSpecをRailsを使わない環境でつかう | 大石制作ブログ](https://blog.s0014.com/posts/2017-05-24-guard/)

## この記事が役に立つ方
– 自動生成されるGuardfileを自分ではアレンジ出来ない方

## この記事のメリット
– 自動生成されるGuardfileではどういう設定がされているのかが分かる
– Guardfileを自分用にアレンジ出来るようになる。

## 環境
– macOS Mo

元記事を表示

【Rails】パーシャルを使う

# パーシャルのメリット
あちこちで使う部品を定義しておけば、
その部品を呼び出すだけで同じViewを出力できるようになる。

## パーシャルファイルの作成
viewディレクトリに作成
`_任意の名前.htil.erb` <=`_`先頭にアンダースコアをつける。 #### 繰り返し使用する部分テンプレート作成 ```form.html.erb <%= form_for @board do |f| %>

<%= f.label :name, '名前' %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.label :title, 'タイトル' %>
<%= f.text_field :title, class: 'form-control' %>
VSCodeでRubyのコードを書いてデバッグするためにしたこと

# はじめに
この記事はrubyを学び始めて半年ほどの人間が書いたものです。
VSCode上でrubyのコードの編集、デバッグをするためにしたことを書いています。
# 環境
記事の内容について以下の環境で動作確認しています
macOS Catalina バージョン: 10.15.1
Visual Studio Code バージョン: 1.40.1
# 手順
1. rbenvをインストールする
2. rbenvを使ってrubyをインストールする
3. Bundlerをインストールする
4. debase (rubyのデバッガ) をインストールする
5. ruby-debug-ideをインストールする (debaseとVSCodeを連携できるようにする)
6. VSCodeにrubyの拡張機能を追加する

## 1. rbenvをインストールする
rubyのバージョンを切り替えられるようにするためにrbenvをインストールします。
ターミナルを開いて以下のコマンドを実行します。

“`bash:
$ brew install rbenv
“`

rbenvコマンドが使えればインストー

元記事を表示

Excelって名前しか知らないPCに不慣れな感覚派22歳プログラミング完全未経験者がRubyを習得するまでの軌跡。Part2

実践編
—–
progateのRubyのレッスンは全5章。高校以来こういう小難しいものとは無縁だったわたしからすると少々不安が多かったが実際はこんな感じだった。

【1章】 スライドと説明を見れば自分で答えを考えてスルスルっと正解してサクサク進める。
—————————————————————————–
最低限の用語
———-
文字列   (”文字列”) (”)で囲んだ言葉、数字のこと 囲まないとプログラミングされちゃう。
コメント   (#)をつけると1行だけその後ろは全てプログラミングとは関係ないメモ帳にできる 応援メッセージやそのときの気分を書くのに使える。
計算記号   普段の日常通り。 (%)はあまり馴染みがないから注意割り算したときの余り。
変数      箱。一つ厄介なのは大きさがミニマムな時もあればハッシュが入るくらい大きい時もありサイズの概念がない?
要素     なにかすごい大切ななにかのように感じるが見かけだけ。要は箱(変数)の中身
比較

元記事を表示

プログラミング学習5日目

今現在わからないことについて

ruby on railsの
バグ修正の問題で、
何が原因か判断できない。

その理由はMVCの流れを理解できていないから。
細かいルール(どのように記述するかなど)

改善策としては、
これから先の練習問題をときつつ
どんなバグが多いのか体感して行く。

それで自分の理解できていない部分を
細かく洗い出す&よく出るバグの修正を重点的に出来るようにする。

今やるべきことは
問題をといて、自分の苦手を知ること。
どんなバグが多いのか知ること。

わからないことは人に聞くこと。ぐぐること。以上!

元記事を表示

5日目の午後。

今日学んだことは
ハッシュ、引数、バグ修正の考え方。

ハッシュについてわからないことが多かったので、すっきりした。

ハッシュとは箱であり、配列にきれいに並んで入っている。
一つ一つに番号がある。
ハッシュから取り出すには、
ハッシュ名[:キー名]
ハッシュに入れるには
ハッシュ名[:キー名]=バリュー名

である。

元記事を表示

ヌジョレーボーボー

“`ruby
puts [‘ボ’, ‘ジョ’, ‘レ’, ‘ヌ’, ‘ボ’].shuffle.map.with_index {|x, i| i > 1 ? x+’ー’ : x}.join
“`

Ruby はこういうの書くのが簡単でいいですね。

元記事を表示

if・unlessを一行で

後置なんちゃらというやつです。
処理を先に、条件式を後ろにすることでスマートに書けます。

#後置if

“`ruby
num = 1
puts “0より大きいよ!” if num > 0
“`

#後置unless

“`ruby
num = 1
puts “0じゃないよ!” unless num == 0
“`

it’sスマート!
ただし、条件式が複雑な時は普通の方を使いましょう。

ではまた!

元記事を表示

やさしい図解で学ぶ モデル マイグレーション その1

今回は[やさしい図解で学ぶ 中間テーブル  概念編](https://qiita.com/ramuneru/items/db43589551dd0c00fef9)のつづきとして、

実際に中間テーブルを作成するほか、モデルとマイグレーションについてRubyのフレームワークであるRailsを用いて学んでいきましょう。

## ⭐️テーブル作成に必要なファイル

DB設計が終わったら、
「DBのデータを取り扱うファイル = **モデル**」
「テーブルの設計図となるファイル = **マイグレーション**」を作らなければいけません。

まず、テーブル作成時にとりあえず必要なファイルは

Macでrbenvを使ってRubyとRailsをインストールする

# 環境

macOS Mojave 10.14

# 0. Homebrewをインストール

“`bash
$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
“`

公式ページ(https://brew.sh/index_ja)

# 1. Rubyをインストール

### rbenvをインストール

Rubyのバージョン管理ツールであるrbenvとそれに必要なツールをインストールします。

“`bash
$ brew update
$ brew install rbenv ruby-build

$ echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
$ source ~/.bash_profile
“`

rbenvを最新版に更新します。

“`bash
$ brew upgrade rbenv
“`

rbenvをインストールできたか確認します。
バージョンが表示されれ

Ruby on Rails チュートリアル習得時の備忘録 (処理の流れ、MVC, Gem, bundler, フォルダ階層・・・)

Railsチュートリアルの冒頭で概念的な説明があまりなくQiitaの情報も断片的で
チュートリアルの理解に苦しんだため、自分なりに整理した資料です。
独学だとよくわからないコマンドを連打するよりざっくりまずは全体感を理解した方が頭の中にすんなり入るはずと思うのは私の気のせいですかね…

〜処理の流れ〜
Browser -> Route(config/routes.rb) <-> Controller <-> Model <-> Database
Browser <- View <-> Controller

〜MVCとは〜
model(s): データベースの操作
view(s): UI処理
controller(s): models, views の連携、
 viewsのディレクトリ名と結びつき、
 defで定義するアクションは
 viewsディレクトリ以下のファイル名と紐付き

rails 主要コマンド一覧: https://railsguides.jp/command_line.html
 ※コマンドが短縮されることがある generate が g

〜Gem, Gemを管理す

if文の書き方のまとめ(Scala、Java、Rust、C言語、C++、Go言語、PHP、Perl、Python、Ruby)

いろんな言語を触っていると、言語の重要な特徴はともかく、細かい文法や記号の使い方などがだんだんごっちゃになってきてしまいます。あれ、これってこの言語だとどう書くんだっけ?ってなることがよくあります。前はよく使っていた言語なのに、ちょっと離れただけでもう忘れてしまった、とショックに感じることもあります。なので、こういうメモを作っていこうと思います。

# Scala

“`scala
if (x >= 30) {
…;
} else if (x >= 0) {
…;
} else {
…;
}

// 文ではなく式
val max = if (a > b) a else b;
“`

– 条件式は論理値であることが必要
– C言語と同様に`{ }`の中の式が1つの場合は`{ }`を省略可能
– 文ではなく式

[Conditional Expressions – Expressions | Scala 2.13](https://scala-lang.org/files/archive/spec/2.13/06-expressions.html#c

railsでアプリ名を確認する方法

“`
# bundle exec rails c
Loading development environment (Rails 5.1.6)
“`

“`
> File.basename(Rails.root.to_s)
=> “server”
“`

【Docker】Rails+MySQLの環境をDockerで構築中「ポートの衝突」に遭遇してから解決するまで

## はじめに
Dockerで**Ruby on Rails + MySQLの環境**を構築中にいわゆる**「ポートの衝突」**に遭遇したので解決までを記載します。

同じような箇所でハマった方の参考になればと思います。

## この記事が役に立つ方
– DockerでRails+MySQLの開発環境を行いたいと考えている
– Docker初心者

## この記事のメリット
– ポートの衝突を回避する方法が分かる

## 環境
– macOS Mojave バージョン10.14.6
– シェル:zsh
– Ruby:2.6.5
– Rails:5.2.2
– MySQL:5.7
– Docker:19.03.5

## Dockerfile

こちらを参考に、rubyのバージョンのみ、現行安定版である**2.6.5**にしています。
[丁寧すぎるDocker-composeによるrails5 + MySQL on Dockerの環境構築(Docker for Mac) – Qiita](https://qiita.com/azul915/items/5b7063cbc80192343f

気象×Ruby 〜Mechanizeを使ってRubyスクレイピング〜

#今回の試み
###・ 気象データAMeDASの10分ごとの値を一気に取得する
###・ PythonとRubyの両方でスクレイピングしてみる

スクレイピングするデータは[こちら](https://www.data.jma.go.jp/obd/stats/etrn/view/10min_s1.php?prec_no=44&block_no=47662&year=2019&month=01&day=01&view=p1)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354874/13bf9771-17c0-c790-a403-251492816bfa.png)

#1. Pythonによるスクレイピング
“`python
# -*- coding: utf-8 -*-
import pandas as pd
import urllib.request
from bs4 import BeautifulSoup

url = ‘https://www.data.jma.go.jp/ob

大学生のプログラミング学習日記

## スタート
今日から日々学んだこと等を書いていこうと思います。
ミス等たくさんあると思いますが、ご指摘頂けると嬉しいです。

自己紹介
・ケンシロウ
・北海道大学2年
2019年8月から2ヶ月間、techacademyにてwebアプリケーションコースを受講し、rubyとrubyonrailsを学習。
受講終了後、簡単なブログ機能を持ったアプリを作成。
12月から、札幌web系スタートアップ会社でインターン予定。

将来はプログラミングスキルだけでなくいろいろなスキルをつけ、自分でサービスを作って提供したい。

入力された数値を素因数分解するコードをRubyでprimeライブラリを用いずに書いてみた

## はじめに

Rubyで、入力された数値を素因数分解するコードを書きました。

[primeライブラリ](https://docs.ruby-lang.org/ja/latest/library/prime.html)というライブラリを用いる方法もあるようですが、このライブラリを用いずに書かれたRubyでの素因数分解に関するコードがググっても案外見当たらなかったので、あえて用いずに書いたコードを下記に示します。

こちらの記事を参考にさせていただきました:[C言語で素因数分解](https://qiita.com/Wakaba_C/items/16d076ef2cc07836a29d)

## 書いたコード

(2019.11.22 @scivola さんから、無駄な記述や、無駄にforループを回してるところについてのご指摘をいただき、コードを修正しました。@scivola さん、ありがとうございます。)

~~~ruby:prime_factorization.rb
prime_list = [] # 算出された素数を格納する配列

while true do
print “

RSpecで可変長引数のテストがしたいとき

動作確認環境: Ruby: 2.6系, Rspec: 3.8系, OSは問わないはずw

# こんなとき
たとえば、グループで必須チェック(グループ内のいずれにも値が設定されない場合にエラーとする)を行うメソッドを作ったとき

“`rb

require ‘active_support’
require ‘active_support/core_ext’

class Validator
def required_group(data, *columns)
joined_columns = columns.join(‘と’)
flg_present = false
columns.each do |column|
flg_present |= data[column].present?
end
return “#{joined_columns}のうちいずれか1つは入力必須です” unless flg_present
end
end
“`

RSpecではこう書くとよろしい

“`rb

describe Valid

【Rails】パーシャルを利用する

Railsではviewファイルで使う部品(パーシャル)を作り、他のviewファイルから呼び出して利用することができます。
##パーシャルの基本ルール
・ファイル名はアンダースコアから始まる
・`render ‘{ファイル名}’`で呼びだす
・パーシャルが同じディレクトリにある時は`render ‘{ファイル名}’`、違うディレクトリの時は`render ‘{ディレクトリ名/ファイル名}’`で呼びだす。(拡張子不要)

##使ってみる
簡単なTODOアプリのエラーメッセージをパーシャル化して利用します。
・[Ruby on Railsで簡単なアプリを作成](https://qiita.com/d0ne1s/items/5e63dde992f20f25b8bb)
・[TODOアプリにバリデーションを追加する](https://qiita.com/d0ne1s/items/822f66d16d65ae28162b)
###パーシャルを作成
“`erb:/app/views/shared/_error_messages.html.erb
<% if @task.errors.any? %>

【Rails】TODOアプリにバリデーションを追加する

[シンプルなTODOアプリ](https://qiita.com/d0ne1s/items/5e63dde992f20f25b8bb)にバリデーション(入力制限)を追加していきます。

バリデーションは`create`、`save`、`update`などのメソッドが呼び出されたタイミングで実行されます。

##バリデーションを追加する
タスクの最大文字数を20文字に設定するバリデーションをmodelに記述します。
文法は`validates :{カラム名}, {ルール名}: {ルールの内容}`です。

“`/app/models/task.rb
class Task < ApplicationRecord validates :title, length: {maximum: 20} end ``` ##エラーメッセージを表示する バリデーションに失敗するとfalseが返され、`@{オブジェクト名}.errors.full_messages`でエラーメッセージの配列を取得することができます。 まずはControllerを修正し、エラーが発生した場合時にトップページに移動しないよ