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

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

メモ

Ruby基礎 2022/12/22
・変数を定義するときはビュー内ではなく、コントローラー内のアクションのアクションで定義することが一般的である
def index と end の間で定義するが 変数の前には@をつける。@をつけることによりアクション内で定義してもビュー内で利用できる

元記事を表示

Rubyにこんな機能が欲しい

Rubyを完全に理解した勢の@dosaidonです。さて、来年に向けてこんな機能がRubyに欲しいを二つほど書いてみました。
## 超多次元のデータ構造
RubyのArrayは異常に良くできている。複素数をサポートしているのも良い。一方で、1次元の列ベクトルと行ベクトル、2次元のマトリックス、3次元以上のテンソルとかの数値計算に必要なデータ構造とクラスの話が無いのが気になる。「たのしいRuby」は入門書のせいかもしれないが一次元のArray(列ベクトルでも行ベクトルでもないリスト)は出てくるが2次元以上のn次元のデータ構造の話がいくら読んでも出てこない。
さらに、超多次元のデータ構造にDataFrameのようなラベルでのアクセスがあるともっと嬉しい。なお、DataFrameは2次元の行列データに行ラベルと列ラベルが追加されたもので、まあエクセルの表みたいなデータ構造のこと。

2年4組
前期
行ラベル/列ラベル 算数 国語 理科 社会
青木一郎     99  85  95  70
佐藤二郎     69  87  85  55
山田三郎

元記事を表示

更新日時を全部更新しないようにするためのupdate_attributeとupdate_columnsの違い

