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

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

#0.5 アプリ作成→GitHubへのPush

#はじめに
前回の[開発環境の準備](https://qiita.com/snow100/items/eabcee3d7aa7beeb0f98)に引き続き、
アプリ作成からGitHubへのPushの流れを記事にして行きたいと思います。

#目次
1.アプリ作成
2.リモートリポジトリ作成
3.リモートリポジトリへPush

#1.アプリ作成
“`
username:~/environment $ rails new snow-review
“`
rails new アプリ名でアプリケーションのひな形を作成する事ができます。

“`
username:~/environment $ cd snow-review
“`
3.リモートリポジトリへのPushの為にcdでアプリ上に移動しときます。

#2.リモートリポジトリの作成
– Your repositriesから[NEW]ボタンを押し、Create New Repositriesへ。
– Repository Nameを書き、その他お好みの設定をし、[Create New]ボタンで新規リポジトリ作成。
– 新しく作ったリポ

元記事を表示

ruby-ffi や Fiddle で、環境依存でサイズが変わる構造体に対処する

## はじめに

FFIで環境依存で対処する構造体に対処することは難しい。Win, Mac, Linuxなど大雑把に場合分けすることも考えられるが、ここでは別の方法として、`sizeof(piyo)` の結果を定数に保存する小さなC拡張を作成することを考える。

## カレンダー日時を保存するtm構造体

ここでは、例として、日時を保存するtm構造体を扱う。tm構造体は、`time.h` をincludeすると使うことができる。
Rubyでは、ffiを扱うライブラリは`fiddle`と`FFI(Ruby-FFI)`の2種類があるが、下記はFiddleを使った例である。

“`ruby
TM = struct [
‘int tm_sec’,
‘int tm_min’,
‘int tm_hour’,
‘int tm_mday’,
‘int tm_mon’,
‘int tm_year’,
‘int tm_wday’,
‘int tm_yday’,
‘int tm_isdst’

元記事を表示

Rubyの特異メソッド、クラスメソッドを理解する

Rubyのリファレンスを見るとよく特異メソッドという言葉が出てくるので調べました。
クラスメソッドとも関連があるため併せて記載します。

動作確認環境 ruby 3.0.0p0

## 特異メソッド

まずはリファレンスから。

https://docs.ruby-lang.org/ja/latest/doc/spec=2fdef.html#singleton_method

>特異メソッドとはクラスではなくある特定のオブジェクトに固有のメソッドです。特異メソッドの定義はネストできます。

>クラスの特異メソッドはそのサブクラスにも継承されます。言い替えればクラスの特異メソッドは他のオブジェクト指向システムに>おけるクラスメソッドの働きをすることになります。

>特異メソッド定義式は、メソッド名を Symbol にしたオブジェクトを返します。

Rubyはオブジェクトに対して固有のメソッドを定義できるみたいですね。
犬のしつけに例えてサンプルコードを試してみました。

“`ruby
class Dog
def bark
‘わんわん’
end
end

pochi =

元記事を表示

[リファクタリング] ポートフォリオの検索機能 クラスメソッド

初めに

現役エンジニアの方からPFのフィードバックをいただきましたので、
リファクタリングを進めていきます。

実装している検索機能は以下の通りです。

![スクリーンショット 2021-10-01 10.08.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/e6268f8f-0d96-3c8a-dd44-e7ce53cfadef.png)

元々のコード

“`ruby:models/post.rb
def self.search(search)
return Post.all unless search
Post.where(‘title LIKE(?)’, “%#{search}%”).or(Post.where(‘content LIKE(?)’, “%#{search}%”))
end
“`

修正後

“`ruby:models/post.rb
def self.search(search)
retu

元記事を表示

#0 開発環境の準備

#はじめに
これから学習の復習&マークダウン記法の学習の為に記事を投稿していきます。
誰かの助けれになれば幸いです。
今回はアプリ作成前の準備段階について記事にしていきたいと思います。

#目次
1.AWS Cloud9で新しくIDE(開発環境)を立ち上げる
2.AWS Cloud9での設定
3.GitHubとの連携方法

##1.AWS Cloud9で新しくIDE(開発環境)を立ち上げる
(1).Your environmentsにて[create environments]ボタンをクリック
(2).(Name),(Description)をそれぞれ記述し、[NEXT STEP]のボタンをクリック
(3).Configure settingsにてPlat form 「・Amazon Linux 2」を選択
(4).[NEXT STEP]からの[create environments]ボタンで作成

これでAWS Cloud9にて新しく開発環境を立ち上げる事ができました。
次は、AWS Cloud9での設定を行なっていきたいと思います。

##2.AWS Cloud9での設定
– P

元記事を表示

「SQLだけで済むので…」?先輩のコメントからany?とexists?の違いを学ぶ(Ruby,Rails)

先輩からちょいと指摘された行ったリファクタリングが、ちょいと深くておもしろかったのでメモ。

## 背景とやりたいこと
ゲームのコースのデータを管理するgameモデルがあるとします。
ゲームにはstage1, 2があり、各コースにはnormal, specialの2つの種類(kind)があります。

“`ruby:app/models/game.rb
# == Schema Information
#
# Table name: games
#
# id :bigint not null, primary key
# name :text not null
# stage :integer not null
# kind :integer default(“first_normal”), not null

class Game < ApplicationRecord exnum

元記事を表示

Progate Ruby 個人的ざっくりまとめ

# 変数名が2語以上の場合は、アンダーバー(_)を挟む

例)your_name

