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

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

アプリ作成(rails ver.6.0.0)

## Ruby_on_Railsでアプリを作る

“`
[Terminal]
#指定のファイルに移動。(例えば、projectsディレクトリ内でアプリを作成する)
% cd ~/projects

#アプリを作成(データベースはmysqlで作成)
% rails _6.0.0_ new [app_name] -d mysql

#アプリのディレクトリ内に移動
% cd [app_name]

#データベースを作成
% rails db:create
“`
以上のようにターミナル内にてRailsアプリを作成し、この後、MVCモデルを作っていきます。

元記事を表示

if,else問題

指定された複数の引数をそれぞれの条件で四則計算するプログラムを実装します。

問題
以下の仕様を満たすメソッドnumを作成しましょう。

– メソッドの実引数として「1以上の正の整数」を3つ用意し、それぞれを仮引数a,b,c としてnumメソッド内で使用する
– 第一引数と第二引数は足し算をし、変数abに代入する
– 第三引数が3以下の場合は変数abを第三引数の値で割り、結果を出力する
– 第三引数が4以上の場合は変数abを第三引数の値で掛け、結果を出力する
※小数点以下の出力は考慮しなくてかまいません。

“`ruby:雛形
def num(a, b, c)
# ここに条件式を実装する
end

# 呼び出し例
num(1,5,3)
num(1,5,5)
“`
“`:出力例
出力例
num(1,5,3) → 2
num(1,5,5) → 30
“`

“`ruby:解答例
def num(a, b, c)
ab = a + b
if c <= 3 puts ab / c else puts ab * c end end # 呼び出し

元記事を表示

配列に格納された数値の合計値を算出するプログラムの実装

配列に格納された3つの数値の合計を算出するプログラムを実装します。

– 配列に格納された3つの数値の合計を出力する
– ただし、同じ数値が2つ以上含まれている場合、その数値は合計する要素に含めない

“`rb
def lone_sum(ary)
# 処理を記述
end

# 呼び出し例
lone_sum([1, 2, 3])
“`
“`:出力例
lone_sum([1, 2, 3]) → 6
lone_sum([3, 2, 3]) → 2
lone_sum([3, 3, 3]) → 0
“`

“`ruby:解答例
def lone_sum(ary)
# 配列から、重複しない要素のみ取り出す
uniq_nums = []
ary.each do |num|
count = 0
ary.each do |i|
if num == i
count += 1
end
end
if count < 2 uniq_nums << num end end # uniq

元記事を表示

Rubyの拡張ライブラリをCrystalで書く

# はじめに

CrystalはRubyによく似た文法でありながら静的型付けコンパイラ言語であり、高速に動作します。そうなるとRubyの拡張ライブラリをCrystalでかけたら良いのになと思ったりします。

