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

Ruby関連のことを調べてみた2021年09月27日
目次

[Ruby] AtCoder過去問 B – Foods Loved by Everyone

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

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

https://atcoder.jp/contests/abc118/tasks/abc118_b

##B – Foods Loved by Everyone
はじめに入力を受け取ります。

“`ruby
n, m = gets.split.map(&:to_i)
a = readlines(chomp: true).map{|line| line.split(‘ ‘).map(&:to_i)}
“`

2行目は二次元配列で受け取っています。入力例1を例にすると
“`[[2, 1, 3], [3, 1, 2, 3], [2, 3, 2]]“`
といったように受け取ります。

配列aの中のそれぞれの配列の先頭(インデックスで0番目)の数字は好きな食べ物の数を表しているだけです。好きな食べ物を表しているわけではないので、邪魔になります。消しましょう。

“`ruby
n, m = gets.split.map(&:to_i)
a = read

元記事を表示

Railsでキーワード+ ラジオボタンを使った検索方法を実装する

#1. はじめに
検索機能を実装する課題があったのでまとめます。
調べたところransackというgemを使っても検索機能を実装できるようですが、課題の趣旨から外れてしまうため、今回はgemなしで実装しました。
#2. Railsで検索機能を実装する[View]
**①まずroutesを追加する**
コントローラーとモデルは既に作成済みを想定します。

“`rb
get ‘search’, to: ‘XXX#search’
“`

私の場合は“/search“というURLにsearchというcontrollerのアクションを対応させました。

**②Viewにform_withで値を設定する**

“`rb
<%= form_with(scope: :検索対象のモデル名, url: search_path, method: 'get') do |form| %>
・・・
    ・・・
<% end %>
“`
・“scope“にはmodel名を指定します。
・urlには“routes“で指定した“controller“のアクションを指定します。

元記事を表示

Rubyの「宇宙船演算子」を再定義して AtCoder ABC219C を解く

AtCoder の ABC219C の問題は以下のリンクから参照下さい。

https://atcoder.jp/contests/abc219/tasks/abc219_c

簡単にいうと、アルファベットの順番を替えた上で、複数の文字列を辞書順にソートして出力するという問題です。

じつはこれ、とても Ruby らしい簡潔な解法が存在するので、まずはそちらを説明します。

“`ruby:Ruby
x = gets.chomp
n = gets.to_i
strs = n.times.map { gets.chomp }

puts strs.sort_by { _1.tr(x, “a-z”) }
“`

`x`は新しいアルファベットの順番、`strs`はソートすべき文字列の入った配列で、`sort_by`を使って、解いている部分は1行で書けています。かかる時間もかなり速いです。

#本題

さて、`Array#sort`は配列の中身が文字列の場合、暗黙にいわゆる「宇宙船演算子」、つまり`String#<=>`を使って辞書順にソートします。では、これを再定義してやれば、ただの`Ar

元記事を表示

プログラミング未経験でも2か月でTwitterアプリを作れた話

