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

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

Rubyのオブジェクト指向を意識して簡易的なtodoアプリを作ってみた

## アプリ仕様の概要
CSVを読み込んで、TODOリストを出力するアプリを作る。

## CSV仕様
フォーマットは次の通り

“`

タスク実行予定日,タスク内容,完了フラグ(1: 完了, 0: 未完了)

2020-04-27,街でたまねぎを買う,1
2020-04-27,保険料を支払う,0
2020-04-28,手紙をポストに投函する,0
2020-04-29,友人に電話する,1
2020-04-29,空港に迎えにいく,0

“`

### 仕様例1
下記のフォーマットで、すべてのタスクを標準出力に表示する。

“`
[*] 2020-04-27 街でたまねぎを買う
[ ] 2020-04-27 保険料を支払う
[ ] 2020-04-28 手紙をポストに投函する
[*] 2020-04-29 友人に電話する
[ ] 2020-04-29 空港に迎えにいく

“`

### 仕様例2
下記のフォーマットで、未完了のタスクを標準出力に表示する。

“`
[ ] 2020-04-27 保険料を支払う
[ ] 2020-04-28 手紙をポストに投函する
[ ] 202

元記事を表示

【Rails】remote:true形式でAjax通信を行う(ブックマーク機能のajax化)

## Ajaxとは
**Ajax**とは、Webブラウザ上で`非同期通信`を行い、ページ全体の再読み込み無しにページを更新する方法のことです。

`同期通信`だと、クライアントはwebページ全体の情報(HTMLとそれに紐づくcss,js,imageなどのアセット)をサーバーから受け取って、ページを一から作り直します。
例えばページの一部を変更するだけなのに、他の部分も組み立て直すってことはその分ページの表示に時間がかかっちゃいます。(サーバー側の処理を待つことになる)

しかも、この**リクエスト〜レスポンス**の処理を行っている間は、他の処理を行わずに**サーバーからレスポンスが返ってくるのを待ち続ける**必要があります(よくあるのが画面が真っ白になって何もできない状態)。

そこでAjaxのような非同期通信を使用すれば、**ページ遷移無しに、高速で更新処理**を行い、尚且つ、**リクエスト〜レスポンスの処理を行っている間も他の処理が行えます**。

この便利なAjaxによる非同期通信を行う方法としては、
**①remote:true形式
②ajax関数を使った形式**
の2パタ

元記事を表示

(初学者向け)Rubyの変数について網羅的に確認しよう

# (初学者向け)Rubyの変数について網羅的に確認しよう
#### Rubyの変数についてごっちゃになっていたので網羅的にまとめました。

### この記事の対象
Rubyを触ったことがある
クラスや継承、インスタンスについてなんとなくでもいいので理解している
Rubyの変数についてなんとなくわかるが曖昧な方

### 用語
スコープ・・・変数が参照できる範囲のこと(変数の有効範囲)
スーパークラス・・・継承元のクラス(親クラス)
サブクラス・・・継承先のクラス(子クラス)
ブロック・・・ doとendまたは{}で囲まれた範囲のこと

### 検証方法
クラス内・クラス外・インスタンスメソッド内・クラスメソッド内、継承先でpメソッドを用いて各変数の返り値を見ていきます。
クラス等の説明は本記事では省きます。(機会があれば別で書こうと思います。)
また、同じような処理をあえてまとめずに繰り返して書いております。
これは1かたまりの情報量を少なくすることでコード一つひとつの動きがわかりやすいようにあえてしております。
もし見づらい、わかりづらいと感じましたらコメントで教えていただける

元記事を表示

[初心者向け]5分でできるrubocopの導入

# はじめに
rubocopとは簡潔にいうとコーディング規約をチェックしてくれるgemです。
参考記事: [rubocopとは](https://qiita.com/freestylehh46/items/f8dae4b962df681ed2ad)

導入のプロセスなどもできるだけ詳しく記述したので最後までご覧いただけましたら幸いです。
説明はいいから導入だけしたいという方向けに初めに.rubocop.ymlファイルの最終形も記述しています。

# 対象読者
* rubocopを導入したことがないがどのように導入したらいいかわからない方
* 少しきれいなコードを書くことを意識してみたい方

## 環境

“`
$ rails -v
Rails 6.0.2.2