?< [WEBCAMP ENGINEER COMMUNITY Advent Calendar 2022](https://qiita.com/advent-calendar/2022/webccamp-engineer-community) 23日目の記事です。
## 背景
大量のテーブルのとあるカラムを全て更新しようと思いました。

ただ、テーブルの`updated_at`が全部更新されてしまうのはちょっと怖いな…と思ったので良いメソッドがないか探したところ、ちょうどよく2種類用意されていたので、ここに簡単にまとめてみます?

## 結論
https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_attribute
こちらを読んでいただければ正確にわかります。

せっかくなので一部説明します。

### update_attribute(name, value)

“`
Updates a single attribute and saves the record.
Th

元記事を表示

JavaScript以外で作るChrome拡張機能

こんにちは、[Qiita学生対抗アドベントカレンダー23日目](https://qiita.com/advent-calendar/2022/student)を担当します。logiteca7(ろじ)です。

# はじめに

WebAssemblyを使って、簡単な**JavaScript以外の言語を使ったChrome拡張機能**を開発しました。
**今回の記事ではその手法の解説と次の開発目標についてお話したい**と思います。
また今回はRubyを使いましたが、理論上どんな言語でも出来るはずです。(多分Pythonも出来る)

動くデモはこちら↓(リポジトリにインストール方法が書いてあります。)

https://github.com/aaaa777/ruby-chrome-extention-demo.git

それではいってみましょう!

# 前提知識

### Webassemblyとは
**ブラウザ上で実行できるアセンブリ。**
ブラウザで動くJavaScript(以下JS)以外の言語の1つ。

https://qiita.com/ShuntaShirai/items/3ac924

元記事を表示

Stimulus リファレンス: 値

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

https://stimulus.hotwired.dev/reference/values

特別なコントローラープロパティを使用してコントローラー要素の[HTMLデータ属性](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*)を型付きの値として読み書きできます。

“`html

“`

“`javascript
// controllers/loader_controller.js
import { Controller } from “@hotwired/stimulus”

export default class extends Controller {
static

元記事を表示

Rails Renderデプロイガイド 【完全版】

# 背景
今回は、Herokuの代替案として有効的だったFly.ioが
クレジットカードを持たない人にサービスを提供しない方針になってしまったので
クレジットカードを持たない人向けにRender.comのデプロイ方法を
詳細にお伝えします?

この記事の通りに進めるだけでほぼ確実にデプロイできるはずなので
もし問題等がありましたら、コメントなどでお知らせください?

:::note warn
無料枠では、Renderのデータベースは90日まで+1つまでしか運用できません
こちらを了承できる方は進めていきましょう!
(90日後にDBを作成し直す必要がありそうです)
:::

# 手順
大きく以下の流れで進行します。
1. [PC上のアプリ内での準備](#pc上のアプリ内での準備)
1. [データベースの作成](#データベースの作成)
1. [Railsアプリとデータベースの接続](#railsアプリとデータベースの接続)

# PC上のアプリ内での準備
作成しているアプリの階層に移動しておきましょう!
移動するコマンド
`cd フォルダ名`

## Gemfileの編集
[公式](htt

元記事を表示

Vue.js in RoR の最新サンプルを作ったよ

Vus.jsをRoRに入れ込む形の実装サンプルを作りました。
**sprockets/webpackerなし**なのがポイントです。

出来上がったものは[こちら](https://github.com/isuke/rails-vue-sample)から見ることができます。

自分用の備忘録を兼ねて実装内容をここに残しておこうと思います。

## 0. 技術スタック

– Ruby 2.7.1
– Rails 7.0.4
– rspec
– Node.js 16.18.1
– Vue.js 3.2.45
– webpack 5.75.0
– TypeScript
– headless chrome

## 1. rails new

なにはともあれ`rails new`から始めましょう。
いろいろskipしていますが、「sprockets/webpackerなしなのでいらないもの」と「サンプルなのでいらないもの」があります。
「sprockets/webpackerなしなのでいらないもの」は必ずスキップしてください。
「サンプルなのでいらないもの」は必要に応じて入れてください。

元記事を表示

【Railsエンジニア寄り】GraphQLを無料で学べる教材を集めてみた。

## はじめに
RESTは業務で触ってたのですが、GraphQLは使ったことなかったので年末年始に個人開発でも使ってみようとキャッチアップがてら漁ったソースを忘備録的にまとめます。

## GraphQLとはなんぞや
> GraphQLは、APIのためのクエリ言語であり、既存のデータを使ってクエリを実行するためのランタイムです。GraphQL は、API 内のデータについて完全かつ理解しやすい記述を提供し、クライアントが必要なものだけを求める力を与え、API を長期にわたって進化させることを容易にし、強力な開発者ツールを可能にします。

公式としては上記の説明。ややとっつきにくいので調べた情報を端的にまとめてみる。

– GraphQLは、Facebookによって開発されたオープンソース
– REST APIと異なりWebサイトやモバイルアプリケーションでデータをやり取りするためのクエリ言語
– 取得するデータをサーバー側で指定してリクエストできるので、パフォーマンスの向上にも期待ができる

## REST APIとはどのように異なるのか
REST APIとGraphQLの主な違いは

元記事を表示

Rails カラム追加とロールバック

# はじめに
業務の中で既存のテーブルに対して、カラムの追加が必要なタスクがあったので色々調べて得た情報をまとめてみました。

# 手順1 マイグレーションファイルの作成
テーブのを作成や編集を行うにはマイグレーションファイルを作成する必要があります。

マイグレーション作成コマンドは以下になります。

補足) 業務のアプリケーションはdockerのコンテナ上で動作していたのでコンテナ上でrailsコマンドを実行する必要がありました。

“`
$ rails generate migration Addカラム名Toテーブル名 カラム名:データ型
“`

実際のコマンドだと…
“`
rails generate migration AddIntroductionToProfile
“`
みたいな感じになるかなと思います。

上記コマンドを実行すると“` db/migrete “`の配下に“` 20221222_add_introdunction_to_profile.rb “`みたいなファイルが生成されているはずです。

# 手順2 マイグレーションファイルの中身を確

元記事を表示

Ruby moduleの特異メソッドとして取り込む

# moduleとは
クラスによく似た機能であり、`任意の式`や`メソッドを定義`できます。
クラスとの大きな違いは
– インスタンスを生成できない
– 継承できない

また、用途はいくつかありますが、特異メソッドの取り込み方についてまとめていきます。

# moduleに特異メソッドを定義

モジュールには特異メソッドを直接定義することができます。`self`をメソッド名の前につけて定義します

“`ruby
module A
def self.foo
puts “hello”
end
end

A.foo # => hello
“`
このように、moduleで定義したものは特異メソッドとなります。
# classへ特異メソッドを追加する
特定のclassへmoduleから特異クラスを追加する場合、`class拡張する(classのスコープに入る)`必要があります。

– 特異メソッドは特異クラスへ定義する必要がある
– 特異クラスはクラスの裏に隠れている

2つめは抽象的な表現ですが、クラスには特異クラスがセットで存在して、特異メソッドを定義するには`cla

元記事を表示

Google APIからGoogle Workspaceのユーザーデータにアクセスする最適な認証方法

## はじめに

本記事は[モチベーションクラウドシリーズ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/mcs)の21日目になります。

リンクアンドモチベーションでソフトウェアエンジニアをしているnakagam3です。
最近業務の中でGoogle APIを利用する機会があったのですが、知識不足が故にかGoogle APIの認証周りを調べるのになかなか骨が折れました。今回は備忘も兼ねて調べたことをまとめてみます。

## Google APIの認証方式が3種類ある

Google APIには現在3種類の認証方式が存在するそうです。

### 1. APIキー方式

事前に発行しておいたAPIキーという文字列を、APIリクエストに含めて送信することで認証する方式です。
手軽な方式ではありますが、今回利用したかったAPIは対応していませんでした。
これはAPIキー方式が他2つに比べてセキュアではなく、Google Maps Platform APIなど一般公開されているデータにアクセスする一部のAPIにしか適して

元記事を表示

YJITで使ったRustの省メモリ化テクニック

これは [Rust Advent Calendar 2022](https://qiita.com/advent-calendar/2022/rust) のカレンダー2の22日目の記事です。

# YJITとは
私は今年の7月からShopifyという会社でRubyのJITコンパイラである[YJIT](https://yjit.org/)を開発している。このJITは今年CからRustに書き直されたため、現職では業務としてフルタイムでRustを書いている。

## 実用段階になったYJIT

おそらく世界最大規模でRubyを使っている弊社では、お客様のお店のサイトをレンダリングするアプリには社内最大のトラフィックが来ていて、実は最近そのアプリほぼ全台で最新のYJITが有効化されたことが昨日[公開情報になった](https://twitter.com/tobi/status/1605656985185226753)。あまりにも大量のトラフィックが来るので、YJITによって行なわれているRubyコード実行量はYJITが使われてないものよりも世界全体で見て多くなったのではないかとCEOが言ってい

元記事を表示

NESエミュレータを作る-キャラクターROM見てみる編

[PONOS Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ponos) 22日目です。
昨日は[@MilayYadokari](https://qiita.com/MilayYadokari)さんの[Unityでお手軽にスクロール実装!Simple Scroll-Snapの紹介!](https://qiita.com/MilayYadokari/items/d19441e94122dd504556)でした。

[NESエミュレータを作る-CPUちょっと理解編](https://qiita.com/ackyla/items/c48b05ee4e67596f6130)の続きです。
今回はキャラクターROMの中身を見ていきます。

※市販されているゲームを使う場合は私的利用の範囲でやりましょう。
# この記事の目標
キャラクターROMに入っているスプライトを見て楽しもう!
![Screen Shot 2022-12-21 at 15.28.26.png](https://qiita-image-store.s3.a

元記事を表示

ruby 練習問題40 (アウトプット用)

以下の要件を満たすxyz_thereメソッドを実装する問題。
・任意の文字列から連続する文字列”xyz”を探し、その直前にピリオド(.)がない場合はTrueを出力する
・任意の文字列から連続する文字列”xyz”を探し、その直前にピリオド(.)がある場合はFalseを出力する
・上記2つの条件に当てはまらない場合はFalseを出力する
“`
def xyz_there(str)
#処理を記述
end
“`
出力例
xyz_there(‘abcxyz’) → True
xyz_there(‘abc.xyz’) → False
xyz_there(‘xyz.abc’) → True
xyz_there(‘azbycx’) → False
xyz_there(‘a.zbycx’) → False

以下、模範解答
“`
def xyz_there(str)
if str.include?(“.xyz”)
puts “False”
elsif str.include?(“xyz”)
puts “True”
else
puts “False”
en

元記事を表示

【Laravel9】入力したカラムを使って別カラムに値を入れる

## ユーザーが入力したカラムを使って、同テーブルの別カラムに値を入れたい
Railsを書いていた頃は、モデルに`before_save`メソッドを書いて
そこに計算式などを書いていたのだが、Laravelの場合どのように書くとやりたいことができるのか??

例えば、ユーザーが`height`と`weight`を入力したとして、
その値をシステムが計算し、`basemetabolism`というカラムに値を自動で入れてくれる場合、
Railsだと下記のようにモデルに記載することで実装できる。
(そもそもこれがベストプラクティスかはわからない)
“`ruby
before_save do
self.basemetabolism = 13.397*(weight)+4.799*(height)-5.677*(user.age)+88.362
end
“`

同様のやり方でLaravelでもできないかなと思ったのですが、
いまいちしっくりこなかったので、一次避難としてコントローラに直接計算式を書いてしまうことにしました。

### 実際のコード(Laravel)
“`php
pu

元記事を表示

railsチュートリアルの復習について

こんにちは。
今日はrailsチュートリアルの効率的な復習方法でいいアイデアを思いついたので
メモとして残そうと思います。
二つあります。

1.各章のファイルをgithubからダウンロードしておく
 cloud9を使っている初学者は各章のファイルをダウンロードしておくと解説している部分のコードを簡単に調べられて便利です。

2.常に手を動かす
 ノートに鉛筆で書いたり、分からなくてもコードを打ってたりすると、無理やり頭を動かせて極小でもインプットされるので大事かなと。

progateを初めて3週間少し経ちました。
まだまだ分からないことだらけですが初学者を卒業できるように頑張ります。ポートフォリオを来年の2月までには完成させたい!

元記事を表示

Ruby(Sinatra)+Postgres の開発をローカルでやろう! Vol.2 ~無限 Docker Compose 編~

「[Life is Tech ! Kanto Advent Calendar 2022](https://qiita.com/advent-calendar/2022/life-is-tech-kanto)」22 日目の記事になります。

# はじめに

こんにちは、Life is Tech! で関東 Web サービスコースメンターをやっているいっそです!

今回は、「Ruby(Sinatra)+Postgres の開発をローカルでやろう! Vol.2 ~無限 Docker Compose 編~」ということで、いつもは Cloud9 で運用されている Web サービスコースの開発環境を Docker Compose で建ててみたいと思います!

この記事は昨日と 2 日間に分けて投稿されており、1 日目はローカルに必要なソフトウェアを全部インストールして開発環境を構築する方法をご紹介しました!
興味あればぜひ読んでみてください。

**P.S. 1 日目の記事は [こちら](https://qiita.com/isso_719/items/e83b8fe8d6c6efa229e7)!*

元記事を表示

今日からあなたも競プロ出題者!ブラウザ上で動作するジャッジシステム OnBrowserJudge

# 要約

– ブラウザ上で動作するジャッジシステムを作りました。
– そのため静的ファイルを置ける場所さえあれば、他にサーバーやアカウント等を用意する必要はありません。
– 言語は現在 Ruby, Python, JavaScript に対応。
– [Ruby の例](https://nodai2hitc.github.io/onbrowserjudge/examples/collatz_ruby_jp.html)、[Python の例](https://nodai2hitc.github.io/onbrowserjudge/examples/collatz_python_jp.html)、[JavaScript の例](https://nodai2hitc.github.io/onbrowserjudge/examples/collatz_javascript_jp.html)
– 自由度が高く、さまざまな形式の問題が作成可能です。
– 例えば AtCoder のように標準入力・出力を用いる問題だけでなく、LeetCode のように関数を作成する問題や、事前に代入された

元記事を表示

Ruby 3.2 のIRBの新機能

これは[Rubyアドベントカレンダー2022](https://qiita.com/advent-calendar/2022/ruby)の22日目の記事です。

# binding.irb のすすめ

8年前に [今更聞けないpryの使い方と便利プラグイン集](https://qiita.com/k0kubun/items/b118e9ccaef8707c4d9f) という記事を書き、そこから長い間 `binding.pry` を愛用していた。`binding.irb` も `binding.pry` も使ったことがないよ、という人はご一読をお勧めしたい。

当時PryにあったIRBに対する優位性のうち、時間が経っても常に使い続けた機能といえば `binding.pry`の存在、`$` (`show-source`)、`@` (`whereami`)、`ls` とその `-G` (grep) オプション、デバッグ機能 (要pry-byebugプラグイン) という感じで、他はまあたまに使うかもねくらいの感じになったのだが、なんとこれらはRuby 3.2ではIRBで全て使えるようになった。

元記事を表示

チームで複数のAWSアカウントを運用するときのそこそこ良い感じのID管理方法

これは [NTTテクノクロスアドベンドカレンダー2022](https://qiita.com/advent-calendar/2022/ntt-tx) の22日の記事です

# 自己紹介
こんにちは、NTTテクノクロスの諸星(@Echos)です。
業務としてはDX推進に関連する業務に従事しております。
特にデータ分析・ログ活用等、お困りなことがありましたら是非ご相談ください。

# 背景説明
上記DX業務を遂行するなか、従属的な業務といたしまして基盤環境として利用しているAWSの管理なども行っております。

ここで突然ですが質問です。
**『皆さんAWSアカウントをいくつ管理していますか?』**
1環境?10環境?それとも100環境?風の噂では10,000環境以上という人もいるみたいですね。怖い・・・

さすがに10,000はいかないまでも、弊社チーム内も様々なお客様にサービス展開をさせていただいてる関係上それなりの環境数を預からせていただいています。

ここで多くのAWS管理者が頭を悩ますのがAWSのID管理問題かと思います。
弊社チーム内もご多分に漏れずこの問題を抱えており、以下

元記事を表示

OTHERカテゴリの最新記事