- 1. Atcoder の「上書き」問題をRubyで解く
- 2. cloud9でrailsの環境構築をする
- 3. Atcoderの問題「2 倍チェック」をrubyで解く
- 4. Railsにメールが2通来るお問合せ機能を作ってみた
- 5. Heroku でのDBをリセットしシードデーターを投入する手順
- 6. docker-composeでrails7の開発環境を作る
- 7. Serverless アーキテクチャでWeb API を構築するハンズオンをRubyで実装してみた
- 8. 【Ruby】rbenvでよく使うコマンド一覧
- 9. 配列内のハッシュの平均値の求め方
- 10. RailsプロジェクトにVue.js導入の仕方
- 11. 【個人メモ】N+1問題 preload、eager_loadのまとめ
- 12. EC2+Mysql8.0+Railsまでの構築の流れ
- 13. Rubyのwp2txtライブラリを使えるようにする
- 14. Rails PamaのDaemonaization設定
- 15. ローカルでDocker-rails環境を立ち上げる
- 16. 細かいつまずいたことをメモしておく(4月編)
- 17. Google Ads APIバージョンの確認・アップグレード
- 18. Firestoreでcollectionのfield名をcamelCaseとsnake_caseで交互に置換したい
- 19. プロジェクトへテストコードを導入する(環境構築編)
- 20. N+1問題の重要性
Atcoder の「上書き」問題をRubyで解く
“`rb
# https://atcoder.jp/contests/past202012-open/tasks/past202012_b# 標準入力の1行目に文字列の長さが与えられる
length = gets.chomp# 標準入力の二行目にテキストが与えられる
text = gets.chomp# テキストを1文字単位で配列にしてループする
text.chars.each do |alphabet|
# テキストからアルファベットを削除
text.delete! alphabet
# テキスト末尾にアルファベットを追加
text += alphabet
endputs text
“`
# 問題
“`
英小文字からなる長さ N の文字列 S が与えられます。
また、文字列 T があり、 T ははじめ空文字列です。あなたは以下の操作を i=1,2,…,N に対して、 i=1 から順に行います。
S の左から i 番目の文字を c とする。 T から c と同じ文字を全て削除した後、 T の末尾に c を追加する。
操作が終わった後の
cloud9でrailsの環境構築をする
cloud9でrailsの環境開発を行う際にすることをまとめた。まずはターミナルで
“`
$rails new sample app
“`
と打ち込む。ここのsample appは好きなファイル名でOK!
その後
“`
$cd sample app
“`
で移動したのち
“`
$rails s
“`
でサーバー起動します。無事起動できれば終了です。しかし,以下のようなエラーが出てくるかもしれません。
対処方法としてはGemfileを編集します。
Gemfileに以下を追記します。
“`ruby:Gemfile
gem ‘sqlite3’, ‘~> 1.3.6’
“`
修正前

Railsにメールが2通来るお問合せ機能を作ってみた
自分のポートフォリオにお問合せ機能が欲しくなり、実装してみました。
こちらの記事を参考
https://qiita.com/japwork/items/145645e281b81d9bf92c開発環境
ruby ‘2.7.5’
gem ‘rails’, ‘~> 6.1.4’,
OS: macOS Catalinaまず最初にmailerを作成します。
“`
rails g mailer ContactMailer
“`
そして、送信先と件名を指定します。
自分の場合は、メールの送信先と送信元の二箇所にメールを送りたいため、
2つ作っています。
“`
class ContactMailer < ApplicationMailer default from: 'noreply@example.com' default to: 'admin@example.com' layout 'mailer' def send_mail(contact) @contact = contact mail(from: contact.email, to:
Heroku でのDBをリセットしシードデーターを投入する手順
“`
この記事の環境
mac OS
Rails 6.0.3
ruby 3.0.1p64
“`gitの変更内容をherokuにpushsする
“`
git push heroku step5:master
“`新たにカラム追加やデータ内容を変更する為。データーベースリセットをする 。
“`
heroku pg:reset -a myapp
“`マイグレーション実行
“`
heroku run rake db:migrate
“`seedデータ投入
“`
heroku run rails db:seed
“`おまけ
データーベースの詳細が取得できるコマンド
heroku pg -a アプリ名
“`
=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 1/20
PG Version: 14.2
Created: 2022-04-11 15:
docker-composeでrails7の開発環境を作る
現在rails7で使える情報がないので記す。webpackerがなくなったので構築するための
ノウハウも変わっている。## 5つのファイルを準備する
“`ruby:Gemfile
source “https://rubygems.org”
gem “rails”, “~> 7.0.2”, “>= 7.0.2.4”
“`“`
$ touch Gemfile.lock
“`“`Dockerfile:Dockerfile
FROM ruby:3.1.2
RUN apt-get update -qq \
&& apt-get install -y nodejs npm \
&& rm -rf /var/lib/apt/lists/* \
&& npm install –global yarnENV APP_NAME=myapp
ENV TZ=Asia/TokyoWORKDIR /${APP_NAME}
COPY Gemfile /${APP_NAME}/Gemfile
COPY Gemfile.lock /${APP_NAME}/Gemfile
Serverless アーキテクチャでWeb API を構築するハンズオンをRubyで実装してみた
# 概要
AWSが提供している、[翻訳Web APIのハンズオン](https://pages.awscloud.com/event_JAPAN_Hands-on-for-Beginners-Serverless-2019_Contents.html)をRubyに変えて作ってみました。
※ハンズオン内ではpythonを利用されています。# 前置き
ほとんどハンズオンの流れと同じため、AWS周りの流れは省略しています。# 1. Lambda 単体で使ってみる
LambdaからTranslateを呼び出して「おはよう」を「Good morning」へ変換しました。
[Module: Aws::Translate](https://docs.aws.amazon.com/sdk-for-ruby/v2/api/Aws/Translate.html)“`
require ‘json’
require ‘aws-sdk’def lambda_handler(event:, context:)
translate = Aws::Translate::Cli
【Ruby】rbenvでよく使うコマンド一覧
## バージョン確認
### 現在使用中のRubyのバージョンを表示
“`
rbenv version
“`### インストール済みのRubyのバージョンを表示
“`
rbenv versions
“`
– ~/.rbenv/versionsディレクトリ内のRubyのバージョンを表示## インストール
### インストール可能なRubyの最新安定版のバージョンを表示
“`
rbenv install -l/–list
“`### インストール可能なRubyの全バージョンを表示
“`
rbenv install -L/–list-all
“`### Rubyのインストール
“`
rbenv install
“`
– ~/.rbenv/versions/にインストールされる### Rubyのアンインストール
“`
rbenv uninstall
“`## バージョン指定
**バージョンの優先順位**
1. 環境変数 “RBENV_VERSION“
1. ローカル “rbenv local
配列内のハッシュの平均値の求め方
# はじめに
Qiita初投稿です。
プログラミング初心者で、日々の学習ログとして投稿していきたいと思っています。
理解が不十分だったり、誤った記述などがあった際にはご教示いただけると幸いです。
# やりたいこと
書籍の情報が入った配列booksが定義されています。
“`ruby
books = [{author: “宮沢賢治”, title: “注文の多い料理店”, price: 1800}, {author: “芥川龍之介”, title: “羅生門”, price: 2000}…]
“`
書籍情報の一覧から全金額の平均値を求めたい。
平均は金額の合計を要素の数で割れば良いので、
金額の合計値をどう導き出すか、要素の数はどうすれば取得できるかがわかれば平均値を求めることができそうです。
# 使用するメソッド
要素数を取得するために使用するメソッドと、要素の合計を取得するために使用するメソッドを先に示します。
## length, size
[String#length 公式リファレンス](https://docs.ruby-lang.org/ja/latest/method
RailsプロジェクトにVue.js導入の仕方
# 概要
RailsとVue.jsで開発を行うときにVue.jsの導入で躓いたので共有します
色々記事を見ながら試したんですけどエラーで詰まってハマってしまったので1人でも多くの人に共有できればと思います。# はじめに
Railsの環境構築は終わったものとする(rails new できる状態)# 環境構築
環境構築にはhomebrewとrbenvを使用します
まだの方はこちらからインストールしてください
– rbenv: https://github.com/rbenv/rbenv#installation
– homebrew: https://brew.sh/index_ja### 使用する環境
– MacOS(m1)
– Rails 6.1.5
– Ruby 3.1.0
– yarn 1.22.17
– Homebrew 3.4.8### はじめにアプリケーションを作成するディレクトリを作成
“`shell
$ mkdir rails_Vue_app
$ cd rails_Vue_app
“`### Rails プロジェクトの作成
バージョンを指定して
【個人メモ】N+1問題 preload、eager_loadのまとめ
# N+1の対策メソッド
1. joins
1. left_outer_joins
1. eager_load
1. preload
1. includeseager_load、preload、includesは、一度取得したデータをキャッシュする。2回目以降は、DBではなく、メモリ上にキャッシされたデータを取得することになる。
キャッシュが不要な場合は、joins或いはleft_outer_joinsを使用する。これらはSQLの句なので、この記事で詳細は触れない。# N+1問題とは?
ループ処理の中で都度SQLを発行してしまう問題のこと。
[【Ruby on Rails】N+1問題ってなんだ?](https://qiita.com/massaaaaan/items/4eb770f20e636f7a1361)# preload
joinは行われず、2つのテーブに対してそれぞれSQLを発行する。(=2回SQLを発行)
joinを行わないため、where句による絞り込みが出来ない。
レコード量が多い場合、joinの処理を行うeager_loadはパフォーマンスや負荷に影響する場
EC2+Mysql8.0+Railsまでの構築の流れ
# 概要
EC2にMysql,Ruby,nginxを構築しELB,RDSとの連携まで行い完成を目指す。#### 構築の際の環境
– Mac (M1 MacbookAir)
– OS : Amazon Linux2
– rbenv ver : 1.2.0
– Ruby ver : 3.1.2
– rails ver :
– mysql ver : 8.0.28#### 前提準備 (作成済みなもの)
– VPC×1
– Subnet(public×2 , private×2)
– EC2×1
– RDS×1
– route table
– internet Gateway
– seculity group (EC2用)×1
– seculity group (RDS用)×1
– githubに新規リモートリポジトリ×1
– EC2へのssh接続設定済み
– GitHubのターミナルへのインストー設定済み## 設定用ツールのインストール
Rails搭載JavaScriptのパッケージを管理するためのパッケージマネージャ
“`ruby:
$ sudo yum -y update
Rubyのwp2txtライブラリを使えるようにする
# 背景
私はRubyをほぼ使ったことがありません。pだけでプリントができるということを知っているくらいです。
今回はpythonを使って自然言語処理をしようと思ったときにWikipediaの全文データ(xml)を取得してテキストファイルに変換する際にwp2txtというライブラリ?を使うためにインストールしました。# エラーが起きる
機械学習の本を買ってその通りにやっていたところ
“`
[root@server ~]$ wp2txt –input-file ./jawiki-latest-pages-articles.xml
[DEPRECATION] This gem has been renamed to optimist and will no longer be supported. Please switch to optimist as soon as possible.
/root/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/wp2txt-0.9.1/lib/wp2txt.rb:37:in `initialize’
Rails PamaのDaemonaization設定
### 概要
EC2にnginxの構築を完了し、RailsのPamaデーモン化を構築した際の備忘録として。### 環境
– Mac M1 macbookAir
– Rails 6.0.4.8
– ruby 2.6.5
– Bundler 1.17.2### Gemfileに追記し、bundle installの実施
“`ruby:Gemfile
<省略> # Use Puma as the app server $ gem 'puma', '~> 5.0’ #5.0に変更
$ gem ‘puma-daemon’, require: false #追記<省略>
# bundle installの実施
$ bundle install –path vender/bundle
“`
### config/puma.rbに追記し、pumaを起動
“`ruby:Config/puma.rb
<省略>require ‘puma/daemon’
ローカルでDocker-rails環境を立ち上げる
## 背景
ふと時代に取り残されているような、周囲に置いていかれるような不安に駆られてしまいまして、コンテナをローカル環境で使い始めました。
デプロイする際の手間が減ること、コンテナを簡単に削除できることからRubyアプリケーションを作成する時は今後も使い続けていこうと思いました。
導入の際に実際に行ったことを手順に落として残しておこうと思います。## 手順
①Dockerfile, docker-compose.yml, Gemfile, Gemfile.lockを作成します。#### なぜDockerfileとdocker-compose.ymlを分けるのか?
– コンテナを分けるため管理がしやすい
– 実行コマンドが簡潔
といった理由で今回は分けて記述します。
Dockerfile
“`Dockerfile
FROM
ruby:2.5
RUN apt-get update -qq && \ #←ここの\が抜けているとエラーになる
apt-get install -y build-essential libpq-dev nodejs
細かいつまずいたことをメモしておく(4月編)
# はじめに
今月は資格の勉強を開始したので、そこまでアウトプットするようなトラブルには遭遇しませんでした。
環境構築をする機会があったのでその内容が中心です。# 問題
## VPNにつなげるとdocker-compose upでのインストールで止まるこれはDocker内部のネットワークとVPNの間で問題がおきることでインストールが遅くなってしまうのが原因っぽい
`wsl-vpnkit`というのをインストールすることで改善するようになったhttps://github.com/sakai135/wsl-vpnkit
[ダウンロード](https://github.com/sakai135/wsl-vpnkit/releases/tag/v0.3.2)から最新のtar.gzを取得します。
そのあとPowerShellを開いて、ダウンロードした場所にディレクトリを移動して以下のコマンドを叩きます。“`
# PowerShellwsl –import wsl-vpnkit $env:USERPROFILE\wsl-vpnkit wsl-vpnkit.tar.gz –
Google Ads APIバージョンの確認・アップグレード
# アップグレード通知は突然に
それは突然やってきました。
(メール引用)
あ、アップグレードしなきゃ:neutral_face:
いや待てよ…そもそもバージョンの指定なんてした覚えがないのですが?# APIの呼び出し環境
RoRで開発を進めているプロジェクトなので、もちろんAPIの呼び出しには公式のgemを使っています。
https://github.com/googleads/google-ads-ruby# バージョン指定箇所の大捜索
プロジェクト内で指定している箇所を検索しました。
しかし、探せど探せど見つからない。
流石にconfigファイルにあるだろうと思ったけど見つからない。# そうだGitHub上で探そう
こう思えるようになったのも自分の成長の証な気がしました。
G
Firestoreでcollectionのfield名をcamelCaseとsnake_caseで交互に置換したい
# 問題
– Javascriptは通常camelCaseで書く
– Rubyは通常snake_caseで書くそうするとFirestoreのcollectionのfieldはcamelCaseだけど、rubyにデータがある時はsnake_caseにしたい。
# 解決
Railsとしてここに置く
“`rb:config/initializers/firestore.rb
module FirestoreOliveBranch
module Outgoing
def create(data)
d = data.deep_transform_keys { |key| key.to_s.camelcase(:lower) }
super d
enddef set(data, merge: nil)
d = data.deep_transform_keys { |key| key.to_s.camelcase(:lower) }
super d, merge: merge
end
end
プロジェクトへテストコードを導入する(環境構築編)
## まえおき
前回は[「計画編」](https://qiita.com/rerere_eng/items/fdf57b817589383db661 “”)という事でテスト導入にあたっての目的やテスト範囲の確認などを行った。
今回は「環境構築編」としてRSpecや各種gemのインストールについてまとめていく。—
### 使用環境とGemについて—
## 使用環境
– GCE
– OS:CentOS7
– 言語:Ruby(2.2.2)
– フレームワーク:Rails(4.2.5)—
## 導入するGem
– rspec-rails(4.0.1)
Railsでrspecを実行するために必要– factory_bot_rails(4.11.1)
テスト用のインスタンスを簡単に、効率よく作成できる– capybara(2.18.0)
ブラウザをシミュレートしてテストするのに必要– seleniumu-webdriver(3.141.0)
Webブラウザをプログラムから自動的に操作するためのツール、chromeなどを指定できる—
## Gemのインスト
N+1問題の重要性
N+1問題とは、アプリケーション開発でデータベースへのアクセス回数が多くなってしまう時に注意すべき問題である。
ユーザーが何かを投稿や検索した際にその都度データベースへアクセスしていては、パフォーマンスが下がってしまう。
そのような問題点を解決する際に活用されるのが、includesメソッドである。このメソッドを活用することで、引数に指定されたものが一度のアクセスで取得できるのでぜひ活用して、パフォーマンス維持を図りたいと思う。