- 1. [py2rb] 予約語
- 2. S3 Object Lambdaで大量のテキストを並列加工
- 3. [py2rb] キーワード引数と可変長引数の組み合わせ
- 4. 多重代入についてまとめてみました
- 5. Ruby入門 Ruby3導入方法 for mac (2022) 環境構築
- 6. RubyのFileの解説
- 7. railsでカレンダー機能を実装する方法
- 8. 【Rails】ページ遷移せずにいいねをしたい/取り消したい
- 9. 【Ruby】配列に格納された数値の合計値を算出
- 10. [Ruby] URLエンコード済かどうかの確認をして二重エンコードを避ける
- 11. Ruby3.1でherokuにデプロイしたらクラッシュした
- 12. Procの解説
- 13. インスタンス変数の隠蔽
- 14. [py2rb] 辞書クラスの拡張
- 15. 【RSpec】ActiveSupport::Durationで返るメソッドテスト
- 16. [py2rb] partition, rpartition
- 17. Railsにおけるto_jsonのオプション
- 18. Ruby環境からPythonスクリプトを叩いてデータを得るまで
- 19. 【Ruby】偶数値の取得
- 20. アプリを作る 基本的ログイン機構
[py2rb] 予約語
# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 予約語 (Python)
“`python
import keyword
print(keyword.kwlist)[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’,
‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’,
‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’,
‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’,
‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’,
‘try’, ‘while’, ‘with’, ‘yield’]
“`
# 予約語 (Ruby)
“`ruby
BEGIN class ensure nil self when
END def
S3 Object Lambdaで大量のテキストを並列加工
## はじめに
– S3 Object Lambdaを使って、大量のテキスト文を並列で形態素解析します。
– 形態素解析については別で[記事](https://qiita.com/sho-jp/items/50243956373f21b1e138)を書いています## S3 Object Lambdaとは
> S3 Object Lambda を使用すると、クライアントアプリケーションによって S3 からオブジェクトを取得するときに、Lambda 関数を使用してデータを処理および変換できます。![s3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703256/53ad0823-d289-b26b-e8cc-185276169999.png)
[参照](https://aws.amazon.com/jp/blogs/news/translating-content-dynamically-by-using-amazon-s3-object-lambda)
S3にあるオブジェクトにGetアクセス
[py2rb] キーワード引数と可変長引数の組み合わせ
# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 引数 (Python)
“`python
def func1(a, b, *args):
print(a, b, args)def func2(a, b=None, *args):
print(a, b, args)def func3(a=None, b=None, *args):
print(a, b, args)func1(‘A’)
func2(‘A’)
func3(b=’A’)func1(‘A’, ‘B’)
func2(‘A’, ‘B’)
func3(b=’A’, a=’B’)func1(‘A’, ‘B’, ‘C’, ‘D’)
func2(‘A’, ‘B’, ‘C’, ‘D’)
func3(‘B’, ‘A’, ‘C’, ‘D’)#output
TypeError: func1() missing 1 required positional argument: ‘b’
A None ()
None A ()
A B ()
A
多重代入についてまとめてみました
ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/042e8990-4236-4e6f-1a92-2c972420c4a8.png)##多重代入
###基本的な使い方
“`
a, b, c = 1, 2, 3
a
# => 1
b
# => 2
c
# => 3
“`
##右辺の要素が左辺の要素よりも多い場合は無視される
“`
a, b = 1, 2, 3
a
# => 1
b
# => 2#この場合3は無視される
“`
##右辺の要素が左辺の要素よりも小さい場合は無視される
“`
a, b, c = 1, 2
a
# => 1
b
# => 2
c
# => nil該当する要素がない場合は、nilになる
“`
##残った要素は、配列として格納される
“`
a, *b = 1, 2, 3
a
# => 1
b
# => [2, 3]・残りの要素が
Ruby入門 Ruby3導入方法 for mac (2022) 環境構築
新しいMacbookにRubyを導入する工程をまとめます。
動作環境
MacBook (Retina, 12-inch, 2017)
MacOS Monterey 12.1
Processor 1.4 GHz Dual-Core Intel Core i7
Memory 16 GB 1867 MHz LPDDR3まずは現在のRubyのバージョンの確認
ターミナルで
“`
ruby -v
“`と打ち込むと
“`
ruby 2.6.8
“`だと判明。
まずは下準備として
下記URLからHomebrewをインストール“`
https://brew.sh/index_ja.html
“`インストールの文字のしたのスクリプトをコピーしてターミナルにペーストする。
何度かパスワードを入力を求められるのでMacのパスワードを入力する。環境にもよるだろうがダウンロード、インストールに筆者はかなり時間がかかった。
無事インストールが終わった後
下記コマンドを実行してrbenvとruby-build をインストールする。
RubyのFileの解説
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/89d8d195-25a6-4176-5803-55e9cfe53d7a.png)
rubyのsilverを勉強していく中で、この問題が正解できなかったので、それを解説する意味でもこの記事を書かせていただきます。この問題を正解するうえで、抑えておくべきポイントは、
1. w :書き込みモード。
2. w+ :読み書きモード。既にファイルが存在する場合は、空になります。新規作成もされます。
3. r :読み込みモード。
4. r+ :読み書きモード。ファイルの読み込みと書き込みの位置は文の先頭から。
5. a :追記モード。既存のファイルの文末に入力内容を追記する。
6. a+ :読み書きモード。ファイルの読み込み位置は先頭に、書き込み位置は常に末尾になる1個ずつ解説していきますね
##w
wはwriteのwと覚えれば役割がはっきりしますね。
既存のファイルに、書き込みをしていく機能なんですね。##r
readの
railsでカレンダー機能を実装する方法
#はじめに
この記事はプログラミング学習の備忘録です。
現在習慣化アプリを実装中です。その中でsimple_calenderを使って簡単にカレンダー機能を実装する方法について学んだので紹介します。#実装の目標
①以下のようなカレンダーを導入する
②タスクを記録したら、カレンダーが緑色になるようにする
[![Image from Gyazo](https://i.gyazo.com/99f90661b07a347092af44ad610d1197.png)](https://gyazo.com/99f90661b07a347092af44ad610d1197)#gemfileを導入
・gemfileに以下の記述をします。“`
gem ‘simple_calendar’, ‘~> 2.0’
“`その後忘れずに、bundleinstallしましょう。
これでgemfileの導入は完了です。
#モデルの設定をする
以下のようにモデルを設定します。今回はテストなのでシンプルな形で作ります。
マイグレーションファイルに以下のように記述して、「rails db:m
【Rails】ページ遷移せずにいいねをしたい/取り消したい
みなさん、こんにちは!
筆者は大学生限定のプログラミングスクール「GeekSalon」でメンターをしています!
興味のある方や話だけでも聞いてみてい方はぜひのぞいてみてください?https://geek-salon.com/?utm_source=Direct&utm_medium=attract&utm_campaign=3Q&utm_content=Fukuoka_B1_3Q
さっそく今回の本題に入っていきます!
今回は投稿に対するいいねを、ページ遷移せずともできる/取り消せるようにしていきたいと思います。なお、いいね機能は実装済みという前提で話を進めていくため、いいね機能をまだ実装していない人は先にそちらの実装をお願いします。
また今回の実装では部分テンプレートを用いています。部分テンプレートについての理解が怪しい方は、[参考となる記事](https://qiita.com/okamoto_ryo/items/026b43e965a1180113ba)を載せておきますので、そちらも参照してください!
##実装環境
ruby 2.7.4p191 (2021-07-07
【Ruby】配列に格納された数値の合計値を算出
※初心者向け
※アウトプット練習の為
※学習の復習開発環境
rails 6.0.4.4
ruby 2.6.5**概要**
配列に格納された3つの数値の合計を算出するプログラムを実装します。##問題内容
以下の要件を満たすlone_sumメソッドを実装しましょう。・配列に格納された3つの数値の合計を出力する
・ただし、同じ数値が2つ以上含まれている場合、その数値は合計する要素に含めない**雛形**
“`ruby
def lone_sum(ary)
# 処理を記述
end# 呼び出し例
lone_sum([1, 2, 3])
“`出力例
lone_sum([1, 2, 3]) → 6
lone_sum([3, 2, 3]) → 2
lone_sum([3, 3, 3]) → 0##解答
“`ruby
def lone_sum(ary)
# 配列から、重複しない要素のみ取り出す
uniq_nums = []
ary.each do |num|
count = 0
ary.each do |i|
if nu
[Ruby] URLエンコード済かどうかの確認をして二重エンコードを避ける
URLをエンコードした状態で保存する場合、`URI.encode`のような処理でエンコードすることが可能ですが、もし入力されたURLがエンコード済の場合、二重エンコードとなってしまい正しいURLではなくなってしまいます。この記事ではエンコード済かどうかの確認方法をまとめました。
### 結論
URLをデコードした文字列が元の文字列と一致する場合エンコードされていない状態、一致しない場合はエンコード済という判断が可能です。
“`ruby
Addressable::URI.unescape(url) != url ? Addressable::URI.encode(url) : url
“`### 動作確認
Ruby 2.7.0から`URI.encode`がobsoleteになっているため、`Addressable`を使用しようと思います。
https://docs.knapsackpro.com/2020/uri-escape-is-obsolete-percent-encoding-your-query-string
https://github.com/spork
Ruby3.1でherokuにデプロイしたらクラッシュした
## 起きたこと
herokuにデプロイしたらクラッシュしました。“`
2022-01-24T00:27:57.846452+00:00 app[web.1]: => Run `bin/rails server –help` for more startup options
2022-01-24T00:27:58.231038+00:00 app[web.1]: Exiting
2022-01-24T00:27:58.236805+00:00 app[web.1]: /app/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:34:in `require’: cannot load such file — net/smtp (LoadError)中略
2022-01-24T00:27:58.385873+00:00 heroku[web.1]: Process exited with status 1
2022-01-2
Procの解説
Rubysilverの勉強をするなかで、ぼくが初めてみたprocというものを今回は解説していこうと思います。
(もしミスや誤解がありましたら、ご指摘のほどよろしくお願いいたします)
##ブロック
Procを理解するためには、ブロックというものを理解しないといけません。全然難しくないので、ご安心を。ブロックというのは、簡単にいうと、**do~end**というやつです。例えば
“`
each @hoges do |hoge|
~~~
end
“`
よくみるeach文ですね。
このように、**do~end**で記述されるものをブロックといいます。
ここで大事なポイントなのが、**ブロックはオブジェクトではないという点がポイントです。**
オブジェクトに関して理解があやふやな方は、[こちら](https://qiita.com/IshidaKeisuke/items/787c956dab02e516eab9)の記事を読んでみてください。オブジェクトではないことの最大のデメリットは、**使いまわしができないということです。**
##Proc
Procとは、先ほどブロッ
インスタンス変数の隠蔽
##インスタンス変数の隠蔽
– インスタンス変数はアクセサメソッドで包み、直接参照しないようにする方がよい。
“`ruby
# bad
class Gear
def initialize(chainring, cog)
@chainring = chainring
@cog = cog
enddef ratio
@chainring / @cog.to_f # ← bad!
end
end# good
class Gear
attr_reader :chainring, :cogdef initialize(chainring, cog)
@chainring = chainring
@cog = cog
enddef ratio
chainring / cog.to_f
end
end
“`アクセサメソッド“`attr_reader“`を使うと、Rubyが下記のようなラッパーメソッドを定義してくれる。
“`ruby
def cog
@cog
end
“`
[py2rb] 辞書クラスの拡張
# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 辞書クラスの拡張 (Python)
“`python
def __setitem__(self, key, value):
if isinstance(value, float):
value = int(round(value))
elif not isinstance(value, int):
raise PyteomicsError(‘Only integers allowed as values in ‘
‘Composition, got {}.’.format(type(value).__name__))
if value: # reject 0’s
super(BasicComposition, self).__setitem__(key, value)
elif
【RSpec】ActiveSupport::Durationで返るメソッドテスト
##ActiveSupport::Duration
ActiveSupportの拡張機能の1つ。https://railsguides.jp/active_support_core_extensions.html
##Durationで返ってくるメソッドのテスト
RSpecでDurationで返ってくるメソッドのテストをするとき期待値をどう書こうか少し迷った。
“`ActiveSupport::Duration“` は“`to_i“`で秒数に変換できるので、変換前のDurationと変換後の秒数を比較してテストした。“`ruby
describe ‘#calculate_writing_time’ do
it ‘著者の執筆時間を返すこと’ do
expect(Author.calculate_writing_time.to_i).to eq 10000
end
end
“`##参考
https://techracho.bpsinc.jp/hachi8833/2017_02_07/34824
https://qiita.com/laboc
[py2rb] partition, rpartition
# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# partition, rpartition (Python)
“`python
s = ‘a,b,c’print(s.partition(‘,’))
print(s.rpartition(‘,’))
print(s.partition(‘/’))
print(s.rpartition(‘/’))
print(s.partition(”))
print(s.rpartition(”))(‘a’, ‘,’, ‘b,c’)
(‘a,b’, ‘,’, ‘c’)
(‘a,b,c’, ”, ”)
(”, ”, ‘a,b,c’)
ValueError: empty separator
“`
https://docs.python.org/ja/3.7/library/stdtypes.html#str.partition文字列を区切りますが、空文字の場合エラーとなります。
# partition, rpartition (Ruby)
“`ruby
s = ‘a,b,c’
Railsにおけるto_jsonのオプション
## 概要
今回は先日改めて学んだto_jsonのオプションについてアウトプットしたいと思います。
Railsのコントローラーなどでよく使用します。## 環境
ruby: ‘3.0.1’
rails: ‘6.1.4.1’## to_jsonについて
### to_jsonとは
`to_json`とはオブジェクトをJSON形式に変換してくれるメソッドです。“`ruby
user = { id: 1, name: ‘user1’, age: 22 }user.to_json #=> “{ \”id\”:1, \”name\”:\”user1\”, \”age\”:22 }”
“`
なお上記user定義はこの後の説明で使用していきます。### よく使用するオプション各種
#### 1. include
`include`は__関連付けされているテーブルのカラムも一緒に取得__できるオプションです。
例えば、`user`を取得するときにその`user`が投稿した`post`データも一緒に取得したい場合などに使用します。“`ruby
class User < App
Ruby環境からPythonスクリプトを叩いてデータを得るまで
こんにちは。
Rubyを使っているとき、RubyからPythonスクリプトを叩いて、その結果をRubyで表示することが出来たらいいなと考えました。
想定するケース例としては、**RailsのバックエンドでPythonの機械学習コードを実行したい**といったものになります。今回のブログでは、`Ruby環境からPythonスクリプトを叩いてデータを得るまで`について述べていきたいと思います。
このブログで得ることができる情報は以下になります。
>・Ruby環境でPythonスクリプトを実行したいときの手順
・Flaskの簡単な使い方
・RubyのNet::HTTPクラスの簡単な使い方#実装した手順について簡単に概要を。
私が実装した方法は以下になります。
>**1. Flaskを用いて、PythonスクリプトをAPI化する
2. API化したものをローカル上で実行(Run)する
3. RubyのNet::HTTPクラスを用いてローカル上のAPIを叩く**![image.png](https://qiita-image-store.s3.ap-northeast-1.ama
【Ruby】偶数値の取得
※初心者向け
※アウトプット練習の為
※学習の復習開発環境
rails 6.0.4.4
ruby 2.6.5##問題内容
配列にある値の中から偶数の数をカウントして出力するメソッドを作りましょう。**出力例:**
count_evens([2, 1, 2, 3, 4]) → 3
count_evens([1, 3, 5]) → 0**ヒント**
even?というメソッドを使いましょう。**even?メソッド**
Rubyが元々用意している、対象の数値が偶数かどうかを判断するメソッドです。
対象の要素の値が偶数であれば真を返し、そうでない場合は偽を返します。“`
10.even?
#=> true5.even?
#=> false
“`##解答
“`ruby
def count_evens(nums)
count = 0
nums.each do |num|
if num.even?
count += 1
end
end
puts count
end
“`##解説
配列の中の偶数の数を出
アプリを作る 基本的ログイン機構
###ログイン機能を作る
####そのためにコントローラを作る
“`rb
ubuntu:~/environment/my_app (basic-login) $ rails generate controller Sessions new
Running via Spring preloader in process 15621
create app/controllers/sessions_controller.rb
route get ‘sessions/new’
invoke erb
create app/views/sessions
create app/views/sessions/new.html.erb
invoke test_unit
create test/controllers/sessions_controller_test.rb
invoke helper
create app/helpers/sessions_h