- 1. Python,Ruby,PHP,Java,JavaScript,Perlの数値計算の比較
- 2. Rubyの配列で複数要素の位置を得る ( index を複数得たい )
- 3. Deviseで、メールテンプレートの編集ができないときの対処法(template_pathではなく、headers_forを使う)
- 4. Rubyでダイヤル問題を解く
- 5. 依存性のある複数引数を一時変数無しで設定する
- 6. Ruby と crystal における clone メソッドの違い
- 7. M1 Mac (macOS Monterey) で therubyracer を運用することはできるのだろうか?
- 8. M1 Mac (macOS Monterey) で Ruby のインストールに失敗するときの対処法
- 9. 【Rails】database.ymlにMySQLのパスワードを設定する方法
- 10. RuboCop Rails (rubocop-rails) のリリース内容で Rails の情報をキャッチアップする
- 11. 【初個人開発】K P T管理アプリ「Animal KPT」を作りました。
- 12. Rails nil?とempty?とblank?メソッドの違い?・・・わかってます・・・
- 13. Python,Ruby,PHP,Java,JavaScript,Perlのスコープの比較
- 14. tsunagi-functionsでSymbolブロックチェーンのトランザクションを自由自在に作ろう!(Ruby編)
- 15. 【Rails】【Ruby】find_by_sql でも preload したいとき
- 16. [Rails] 複数の小モデルを跨いだor検索
- 17. Rails 7 + ImportmapでFont Awesomeを実装する
- 18. Ruby3.1を触ってみる(IRB のオートコンプリートとドキュメント表示)
- 19. 【Rails】countメソッドにカラムを指定してエラーを回避
- 20. using Module.new ってなに?
Python,Ruby,PHP,Java,JavaScript,Perlの数値計算の比較
Python,Ruby,PHP,Java,JavaScript,Perlの数値計算の比較
# Python
https://qiita.com/Sunset_Yuhi/items/fa6e97867ac46a604780
# Ruby
https://qiita.com/u651601f/items/52af880d1569c6c1066f
# PHP
https://qiita.com/mpyw/items/346c535ade9dcf6e1b12
# Java
https://qiita.com/takahirocook/items/748990882f2de7a630a1
# JavaScript
https://qiita.com/daikw/items/663bc0b5a4c025694974
# Perl
https://perlzemi.com/blog/20161
Rubyの配列で複数要素の位置を得る ( index を複数得たい )
# 例
“`rb
arr = [“A”, “B”, “X”, “A”, “X”, “A”];
arr.each_index.select { |i| arr[i] == “X” } # [2, 4]“`
# チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
Deviseで、メールテンプレートの編集ができないときの対処法(template_pathではなく、headers_forを使う)
# Rails & deviseにてメールのテンプレートを変更
カスタムメーラー `app/mailers/user_mailer.rb`を、
“`
class UserMailer < Devise::Mailer default template_path: 'users/mailer' end ``` と定義したが、以下のデフォルトのメールが変更できずでした。![スクリーンショット 2022-09-23 18.23.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1730386/90478abf-c56e-e1ff-f6c6-ddf2d34ae8af.png) ## 対応方法 以下のように、headers_forメソッドをオーバーライドすることで、設定したテンプレートが使用できるようです! ``` class UserMailer < Devise::Mailer # 以下の記述では動作しない # default template_path: 'users/mailer'
Rubyでダイヤル問題を解く
# 問題
– AからZまでの目盛りを持つダイヤルがあるとする。
– このダイヤルは右に回すことも左に回すことも出来る。
– ダイヤルは丸いのでAとZは隣り合わせだ。ひとつの目盛りから別の目盛りまで、動かす必要のある最小の目盛り数を求めたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/b21d7d04-6302-6b49-e3ec-2e81a17e660a.png)
# コード
XからBまでの距離を計算すると、移動距離は4であることが分かる。
B -> A -> Z -> Y -> X で4マス移動だ。
“`rb
SCALES = (“A”..”Z”).to_acurrent_dial = “X”
next_dial = “B”current_dial_place = SCALES.index(current_dial) + 1
next_dial_place = SCALES.index(next_dial) + 1formal_move
依存性のある複数引数を一時変数無しで設定する
※以下のプログラムはPython 2.7/3.9およびRuby 2.7でそのまま貼り付けて動作することを確認しています。
## 背景
ライブラリの挙動により、このようなことをしたいことがあると思います。
“`py
process(config=json.load(open(fname)),data=get_data(config))
“`“`rb
process(config: JSON.parse(open(fname).read), data: get_data(config))
“`しかし、前側のパラメータに与えられる情報を後ろのパラメータで使うことはできません。
## 解決策
※以下、サンプルなのでconfig/dataという名前になっていますが、実際にはこの辺りはちゃんとした名前をつけてください
### 一時変数
こういう場合、通常はkwargs変数を用意して処理するのだと思います。
#### Python
“`py
def process(**kwargs): # actually defined in another module
Ruby と crystal における clone メソッドの違い
# はじめに
AtCoder さん、ありがとうございます。# 結論
||clone|
|:–:|:–:|
|Ruby|浅い (shallow) コピー|
|crystal|深い (deep) コピー|# E – SNS のログ
https://atcoder.jp/contests/past201912-open/tasks/past201912_e
# Ruby clone(WA)
“`rb
n, m = gets.split.map(&:to_i)
a = Array.new(n + 1){ Array.new(n + 1, “N”) }
m.times do
s = gets.split.map(&:to_i)
case s[0]
when 1
a[s[1]][s[2]] = “Y”
when 2
(1..n).each do |i|
a[s[1]][i] = “Y” if a[i][s[1]] == “Y”
end
when 3
b = a.clone
(1..n).each do |i|
M1 Mac (macOS Monterey) で therubyracer を運用することはできるのだろうか?
# 結論
`therubyracer` はもう捨てたほうが良い!いろいろ試しましたが、M1 Mac で `therubyracer` と共存しながら正しくアプリケーションを動作させる方法は、少なくとも筆者の調べでは見つけることができませんでした……。
# 削除して大丈夫?
プロジェクトごとに環境はまちまちでしょうから、絶対に大丈夫とは言い難いですが、以下の記事に記載されているとおり、Node.js を実行できる環境であれば、ほとんどのケースでは `therubyracer` を削除しても問題なく動作します。* [How to Install (Or Get Rid Of) therubyracer on M1 or M2 Macs](https://www.rubyonmac.dev/how-to-install-therubyracer-on-m1-m2-apple-silicon-mac)
少なくとも筆者の関わっている Rails アプリケーションでは問題ありませんでした。
やることとしてはとてもシンプルで、`Gemfile` から `gem ‘therubyra
M1 Mac (macOS Monterey) で Ruby のインストールに失敗するときの対処法
# 解決方法
M1 Mac で従来どおりに Ruby をインストールしようとするとビルドエラーが出てしまいます。筆者の環境では以下のコマンドを実行することにより無事インストールすることができました。
“`shell:Shell
brew install openssl@1.1 readline libyamlexport RUBY_CONFIGURE_OPTS=”–with-openssl-dir=$(brew –prefix openssl@1.1)”
export LDFLAGS=”-L/opt/homebrew/opt/readline/lib”
export CPPFLAGS=”-I/opt/homebrew/opt/readline/include”
export PKG_CONFIG_PATH=”/opt/homebrew/opt/readline/lib/pkgconfig”
export optflags=”-Wno-error=implicit-function-declaration”
export LDFLAGS=”-L/opt/homebrew/
【Rails】database.ymlにMySQLのパスワードを設定する方法
# はじめに
今回は、Mysqlのパスワードを変更したことにより、発生したエラーの解消方法についてまとめました。※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。# この記事の目的
以下内容のアウトプット
– Mysqlのエラーとその解消方法
– database.ymlにMySQLのパスワードを設定する方法# 開発環境
– Ruby 2.6.5
– Ruby on Rails 6.0.0
– MySQL 14.14# この記事の内容
1. Mysqlのエラー
2. Mysqlのパスワードを確認
3. database.ymlにMySQLのパスワードを設定# 1. Mysqlのエラーの概要
Mysqlのパスワードを設定(変更)したことにより、ローカルでサーバを立ち上げた際にエラーが発生しました。※エラー解消のプロセスでNOとYESのエラーに遭遇しましたが、最終的にエラー解消できました。
“`
Mysql2::Error::ConnectionError: Access denied for u
RuboCop Rails (rubocop-rails) のリリース内容で Rails の情報をキャッチアップする
# この記事は?
Ruby の静的コード解析の定番 Gem の [RuboCop](https://github.com/rubocop/rubocop)。そのひとつひとつのルールのことを Cop と呼びます。そして、[RuboCop Rails](https://github.com/rubocop/rubocop-rails) は Rails 向けのルールを RuboCop に追加するための Gem です。
ふと、RuboCop Rails で追加された Cop (ルール) を確認することで、Rails の知らない機能を知るいい機会になるのではと思いました。そこで、試しに 2022/09/09 (金) にリリースされたバージョン 2.16.0 の内容を見てみました :eyes:
https://github.com/rubocop/rubocop-rails/releases/tag/v2.16.0
そうすると、案の定知らないことばかりで非常に勉強になりました!そこで、実際にどんな学びがあったかこの記事で共有したいと思います ?
# 例: RuboCop Rails 2
【初個人開発】K P T管理アプリ「Animal KPT」を作りました。
# はじめに
こんにちは [@Taiga_aniK](https://twitter.com/home)と申します。みなさんKPTはされたことはありますか。
KPT(ケプト) :Keep(できた/継続すること) Problem(改善するべき問題点) Try(挑戦したいこと)の3要素を掘り下げ、学習や仕事を改善できるアクションを導き出すツールです。Animal KPT では、達成度を色で別け、「振り返り」をより確実にします。ツイッターと一緒に使えます。
【Twitter】
Tweets by Taiga_aniK
【今回作ったアプリ】
https://obscure-chamber-30165.herokuapp.com/tops/index
【GitHub】
https://github.com/tai9174/animal_kpt# 使用環境
• Ruby 3.0.1
• Rails 6.0.3# アプリの主な機能
### トップ画面
トップ画面のホワイトタイガーは丹精を込めて描きました。
Animal KPTという名前は、デザインに動物を
Rails nil?とempty?とblank?メソッドの違い?・・・わかってます・・・
# はじめに
実務でコードを書いているときに次の3つの違いを先輩に問われたことがありました。
– nil?
– empty?
– blank?どれもレシーバに値ががない状態?であることを確認するときに使っていました。
私自身よく考えずに使っていたので詳しく調べてみることにしましたので備忘録として残します。
間違いや補足がありましたら教えてください。# 環境
Ruby 2.7.1
Rails 6.0.5# 3つの違いとは
### nil?
Rubyのドキュメントによると次の通りです。
>レシーバが nil であれば真を返します。~~レシーバ自体が存在しない場合~~、つまりnilであればtrueを返します。
※追記
>nil は何かが存在しないことを表すために用いられるオブジェクトです。レシーバが存在しないということはあり得ないというご指摘をいただきましたので追記です。
https://qiita.com/scivola/items/da2480ca4597a7dcf73d
### empty?
Rubyのドキュメントによると次の通りです。
>文字列が空 (
Python,Ruby,PHP,Java,JavaScript,Perlのスコープの比較
Python,Ruby,PHP,Java,JavaScript,Perlのスコープの比較
# Python
https://qiita.com/msssgur/items/12992fc816e6adf32cff
# Ruby
https://qiita.com/EZ_Denta/items/6489039212e21d4fc49f
# PHP
https://qiita.com/hikaru_/items/4cc7b616aa61868cdcdd
# Java
https://qiita.com/gatchan03/items/e8eecf468b7dab960198
# JavaScript
https://qiita.com/higa02/items/a7a0a1d96d1d67a7c88b
# Perl
https://perlzemi.com/blog/2011012
tsunagi-functionsでSymbolブロックチェーンのトランザクションを自由自在に作ろう!(Ruby編)
この記事は、以下に紹介したtsunagi-functionsのRuby実装版です。
https://qiita.com/nem_takanobu/items/4b5d67fe9eb80ae35433
トランザクション構築の内部処理やノードへの通知方法については以下の記事もご参考ください。
https://qiita.com/nem_takanobu/items/2cff7bd2722aa86fec84
Symbolブロックチェーンをよく知らないという方はこちらで速習することができます。
https://github.com/xembook/quick_learning_symbol
# リポジトリ
##### tsunagi-functions for Ruby
https://github.com/xembook/tsunagi-sdk/tree/main/ruby関数群の提供のため、sdkという名称は今後functionsに変更予定です。
# テスト
テストスクリプトを以下に置いています。実行することができればそのロジックをそのまま実装に利用することができます
【Rails】【Ruby】find_by_sql でも preload したいとき
# はじめに
`find_by_sql` を使って複雑なSQL文を書いたが、N+1を避けるために `preload`したい時がある。# 結論
下記のように書けばOK
“`ruby
records = User.find_by_sql(…)
ActiveRecord::Associations::Preloader.new.preload(records, :like)
“`下記は`preload`が無視されるのでダメ
“`ruby
User.preload(:like).find_by_sql(…)
“`# 注意点
**Rails7 で記法が下記のように変わる**
“`ruby
records = User.find_by_sql(…)
ActiveRecord::Associations::Preloader.new(records: records, associations: :like).call
“`# 参考
https://www.natsuneko.blog/entry/2017/04/18/find_by_sql-preload
[Rails] 複数の小モデルを跨いだor検索
バージョンの問題で5.1.以下の複数の小モデルを使ったor検索の実装方法があまり載っていなく少しでも役に立つかもと思ったので投稿します。
もっと良い書き方があれば教えていただきたいです。## 学んだこと
・includeを使うと小モデルのオブジェクトを親クラス内から使えるということを学びました。
“`
Child.include(:parent).is_summer_vacation
“`
・idを使ってor検索を実装すること(rails5.2からは.[or()](https://qiita.com/YumaInaura/items/c4ea8271f5793962a26d)を使っていけるかも)
## 環境
Rails 5.1.6.2
Ruby 2.5.0### DB
“`book.rb
has_one: business #ビジネス書
has_one: novel #小説
has_one: comic #漫画
“`### 複数の小モデルを跨いだor検索
本の検索サービスにおいてアメトークで紹介された本を絞り出すという状況を想定して実装コードを紹介します。
“`
Rails 7 + ImportmapでFont Awesomeを実装する
# FontAwesome
アイコンを使うのに[FontAwesome](https://fontawesome.com/)というライブラリーはすごくいいだけど、インストールするには公式サイトにこれしか書いてなかったからインストールに詰まりました。
“`shell
# npm
npm install –save @fortawesome/fontawesome-free# yarn
yarn add @fortawesome/fontawesome-free
“`これだけだとアイコンは表示されないし、フレームワークごとのインストール方法は書いてなかったからちょっと調べてみたら、YouTubeの[この動画](https://www.youtube.com/watch?v=c-EbQDB0RsQ)を見つけてFontAwesomeをけっこう簡単に実装できたのでやり方をこちらにも書いときます。
そもそもImportmapの使い方は知らなかったのが詰まる原因だったと思うんで反省していますが、とにかく実装できたのですっきりしました。
# パッケージマネジャーでインストールした後に
Ruby3.1を触ってみる(IRB のオートコンプリートとドキュメント表示)
# 0. はじめに
[前回](https://qiita.com/Satoooon/items/2412e9ba6de1f3afefb1) に引き続きRuby 3.1の新機能について動かしながら紹介しようと思います。今回は IRB のオートコンプリートとドキュメント表示 になります。
irb自体はRubyを触っていれば簡単な動作確認したりと誰しもが使ったことがあるものだと思います。
それの拡張された機能になります。早速みていきましょう!# 1. リリースノートを見てみる
> IRB にオートコンプリート機能が実装され、コードを入力するだけで補完候補ダイアログが表示されるようになりました。Tab と Shift+Tab で上下に移動できます。
また、補完候補を選択している時に、ドキュメントがインストールされている場合、補完候補ダイアログの横にドキュメントダイアログが表示され、内容が一部表示されます。Alt+d を押すことでドキュメント全文を読むことができます。引用: https://www.ruby-lang.org/ja/news/2021/12/25/ruby-3-1-0
【Rails】countメソッドにカラムを指定してエラーを回避
## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16## 状況
relationでjoinしている“`posts“`に“`count“`したら下記のエラーが発生し“`count“`できない。
“`ruby
posts = Post.joins(:users)
=>Post::ActiveRecord_Relationposts.count
=>ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near “AS”
“`## 解決法
ActiveRecordのcountメソッドは引数にカラムを指定できるのでそれを使うとcountできる。
“`ruby
posts = Post.joins(:users)
posts.count(:posts)
=> 4
“`## 参考
https://railsdoc.com/page/count
using Module.new ってなに?
## はじめに
調べ物をしている際に、`using Module.new {}`というコードを見たのでどういう処理をするんだろうと思い調べてみた備忘録です。
## そもそも無名モジュールってなに?
無名モジュールは、その名の通り名前のついていないモジュールのことです。`Module.new`で作成したモジュールは無名モジュールとなるらしいです。
~~もちろん無名なので、includeなどで指定することが出来ませんので他のファイルから呼び出すこともできません、多分…~~。Mix-inすることできますね…(@scivolaありがとうございます)“`ruby
mod = Module.new {
def self.anonymous
puts “anonymous module”
end
}mod.name
# => nilmod.anonymous
# => anonymous moduleMyClass = Class.new do
include mod
endMyClass.ancestors
# => [MyClass,