[前回の記事](https://qiita.com/theanine/items/5b9e98f9091153a0f170)ではCrystalとC++の連携を解説しました。C++(C言語)とCrystalの関数・メソッドは相互にコールできます。一方でRubyの拡張ライブラリはC言語でかきます。このことから、C言語を介してRubyとCrystalの連携ができそうだなと想像されます。

この記事は、Rubyの拡張ライブラリをCrystalで書く例を解説します。

検証した環境

OS: MacOS
Crystal 1.6
Ruby 3.1

**[12/11追記]大規模開発では検証しておらず問題が発生する可能性もあります。最後の参考も合わせてみてください。**

# Rubyの拡張ライブラリの書き方

## Crystal側のコード

そもそもRubyの拡張ライブラリはC言語を前提とし

元記事を表示

semgrepでbelongs_toにoptional: trueを一括で追加した

Rails のバージョンを上げて `belongs_to_required_by_default` を変更したり、 `load_defaults` を指定するときに、 `belongs_to` に `optional: true` をつけるか、古いバージョンでの `required: true` 相当でも動くようになっている必要があります。

その書き換えに `semgrep` を使ってみるとうまくいったので、その紹介です。

## 動作確認バージョン

* Ruby 2.7.6
* Rails 6.0.6
* semgrep 0.122.0

## belongs_to_required_by_default の例

“`ruby
# 古い挙動に戻す
# config.load_defaults 5.0以上の直後に追加
config.active_record.belongs_to_required_by_default = false

# 新しい挙動にする(config.load_defaults 5.0以上と同じ)
# https://github.com/rails/rai

元記事を表示

Rubyは全てがオブジェクト

## 全てがオブジェクトってどういうこと?
Rubyでは全てがオブジェクトですが、これは実際のところどういうことなのでしょうか。

https://stackoverflow.com/questions/18790442/are-there-primitive-types-in-ruby

文字通りの意味なのですが、primitiveとの違いを考えるとわかりやすいと思います。

Rubyではstringは“`String Class“`のインスタンスですが、javascriptでは“`primitive value“`です。

これはどういうことかというと、Rubyのstringはオブジェクトであるため変更可能(mutable)ですが、javascriptにおけるstringはprimitive valueであるため変更不可能(immutable)であるということです。
– ruby
“`ruby
str = “hola”
str[0] = “c”
# str => “cola”
“`
– javascript
“`javascript
l

元記事を表示

Stimulus 1: はじめに

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/handbook/introduction

# Stimulusについて

Stimulusはささやかな野心を持つJavaScriptフレームワークです。他のフロントエンドフレームワークとは異なり、Stimulusは単純な注釈を使用してJavaScriptオブジェクトをページ上の要素に接続することにより、静的またはサーバーでレンダリングされたHTML(”既に持っている HTML”)を強化するように設計されています。

これらのJavaScriptオブジェクトはコントローラーと呼ばれ、Stimulusは継続的にページを監視し、HTML`data-controller`属性が表示されるのを待ちます。各属性についてStimulusは属性の値を調べて対応するコントローラークラスを見つけ、そのクラスの新しいインスタンスを作成し、それを要素に接続します。

これは次のように考えることができ

元記事を表示

RubyのWebAssemblyを試す

## これはなに?
3.2.0からブラウザ上でrubyが動くということなので試してみよう、という話です。

今現在RC1が出ています。
https://www.ruby-lang.org/ja/news/2022/12/06/ruby-3-2-0-rc1-released/

この中でも特に気になっていることが、

* WASIベースのWebAssemblyサポート
* YJIT

この2つあります。
YJITはそのうち試してみるつもりです。

## 準備
といっても単に動かすだけならローカル上にruby3.2.0をインストールする必要もないので、webrickだけ入れておきます。

“`
$ mkdir _rbrc1
$ cd _rbrc1
$ gem install webrick
$ ruby -run -e httpd .
“`

## 試す
test.htmlを作成して中身を記述します。

“`
$ vim test.html
“`

“`html



元記事を表示

Herokuの代わりにFly.ioでrailsをデプロイする。(windows版)

>[Fly.ioでRailsアプリをデプロイしてみた for Mac](https://qiita.com/yuuki-h/items/ec23de152368d36672ea)

Herokuが11月末から無料で利用できなくなるという事をお聞きしたので、上記記事を参考にwindows版でのリリースを模索した備忘録です。(macの方は上記記事でデプロイできます!)

勉強不足故、お見苦しい箇所もあるかと思いますが温かい目で読んでいただけると幸いです。

# 手順

1.準備
2.Fly.ioの登録、インストール
3.リリース

# 1.準備
#### 1-1.powershellの準備
###### コマンドプロンプトでは**一部Fly.ioのコマンドが使えない**ため“`PowerShell“`を利用します。

開き方はキーボードで「Windowsキー」+「R」と打つと検索バーが出てくるので
「PowerShell」と打ち込んでEnterです。
![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

【解決】axios.deleteのリクエストがsinatraで受け取れずに困った

# axios側

`axios`の`delete`メソッドの書き方は↓らしい
“`js
axios.delete(“/url/to/api”, {data: param});
“`

ブラウザのデバッグコンソール(payload)でも値が入ってることが確認できたのでよさそう。
`sinatra`側はなんかエラー出てるけど一歩前進。

# sinatra側

`sinatra`はデフォルトで`delete`メソッドを受け取れないらしい。。
↓のように`_method`ハックを許可する必要があるとのこと。
“`ruby
enable :method_override
“`
* [:method_override | CONFIGURING SETTINGS | sinatra](https://sinatrarb.com/configuration.html#method_override—enabledisable-the-post-_method-hack)

`_method`ハックは本来、`form`要素が`GET`と`POST`しか使えないのを疑似的に`PUT`や`

元記事を表示

アラサー未経験が独学半年でエンジニア転職するまで

2022年10月、知識ゼロから独学半年を経て、
Web系受託開発企業(一部自社開発あり)から内定をいただきました。

今回は私がエンジニア転職するまでの半年間を振り返ろうと思います。

私の性格上、環境を変えない限り勉強は続かないと思い、
**転職して実務経験を積むこと**を最優先に**短期決戦**で行動してみました。

あくまで一例として参考にしていただければ幸いです。

# 自己紹介
超ひよっこエンジニア
プログラミング経験ゼロの文系アラサー

+ 29歳
+ 大卒(文系)
+ 前職は医療系団体職員
+ バイトや派遣も経験
+ PC経験はOfficeソフトくらい

# 学習方法・情報収集

Webサイトや動画をメインで活用しました。
事前に情報収集しまくると、自分の軸が定まり、誤った判断を回避できるので良いです。
プログラミングは学習ハードルが高い内容ばかりなので、**敷居が低いサイト**を活用すると折れずに済みます。
また、独学は情報量の少なさ、刺激の少なさがしんどいので、**仲間を見つけること**も重要だと思います。

+

元記事を表示

Railsでアプリを新規作成

railsを勉強し始めたばかりなので、忘れないようにメモとして残します。
# バージョン
Ruby: 3.1.5
Rails: 7.0.4

# 最初に行うこと
ターミナルで以下のプログラムを叩く。
“`
rails new アプリ名
“`
諸々のインストールが完了したら、`$ cd アプリ名`でフォルダに移動。

# サーバーが動いているか確認する
“`
rails server
“`
– server(“s”と省略しても大丈夫) の後ろに`-b 0.0.0.0` をつけると外部の仮想環境からアクセスできるようになる。

# 必要なgemをインストール
エディタでフォルダを開いたら、Gemfileに必要なgemを書き込み保存する。
まだ記述しただけでインストールは完了していないので、ターミナルで以下のプログラムを叩く。
“`
bundle install
“`
– bundleのみでも可

Bundle complete! 19 Gemfile dependencies, 90 gems now installed.
Use `bu

`#coerce` を refinements で追加してもうまく使われない

`1 + nil` などがエラーでなく `nil` を返すようにしたかったが、 refinements で `NilClass#coerce` を生やす方法はうまくいかなかった。たぶん refinements の有効範囲的に仕方ない?

## 試したコード
Ruby の数値クラスの二項演算は、レシーバー(演算子の左側)の知らないクラスが相手(演算子の右側、第1引数)である場合、相手の `#coerce` を呼び出して**クラスを変換してもらう**仕組みになっている。それにより、**相手のクラスに二項演算を任せる**ことができる。

https://docs.ruby-lang.org/ja/3.1/method/Numeric/i/coerce.html

というわけで、二項演算で右側を `nil` にしたいなら、数値クラスは触らず **`nil` のほうに変換と二項演算を定義**すればいい。ひとまず `+` と `-` (とついでに単項演算)に対応させてみた。

“`ruby
module NullableOperators
refine NilClass do
def

RSpecの.rspecファイルは # を使ってもコメントアウトされない(のでプルリクを送ってマージされた!)

## はじめに
RSpecでは`.rspec`というファイル[^1]にデフォルトのオプションを書き込むことができます。

[^1]: 厳密には`.rspec`以外のファイル名でもオプションは指定可能です([参考](https://relishapp.com/rspec/rspec-core/v/3-12/docs/configuration/read-command-line-configuration-options-from-files
))

“`.rspec
–format documentation
–warnings
“`

https://relishapp.com/rspec/rspec-core/v/3-12/docs/configuration/read-command-line-configuration-options-from-files

`.gitignore`や`.zshrc`など、`.`で始まる設定ファイルは`#`を使って行コメントを書くことができます。きっと、`.rspec`でも同じようにコメント化できるのではないでしょうか?やってみましょう

末尾の文字列を3回出力するプログラムの実装

対象の文字列の末尾に位置する文字を取得し、それらを任意の回数繰り返して出力するプログラムを実装します。以下の要件を満たすextra_endメソッドを実装しましょう。

– 対象の文字列から末尾にある2文字を取得すること
– 取得した2文字を3回繰り返して出力すること
– ヒント: sliceメソッドを使いましょう。

“`:解答するときの雛形
def extra_end(str)
# 処理を記述
end

# 呼び出し例
extra_end(‘Hello’)
“`

# sliceメソッドとは
配列や文字列から、指定した要素を取り出すことができるメソッド。
[sliceメソッドの公式ドキュメント](https://docs.ruby-lang.org/ja/latest/method/String/i/slice=21.html)

“`
# 配列を作成します
array = [0,1,2,3,4,5,6]

# 配列から引数で指定した要素を取得します
ele1 = array.slice(1)
puts ele1
#=> 1

# 配列番号-4から4つ分の要素をsli

簡単な計算を行うRubyプログラムの作成

二桁以上の整数を入力すると、十の位と一の位の数字の足し算、十の位と一の位の数字の掛け算をそれぞれ行い、最後に2つの結果を足し合わせて出力するプログラムをRubyで作成してください。2桁の数字以外が入力として与えられた場合を考慮する必要はありません。

“`:sample.rb
> 二桁の整数を入力してください
> 15

# 1 + 5と 1 * 5をそれぞれ計算

> 足し算結果と掛け算結果の合計値は11です
“`

“`:雛形
def addition(a, b)
# 10の位と1の位の数字に対して、足し算を行う

end

def multiplication(a,b)
# 10の位と1の位の数字に対して、掛け算を行う

end

def slice_num(num)
# 10の位の計算

# 1の位の計算

end

puts “二桁の整数を入力してください”
input = gets.to_i

X, Y = slice_num(input)
# additionメソッドにX,Yを引数として渡し、処理結果を変数add_resultに代入する。

#

過去一週間でいいねの合計カウントが多い順に投稿を表示する方法


【Ruby on rails】過去一週間でいいねの合計カウントが多い順に投稿を表示する方法

# 初めに
プログラミングスクールに通い始めて2ヶ月目です。
読書本シェアアプリを作っています^^
自身の忘備録として記事を更新していきます!

# アソシエーション
“`ruby:user.rb
has_many :books, dependent: :destroy
has_many :favorites, dependent: :destroy
“`

“`ruby:book.rb
belongs_to :user
has_many :favorites, dependent: :destroy
has_many :favorited_users, through: :favorites, source: :user
“`

“`ruby:favorite.rb
belongs_to :user
belongs_to :book
“`
userモデル,bookモデル,favoriteモデルのアソシエーションが完成しました。
has_many :favorite

div ブロック要素

はブロック要素。
 width:400px;を設定しないと、画面いっぱい(横幅)に広がっていく。
margin: 0 auto;をすることで、真ん中の位置にすることができる
.susumu {
width: 400px;
margin: 0 auto;
}

【Rails】gemを使わずに 楽天Apiを動かしてみよう:前篇【ハンズオン】

この投稿は、
[DMM WEBCAMP mentor Advent Calendar 2022](https://qiita.com/advent-calendar/2022/infratop_mentor)
の投稿10日目のエントリーです。

9日目は @takakou さんで
[初学者のためのUnity+clusterによるメタバース空間の構築。](https://qiita.com/takakou/items/065b56d1390d7e676e4f)
です。メタバース・・私もちょっとやってみた事があるので、楽しく読ませていただきました。

## はじめに

最近DMMでメンターをやらせていただいております。 @tomoaki-kimura です。
今回は、 `irb` を使って `Api` を理解するという内容をやってみたいと思います。

## 環境と前提

– ruby 3.1.x

## 1.楽天Api

### 準備

では、早速準備をしましょう。

まず、 [RakutenDevelopers](https://webservice.rakuten.co.jp/docu

eth.rb を使ってスマートコントラクトの関数を呼び出す

web 3.0 業界は js が多い印象ですが、ruby からも使いたいですね。ここ数年間は、ruby の gem も増えているように見えます。
イーサリアム公式サイトのページに載せている eth.rb を使ってみました。

https://github.com/q9f/eth.rb

## mint するコード

“`rb
@key = Eth::Key.new(priv: ‘プライベートキー’)
@client = Eth::Client.create(‘イーサリアムの RPC ノードの URL’)
@contact = Eth::Contract.from_abi(abi: ‘abi の情報’, address: ‘スマートコントラクトのアドレス’, name: ‘RBT’)
@client.transact_and_wait(@client, ‘mint’, ‘mint 先のアドレス’, sender_key: @key)
“`

以前 [ethereum.rb](https://github.com/EthWorks/ethereum.rb) を使ったことがありましたが、