# 変数展開は(#{変数})の形式

“`ruby:例
hello = “Hello”
puts “#{hello} World!” # Hello World!
“`

※javascriptの場合

“`javascript:例
var hello = “Hello”;
var text = hello + ” World!”;
console.log(text); // Hello World!

// または

var text = `${price} World!`;
console.log(text); // Hello World!
“`

※phpの場合

“`php:例
$text = “Hello”;
echo “{$text} World!”; // Hello World!
“`

# 繰り返し処理

each文

“`:形式
配列.each do |変数名|
実行したい処理
end
“`

“`ruby:例
languages = [“English”

元記事を表示

Rubyではじめる形態素解析

## 形態素解析とは
文章を品詞などを参考に、最小単位に分解することです。
実際の形態素解析結果を見るとイメージがしやすいかもしれません。

“`
これはQiitaの記事です
これ は Qiita の 記事 です
“`

今回はMecabを使用して、形態素解析を行います。

## 実際にやってみる
– 筆者の環境はmac OS Catalinaです。

### Mecabインストール
Homebrewを使用して、Mecab本体をインストールします。

“`
$ brew install mecab

$ brew list | grep mecab
mecab
“`

次に、mecab-ipadicをインストールします。
形態素解析では、辞書を元に文章を分解します。

“`
$ brew install mecab-ipadic

$ brew list | grep mecab
mecab
mecab-ipadic
“`

これで準備は完了したので、実際に形態素解析を行ってみます。
わかち書き(語の間に空白)で出力してみます。

“`
$ echo ‘これはQiita

元記事を表示

Ruby gemとは何なのか?

## はじめに

ruby on railsで開発していて、gemについて改めて理解しようと記事にしました。

##gemとは?
rubyのライブラリを指す。
ライブラリが存在することで「車輪の再開発」を防ぎ、効率的な開発が可能になります。
ruby以外のプログラミング言語にもライブラリが存在しており、フロントエンド界隈で有名なj-queryもJavaScriptのライブラリです。

##そもそもライブラリとは?

>ライブラリとは、プログラム言語において、ある特定の機能を持つプログラムを定型化して、他のプログラムが引用できる状態にしたものを、複数集めてまとめたファイルのことである。

https://www.sophia-it.com/content/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA

こちらのページから引用させていただきました。

同じ様な機能は一つの部品にまとめておいて、使う時に引用すれば楽じゃね?ということ。
ライブラリをそのまま使用することで一からプログラミングする必要がなくなり、スピード感のある開発が可能になる。

元記事を表示

【Rails】deviseにおけるユーザー情報の編集・更新のやり方(パスワード不要)

この記事ではdeviseを用いたユーザー管理機能において、**パスワード不要**で
ユーザー情報を編集・更新する方法をアウトプットしていきます。

【前提】
・Rubyバージョン2.6.5
・Railsバージョン6.0.0
・gem ‘devise’によるユーザー管理機能を作成済み。
・ユーザーのマイページを作成済み。

【この記事の構成】
①ルーティングを設定
②registrations_controller.rbを作成
③registrations_controller.rbを編集
④user.rbを編集
⑤application_controller.rbを編集
⑥editビューを編集

