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

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

[py2rb] sliceクラス

# はじめに
移植やってます。
# slice (Python)
“`python
s = slice(0, 10, 3)
print(type(s))

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10][s.start:s.stop:s.step]
print(a)

#
# [1, 4, 7, 10]
“`
`Python`って`slice`クラスがあるんですね。
3つの数値を持ったタプルなんだと思いますが。
# どうする? (Ruby)
“`ruby
slice = Struct.new(:start, :stop, :step)
s = slice.new(0, 5, 3)
puts s
puts s.class
puts s.instance_of?(slice)

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10][s.start, s.stop]
print(a)

# #
# #

元記事を表示

Rails Googleフォント 使い方(初心者)

#Google Fontとは
Googleが提供するWebフォントのサービスです。
基本無料で使用できます。
下記GoogleフォントのURL

https://fonts.google.com/

###Webフォントとは
Webフォントはネットワーク上からフォントデータを読み込みWebサイトやブログに表示する仕組みを利用しています。
異なるデバイスで見ても意図したWebフォントを表示することが可能。
##実装の手順
①使いたいGoogleフォントを探す( link と CSS rules to specify familiesをコピー)
②app/views/layouts/application.html.erb のheadの中にlinkを貼り付ける
③app/assets/stylesheets 内にある使いたいscssにCSS rules to specify familiesを貼り付ける

###①
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2274768/5c3dcc3

元記事を表示

[py2rb] for のスコープ

# はじめに
移植やってます
# for (Python)
“`python
for item in (1, 10, 2):
if item is not None:
break
print(item)
“`
見た瞬間、`item`って未定義?と思いましたが、ちゃんと数値を返します。
# for (Ruby)
“`ruby
for item in [1, 10, 2]
break if !!item
end
puts item

item = [3, 10, 2].find{ !!_1 }
puts item
“`
`Ruby`はそんなことないだろうと思っていましたが、ちゃんと数値を返します。
普段、`for`って使用しませんので思い込みでした。
# メモ
+ Python の for を学習した
+ 道のりは遠そう

元記事を表示

Faraday Net::HTTP adapter v2.0.0.alpha-2以降で、Content-Typeに応じた文字コードがセットされるようになった

[Qiita株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/qiita)の14日目の担当は、Qiita株式会社CX向上グループの@kyntkです!

https://qiita.com/advent-calendar/2021/qiita

## はじめに

タイトルにある変更が対応されたPull Requestはこちらです。

https://github.com/lostisland/faraday-net_http/pull/13

## 前提

Faradayに2012年に以下のissueが作成されているように、FaradayでContent-Typeが`text/html; charset=utf-8`のようなレスポンスが返ってきても、`response.body`の文字コードは`ASCII-8BIT`になっています。

https://github.com/lostisland/faraday/issues/139

そのため、`response.body.encoding`では実際のbo

元記事を表示

【Ruby のまずいコード】回文数を表示

# お題

3 桁の回文素数をすべて表示してください。

回文素数とは,回文数になっている素数のことです。
回文数とは,数字列で書いたときにそれが回文になっている数のことです。
一般の $N$ について,$N$ 進法の回文数を考えることができますが,ここでは 10 進法で表記した場合のこととします。

たとえば,101 という数は回文になっていて,しかも素数なので回文素数です。
121 は回文数ですが,合成数なので($11^2 = 121$)回文素数ではありません。

# コード

“`rb
require “prime”

def put_palindromic_prime_number(num)
str = num.to_s
puts str if num.prime? && str == str.reverse
end

