- 1. 【みんな大好きカレーパン】Rubyでe-Statから東京のカレーパンの時系列売価を引っ張るプログラム
- 2. RubyでWebフレームワークを自作する
- 3. 学習記録#3
- 4. 【はじめてのWebAPI】RubyでのHTTPClientの基本構文
- 5. 【脳のリソース不足のあなたに】生Rubyのエラー(例外クラス)と良くある原因
- 6. ruby(1.9.3)+rspec(2.11)カスタムフォーマッター作ってみた
- 7. video_tagで横幅いっぱいに動画を挿入する方法
- 8. privateなgemサーバの構築とgem作成から利用まで
- 9. ruby製静的サイトジェネレータjekyllをdocker-composeで起動する
- 10. MySQL かんたんにテーブルのid番号を1からリセットする方法
- 11. rails generateでのpolymorphic associationの生成
- 12. Rails6 のちょい足しな新機能を試す103(ActionDispatch::Response#content_type編)
- 13. ruby メソッドの作り方
- 14. ruby while、for、loop、break、nextについて
- 15. Ruby独特の代入演算子 ||= の意味について説明してみた
- 16. PythonistがRuby on Railsに異世界転生したときの記録
- 17. Railsの便利機能「Application Template」で rails newと初期設定を自動化できた!
- 18. rescueでエラーを拾ってくれない問題
- 19. 【Ruby on Rails】gem「devise」のREADMEを読んでみた
- 20. クラス、インスタンスをまとめてみた
【みんな大好きカレーパン】Rubyでe-Statから東京のカレーパンの時系列売価を引っ張るプログラム
## はじめに
e-StatのAPIを使って、外部からデータを引っ張るプログラムの紹介です。
外部データを引っ張れるようになるとかなり楽しいです!今回はみんな大好き**カレーパン**の時系列売価を引っ張ってみました!
まだ触ったことのない方に向けて記載してみました!
## この記事が役立つ方
– WebAPI初心者で
– 外部からデータを引っ張ってみたい
– Ruby初心者## この記事のメリット
– 外部データを引っ張る具体的な手順が分かるようになる## 環境
– OS: macOS Mojave version 10.14.6
* シェル: zsh
* 使用言語: Ruby 2.6.3
* HTTPクライアントライブラリ: HTTPClient
* 使用するWeb API: [e-Stat−API](https://www.e-stat.go.jp/api/)
* 取得するデータ:JSON形式## ディレクトリ構成
今回のディレクトリ構成は以下の通りです。price_check_app/
├ conf/ ─ config.yml
├ src/ ─ Pric
RubyでWebフレームワークを自作する
# RubyでWebフレームワークを自作する
## 動機
Webフレームワークを使ってアプリケーションを作成することは良くあるが、実際にその中身やどういった動きをするのか知りたい。
今回は、RailsライクなMVCフレームワークを自作します。## Rackで作成していく
ディレクトリを作成して、 `bundle init` でGemfileを作成します。“`zsh
❯ mkdir my_framework
❯ bundle init
“``rack`をインストールします。
また、デバッグしやすくするために `pry` もインストールします。“`ruby:Gemfile
# frozen_string_literal: truesource “https://rubygems.org”
git_source(:github) {|/repo_name/| “https://github.com/#{/repo_name/}” }
gem ‘rack’
gem ‘pry’
“`“`zsh
❯ bundle install
“`## Rackとは
学習記録#3
#今日やったこと
– progate:RubyⅠ復習
– progate:RubyⅡ-1-2 まで#####課題点
– スケジューリング:大学の課題との兼ね合い→もう少し調整用の遊びを持たせる
– 時間割つくってみる?##progate:RubyⅠ復習
スライド流して復習した上で最終課題をした。
UnityでやるC#と気をつけないと混ざる。並行してやってる悪い点。比較して共通点見つけたりできるのは楽しいけど。##progate:RubyⅡ-1-2 まで
できればⅡを終わらせるまでいきたかったけど〆切近い課題を優先。週末で調整したい。
【はじめてのWebAPI】RubyでのHTTPClientの基本構文
## はじめに
RubyでHTTPClientを使うときの基本構文について記載しました。
Web APIを使って外部データを引っ張るための第一歩!## この記事が役立つ方
– Web APIを触ったことがなくて
– HTTPクライアントを使ったことのない
– Ruby初心者## この記事のメリット
– 外部からデータを引っ張る第一障壁をクリア出来る## 環境
– OS: macOS Mojave version 10.14.6
* ターミナルのシェル: zsh
* Ruby 2.6.3## HTTPClientとは?
Rubyで標準で入っているnet/httpよりも機能面が充実しているHTTPクライアントライブラリ。これを使うことにより、プログラムで外部へHTTPリクエストを送ることが出来るようになります。
## 導入
まずは以下のようにgemをインストールして下さい。“`zsh
gem install httpclient
“`## 基本コード
以下が基本のコードです。
ここからは活用したいデータによって書き方が異なります。“`zsh
# H
【脳のリソース不足のあなたに】生Rubyのエラー(例外クラス)と良くある原因
## はじめに
**元気なときは大丈夫!**ちゃんとエラー文を読み解いて自己解決出来る!でも、頭が疲れて**脳がリソース不足**になっているとき、ついテキトーにググって**時間を浪費**してしまっていませんか?
そんな疲れたあなたのために、「原因はこれじゃない?」と**あたりをつけられる**よう良くある原因を問いかけ形式でまとめました。
※Rails ではなく、**生Ruby**でのエラーを記載しています。
## この記事が役立つ方
– エラー発生時にあたりをつけず
– 手当り次第にググってしまう
– Ruby初心者## この記事のメリット
– Rubyのデバッグ効率UP!## よく発生する例外クラス一覧
– SyntaxError
– NameError
– NoMethodError
– TypeError
– ArgumentError
– SystemStackError
– LoadError## それぞれの良くある原因
### SyntaxError
– `end`の過不足はありませんか?
– `,`の過不足はありませんか?
– `()`や`{}`
ruby(1.9.3)+rspec(2.11)カスタムフォーマッター作ってみた
# | まえおき
本記事はRspecのカスタムフォーマッタークラスの作成に関する記事です。
# | きっかけ
むかしむかしrubyのバージョンを1.8.7から1.9.2へアップしたいおじいさんがおりました。
おじいさんはGemfileやらDockerやらをこねくりまわして、どうにか新しいバージョンでrspecが動くところまでこぎつけましたが、その時点でrspecのエラー数は1000件を超えておったそうな。。。
これは長丁場になると見込んだおじいさんはグーグルスプレッドシートを使ってエラーの一覧を管理しようと考えましたが、1000件を越えるエラーの内容をスプレッドシートに記帳するのは大変な作業です。
おじいさんは、だめもとで飼犬のポチオウにこのことを相談してみました。
するとポチオウは言いました。「おじいさんおじいさん、RspecのエラーをTSVファイルに書き出しするRspecのカスタムフォーマッタークラスを作ればいいんじゃない?」
# | バージョン
– ruby 1.9.3
– rails 3.0.1
– rspec 2.11.0# | rspecはこんな感じで
video_tagで横幅いっぱいに動画を挿入する方法
#はじめに
video_tagで横幅いっぱいに自動再生で動画を流す。
備忘録として残します。#つまずいたところ
– 動画のファイルの置所
– 自動再生
– 横幅を画面いっぱい、縦幅は指定#実装手順
app/assetsの直下にvideosフォルダを作成。
videosフォルダ内に背面で流したい動画を入れる。
(ここでは、test_video.mp4という動画ファイルを入れました。)次にvideo_tagを使って動画を表示
“`index.html.haml
.video-content
= video_tag “test_video.mp4”, loop: true, autoplay: true, muted: true
“`object-fit: cover;をつけることで、動画の横と縦の比率を変更できた。
動画も崩れないで再生されている。“`index.scss
.image-content{
height: 80vh;
z-index: 1;
video{
width: 100%;
height: 100%;
privateなgemサーバの構築とgem作成から利用まで
privateなgemサーバをローカルでDockerで起動し、オリジナルのgem作成からそれを利用するまでの流れを試しましたので、手順を残しておきます。この記事の一番下に載せたリンクを参考にしました。
3段階の手順です。手順ごとにディレクトリを作ります。
– Dockerイメージ作成とgemサーバ起動 (Gem in a Box)
– gemを作成してgemサーバに登録 (`gem inabox`)
– そのgemを利用Docker、Ruby、gem、bundleなどはすでに入っているものとします。
# Dockerイメージ作成とgemサーバ起動
Gem in a Boxというプライベートなgemサーバを作るツールを使います。
“`
$ mkdir docker
$ cd docker
“`このディレクトリに以下の3ファイルを作成します。
Dockerイメージ作成のためのファイル
“`dockerfile:Dockerfile
FROM ruby:2.6.4RUN mkdir /geminabox-data
COPY . /geminabox-app
ruby製静的サイトジェネレータjekyllをdocker-composeで起動する
会社を立ち上げたので会社サイトを作成するために静的サイトジェネレータを使用することにしました!
ruby案件お待ちしております!
使い慣れているrubyとdockerで立ち上げた記録です。## 事前準備
“`dockerfile:Dockerfile
FROM ruby:2.5
RUN apt-get update -qq
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myappEXPOSE 4000
“`“`yml:docker-compose.yml
version: ‘3’
services:
web:
build: .
command: bundle exec jekyll serve –host=0.0.0.0
volumes:
– .:/myapp
– bundle:/usr/local/bundle
MySQL かんたんにテーブルのid番号を1からリセットする方法
# MySQLのid番号 リセット方法
MySQLには初期設定でauto-increment機能が設定されています。
簡単にいうと「自動連番機能」です。ただ番号間にあるレコードを消すとそのid番号のみが欠番となったまま、無視され、最後の番号から連番されてしまうため、テーブル管理において不都合なことが生じる場合があります。
そこで本記事では
###「id番号を1から振りなおす方法」をご紹介いたします。方法のみ知りたい方は以下のリンクをクリック
### [方法へジャンプ](#方法)## 状況:
たとえばこんな感じのテーブルがあり、id番号が順番に振られています。| id | name |
|:—:|:———-:|
| 1 | ANA |
| 2 | DELTA |
| 3 | JAL |
| 4 | UNITED |
| 5 | VANILA |
| 6 | PEACH |しかし、いくつかレコード削除などによって欠番が生じると下のような順番にな
rails generateでのpolymorphic associationの生成
### 要約
要はreferencesを使って`polymorphic association`を作りたい### model構成
UserがいいねするためのLikeモデルで、いいねする対象がpolymorphicになっている### 書き方
“`rubybundle exec rails g model Like user:references likable:references{polymorphic}:index
### 参考
https://railsguides.net/advanced-rails-model-generators/
Rails6 のちょい足しな新機能を試す103(ActionDispatch::Response#content_type編)
# はじめに
Rails 6 に追加された新機能を試す第103段。 今回は、 `ActionDispatch::Response#content_type` 編です。
Rails 6 では、 `content_type` は、 Content-Type Header の情報をそのまま返すようになります。Ruby 2.6.5, Rails 6.0.0, Rails 5.2.3 で確認しました。
また、RSpec のバージョンは、 3.9.0 です。“`shell
$ rails –version
Rails 6.0.0
“`今回は、User CRUD を作り、request spec を変更することにより確認します。
RSpec の導入などについては、 [Rails6 のちょい足しな新機能を試す24(unfreeze_time 編)](https://qiita.com/suketa/items/9830f814ee824ca4e681) などを参考にしてください。
# Rails プロジェクトを作る
“`
$ rails new rails_sandbox
ruby メソッドの作り方
ドットインストール(https://dotinstall.com/)を見て
自分なりにまとめたものです。#メソッド
“`
def sayHello
puts “Hello word!!”
endsayHello
“`
実行結果:Hello word!!
– メソッドを呼び出すときはメソッド名書くだけで呼びだせる
“`
def sayHello(name)
puts “Hello #{name}!!”
endsayHello (“Angela”) #()は省略可能
“`– 引数を渡すことも出来る
実行結果:Hello Angela!!
“`
def sayHello(name = “Angela”)
puts “Hello #{name}!!”
end
# nameを渡されなかった時に”Angela”が渡される
sayHello“`
– 引数にデフォルト値も設定できる
実行結果:Hello Angela!!
“`
def sayHello(name = “Angela”)
retur
ruby while、for、loop、break、nextについて
#while
“`
i = 0
while i < 10 do puts "#{i}: hello" i += 1 end ``` ※ 「i = i + 1」は「 i += 1 」と同様の意味 # times - timesは数字オブジェクトのメソッド ``` 10.times do |i| puts "#{i}:hello" end ``` - do~endの中で繰り返したい処理を繰り返す - do の後で|i|を定義することでwhileの時と同じように何回ループしているかが分かる ###上記のtimesは1行で書くことが出来る ``` 10.times { |i|puts "10#{i}:hello" } ``` # for文 - doは省略出来る ``` for i in 18..20 do p i end for color in ["red", "blue"] do p color end for name,score in {aratomai: 200, Mikkey: 500} do
Ruby独特の代入演算子 ||= の意味について説明してみた
# 代入演算子とは
Rubyも含め、多くのプログラミング言語では、`x`に`1`を加算する操作を以下のように記述[^インクリメント演算子]できます。
“`
x = x + 1
“`この操作は、Ruby(ほか多くのプログラミング言語)において、以下のような短縮表記が可能です。
“`
x += 1
“`このときの`+=`という演算子、並びに加算以外の演算に対して同様の動作を行うように定義された演算子を総称して「代入演算子」と呼びます。
[^インクリメント演算子]: なお、Ruby以外の言語では、`x = x + 1`を`x++`と表記できるものがあります。こうした使い方をする`++`を「インクリメント演算子」と呼びます。しかしながら、Rubyでは`x++`のような表記を使うことはできません。
## `+=`以外の代入演算子
Rubyにおいては、`+=`以外の代入演算子としては以下のようなものが存在します。
“`
# rails console
>> x = 1
=> 1
>> x += 1
=> 2
>> x *= 3
=> 6
>> x -= 8
=> –
PythonistがRuby on Railsに異世界転生したときの記録
## 初めに
これまではPHPかPythonでの開発がほとんどだったのですが、様々な事情により、Ruby on Railsの案件に取り組むことになりました。これまでよくやっていたPython + Flask構成と比較しながらRuby on Railsを勉強しているのですが、そのmemoを残しておきたいと思います。内容は随時更新します。### 環境
* ubuntu 19.04 eoan ermine
* rbenv version 1.1.1
* ruby verison 2.6.5## 目次
* Rubyの環境構築
* Railsの導入## Rubyの環境
Pythonでは、以下の環境を使っていました。
“`
* pyenv(Pythonのバージョン管理)
* pip(デフォルトのPackage管理)
* pipenv(仮想環境構築+Packageの管理)
“`Rubyでそれぞれに対応するのは、(というかPythonのそこら辺のツールはRubyのツール群に触発されて開発されたものが多いので、こちらのほうが大元というべきなのですが、)
“`
* rbe
Railsの便利機能「Application Template」で rails newと初期設定を自動化できた!
Railsアプリの新規作成から初期設定までを`rails new`と`rails db:create`だけで完了させます。
rails newのあとにひたすらつづくgemのインストールや初期設定、めんどくさくないですか?
ちょっとしたtypoでRailsAbort! こういった人的ミスによるグツグツから開放されたくないですか?
テンプレートファイルは1つにまとめておけるので、Railsアプリ新規作成時の手順書としてもメンテできて一石二鳥ですよ!## 環境
– MacOS 10.14.6
– Ruby 2.6.3
– Rails 5.2.3
– MySQL 8.0.16
– Docker 19.03.4
– docker-compose 1.24.1※Dockerじゃなくてもイケます。
## 方法
RailsのApplication Templateという機能を使用します。
## やること
– ApplicationTemplateファイルをつくります。
– `rails new -m app_template.rb` コマンドをうちます。
– `rails db:cre
rescueでエラーを拾ってくれない問題
#BackGround
[Postman](https://www.getpostman.com/)を使ってRailsのアクションを設計どうりに処理してくれるかテストしていました。
問題になったのはこの“`user_controller“`のshowアクション“` user_controller.rb
class UsersController < ApplicationController def show @user = User.find(params[:id]) render json: { status: 'success', data: @user } rescue ActiveRecord::RecordNotFound render json: { status: 'error!', data: @user.errors } end private def user_params params.require(:user).permit(:user_name,:email,:password,:pa
【Ruby on Rails】gem「devise」のREADMEを読んでみた
#はじめに
オープンソースのソフトウェアやプログミング言語、ライブラリには、間違いなく公式のドキュメントが存在します。
学習のために無料のラーニングシステムを使うこと、書籍を購入することもいいですが、**個人的には、公式ドキュメントには必ず一度は目を通すべきもの**だと思ってます。
なぜなら出版されてしまった本とは異なり、常に最新の状態にアップグレードされ、多くの人が目にするので間違いが日々修正されているからです。
**英語が読めない? 長くて読む気がでない? ならばググりましょう!**
例えば英語がわからないなら、この世の中便利な時代なので、英語のドキュメントについてすでに読んだ人の記事などが検索してヒットするはずです)#やったこと
Ruby on Railsの開発環境下で、**認証機能を実装したい際に利用することが多いgem「devise」**のREADMEを読んでみました。
※2019年10月時点の情報です。https://github.com/plataformatec/devise
# deviseが持っているモジュール(簡単に言えば機能)
1.
クラス、インスタンスをまとめてみた
#現在の学習進捗
Proggate 1-4まで修了
※各lessonを3周はしている
4まで進めましたが、1-3と比べてとっつきにくい内容でしたね。
3周しましたがまだ頭に落とし込めていない箇所が多々あります。4章の内容
– クラスとインスタンス
– インスタンスメソッド
-「料理注文システム」を作ろう
最終的には料理注文システムを作っていくプログラムになっております。#クラスとは
– データとそのデータを取り扱うメソッドをひと固まりにまとめたもの
– プログラミングで設計図のことをクラス、「もの」のことをインスタンスという
参考にしたURL# initializeの基本的な使い方
・classデータの初期化処理
・newされた際に一度だけ実行される
・オーバーロードできない
・メソッド内ではreturnは使えない
参考にしたURL# インスタンス
– インスタンス化とは、classの定義の元に新たな変数を作成