#①ルーティングを設定する
まずは`registrations_controller.rb`を使えるようにルーティングを変更します。

“`routes.rb
Rails.application.routes.draw do

devise_for :users, controllers: {
registrations: “users/registrations”
}

en

元記事を表示

[Ruby] AtCoder過去問 B – Not Found

##はじめに
AtCoderの過去問をRubyで解いてみました。
よろしくお願いします。

問題はこちらから確認してください↓

https://atcoder.jp/contests/abc071/tasks/abc071_b

##B – Not Found
入力を受け取ります。
変数にそのまま文字列として受け取ります。

“`ruby
s = gets.chomp
“`

sの中に含まれていないアルファベットが知りたいので、荒技かもしれませんが、a~zの全てが入っている文字列を変数alfに代入し、“`alf – s“`ができればいいのではないかと考えました。
実際にはdeleteメソッドを使用します。

もし、,残ったalfの中身がnilだったら全てのアルファベットが使われているので、出力はNoneになります。

alfはアルファベット順に並んでいるので辞書順です。
一番先頭の文字を出力すれば答えになります。

“`ruby
s = gets.chomp

alf = “abcdefghijklmnopqrstuvwxyz”

if alf.delete(s) == n

元記事を表示

【Vue.js+Rails】herokuデプロイ時の「 Cannot find module ‘@vue/babel-plugin-jsx’」の対処

RailsにVue.js3を導入してjsxファイルを書いてherokuにデプロイしようとしたところ掲題のエラーが発生し対処に時間がかかったため、その備忘録です。
(railsとvue.jsを使ってPFを制作中の初学者ですので内容に不備があればコメントで指摘頂けると幸いです。)

#エラー発生の経緯
Vue.jsでjsxを使用するため公式ドキュメントにならって下記コマンドを入力。
https://github.com/vuejs/jsx-next

“`
npm install @vue/babel-plugin-jsx -D
“`
ローカル環境では問題なくjsxファイルが読み込まれたのでherokuにデプロイしようとした所

“`
ERROR in ./app/javascript/packs/application.js
Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error: Cannot find module ‘@vue/babel-plugin-j

元記事を表示

userのカラムがありませんを解決~

自分用メモです!!
## 起きたこと
deviceで用意されたサインアップ機能を使用しサインアップを実行した際に
以下のエラー発生

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/880777/2281cfa3-5cc4-ad40-7993-430d1c8f45d1.png)

## 行ったこと
schema.rbのカラムを見てまずusernameがあるか確認する。

なかったので、

“`
rails g migration add_name_to_users
“`
を実行。この際ファイル名はなんでも問題はないが、
・テーブル名
・カラム名
を含ませるとなおよし

次にカラムを追加する

## カラムを複数追加する場合の書き方

“`
add_column :テーブル名, :カラム名, :データ型
“`
を追加したいカラム分行う

次に

“`
rails db:migrate
“`
を行うだけ

## 参考にした記事
https://freesworder.net/r

元記事を表示

簡単なプルダウンを実装について!

プルダウンは、select要素とoption要素を使用して実装します!

これらのHTMLの要素を使うことで、プルダウンと選択項目を実装できます!

1つ1つ解説していきます!

#①.、select要素

select要素は、プルダウンのようなセレクトボックスを作成するための要素です!

select要素のname属性に任意の値を指定することで、paramsを通して、

その値をコントローラーへ渡すことが出来ます!

どのような選択肢にするかは、子要素としてoption要素を記述することで設定します!

#②.option要素

select要素の中に記述することで、プルダウンの選択肢になる要素です!

下記が記述例です!

“`php

“`

これで簡単なプルダウンを実装となります!

#③.まとめ

記述は難しくないので、覚えるのは簡単ですね!

あくまでも簡単な表示方法ですが、、、

ここから応用を覚

元記事を表示

Ruby Gem Install で Installing required msys2 packagesに失敗するときは

備忘録です。

“`
$ gem install rabbit
Installing required msys2 packages: mingw-w64-x86_64-gr
“`

Windowsでgem installすると、こんな感じで msys2 関連パッケージをインストールしようとして、うまくいかずに色んなミラーサイトを探し回り、たらいまわしを受けることがあります(エラーメッセージを採取し忘れました)。
最近頻発してたんで、「WindowsとRubyってそんなに相性悪いの?」としょぼんとしていたところ、解決策らしきものが見つかったので置いておきます。

##原因はもしかして
pacmanという「パッケージマネージャ」の情報が古い

##御託は後。まずは解決策
– エクスプローラーでRubyをインストールしたフォルダへ
– だいたいC直下のはず。Ruby30-x64とかの名前になってる
– さらに、フォルダ msys64 に入る
– msys32とかの場合もあるかも
– msys2.exeを起動

– 以下のコマンドを打ってパッケージマネージャの情報を更新

“`
p

