Ruby関連のことを調べてみた2021年10月22日

Ruby関連のことを調べてみた2021年10月22日

Rubyって何?

今日は初めて、プログラミングについて書いていこうと思います!

そもそもプログラミングって何だ?

ってところから入りたかったんだけど、なんせ自分も初心者で、
やり始めた人が最初つまづくところって、きっとRubyだと思うんですよね。
自分だけかな?そうであってくれ。。。!
そうであってくれっていうのも失礼か。。

HTMLとかCSSってのもあるんだけど、プログラミング言語とは少し違くて。
なんならそっちからやりたかったけど、重要なのはRubyみたい!
時間があったらそのうち書くけど、今はRubyから書かせてください。

Rubyって何だ?

https://www.ruby-lang.org/ja/

。。。ん?
ちょっとなんのこっちゃって感じ?
小難しめに書いてるので説明すると
要はプログラミング言語の1つです
初心者が一番最初に触れるかもしれないプログラミング言語なのではないでしょうか?
違ったらすいません。

たまに見たことある真っ黒な画面に、
色の付いた英語の列がずらーっと並んでいてそれをがちゃがちゃ打ち込むのがプログラミングのイメージだと思い

元記事を表示

【Rails】 通知機能の難しい箇所を解説してみた

通知機能

PFに通知機能を搭載したのですが、
理解するのが難しかったため勉強もかねて
通知機能の難しい箇所をひとつひとつ解説することにします!

流れ

・モデルの解説
・コントローラーの解説
・ヘルパーの解説

モデルの解説

“`php:app/models/post

# 通知機能のアソシエーション
has_many :notifications, dependent: :destroy

def create_notification_by(current_user)
notification = current_user.notifications.new(post_id: id, visited_id: user_id, action:”like”)
notification.save if notification.valid?
end

# comment_idはコントローラーで@comment.idと指定しているので
# 投稿のidを引数にいれている
def create_n

元記事を表示

RSpecでNaNを判定する

# 実行環境

– macOS 10.15.7 (19H1217)
– Ruby 2.6.7
– RSpec 3.10

# Rubyにおける`NaN`の挙動

以下のように,Rubyにおいて,`NaN`は期待通りの挙動をしない場合があります。

“`ruby
Float::NAN == Float::NAN #=> false
“`

# RSpecで`NaN`を判定する方法

`NaN`かどうかをRSpecで判定するためにはどうしたらよいでしょうか。
以下の判定方法では,意図した結果が得られない場合があります。

“`ruby
expect(num).to eq Float::NAN
“`
“`ruby
expect(num).to be Float::NAN
“`

有効な判定方法の一つをご紹介します。
カスタムマッチャを使う方法です。

Rubyでは,`.nan?`を使用して`NaN`かどうかを判定することができるため,以下のようにカスタムマッチャを使用した判定を行うことで,正しく判定することができます。

“`ruby
RSpec::Matchers.defi

元記事を表示

【アプリ開発】プログラミング初学者向けのアプリ『Roooad(ロ—ド)』をリリースしました。

# はじめに
ポートフォリオ用に、個人開発アプリ`『Roooad(ロ—ド)』`をリリースしました!

『Roooad(ロ—ド)』は、プログラミング初学者のために、皆が歩んできたロードマップを見ることができるサービスです。

https://roooad-map.com/

開発期間は、約40日間です。
デザインが苦手だったので、他の方のデザインを参考にさせていただきました?‍♂️(cssは、一から書いたので少し時間が掛かりました。)

また、途中AWSでのデプロイで躓いて10日ほど費やしてしまいました…
何はともあれ、無事アプリ開発ができて良かったです?

# アプリについて
### 登場人物

– プログラミング初学者(閲覧・作成)
– 個人で、メンターや学習教材を販売している方の宣伝(作成)

### ユーザーが抱える課題

– 初学者には「学習の流れ・学習にかかる期間・言語選び」と`分からないことが多い`。他人の学習してきた手順や期間を参考にしたい!
– プログラミング関連の学習教材やサービスの認知をして貰いたい。

### 解決方法

自身の学習終了までのロードマップ

元記事を表示

holiday_japanを使って平日のみcronを実行させる

gemのholiday_japanを使って平日のみ(土日祝日以外)taskが実行されるようにしたい。

##前提
現在のQiitaの記事投稿状況をSlackに通知してくれるbotがあり、その通知を平日19時に実行されるようにしたい。
gemのholiday_japanを使用したい。

– “`exit“`の引数がtrueだったら正常終了で0、falseの場合1を引数に指定したとみなさる

