- 1. [Ruby]ハッシュのアレコレ
- 2. memcachedの概要と動作確認
- 3. Cherry本の著者 伊藤さんによるRubyの正規表現のアウトプット①
- 4. [py2rb] lxml.etree
- 5. RailsのSTIで子クラスがfindに引っかからなくてハマった話
- 6. 【Ruby】文字数を算出するプログラム count_hiメソッド
- 7. 【MinIO】RailsアプリケーションにS3互換ストレージ MinIO を導入してみる
- 8. renderで部分テンプレートを呼び出す方法
- 9. stripメソッドとそれに関連するメソッドのまとめ
- 10. AWS CodeDeployエージェントのサポートRubyバージョン
- 11. 自作アプリをRails6から7にアップデートした際の手順。
- 12. 【Ruby】任意の文字列を部分的に削除 slice!メソッド
- 13. RSpecで孫モデルから親モデルの属性を指定することはできない
- 14. 銀座Rails#41企画の「Rubyで点字メーカープログラム」を作ってみました
- 15. credentials.yml.encをRubyMineで編集する
- 16. 【Ruby】インスタンスの生成
- 17. MVCモデルについて
- 18. 【RuboCop】特定の「ディレクトリ」をチェック対象外とする
- 19. 【備忘録】rbenvの導入(anyenv経由)
- 20. プログラミング言語を簡単にまとめる
[Ruby]ハッシュのアレコレ
学んだことのアウトプット
ハッシュを使ったコードを書きながら「あれ?どうやったっけ?」となったので復習しました###”ハッシュ”とは
「データ」とそれに対応する「名前」のセットを要素として持つ値。
データを`バリュー`、それに対応する名前を`キー`と呼ぶ。
配列と同じように、複数の値を持つことができるし、配列にハッシュ自体を入れ込むことも可能。“`ruby
#ハッシュの宣言
変数 = {}#下記2つは出力すると同じものが出力される
変数 = { キー1 => バリュー1, キー2 => バリュー2, キー3 => バリュー3 }
変数 = {キー1: バリュー1, キー2: バリュー2, キー3: バリュー3} #シンボルを使うとシンプルに書ける
“`##ハッシュに値を追加する
“`ruby
ハッシュ[追加するキー] = 値#例
teacher = { name: “Mike”, age: 25 }
teacher[:subject] = “English”puts teacher #=>{name: “Mike”, age: 25, subject:
memcachedの概要と動作確認
## はじめに
インターン先でMemcashedに触れる機会があったので、どんなものか調べてみました。
Memcashedについて様々な素晴らしい記事があり、それらを参考に体型立ててまとめたものなので引用が多くなっております。## memcachedとは
とてもわかりやすい記事があったので、そちらを引用させていただきます。>memcachedは高性能な分散メモリキャッシュサーバ。データベースへの問い合わせ結果を一時的にキャッシュすることで,データベースへのアクセス回数を減らし,動的なウェブアプリケーションの高速化やスケーラビリティの向上のために利用されている。
引用元:
[memcachedを知り尽くす ~第1回 memcachedの基本~](https://gihyo.jp/dev/feature/01/memcached/0001)## 導入方法
>参考:[macでmemcachedを導入する手順 – Qiita](https://qiita.com/makotok7/items/9998b15f79fc7a53af24)###インストール
“`shell:con
Cherry本の著者 伊藤さんによるRubyの正規表現のアウトプット①
#参考記事と書籍
https://qiita.com/jnchito/items/893c887fbf19e17d3ff9#正規表現とは
文字列をわかりやすく
[py2rb] lxml.etree
# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# lxml.etree (Python)
“`python
from lxml import etreeparser = etree.XMLParser(remove_comments=True, ns_clean=True)
tree = etree.parse(source, parser=parser)
“`
データをxml形式で取り扱いますので、外部ライブラリである`lxml`が使用されます。https://lxml.de/apidoc/lxml.etree.html
> classlxml.etree.XMLParser(self, encoding=None, attribute_defaults=False, dtd_validation=False, load_dtd=False, no_network=True, ns_clean=False, recover=False, schema: XMLSchema = None, huge_tree=False,
RailsのSTIで子クラスがfindに引っかからなくてハマった話
# 前提環境
“`
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x64-mingw32]
$ rails -v
Rails 7.0.1
“`# 問題
ツイッターのクローンアプリを学習用に作っていて、ツイート系のモデルが`Tweet < ApplicationRecord`、`NormalTweet < Tweet`、`Reply < NormalTweet`となる設計で実装しました。 ※Tweetはツイートの作成者`author`、NormalTweetはツイート内容`text`、Replyは返信先`reply_to`を持ちます。 それで開発中`NormalTweet.find()`にその子クラスである`Reply`が引っかるときと引っかからない時がある!(`Couldn't find NormalTweet with 'id'=n (ActiveRecord::RecordNotFound)`)という問題が発生。 # 原因 Rails(のデフォルトではdevelopment環境)では、クラスが使用さ
【Ruby】文字数を算出するプログラム count_hiメソッド
※初心者向け
※アウトプット練習の為
※学習の復習開発環境
rails 6.0.4.4
ruby 2.6.5##概要
対象となる文字列から特定の文字列の数を算出し、その数を出力するプログラムを実装##問題内容
以下の要件を満たすcount_hiメソッドを実装しましょう。・対象となる文字列の中から、”hi”という特定の文字列の数を取得すること
・上記で取得した数を出力すること**雛形**
“`ruby
def count_hi(str)
# 処理を記述
end# 呼び出し例(引数には対象となる文字列を指定します)
count_hi(‘abc hi ho’)
“`**出力例:**
count_hi(‘abc hi ho’) → 1
count_hi(‘ABChi hi’) → 2
count_hi(‘hihi’) → 2**ヒント**
**scanメソッド**を使用しましょう。**scanメソッド**
**scanメソッド**は、対象の要素から引数で指定した文字列を数え、配列として返すメソッドです。“`ruby
“foobarbazfo
【MinIO】RailsアプリケーションにS3互換ストレージ MinIO を導入してみる
# はじめに
プライベートでの共同開発において、「開発環境と本番環境の差異をできるだけ少なくしたい」という思いからローカルで動かせるS3互換ストレージを調べていました。業務で`fake-s3`というサービスを使用したことがありますが、MinIOというサービスも現場で使われている例を発見したのでそちらを導入してみました。# MinIOについて
MinIOとはAWS S3互換のオブジェクトストレージのことです。https://min.io/
* 特徴
* ローカルに仮想的な S3 環境を構築できる
* ローカルの仮想環境なので不用意にAPIを叩いてもお金も掛からない# シナリオ
簡単なアプリを作成した後、MinIOを導入し、投稿した画像がMinIOに格納されるかを確認してみます。### 1. アプリの土台を作成する
以下の機能をもつ簡易的なブログアプリを作成する。* 記事一覧機能
* 記事詳細機能
* 記事投稿機能#### 動作確認
MinIOを用いない状態で画像を投稿し、storageフォルダにファイルが格納されることを確認する### 2.
renderで部分テンプレートを呼び出す方法
#はじめに
この記事はプログラミング学習の備忘録です。今回はrenderを使って指定のビューファイルを呼び出す方法についてまとめます。
#viewでrenderメソッドを使う
まずviewでよく使われるrenderメソッドの用法は、部分テンプレートを呼び出す時です。部分テンプレートとは複数のviewファイルで使われるコードを切り出して、共通化するファイルのことです。
renderで部分テンプレートを呼び出すためには、まずは共通部分をまとめた部分テンプレートファイルを作ります。
この時に気をつけることは、ファイル名の先頭にアンダーバーをつけて
**「_tweet.html.erb」**のような形にすることです。次に部分テンプレートを呼び出します。呼び出し方は主に、
①部分テンプレートをそのまま呼び出す場合
②変数を渡す場合
の2つがあります。順番に説明します。
#部分テンプレートをそのまま呼び出す
例えばformを作る部分テンプレートには変数を渡さず、そのまま呼び出されます。
まずは「_form.html.erb」というファイルを作り、“`new.html.erb
<
stripメソッドとそれに関連するメソッドのまとめ
rubysilverを勉強するためのサイトのRexを勉強してわからなかったメソッドがあったので備忘録として残しておきます
https://rex.libertyfish.co.jp/##Stripメソッド
stripという英語の意味は、「剥ぎ取る」という意味です
結論からいうと、文字列先頭と末尾の空白文字を全て取り除いた文字列を生成して返すメソッドなんです。
[ruby 公式ドキュメントより](https://docs.ruby-lang.org/ja/latest/method/String/i/strip.html)このリファレンスに書いてあるのですが、「空白文字の定義は ” \t\r\n\f\v”」と書いてあるんです。
そこで思ったのが、「\\t\r\n\f\v」ってなに?って思ったんですよね。
(この文字列の中にスペースも入ってるのでご注意を)ここで大事になるのが、正規表現についての知識が必要になるんですよね。
よく調べたら、これがrubyの[公式ドキュメント](https://docs.ruby-lang.org/ja/latest/doc/spec=2freg
AWS CodeDeployエージェントのサポートRubyバージョン
## CodeDeployエージェントとRuby
[AWS CodeDeployエージェントをインストール](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html)する上では前提条件としてRubyをインストールしろと記載されているが、そのバージョンは記載されていない。
Rubyのバージョンを3系などにアップデートして大丈夫なのか知りたかったけれど、ドキュメントには記載がなかった。
CodeDeployエージェント自体は[OSSとして公開されている](https://github.com/aws/aws-codedeploy-agent)が、READMEにもリリースノートにもRubyバージョンは記載がなかった。## 実装の確認
最新のバージョン1.3.2における[エージェント起動スクリプト](https://github.com/aws/aws-codedeploy-agent/blob/1.3.2/bin/codedeploy-ag
自作アプリをRails6から7にアップデートした際の手順。
12月にRails7がリリースされたので、1ヶ月ほど遅れましたが自作アプリをRails7にアップデートしてみました。
## まずやること
Gemを最新のバージョンに上げておきます。“`
bundle update
“`
こんなエラーが出ました。“`
Bundler could not find compatible versions for gem “actionview”:
In snapshot (Gemfile.lock):
actionview (>= 6.1.4.4)In Gemfile:
actionview (~> 6.1.4.4)rails (~> 7.0.0) was resolved to 7.0.0, which depends on
actionview (= 7.0.0)
“`
ログを見た感じ、railtiesのバージョンを上げればいいようです。
なのでGemfileを以下のように編集。
・変更前“`
gem ‘actionview’, ‘~> 6.1.4.4’
“`
変更後“
【Ruby】任意の文字列を部分的に削除 slice!メソッド
※初心者向け
※アウトプット練習の為開発環境
rails 6.0.4.4
ruby 2.6.5**概要**
対象となる文字列から任意の文字を削除したのち、残った文字列を出力するプログラムを実装します。##問題内容
以下の要件を満たすmissing_charメソッドを実装しましょう。**・対象となる文字列からn番目の文字を削除すること**
**・削除された文字以外の文字列を出力すること****雛形**
“`ruby
def missing_char(str, n)
# 処理を記述
end# 呼び出し例(1つ目の引数には対象となる文字列を、2つ目の引数には対象となる文字列から何番目の文字を削除するのかを指定しましょう)
missing_char(‘kitten’, 1)
“`出力例:
missing_char(‘kitten’, 1) → ‘itten’
missing_char(‘kitten’, 2) → ‘ktten’
missing_char(‘kitten’, 4) → ‘kiten’**ヒント**
slice!メソッドを使用しましょう。
RSpecで孫モデルから親モデルの属性を指定することはできない
# 概要
has_one/belong_toの関係で構成された2段階のモデルがあった場合、孫モデルをcreateするときに親モデルの値を指定したかった。
[![Image from Gyazo](https://i.gyazo.com/d92b5d60a0a7ec13d5b57e6a988804d8.png)](https://gyazo.com/d92b5d60a0a7ec13d5b57e6a988804d8)# 結論
できない# じゃあどうするのか
一度子モデルを作って繰り返すしかない。以下例。■RSpec
“`ruby
# 一番上の親モデルを作ります
oya = create(:親)# 子モデルをcreate_listで作りながら、eachで孫モデルを作ります
create_list(:子, 3, 親: oya).each do |child|
create(:孫, 子: child)
end
“`■子Factory
“`ruby
factory :子, class: ‘Child’ do
# associ
銀座Rails#41企画の「Rubyで点字メーカープログラム」を作ってみました
# はじめに
はじめまして、シモカワと申します。
プログラミングスクールの[フィヨルドブートキャンプ](https://bootcamp.fjord.jp/)で学習6ヶ月目となり、今回がQiita初投稿です。本記事は、Qiitaで開催中の「[Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-のカレンダー \| Advent Calendar 2021 \- Qiita](https://qiita.com/advent-calendar/2021/ruby-challenge)」の銀座Rails版の点字プログラムの問題を解いたときのお話です。
銀座Rails版Rubyプログラミング問題のGitHubのリポジトリは[こちら](https://github.com/JunichiIto/tenji-maker-challenge-for-ginza-rails)です。
# 動機
フィヨルドブートキャンプでメンターをされている伊藤淳一さんよりコミュニティ上で銀座Railsでの公開コードレビュー開催のご案内があり、面白そうだと思って参加することにしました。
本音は
credentials.yml.encをRubyMineで編集する
# 前提環境
“`
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x64-mingw32]
$ rails -v
Rails 7.0.1
“`
OSはWindows10 64bitです。# RubyMineの実行ファイルパスを取得する
スタートメニューなどからRubyMineのアイコンを探して、[ 右クリック->(その他)->ファイルの場所を開く ]を`rubymine64.exe`ファイルが出てくるまで行います。
そうしたら、ファイルをコピーしてエクスプローラーのアドレス欄に張り付けて、その文字列をコピーしてください。
# 環境変数を設定する
値の例: `”C:\…\rubymine64.exe –wait”`
– 一時的
“`
set EDITOR=先ほど取ってきたパス –wait
“`– 恒久的
“`
setx EDITOR 先ほど取ってきたパス –wait
“`# 編集
“`
rails credentials:edit
“`
【Ruby】インスタンスの生成
※初心者向け
※アウトプット練習の為開発環境
rails 6.0.4.4
ruby 2.6.5##問題
クラスFruitを以下の仕様で定義してください。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2451862/b3e5911a-abf2-f0db-a2f0-a706d4bd1b9a.png)
実行結果は以下のようになります。“`ruby
採れたて新鮮な果実です
リンゴは120円です
オレンジは200円です
イチゴは60円です
“`雛形
“`ruby
class Fruit
def クラスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
enddef initialize
# ここに処理を記入してください
enddef インスタンスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
end
end# 3つのインスタンスを生成してください
# クラスメソッドを呼び出し、
MVCモデルについて
###学習した理由
最近ポートフォリオを作成し終えた初学者になりますので、これを機にもう一度基本に戻り、プログラムの基礎を学ぶことを目的としてこの記事を作成しております。###MVCモデルとは
MVCモデルとは「モデル(Model)」「ビュー(View)」「コントローラ(Controller)」の三つに分類し、コードを分けて記述する方法になります。###「モデル(Model)」
「モデル(Model)」の役割は表示内容や入力に関係しない処理を担当する部分になります。
もっと詳しく説明すると、処理したデータをデータベースに反映することです。
担当する処理として、データの検索、データの検証、データの変換、データの紐付けなどになります。###「ビュー(View)」
「ビュー(View)」の役割は実際に目に見えるページを表示することになります。
「ビュー(View)」に関してはユーザー側の処理が多く、入力内容の取り込みや、リクエストをコントローラーに渡す役目も果たしています。###「コントローラ(Controller)」
「コントローラ(Controller)」の役割はView
【RuboCop】特定の「ディレクトリ」をチェック対象外とする
# 概要
bundle exec rubocopを実行した際、ルール違反のファイルを指摘してくれるが、
その中で**特定のディレクトリ**をルール適用対象外とする方法についてメモ。## 環境
ruby 3.0.2
rails 6.1.4
mysql 8.0.26
rubocop 1.23.0
rubocop-rails 2.12.4### ルール違反の検出
前提:多数のカラムを持つSampleモデルをrails generateで作成した直後とする。“`terminal:terminal
# チェックの実行
❯❯❯ bundle exec rubocop# ルール違反箇所の検出
sample-app/.rubocop.yml: Warning: no department given for MethodLength.
Inspecting 63 files
…………………………………………………….C.Offenses:
db/migrate/20220119115229_crea
【備忘録】rbenvの導入(anyenv経由)
“`
# rbenvのインストール
$ anyenv install rbenv# 初期化処理をzshrc記述
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.zshrc# インストールできるRubyの一覧表示
$ rbenv install -l# 3.1.0をインストール
$ rbenv install 3.1.0# ~/.rbenv/versions/*/bin/ 以下のファイルを ~/.rbenv/shims/ 以下にコピー
$ rbenv rehash# グローバル指定
$ rbenv global 3.1.0# バージョンの確認
$ ruby -v“`
参考記事:https://mogulla3.tech/articles/2020-12-29-01
プログラミング言語を簡単にまとめる
##Java
JavaとはC言語ベースに開発された汎用性の高いプログラミング言語。求人需要が多い
WEBサービスから業務システム、組み込み、など多岐に渡り開発現場で採用されている。
フレームワークはspring Framework##Ruby
Rubyとはオブジェクト指向のプログラミング言語。コードはシンプルに書きやすく読みやすい。
WEBサービスやWEBアプリケーションができる。
フレームワークのRuby on Rails。クックパッドや食べログに使用されている##PHP
PHPとは動的なWEBページを生成することができるサーバーサイドのスクリプト語。HTMLは静的WEBページ。
他のプログラミング言語と比べると文法が比較的容易なので取得しやすい。
フレームワークはLaravel## C#
マイクロソフト社が開発したオブジェクト指向のプログラミング言語。Javaと似ている。
GUIアプリケーション、WEBアプリケーション、ゲーム開発ができる
フレームワークはASP.NET