元記事を表示

細かいつまずいたことをメモしておく(9月編)

# はじめに

新しい記事の試みとして、わからなくて詰まったけど、記事にするほどではない(or 記事が多くある)ものについてまとめてみることにしました。

ほぼ個人てきに将来確認できるようにまとめたものになります。
今後もやるかは分かりません。

# 問題

## 1. WSLでDockerを動かしたが、Railsコンテナがupしたときにmkdirでpermision deniedになる

rootユーザーでgit cloneをしてきたためにdocker-compose upで権限エラーになっていた。
Ubuntu 20.04を再インストールしてユーザーを作成した状態で、git cloneしたらうまくいった。

## 2. コンテナ内でgitコマンドをすると常に認証を求められる
コンテナ内で以下のコマンドをうつ

“`
$ config –local user.email [メールアドレス]
$ config –local user.name [ユーザー名]
“`

設定できているかの確認は以下で行える

“`
$ cat ./git/config
“`

## 3.WSL

元記事を表示

Railsで遷移元のURLを取得する

## はじめに
開発ですぐに忘れそうなことを、簡単に再度調べられるようにするための備忘録です。

## やりたいこと
元々いたページのパスをコントローラー側で受け取る。

具体例)
Blogのshow画面から、Contactのnew/createを呼び出して、
Blogのshow画面にリダイレクト。

## 方法

“`ruby
before_url = request.referer
“`
を用いる。

ちなみに、遷移後の現在のURLを取得したい場合は、

“`ruby
## pathの取得
current_url = request.path

## urlの取得
current_url = request.url
“`

のどちらかを用いる。
(pathの取得で良いのか、urlが必要なのかは、用途に応じて使い分ける。)

## 補足
request.refererを用いた時のrequest specでは、
HTTPヘッダを明記する必要があるため、

“`ruby

let(:headers) { { HTTP_REFERER: xxx_url } }

it “リクエス

元記事を表示

エラー:NoMethodError: undefined method `attendances=’ for

##環境
ruby 2.7.1
Rails 6.1.3.2
RSpec 3.10

##状況
Rspec実行時に下記のエラーで怒られた

“`
NoMethodError:
undefined method `article=’ for #
Did you mean? article=
article
article_id=
“`

“`spec/factories/users.rb
FactoryBot.define do
factory :user do
name { “testuser1” }
sequence(:email) { |n| “tester#{n}@example.com” }
password { “testpassword” }
end
end

“`

“`spec/factories/articles.rb
FactoryBot.define

元記事を表示

Pry でサクッとベンチマーク

`.pryrc` に以下を追記すると、pry実行時にサクッとベンチマークがとれます。

“`ruby
# ■ 使い方
# pry(main)> bench | { [測定対象] }
# pry(main)> bench | do
# [測定対象]
# end
command_set = Pry::CommandSet.new do
block_command(‘bench’, “Use the Ruby benchmark to measure code blocks.”, takes_block: true) do
require ‘benchmark’

Benchmark.bm do |x|
x.report do
command_block.call
end
end
end
end
Pry::Commands.import(command_set)
“`

元記事を表示

MySQLへのつなぎ方

##データベースを作成する
“`
mysql -u root -p
“`
-u ユーザー名
-p パスワード認証

MySQLにログイン完了後、kakekomi(私が作成したいデータベース名)というデータベースを作成します

“`
mysql> CREATE DATABASE `kakekomi`;
“`

作成したデータベースを確認するには

“`
mysql>show databases;
“`

下記のような表示されます。

“`
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| easywms |
| kakekomi |
| mysql |
| performance_schema |
| sys |
+——————–+
6 rows in set (0.01

元記事を表示

OTHERカテゴリの最新記事