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

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

Ruby+MechanizeでjsonデータをPOSTする方法

## 概要
Ruby+MechanizeでPOSTリクエストをしようと思ったのですが、調べてみるとフォームを選択して…ってやり方がたくさん出てきたので、そうではなく純粋なpostリクエストをする方法を紹介する

## だめだった例
### パターン1
自分がやってみて行けそうだったけどだめだった書き方
“`rb
require ‘mechanize’

agent = Mechanize.new
payload = {
text: ‘こんにちわ’
}
page = agent.post(‘https://xxx.yyyy.zzz’, payload)
“`
一見POSTできそうなのですが、
“`
/var/task/vendor/bundle/ruby/2.7.0/gems/mechanize-2.8.5/lib/mechanize/http/agent.rb:333:in `fetch’: 400 => Net::HTTPBadRequest for https://xxx.yyyy.zzz — unhandled response (Mechanize::Respo

元記事を表示

【悪戦苦闘】自社開発企業に入社してからの一年を振り返り、エンジニアに必要な要素を考える

# はじめに
どうもこんにちはもきお([@mokio_50](https://twitter.com/mokio_50))です。早いもので未経験からエンジニア転職し1年が経ちました。

なので今回は自社開発企業に入社してからの1年間を振り返り、エンジニアに必要な要素って何なのかを考えていきたいと思います。

自分自身の振り返りと自社開発企業での働く風景がどんなもんなのか少しでも感じてもらえたら幸いです。結構なボリュームになっているので何回かに分けて読んでいただいた方がいいかもしれません。

# 簡単な企業概要
イメージを持ってもらうために弊社のフワッとした企業概要を記載しておきます。
* 従業員200名前後
* 自社サービス4つ稼働中、来月より新サービス開発予定(Rails, React, TypeScript)
* 既存サービス:バックエンドRails、フロントHTML、CSS、JS、一部React
* データ分析でPython使用
* かなりDBのレコード数が多く検索が重くなるため、ところどこでElasticsearch使用

# 1年間に完了したタスク数
まず1年間にこなしたタス

元記事を表示

「たのしいRuby」モジュールとMix-in

Rubyの本、買ってきた。「たのしいRuby」勉強しながらtwitterに投稿した文を加筆訂正してQiitaに投稿する。今回はモジュール。
Twitter、Green_helmet@bethlehem4099
## 参考文献
この記事は以下の情報を参考にして執筆しました。
-[たのしいRuby、高橋征義、後藤裕蔵著、 まつもとゆきひろ監修、SBクリエイティブ株式会社、第6版2019年](https://www.amazon.co.jp/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84Ruby-%E7%AC%AC6%E7%89%88-%E9%AB%98%E6%A9%8B-%E5%BE%81%E7%BE%A9-ebook/dp/B07PNN3TYF/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=1671278506&sr=8-1)
-[『たのしいRuby 第6版』サポートページ、ソースコード](https://tanoshiiruby.github.io/6/index.html)

# つぎ、Module
Rubyの売り、モジュ

元記事を表示

RedAmberでやろうとしていること

Rubyアドベントカレンダー2022の18日目の記事です。

タイトルにあるRedAmberとは何かについては、それぞれ違う例を使いながらqiitaとnoteに記事を書いたので良かったら見てみてください。

https://qiita.com/heronshoes/items/3e60ee24a436530ddaac

https://note.com/heronshoes/n/nafb267e9a99b

とってもざっくりと言うと、Pythonにおけるpandas、Rにおけるdata.frame, dplyr/tidyrがやるようなことをRubyでできるようにするライブラリです。

[2022年度Rubyアソシエーション開発助成](https://www.ruby.or.jp/ja/news/20221027)に採択されたプロジェクトとして開発を進めています。

今日は、RedAmberで私がやろうとしていることをお話しします。

## 1. Rubyでデータサイエンスしたい

一番の目的はこれです。Rubyはデータ処理の分野が弱いです。それでも書きやすいRubyでデータサイエンス

元記事を表示

SessionとCookie

## はじめに
Railsでは“`devise“`という、それはそれは便利な認証機能用の“`gem“`がありまして、それに頼り切ってしまっていたため“`cookie“`がどうとか“`session“`がどうとかという根本的な理解ができていませんでした。
それが最近バレてしまったので、この機会に“`session“`と“`cookie“`についてまとめたいと思います。

## Cookie
“`cookie“`は、ステートレスな“`HTTPプロトコル“`をステートフルにすることができる代物です。

元来、HTTPリクエストはステートレスであるため、前後のリクエストとの関係を持つことはなく独立したものです。
なので、1つ前のリクエストの内容を引き継ぐみたいなことができません。

これを解決するのが“`cookie“`です。
サーバーはリクエストがあると、以後同じ相手からのリクエストを特定するために“`set-cookie“`ヘッダーを付与してレスポンスを返します。
その後のリクエストでは、その“`set-cookie“`ヘッダーに指定された値を`

元記事を表示

Stimulus リファレンス: コントローラー

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

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

コントローラーはStimulusアプリケーションの基本的な組織単位です。

“`javascript
import { Controller } from “@hotwired/stimulus”

export default class extends Controller {
// …
}
“`

コントローラーはアプリケーションで定義するJavaScriptクラスのインスタンスです。各コントローラークラスは`@hotwired/stimulus`モジュールによってエクスポートされた`Contoller`基底クラスを継承します。

# プロパティ

すべてのコントローラーはStimulusアプリケーションインスタンスに属し、HTML要素に関連付けられています。 コントローラークラス内ではコントローラーの以下にアクセスでき

元記事を表示

【個人開発】twitterの対抗サービスを作ってみた!

# はじめに
最近イーロン・マスクがtwitterを買収してから、いろいろ騒がれていますよね。そんなtwitterから移行しようと考えてる人を拾おうと思い、[Ammot](https://ammot.net/)というSNSを開発しました(買収前から作り始めてたのは秘密)。

https://ammot.net/

↑今回作ったSNS

Ammotは文字数制限が6000字まで、画像・動画・PDF・音声。テキストも同時に10個まで投稿可能です。
エロやグロ系も投稿可能です。

![スクリーンショット 2022-12-18 020348.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/681cfe1f-c3e0-4601-cfe0-03b5f8143467.png)

# 作った経緯
実はAmmotというSNSを作るのは初めてではありません。

https://qiita.com/UTOG/items/d5e6194aaa31b54e97c9

一年半前に全く同じ名前、コンセプトでサービスを公開

元記事を表示

【ViewComponentシリーズ①】ViewComponentを導入すべき理由5つ【Rails】

## 1. ViewComponentとは
再利用可能で、テストがしやすく、カプセル化されたビューコンポーネントを作るための**Railsの[gem](https://github.com/ViewComponent/view_component)**。
Reactから影響を受けた、Presenter(ViewのためのUIのビジネスロジックを書く)パターンの進化版。

ざっくり言うと、フロントでは当たり前のように使われているコンポーネントの概念を、ViewComponentを使ってRailsのビューにも取り入れて、同じようなビューのコードをコンポーネント化させちゃおうというもの。

ここで「それなら既にRailsには[パーシャル](https://railsguides.jp/action_view_overview.html#%E3%83%91%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%AB%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88)があるんだからそれ使えばいいんじゃないの?」という話になるが、どうやらView

元記事を表示

【Rails6】5段階評価の星レビュー機能を実装する手順(raty.js)

# 概要
* ユーザーが任意のitemに対して5段階評価機能の星評価(非同期通信)ができるように実装したので、その手順について記す。
* Userは、itemの詳細ページ(/show)にいくと、5段階評価の☆評価(0.5単位)とコメントを行い、レビューを送信する(/form)。
* トップ画面(/index)にitemが一覧化されており、itemごとに☆評価の内の総合評価の平均点(関数で切り上げ)が表示される。
* itemの詳細ページ(/show)にも、総合評価の平均点(関数で切り上げ)が表示される。

# 前提
* Ruby on Rails6で実装。
* Rails 6.0よりJavaScriptの扱いが変わっているため、Rails5などを使っている方は、別記事の参照を推奨。
* raty.jsを利用して実装する。
* 参考にした記事:
* [Railsで「Raty」を使った星機能をつける](https://qiita.com/busitora2/items/5b59d1ea9e90c1b016b4)
* [[Rails]星評価の実

元記事を表示

【Rails】Bootstrapのnavbarで綺麗にログアウトリンクを表示する方法

# 概要

* deviseを導入
* Bootstrapで”Navbar fixed”を導入し、ヘッダーで「マイページ」や「ログアウト」リンクを設置しようというところ

# 困ったこと
* 以下HTMLだとリンクがヘッダー内で微妙に下にずれ、なぜか綺麗に表示されない。また、CSSもなぜか反映されない。
“`erb:_header.html.erb

“`

# 解決方法
* aタグではなく、Railsで一般的に使われるlink_toで以下のようにclass指定したら綺麗に反映されました。
“`erb:_header.html.erb

元記事を表示

AWS SAM CLIを使わずにLambda+Ruby2.7でNokogiriなどのGemを使う方法

## 概要
Lambda+Rubyでgem(Nokogiri)を使おうと思ったところ
“`
cannot load such file — nokogiri/nokogiri
“`
というエラーになってしまい、使えなかったので使えるようにした話

## 前段
調べると、割と`AWS SAM CLI`を使った方法が出てきて手順自体は簡単なのですが何してるかわからん…というふうになってしまったので、今回はそちらを使わない方法にしたいと思います。

## 準備するもの
– Lambdaのソースファイル
– Docker環境

## 手順
### Lambdaで動かすソースコードの準備
自分の使っているコードが有る場合は

https://qiita.com/itaya/items/dbe628b7b8d896eb6c8f#%E6%97%A2%E5%AD%98%E3%81%AE%E9%96%A2%E6%95%B0%E3%81%AE%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88

この記事を参考にエクスポートしてもらうと良い

元記事を表示

ActiveRecordのjoinsメソッドはシンボルの引数と文字列の引数で挙動が異なる

先日微妙にハマってしまったRailsの小ネタです。

ActiveRecordは次のように`joins`メソッドを使って別のモデル(テーブル)をJOINすることができます。

“`ruby
Task.joins(:project)
“`

また、`includes`メソッドなどはシンボルを渡しても文字列を渡しても同じ挙動になります。

“`ruby
# includesメソッドはシンボルでも文字列でも挙動は同じ
Task.includes(:project)
Task.includes(‘project’)
“`

これと同じように`joins`も同じようにシンボルでも文字列でも渡せるよね?と思ったんですが、文字列だとエラーが出ました。

“`ruby
Task.joins(‘project’)
# Task Load (0.2ms) SELECT “tasks”.* FROM “tasks” project
# …/sqlite3/database.rb:152:in `initialize’: SQLite3::SQLException: no such t

元記事を表示

Javascriptの基礎

# はじめに
javascriptについての基礎を忘備録として残す

# 変数定義の方法
javascriptの変数定義は、原則3種類存在する。
const
値が変わらない変数の定義を行う

[例]
const sample = “おはよう”

sample = “おはよう”
// 再代入NG →エラーが起こる

const sample = “おはよう”
// 再定義NG →エラーが起こる

console.log(sample)
// => おはよう と出力される

let
値が変わる変数の定義を行う

[例]
let sample = “おはよう”

sample = “おはよう”
// 再代入OK

let sample = “おはよう

元記事を表示

GraphQLを活用したスキーマ駆動開発を体験した話

# 概要
会社でGraphQLを導入するにあたり、スキーマ駆動開発を取りいれた開発を行ってみました。
実際にどのような開発を行ったのか、またやってみてどうだったかをご紹介できればと思います。

一度下記LTにて紹介した内容について少し加筆や修正を行った記事になります。

# GraphQLにおけるスキーマ駆動開発

GraphQLを導入する利点の1つとして「スキーマ駆動」が実現できることがあります。

スキーマ駆動開発についてはこちらのqsonaさんの資料が詳しいです。

GraphQLを構築する方法として、コードファーストとスキーマファーストの2つのアプローチがあります。

コードファーストは、APIのスキーマをGraphQLのコードで定義してスキーマを生成する方法です

元記事を表示

アプリ作成・GitHubへPushまでの流れ

# 1.クラウド9でアプリを作成
下記コードでRailsアプリケーションのディレクトリが作成される
“`
rails new アプリ名
“`

# 2.複数のホストから閲覧可能にする
rails sでサーバー起動してもエラーが発生するため、下記コードで閲覧可能にする
“`ruby:/config/enviroments/development.rb
Rails.application.configure do
:
config.hosts.clear #追記
end
“`

# 3.GitHubにPushする
1.ローカルリポジトリを作成する
“`cloud9:cloud9
git init
“`
2.GitHubでリモートリポジトリを作成する
3.ディレクトリ/ファイルの変更履歴を保存する
“`
git add .
git commit -m “[Start] アプリ名(例)”
“`
4.ローカルリポジトリとリモートリポジトリを紐づける
“`
git remote add origin リモートリポジトリURL
“`
5.masterブランチをmain

元記事を表示

預金システムのアルゴリズム問題

# はじめに
プログラミング数ヶ月のペーパープログラマーです。

預金システムのコーティングを行いました。
自分の解答と模範解答が異なるのですが、実行結果は同じです。
この場合自分の解答でも正答になるのか分からずご教授頂きたいです!!

# 問題
銀行口座に10万円の預金残高があり、お金を引き出すプログラミングを作成する。
以下の条件を達成するプログラムを作成しなさい。

・お金を引き出すと手数料110円がかかり、
「○○円引き落としました。残高○○円です」と表示する。
・もし預金残高より多く引き落とされたら「残高不足です」と表示する。
~~~ruby
def withdraw(balance, amount)
fee = 110  # 手数料
# 引き落とし額と残高を表示する、もしくは残高より多く引き落としたら残高不足と表示
end

balance = 100000  # 残高
puts “いくら引き落としますか?(手数料110円かかります)”
money = gets.to_i
withdraw(balance, money)
~~~

# 自身の解答
~~~ruby
de

元記事を表示

Ruby 預金システムのアルゴリズム問題

以下の条件を達成するプログラムを実装しなさい

銀行口座に10万円の預金残高があり、お金を引き出すプログラムを作成します。
・お金を引き出すwithdrawメソッドを作成する
・お金を引き出すと手数料110円かかり、「◯◯円引き落としました。残高は◯◯円です」と表示する(残高は手数料を引いた額を表示します)
・もし預金残高より多く引き落としたら「残高不足です」と表示する
・以下にヒントを用意するので参考にしてください

“`ruby:雛形
def withdraw(balance, amount)
fee = 110  # 手数料
# 引き落とし額と残高を表示する、もしくは残高より多く引き落としたら残高不足と表示
end

balance = 100000  # 残高
puts “いくら引き落としますか?(手数料110円かかります)”
money = gets.to_i
withdraw(balance, money)
“`

“`ruby:自分の解答
def withdraw(balance, amount)
fee = 110 # 手数料
if balance

元記事を表示

「たのしいRuby」クラス

Rubyの本、買ってきた。「たのしいRuby」勉強しながらtwitterに投稿した文を加筆訂正してQiitaに投稿する。今回は、いよいよラスボス、クラス。
Twitter、Green_helmet@bethlehem4099
## 参考文献
この記事は以下の情報を参考にして執筆しました。
-[たのしいRuby、高橋征義、後藤裕蔵著、 まつもとゆきひろ監修、SBクリエイティブ株式会社、第6版2019年](https://www.amazon.co.jp/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84Ruby-%E7%AC%AC6%E7%89%88-%E9%AB%98%E6%A9%8B-%E5%BE%81%E7%BE%A9-ebook/dp/B07PNN3TYF/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=1671278506&sr=8-1)
-[『たのしいRuby 第6版』サポートページ、ソースコード](https://tanoshiiruby.github.io/6/index.html)
## クラス
用語の定義:
まずク

元記事を表示

RubyVM::InstructionSequence.load_from_binaryから実行までの流れ

# はじめに

iseqがバイナリーデータからどのように
実行サれるかを見ていきます。

# 入力データ

puts “hello world”をInstructionSequenceでバイナリーデータにします。

~~~ ruby
iseq = RubyVM::InstructionSequence.compile(<<~SRC) puts "Hello world" SRC bin = iseq.to_binary.bytes.each_slice(32).map {|a| a.map{|b| b}.join(',') }.join(",") p bin ~~~ この結果がこちら ~~~ "89,65,82,66,3,0,0,0,2,0,0,0,212,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,148,0,0,0,196,0,0,0,120, 56,54,95,54,52,45,108,105,110,117,120,0,37,43,5,103,121,3,1,3,3,3,1,3,1,1,3,0,255,255, 255,255,255,255,255

元記事を表示

【備忘録】ActionCable ルーム別リアルタイムチャット [Rails6]

## はじめに
私は個人サービスを開発した時に、ActionCableでルーム別のリアルタイムチャットを実装しましたがかなり手こずりました。なのでどう考えて実装したかを記しておこうと思います。
以下のようなリアルタイムチャットを作りました。野球の試合を実況できるサービスで、試合毎にルームが分かれているのが今回のポイントです。
![68747470733a2f2f692e6779617a6f2e636f6d2f33346338633039613736653332633339613434323331383038626337646365612e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095922/b6a441e0-6a5e-3615-f5e5-3c61d395de4f.gif)

実際にどんなものか触ってみたい方はこちらをクリックしてください。(https://yakyubaka-jikkyo.com/)

## 前提
– javascriptが書ける(ルーム別リアルタイムチャットは

元記事を表示

OTHERカテゴリの最新記事