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

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

ActiveStorageで恒久的なURLを取得する

この記事は[Fusic その2 Advent Calendar](https://qiita.com/advent-calendar/2019/fusic-2)16日目の記事です。

## 経緯

弊社内にはTamelというQiitaに似た社内情報共有ツールがあります。
Railsのバージョンが古くなってもいたので、刷新プロジェクトを走らせているのですが、
特に苦労したファイルアップロード機能をPaperclipからActiveStorageに移行する作業でした。

## ActiveStorageを使って困ったこと

いろんな記事を参照しながら、ActiveStorageを使うと`url_for`メソッドでは、ワンタイムURLしか発行できないようです。
Tamelでは記事をMarkdownで書くため、ファイルのURLが記事のレコードに登録されます。
ワンタイムURLがレコードに登録されても、期限が切れたら画像が表示されないという問題がありました。

## 気づいたこと

ファイルを参照するだけの口をつくるだけでいいかー、とコントローラーを作り、pathが正しく登録されているか確認す

元記事を表示

GitHub organization内repositoriesのRubyやGemのversionを一覧する

# TL;DR

全部`git clone`してきてlocalで`git grep`, `grep`する。

## Shallow clone

shallow clone into ~/tmp/packsaddle20191210

“`zsh
mkdir -p ~/tmp/packsaddle20191210
cd ~/tmp/packsaddle20191210
github-repos -org packsaddle -z | xargs -0 -P4 -I {} git clone {} –depth 1
“`

[Git clone repositories in a GitHub organization](https://dev.to/sanemat/git-clone-repositories-in-a-github-organization-gh8)
[sanemat/go-githubrepos](https://github.com/sanemat/go-githubrepos)

## Check ruby version

“`zsh
for dir

元記事を表示

【ruby】簡単ッ! do~endブロックって?

rubyを扱っていると、当たり前のように`do ~ end`の記述を書きますが、実際にはどんな感じで実行されているのか、サラッと書きます。
厳密な話は置いておきましょうよ?
ノリで理解してくれればok!

## block/procを理解する
[Ruby block/proc/lambdaの使いどころ](https://qiita.com/kidach1/items/15cfee9ec66804c3afd2)
こちらの記事が凄いわかりやすいので、細かいことは読んでほしいのですが、
簡単な理解を箇条書きします。

– blockは処理の集合
– blockは単体で存在しない、引数になる
– blockはメソッドの最後の引数になる(do~endは2つない)
– `&block`は`block`を`proc`に変換してる
– procはblockをオブジェクトにしたもの

細けえことはコード見ればええねん?

### blockの実行方法

ここで注意してほしいのは、
実行しているのは`just_do_your_block!`メソッドで、その引数に`block`を渡しているだけです!
つまり

元記事を表示

Alpine Linux 上で gRPC を使ってはまった話

# はじめに
[Zeals Advent Calendar 2019](https://qiita.com/advent-calendar/2019/zeals) の16日目の記事です。

Zeals でデータエンジニアをやっている鍵本です。本日はデータエンジニアリングの話ではなく、これまでインフラエンジニアなどの経験で培った知識を生かして、弊社バックエンドエンジニアと闘った標題に関するお話とその後日談を紹介します。

# 背景
弊社のサービス Zeals (旧fanp) は Alpine Linux の Docker イメージにアプリケーションをデプロイして GKE 上に展開していました。 Alpine イメージを採用した理由は、イメージのサイズを小さくしてCIやデプロイを早くすることにあります。その後、機能追加等でアプリケーションが肥大化し、責務の切り分けをした方がいいだろうということで、マイクロサービス化に取り組むことになりました。詳細は [gRPC(protobuf)をモノリシックなRailsアプリケーションに導入する](https://tech.zeals.co.jp/ent

元記事を表示

仕事で行うRuby/Railsのgem update手順

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110571/647100af-6758-cb7e-59fe-22ce4cf8e5e8.png)

# はじめに
こちらの記事はRuby Advent Calendar16日目の記事です。
[平成RubyKaigiではしゃぎすぎた](https://twitter.com/terry_i_/status/1205784546957905920)結果、この記事を期限ギリギリに書いていますが、後悔はして~~いる~~いません。

最近、会社のお仕事でgemのアップデートを行うことが多いのですが、ググったところgemのアップデート手順が意外と少なかった(正確に言うと、個人でのアップデートか会社でのアップデートかがわからないものが多かった)ので、自分の行っている作業をメモがてら書いてみることにしました。

「お前、そんなザルなやり方じゃ痛い目見るぞ」というマサカリ等あればヴァッシヴァシと飛ばしていただければと思いますので、Rubyのgemアップデートを

元記事を表示

progateの「Ruby on Railsの環境構築をしてみよう!(Windows)」でサーバー構築につまづいた時の対処法

# サーバー構築につまづいた時の対処法
### Railsサーバーをたてたときのエラー
初めてRuby onRailsの実行環境を行う際にRailsのアプリケーション作成まではうまくいき、さあ次はRailsのサーバーを立てようかとの`rails s`のコマンドを入力したとき、以下のようなエラーを吐かれた。

“`
Could not find gem ‘sqlite3 x64-mingw32’ in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.
“`

あれ?progateの記事通りにやったのに違う結果になったぞ。と思いいろいろ調べた結果どうもgemのバージョンに問題があるらしい。~~gemとはなんぞや?~~

### Gemfileの更新
Railsアプリケーションを作成したときに生成されたフォルダ直下にGemfileというものがある。
191216 qiita.PNGLinuxのトラックパッドを制御する

# Linuxデスクトップでトラックパッドのジェスチャが使えない問題

LinuxのDesktopではトラックパッドの対応がMacやWindowsに比べて非常に遅れている。

いまやMacのトラックパッドによるジェスチャはかなりの市民権を得ていて、トラックパッドを指の動かす方向の逆向きに動かすナチュラルスクロールはLinuxを含め様々なOSに提供されるようになった。

WindowsでもWindows10よりジェスチャの扱いが強化されていて、完全ではないものの、Macbookに近い操作を出来るようになっている。

Linuxのトラックパッドやマウスなどのデバイス制御には以前はSynaptics(GUIパッケージマネージャのSyanpticと間違えやすい)を利用していたが、近年、Ubuntuでは15.04頃からWayland由来のlibinputを利用している。 なお、synapticsはこれからメンテナンスモードに移行して積極的に開発はされない。

Waylandでなくとも、Xorgでlibinputを使用することができる。UbuntuではWaylandではなくXorgで起動している場

元記事を表示

文字列の空白や改行の削除まとめ

Ruby技術者認定試験のシルバーで狙われる、空白や改行の削除をまとめてみた。

– chomp
– chop
– strip
– lstrip
– rstrip

“`ruby
a = “\n \r abc \n \r”

a.chomp
=>”\n \r abc \n ” #空白が残っている
a.chomp.chomp.chomp.chomp.chomp
=>”\n \r abc \n ”

a.chop
=>”\n \r abc \n ”
a.chop.chop.chop.chop.chop
=> “\n \r ab”

a.strip
=> “abc”
a.strip.strip.strip.strip.strip
=> “abc”

a.lstrip
=> “abc \n \r”
a.lstrip.lstrip.lstrip.lstrip.lstrip
=> “abc \n \r”

a.rstrip
=>”\n \r abc”
a.rstrip.rstrip.rstrip.rstrip.rstrip
=>”\n \r abc”
“`

またそれぞれ!をつけると破壊メソッ

元記事を表示

Rails 6 ActiveStorageを使用してS3に画像ファイルをアップロードし、取得した画像をリサイズして表示する方法

はじめまして!スタートアップでサーバーサイドエンジニアをやっています。なかのです!

[TechTrain Advent Calendar 2019(User ver)](https://qiita.com/advent-calendar/2019/techtrain)の15日目を担当します!
今回はタイトルの通り、Rails 6 ActiveStorageを使用してS3に画像ファイルをアップロードし、取得した画像をリサイズして表示する方法をお話ししたいと思います。

## はじめに

まず、簡単にActiveStorageについて説明しますと

>Active StorageとはAmazon S3、Google Cloud Storage、Microsoft Azure Storageなどの クラウドストレージサービスへのファイルのアップロードや、ファイルをActive Recordオブジェクトにアタッチする機能を提供します。development環境とtest環境向けのローカルディスクベースのサービスを利用できるようになっており、ファイルを下位のサービスにミラーリングしてバックアッ

元記事を表示

【Ruby】ローカルでKaminari(Gem)をデバッグする環境を作る

# 環境構築
## ソースを取ってくる
– fork
– git clone

## bundle install
“`sh
bundle install –path vendor/bundle
“`
## Rubyのバージョンを指定する

“`:.ruby-version
2.6.5
“`

## Bundler.requireしてGemの処理を呼び出す
“`tmp/app.rb
require ‘bundler’
Bundler.require

p Kaminari.paginate_array([1,2,3,4,5], total_count: 6).page(1).per(2)
“`

これでローカルでソースを編集すると反映されるようになります。
RubyMineでDebug実行することも可能です。

# テストを動かす

## script: ‘bundle exec rake test’
`.travis.yml`を見てみると`script: ‘bundle exec rake test’`という記載があるので実行します。
(`.travis.yml`はTr

元記事を表示

Rails:deviseの利用方法

#目的#
webアプリで必須の認証機能を自動作成してくれる便利なgem「devise」を使ってみたので使い方を説明したいと思います。

#環境#
rails 5.1.6

#deviseの導入#
#1.gemのインストール#

**1.1.Gemfileの編集とインストール**
Gemfileにdeviseを追加

“`Gemfile
source ‘https://rubygems.org’

.
.
.

gem ‘devise’
“`

gemをインストール

“`
$ bundle install
“`

#2.deviseの設定#
devise関連ファイルを追加
以下のような英文が表示されます。1から4まで順番に見ていきます。

“`ruby
$ rails g devise:install
create config/initializers/devise.rb
create config/locales/devise.en.yml
====================================================

元記事を表示

Rubyの変数の定義(定数)

いよいよRubyの変数の定義のラストです。
これまでに[ローカル変数](https://qiita.com/nyan_tech_24/items/bf52e294e86910d23570)と[インスタンス変数](https://qiita.com/nyan_tech_24/items/7bd5bb0bd5e092dbb778)、[クラス変数](https://qiita.com/nyan_tech_24/items/0e673dd9ddb38b2bd0bc)、[グローバル変数](https://qiita.com/nyan_tech_24/items/5894600c6676e69a3d49)について書きました。

今回は定数について書いていきます。

##命名規則
– 先頭が大文字
– 英数字と_で構成される

“`ruby
STUDENT = ‘Taro’
=> “Taro”
Student_2 = ‘Jiro’
=> “Jiro”
Student_3 #何も変数に入れないとエラーが発生する
NameError: uninitialized constant Student_3

元記事を表示

Classiエンジニア新人研修での学び方の学び

Classi Advent Calendar 2019の16日目の記事をご覧いただき,ありがとうございます!
2019年新卒エンジニア@willsmileです.自称コーヒー好きですが,コーヒーのことを語ると,教育と学習の方に“脱線”してしまい,「結局,教育のほうが趣味なんじゃないの」と最近自覚した者です.

# まえがき
本文では,Classiエンジニア新人研修を通じて,自分自身が「気づいた開発について新たな観点(の一例)」を語り,将来の自分,あるいは他の人にも参考できるように,「どうやって気づいたのか」を一段上の観点から言語化することを試みます.

# 本題
## 研修の概要
Classiエンジニア新人研修のカリキュラム担当者が業界で有名なRubyist[@igaiga](http://twitter.com/igaiga555)です.Classi入社前に@igaigaさんが著者である「[ゼロからわかるRuby超入門](https://www.amazon.co.jp/dp/B07KQXFF6D/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

元記事を表示

[Ruby on Rails] 他のテーブルを参照してidを取得し、外部キーとしてデータを挿入する

# 実現したい事
データを挿入するテーブルとは別のテーブルの情報を参照して、該当するデータのidを外部キーとして、元のテーブルにデータを追加する
![スクリーンショット 2019-12-15 17.32.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533650/335ca023-8bf4-cfdb-f144-2840dac78afd.png)
# 前提
テーブルは生産量のデータを持つProductions(生産量)テーブルと製品の情報を持つItems(製品)テーブルがあります。Productionsモデルには、idとamount(生産量)、Itemsテーブルと紐づけるためのItem_idを持っています。Itemsテーブルにはidとcode(製品コード)とname(製品名)のカラムを持ちます。また、Goodsテーブルにはすでに、製品の情報が入っているものとします。

#### 今しようとしている事
Productionsコントローラのcreateアクションで、Prodectionsテーブルに生産量

元記事を表示

Ruby & Rails チートシート

# Rubyの論理値の評価

* A && B
true(nil, flase以外)が現れたら終わりでそれが論理値になる
* A || B
false(nilかfalse)が現れたら終わりでそれが論理値になる

# 特定のtest methodのみを走らせる

“`
$ rails test test/integration/users_login_test.rb TESTOPTS=”–name test_login_with_valid_information”
“`

# 本番デプロイ先のURLを確認できる

“`
$ heroku info
“`

元記事を表示

PHPerが久しぶりにRubyを書いて思ったこと

## 内容

– PHPer(Laravler)が感じたRuby(Rails)への感想

## 私の背景

– PHP成分が多い人生
– 初期だとFuelPHPとか触ってた
– ここ数年はLaravel使ってた
– Rubyは2011年頃に遊びで触ってた
– [メタプログラミングRuby](https://www.amazon.co.jp/dp/4048687158/)とか読んで興奮した記憶はある
– この当時のRailsを触って「ほーん、なるほど」、みたいに思った記憶もある
– 仕事では結局使わなかったけど、[Project Euler](https://projecteuler.net) をRubyで解いたりしてみてた

といった感じの背景です。
最近Railsで仕事することになったので、PHPer(というかLaraveler)が感じたRailsに対するギャップをいくつか書きたいと思います。
すでにRailsのプロジェクトがあり、そこにJOINした感じです。

## Autoloadがわからない

PHPのロード

“`php
requir

元記事を表示

AIでruby-signatureを生成する

# はじめに
タイトルはお約束の釣りでただし、AIはAbstract Interpretationですって奴です。

ruby-signatureを抽象実行で生成しようってのがうまくいきそう(うまくいったとは言っていない)のでまとめてみます。

## ruby-signatureって
ruby-signatureはRubyのライブラリや組み込みクラス・メソッド等の戻り値の型情報を記述するための記法と型のデータベースです。[ここ](https://github.com/ruby/ruby-signature) にあります。
型情報は手で書くことを想定しているわけですが、自動的に生成出来れば色々便利でしょう。

## mmcについて
[mmc](https://github.com/miura1729/mruby-meta-circular)は私が作っているRubyからCに変換するコンパイラです。中に抽象実行をおこなって型を推定するエンジンを持っています。抽象実行とかそういうのは書かないので[ここ](https://dev.to/miura1729/-2376)を見てください。

# E

元記事を表示

Rubyのdefの基本について

勉強していて分からなくなったからRubyのdefについて、自分の振り返り用。

def はメソッドを定義するためにある。

“`
def メソッド名
 puts “hello”
end

hello
“`

メソッド名を書くだけでhelloが出力される.
簡単に言うとトンカツ定食を注文すると、ご飯、味噌汁、トンカツ、サラダ、小鉢が付いてくる様な感じ。

元記事を表示

Rubyの出力メソッド p、puts、printsメソッドの違いについてまとめました。

Rubyの学習中に、p、puts、printsメソッドを学習しましたが、違いが分かりづらかったので備忘録として作成しました。

#pメソッドの特徴
pメソッドの特徴は出力する値と共に型情報(文字列や数値型)を一緒に出力することです。
基本的にはデバッグ用に使われます。

コード
1. p ‘1リットルの重さは’
2. p ‘1000’
3. p ‘グラム程です’

実行結果
1. “1リットルの重さは”
2. 1000
3. “グラム程です”

文字列は””に囲まれて、数字はこのまま出力されます。

#putsメソッドの特徴
■putsメソッド特徴は末尾に改行が入る形で、指定した値を出力することです。
コード
1. puts ‘おはようございます’
2. puts ‘今日は’
3. puts ‘良い天気です’

実行結果
puts おはようございます
puts 今日は
puts 良い天気です

#printメソッドの特徴
■printメソッドの特徴は改行を入れずに引数に指定した値を出力することです。

コード
1. print ‘おはようございます’
2. print ‘今日は’
3.

元記事を表示

ユーザー認証ってなんだ??(超初学者)

####~投稿者のスペック~
・プログラミング歴2ヶ月
・ポンコツです
 

とあるRailsの教材を進め(掲示板作る系)途中で何回か???な事ありましたが、
前進あるのみでやっとのことでユーザー認証の仕組みまでたどり着けました。

##:gear:ユーザー認証って??

システムやアプリケーションを正当に使用できるユーザーかどうかの確認などに使われる。たとえば、LAN上のサーバーにログインする場合、ユーザー名とパスワードでユーザー認証が行われる。〜[コトバンク](https://kotobank.jp/dictionary/ascii/136/)引用〜 

:beginner:はい、意味不明ですね。

ではユーザー認証例見てみましょう。

①Aさんが寒くなってきたのでダウンを買おうとECサイトのユルクロをみました。

②このウルトラヘビーダウンいいじゃん!(カートに入れる)

③Aさんが決済前に誤ってサイトを閉じる

④ダウンどこにあったっけ…とサイトを開くとカートのなかにダウンがある!ラッキー♪


これよくありますよね。
特になにも考えてなかったで

元記事を表示

OTHERカテゴリの最新記事