Ruby関連のことを調べてみた2019年12月04日

Ruby関連のことを調べてみた2019年12月04日
目次

Ruby on Railsで時間が溶けた凡ミス集

# はじめに
「Ruby on Rails 速習実践ガイド」をひととおり終え、自分でToDoアプリを作ってみたいと思い、下記の記事を参考に「Ruby on Rails 速習実践ガイド」で作成した Taskleafに機能を追加してみた。
https://qiita.com/sasasoni/items/fb0bc1644ece888ae1d4

#上手くいかなかった点

### ①イベントがカレンダーに表示されない
今回参考にしていたWebサイトのようにEventという名前でモデル・コントローラーを作成したのではなく、Taskをそのまま使っていたので、JSON形式で情報をカレンダーに渡す際、変数名に気をつけなければいけなかった。

### ②Datetimepickerを使ってカレンダーで選んだ日時が表示されない
slimの書き方が分かっておらず、Datetimepickerの実装の仕方に苦労した。
slim形式でHTMLを書く際、動的クラスの書き方には注意すべき。

### ③週表示・1日表示の際に時間が軸に表示されない
こちらはcssに書いていた.fc-time { display:

元記事を表示

Rubyで書いたバックアップツールの紹介

# 目的
社内で色々なバックアップをしていましたが、個別にbashを書いていてメンテナンスしにくいと思ったので、Rubyでまとめてみました。

# 仕様
1. バックアップしたい対象はそれぞれのサーバーで事前に準備(pg_dump等)
2. バックアップを集約するサーバーで今回のプログラムを実行
3. scpかrsyncのコピーコマンドとバックアップサーバー内の古いバックアップの削除コマンドをサポート
4. コマンドの実行に失敗した場合はslackに通知
5. バックアップの設定はyamlファイルで管理
6. yamlファイルはERBを通して実行する

# プログラム
“`ruby:Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

git_source(:github) {|repo_name| “https://github.com/#{repo_name}” }

gem ‘slack-ruby-client’
gem ‘systemu’
gem ‘hashie’
“`

“`ruby:

元記事を表示

SeleniumでSortableJS系ライブラリのDrag&Dropをテストする

# 前置き

[前回の記事](https://qiita.com/marumaru/items/fe81d43ef1ba8ddf2101)で、Vue.Draggableを使ったコンポーネントのドラッグ&ドロップを実行するCypressのテストコードについて書きました。
これをSeleniumで書いたらどうなるだろうと思い試してみたところCypress以上にハマったので、解決方法を記録しておきます。[^TestCode]

本記事内のドラッグ&ドロップのテストコードは、Vue.Draggableに限らずSortableJSベースのライブラリなら概ね動くものになります。
以下の公式サイトのデモにて検証しています。(2019/12/3時点)

* SortableJS [デモページ](https://sortablejs.github.io/Sortable/#simple-list)
* Vue.Draggable [デモページ](https://sortablejs.github.io/Vue.Draggable/#/simple)
* react-sortablejs [デモページ](

元記事を表示

フロントエンドエンジニアの限界をこえて

[CBcloud Advent Calendar2019 一日目の記事](https://qiita.com/yama-t/items/1abb493d06f5b7ffed1e)の続編となります。

# 前職との相違点
前職はフロントエンドに完全に集中して実装することが許される環境でした。
相違点を簡単にまとめてみます。

## 前職
※所属していた会社そのものではなく、常駐先の環境となります。

– 大企業
– 客先常駐
– 応答率90%以上の完璧なレベルのヘルプセンターで、エンジニアがユーザーの問い合わせに直接対応することがない。
– 完全な役割分担がなされ、フロントエンド実装のみが我々のチームに依頼されてくる。
– フロントエンド系のバグ修正。
– 新機能のフロントエンド実装。
– 障害が起きた場合、専門のチームが対応。
– マーケティング部門で入念に検討・分析・企画された上で具体的な案件としてチケットが作られ、エンジニアが対応する体制が確立されており、スケジュールも余裕を持った期間が取られている。
– エンジニアがたくさんいる

## CBcloud

– ベンチャー企

元記事を表示

RubyでDBMSを実装 構文解析(3日目)

この記事は [RubyでDBMS Advent Calendar 2019](https://qiita.com/advent-calendar/2019/rbdb) の3日目の記事です。

# 本日の概要

[2日目](https://qiita.com/gtnao0219/items/75628edcea7235e4a297)はサーバに渡ってきた文字列をSQLとして解析するに当たって、
意味のある最小単位であるトークンに分解するところまで実装しました。(字句解析)
本日は後半のフェーズである構文解析を実装します。

実装は[こちら](https://github.com/gtnao0219/rbdb-ac/tree/master/day03)のGitHubリポジトリに置いてあります。

# 構文解析とは

構文解析では、字句解析で分割したトークンの配列を、
予め定義した構文規則に照らし合わせていきます。
(広義には字句解析、構文解析を二つまとめて構文解析と呼ぶこともあるそうです)

## BNF

BNFというプログラミング言語の構文を定義するのによく用いられる記法を用いて、
今回

元記事を表示

【超基本】railsで部分テンプレートを使ってみる(haml)

# 経緯

ずっと苦手意識のあった部分テンプレートと向き合った結果、「なにこれ、便利!!」となったため、備忘録のために記事にします。
hamlで書いた記事があまりなかったり、localオプションの変数の意味や、collection、asの詳しい説明をなかなか見つけられなかったので、同じことで悩んでいる誰かのお役に立てたらすごく嬉しいです。

# もくじ
– 部分テンプレートとは
– ファイル名
– hamlへの記載方法
– オプション
– partial
– locals
– collection
– as
– まとめ

# 部分テンプレートとは

部分テンプレート(=パーシャル)とは、繰り返し使用される要素をまとめてテンプレート化するもの。何度も同じコードを書くことを防ぐことができる。また、投稿一覧画面を作成する際、collectionオプションを使用すると、each分を使わずに繰り返しができ、読み込み速度もeach文を使用する時より速い(らしい)。

# ファイル名

部分テンプレートのファイル名は、必ずファイル名の最初に**「_(アンダーバー)」**をつける。アン

元記事を表示

B – ROT N

過去問やっていきます
AtCoder Beginner Contest 146
Aは流石にやらなくていいかな
#問題
https://atcoder.jp/contests/abc146/tasks/abc146_b
スクリーンショット 2019-12-03 22.57.29.png

#1回目
##回答
“`ruby
N = gets.to_i
S = gets.chomp

alf = [‘A’,’B’,’C’,’D’,’E’,’F’,’G’,
‘H’,’I’,’J’,’K’,’L’,’M’,’N’,’O’,’P’,
‘Q’,’R’,’S’,’T’,’U’,’V’,’W’,’X’,’Y’,’Z’]

result = ”
for c in S.chars
x = alf.index(c)

元記事を表示

railsアプリではクラスインスタンス変数の注意する

# クラスインスタンス変数の注意

右辺の実行結果をキャッシュするために以下の手法が使われる事があると思います。
1回目のメソッド実行時に実行結果をインスタンス変数`@foo`でキャッシュしておいて、2回目のメソッド実行時にはインスタンス変数の中身を返しています。

“`
Class Foo
def
@foo ||= bar
end
end
“`
インスタンスメソッドの場合、インスタンス変数はFooクラスのオブジェクト毎に保持されます。
railsアプリ内のコードでこれをクラスメソッド内で使用する場合は注意が必要です。

“`
Class Foo
self.def
@foo ||= bar
end
end
“`

クラスメソッド内でインスタンス変数はClassクラスのオブジェクト毎に保持され、
Classクラスのオブジェクトはrailsアプリケーション起動時から同じものを使い続けます。
その為、DB問合せ結果をキャッシュしてしまったりすると、**アプリケーション起動後DBに初めて問い合わせした値を保持し続けてしまう**為、その後別のリクエストでD

元記事を表示

#Rails OR #Ruby + ActiveSupport の String#in_time_zone で 2月29日 30日 31日 が3月にずれるのだが

Rubyとか言語使用に関わる、深い事情ありの話かと思った。

Date.new を利用した方が良いかな。

“`rb
require ‘active_support/core_ext’

‘2019-2-29’.in_time_zone(‘Tokyo’).to_s
# => “2019-03-01 00:00:00 +0900”

‘2019-2-30’.in_time_zone(‘Tokyo’).to_s
# => “2019-03-02 00:00:00 +0900”

‘2019-2-31’.in_time_zone(‘Tokyo’).to_s
# => “2019-03-03 00:00:00 +0900”

‘2019-2-32’.in_time_zone(‘Tokyo’).to_s
# ArgumentError: argument out of range

Date.new(2019, 02, 28).in_time_zone(‘Tokyo’)
# => Thu, 28 Feb 2019 00:00:00 JST +09:00

Date.new(2019, 02,

元記事を表示

さくらVPSでCentOS7 11.RailsプロジェクトをGitで共同開発

#はじめに
自由にテスト出来るLinuxのサーバーがほしくて、さくらVPSで構築してみました。
順次手順をアップしていく予定です。

前回インストールしたRuby On Railsを共同開発できるようにGitで管理したいと思います。

#目次

1. [申し込み](https://qiita.com/Qsugi/items/9239f93f35967e567b5b)
2. [CentOS7インストール](https://qiita.com/Qsugi/items/4cc4ba9983191a306b19)
3. [SSH接続](https://qiita.com/Qsugi/items/45772c8a71a31bd0d3c8)
4. [Apache・PHPインストール](https://qiita.com/Qsugi/items/bf9740f31b4c42eaad91)
5. [MariaDBインストール](https://qiita.com/Qsugi/items/7798669338b555f4ea8d)
6. [FTP接続](https://qiita.com/Qsugi/i

元記事を表示

Macでrbenvが使えない!【binutilsの悪夢シリーズ】

# 以下のことがしたかった

* rbenvでruby 2.6.5をインストール
* 結論としては,binutilsが色々と悪さをする

# 環境

* Mac Catalina 10.15.1

# 普通に入れようとした記録

“`bash

$ brew install rbenv
… 略
$ rbenv install 2.6.5
Downloading openssl-1.1.1d.tar.gz…
-> https://dqw8nmjcqpjn7.cloudfront.net/1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2
Installing openssl-1.1.1d…

BUILD FAILED (OS X 10.15.1 using ruby-build 20191124)

Inspect or clean up the working tree at /var/folders/df/0q1vdcy17j32kzq9xlb5zgg40000gn/T/ruby-build.

元記事を表示

インスタンス変数・ゲッターセッター・アクセスメソッド

今回はインスタンス変数、インスタンスメソッド、ゲッターとセッター、“`attr_accessor“`について書きます
#今回のコード

“`ruby
class MarsAlien
#attr_reader :name →ゲッターの役割
#attr_writer :name →セッターの役割
attr_accessor :name #ゲッター・セッターの役割

def initialize(name) #初期化メソッド
@name = name #@nameはインスタンス変数
end

def greet #インスタンスメソッド
puts ‘#{@name} says hello to earth’
end
end

mars_bob = MarsAlien.new(‘Bob’)
mars_erich = MarsAlien.new(‘Erich’)

mars_bob.greet #=> Bob says hello to earth

mars_bob.name #=> “Bob”
mars_bob.name = “Johnny”

元記事を表示

Excelって名前しか知らないPCに不慣れな感覚派22歳プログラミング完全未経験者がRubyを習得するまでの軌跡。Part4

【HTML-CSS編】

はじめはpart2,3のように用語の説明や文型をまとめようとおもったがprogateの説明だけで完成されており、理解することが可能。最低限大事なことだけまとめる。

1.HTMLとCSSってなんなのか CSSは色、大きさ、形などデザインに関するプログラミング HTMLが素材でCSSが職人。
2.CSSはHTMLとは別にファイルを作って記述する。
3.プロパティはCSSの機能 ex.color.font-size,background-color,width,height

やってて感じたこと

HTML-CSSはRubyと比べると内容自体はすごく簡単で意味がわからないということはほぼないと想う。ただRubyが詩だとするとHTML-CSSは単文といった感じで1文1文で完結していて面白みはあまりない。

元記事を表示

Rails 6.0.x標準で Ajax+(jQuery+Partial) でHTML部分更新する世界一シンプルなサンプル

# TL;DR (長い! 3行で!)
↓ の記事をRails 6.0.1 版に書き直したものです.
[Rails 5.x標準で Ajax+(jQuery+Partial) でHTML部分更新する世界一シンプルなサンプル](https://qiita.com/fezrestia/items/e669107a4a6e66618738)

Front EndがWebpackに変わっており,
・ Coffee Script → JavaScript への変更
・ jQuery導入方法の変更
が大きな変更点です.

# 動作確認環境

“`
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.6 LTS ← 古いLTSなのでわりとダメ,できれば最新LTS使ってください
Release: 14.04
Codename: trusty

$ ruby –version
ruby 2.6.3p62 (2019-04-16 r

元記事を表示

CC0ライセンスの空白PDFファイル

# はじめに

ライセンス的に問題のない「空白PDFファイル」が欲しかったのですが、すぐに見つからなかったので作りました。リポジトリはこちらです。

https://github.com/kaityo256/blank_pdf

# 空白PDFが欲しい

あるPDFファイルと別のPDFを`pdftk`で結合することを考えます。この時、二つ目のPDFを、いわゆる「奇数ページ起こし」にしたいことがあります。つまり、1つ目のファイル(A)が奇数ページ(例えば3ページ)で終わっており、二つ目のファイル(B)が偶数ページ(例えば4ページ)ある時、そのまま結合して両面印刷すると

“`txt
A1,A2 | A3,B1 | B2, B3| B4
“`

みたいになって読みづらくなります。これを、空白を一枚挟んで

“`txt
A1,A2 | A3,空白 | B1, B2| B3, B4
“`

としたくなりますね。もし空白のPDF`blank.pdf`があれば、`pdftk`を使って

“`sh
pdftk A.pdf blank.pdf B.pdf cat output output.

元記事を表示

サンプルコードでわかる!Ruby 2.7の主な新機能と変更点 Part 1 – 番号指定パラメータ(numbered parameter)

## はじめに
Rubyは毎年12月25日にアップデートされます。
Ruby 2.7については2019年11月23日にpreview3がリリースされました。

[Ruby 2\.7\.0\-preview3 リリース](https://www.ruby-lang.org/ja/news/2019/11/23/ruby-2-7-0-preview3-released/)

この記事ではRuby 2.7で導入される変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。

ただし、Ruby 2.7は多くの新機能や変更点があり、1つの記事に収まらないのでいくつかの記事に分けて書いていきます。
本記事で紹介するのは番号指定パラメータ(numbered parameter)です。

### 本記事の情報源
本記事は以下のような情報源をベースにして、記事を執筆しています。

– [Ruby 2.7.0のリリースノート](https://www.ruby-lang.org/ja/news/2019/11/23/ruby-2-7-0-preview3-released/)

元記事を表示

Fullstaq Ruby を投入してみた(結果編に続く)

こんにちは。

以前見かけた [Fullstaq Ruby](https://fullstaqruby.org/) を試してみようと思います。

## Fullstaq Ruby

### 触れ込みについて

[公式サイト](https://fullstaqruby.org/) の触れ込みでは

> Ruby, optimized for production
> A new Ruby distribution, with the Ruby you know and love, but better.

本番環境向けに調整されたより優れたRubyとのことです。

> Less memory — save 30-50%

メモリ消費を3~5割抑え

> Faster

高速で

> More secure

セキュアで

> Fully open source, based on MRI

MRIベースの完全なオープンソース

とのこと。

### 作者について

サイトをみていると、創設者は Hongli Lai と Fullstaq という会社のようです。
Hongli Lai はそ

元記事を表示

三井住友信託銀行プログラミングコンテスト2019に参加してみた

#感想
AtCoderのコンテスト初参加。結構疲れた。てかムズイ。普通に数学的な発想が求められるんだな〜。
解ければ快感、解けなければうつ病。
https://atcoder.jp/contests/sumitrust2019
以下自分の回答
#A November 30
“`ruby
M1,D1 = gets.chomp.split.map(&:to_i)
M2,D2 = gets.chomp.split.map(&:to_i)

ret = 0

if M1 == 12
if D1 == 31
ret = 1
end
end

if M1 + 1 == M2
ret = 1
end

puts ret
“`
D2が1かどうか判定すれば良かっただけなのに、なにしてるんだろうか。ぐぬぬ。

#B Tax Rate
“`ruby
N = gets.to_i

X = “:(”

a = N * 100 / 108
if ( N * 100 ) % 108 != 0
a += 1
end

if a * 108 / 100 == N
X = a
end

元記事を表示

ログイン中ユーザーの投稿内容をshowアクション以外で出力する方法

SNSっぽいアプリケーションのマイページで、ログイン中ユーザの投稿一覧を取得したかっただけなのにかなり詰まったので備忘録として残しておきます。

アプリの仕様上showアクションやshow.html.erbファイルを使用できず、index.html.erbで表示させるというレア?パターンではありますが。
#環境
Rails 5.2.3
Ruby 2.5.1
gemのdeviseを使用
当記事で使用しているモデル名はplace
#詰まった所
homes/index.html.erbファイル内にてeach doを利用し投稿内容を全部出力したい。

“`homes/index.html.erb
<% @myplaces.each do |myplace| %>
#省略
<% end %>
“`

全部のplaceを取得するのはhomesコントローラー内のindexアクションで

“`:./controllers/homes_controller
@places = Place.all
“`
こう書けばいい。そりゃそうだ。
問題はログイン中ユーザの投稿内容だけを取得したい時。

元記事を表示

誤り検出方法 Checksumについて

ブロックチェーン関連の実装を行なっていた際に、チェックサムで引っかかり「アドレスがinvalidです」と表示されることがあった。その際に、「チェックサムって誤り検出のやつだよな?仕組み知らないわ」となったので、少し調べて簡易的に実装してみた。

## チャックサムとは?
チャックサムとは、データの信頼性を検査するための算出した値のことを言う。この値を元に、データが適切なものであるかを調べることができる

非常に単純な誤り検出方法の1つで、誤り検出の精度は低いが原理が簡単で容易に実装でき、計算コストも低いため、簡単な誤り検出方法として広く普及している

データの誤り検出の方法としてハッシュ関数を利用する方法もあるが、誤り検出のために送信する必要のあるデータのサイズが大きく、処理負荷が大きい。しかし、誤り検出の信頼性はチャックサムを利用する場合よりも高い。

## チェックサムの求め方
チャックサムの求め方については、様々な手法があるが簡単な方法としては、データ列を整数値の列としてみなし和を求め、これをある定数で割った余りを検査用データとするものがある。

### チャックサムの計算の例

元記事を表示

OTHERカテゴリの最新記事