- 1. AtCoder Beginner Contest 342の参戦記録
- 2. f.text_field について
- 3. 【Ruby】問題集解答 Part2(paizaラーニング)
- 4. [Rails]erb2slimコマンドでNoMethodErrorが発生した場合の対処法
- 5. Rails ActionDispatch::Cookies::CookieOverflowというエラーが出る原因と対策
- 6. [Ruby]ポケモンで理解する特異メソッド・特異クラスの旅
- 7. net/http で GraphQL API にリクエストする
- 8. [Docker] Rails7 + postgreSQL + bootstrapの環境構築
- 9. asdfでWSL+UbuntuにRubyをインストール
- 10. 【個人開発】漫画好きが漫画とアロマをお勧めする診断アプリを作りました📚
- 11. TEST
- 12. 【Ruby】問題集解答 Part1(paizaラーニング)
- 13. optparseについて
- 14. stimulus で複数の同一 action の指定
- 15. Rubyの基本(クラス・インスタンス)
- 16. ポートフォリオ作成
- 17. 【個人開発 / PictoMemory】旅の思い出の投稿・地図の色塗り・旅先探しができるアプリを作りました
- 18. RubyとRailsのバージョンアップで苦労したこと(Gem編)
- 19. 【Ruby】名鉄津島線の準急・急行・特急停車駅判定
- 20. プログラミング教材で作ったチャットアプリに機能追加してみた
AtCoder Beginner Contest 342の参戦記録
RubyでAtCoderに参戦した記録です。
AB2完で、C問題はコンテスト終了後に解説を見てからコードを書きました。## [ABC342 A Yay!](https://atcoder.jp/contests/abc342/tasks/abc342_a)
ある1文字を除いてすべて同じ文字で構成される文字列Sの中で、他の文字と異なる1文字は前から何文字目かを出力する問題です。
“`Ruby
s = gets.chomp.chars # 受け取った文字列sをcharsメソッドで1文字ずつの配列にする
h = s.tally # 各アルファベットの出現頻度をHashにまとめる
ans = h.key(1) # Hashの値が1のもののキーとなる文字をansに代入
puts s.index(ans) + 1 # ansの文字列(配列)sの中での登場箇所インデックス + 1を出力
“`## [ABC342 B Which is ahead?](https://atcoder.jp/contests/abc342/tasks/abc342_b)
並んでいる人の番号が与えら
f.text_field について
クレジットなどで購入機能を付ける際、クレジット番号など記載するマスを作りたい場合に
“`ruby:
<%= f.text_field :number, class:"input-default", id:"number-form"%>“`
とする。
尚f.text_fieldの後ろは任意の名前をつけて、class,idの順で記載
【Ruby】問題集解答 Part2(paizaラーニング)
# 3つのデータの入力 (paizaランク D 相当)
https://paiza.jp/works/mondai/stdin/stdin_3### 自分の解答
(思いつかなかった)### ChatGPTの解答
以下は、標準入力から3つの文字列を受け取り、それらを順に3行で出力するRubyのコードです。“`ruby:ruby
# 3つの文字列を標準入力から受け取る
input = gets.chomp.split# それぞれの文字列を順に3行で出力する
puts input[0]
puts input[1]
puts input[2]
“`このコードは、標準入力から1行を受け取り、それを半角スペースで分割して配列に格納します。そして、その配列の要素を順に3行で出力します。
[Rails]erb2slimコマンドでNoMethodErrorが発生した場合の対処法
## 経緯
html2slimを使用してerbをslimに変換しようとしたところNoMethodErrorが発生した。
“`bash
$ bundle exec erb2slim app/views/layouts/ –deleteNoMethodError: undefined method exists? for File:Class
“`## 何故発生したか?
Ruby3.2で削除されたFile.exists?メソッドをhtml2slimが使用していた。## 対処法
このエラーが発生した当時は、ソースコードの `File.exists?` を `File.exist?` に書き換えて対応したのですが、別名でRuby3.2に対応したhtml2slimが存在することに気付きました。https://rubygems.org/gems/html2slim-ruby3
という訳で、こちらをGemfileに追加して`bundle install`します。
以前のhtml2slimはGemfileから削除して下さい。“`ruby:Gemfile
gem ‘html
Rails ActionDispatch::Cookies::CookieOverflowというエラーが出る原因と対策
※この記事は僕がぶち当たった問題をとりあえずChatGPTくんに丸投げしてライティングしてもらったものです。
# 概要
この記事では、Railsアプリケーション内で発生する可能性のあるActionDispatch::Cookies::CookieOverflowエラーについて説明します。
このエラーは、クッキーがサイズの上限を超えた場合に発生します。エラーの原因や、解決するためのさまざまな方法について解説します。# エラーの原因
エラーの原因は、クッキーのサイズが大きすぎることです。
特に、セッション情報をクッキーに保存している場合、その情報が大量になるとエラーが発生しやすくなります。# 対策
エラーを解決するためには、以下のような方法を検討することができます。1. クッキーのサイズを小さくする: 必要な情報のみを保存することで、クッキーサイズを削減します。
2. セッション情報のサーバーサイドへの保存: セッション情報をサーバーサイドのメモリやデータベースに保存することで、クッキーのサイズを減らすことができます。
3. クッキーの分割: クッキーが大きすぎる場合は、複数
[Ruby]ポケモンで理解する特異メソッド・特異クラスの旅
Ruby独特の概念に特異メソッド・特異クラスがあります。
この特異メソッド・特異クラスはRuby世界でのオブジェクトが独自の振る舞いをするために欠かすことができない概念です。そこで今回は、ポケモンを例にしながら特異メソッド・特異クラスについて説明していきます!
## この記事の目的
特異メソッド・特異クラスについて理解する## サンプルコード
今回は以下のサンプルコードで説明していきます。
“`ruby:index.rb
class Pokemon
attr_reader :name,
:attack_pointdef initialize(name, attack_point)
@name = name
@attack_point = attack_point
enddef attack
puts “#{@name}の通常攻撃!#{attack_point}のダメージを与えた!”
end
endclass Pikachu < Pokemon def kaminari_attack
net/http で GraphQL API にリクエストする
GraphQL かどうかはあまり大きな問題ではないですが…
## コード
– `Net::HTTP::Post.new` の第2引数 `initheader` は、必要に応じて設定してください。今回は `Authorization` と `Content-Type` を設定しています
– `hostname` と `api_token` を取得しているところは、Rails の機能で実現しています。必要に応じて読み替えてください
– Rails でない場合などで `require ‘net/http’` されていない場合は、別途記述してください“`ruby
query = <<~QUERY { books { name } } QUERY { query: }.to_json http = Net::HTTP.new(Rails.configuration.settings.fetch(:hostname), 443) http.use_ssl = true req = Net::HTTP::Post.new( '/graphql'
[Docker] Rails7 + postgreSQL + bootstrapの環境構築
## はじめに
この記事では Docker を使って rails7 + PostgreSQL + bootstrap の環境構築を行います。
## 環境
– macOS Ventura 13.3.1
– Docker 24.0.7
– Docker Compose v2.23.3-desktop.2
– Ruby 3.2.2
– Rails 7.0.8.1
– PostgreSQL 12.18
– bootstrap5 5.3.2## ファイルの準備
ファイル構成です。
“`
app
|– Dockerfile
|– docker-compose.yml
|– Gemfile
|– Gemfile.lock
“`### Dockerfile
“`Dockerfile:Dockerfile
FROM ruby:3.2.2-alpine
RUN apk update && \
apk add –no-cache gcompat && \
apk add –no-cache linux-headers libxml2-d
asdfでWSL+UbuntuにRubyをインストール
# はじめに
プログラミング言語管理ツールのasdfを使って、WSL UbuntuにGoをインストールします。
# 前提環境
https://qiita.com/perilla/items/69bc6f89001dbceb0cde
https://qiita.com/perilla/items/ef73cf57ade24bc94f19
#asdf更新
“`sh:Ubuntu
asdf update
“`# Rubyの存在確認
“`sh:Ubuntu
asdf plugin list all | grep -e ruby
# ruby https://github.com/asdf-vm/asdf-ruby.git
“`https://github.com/asdf-vm/asdf-ruby.git
# asdfにRubyを追加
“`sh:Ubuntu
asdf plugin add ruby
“`# 依存パッケージをインストール
[GithubのREADME](https://github.c
【個人開発】漫画好きが漫画とアロマをお勧めする診断アプリを作りました📚
## はじめに
はじめまして、1歳子持ちのshikimum(@abbyE424214)と申します。
完全異業種からエンジニアに転職するためオンラインスクールに入り学習をしていました。
私は漫画が大好きで、漫画に勇気をもらったり慰めてもらったり、セリフを真似したりと、影響受けまくりの人生を送ってきました💪もっとたくさんの人に漫画を読んでもらいたい、人生を変える1冊に出会って欲しいという思いから、その人にあった漫画をおすすめするアプリを作成しました📚
**「漫画の処方箋」**
ユーザーの疲れタイプに合わせて、あなたにあった漫画とアロマをお勧めします。https://www.comic-health.com/
[![Image from Gyazo](https://i.gyazo.com/03568b9efa89d71279e9c0877b08a8ca.jpg)](https://gyazo.com/03568b9efa89d71279e9c0877b08a8ca)
https://github.com/shikimum/portfolio
## 使い方
### **1.診
TEST
# hello world
【Ruby】問題集解答 Part1(paizaラーニング)
# N行のデータの入力 (paizaランク D 相当)
https://paiza.jp/works/mondai/stdin/stdin_n_line
### 自分の解答
まず空の配列を用意し、その中に受け取った数値の個数分だけ値を格納し、最後に`puts`する。
勉強のために、`for`と`while`の2つの方法で書いた。
“`ruby:practice_01.rb
times = gets.to_iarray = []
# forの場合
# for i in 1..times
# array << gets # end # whileの場合 num = 1 while num <= times array << gets num += 1 end puts array ``` ### ChatGPTの解答 以下は、Rubyで提供された条件に基づいて問題を解決するためのサンプルコードです。このコードは、すべての入力を受け取った後にまとめて出力します。 ```ruby:ruby # Nの値を取得 n = gets.to_i # N行分の文字列を受け取
optparseについて
# はじめに
なぜoptparseを学ぶことになったかというと
Rubyでカレンダーを作成する際に、macの`cal`コマンドで表示されるようなカレンダーを表示したかったのでoptparseを使用しました。
# どういうものか
コマンドラインのオプションを取り扱うためのライブラリ
– コマンドライン引数は、ターミナルから実行時に引数を渡して読み込める仕組み。
– 引数は文字列として出力されます。
### OptionParser 基本的な使い方
1. OptionParser オブジェクト opt を生成する。
1. オプションを取り扱うブロックをoptに登録する。
1. opt.parse(ARGV)でコマンドラインを実際にparseする。#### 1. OptionParser オブジェクト opt を生成する。
“`ruby:sample.rb
require ‘optparse’opt = OptionParser.new
“`
optparseライブラリをスクリプトに読み込みます。
これにより、コマンドライン引数の解析とオプションの処理が可能になります。
###
stimulus で複数の同一 action の指定
## はじめに
本記事は[Stimulus](https://stimulus.hotwired.dev/)を参考にしています。
勉強中のため、誤りやもっといいやり方があるかも知れません。
その場合は、ご指摘いただけますと幸いです。また、可能な限りわかりやすく記載するつもりですが、不明瞭な点、追記した方がいい点などがございましたら、合わせてご教授ください。
## この記事の目的
恥ずかしながら、英語が得意なわけではないので、探すのに時間がかかったので、書き残そうと思った次第です。
同一のDOMイベントに対し、複数のアクションが書きたかったのですが、`data-controller`、および `data-target` の指定方法がわからなかったので、やり方を記します。今回は、`form` に対して、`data-controller` を指定するやり方で備忘録を残します。
## パーシャルの記載
`input` 要素に対して、変更が行われた場合、`hoge-hoge` と `foo` が呼び出されます。
呼び出し順序は、左から右に呼び出されます。
“`ruby
= simp
Rubyの基本(クラス・インスタンス)
# クラスの定義
「クラス」とは、関連する変数やメソッドをまとめて、複雑なデータを扱いやすくするための仕組みである。
クラスの定義通りに作ったデータを、そのクラスの「インスタンス」と呼ぶ。
クラスは設計書、インスタンスは設計書を元に作られたものであるといえる。
“`ruby:sample_01.rb
# クラスの定義
class User
def get_info
“user name and score here”
end
end# インスタンスの生成
user1 = User.new
user2 = User.new# インスタンスメソッドの呼び出し
puts user1.get_info
puts user2.get_info
# user name and score here
# user name and score here
“`# `initialize`メソッド(イニシャライザ)
`initialize`メソッド(イニシャライザ)とは、インスタンス生成と同時に呼び出せる特殊なメソッドである。
以下に使い方の一例を示す。
“`ruby:
ポートフォリオ作成
# 天気予報日付ごとに表示したい
– OpenWEatherMapAPIを使用して、天気の情報を取得しているのですが取得した予報データが1つの大きな配列に格納されたままとなっており、ビューで日付ごとにデータを扱うの難しいという問題が発生しておりました。
– `group_by`メソッドを使用して、同じ日付の予報データをグループ化してまとめ、配列として取り出すことで、各日の天気情報を区別して表示できるようにしました。
– これにより、ユーザーが一目で知りたい日にちの情報を確認できるようになっております。
– 加えて、取得できる天気のアイコンには2種類あり、取得した時間帯により異なるアイコンが表示されてしまっていたため、gsub(ジーサブ)メソッドを使用して、天気予報のアイコンを常に昼間のアイコンが表示されるようにしました。“`ruby
def show
@weather_data = get_weather_forecast(@post.latitude, @post.longitude)
enddef get_weather_forecast(latitu
【個人開発 / PictoMemory】旅の思い出の投稿・地図の色塗り・旅先探しができるアプリを作りました
# はじめに
エンジニア目指して学習中のさば🐟(@saba7678pg)と申します。
2023年6月からエンジニア転職するためにプログラミングスクールで学習を行っております。これまでの学習の成果として「PictoMemory」という旅の思い出投稿アプリを作成致しました。
アプリの紹介、使用技術を紹介させていただきます。:::note info
万が一誤り・ご意見・ご指摘事項等ございましたら、
コメントやX宛にDM頂けますと幸いです。
:::## アプリ概要
サービスURL:https://pictomemory.com
サービスリポジトリ:https://github.com/SabaCrevette/travel_app[![Image from Gyazo](https://i.gyazo.com/6c85e19c8160cc723eb02581d8bae6bc.png)](https://gyazo.com/6c85e19c8160cc723eb02581d8bae6bc)
旅の思い出を投稿する、CGM型のサービスです。
投稿した都道府県に紐づいて、真っ白な日
RubyとRailsのバージョンアップで苦労したこと(Gem編)
依頼いただいて久しぶりに言語とFWのバージョンアップの対応を行ったので、苦労した点などを。
PHP(4->5)などのバージョンアップぐらいしか経験がなかったので不安でしたが、なんとかなりました。
### バージョン情報
#### 元のバージョン
– Ruby
– 2.7.4
– Rails
– 6.1.4#### アップしたバージョン
– Ruby
– 3.2.2
– Rails
– 7.1.3### やる前に想定していたこと
– 最近参画したプロダクトで知らない箇所しかないので苦労するだろうなぁ
– メジャーバージョンを上げるから、コードの書き方が変わる箇所も多々あるだろうなぁ
– メソッドとかのDeprecateのWarningとかもすごいだろうなぁ
– 設定とかも大きく変わるだろうから、精査しないといけないな
– Gemとかそのままだと動かないものがあるからバージョンアップ必要だろうなぁ
– Gemもそもそも更新止まっていて、更新できないものもあるんじゃないかなぁ
– リリース後にトラブルがあった時に戻す
【Ruby】名鉄津島線の準急・急行・特急停車駅判定
名鉄津島線の急行停車駅判定プログラムを作りました。
“`ruby
# 名鉄津島線の急行停車駅(準急・特急も同じ)駅名表示tsushima_line_data = [“須ヶ口”,”甚目寺”,”七宝”,”木田”,”青塚”,”勝幡”,”藤浪”,”津島”]
express_stop_data = [“須ヶ口”,”甚目寺”,”木田”,”勝幡”,”津島”]
station_num = tsushima_line_data.length
express_stop_num = express_stop_data.lengthfor i in 0…station_num do
station_info = tsushima_line_data[i]
express_stop_flag = express_stop_data.index(station_info)
# print(express_stop_flag)
if express_stop_flag == nil then
puts “#{station_info}駅は急行停車駅ではありません”
el
プログラミング教材で作ったチャットアプリに機能追加してみた
# はじめに
[こちら](https://www.techpit.jp/courses/195)の講座でチャットアプリを作成したので、追加のお勉強としてメッセージの削除機能を追加してみました。自分の備忘録を兼ねてやったことをメモ的に書いておきます。# 環境
“`
OS:MacOS 14.1.1(Sonoma)
Ruby:2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin23]
Vue.js:@vue/cli 5.0.8
“`# 仕様
* メッセージごとに削除ボタンを表示し、クリックすると該当メッセージが削除される
* 削除対象はチャットにログインしている本人が送信したメッセージのみ
* 他人のメッセージには削除ボタンを表示させない
* メッセージ削除に成功するとメッセージ一覧が再取得され、削除したメッセージは画面から消える# ルートを設定する
* メッセージ削除のルートを追加します
“`config/routes.rb
resources :messages, only: [‘index’, ‘d