はじめまして!Masakingと申します!
今回は株式会社[Hajimari](https://www.hajimari.inc/)さんが運営するスキルアップ型就活支援サービス、「intee」でのプログラミングゼミを通して、Railsを使ったTwitterアプリをチームで開発したのでそちらを紹介したいと思います!

#完成したアプリ
![SharedScreenshot.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2035851/d2dcc11d-7fee-5c27-1a06-01dfcbf04da1.jpeg)

[https://myapp-usagisann-ri.herokuapp.com/](https://myapp-usagisann-ri.herokuapp.com/)
じゃじゃーん!

こちらがホームページになります。
デザインが可愛いらしい、、、
3人チームで開発を行ったのですが、チーム名が「うさぎさん?」ということもあってうさぎっぽい色合いのデザインになりました笑

#機能
機能

元記事を表示

Rubyの繰り返し処理をサンプルコードでまとめ

# 配列系
## each 配列の値を1つずつ取り出す

“`rb:loop.rb
week = [‘Sunday’, ‘Monday’, ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’, ‘Saturday’]

week_str = ”
week.each do |date|
week_str += date
end
p week_str # -> SundayMondayTuesdayWednesdayThursdayFridaySaturday
“`

## each_with_index 配列の値を1つずつ取り出し、第2ブロック引数にインデックスを渡す

“`rb:loop.rb
week_str = ”
week.each_with_index do |date, i|
week_str += “#{i.to_s}:#{date} ”
end
p week_str # -> “0:Sunday 1:Monday 2:Tuesday 3:Wednesday 4:Thursday 5:Friday 6:Satu

元記事を表示

[Ruby] できるだけ負荷をかけない処理を意識するのは大事だなと思いました

##はじめに
AtCoderの過去問を解いている中で、タイトルのようなことを感じたので記事にします。

そのとき解いていたのはこちらの問題です。↓

https://atcoder.jp/contests/abc134/tasks/abc134_c

C問題にしては割と難易度は低い気がしましたが、すごく良問だなと感じました。

##C – Exception Handling
この問題の解き方としては、まず入力値のAの部分を配列として受け取り、その中で一番大きい数字と二番目に大きい数字(一番目と重複していたら、それが二番目とする)を取り出します。

そして配列から一つずつ要素を取り出して一番大きい数字と比べ、同じだったら、二番目を出力(取り出した数字は比較対象から外れるため)。
それ以外だったら一番目を出力すればOKです。

最初に僕が提出して失敗したコードはこちらです。(厳密には実際とは違いますが、説明しやすくするため少し変更しています。失敗した原因は同じです)

“`ruby
n = gets.to_i
a = readlines.map(&:to_i)

a.each do

元記事を表示

【Rails sが起動しない】ターミナルを起動したまま閉じたり、どこで起動したか不明の場合の解決法

# エラー内容

$ rails s
=> Booting Puma
=> Rails 6.1.4.1 application starting in development
=> Run `bin/rails server –help` for more startup options
Puma starting in single mode…
* Puma version: 5.4.0 (ruby 3.0.0-p0) (“Super Flight”)
* Min threads: 5
* Max threads: 5
* Environment: development
* PID: 3174
* Listening on http://127.0.0.1:8080
* Listening on http://[::1]:8080

# 解決法
今のターミナルで killall ruby を実行する

元記事を表示

RubyとPythonの基本構文の違い【配列編】

## Rubyでは配列末尾への追加を << で行うことができる __Ruby__ ```rb:sample.rb # 配列末尾への追加 a = [1, 2] a << 3 p a # -> [1, 2, 3]
“`

__Python__

“`py:sample.py
# 配列末尾への追加
a = [1, 2]
a.append(3)
print(a) # -> [1, 2, 3]
“`

## Rubyでは多重代入の際に、変数の数と配列の要素数が異なってもエラーが起こらない
Pythonの場合、変数の数と配列の数が同じでないと、エラーが起こります。

配列の要素数が変数の数より多い場合、Rubyでは超えた分の配列の要素は無視されます。
__Ruby__

“`rb:sample.rb
a, b = [1, 2, 3]
p(a) # -> 1
p(b) # -> 2
“`

__Python__

“`py:sample.py
a, b = [1, 2, 3] # -> ValueError: too many values to unpack (expect

元記事を表示

Bootstrap導入時のエラー

# Bootstrap導入の際にした手順
– Gemfileにwebpackerがあるかどうか確認railsのバージョンが5.1以降であれば必要なし(標準搭載されたため)
– Bootstrapを扱うのに必要なパッケージをインストール

“`zsh
yarn add jquery bootstrap popper.js
“`
– config/webpack/environment.jsに以下を追記

“`zsh
const webpack = require(‘webpack’)
environment.plugins.append(
‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery’,
jQuery: ‘jquery’,
Popper: [‘popper.js’, ‘default’]
})
)
“`
– app/javascripts/stylesheets/application.scssを作成し、以下を記述

“`js
@import ‘~boot

元記事を表示

HamlでBootstrapの属性を書くときにUnbalanced brackets error発生

###◆問題発生

“`
.modal.fade{id: “exampleModal”, tabindex: “-1”, role: “dialog”, aria-labelledby: “exampleModalLabel”, aria-hidden: “true”}
“`
Bootstrapのモーダルを使おうと思ったら、属性を指定するところで

“`
Haml::SyntaxError in Posts#show
Unbalanced brackets.
“`
というエラーが出ました。
どうやらこの部分でエラーが出てしまっていたようです。

“`
{… aria-labelledby: “exampleModalLabel”, aria-hidden: “true”}
“`

###◆Rubyではキーにハイフンが使えない

キーにハイフンが入っているとシンボルとして認識されないため、文字列に変換してあげる必要があります。
これはHamlの文法に限りません。

以下のように記述することで解決しました。

“`
{… “aria-labelledby”:

元記事を表示

rbenv と bundler で Ruby のバージョンと gem を管理する方法

こんにちは Masuyama です。

一つの環境で Ruby の開発、gem のインストールを行っていると、アプリケーションごとの依存関係の差異によるエラーに苦しむことになります。
そこで今回は rbenv と bundler を用い、Ruby のバージョンと gem を管理する方法をご紹介します。

# 開発環境の前提
rbenv はインストールされていること

念のため、参考となりそうな記事をご紹介しておきます。

– [Mac の場合](https://qiita.com/TakahashiKat/items/7a45bbd5d0e675c1de3f)
– [Windows の場合](https://qiita.com/ktpnobu/items/fa0c198ee14b9875817a)

# Ruby バージョンの管理
rbenv を用いて特定バージョンの Ruby をインストール、および管理していきます。
今回は 2.7 系をインストールしたいと思います。

### rbenv とは
rbenvとは、Ruby のバージョンを管理し、複数のバージョンを切り替えて使

元記事を表示

githubでチーム開発をする方法のメモ(ruby on rails)

#はじめに

某プログラミングスクールにて、cloud9環境でrailsを用いたチーム開発を行ったので、その際に行った、GitHubの連携方法をまとめました。
(プログラミング歴2か月のひよっこです。間違い等ございましたら、大変もうしわけございません。)

GitHub連携の大まかな流れ
①リーダーがGitHubにチーム開発用のリポジトリを作成する。
②リーダーがローカル上でアプリケーションを作成し、そのデータをGitHubのリポジトリに繋げる。
③リーダーがチーム開発メンバーをGitHubのリポジトリに招待する
④チーム開発メンバーが、リーダーの作成したアプリをローカル上にクローン(コピー)する。
⑤チーム開発メンバー各々が、ブランチを作成して作業をはじめる。
⑥ブランチでの作業全てが終われば、プルリクエストを行い、メインブランチにマージする。

#①リーダーがGitHubにチーム開発用のリポジトリを作成する。
リーダーはGitHubにチーム開発用のリポジトリを作成しましょう。
Githubにログインし、トップページから、図1のNewをクリックしましょう。!

(図1)
![gi

元記事を表示

【解決】Docker-composeを使用した環境でrails newできない

Dockerで環境構築している際に連続して起こったエラーをなんとか解決しました。
Dockerの環境構築で起きたエラーでつまづいている人には何かしら役に立つかもしれないと思ったのでQiitaに投稿させていただきました。
####開発環境
・Mac OS
・Ruby2.6.3
・Rails5.2.3
・MySQL5.7

##起こったこと
[この記事](https://qiita.com/Yusuke_Hoirta/items/3a50d066af3bafbb8641)をもとにDockerの環境構築をしていたのですが、
新規Railsプロジェクトの作成で詰まってしまいました。
## 最初のエラー
“`docker-compose run web rails new . –force –database=mysql –skip-bundle“`
を打つと以下のエラーが起きます。

“`
/usr/local/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe’: Could not find ‘bundler’ (2.2.2

元記事を表示

RubyのテスティングフレームワークMinitestの使い方(初心者向け)

分かりやすく解説するため、以下の流れで最小単位の使い方から、徐々に増やしていって解説します。
1. Minitestのテストファイル単体
1. Minitestのテストファイル + 同一ファイル内で作成したメソッド
1. Minitestのテストファイル + 別ファイルのメソッド

## Minitestのテストファイル単体
テストコード単体での動作を見るために、RubyのStringクラスのメソッドである`chop`メソッドを用いて、テストコードを作っていきます。

`chop`:文字列の最後の1文字を削除する、ただし\r\nの場合は\r\nを削除する

まずはテストコードを見ていきましょう。

“`ruby:sample_test.rb
require ‘minitest/autorun’

class SampleTest < Minitest::Test def test_chop assert_equal "string", "string\r\n".chop end end ``` 解説です。 1. クラス名とファイル名は同一にしましょう

元記事を表示

WSL2で ‘rails new’ できるけど ‘rails s’ できない方へ

# はじめに
最近,Ruby on Rails 環境を作成していたのですが,思わぬところで躓きました…

`rails new` はできるんです.
`rails s`した時,サーバーが立ち上がらず,エラーが出てしまいました.

キーワードは`yarn`でした.

# 事前環境
“`
wsl2: Ubuntu-20.04
node: 14.17.1
rails: 6.1.4.1
“`

# webpackerは入っていますか?
`rails s`した時のエラー文に以下のような部分はありませんか?

“`bash
(略)
Please run rails webpacker:install
(略)
“`

`rails webpacker:install`ができませんか?
まさに私と同じ状況ですので,次を見てみてください.

# yarnは入っていますか?
私はまさにこれでした.

“`bash
npm install –global yarn
“`

yarnを導入した後先ほどのコマンドを実行してみてください.
もしくは`rails new`の時に自動で`webpacker

元記事を表示

【Rails】学習アプリにおける進捗状況をprogressバーで表現する

rails 初学者のアウトプット用投稿です。同じ結果を得られるより良い書き方がございましたらコメントでご教示頂けると幸いです。

#実現したいこと
学習アプリ作成においてユーザーの個人ページ(user_controllerのshowアクション)に一週間、どのくらい学習を行なったのかをhtmlのprogressタグで見える化する。

今回はanswerモデルにそれぞれの学習内容が保存されており、answerの作成数をカウントし、それを学習量の算出基準とする。

イメージ図(下記)
![FEBA03C7-F478-4A4E-B8ED-545C9F588945_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1640672/72761668-1709-023e-484d-fe2c0051f2b2.jpeg)

#実装の流れ
①userに紐づいたanswerモデルから一週間分のデータを配列として取り出す。

②①で取り出したデータからさらに曜日だけを配列として取り出す。

③show.html

元記事を表示

(テスト)デプロイした後の更新の流れ

テストデプロイした後に色々更新していよいよデプロイ!

なにするかわからない泣

cloud9上では動く(ほぼ完成)のでgit hubにpushしてec2の仮想サーバに移って、git hubからpullしてくればipアドレスで見ることができるそう

今触っているcloud9と仮想のパソコンEC2の考えが理解していなかった私

cloud9 でEC”に接続する

“`
username:~/environment $ ssh -i ~/.ssh/practice-aws.pem ec2-user@xx.xx.xx.xx

   xx.xx.xx.xxはパブリックIPアドレス
“`

gut hubからpullしてくる

“`
[ec2-user@ip-xx.xx.xx.xx ] cd アプリ名
[ec2-user@ip-xx.xx.xx.xxアプリ名] git pull 〜
“`

“`:gemの変更
[ec2-user@ip-xx-xx-xx-xx アプリ名]$ bundle instal

元記事を表示

【Rails】LazyHighChartsで箱ひげ図を作成

## 1.はじめに
閲覧していただきありがとうございます。
今回作成したアプリの経緯や開発の苦悩などをまとめました。
よろしければ、ご覧ください。
## 2.関連URL
アプリ:https://box-test-app.herokuapp.com/
Github:https://github.com/suugakusan/box_test
## 3.アプリ概要
数値を入力するだけでその箱ひげ図を作成することができるアプリです。

* 箱ひげ図の作成・編集・削除機能
* 数値の入力・削除
* ログイン機能
* ゲストログイン機能

## 4.アプリの制作背景
 中学2年生の数学で学ぶ箱ひげ図ですが、教科書の内容を扱うだけでは、理解が不十分になります。特に、四分位数を求めることはできても、箱ひげ図から実際のデータを予測できる力が足りません。
 そこで、数値を入力するだけで箱ひげ図を作成できるアプリがあれば、箱ひげ図を苦手とする生徒を救うことができるのではないかと思い制作しました。

## 5.機能一覧
| |機能 |gem |
|:—: |:—: |:—: |
|1 |

元記事を表示

GitHub Actions

githubuのリポジトリ画面「Settings」をクリックする
>>「option」の「Secrets」をクリック
>>「New Secret」をクリックする

![スクリーンショット 2021-09-25 21.21.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1801328/f70eaffd-776e-13c7-4e38-33b0f413144e.png)

3つ設定していく
HOST_NAME : EC2のパブリックIPアドレス
USER_NAME:ec2-user
PRIVATE_KEY:EC2上かCloud9上の~/.ssh/id_rsaの値

IPv4 アドレスをEC2からコピーして

“`
Name内に——————————————–
 HOST_NAME |
————————————

元記事を表示

Rails6でJavaScriptを書く

# はじめに
初めてRuby on Railsを触ることになり、JavaScriptを使ってみることになった。
うまく動く資料が見当たらなかったため、備忘録として書いておくことにした。

# JavaScriptの実装
## JavaScriptの書く場所
app > javascript > packs
– file下に制作のファイルを作成するのがおすすめ
– 自分はusersというファイルを作成し、その下にjsファイルを作成した
## jsファイルに書くべきこと
– 読み込み時に表示

“`js
window.onload = function(){
//中略
//ウィンドウが読み込まれたとき表示する
}
“`
– 動作により呼び出す場合

“`js:app>javascript>packs>user>common.js
window.onchange = function hogehoge(){
//中略
//自分はonchangeで呼び出しをしたためこのように記載した
}
“`

##書いたjsを読み込ませる

“`js:app>javascript>packs>ap

元記事を表示

OTHERカテゴリの最新記事