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

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

[py2rb] __slots__

# はじめに
移植やってます
# __slots__ (Python)
“`python
class cvstr(str):
__slots__ = (‘accession’, ‘unit_accession’)
“`
`Python`はインスタンス変数を自由に追加できます。
それを制限する機能が`__slots__`
# @ (Ruby)
“`ruby
class Cvstr < String @accession @unit_accession end ``` `Ruby`は平常運転で。 # メモ + Python の __slots__ を学習した + 道のりは遠そう

元記事を表示

[py2rb] repr() str()

# はじめに
移植やってます
# repr() str() (Python)
“`python
>>> import datetime
>>> td = datetime.date.today()
>>> print(str(td))
2021-12-09
>>> print(repr(td))
datetime.date(2021, 12, 9)
“`
内容はよく分かりませんが、`Ruby`だと次の感じかも。
# inspect to_s (Ruby)
“`ruby
> require ‘date’
> td = Date.today
> puts td.to_s
2021-12-09
> puts td.inspect
#
“`
上記の場合、`.to_s`は付けても付けなくても同じ結果になります。
# メモ
+ Python の repr を学習した
+ 道のりは遠そう

元記事を表示

[py2rb] hasattr

# はじめに
移植やってます
# hasattr (Python)
“`python
try:
import pandas as pd
except ImportError:
pd = None
else:
if hasattr(pd, ‘_version’):
pv = pd._version.get_versions()[‘version’]
else:
pv = pd.version.version
“`
`hasattr`でメソッドがあるかどうかを確認。
`Pandas`の古いバージョンに対応していると思われ。
# methods (Ruby)
“`ruby
begin
require ‘pandas’
pd = Pandas
rescue => exception
pd = nil
else
if pd.methods.include?(:__version__)
pv = pd.__version__
else
raise “Pandas#__version__

元記事を表示

eRuby(erb)の HTML エスケープ

# 何の話?

この記事のテーマは eRuby に `<%= %>` などの手段で文字列を挿入するときの HTML エスケープについて。

「eRuby」はテキスト(要するに文字列)に Ruby のコードを埋め込むことができるテンプレート言語の名前。しかし,この名称よりも「ERB」とか「erb」という呼び方で認識している人のほうが多いかもしれない。

「HTML エスケープ」は `<` とか `&` といった文字を `<` とか `&` といったものに変換する文字列処理。 eRuby の典型的な応用は HTML の生成なので[^html],式の値(を文字列化したもの)をそのまま挿入したい場合もあれば,HTML エスケープして挿入したい場合もある。 [^html]: eRuby は汎用のテンプレート言語であり,生成するテキストは HTML に限らない。 Ruby on Rails では HTML エスケープについてきちんと意識しなくてもよしなに取り計らってくれたりするが,本記事ではテンプレートエンジンをあらわに扱って処理する場合に知っておきたいことをまとめる。 eRu

元記事を表示

【Ruby のまずいコード】Pathname で与えられたディレクトリーでの glob

# お題

Pathname オブジェクトでディレクトリーパスを与えると,そのディレクトリー(サブディレクトリーも含む)内の HTML ファイルのパスの一覧を表示するメソッドを定義してください。
表示されるパスは,与えられたディレクトリーパスからの相対パスとします。
HTML ファイルの拡張子は `.html` のみとします。

# コード

“`rb
require “pathname”