(100..999).each do |num|
put_palindromic_prime_number(num)
end
“`

# 問題点

コードは合っています。101 から 929 まで,15 個の回文素数が表示されます。

素数かどう

元記事を表示

Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念- に挑戦しました

この記事は[Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念- Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ruby-challenge) 14日目の記事です。

バックエンドエンジニアをしておりますyukoonoと申します。
書いたコードを外部に公開したことがないので、力試しをしてみたいという動機で参加させていただきました。
よろしくお願いします。

## プルリクエストのリンク、または自分が書いたコード
[Github: 点字メーカーチャレンジ 12/14 #20 JunichiIto/tenji-maker-challenge ](https://github.com/JunichiIto/tenji-maker-challenge/pull/20)

## ロジックの解説

1. 入力をひらがな一文字分ずつ分割する

例:`”KI RI N”` -> `”KI”, “RI”, “NN”`
このとき、`”N”` または `”NN”` が入力されていた場合は、「ん」を

元記事を表示

CI初心者がfastlaneでアプリ申請の半自動化を行うまで

# 概要

[サムザップ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/sumzap) 14日目の記事です。
本稿は業務改善系の記事になります。

# 経緯

所属プロジェクトの業務フローにアプリ申請作業があります。
その中でいくつか改善できそうな問題点がありました。

## 問題点

– 申請用パッケージ作成に必要な各種ツールの操作が手作業
– ダブルチェック体制のため、エンジニア2人が長時間拘束される
– 新しくチームへ参加した人にオペレーションを伝授する場合、エンジニア3人体制になる
– 業務時間の大半が持っていかれる

申請が手作業なのは珍しくないとは思っていますが、機械的な手続きを自動化すればエンジニア2〜3人が長時間拘束される状況は改善できそうだなと思いました。
今回はfastlaneの導入をもって機械的な手続きの自動化を行いました。

## fastlaneとは

fastlaneはアプリ申請に関わるあらゆる手続きがアクションとして実行できるようになっているRuby製の開発支援ツールです。
201

元記事を表示

【Rails】deviseとomniauth-twitterでTwitterアカウントを使った認証処理

#環境
ruby 2.6.7
Rails 5.2.6

#手順

##TwitterAPIの設定

TwitterAPI登録作業については、こちらを参考に行いました
https://pocco.net/twitter-developer/

Twitter社の審査があって、取得に時間がかかるので注意です。

登録が出来たらDeveloper Portalのページで設定します
https://developer.twitter.com/en/portal/dashboard
登録の際に表示されるAPIキーは後で使います。

アプリの作成から
Settings → Authentication settingsと進んで
Callback URLsを設定します。

“`
http://127.0.0.1/users/auth/twitter/callback
http://localhost:3000/users/auth/twitter/callback
http://(本番環境のURL)/users/auth/twitter/callback
“`

![スクリーンショット 2021

元記事を表示

AWS SDK Ruby で credentials の読み込みに失敗する場合

この記事は [? UMITRON ? Advent Calendar 2021](https://adventar.org/calendars/6652) **13日目** の記事です。
Advent Calendar も折り返し地点です ?

お魚食べてますか? ?

現在は UMITRON 株式会社で、水産養殖 ??? の持つ潜在的可能性を IT を使って引き出すことに取り組んでいます。

当初予定していた内容がちょっと間に合わなかったので、以前遭遇したエラーについての小ネタを書きたいと思います。

AWS SDK for Ruby を環境変数 `AWS_CONFIG_FILE`, `AWS_SHARED_CREDENTIALS_FILE` を指定しつつ、使おうとしたときに `Aws::Errors::MissingCredentialsError` のようなエラーが起きました。これらの環境変数で指定している設定ファイルは確実に存在している状態で、 AWS CLI などは正常に使えている状態だったので、原因を突き止めるのに難儀しました。

結論から言えば、これら

元記事を表示

点字メーカーを作ってみた! ~チェリー本改訂版発売記念アドベントカレンダー企画~

##はじめに
この記事は[Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念](https://qiita.com/advent-calendar/2021/ruby-challenge)の点字メーカープログラム作成したので、それについての解説記事です。

* 作成した人
* Ruby歴半年、今年6月からエンジニア転職を目指して毎日働きながら学習継続中
* 新卒で地元のメーカーに就職した社会人2年目の23歳

* なぜこちらの企画に参加したのか
* 伊藤さんのコードレビューを受けれるかもしれないから
* チェリー本を愛用しているため、形ある貢献がしたかったから
* Qiitaでアウトプットがしたかったから(初記事です)

* 完成したプログラムのプルリク↓

https://github.com/JunichiIto/tenji-maker-challenge/pull/23

##お題の概要
今回作成したプログラムは、入力されたローマ字に対応する点字をテキストで出力します。
以下が実行例です。

“`
t