参考:https://docs.ruby-lang.org/ja/latest/method/Kernel/m/exit.html

“`scripts/check_holiday
#!/usr/bin/env ruby
require ‘bundler/setup’
require ‘holiday_japan’

exit(HolidayJapan.check(Date.today))
“`

– 「平日19時」だけ実行したい
– job_typeを指定することでコマンドをつなげられる
– “`||“`は左側が値が返ってくる(=true)のとき、右側も実行される

“`confi

元記事を表示

アプリケーション開発の手順!

#①.結論!

アプリケーション制作の手順は主に「企画/要件定義/設計/開発/保守運用」であることです!

実際にコードを書くのは「開発」と呼ばれるタイミングにあたり、その前後にもさまざまなやることがあります!

#②.企画

どんなアプリ(機能)を作るか決める段階のことです!

企画では初めに、誰のどんな問題を解決したいのかを決めます!

これが決まったら、解決手段として新しくアプリを作ったり、すでにあるアプリに新機能を追加することがあります!

企画でアプリ・機能を開発することが決まったら、次は作るものについての詳細を決めていきます!

これを「要件定義」と言います!

#③.要件定義

ユーザーがどのように機能を使用するのかを考え言語化する、障害が起こった時どうするかを決めるなど、詳細な情報を整理します!

要件定義が終わった後に、具体的にどんなコードを追加するのか、どんなテーブルを追加するのかなどを決めることを「設計」と言います!

#④.設計

エンジニアが実際にどのようにアプリや新機能を作っていくかの手順書や、必要な設計図を作る工程です!

設計には基本設計と詳細設計という

元記事を表示

【Rails】Tag機能 

#投稿にタグを紐付け〜絞り込みまで

##前提
– 投稿機能実装済
– bootstrap使用

##実装
###多対多の関係なので中間テーブルを用意
####まず`tag`モデル作成

“`:ターミナル
$ rails g model tag name:string
“`

“`ruby:
class CreateTags < ActiveRecord::Migration[5.0] def change create_table :tags do |t| t.string :name, null: false t.timestamps end end end ``` `null:false`を追加,空で保存できないように修正する ####`boards`と`tag`を紐付ける中間テーブルの作成 ```:ターミナル $ rails g model board_tag_relation board:references tag:references ``` ```ruby: class CreateBoardTagRe

元記事を表示

#2.5 レイアウトの調整

#はじめに
自分の学習復習のために、アプリを一から作成する手順を記事にしてます。
今回は #2.5 のレイアウト調整になります。

#目次
1.Bootstrap,font-awesomeの導入
2.各ページのレイアウト調整

##1.Bootstrap,font-awesomeの導入
* 1.gemファイルの追加
* 2.application.jsにbootstrap,font-awesomeを呼び出す記述を書く
* 3.Bootstrap,font-awesomeをSCSSに読み込ませる(今回はSCSSを使用)

の3つを行い、Bootstrap,font-awesomeの導入をしていく。

###1.gemファイルの追加
“`:gemfile
:
:
#bootstrapを利用できるようにする
gem ‘bootstrap’, ‘~> 4.5’
gem ‘jquery-rails’
#font awesomeも使えるようにする
gem ‘font-awesome-sass’, ‘~> 5.13’
“`

###2.application.jsにbootstrap,font-

元記事を表示

#2 投稿機能

#はじめに
自分の学習復習のために、アプリを一から作成する手順を記事にしてます。
今回は #2 の投稿機能になります。
ラジオボタンやプルダウン選択のフィールドも使用して作成していきます。

#目次
1.Model作成、マイグレーションファイルの編集
2.Controller,routes,viewファイルの作成
3.controllerの中身記述
4.viewファイルの中身記述

内容としてはシンプルですが、今回viewファイルの所でプルダウン選択やラジオボタンのフィールドも使用しているので、そちらの内容も理解していきましょう。

##1. Model作成、マイグレーションファイルの編集
“`
rails g model StudentPost
“`
投稿用のStudentPostテーブルを作成します。
rails db:migrateを行えばデータベースに反映されるのですが、その前にマイグレーションファイルを編集していきます。

