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

Ruby関連のことを調べてみた2020年10月17日
目次

Qiita に J 言語のシンタックスハイライトがないので自分で実装した

# はじめに

最近 [J 言語](https://www.jsoftware.com) にハマっているのですが、残念なことに Qiita のシンタックスハイライトは J をサポートしてくれていません :qiitan-cry: 。~~J は特に見た目がアレな言語なので、~~ 記事を書く側も読む側もシンタックスハイライトがあるとモチベーションが上がると思います。

ということで、自分で実装することにしました。その記録を、ここに残しておこうと思います。

他の言語のシンタックスハイライトを実装する時に参考になるかもしれませんし、J 言語が他の言語と違いすぎてあまり参考にならないかもしれません。

# 大まかな手順

Qiita のシンタックスハイライトには現在 [Rouge](https://github.com/rouge-ruby/rouge) という Ruby 製のライブラリが使われています。

Rouge をフォークしたら、[lexer 開発のガイド](https://rouge-ruby.github.io/docs/file.LexerDevelopment.html) を見な

元記事を表示

RailsにBootstrapを導入する方法

#RubyにBootstrapを導入する方法
##手順
* Bootstrapのインストール
* SCSSファイルの作成
* JSファイルの修正
* Rails(Puma)の再起動
## Bootstrapをgemでインストール

“`java:Gemfile
gem ‘bootstrap’, ‘~> 4.3.1’
gem ‘jquery-rails’
“`
“`java:ターミナル
bundle install
“`
##SCSSファイルを作成
“`java:ターミナル
mv app/assets/stylesheets/application.css app/assets/stylesheets/application.scss
“`
“`java:app/assets/stylesheets/application.scss
/*
* This is a manifest file that’ll be compiled into application.css, which will include all the files
* listed below.

元記事を表示

【Rails物語】デメテルの法則〜知りすぎてはいけない〜

###概要
とある街に駆け出しのエンジニアのY君がいました

彼にとってプログラミングは難しいものでした

しかし彼はつよつよエンジニアになりたいと願い、数ヶ月前から毎日プログラミングの勉強をしてました

そんなある日、彼はより実践的な経験値を得るため共同開発チームに入るのでした

与えられたミッション(タスク)をこなし報告(プルリク)を出した時、それは起こりました、、、

###デメテルの怒り

Y君はこんなコードを書いていました

“`erb
<%= "#{message.user.name}さん : " %>

“`

、、、これがデメテルの怒りに触れてしまったのです。

デメテル「知りすぎじゃーーーーーー!!」

デメテル曰く、プログラミングの世界では「知りすぎている」のは罪なのです

この場合`message`は`user_id`は知っていて紐づいている。だけど`user`自体の事は知らないし、その`name`なんて事は知らないはずなのです

ギャングがボ

元記事を表示

【図解】硬貨の和を再帰関数で求める【Ruby】

#はじめに
ProjectEulerのProbem31についてです。
再帰関数での他の人の解答を参考にして、再帰関数初心者が解説してみました。
下で[図解](#図解)もしているので、そちらもぜひ見てください。

#問題
>Problem 31 「硬貨の和」
イギリスでは硬貨はポンド£とペンスpがあり,一般的に流通している硬貨は以下の8種類である.
1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p).
以下の方法で£2を作ることが可能である.
1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p
これらの硬貨を使って£2を作る方法は何通りあるか?

[日本語版](http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2031)
[英語版公式](https://projecteuler.net/problem=31)

#方針
`coins = [1,2,5,10,20,50,100,200]`の中から任意の一枚ずつ取り出してい

元記事を表示

【図解】階乗の再帰関数【Ruby】

#はじめに
自分が初めて再帰関数を知ったときに、理解するのに苦労しました。
その際に紙に書いたことで理解できたので、それを今回図解しました。

####再帰関数とは?
`def ~ end`で定義した関数内で自分自身を呼び出す関数のことをいいます。
有名なものだとフィボナッチ関数などがよく再帰関数の入門として扱われたりします。
初めて聞いた方は検索してみてください。

####階乗とは
>1からnまでの連続するn個の自然数の積をnの階乗という。
n!と書き、例えば4!=1×2×3×4=24と表す。
ただし、0の階乗は1とする。

引用元:[goo辞書](https://dictionary.goo.ne.jp/word/%E9%9A%8E%E4%B9%97/)

#再帰関数を用いたコード
“`ruby
def factorial(num)
if num == 1 || num == 0
return 1
end
return num * factorial(num – 1)
end
“`
※`num < 0`が渡されてしまった場合は今回は考慮していません。 非

元記事を表示

【NuxtJS×RailsAPI】折角0からプログラミングを勉強したので、推しキャラの誕生日アプリを作ってみた。

## 自己紹介
Webエンジニアをしたり、マジシャンをしたり、オンライン家庭教師をしたり、イベントを企画したり、色々なことをしております[yuki](https://twitter.com/yuki82511988)と申します。
今年の1月からプログラミングを学習し、DMMWEBCAMP入学を経てエンジニアとして勤務、約4ヶ月ほどが経過しました。

過去学習してきたことなどは、こちらの記事にまとめてありますので、良ければご覧ください。
[【卒業生】DMMWEBCAMPに通おうか迷っている人に伝えたい事](https://qiita.com/yuki82511988/items/37be28f2486e166fd48f)

# 成果物
NuxtJS/RailsAPI/AWS/Firebase
【Webアプリ】https://tokidosaya.com
【GitHub】https://github.com/yuki-snow1823/project-saya
コードはお世話になっているエンジニアの方にレビューをしていただき、現在リファクタリング中です。ご容赦くださいませ。

## この記

元記事を表示

RSpec導入後、モデルの単体テストコードを書き始めるまで

#はじめに
RSpecの導入までの流れは、[こちらからどうぞ](https://qiita.com/TerToEer_sho/items/472e14df6fbb8e83ebf9)

##流れ

1. FactoryBotの準備
2. テストコードを記述するファイルの生成
3. 記述の型

###1. FactoryBotの準備
ディレクトリとファイルを用意する。
ex)userモデルのFactoryBotなら、spec/factories/users.rb

“`ruby:spec/factories/users.rb

FactoryBot.define do
factory :user do
email {Faker::Internet.free_email} #例
#以下、同じように必要なFakerを記述
end
end
“`

:userの部分が、spec/models/user_spec.rbでFakerを呼び出すときに使う。

Fakerの細かい使い方は、[FakerのGitHubへ](https://github.com/faker-r

元記事を表示

特定のテーブルのデータをすべて消去する方法

#前提
db/seedにデータを入れていた。
データを変更したいので一旦消去することにした。

csvファイルのデータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/795715/f1117a05-43f8-ed83-436a-b3472e8254ce.png)

#方法
“`
rsils c

Food.all.destroy_all
“`

#解説
複数のデータを削除するときにはdestroy_allを使う。

#結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/795715/ce47ee8e-3cab-0c1f-2e21-90b72601c475.png)

#参考にしたサイト

【Rails入門】データを削除する方法(destroy/delete)を確認しよう

元記事を表示

【個人開発】全ての食べ物を0kcalにするカロリー管理アプリ「Zerorie」をリリースしました

## はじめに
こんにちは。

個人開発の醍醐味とは**「技術の無駄遣い」**だと私は思います。

そんな私も個人開発で~~クソ~~アプリを作成しましたので、以下に色々記録しておこうと思います。

## サービス概要
今回私は、「ゼロカロリー理論」を使って、全ての食べ物を0kcalにしてくれるカロリー管理アプリ**「Zerorie」**を作りました。
![iOS の画像 (9).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576318/e3070a41-39e8-57f2-df83-691e7a07e7b3.jpeg)

**「ゼロカロリー理論」**とは、サンドウィッチマンの伊達さんが考案したネタで、「寿司は握ることでカロリーが潰されるから0kcal」みたいな、**食べ物のカロリーを0kcalにしてくれるトンデモ理論**のことです。

このアプリを使えば、**「カロリーを気にして食事を我慢する」「高カロリーの食べ物を食べたことで罪悪感を覚える」**といったカロリーに関わる悩みを一切気にすること無く、

元記事を表示

railsを使って画像投稿を実装するには

###Railsで画像投稿を実装する方法

はじめに

自分でrailsを使ってアプリを作ろうとした時、どうやって登録するのか、
画像の実装の仕方をメモを兼ねて記載しました。

まずは、ImageMagickをHomebrewからインストールします。

“`
#ターミナル
% brew install imagemagick
“`

次に、gemfile上で、記述します。バージョンが異なる場合があります。

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

ターミナル上で、バンドルインストール。

“`
% bundle install
“`

ターミナル上で、下記を実行。

“`
% rails active_storage:install
““

終わりに

いつも参考にさせてもらっているQiitaで自分も誰かの役に立てればと思いました。
実際書いてみると、少し書いただけでなんだか大変ですね。

なれでしょうか、少しづつアップできたらと思います。

元記事を表示

【while、each】【超初心者向け】繰り返し処理を使って配列に押し込む方法

# はじめに

こんにちは!
最近はrubyの問題にハマっていて、気付いたら夜中、みたいない毎日です…。
そん中、意外と便利なのに、記事としてあまり見かけない方法で
while文なんかを使って一気に配列から配列に押し込む方法をご紹介いたします。

##each文の活用
““ruby
# こちらでは数字と文字列がごちゃごちゃになった配列を数字の配列(int)と文字の配列(str)に分けてます
x_arry = [1,”a”,2,”b”,3,”c”]

int = []
str = []
i = 0
x_arry.each do |n|
i += 1
if n.to_s =~ /^[0-9]+$/  #こちらは正規表現で、数字のみを条件分岐してます。
int << n else str << n end end print int # => [1, 2, 3]
print str
# =>[“a”, “b”, “c”]
““
※正規表現については詳しい記事が山ほどありますので、そちらをご参照くださいませm(_ _)m

参考記事①
(https:/

元記事を表示

【Ruby on Rails】初回ログイン時・jQueryを使用した、画面を真っ二つに割る方法

# 目標
![split.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700999/05b7d05d-73c7-dce6-92e4-efd53e674732.gif)

# 開発環境
ruby 2.5.7
Rails 5.2.4.3
OS: macOS Catalina

# 前提
[【Ruby on Rails】初回アクセス時に一度だけ表示(jquery.cookie.js使用)](https://qiita.com/japwork/items/229af214e928937c5c45)
こちらに少し手を加えた形となりますので、
コードをそのまま使うとcookieがなくなるまでは表示出来ません。

# 実際のコード

“`erb:app/views/layouts/application.html.erb

# 追加

# 追加

【Rails】人気投稿をランキング形式で表示させる【簡単】

個人開発アプリを作成していて、人気投稿順に見られると使いやすくなると思い、
基本的に[こちらの記事](https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4m)を参考にしながら実装しました。

#routes.rb
“`ruby:routes.rb
get ‘rank’ => ‘shops#rank’
“`
私の場合はshopsコントローラーのrankアクションに設定しました。

#shops_controller.rb
“`ruby:shops_controller.rb
def rank
@all_ranks = Shop.find(Favorite.group(:id).order(‘count(shop_id) desc’).limit(5).pluck(:shop_id))
end
“`
shopsコントローラーにrankメソッドを定義。いいねが多い投稿順に表示させます。

#rank.html.slim
“`ruby:rank.html.slim
– @all_ranks.each.wit

元記事を表示

【Rails6】cocoonを使った動的フォーム入力画面の作り方

# はじめに
本記事では、以下のような入力フォームを作成することをゴールとしています。
[![Image from Gyazo](https://i.gyazo.com/b7a7e7aae4c2f38df5b20d9f194e00a2.gif)](https://gyazo.com/b7a7e7aae4c2f38df5b20d9f194e00a2)

# 概要
レシピとレシピに必要となる食材をまとめてDBに保存する機能の作成

# テーブル構成

レシピとレシピの食材は親子関係であるため、以下のテーブル構成となります
親:レシピ( recipes )
子:レシピの食材( recipe_ingredients )
※ingredient_idはactivie_hashで実装します
[![Image from Gyazo](https://i.gyazo.com/d5caf11fa0ddd2d06f1d24730b213da7.png)](https://gyazo.com/d5caf11fa0ddd2d06f1d24730b213da7)

# 実装
以下の順に実施していきます。
1.j

元記事を表示

【Rubyバージョンエラー】Your Ruby version is ~,but your Gemfile specified ~の解決方法

#はじめに
本記事では、以下のエラーについて、解決方法と、なぜそう考えたかを書いていきます。
解決するにあたっては、多くの方の記事やブログを参考にさせていただきました。
リンクは、該当箇所に随時貼らせていただいてます。

“`
Your Ruby version is 2.6.3, but your Gemfile specified 2.5.1
“`

#対象読者
・Rubyを学習しはじめて、数ヶ月〜1年程度の方。
・上記のエラーに初めてあたった方。
・「環境変数の設定をどうにかすれば、解決するらしいことはわかった。」
「しかし、vimやシェルという言葉を聞くと、解決する前に一呼吸おきたくなる」という方。

※本記事では、vimやシェルなどの用語について詳しい説明はいたしません。

#目的
・vimを操作してrbenv下のファイルにPATH(以下、たんに「パス」といいます。)を通し、バージョンエラーを解決する。

・なぜ、パスを通すことで、問題が解決するのかを理解する。

[Pathを通すとは、環境変数とは](https://qiita.com/fuwamaki/items/

元記事を表示

Leet文字列への変換プログラム

【概要】
—————————————-
1.結論

2.Leet文字とは何か

3.どのようにコーディングするか

4.開発環境

1.結論
—————————————-
gsub!メソッドを使う

2.Leet文字とは何か
—————————————-
主に、インターネットで使用されるアルファベットの表記法のことをいいます。例えば、”HELLO”であれば”H3LL5″となります。アルファベットに似た数字や文字を当てはめる形になります。下記に具体例の表を載せておきますが、もちろんA~Zまであり、その表現方法はいくつもあります。

| 文字 | 数字 |
| —- | —- |
| A | 4 |
| B | 13 |
| C | [ |
| D | ) |
| E | 3 |

元記事を表示

RubyでC拡張ありのgemをインストールする際に、make -j4 みたいに複数のCPUのコアを使って早く終わらせたい

[ruby-jp.slack.com](https://ruby-jp.github.io/)にて

![RubyでC拡張を使っているgemをインストールする際に、make -j4 みたいに複数のCPUのコアを使って早く終わらせたい時はどんなオプションをつければいいですか?](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144608/5dd9fe71-470a-21ab-24ad-5946d75f6f3f.png)

![環境変数で設定した記憶があるけど忘れてしまった](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144608/0377ec91-40ff-c6b2-147b-754014e75ddb.png)

![export GNUMAKEFLAGS=-j4](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144608/729dde9c-e915-ed1d-

元記事を表示

トランザクションシミュレータ(ロック待ちバージョン)

トランザクションの検証が面倒すぎる。モデルとしては単純そうだから、作ってしまおう、と思った。

# Ruby

“`ruby:tran_request.rb
class Request
end

class Read < Request attr_reader :var def initialize(var) @var = var end def to_s() return "Read(#{@var})" end end class Write < Request attr_reader :var,:val def initialize(var,val) @var = var @val = val end def to_s() return "Write(#{@var},#{@val})" end end class Insert < Request attr_reader :var, :val def

元記事を表示

rails コマンドが使えなくなった時の対処法

rubyのバージョンを上げたところ、rails s しようとしたら、コマンドが使えなくなった。

“$ rails –version rbenv: rails: command not found
The `rails’ command exists in these Ruby versions:
2.6.5 “

##結論 gem ‘rails’ をインストールしよう
1.`gem update –system`
2.`gem install bundler`
3.`gem install rails`

ターミナルで rails -vを打ち込み、Rails 5.2.3が表示されたらOKです。
 

元記事を表示

deviseユーザー登録

# 1 deviseをインストール

##ユーザー登録機能を実装するためには、deviseというgemをインストールします。

1. Gemfileで gem ‘devise’を追加

2. ターミナルでbundle install

3. ここでrails s でサーバー起動しないと反映されない

4. rails g devise:install で設定ファイルを作成

# 2 ユーザーモデル+テーブルを作る

ここで注意したいのが普通のモデルを作る時と同じではないということです。

### モデル作成

– ターミナルで rails g devise user と入力(この時ルーティングが自動設定され、マイグレーションファイルも生成される)

– db→migrate→2020〜のファイルにてテーブルに追加するカラムやカラムの型を記載する。

“`ruby
class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :u

元記事を表示

OTHERカテゴリの最新記事