元記事を表示

ReactからRailsAPIにクッキーを送るときにはまった話

#概要
今日はReactからRailsAPIにクッキーを送信する際にはまったことがあるのでそのときにどう対処したかを簡単に説明します。フロントエンド側は簡単だったのですが、バックエンド側の方の記述に手間取ったのでメモしておきます。
cors (closs origin resourse sharing)のエラーがずっと出てしまっていました。API通信にはaxiosを使用しております。

#フロントエンド
(例)

“`typescript
axios.post(
‘http://localhost:3001/users’,
answers,
{ withCredentials: true},
)
“`

このようにしてaxiosの引数を一つ追加して、“`{ withCredentials: true}“`とするだけで良いです。
実際にCookieが送れてているかどうかはGoogleChromeの検証モードで確認できます。
[こちらの記事](https://qiita.com/ykkamm/items/258bac725f11882

元記事を表示

【Rails】 超初心者向け!アプリケーションを作成する準備

#はじめに
私は2ヶ月ほど前からプログラミングの勉強を始めた、とてつもない初心者です。まず初めはみなさんご存知の[Progate](https://prog-8.com/)をやっておりました。ある程度履修を終えて、[現場で使えるRuby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227)を進めていました。その際に初心者すぎて困ったことをここで少しずつまとめていきたいと思います。
プログラミングの「プ」の字も理解していなかったり、元々PCの扱いが慣れていないと、とても小さいことでも分からないことがあったので、できる限り誰でも分かるように丁寧に説明していきたいなと思います。

※とてつもない初心

元記事を表示

! Unable to load application: Zeitwerk::NameError: expected file /var/www/~ to define constant Users::SessionsController, but didn’tの解決方法

##背景
pumaを起動させると

“`
! Unable to load application: Zeitwerk::NameError: expected file /var/www/~ to define constant Users::SessionsController, but didn’t
“`
のようなエラーが発生しました。

##解決方法
エラーの翻訳としては「アプリケーションが読み込めません: Zeitwerk::名前エラー: SessionControlerのUser定数を定義するための予期されたファイル/var/www/~ ,しかし読み込めなかった。」

Zeitwerkというのは調べてみるとrails6から導入された自動でファイルを読み込んでくれものです。それがうまく動作していなくてアプリケーションを読み込めませんということです。

(参考)
https://zenn.dev/murakamiiii/articles/893d83626c9f15

解決の仕方を調べてみると、stack overflowで以下の記事が見つかり、これを参考に

“`
c

元記事を表示

Ruby の module のインスタンス…

# はじめに
移植やってます
[Python to Ruby Advent Calendar 2021](https://qiita.com/advent-calendar/2021/py2rb)
# インスタンス変数
“`ruby
module A
Al = 0
@Ai = 0
@@Aa = 0
end

class B
include A

Bl = 0
@Bi = 0
@@Bc = 0
end
p [‘instance_variables: ‘, A.instance_variables, B.instance_variables]
p [‘class_variables: ‘, A.class_variables, B.class_variables]

# [“instance_variables: “, [:@Ai], [:@Bi]]
# [“class_variables: “, [:@@Aa], [:@@Bc, :@@Aa]]
“`
モジュールはインスタンス化できないけど、インスタンス変数はあるってことですね。
モジュールのクラス変数が、

元記事を表示

[py2rb] @property

# はじめに
移植やってます
# @propety (Python)
“`python
class IndexedReaderMixin(NoOpBaseReader):
@property
def index(self):
return self._offset_index
“`
Pythonの`デコレーター`は、関数に機能を追加するための仕組み。
ややこしい仕組みですが、`@property`は比較的簡単で、所謂~~セッター~~ゲッターの様なもの。
# attr_reader (Ruby)
“`ruby
class A
attr_reader :index

def initialize
@index = 0
end

def add
@index += 1
end
end

a = A.new
puts a.index
puts a.add
puts a.index += 1 # error
“`
皆さん大好き`attr_reader`

“`ruby
module A
def reset

元記事を表示

[py2rb] 多重継承

# はじめに
移植やってます
# 多重継承 (Python)
“`python
class NoOpBaseReader(object):
def __init__(self, *args, **kwargs):
pass

class IndexedReaderMixin(NoOpBaseReader):

class IndexedXML(IndexedReaderMixin, XML):
“`
~~この`IndexedReaderMixin`が次に継承される際多重継承となるため、Mixin化を図りたいと思います。
親クラスのインスタンス化で`pass`しているので、弊害は少ないと思いますが。~~
コメント欄にて教えていただきましたが、~~多重継承といいましても、単一継承を何回も繰り返しているだけのようです。~~ダイヤモンド継承になっていてもうまく検索できる仕組みのようです。

**[追記]**
いつも参照させてもらっている、お気楽プログラミングさんに分かりやすい解説がありました。
[お気楽 Python3 プログラミング超入門](http://www.

元記事を表示

RubyでWindowsのGUIアプリを作る

この記事は、[Wano Group Advent Calendar 2021](https://qiita.com/advent-calendar/2021/wano-group) の記事です。

## 背景

何年かに一回WindowsのGUIアプリを作ることがありまして、その最初のバージョンを[exerb](http://exerb.osdn.jp/)を使ってRubyで作っていました。
長年それを使いまわしていたのですが、いい加減古すぎるので、新しいやり方で作ろうと探したら、[libui](https://qiita.com/kojix2/items/1bf6b999973ea3bc17e6)が見つかりましたので、それを使ってみた記録の記事です。

Rubyのコードをexeにするのには、[ocra](https://github.com/larsch/ocra)を使いました。

ちなみに筆者はRubyはほとんど書いたことありませんので、コードに変なところがあるかもしれませんが、ご容赦を。

## libui

libui はポータブルなUIライブラリということで、Goにもバインディ

元記事を表示

Validation failed: 〇〇 must existエラー 解決法

##結論  
  〇〇の部分のアソシエーションに optional: true を追記してあげる

“`
class Poop < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :user belongs_to :humans, optional: true ``` # optional: trueとは __外部キーがnillであることを許可してくれるオプションです。__ バリデーションにひっからず保存されるようになります。 詳しくは下記リンクに書いてあります。 https://railsguides.jp/association_basics.html#optional #なぜこんな事が起こったか ``` def create poop = Poop.create(poop_params) if poop.save #ここのsaveでhuman_idがないために起こったエラー redirect_to r

元記事を表示

[py2rb] sys.exc_info

# はじめに
移植やってます
# sys.exc_info (Python)
“`python
try:
if self._pass_file:
self._reader = self._func(
self._source, *self._args, **self._kwargs)
else:
self._reader = self._func(*self._args, **self._kwargs)
except Exception:
self.__exit__(*sys.exc_info())
raise
“`
`sys.exc_info`はスタックトレースを返すようです。
# inject (Ruby)
“`ruby
begin
if @_pass_file
@_reader = _func(@_source, @_args, @_kwargs)
else
@_reader = _func(@_args, @kwargs)
end
rescue => exc

元記事を表示

[py2rb] __init__

# はじめに
移植やってます
# __init__ (Python)
“`python
class IteratorContextManager(NoOpBaseReader):
def __init__(self, *args, **kwargs):
self._func = kwargs.pop(‘parser_func’)
self._args = args
self._kwargs = kwargs
if type(self) == IteratorContextManager:
self.reset()
super(IteratorContextManager, self).__init__(*args, **kwargs)
“`
インスタンスを生成されるときに呼び出されます。
しかし、`super.__init__`ってなかなか凄いですね。
# initialize (Ruby)
“`ruby
class A
def initialize(*args)

元記事を表示

OTHERカテゴリの最新記事