$ ruby -v
ruby 2.7.0
“`

# 手順
1. Gemfileにrubocopを記述してbundle install
2. rubocop.ymlファイルに何をチェックする、しないを記述する

## 1. Gemfileにrubocopを記述してbundle install
GemFileに記述します

元記事を表示

Rubyでチンチロゲームを作る  第3回 賭け金の移動

# 1.はじめに
 今回は勝敗結果と役に基づいて賭け金を移動させるメソッドを書きます。カイジのチンチロは役とその倍率は以下のようになっています。

| 役 | 倍率 |
|—-|—-|
|ピンゾロ (1,1,1)| 5倍づけ|
|ゾロ目 (2~6)| 3倍づけ|
|シゴロ (4,5,6)| 2倍づけ|
|通常の目 (3個中2個がおなじ目)| 1倍づけ|
|目なし | 1倍払い|
|ヒフミ(1,2,3)|2倍払い|

〜づけというのは買った場合に賭け金の◯倍で返ってくるという意味です。〜払いというのは負けた場合にマイナスになります。

# 2. メソッドの作成
 メソッドを作成します。引数は相手と自分の役、賭け金、勝敗結果となります。前回の記事と同様に、クラスのなかにメソッドを作成します。そのため引数は以下のようになります。

“`ruby
def transfer_money(opponent,win_or_lose)
# 相手の役 : opponent.hand
# 相手の賭け金 : opponent.bet_money
# 自分の役   : @hand

元記事を表示

CrystalでLLVMを扱ってみる (1)

こんにちわみなさん!
スクリプトとコンパイルが両方そなわり最強に見えるCrystalやってますか?!

## Crystal
CrystalはRubyみたいなのに、Cレベルに低水準な操作ができるというなんつーか最強と言うしかない言語です!
CrystalにはLLVMが使われていますが、セルフホスティングするためか標準でLLVMバインディングがついています。
これは使うっきゃないでしょって感じなので早速使ってみましょう!

## Ex1 和を出力する

### コード
“`add.cr
require “llvm”

ctx = LLVM::Context.new
mod = ctx.new_module “examples”

# add(a, b : int32) : int32
func = mod.functions.add(“add”, [ctx.int32, ctx.int32], ctx.int32)
func.basic_blocks.append do |builder|
params = func.params
sum = builder.add param

元記事を表示

MiniMagick(imagemagick)で複数のフォントファイルを使って絵文字に対応する

ちょっと前にimagemagickで絵文字を含むテキストを合成する時に結構ハマったのでなんとなく備忘録を。
imagemagickはフォントが1つしか指定できないので、大抵の場合絵文字があると文字化けしてしまいます。
そこで、pangoを使って複数フォントに対応します。

(以下、dockerでrailsを動かす前提で進めます。)

## フォントを置く
まずは使いたいフォントをDLしてコンテナのfontsに置きます。
(apt-getで手に入るならそっちのほうがいいと思います)
今回はNoto Sans CJK JPとNoto Color EmojiをDLして/assets/fontsに置きました。

“` Dockerfile
# Dockerfile
COPY /assets/fonts /usr/share/fonts
“`
#### memo: Noto Color Emojiについて
Noto Color Emojiは定番のフォントだと思いますが、入手先が3つあってそれぞれ対応しているUnicodeのバージョンが違います。
– 公式サイト → Unicode10
– a

元記事を表示

`Enumerable#uniq?` を実装

`raise if ary.dup.uniq!` なんて書かれていたら、どんな動作をするのかすぐにはわからない。

## 動機
配列の要素に重複があるかどうか判定したい。

