VSCodeでRubyのコードを書いてデバッグするためにしたこと
# はじめに
この記事はrubyを学び始めて半年ほどの人間が書いたものです。
VSCode上でrubyのコードの編集、デバッグをするためにしたことを書いています。
# 環境
記事の内容について以下の環境で動作確認しています
macOS Catalina バージョン: 10.15.1
Visual Studio Code バージョン: 1.40.1
# 手順
1. rbenvをインストールする
2. rbenvを使ってrubyをインストールする
3. Bundlerをインストールする
4. debase (rubyのデバッガ) をインストールする
5. ruby-debug-ideをインストールする (debaseとVSCodeを連携できるようにする)
6. VSCodeにrubyの拡張機能を追加する
## 1. rbenvをインストールする
rubyのバージョンを切り替えられるようにするためにrbenvをインストールします。
ターミナルを開いて以下のコマンドを実行します。
“`bash:
$ brew install rbenv
“`
rbenvコマンドが使えればインストー
実践編
—–
progateのRubyのレッスンは全5章。高校以来こういう小難しいものとは無縁だったわたしからすると少々不安が多かったが実際はこんな感じだった。
【1章】 スライドと説明を見れば自分で答えを考えてスルスルっと正解してサクサク進める。
—————————————————————————–
最低限の用語
———-
文字列 (”文字列”) (”)で囲んだ言葉、数字のこと 囲まないとプログラミングされちゃう。
コメント (#)をつけると1行だけその後ろは全てプログラミングとは関係ないメモ帳にできる 応援メッセージやそのときの気分を書くのに使える。
計算記号 普段の日常通り。 (%)はあまり馴染みがないから注意割り算したときの余り。
変数 箱。一つ厄介なのは大きさがミニマムな時もあればハッシュが入るくらい大きい時もありサイズの概念がない?
要素 なにかすごい大切ななにかのように感じるが見かけだけ。要は箱(変数)の中身
比較
今現在わからないことについて
ruby on railsの
バグ修正の問題で、
何が原因か判断できない。
その理由はMVCの流れを理解できていないから。
細かいルール(どのように記述するかなど)
改善策としては、
これから先の練習問題をときつつ
どんなバグが多いのか体感して行く。
それで自分の理解できていない部分を
細かく洗い出す&よく出るバグの修正を重点的に出来るようにする。
今やるべきことは
問題をといて、自分の苦手を知ること。
どんなバグが多いのか知ること。
わからないことは人に聞くこと。ぐぐること。以上!
今日学んだことは
ハッシュ、引数、バグ修正の考え方。
ハッシュについてわからないことが多かったので、すっきりした。
ハッシュとは箱であり、配列にきれいに並んで入っている。
一つ一つに番号がある。
ハッシュから取り出すには、
ハッシュ名[:キー名]
ハッシュに入れるには
ハッシュ名[:キー名]=バリュー名
である。
“`ruby
puts [‘ボ’, ‘ジョ’, ‘レ’, ‘ヌ’, ‘ボ’].shuffle.map.with_index {|x, i| i > 1 ? x+’ー’ : x}.join
“`
Ruby はこういうの書くのが簡単でいいですね。
後置なんちゃらというやつです。
処理を先に、条件式を後ろにすることでスマートに書けます。
#後置if
“`ruby
num = 1
puts “0より大きいよ!” if num > 0
“`
#後置unless
“`ruby
num = 1
puts “0じゃないよ!” unless num == 0
“`
it’sスマート!
ただし、条件式が複雑な時は普通の方を使いましょう。
ではまた!
今回は[やさしい図解で学ぶ 中間テーブル 概念編](https://qiita.com/ramuneru/items/db43589551dd0c00fef9)のつづきとして、
実際に中間テーブルを作成するほか、モデルとマイグレーションについてRubyのフレームワークであるRailsを用いて学んでいきましょう。
## ⭐️テーブル作成に必要なファイル
DB設計が終わったら、
「DBのデータを取り扱うファイル = **モデル**」と
「テーブルの設計図となるファイル = **マイグレーション**」を作らなければいけません。
まず、テーブル作成時にとりあえず必要なファイルは
# 環境
macOS Mojave 10.14
# 0. Homebrewをインストール
“`bash
$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
“`
公式ページ(https://brew.sh/index_ja)
# 1. Rubyをインストール
### rbenvをインストール
Rubyのバージョン管理ツールであるrbenvとそれに必要なツールをインストールします。
“`bash
$ brew update
$ brew install rbenv ruby-build
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
$ source ~/.bash_profile
“`
rbenvを最新版に更新します。
“`bash
$ brew upgrade rbenv
“`
rbenvをインストールできたか確認します。
バージョンが表示されれ
Railsチュートリアルの冒頭で概念的な説明があまりなくQiitaの情報も断片的で
チュートリアルの理解に苦しんだため、自分なりに整理した資料です。
独学だとよくわからないコマンドを連打するよりざっくりまずは全体感を理解した方が頭の中にすんなり入るはずと思うのは私の気のせいですかね…
〜処理の流れ〜
Browser -> Route(config/routes.rb) <-> Controller <-> Model <-> Database
Browser <- View <-> Controller
〜MVCとは〜
model(s): データベースの操作
view(s): UI処理
controller(s): models, views の連携、
viewsのディレクトリ名と結びつき、
defで定義するアクションは
viewsディレクトリ以下のファイル名と紐付き
rails 主要コマンド一覧: https://railsguides.jp/command_line.html
※コマンドが短縮されることがある generate が g
〜Gem, Gemを管理す
Ruby
Rails
Gem
RubyOnRailsTutorial
いろんな言語を触っていると、言語の重要な特徴はともかく、細かい文法や記号の使い方などがだんだんごっちゃになってきてしまいます。あれ、これってこの言語だとどう書くんだっけ?ってなることがよくあります。前はよく使っていた言語なのに、ちょっと離れただけでもう忘れてしまった、とショックに感じることもあります。なので、こういうメモを作っていこうと思います。
# Scala
“`scala
if (x >= 30) {
…;
} else if (x >= 0) {
…;
} else {
…;
}
// 文ではなく式
val max = if (a > b) a else b;
“`
– 条件式は論理値であることが必要
– C言語と同様に`{ }`の中の式が1つの場合は`{ }`を省略可能
– 文ではなく式
[Conditional Expressions – Expressions | Scala 2.13](https://scala-lang.org/files/archive/spec/2.13/06-expressions.html#c
Java
Ruby
Python
Scala
Rust
“`
# bundle exec rails c
Loading development environment (Rails 5.1.6)
“`
“`
> File.basename(Rails.root.to_s)
=> “server”
“`
## はじめに
Dockerで**Ruby on Rails + MySQLの環境**を構築中にいわゆる**「ポートの衝突」**に遭遇したので解決までを記載します。
同じような箇所でハマった方の参考になればと思います。
## この記事が役に立つ方
– DockerでRails+MySQLの開発環境を行いたいと考えている
– Docker初心者
## この記事のメリット
– ポートの衝突を回避する方法が分かる
## 環境
– macOS Mojave バージョン10.14.6
– シェル:zsh
– Ruby:2.6.5
– Rails:5.2.2
– MySQL:5.7
– Docker:19.03.5
## Dockerfile
こちらを参考に、rubyのバージョンのみ、現行安定版である**2.6.5**にしています。
[丁寧すぎるDocker-composeによるrails5 + MySQL on Dockerの環境構築(Docker for Mac) – Qiita](https://qiita.com/azul915/items/5b7063cbc80192343f
Ruby
Rails
MySQL
初心者
Docker
#今回の試み
###・ 気象データAMeDASの10分ごとの値を一気に取得する
###・ PythonとRubyの両方でスクレイピングしてみる
スクレイピングするデータは[こちら](https://www.data.jma.go.jp/obd/stats/etrn/view/10min_s1.php?prec_no=44&block_no=47662&year=2019&month=01&day=01&view=p1)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354874/13bf9771-17c0-c790-a403-251492816bfa.png)
#1. Pythonによるスクレイピング
“`python
# -*- coding: utf-8 -*-
import pandas as pd
import urllib.request
from bs4 import BeautifulSoup
url = ‘https://www.data.jma.go.jp/ob
Ruby
Python
Mechanize
BeautifulSoup
気象データ
## スタート
今日から日々学んだこと等を書いていこうと思います。
ミス等たくさんあると思いますが、ご指摘頂けると嬉しいです。
自己紹介
・ケンシロウ
・北海道大学2年
2019年8月から2ヶ月間、techacademyにてwebアプリケーションコースを受講し、rubyとrubyonrailsを学習。
受講終了後、簡単なブログ機能を持ったアプリを作成。
12月から、札幌web系スタートアップ会社でインターン予定。
将来はプログラミングスキルだけでなくいろいろなスキルをつけ、自分でサービスを作って提供したい。
Ruby
インターン
RubyOnRais
学生エンジニア
## はじめに
Rubyで、入力された数値を素因数分解するコードを書きました。
[primeライブラリ](https://docs.ruby-lang.org/ja/latest/library/prime.html)というライブラリを用いる方法もあるようですが、このライブラリを用いずに書かれたRubyでの素因数分解に関するコードがググっても案外見当たらなかったので、あえて用いずに書いたコードを下記に示します。
こちらの記事を参考にさせていただきました:[C言語で素因数分解](https://qiita.com/Wakaba_C/items/16d076ef2cc07836a29d)
## 書いたコード
(2019.11.22 @scivola さんから、無駄な記述や、無駄にforループを回してるところについてのご指摘をいただき、コードを修正しました。@scivola さん、ありがとうございます。)
~~~ruby:prime_factorization.rb
prime_list = [] # 算出された素数を格納する配列
while true do
print “
動作確認環境: Ruby: 2.6系, Rspec: 3.8系, OSは問わないはずw
# こんなとき
たとえば、グループで必須チェック(グループ内のいずれにも値が設定されない場合にエラーとする)を行うメソッドを作ったとき
“`rb
require ‘active_support’
require ‘active_support/core_ext’
class Validator
def required_group(data, *columns)
joined_columns = columns.join(‘と’)
flg_present = false
columns.each do |column|
flg_present |= data[column].present?
end
return “#{joined_columns}のうちいずれか1つは入力必須です” unless flg_present
end
end
“`
RSpecではこう書くとよろしい
“`rb
describe Valid
Railsではviewファイルで使う部品(パーシャル)を作り、他のviewファイルから呼び出して利用することができます。
##パーシャルの基本ルール
・ファイル名はアンダースコアから始まる
・`render ‘{ファイル名}’`で呼びだす
・パーシャルが同じディレクトリにある時は`render ‘{ファイル名}’`、違うディレクトリの時は`render ‘{ディレクトリ名/ファイル名}’`で呼びだす。(拡張子不要)
##使ってみる
簡単なTODOアプリのエラーメッセージをパーシャル化して利用します。
・[Ruby on Railsで簡単なアプリを作成](https://qiita.com/d0ne1s/items/5e63dde992f20f25b8bb)
・[TODOアプリにバリデーションを追加する](https://qiita.com/d0ne1s/items/822f66d16d65ae28162b)
###パーシャルを作成
“`erb:/app/views/shared/_error_messages.html.erb
<% if @task.errors.any? %>
[シンプルなTODOアプリ](https://qiita.com/d0ne1s/items/5e63dde992f20f25b8bb)にバリデーション(入力制限)を追加していきます。
バリデーションは`create`、`save`、`update`などのメソッドが呼び出されたタイミングで実行されます。
##バリデーションを追加する
タスクの最大文字数を20文字に設定するバリデーションをmodelに記述します。
文法は`validates :{カラム名}, {ルール名}: {ルールの内容}`です。
“`/app/models/task.rb
class Task < ApplicationRecord
validates :title, length: {maximum: 20}
end
```
##エラーメッセージを表示する
バリデーションに失敗するとfalseが返され、`@{オブジェクト名}.errors.full_messages`でエラーメッセージの配列を取得することができます。
まずはControllerを修正し、エラーが発生した場合時にトップページに移動しないよ