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

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

NESエミュレータを作る-CPUちょっと理解編

[PONOS Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ponos) 15日目です。
昨日は[@honeniq](https://qiita.com/honeniq)さんの[git cat-fileでGitとちょっと仲良くなる
](https://qiita.com/honeniq/items/18644bb08601260b1ea4)でした。

[NESエミュレータそ作る-準備編](https://qiita.com/ackyla/items/76a33198c077fc0093ee)の続きです。
今回は[こちらのサイト](http://hp.vector.co.jp/authors/VA042397/nes/sample.html)で配布されているサンプルROM「Hello, World!」を使ってプログラムがCPU上でどのように処理されていくかを追っていきます。

# この記事の目標
いきなりファミコンはこう動いている!のようなデカイ部分を見ると大変なので
この記事ではサンプルROMをどう動かすかの部

元記事を表示

Rubyではpという変数名をなるべく避ける

Rubyプログラミングの小ネタです。

Rubyに限らずプログラミング全般の慣習として、寿命の短い変数の場合、意図的にそのオブジェクトを表す名前の頭文字1文字だけにすることがよくあります。

“`ruby
books.map { |b| b.title }
“`

しかし、Rubyではその場合でも`p`だけはなるべく使わない方が良いです。

“`ruby
# 問題なく動くがあまり望ましくない
people.map { |p| p.name }
“`

それはなぜか?`Kernel.#p`メソッドと名前が被ってしまうからです。

https://docs.ruby-lang.org/ja/latest/method/Kernel/m/p.html

もしデバッグで`p`メソッドを使いたくなったりすると、途端にコードがわかりにくくなります。

“`ruby
# pメソッドでp.nameをターミナルに表示する(?)
people.map { |p| p p.name }
“`

Rubyは懐が深い言語なので、実は上のコードもちゃんと動きます。
気になる方は以下のコードをir

元記事を表示

【プログラミング初心者向け】配列の二人三脚を避けよう

[フィヨルドブートキャンプ](https://bootcamp.fjord.jp/)のコードレビューでよく指摘してるシリーズです。

コードレビューをしていると、次のように2つ(もしくは2つ以上)の配列を作って、それらをシンクロさせながらループ処理するロジックをよく見かけます。

“`ruby
# 配列を2つ用意する
names = [‘Alice’, ‘Bob’, ‘Carol’]
points = [90, 98, 85]

# 2つの配列から同じindexの要素を取得しながらループさせる
names.size.times do |i|
name = names[i]
point = points[i]
puts “#{name}さんは#{point}点です”
end
#=> Aliceさんは90点です
# Bobさんは98点です
# Carolさんは85点です
“`

しかし、このロジックは2つの配列の要素数と並ぶ順番に大きく依存します。たとえば次のように片方の要素が増えたり、片方の要素がソートされたりすると、おかしな内容を表示することになります。

元記事を表示

better_errors 導入で Rails のデバッグを快適に!

# 概要

皆さんは `Rails` での開発の際にどのようにデバッグを行っていますか?
`puts` コマンドで確認、`byebug`、`pry` などのデバッグツールを利用する等々、方法があると思います。

今回は上記と並んでデバッグの効率を上げてくれる `better_errors` という `gem` をご紹介します。

# better_errors とは?

## どんな gem ?

`Rails` のスタンダードのエラー画面をもっと見やすく、便利なエラー画面へと変更してくれる機能になります。

https://github.com/BetterErrors/better_errors

## 動作サンプル

`Rails` のデフォルトエラー画面を見てみましょう。

– **Before**

![a4b09b13-d04e-ac35-7e50-227b9dda9139.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952780/928e3995-33c7-7ab5-e22c-1

元記事を表示

自分で書いたレガシーコードを自分で改善する

# はじめに
リンクアンドモチベーションでソフトウェアエンジニアをしているkoboriです。
つい最近、研修でコード改善の講義を受けたので、その復習も兼ね、なるべく読みにくいレガシーコードを自分で書き、自分で改善をして、その過程を記事にすることにしました。

# レガシーコードを用意する
まず初めになるべく読みにくいレガシーコードを作成していきます。ここでいう レガシーコードとは、 テストがないコードを指しています。
ただ、自分で書いたテストがないコードを自分で改善するのでは、少し改善の難易度が低いと思ったので、下記の4点に留意して可読性を大幅に下げました。

– テストは絶対に書かない
– 変数はなるべく短く、省略する
– マジックナンバーを積極的に多用する
– クラスとメソッドはなるべく大きくする
– このコードを書いてから改善するまで3日以上の間隔を開ける

その結果書かれたコードがこちらです。

“`minesweeper.rb
class Minesweeper
def self.start
x1 = [{ d: “■”, n: 0, m: fal

元記事を表示

あれあれ? CPU 増やしたのに速くならないぞ?

この記事は [モチベーションクラウドシリーズ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/mcs) 15 日目の投稿です。

:::note
弊社ではテックブログもやっておりますので、宜しければこちらもどうぞ!
https://link-and-motivation.hatenablog.com/
:::

## はじめに

Web アプリケーションを開発している皆さん! 日夜性能問題に悩まされていると思います?
本記事では性能問題における **「CPU 使用率の見方」** に焦点をおいて話そうかと思います!

## CPU あるある

CPU にまつわる謎? は大体次の2ケースかな〜、と思います。

:::note
Amazon RDS (MySQL DB) の例で挙げてみます。
:::

### ① クエリ応答が遅いからスケールアップ! → あれ?変わらないぞ?

Web アプリ開発していると、API 応答が遅い → 原因は重いクエリ (SQL) というケースはよくあるかと思います。当然速度改善したいです

元記事を表示

リポジトリ内の古いブランチを issue にリストアップするスクリプトを GitHub Actions で動かす

この記事は、[Supershipグループ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/supership) の15日目の記事になります。

「ちょっとしたスクリプトの置き場として GitHub Actions を活用してみた」という感じの内容になっています。

## はじめに

私が開発に参加しているプロダクトはもう10年以上開発が続いています。そのリポジトリにあるリモートブランチのうち、一部はもう使われないまま放置されてしまっています。これだと、CI 実行時の checkout 等で全ブランチの情報を取得するのに余計な時間がかかってしまいます。一方で、作業のバックアップ等で置いておきたいブランチもあり、その判断はブランチを作成した本人にしかできないはずです。
というわけで、ある程度古いブランチを人ごとに分類してリストアップし、それを個人ごとに確認してもらうとよさそう、と考え、そのリストアップを自動でやってみました。

## どこにリストアップするか

色々考えて、GitHub の issue が一番よさそう

元記事を表示

Rake is 何?

## Rakeって何?

RakeはRubyのタスクランナーです。“`make“`のRubyバージョンのようなものだと思います。

https://www.creatology.jp/unix/make.html

都度、実行する必要があるようなタスクをrakeを使って管理することができます。
Railsでマイグレーションを行う時には“`rails db:migrate“`を実行すると思いますが、“`rake db:migrate“`でも同様の結果を得られます。

## Ruby単体での使い方
“`terminal
gem install rake
touch Rakefile
“`

“`Rakefile.rb
task :sample do
puts “sample”
end
“`
上記のように定義した場合、以下のように呼び出すことができます。
“`
rake sample
“`
また、命名においてバッティングが起こる可能性があるため名前空間を使うことができます。
“`Rakefile.rb
na

元記事を表示

Stimulus 5: 状態の管理

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

https://stimulus.hotwired.dev/handbook/managing-state

最新のフレームワークのほとんどは常にJavaScriptで状態を維持することを推奨しています。それらはDOMを書き込み専用のレンダリングターゲットとして扱い、サーバーからJSONを消費するクライアント側のテンプレートによって調整されます。

Stimulusは別のアプローチを取ります。Stimulusアプリケーションの状態はDOMの属性として存在します。コントローラー自体はほとんどステートレスです。このアプローチにより最初のドキュメント、Ajax リクエスト、Turboへのアクセス、さらには別のJavaScriptライブラリなど、どこからでもHTMLを操作できるようになり、明示的な初期化手順を行わなくても関連するコントローラーが自動的に起動します。

# スライドショーの作成

前の章では要素にクラス名を追加することでStimul

元記事を表示

【個人開発】絵本を検索して図書館で「貸出可能」か確認できるサービスを作ってみた

この記事はadvent calendar 2022 15日目のものです。

こんにちは。ザキと申します。プログラミングスクールの「RUNTEQ」でRuby on Railsを中心に学習しています!

この記事では、私が作成した [図書館情報を表示する絵本検索サービス「Kariteyomu」](https://www.kariteyomu.net) と、その使用技術について紹介させてください。

https://www.kariteyomu.net/

# 開発の背景
私には小さな子供がおり、頻繁に図書館で絵本を借りて読み聞かせをしています。
読み聞かせをすることで、子供と一緒に笑ったり、興味があることを追求したり、親子のコミューケーションもとっています。

一方で子供の興味が年齢やタイミングで移り変わることもあり、最適な絵本を探すことには苦労しています。

**特に図書館で絵本を借りるのは難しい。なんでこんなにハードモードなんだ!!と心の中で叫んだのは私だけではないはずです!**

**サクッと絵本を検索できて、図書館の貸出情報を表示できるサービスがあれば楽になりそうだ!

元記事を表示

LambdaにRubyのソースファイルをアップロードする方法

## 概要
LambdaでRubyがかけるようになったのですが、画面上のコードをいじるより実際は手元の環境で動かしてそれをデプロイすることのほうが多いと思います。
そこで今回はLambdaに手元のrubyファイルをアップロードする方法を紹介します。
(今回はGemを使わないものを紹介します。Gemを使うものはまた次回記載予定です。)

## 既存の関数のエクスポート
まず、現在のLambda関数を手元の環境に持ってきましょう。
Lambdaの変更したい関数のページに行き、上の方のアクションボタンから「関数のエクスポート」を選択
![スクリーンショット 2022-12-14 23.07.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83409/6af000af-90ec-442e-961f-31d289f2c526.png)
ダイアログの「デプロイパッケージのダウンロード」を選択
![スクリーンショット 2022-12-14 23.07.13.png](https://qiita-image-sto

元記事を表示

RubyonRailsチュートリアル:実践メモ

Ruby on Rails チュートリアル(Webサービス開発が学べる学習サービス)に従って、MVCフレームワークアプリケーションを作成していく。

**使用ツール** :
AWS Cloud9
### 【AWS Cloud9】
新しくターミナルを開く方法
1. タブバーの **+** ボタンをクリック
1. メニューの中からNew Terminalを選ぶ
※もしくはalt + t

元記事を表示

マルチスケール名簿22f

# qiita\_org setup

qiita template
qiita config global
pushd ~/.emacs.d/
emacs init.el
mkdir site_lisp
emacs ox-qmd.el
mv ~/.emacs.d/ox-qmd.el ~/.emacs.d/site_lisp/
emacs README.org

# expense\_tracker

apiテストの場所がおかしい.正しくは,spec/acceptance/expense\_tracker\_api\_spec.rb

# name list

| name | github id | shell | editor | github |
|:—————–|:——————|:—————–|:———————–

元記事を表示

【RUBY】可変長引数とオプション引数について

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# 可変長引数
個数に制限を設けていない引数のことで、その引数は配列として認識されることとなります。配列ですから、いくつあってもいいってことになります。

使い方は引数の前に*をつけるだけです。
“`ruby
class Train
def gse(*numbers)
puts “今日の特急は#{numbers.join}です。”
end
end
“`
“`ruby
train = Train.new
train.gse(“1号”,”2号”,”3号”,”4号”)

#=> 今日の特急は1号2号3号4号です。
“`
Trainクラスにgesメソッドを定義しています。gesメソッドには可変長引数として*numbersが書いてあります。
trainインスタンスを生成し、gesメソッ

元記事を表示

Gemのインストール方法いろいろ

通常とは違うGemの読み込み方法を3つほどまとめました。

1.ブランチ指定してGemを読み込む方法
2.プライベートリポジトリにしているGemの読み込み方法
3.ローカルのGemを読み込む方法

の3つです。

## 1.ブランチ指定してGemを読み込む方法

“`ruby
gem ‘gem名’, git: ‘gitのパス’, branch: ‘ブランチ名’
“`

## 2.プライベートリポジトリにしているGemの読み込み方法

### ①GitHubでpersonal access tokenを取得する。
### ②それを環境変数に設定する
.envに記述。もしくはLinuxの環境変数に直接設定。

“`ruby
GIT_ACCESS_TOKEN=”発行されたトークン”
“`
### ③Gemfileのgemのインストール先をプライベートgemにする。

“`ruby
gem ‘gem名’, git: “gemのパス”
“`

### ④以下のコマンドでbundle installを実行する。

“`bash
BUNDLE_GITHUB__COM=$GIT_ACCE

元記事を表示

【Ruby】initializeメソッド、引数の順番依存関係を取り除く

## initializeメソッドは引数の順番に依存している

次の例では、Fooのinitializeメソッドは3つの引数をとります。(hoge,piyo,bar)
デフォルト値はなく、それぞれの引数が必須です。

“`ruby
Class Foo
def initialize(hoge, piyo, bar)
@hoge = hoge
@piyo = piyo
@bar = bar
end
end
“`

ここで重要なのは引数を正しい順番で渡さないといけないことです。
newメソッドは引数の順番に依存します。

“`ruby
Foo.new(1,2,3)
=> hoge=1
=> piyo=2
=> bar=3

Foo.new(3,1,2)
=> hoge=3
=> piyo=1
=> bar=2

Foo.new(2,3,1)
=> hoge=2
=> piyo=3
=> bar=1
“`

## Rubyのinitializeメソッドの引数の順番の依存を取り除く方法

### 1. ハッシュを使う

“`ruby
Class Fo

元記事を表示

そのrubocopの警告スルーしていませんか?

rubocop の警告が煩わしいと思うことがありませんか?
面倒だから警告を diable にして、警告を消してOKにしてませんか?
逆に深く考えずに警告を修正して、警告が消えたから、それでOKなんてことしてませんか?

ちょっと待ってください。警告は自分のスキルアップにつながるチャンスかも知れません。警告にどんな意味があるか、どう修正すべきか調べることで、自分の知識を深めることにつながるかも知れません。今日は、そんな自分の経験をいくつかご紹介したいと思います。

なお、ここでは、 rubocop と rubocop-rspec gem を使っています。

以下のコードと spec を例にして説明します。

“`ruby:web_download.rb
# frozen-string-literal: true

require ‘open-uri’

# Web ページのクラス
class Web
def initialize(url)
@url = url
end

def read
URI.open(@url, &:read)
end
end

元記事を表示

「Rubyのしくみ」を読んだ

[WEBCAMP ENGINEER COMMUNITY のカレンダー](https://qiita.com/advent-calendar/2022/webccamp-engineer-community)の14日目はQiitaの @kyntk が担当します。

「Rubyのしくみ」を読んだので、その感想をまとめました。

日本語版序文として、まつもとゆきひろさんの以下のようなコメントがあります。

> Rubyを便利につかっていても、その中がどうなっていて、どのように実行されているのか、ある

元記事を表示

Railsにおける途中経過の確認

## pry
Railsではpryを使うことによって、プログラムを一時的に止めることができます。
一時的に止めることによって何が嬉しいのかというと、途中経過をみることができます。

大抵の場合、バックエンド側でデータを取得してクライアント側に渡すと思いますが、このデータがどこまで持ってこれているのかだったり、そのオブジェクトが思うような状態になっているのかの確認をクライアント側に来て初めてするのでは効率が悪いです。
プログラムを途中で止めることによって、その時点でのデータやオブジェクトの状態を確認することができます。

“`pry-rails“`をGemfileに追加し、“`bundle install“`します。
止めたい場所に、“`binding.pry“`を追加することによって一時的に止めることができます。

“`user.rb
class User < ApplicationRecord def publish_post binding.pry user.posts.create(title:

元記事を表示

Stimulus 4: レジリエンスのための設計

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

https://stimulus.hotwired.dev/handbook/designing-for-resilience

クリップボードAPIは[現在のブラウザーで十分にサポート](https://caniuse.com/#feat=clipboard)されていますが、古いブラウザーでアプリケーションを使用している少数の人々がまだいると予想される場合があります。

また、アプリケーションへのアクセスに時々問題が発生することも想定しておく必要があります。たとえば、断続的なネットワーク接続またはCDNの可用性により、JavaScriptの一部またはすべてが読み込まれない可能性があります。

古いブラウザーのサポートは無駄だと片付けたり、ネットワークの問題を更新後に解決する一時的な不具合として片付けたりするのは魅力的です。しかし、多くの場合でこの種の問題に対して適切に回復力のある機能を構築することは自明のことです。

プログレッシブエン

元記事を表示

OTHERカテゴリの最新記事