- 0.1. Ruby条件演算子ドリル
- 0.2. 個人でアプリ作りました!(読書管理アプリ)
- 0.3. インスタンス変数 と attr_* について
- 0.4. line bot
- 0.5. 【アウトプット】やりたいことからRubyを最速で学ぶ・その1「作りたいものを考える」
- 0.6. RailsからFirestoreをいじりたい
- 0.7. [Rails]createメソッドとnew + saveメソッドの違い
- 0.8. RSpecを導入して単体テストコードを記述する
- 0.9. メソッドを外で使用したい時
- 0.10. 読みやすいコードを書くために意識すべき基本的ルール
- 0.11. AWSの請求を日次でLambda for RubyでSlackに通知する
- 0.12. 正規表現を使用するバリデーションの実装
- 0.13. rubyの検索問題
- 0.14. 文字列の配列を数値に変換する
- 0.15. Railsでlib以下に作った自作クラスを呼び出す
- 0.16. RubyのHashは引数が多いとスタックオーバーフローする
- 0.17. Railsで Payjp.js V2 でクレジットカード登録機能実装 フリマアプリ
- 0.18. 【個人アプリ作業メモ】フォローボタンの場所を移す
- 0.19. Rubyでカレンダー問題をやってみた
- 1. カレンダー問題 自分の回答
Ruby条件演算子ドリル
#####問題
正の整数を入力します。その整数が、
10の倍数(10,20,30…)からの差が
2以内であるときはTrue
それ以外は10の倍数との差は○ですと表示されるようにしましょう。出力例:
near_ten(12)→True
near_ten(17)→10の倍数との差は3です
near_ten(23)→10の倍数との差は3です#####模範解答
“`ruby
def near_ten(num)
remainder = num % 10
if remainder <= 2 || remainder >= 8
puts “True”
elsif remainder <= 5 puts "10の倍数との差は#{remainder}です" else puts "10の倍数との差は#{10 - remainder}です" end end ``` #####考察 これは、シンプルな条件式で回答できるのに、頭を柔らかくできないくて答えられませんでした。 %の割り算のあまりは、意外とよくドリルに出てくるイメー
個人でアプリ作りました!(読書管理アプリ)
個人で制作・公開したアプリの説明をしようと思います。
実際に使ってみていただけると嬉しいです。↓こちらからアクセスしてみてください
https://www.booknotes73.com/## 概要
読んだ本を管理するアプリです。## 開発経緯
私は2年ほど前から読書をするようになったのですが、本の内容って割とすぐに忘れてしまうんですよね。最初はマインドマップのアプリ(iThoughts)で内容を記録していました。
しかし、スマホからだと文字の入力が煩わしくデータの管理もしにくかったんですよね。
なので、**PCで簡単に管理できたら良くない?ということでwebアプリを作ることにしました。**既存サービスのブクログというサイトが似たようなことをやっておりまして、少しでも差別化したいなーと思ったので以下の点を**工夫**しております。
* 本の内容を記録するフォームを項目ごとに分けて書きやすくしている
* 本を読んで感じた実践したいことをアクションプランとしてマイページ上に表示し、進捗具合を管理できるようにしている## 操作説明
### ユーザー登録・ログイン
インスタンス変数 と attr_* について
## 概要
便利な機能であっても、少なからずデメリットも発生することがあると思います。
なので使う側はメリット・デメリットのバランスを判断して、適切に実装を行うことができるようになる必要があるのでは?
と思い、記事にまとめてみました。実際に保守しづらさ のほうが勝っているケースがあり、改めて必要性があるのか?を検討するための参考になればと思います
## まずattr_*を使うとどうなるか?
`attr_reader :name` とすることで引数の名称でgetterメソッドが定義されます
“`ruby
def name
@name
end
“``attr_writer :name` とすることで引数の名称でsetterメソッドが定義されます
“`ruby
def name=(val)
@name = val
end
“``attr_accessor :name` はreaderとwriterの複合メソッドです
通常、インスタンス変数はインスタンスの内部にて `@hoge` でアクセスできるものがpublicでメソッドが定義されるため外部からイ
line bot
# 名言bot
自分の好きな偉人の言葉をランダムで返信してくれるbotを作りました。![スクリーンショット 2020-08-27 11.01.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663122/3ce5be87-4fed-1a5b-00b1-3e010c818cc6.png)
【アウトプット】やりたいことからRubyを最速で学ぶ・その1「作りたいものを考える」
# はじめに
Qiitaをご覧になっているエンジニアのみなさん、アウトプットはしていますか?
アウトプットすることで学習効率が確実に上がります!「ドキッ!ぼく、問題練習ばっかりしている・・・」
というそちらの方。大丈夫さぁ〜!それでこの記事を書きました。あなたのために!
効果的な学習法は、アウトプットです。自分でオリジナルプログラムを作ることです。
オリジナルプログラムを作る流れを説明していますので、最後まで読めばきっとRubyの基礎を理解できるはずです!# 対象となる読者
本記事は次の方々へ向けて書かれています。– プログラミング初心者でRubyを学びたい
– Rubyは少し触れたけど、まだイマイチ分からない
– とりあえず何か作ってみたい!といった人たちにわかりやすく伝えるつもりです。
# この記事で学ぶこと
本記事は、わたしがプログラミング学習2ヶ月目で作成したオリジナルプログラム「あっち、むいて、ホイっ!ゲーム」を通じて、Rubyの基礎に関する以下のような知識を学びます。– メソッド
– クラス
– 様々な処理なお、「あっち、むいて、ホイっ!ゲ
RailsからFirestoreをいじりたい
メモのまま投稿します。
#0. 前提
– `rails new`済み
– firebaseでプロジェクト作成済み#1. gem インストール
`gem “google-cloud-firestore”`#2. 秘密鍵の生成
「設定」→「新しい秘密鍵の生成」からjsonファイルをダウンロード
Railsプロジェクトにおく#3. その他設定
“`
require “google/cloud/firestore”firestore = Google::Cloud::Firestore.new(
#ここに自分のプロジェクトID
project_id: “my-project” ,
#ここに「2.秘密鍵の生成」のjsonファイルのpathを指定
credentials: “/path/to/keyfile.json”)
“`#4. 以上でデータを取ってこれる
1.データの取得
“`
test_val = firestore.col(“test_col”).doc(“test_doc”).get().data[:test_field]
“
[Rails]createメソッドとnew + saveメソッドの違い
#環境
・Rails 6.0.3.2
・mysql Ver 14.14 Distrib 5.6.47
・osx10.15#あらすじ
`Rails`で`Contoller`を学ぶと`new`,`save`,`create`,`destroy`などの`Active Recordメソッド`を学びます。
その時に`createメソッド`は`new`+`save`と学びました。初心者の私は「じゃあ`create`の方が簡潔で見やすいからコッチを使うんだ!」と勘違いしていて自身をアプリを作成した時に`create`を用いてうまく動作しないことがあったので、その時の学びを書きます。
#new + saveに分ける理由は?
要は`createアクション`で`createメソッド`を使わずに`new`+`save`を用いるときはどんなとき?
例えば、コントローラー内の記述“`
def create
@message = Message.create(message_params)
end
“`
ではなく“`
def create
@message = Messages.n
RSpecを導入して単体テストコードを記述する
#概要
今回は、userモデルの単体テストコードをrspecを導入して記述する流れをまとめます。それに伴い、FactoryBotとFakerも導入して実装したので記述します。
###FactoryBotとは
テスト用のデータを作成してくれるツールです。###Fakerとは
FactoryBotで作られたデータにランダムに中身を追加することが出来ます。##gemの導入、準備
ポイントとして、Gemfileの記述場所に注意しましょう。
一番下ではありません。“`ruby:gemfile
group :development, :test do
gem ‘rspec-rails’
gem ‘factory_bot_rails’
gem ‘faker’
end
“`このあと
$ bundle install
します。次に、コマンドを実行して、RSpecを書くためのディレクトリなどの生成を行います。
“`:ターミナル
rails g rspec:install
“`
すると、ディレクトリやファイルが生成されるはずです。次に、.rspecに以下の
メソッドを外で使用したい時
【概要】
—————————————-
1.結論2.メソッドとは何か
3.どのように使用するのか
4.別解
1.結論
—————————————-
インスタンス変数とインスタンスメソッドを使う!2.メソッドとは何か
—————————————-
>”目的を達成するために決められたやり方。方法。方式”と出てきますが、簡単に言うと変数にくっつけて使えたり(インスタンスメソッド)、方程式のような元々あるメソッド(lengthやeach,times等々)のことを指します!
外で使用する場合には、スコープの概念が出てくるので
下記の記事に少しだけ書いています!”変数とインスタンス変数の違い”
3
読みやすいコードを書くために意識すべき基本的ルール
“`
前提
プログラミングを始めたて(1~2ヶ月)の自分が学習した内容をまとめています。
実際の現場では通用しないことや間違っていることなどあるかもしれませんが、
お気づきの際はコメントにてご報告いただければ幸いです。
“`
プログラミング初学者の私が、“`
読みやすいコードを書く必要性
どのようにすればわかりやすいコードを記述できるのか
“`
について学んだことをまとめました。## なぜ読みやすいコードを書く必要があるのか
読みやすいコードを書く理由には大きく3つあります。
・個人、組織の生産性が上がる
・保守性が上がる
・柔軟な開発体制が構築できる
プログラミングでの開発は基本的には複数人で行うため、自分さえわかればいいというコードの書き方では生産性は頭打ちになり、柔軟な開発体制からは程遠くなってしまいます。この3つを実現するために**リファクタリング**が行われています。
リファクタリングとは
実装した機能に影響を与えずにソースコードを読みやすい状態に改善することです。
このリファクタリングによって一緒に開発に携わる人が実装されているコードの理解や修正を簡単に
AWSの請求を日次でLambda for RubyでSlackに通知する
先行事例をググると Python の例が多かったので、[Ruby][doc] で手でポチポチやったときの最低限の設定メモ。
# 1. AWS Lambda をランタイム Ruby で作成
WebのLambdaコンソール画面からボタンポチポチで作成
– ランタイムを `Ruby 2.7` で
– 実行ロールに `ce:GetCostAndUsage` 付与
– [Cost Explorer の権限は root で有効にすると出てくる][ce_auth]はず# 2. Rubyで取得処理を書く
“`ruby:lambda_functions.rb
require ‘aws-sdk’
require ‘net/http’
require ‘uri’
require ‘json’# Lambdaのエントリーポイント
def lambda_handler(event:, context:)
fetch_cost
.then { |response| pretty_response(response) }
.then { |message| notif
正規表現を使用するバリデーションの実装
#概要
今回は、正規表現を使用したバリデーションの実装方法についてまとめていきます。最初に、バリデーションと正規表現についてざっくり述べておきます。
##バリデーション
データを保存する際にバリデーションをかけることによって、無効なデータを弾いてくれます。
空のデータを登録できなくしたり、文字列に含まれなきゃいけない文字を指定したり、文字数制限をしたり、、、
様々なバリデーションがあります。代表的なものとして、nicknameを入力する際に空にならないようにバリデーションをかけてみましょう。
“`ruby:models/user.rb
—省略—
validates :nickname, presence: true
—省略—
“`こんな感じでそれぞれの入力項目にバリデーションをかけます。
##正規表現
正規表現とは、記号と文字列を組み合わせた構文のことで、検索対象となる文から指定した文字列パターンを抽出することができます。よく使うものだと、
\A…文字列の先頭にマッチする
\z…文字列の末尾にマッチする
のような感じで他にもいくつかあり
rubyの検索問題
####問題
配列に任意の値が存在するかどうか、検索するコードを作成しましょう。
任意の値が配列内に存在しない場合は、「値は配列内に存在しません」と表示し、
存在する場合は、配列の何番目にあるかを表示してください。配列 array=[1,3,5,6,9,10,13,20,26,31]
検索はバイナリーサーチ(2分割検索)を使用して行います。
####バイナリーサーチとは
ソート済みのリストや配列に入ったデータ(同一の値はないものとする)に対する検索を行うにあたって、 中央の値を見て、検索したい値との大小関係を用いて、検索したい値が中央の値の右にあるか、左にあるかを判断して、片側には存在しないことを確かめながら検索していく方法。
1回の処理で選択肢が半分になるので、処理速度の向上が期待できる。#####出力例
“`html
検索したい数字を入力してください
5
5は配列の2番目に存在します
“`
“`html
検索したい数字を入力してください
7
7は配列内に存在しません
“`
#####ヒント
まず.countメソ
文字列の配列を数値に変換する
## 文字列の配列を数値に変換したい!
“`ruby:test.rb
> “1,2,3”.split(“,”)
=> [“1”, “2”, “3”]
“`とあるプログラミングテストとかで標準入力で値を受け取って配列に直すのですが、split使うと
文字列になっちゃうから数値に戻したいなーとか思ってたんですよね。※そもそも標準入力で値受け取る時にもっと効率的な方法あるんじゃ、、、、笑
、、、、、、とりあえず調べてたら便利なのがあるじゃないですか。
__mapメソッド__
“`ruby:test.rb
> “1,2,3”.split(“,”).map(&:to_i)
=> [1, 2, 3]
“`
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/map.html
「mapメソッドは、要素の数だけ繰り返しブロックを実行し、ブロックの戻り値を集めた配列を作成して返します」
ざっくり考えると、指定した
Railsでlib以下に作った自作クラスを呼び出す
#config/environment.rbに自作クラスをrequire
—-lib/
├ assets/
├ tasks/
└ test.rb <-追加 ```ruby:test.rb class Test def aa puts "aa" end end ``` ##config/environment.rbを編集 ```ruby:environment.rb # Load the Rails application. require_relative 'application' require 'test' #これを追記 # Initialize the Rails application. Rails.application.initialize! ``` ##使えるかテスト ``` % rails c Running via Spring preloader in process 62643 Loading development environment (Rails 6.0.3.2) [1] pry(mai
RubyのHashは引数が多いとスタックオーバーフローする
ActiveRecordを使い、key=>valueのHashを作成していた。
“`ruby
@users = Hash.send :[], *ActiveRecord::Base.connection.execute(‘SELECT `id`, `name` FROM `users`’).map {|x| x}.flatten
@users[1]
# => “ユーザー1”
“`Hash[*Array]をしているため、executeで取得してくるレコード数が一定を超すとスタックオーバーフローとなる。
ActiveRecordの使い方、Hashの作り方の両方に問題がある。
“`ruby
@users = User. User.pluck(:id, :name).to_h
@users[1]
# => “ユーザー1”
“``.pluck`で必要なカラムを取得し `.to_h`でHash化
Railsで Payjp.js V2 でクレジットカード登録機能実装 フリマアプリ
# 概要
payjp.jsを使用し、カスタマイズ可能なv2での実装の記事が全くなかったので
共有したと思います。
v1での実装記事は沢山のあったのですが、、、、>###payjp.js v2をβ提供しました
>カード情報のトークン化機能を提供しております payjp.js につきまして、最新のPCI-DSSに準拠した payjp.js >v2をこの度β提供いたしました。> ###payjp.js v2 とは
>payjp.js v2は、従来のカード情報のトークン化機能に加えて、最新のPCI-DSSに準拠したカード情報入力フォーム>生成ライブラリとなります。>機能や詳細については、リファレンスおよびガイドをご覧ください。 また、デモも複数用意しております。
>###移行のお願い
>現行の payjp.js v1につきましては、v2の本リリース(4月上旬を予定)と同時に、新規での利用を非推奨とさせてい>ただく予定となっております。>v1をすでにご利用の加盟店様におかれましては大変お手数ですが、payjp.js v2への移行をお願いいたします。
>v1からの移行手順につ
【個人アプリ作業メモ】フォローボタンの場所を移す
フォローボタンは前に設置してたのだが、
前どこに設置してたか覚えていないのと、
その場所がかなりわかりにくくて、
普通にそこだとまず使わないだろという場所だったので、
もっとわかりやすく使いやすい場所に移すことにする。移動先はここ。
![スクリーンショット 2020-08-25 午後7.28.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547640/a625007a-1c2d-b2da-5d80-ae73da787f36.png)
各投稿のcurrent_user.nameの横。まず前にどこかに作ったフォローボタンを探しに行こう。
見つけた!!
“`ruby:app/views/users/show.html.haml
.users-show
= render ‘follow_form’
= render ‘stats’
“`
この部分テンプレートで呼び出してる。どこから呼び出してるかというと、ここ。
“`ruby:app/views/users/_follow_
Rubyでカレンダー問題をやってみた
Railsを絶賛勉強中の初心者です。railsを学び初めて1ヶ月ほどになりました。
改めてRubyの学習を1からしたいと考えている中、Rubyプログラマの伊藤さんが書いている以下の記事に辿り着きました。[アウトプットのネタに困ったらこれ!?Ruby初心者向けのプログラミング問題を集めてみた(全10問)](https://blog.jnito.com/entry/2014/06/06/104420)
今日はこちらを参考にさせていただき、自分の書いたコードとその中で学んだことについて書いていきます。
今後も自分なりにブラッシュアップをしていきたいと思っていますが、一度他の方に見てもらいご指摘も受けれたら幸いです。カレンダー問題 自分の回答
まずは、作った自分のプログラムは以下の通りです。
“`calender.rb
require ‘Date’
#今月の最終日を確認するメソッド
def last_day(year,month)
if month == 2 && Date.valid_date?(year,month,29)
retu
[Ruby] rqrcodeで連結QRコードを生成する(実践編)
* [知識編はこちら](https://qiita.com/c-flat/items/3dd4ca512632ce97fdca)
* では、実際に連結QRコードを出力してみましょう。– 知識編にも書きましたが、今回は処方箋のQRコードで使う `8bit_byte` モードの連結QRコードを生成します。
– 処方箋に書き込むデータの実態は ShiftJISエンコーディングのCSVデータファイルです。(改行=CR/LF・EOFあり)([こちら](https://www.jahis.jp/standard/detail/id=714)で定義されています)# rqrcode を改変する
### rqrcode のライブラリ構成について
* rqrcodeは、v1.0.0からライブラリの構成が分割され、生成機能の呼び出しや画像ファイルへの出力クラスを備える[rqrcode](https://github.com/whomwah/rqrcode) と QRコードの生成のcore部分の[rqrcode_core](https://github.com/whomwah/rqrco