* [**`Array#uniq!`**](https://docs.ruby-lang.org/ja/latest/method/Array/i/uniq.html) というメソッドがある
* レシーバーの配列から重複する要素を削除する
* 重複する要素を削除しなかった場合は `nil` を返す = 戻り値で「重複の有無」を判定できる
* これをそのまま条件式に使うのは気が引ける
* 破壊的メソッドのため、事前に配列を複製しないといけない
* また実際に重複を全排除するのは計算の無駄
* 「重複の有無」と「戻り値の真偽」の関係がややこしい
* **⇒ 真偽判定に特化したメソッド `#uniq?` を作ろう**
* さらに言えば Array でなくてもいい
* ⇒ Enumerable に作ろう
* ちなみに破壊的でないメソッド [`#uniq`](https://docs.ruby-lang.o

元記事を表示

MacでRubyのファイルを実行する方法

Macを使っているプログラミング初心者向けの説明です。
Macは MacBook、MacBook Pro、iMac のどれでも内容は一緒です。

# 準備

Mac で Rubyのファイルを書くために、まずは **テキストエディター** をインストールする必要があります。
**テキストエディター** とは、実行したいプログラミング言語の処理を書いて保存するために必要な **アプリ** です。

おすすめは [Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/) です。

インストールの方法については [MacOSでVisual Studio Codeをインストールする手順](https://qiita.com/watamura/items/51c70fbb848e5f956fd6) を読んでいただければわかりやすいと思います。

インストールが終わって Visual Studio Code のアプリを起動できたら、次の章に移ります。

# 新規ファイルに Ruby のコード

元記事を表示

before_action

#before_actionとは

railsのコントローラーのアクションを実行する前に処理を行いたいときや、同じ記述の処理をまとめたい時に使います。

基本的な書き方は以下です

“`hoges_controller.rb
before_action :処理させたいメソッド名
“`

この場合だと、同じコントローラーに定義されている各メソッドの実行の前に、指定したメソッドによる処理が行われます。

もしくは[resourcesメソッド](https://qiita.com/kouhei_matuura/items/c440994b3e2102ddefcb)と同じようにonlyやexceptなどでアクションの限定をすることもできます。

“`hoges_controller.rb
before_action :処理させたいメソッド名, only: [:アクション1,:アクション2]
“`

この場合はアクション1と2が実行される前にのみ、指定した「処理したいメソッド」が実行されます。

#使用例

コントローラーに下記の記述があったとします。

“`tweets_co

元記事を表示

[Rails]ユーザー情報にenumを使った実装

# はじめに
初めまして、Railsを勉強中のものです。
現在SNSアプリを開発中です。

よくある投稿機能や出品機能などに持たせるカラムとして、あらかじめ用意した値の中から選択させる属性を扱う場合`enum`が便利だと色んな記事で見てたのですが、
思っていたよりすんなり実装できなかったので初めて`enum`を使う方の参考になればと思い記録しておきます。

あくまで私が実装した内容を載せるだけなので、細かい説明は参考にしたリンクを貼っておきますのでそちらをご参照ください。

## 実装する内容
ユーザー情報に持たせるカラムとして、性別と年齢を`enum`を使って実装していきます。
Railsのバージョンは`5.2.4`です。今回は`haml`で書いてます。

それではやってみましょう。
# enumで値を定義する

まずはマイグレーションファイルから。
`enum`を使うカラムは`integer`型で用意します。

“`ruby:db/migrate/xxxx_devise_create_users.rb
class DeviseCreateUsers < ActiveRecord:

元記事を表示

ruby:2.5.0-alpine3.7 に gem install sqlite3 する

ruby:2.5.0-alpine3.7 の Docker image に sqlite3 をインストールしようとしたときのメモです。
このときは、sqlite3 の 1.4.2 が最新でした。

make, g++, sqlite-dev を入れると install できました

“`
/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
v3.7.3-180-g5372bc29f3 [http://dl-cdn.alpinelinux.org/alpine/v3.7/main]
v3.7.3-183-gcc9ad2b48d [http://dl-cdn.alpinelinux.org/alpine/v3.7/community]
OK: 9066 distinct packages avail

元記事を表示

【Rails tutorial】 リスト 9.25: [remember me] チェックボックスのテストでエラーになる。【9章】

##エラー内容
Rails tutorial9章 リスト9.25を実施時に以下エラーとなりました。

“`
FAIL[“test_login_without_remembering”, UsersLoginTest, 4.873426502104849]
test_login_without_remembering#UsersLoginTest (4.87s)
Expected “I8qYEjEm7MeNLQbqt4YM3A” to be empty.
test/integration/users_login_test.rb:52:in `block in
“`

チェックボックスのオンオフが効いてないようです。
セッションのコントローラーについて確認してみると・・・

“`app/controllers/sessions_controller.rb
def create
user = User.find_by(email: params[:session][:email].down

元記事を表示

【最短】Ruby on Rails環境構築メモ

#はじめに
はじめまして、Rubyを学習しはじめたおにくです!
今回はmacでのruby環境構築について学んだので、自分用にメモを残して行きたいと思います!

**※こちらの環境構築はOSがmojaveの場合の環境構築になります**

#環境構築のフロー
##1、Command Line Toolsのインストール

*コマンドラインツールとは・・・「キーボードでPCを操作する道具」*

ターミナルから以下のコマンドを実行
`※ターミナルはmacに元々インストールされているツールです`

“`
xcode-select –install
“`

以下のようなポップアップが表示されるのでインストールを行う
![command-line-tools.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638340/63690ac2-b8d2-71ba-677d-f4c21184f72a.png)

##2、Homebrewのインストール
*homebrewとは・・・macでプログラミングに必要なパッケージを

元記事を表示

編集画面で更新ができない!?

# An invalid form control with name=’◯◯[image]’ is not focusable. というエラー

編集画面(edit)ではnewの画面をコピーして使用することもあるかと思います。
私は今回コピペで作成し、動作確認をしていました。

通常であれば問題なく動くはず。。。なのですがなぜか更新ボタンを押しても反応しない状態状態でした。
デベロッパーツールを見てみると、
**An invalid form control with name=’recipe[image]’ is not focusable.**
というエラーが出ていました。

![スクリーンショット 2020-05-15 22.10.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/41997106-d1a4-9e1b-76c3-2bfad3bd417e.png)

#name=’recipe[image]’のformコントローラーが使えない・・・?

##該当コード

“`
=

元記事を表示

Rails セキュリティについて

#前提
セキュリティについて勉強した方が今後の為になると教えをいただいた為、学んだことを書いていきます。

#本題
フレームワークは、Webアプリを容易に開発できるよう作られた。
Ruby on Railsには、セキュリティを保つための便利なヘルパーメソッドが用意されている。

だが、導入するだけでセキュリティを保てるものではない。

Gartner Groupによると、攻撃の75%がWebアプリケーション層に対して行われていると見積もっており、監査を受けた300のWebサイトのうち97%が脆弱性を抱えているという結果を得ているとのこと。
これは、Webアプリケーションに対する攻撃は比較的行いやすく、一般人も理解や操作が可能なほどにWebアプリケーションがシンプルであるため。

安全なWebアプリケーションを開発するために必要なことは、
**・すべての階層を最新の状態に保つこと**
**・敵を知ること**

#セッション
セッションはある種の攻撃の対象になることがある。

##セッションとは
アプリケーションはセッションを用いて、多くのユーザーがアプリケーションとやりとりできるようにし

元記事を表示

AtCoder Beginners SelectionでRuby学習【Shift only】繰り返し処理と配列の上書き

## はじめに
Ruby学習の一環として「競技プログラミング(競プロ)」に挑戦します。
そのための学習の中で学んだことをアウトプットしていきます。
今回は「AtCoder Beginners Selection」の四問目(Shift only)より。
https://atcoder.jp/contests/abs

自分が使った解法と、他の方の解法を比べながらまとめていきます。

## 問題
N個の正の整数A1,…,ANが与えられます。
この整数が全て偶数である時、次の操作を行います。
・整数全てを2で割ったものに置き換える。
最大何回操作を行えるか求めなさい。

制約
1 ≤ N ≤ 200
1 ≤ Ai ≤ 10**9

入力は以下の形で与えられる。

“`ruby
N
A1 A2 … AN

# 例
3
8 12 40
“`
上記の例だと最大2回割ることができるので

“`ruby
出力例
# 上記例の場合
=> 2
“`

## 解答①
まずは僕が最初に書いたコードです。

“`ruby
count = 0
N = gets.to_i
lists = get

元記事を表示

nokogiriを更新したらRubyを実行するたびに「Ignoring」と毎回怒られるようになった

nokogiriを更新すると毎回このようにIgnoringが出てくるようになった。

“`
Ignoring childprocess-2.0.0 because its extensions are not built. Try: gem pristine childprocess –version 2.0.0
Ignoring childprocess-1.0.1 because its extensions are not built. Try: gem pristine childprocess –version 1.0.1
Ignoring ed25519-1.2.4 because its extensions are not built. Try: gem pristine ed25519 –version 1.2.4
Ignoring escape_utils-1.1.1 because its extensions are not built. Try: gem pristine escape_utils –version 1.1.1
Ignoring f

元記事を表示

uniqueness: scope を使ったユニーク制約方法の解説

#uniqueness: scope を使ったユニーク制約方法の解説

uniqueness: scopeを利用して一意性検証をする方法について解説します。

## 目次
* [動作環境](#動作環境)
* [実装例](#実装例)
* [解説](#解説)
* [複数のscope](#複数のscope)
* [データベース側の制約](#データベース側の制約)
* [おわりに](#おわりに)

—————————————
## 動作環境
`OS : macOS Mojave 10.14.6`
`ruby : 2.6.3p62`
`rails : 5.2.4`

##実装例

“`ruby
class Label < ApplicationRecord has_many :labelings, dependent: :destroy belongs_to :user, optional: true validates :name, presence: true, uniqueness: { scope: :user } en

元記事を表示

GitHubとアプリケーションの紐付け方-チーム開発-

###概要
この記事ではGitHubとアプリケーションの紐付け方を解説します。
また、その際にGitHub Desktopを活用していきます。

###方法

まず、ローカルリポジトリを作成します。

GitHub Desktopを開いて左上のCurrent Ripositoryをクリックします。
クリックして開いた画面のAddをクリックします。
スクリーンショット 2020-05-15 20.59.55.png
すると下記のような画面が出てきます。

スクリーンショット 2020-05-15 21.00.12.png

  • OTHERカテゴリの最新記事