def show_htmls(dir)
Pathname.glob(dir + “**/*.html”) do |path|
puts path.relative_path_from(dir)
end
end
“`

# 改善

[Pathname](https://docs.ruby-lang.org/ja/3.0.0/class/Pathname.html) クラスの `glob` はクラスメソッド版 [Pathname.glob](https://docs.ruby-lang.org/ja/3.0.0/method/Pathname/s/glob.html) のほかにイン

元記事を表示

シンプルな実装で挑む点字メーカーチャレンジ

## プルリクエスト
https://github.com/JunichiIto/tenji-maker-challenge/pull/17

## 記事の概要
自身がRubyを利用して約半年がたち、どの程度Rubyに慣れてきたのか確認するため参加させていただきました!
記事内では以下の項目について記述します。

1. ロジックを考えている時の動き
1. ロジックの解説
1. コードのアピールポイント

## 1. ロジックを考えている時の動き
自分が普段プログラムを組み立てる際にどのような考え方で進めたのか、仕様確認の観点の整理も含めロジックを考えている時の動きを記載します。

### 1-1. 仕様を確認する
プログラムは**「入力 -> 変換 -> 出力」**を行う仕組みという認識なので、与えられる入力と期待される出力の確認は最初に行います。

以下の順で仕様を整理します。

1. 入力の確認
2. 出力の確認
3. 例外となるパターンの有無、対応要否の確認

#### 1-1-1. 入力の確認
[今回のお題「点字メーカープログラム」](https://github.com/Ju

元記事を表示

ググり力、それはエンジニアには必須の能力である

**ググり力**、それはエンジニアにとっては **必須の能力** になりつつあると思います。
さて、皆さんは自分のググり力で欲しい情報にちゃんとたどり着けると言えますか?

@Yametaro さんからのお題です。

“`
ある日、コードレビュー中ワイ
ワイ「さぁ、今日も同僚のコードをレビューしていくでぇ」
ワイ「まずは新卒のT君のコードを読んでいこか」
ワイ「どれどれ…」
ワイ「ん?なんやこの??っていう書き方は…?」
ワイ「ググってみよか…」
ワイ「JavaScript ??と入力して、検索ボタンをポチッとな」
ワイ「…あれ?それらしい検索結果が出てこんな…」
ワイ「ぐぬぬ、記号関係はググりづらいこともあるんやな…」
ワイ「これじゃあ今日はもう、酒飲んで寝るしかないやないか…」

〜飲酒、そして就寝へ…〜
“`

では JavaScript で ?? の検索方法はどうしたらいいのか? ここに1つの解答を示しておきます!
**「javascript double question mark」と検索すること** です。

![javascript_??](https://raw.g

元記事を表示

Ruby サーバーレスフレームワーク “SOULs”

こんにちは![Volare Advent Calendar 2021](https://qiita.com/advent-calendar/2021/volare)の9日目の記事です。

ちょうど少し前に話題になっていたRubyのサーバーレスフレームワークであるSOULsを触ってみて素晴らしかったので紹介します、、!

今後も少しづつ触っていくので補足していきます。

## SOULsとは
Active RecordとScaffoldやCI/CDが標準装備された、Rubyのサーバーレスフレームワークです。
GCP (Google Cloud Platform) 上で動作します。
オランダ政府より先端研究開発として認定されており、日本人の方が開発されているため[ドキュメント](https://souls.elsoul.nl/ja/)も丁寧です。

## 全体アーキテクチャ
公式ドキュメントに載っているアーキテクチャはこちらになります。

![SOULs 全体アーキテクチャ](https://souls.elsoul.nl/imgs/docs/SOULs-architecture.jpg)

元記事を表示

【Rails】deviseの導入手順

# はじめに
Railsでログイン等の認証機能を`devise`で実装する機会があったので手順をまとめておく。

# deviseとは
以下のような**認証機能**を簡単に実装することができるgem

* ユーザー登録
* ログイン
* ログアウト
* 登録情報の編集
* パスワード変更、再発行

# 導入手順
## 1. Gemfileに以下を追記する

“`ruby:Gemfile
gem ‘devise’
“`

## 2. deviseの設定ファイルを作成する

“`shell
$ rails g devise:install
“`

コマンドを実行することで以下二つの設定ファイルが作成されます。

* config/initializers/devise.rb
* config/locales/devise.en.yml

## 3. モデルを作成する
* 認証機能を付与したいモデルを作成する
* `generation`の後は`model`ではなく`devise`とすることに注意する

“`shell
$ rails g devise User
“`

* 以下

元記事を表示

M5Stack で mruby を動かしてみた

この記事は、[FUJITSU Advent Calender 2021](https://qiita.com/advent-calendar/2021/fujitsu)の 9 日目の記事です。

@GORO_Neko です。本当にお久しぶりな毎度毎度の御挨拶をば、ご存知の方ご無沙汰してます。初めての方お初にお目にかかります。

いつも通りではりますが、まずお断りをば一言。

ボク、仕事では「未だ」(ハイそぉです、今に至っても「未だ」っ!(>_<))一切組み込み系のお仕事をしておりません。 以下は、自分が所属する会社の意向を反映したものでもスタンスを示すものでもなく、単なる一個人の趣味の活動から産まれた記述です。 # M5Stack で mruby を動かしたい! 二年弱ほど前の話なんですが、[mrubyワークショップ](https://mrubyworkshop.connpass.com/event/163293/)という勉強会に参加しました。 そこで、教材として貸し出されたのが mruby 実行環境が導入済みの [M5Stack](https://m5stack.com/)。

元記事を表示

Enumのまとめ

## Enumとは

日本語では列挙型とも呼ばれている。

Railsで使うEnumは、モデルに定義することができるカラムで、
データベースの特定のカラムの値を、指定した文字列で扱うことができるもの。

**1つのカラムに複数の変数に連続した値を付けられる便利な機能らしい。**

> (使い方の例)記事の下書きの機能を実装したい。
→ 記事作成に新しくstatusカラムを作り、Enumを使ってそのカラムの中に下書きの記事と公開記事を入れることで、データベースに両方のデータを保存することができる!
>

## Enum を定義してみる

まず、Enum を使うには、実装したいモデルの中に定義する必要がある

例えば下記のような定義をする!

“`ruby
class Article < ActiveRecord::Base enum status: [ :test, :production, :development] end ``` status カラムに、test と production と development を定義している。 そして実際にモデルの中に statu

元記事を表示

【Ruby】each_with_objectとinjectの違い

##each_with_object
配列やハッシュの要素を使って、新たに配列やハッシュを作成したりする際に簡潔に書くことができる。

– 引数に渡されたオブジェクトが常にhash変数に入っている。

“`ruby
array = [[:hoge, 1], [:fuga, 2], [:piyo, 3]]

array.each_with_object({}) do | (key, value), hash |
hash[key] = value
end

# => {:hoge=>1, :fuga=>2, :piyo=>3}
“`

##inject

– ブロック内で最後に評価された値が入るのでブロック内でもう一度“`hash“`を書かないといけない。

“`ruby
array = [[:hoge, 1], [:fuga, 2], [:piyo, 3]]

hash = array.inject({}) do | hash, (key, value) |
hash[key] = value
hash
end

#=> {:hoge=>1, :fuga=>2,

元記事を表示

[py2rb] not

# はじめに
移植やってます
# not (Python)
“`python
if not v:
“`
`not v`が`True`か`False`

“`python
>>> print(not 0)
True
>>> print(not 1)
False
>>> print(not None)
True
>>> print(not True)
False
>>> print(not False)
True
>>> print(not [])
True
>>> print(not {})
True
>>> print(not “”)
True
“`
`0`と`””`の否定で`True`になるんですね。
# ! (Ruby)
“`ruby
> puts 0.!
false
> puts 1.!
false
> puts nil.!
true
> puts true.!
false
> puts false.!
true
> puts [].!
false
> puts {}.!

> puts ”.!
false
“`
`slack`で知ったのですが、`.!`という書き方

元記事を表示

【Ruby】with_object

##with_object
繰り返しの各要素にオブジェクトを添えてブロックを繰り返し、オブジェクトを返り値として返す。

“`ruby
# 0,1,2 と呼びだす enumeratorを作る
to_three = Enumerator.new do |y|
3.times do |x|
y << x end end to_three_with_string = to_three.with_object("foo") to_three_with_string.each do |x,string| puts "#{string}: #{x}" end # => foo:0
# => foo:1
# => foo:2
“`

##参考

https://docs.ruby-lang.org/ja/latest/method/Enumerator/i/with_object.html

元記事を表示

【Ruby】配列の要素の平均値をちょっと簡単に出す

Rubyには“`average“`メソッドがないため、
配列の要素の平均を出すときは今まではこうしていた。
独学の頃はいちいち“`to_f“`するの面倒だなと思ってたけどこういうものだと思ってた。

(RailsのActive Recordには“`average“`メソッドがある。)

“`ruby
array = [4, 5]
array.sum.to_f / array.size.to_f
#=> 4.5
“`

ちなみにまとめて“`to_f“`すると正しい値が返らない。

“`ruby
array = [4, 5]
(array.sum / array.size).to_f
#=> 4.0
“`

##fdivメソッド
self を other で割った商を Float で返すので、ひとつひとつ“`to_f“`しなくていい。
今までの方法よりちょっとだけ楽に平均を出せることがわかった。

“`ruby
array = [4, 5]
array.sum.fdiv(array.size)
#=> 4.5
“`

##参考

https://docs.

元記事を表示

[py2rb] basestring

# はじめに
移植やってます
# basestring (Python)
“`python
try:
basestring
PY2 = True
except NameError:
basestring = (str, bytes)
PY2 = False
“`
`basestring`って型というかオブジェクトで、`ver2.7`くらいまで使用されていた様子。
[basestringという抽象クラスが削除 – Qiita](https://qiita.com/cstoku/items/353fd4b0fd9ed17dc152#basestring%E3%81%A8%E3%81%84%E3%81%86%E6%8A%BD%E8%B1%A1%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%8C%E5%89%8A%E9%99%A4)

`bytes`型も曲者です。

“`python
data = ‘こんにちは’
>>> encoded = data.encode(‘sjis’)
>>> print(encoded)
b’\x82\xb

元記事を表示

【競プロからの学び】最も近い値を探す→bsearchが高速

# TL;DR

タイトルの通り。
配列内から最も近い値を探す→bsearchが高速に動作する。
二分探索なので。

競技プログラミン初心者による、自分向け備忘の記事。

## 問題
https://atcoder.jp/contests/typical90/tasks/typical90_g
こちらの問題を解いている際のお話。

やりたいことの1つが以下の操作↓

– 「整数によって構成される配列a」と「定数b」を用意。
– 「aの中からbに最も近い値を探す(絶対値が最も小さい値を探す)」

例)
a = [1,5,19,7]
b = 8
=> answer = 7

#### 自分の考え

“`ruby
a.each do |i|
b_arr << (a[i] - b).abs end puts b_arr.min ``` これだと計算が遅い。。。 i個分の差分計算の後にソートをしているので。。。 #### ほかの方の答え ```ruby a.sort idx = a_arr.bsearch_index {|x| x >= b }

if

元記事を表示

[py2rb] set の差異

# はじめに
移植やってます
# set (Python)
“`python
_comments = set(‘>;’)
“`
何気ない`set`ですが、

“`python
>>> print(_comments)
{‘>’, ‘;’}
“`
中は既にスプリットされています。
# set (Ruby)
“`ruby
require ‘set’
_comments = Set.new(‘>;’.split(”))
“`
二つくらいなら最初から分けておいてもいいんですけど。
# intersection (Python)
“`python
x = {‘is_decoy’, ‘remove_decoy’, ‘formula’,
‘ratio’, ‘correction’}.intersection(kwargs)
“`
`intersection`って集合の積なんですけど、この`kwargs`って~~辞書型~~なんですよね。

よくよく見るとSet型でした。
# & (Ruby)
“`ruby
x = Set.new([‘is_deco

元記事を表示

Rubyで点字メーカープログラム作成にチャレンジしました! 〜Qiita Advent Calendar 2021〜

![はてなBlog20211208.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1652831/a220bfa4-2a30-838c-41c2-abfec135c5ff.png)
## :cherries:この記事について
この記事は、伊藤 淳一(@jnchito)さんによる[Qiita Advent Calendar 2021「Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-」](https://qiita.com/advent-calendar/2021/ruby-challenge)の8日目(12/8)の記事です。

## :cherries:自己紹介と参加した理由
はじめまして、[paru](https://twitter.com/Paru871)と申します。今回Qiitaへの初投稿となります。
2021年4月より[フィヨルドブートキャンプ](https://bootcamp.fjord.jp
)というオンラインプログラミングスクールでRubyを初めとするプログラミング

元記事を表示

デプロイ後エラー、その後localhostもエラー

原因は結局のところよくわからないのですが、

調べたところ

localhostでは動いているがデプロイ後エラーが出ている人がいました。

その場合は

・閲覧履歴データの削除・キャッシュ・Cookieを削除する

と良いみたいです。

キャッシュの消し方↓

Chromeの場合
パソコンで Chrome を開きます。
画面右上のその他アイコン  をクリックします。
[その他のツール]  [閲覧履歴を消去] をクリックします。
上部で期間を選択します。すべて削除するには、[全期間] を選択します。
[Cookie と他のサイトデータ] と [キャッシュされた画像とファイル] の横にあるチェックボックスをオンにします。
[データを消去] をクリックします。

ブラウザなどを利用すると、ウェブサイトの情報がキャッシュやCookieに保存される。

キャッシュやCookieなどを消去すると、サイトの読み込みや表示形式に関する問題の一部が解決することがある。

私の場合は、エラーが読み込まれずにテストなどをクリアし、デプロイ時に再度読み込まれエラ

元記事を表示

OTHERカテゴリの最新記事