“`Ruby:db/migrate/~~_create_student_posts.rb
create_table :student_posts

元記事を表示

TypeProf VSCode ExtensionでRubyの静的型解析を体験する

# はじめに

こちらは社内技術勉強会用の資料として作成したものです。

Ruby 3.0 がリリースされる前に、Ruby にも型宣言の考え方がどーの、みたいな雰囲気のことをぼんやり聞いていたのですが、ぜんぜんわかっていませんでした。あちこちで引用されているかと思いますが、

https://www.ruby-lang.org/ja/news/2020/12/25/ruby-3-0-0-released/

“`
Rubyは抽象解釈を武器に、型宣言なしで静的型チェックする未来を目指します。
“`

型宣言するのではなく、むしろ型宣言はありませんでした…

わかっていなかったので、Rubyの静的型解析について勉強しておきます。

# 型情報の利用

RBSという、クラスやモジュールの型を定義するための言語が用意されました。これはRubyとは異なる言語です。

以下は [WEB+DB PRESS Vol.121](https://gihyo.jp/magazine/wdpress/archive/2021/vol121) の紙面からの引用です。

https://gihy

元記事を表示

cannot load such file — nokogiri/nokogiri (LoadError)奮闘日記

railsチュートリアルの2周目さあ頑張ろう…!と意気込んでいたのですが、
「ゼロからデプロイまで」で躓きました。

#経緯

私はこのエラー、遭遇は2回目です。(1回目は諦めました)
1回目は、railsチュートリアルを進めていく上でcloud9の容量がなくなって、一度git cloneでローカル環境に取り込んだ時です。
rails serverの時にnokogiriエラーが出ました。

私の当時の力じゃどう頑張っても解決しそうになかったので、Cloud9の容量を無料最大まで上げた環境を新たに作り、そこにgit cloneをして学習を続けました。

1周では技術が自分のものになった気がしなかったので、2周目はローカル環境で進めてみようと思い再度nokogiriエラーと戦うことになりました。

#nokogiriエラーについて

railsを勉強する上でいろんな方が遭遇しているようです。

私が遭遇したエラーは、追い切れないほどのたくさんのlogの最後に

“`
‘require’:cannot load such file — nokogiri/nokogiri (LoadErr

元記事を表示

BioRubyでgenbankファイルを取得する

今まで `BioRuby` で genbank 形式のファイルを取得するときは [`BioRuby Shell`](https://github.com/bioruby/bioruby-shell) を起動して `getent()` をしていたが、いちいち起動するのは面倒なので Ruby のコード内で取得する方法を調べたのでまとめる。

## 要約

“`ruby
require “bio”

acc = “NC_012920”
ret = Bio::NCBI::REST::EFetch.nucleotide(acc)

entry = Bio::GenBank.new(ret)

File.open(“#{entry.entry_id}.gbk”, “w”) do |f|
f.puts(ret)
end
“`

### データの取得

データは `Bio::NCBI::REST::EFetch.nucleotide` で取得する。

他のものの取得は[ここ](https://github.com/bioruby/bioruby-shell/blob/master/lib/b

元記事を表示

Ruby on railsをdockerで環境構築

railsの環境構築を初学者でもわかりやすいように説明します!
Laravelよりはシンプルで理解しやすかったです。
記事もたくさんありました。

#dockerのインストール
僕が実際に参考にした記事です
・[Macの方](https://qiita.com/zaki-lknr/items/db99909ba1eb27803456)
・[Windowsの方](https://qiita.com/zaki-lknr/items/db99909ba1eb27803456)

######インストールできたかの確認
ターミナルを開いて確認しましょう!

“`:terminal
$ docker -v

Docker version 20.10.8, build 3967b7d
“`

“`:terminal

$ docker version

Client:
Cloud integration: 1.0.17
Version: 20.10.8
API version: 1.41
Go version: go1.16.6
G

元記事を表示

Rspec VCRの使い方(stubされているかどうかの確認、動的なパラメータがある場合のcassetteのマッチング、動的にcassetteの内容を変更する)

# 概要
VCRを使ったことがなく、かなりハマってしまったので、自分用にメモ
インストール方法などは他に山ほど記事があるので、そちらを参照してください。

# 前提
– request spec
– APIのテストではなく、request specでテストしたいアクション内でAPIを呼び出しており、そのAPIをstubしたい

# stubされているかどうかの確認
他の方が書いてくださったものを拝借

spec_helper.rbに以下を記載

“`rb
VCR.configure do | c |

# ここから
[ “recordable”, “stubbed” ].each do | method |
c.after_http_request(“#{method}?”.to_sym) do | request, _response |
puts “- VCR – #{method} – [#{request.method}] #{request.parsed_uri}”
unless request.externally_stubbe

元記事を表示

ターミナル起動時に/Users/ユーザー名/.zshrc:1: command not found: rbenvと表示されるのを消しさる

ホームフォルダーの隠しファイル.zshrcを開く

 eval “$(rbenv init -)”
 export PATH=”/usr/local/opt/~

を全て消して上書き保存

私はこれで表示されなくなりました。

参考にした記事
https://teratail.com/questions/272063

元記事を表示

rails データの並び替えまとめ

orderの使い方がうろ覚えだったので忘備録

“`ruby:
User.all.order(id: “DESC”) # 最後から並べてくれます
User.all.order(:id) # 指定なしなら最初から並べてくれます
User.all.order(id: “DESC”).limit(3) #3件のみ表示します。多すぎる時に使うと良き。
“`
データを見やすくするGemを入れてない時は

“`ruby:Gemfile
gem ‘hirb’
gem ‘hirb-unicode’
“`
bundle installしやす

“`ruby:
$bundle install
“`
hirbを有効にしやす

“`ruby:
$rails c
irb(main):001:0> Hirb.enable
=> true
“`
見やすくなりましたね!mysqlで見るまでもない時にドゾー。

元記事を表示

Rubyでの繰り返し処理 injectの使い方

#繰り返し処理とは
ある条件などが満たしている間もしくはその範囲で、
繰り返したい処理がある時に使います。

例えばwhile,loop,for文などです。

#injectの使い方
injectは注入という意味です。
scoresの合計を繰り返し処理で出力させていきます。

“`rb
scores = [40,60,80,100,120]

sum=
scores.inject do |result,i|
result + i

end

puts sum

“`
scoresの合計を出します。
実行すると

“`
400
“`
になります。
処理の流れとしては、40+ 60で100になって100+80で180になってと
このような流れを繰り返します。

#処理の流れを理解するには
デバックでbinding.pryを挟みながらやると繰り返し処理の流れが把握できます。
resultとiを入力しながらcontinueで処理を進めていくとわかりやすいかと思います。

https://qiita.com/Hashimoto-Noriaki/items/df700dc8

元記事を表示

Ruby eachを1行で書きたい、pluckを使いたい

・eachを一行で書きたい

“`
Areas.each {|area| puts area}
“`

“`
@shops = Shops.where(closed: false).pluck(:area_id).uniq.sort

“`

・pluckの例

“`
<% areas.each do |area| %> <%# 県 %>
<% if @shops.include?(area.id) %>
<%= link_to "#{area.prefecture}", area_path(area.id), class: "dropdown-item" %>
<% else %>
<%= link_to "#{area.prefecture}", area_path(area.id), class: "dropdown-item disabled" %>
<% end %>
<% end %>

“`

元記事を表示

1周目 railsチュートリアル第8章

#目次
[1.前回](#1-前回)
[2.概要](#2-概要)
[3.内容](#2-内容)
[4.用語のまとめ](#3-用語のまとめ)
[5.感想](#4-感想)
[6.おわりに](#5-おわりに)

#1. 前回
前章を貼り付ける

#2. 概要
今章の概要を記載

#3. 内容

## 基本的なログイン機構
7章では新規ユーザー登録。本章ではログイン・ログアウト機能。
認証システム(Authentification System)を使う。
ログイン済みユーザー(current user)を扱うことを認可モデル(Authorizzation Model)

### セッション
HTTPはステートレス(Stateless)なプロトコル。
cookieはユーザーのブラウザに保存される小さなテキストデータ。
この章ではsessionメソッドを使い、一時セッションを作成する。
次章ではcookiesメソッドを使う。

セッションをRESTfulなりソースとしてモデリングできると、
ログインページではnewで新しいセッションを出力。
ログインするとcreateでセッションを実際に作成して保存。

元記事を表示

ターミナルとは何か!

#①.結論!

ターミナルは、PCに命令をすることができるツールです!

環境構築を実行するには[コマンドライン]というツールが必要となります!

Macにデフォルトでインストールされているコマンドラインがターミナルです!

#②.コマンドライン

コマンドライン (または コマンドラインインタフェース:CLI )とは、コンピュータに対してキーボードからコマンドという文字を打ち込んで操作を行うツールです!

#③.GUI(Graphical User Interface)

コマンドラインとは対照的に、グラフィックを用いて操作を行う仕組みを グラフィカルユーザインタフェース(GUI) といいます!

例えば、「マウスでファイルをダブルクリックして開く」という操作など、普段PCで行う操作のほとんどはGUIで行なっていることが多いようです!

GUI = グラフィックを使用して、コンピューターの操作を行う方法!直感的に操作できる!

例、マウスでアイコンをクリックして操作できる!

CLI = キーボードを使用してコンピューターの操作を行う方法!コンピューター側の反応も文字によって出力され

元記事を表示

OTHERカテゴリの最新記事