- 1. Rubyの多重継承優先順位まとめ
- 2. enumで、キーの文字列に数字を含める方法
- 3. 【Rails】 form_for でプルダウン(セレクトボックス)を実装してみる
- 4. Ruby + alpine でほんの少しだけバッチバージョンを変えた Dockerfile を自作してみようとした例 ( #ruby #docker )
- 5. mastodonのアバターを更新する方法
- 6. 【初学者向け】RailsのルーティングにおいてHTTPリクエストので気をつける点
- 7. フォロー機能 User.rbとRelationship.rb
- 8. ユーザ一覧で”フォローする”ボタンを押したときの挙動 備忘録
- 9. 【Ruby】HTMLタグを表す正規表現と`gsub`メソッド内での活用例
- 10. Net::HTTP#postとNet::HTTP::Postインスタンスを利用したpost(Net::HTTP#request)の違い
- 11. rubyでミュージックプレイヤーを作る
- 12. 開発環境の構築からRails新規作成まで
- 13. 【Ruby】Nokogiriでスクレイピング
- 14. ローカル開発環境構築②
- 15. 意外と知らないbundlerの小技
- 16. gsubとgsub!(Ruby)
- 17. ローカル開発環境を構築する
- 18. capybara-webkitのビルドで’cstddef’ file not foundが出て失敗する
- 19. 田舎ポンコツ大学生がRubyに目覚めた話
- 20. Rubyの学習を始めた
Rubyの多重継承優先順位まとめ
# はじめに
言語の基本的な動作を確認する作業って、ついサボってしまうことが多いのですが、今回は職場の先輩に時間を頂いて
あらためてRubyで多重継承に伴うメソッドの呼び出され方を検証しました。Rubyはクラスの多重継承ができない言語ですが、Moduleを用いて事実上の多重継承を可能にしています(Mixin方式)
# ケース1:複数のModuleを継承
“`ruby
module Foo
def do_task
puts “I’m in Foo class!”
end
endmodule Bar
def do_task
puts “I’m in Bar class!”
end
endclass Child
include Foo
include Bardef execute
do_task
end
endinstance = Child.new
instance.execute # which task is called?
“`結果:後勝ち
“`
$ ruby case1.rb
I’m in
enumで、キーの文字列に数字を含める方法
*前提*
“`Rails:schema.rb
t.integer “sex”
t.integer “age”
“`通常のenum(文字列のみ)の書き方は以下の通り。
“`Rails:user.rb
enum sex: { 未選択: 0, 男性: 1, 女性: 2 }
“`enumで数字を含めるには以下のように
“`Rails:user.rb
enum age: { 未選択: 0, “10代”: 1, “20代”: 2, “30代”: 3, “40代”: 4, “50代”: 5, “60代”: 6, “70代”: 7, “80代”: 8, “90代”: 9 }
“`
キーをダブルクオーテーション(“”)で囲えば良い。
むしろ本来こんなふうに書くべきなのかもしれない。
【Rails】 form_for でプルダウン(セレクトボックス)を実装してみる
# 概要
今回はrailsアプリケーションにおいてフォームを送信する際に、以下のような簡単なプルダウンを実装できるようにします。
![スクリーンショット 2019-11-15 3.34.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409257/31f1560e-fc23-9124-2a44-b54738630943.png)
![スクリーンショット 2019-11-15 3.35.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409257/3b334d3d-66f1-9389-d217-f98be69e351e.png)
## 例
上記の例は以下のようなコードで実装できます。“`ruby:hoge/view/new.html.erb
<%= form_for @hoge do |f| %>
# 以下の一行がプルダウンを実装するためのコード
<%= f.select :faculty
Ruby + alpine でほんの少しだけバッチバージョンを変えた Dockerfile を自作してみようとした例 ( #ruby #docker )
# Rubyでは公式イメージのDockerfileが公開されている
https://github.com/docker-library/ruby/blob/bf0e16e7511c97fdf351fdfc2e7e17478a4eaf16/2.6/alpine3.10/Dockerfile
![image](https://user-images.githubusercontent.com/13635059/68855189-12dcd900-0721-11ea-84d7-d178567aa058.png)
# Ruby
該当のruby version のSHA をコピっておく
https://www.ruby-lang.org/en/news/2019/04/17/ruby-2-6-3-released/
![image](https://user-images.githubusercontent.com/13635059/68855323-546d8400-0721-11ea-8fb9-9ae222415300.png)
# Dockerfile
VERSIO
mastodonのアバターを更新する方法
インスタンス運営側なら以下のコマンドでいけるんだけど、今回は、ユーザーの場合。
“`sh
mastodon:media:redownload_avatars
“`検索ボックスで、`https://mstdn.syui.cf/@syui`みたいに検索すると、更新される。
ユーザーを検索すると、avatarのurlが変更されてるかチェック、変更されてたらインスタンスのメディアサーバーにダウンロード、avatarを更新する処理が`sidekiq`で走るぽい?
【初学者向け】RailsのルーティングにおいてHTTPリクエストので気をつける点
Railsを使ったアプリケーション開発で、routesファイルのルーティング設定において注意したい点を忘れないように記事を書いてみました。初投稿および初学者のため、表現や解釈に間違いがあるかもしれませんがご容赦ください。
#遭遇したエラー
###ActiveRecord::RecordNotFound in UsersController
Railsのconfig/routes.rbファイルでルーティングの設定をして、指定したURLにアクセスできないエラーが発生してしまいました。
この時routesファイルとコントローラとは次のように設定していました。“`ruby:config/routes.rb
# usersコントローラ
get “users/:id” => “users#show”, as: “user”
get “users/close” => “users#complete”
“`“`ruby:users_controller.rb
class UsersController < ApplicationController def
フォロー機能 User.rbとRelationship.rb
“`Rails:Relationship.rb
class Relationship < ApplicationRecord belongs_to :follower, class_name: "User" belongs_to :followed, class_name: "User" end ``` Relationshipモデル(中間モデル)には、 :boy:follower (フォローする人) :two_women_holding_hands:followed(フォローされる人) が存在している。 ```Rails:user.rb has_many :follower, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy # フォロー取得。Relationshipモデルのfollower_idにuser_idを格納 has_many :followed, class_name: "Relationship", foreign_key: "followed
ユーザ一覧で”フォローする”ボタンを押したときの挙動 備忘録
“`Rails:user/index/html.erb
<% if user != current_user %>
<% if current_user.following?(user) %>
<%= link_to 'フォロー解除', unfollows_path(user.id), method: :POST %>
<% else %>
<%= link_to 'フォローする', follows_path(user.id), method: :POST %>
<% end %><% end %>
“`
上の ‘フォローする’ ボタンを押すと、follows_path が読み込まれるfollows_pathは
“`Rails:routes.rb
post ‘follows/:id’ => ‘relationships#follows’, as: “follows” # フォローする。follows_pathの作成。
“`
上の as “fol
【Ruby】HTMLタグを表す正規表現と`gsub`メソッド内での活用例
## はじめに
先日、[【Ruby】HTTPClientとLINE Notifyを使ってターミナルから文字列を送るプログラム](https://qiita.com/terufumi1122/items/e554b529612a49d462c2)という記事を書きました。
その中で使用している`HTTPClient`の学習中に`
`や``など、HTMLタグを表す正規表現を見て**「便利!」**と感じたためまとめました!
どなたかの参考になれば幸いです。
## この記事が役に立つ方
– HTMLタグが邪魔で除去したい
– 正規表現初心者## この記事のメリット
– HTMLタグを表す正規表現を理解し、活用が出来る
– ついでにRubyの `gsub`メソッドの使い方が分かる## 環境
– シェル:zsh
– Ruby 2.6.3## 参考にしたサイト
`HTTPClient`チュートリアルサイトにて。
`get_content`メソッドの使用例の中で見かけました。以下リンクの「The get_content function」の中に書いてあったもの
Net::HTTP#postとNet::HTTP::Postインスタンスを利用したpost(Net::HTTP#request)の違い
net/httpパッケージで簡単なpostリクエストを送ろうとして調べていたら混乱したのでメモ。
(Ruby: ver2.6.3で試した)—
調べていくとおおまかに2種類の書き方があった。
1つ目が`Net::HTTP#post`を使う方法。
“`rb
require “net/http”
require “json”uri = URI.parse(“http://localhost:8000/”)
params = { foo: “bar” }
req = Net::HTTP.new(uri.host, uri.port)
req.post(uri.path, params.to_json)
“`もう1つが`Net::HTTP::Post`のインスタンスを作成し、`Net::HTTP#request`でリクエストする方法。
“`rb
require “net/http”
require “json”uri = URI.parse(“http://localhost:8000/”)
params = { foo: “bar” }http_req
rubyでミュージックプレイヤーを作る
ミュージックプレイヤーと言われると、mp3を再生するものだと思いますよね
初心者がかんがえた簡単プログラムなので、mp3は再生できません、dxrubyを使用します。
改善方法があれば、教えて下さい。“`ruby:musiplayer.rb
require ‘dxruby’Window.width = 0
Window.height = 0
Window.caption = ‘再生タブ’
sound = “”
play = “”
loop do
puts”タイプを入力してね\nhelpと入力してね!”
type = gets.chomp
if type == “end”
exit
elsif type == “stop”
if play == “1”
sound.stop
play = “”
else
puts “何も再生されていません。”
end
else
if type == “”
puts “何も入力してないみたいだけど…?”
elsif type == “
開発環境の構築からRails新規作成まで
#概要
macを新しく買いOSもCatalinaになったので今更ながら開発環境の構築をまとめようと思います。
この記事では一からmacに開発環境を構築する方法からRailsで新規のプロジェクトの作成までを書いていきます。他にgitやDockerやAWSはまた暇な時に書けたらと思います。
手順は以下の通りです。
①Homebrewの導入
②rbenvインストール
③Rubyのインストール
④Bundlerのインストール
⑤mysqlのインストール
⑥Railsアプリ作成
以上6つの手順を踏んでいきます。
環境は以下の通りです。
PC: macbookpro2018 13inch OS Catalina ver.10.15.1
Catalinaからbashではなくzsh方式になったためコマンドプロンプトもzsh方式になってます。#Homebrewの導入
Homebrewは開発に必要なものを簡単に導入でき、管理しやすい便利なツールです。
まずはこのツールから導入していきましょう。
先にXcodeが必要になりますが、Homebrewの途中でインストールさせられるので今回はしないでいきます。
【Ruby】Nokogiriでスクレイピング
#概要
アウトプット用に、学習した内容を紹介していきます。
本日はNokogiriを用いてnaverまとめから注目まとめのタイトルとview数を取得し、ローカルDBに登録してみます。#環境
Mac OS Mojave 10.14.6
Ruby 2.5.3
エディタ VSCode#流れ
まずMySQLでデータ登録用のテーブルを作成します。“`
mysql> create table navertops(title text,view int);
Query OK, 0 rows affected (0.01 sec)
“`
登録用テーブルが作成されました。それではrubyでスクレイピングし、ローカルDBに登録してみます。
“`ruby:scraping.rb
require ‘open-uri’
require ‘nokogiri’
require ‘active_record’# DB接続
ActiveRecord::Base.establish_connection(
adapter: ‘mysql2’,
host: ‘localhost’,
ローカル開発環境構築②
##今回の内容
1. 仮想マシン設定
2. Cybereduckの設定
3. PHPの設定
4. 終了の仕方
5. 学習の再開
6. Transmit の使い方 ※cyberduckじゃないFTP
7. hostsファイルを編集する##仮想マシン設定
前回設定した、仮想環境にて、vargentのプラグインのインストール、OSを最新にする。
そして、gitをインストールして、スクリプトをダウンロードする。
基本的に、ターミナルへコピペで完了する。※少し、DLに時間がかかる。“`
サーバーへログイン。 ※改装の移動必要。
vagrant# OSを最新状態にアップデート(時間かかります)
sudo yum -y update# スクリプトを入手するためのgitをインストール
sudo yum -y install git# gitを使ってアプリケーション設定用のスクリプトをダウンロード
git clone https://github.com/dotinstallres/centos6.git# centos6フォルダができるのでそちらに移動
cd cento
意外と知らないbundlerの小技
## bundle installされたGemのディレクトリをエディタで開く
“`shell
$ bundle open# example
$ bundle open rspec
→ vendor/bundle/ruby/2.6.0/gems/rspec-3.8.0が開く
“`## 不要なGemの削除
“`shell
$ bundle clean
“`以下のように、`bundle install`されたもののうち不要なGem(古いバージョンを含む)が削除される。
“`
$ bundle clean
Removing graphql (1.8.13)
“`## bundle install(2回目以降)
はじめに`bundle install –path vendor/bundle`した後は、`.bundle/config`にPATH情報が保存されて、以降は`bundle`で`bundle install`される。
“`shell
$ bundle
“`“`ruby:.bundle/config
—
BUNDLE_PATH
gsubとgsub!(Ruby)
gsubメソッドを使用してみました。
置換をしてくれるメソッドですね。“`
string1 = “seven”
puts string2 = string1.gsub(/seven/, ‘eleven’) # => eleven
puts string1 # => seven
puts string2 # => eleven
“`
次にgsub!としてみた場合レシーバそのものの値が変化しました。“`
string1 = “seven”
puts string2 = string1.gsub!(/seven/, ‘eleven’) # => eleven
puts string1 # => eleven
puts string2 # => eleven
“`
次に置換に対応する文字列がなかった場合です。“`
string1 = “seven”
puts string2 = string1.gsub(/a/, ‘eleven’) # => seven
puts string1 # => seven
puts string2 # => seven
“`
置換に対応する
ローカル開発環境を構築する
##目的
– Rubyをいざやるぞとなったところ、ローカル開発環境ができていなかったので、ローカル開発環境を行う。
– 転職するたびに、開発PCが変わるので開発環境をつくるのめんどくさい。
– ドットインストールの講義 https://dotinstall.com/lessons/basic_localdev_mac_v2/38502##今回やること
– ローカル開発環境を構築する。
– Rubyをいじるための
– Virtulbox と Vagrantを使用する。## Virtualboxとは
– 使用しているPCに仮想環境を構築して、他のOSをインストールすることのできる仮想ソフト。
– 導入することで、Mac環境でWinやLinuxなどの複数のOSを切り替えて使用することが可能。
– 参考 : https://www.sejuku.net/blog/72833##Virtualboxのインストール
– 今回は、Virtualboxの6.0.14 platform pkgをDL
– 講義だと、かなり前のものを使っている感じらしい。(3〜4年前?
capybara-webkitのビルドで’cstddef’ file not foundが出て失敗する
古いシステムのメンテナンスで、ひさびさに環境をつくったらハマったのでメモ。
macOS 10.13/Xcode10以降で、`fatal error: ‘cstddef’ file not found`が出てビルドに失敗する。#### 結論(2019/11/12時点での確認)
`1.15.1`以上になるよう指定する。とりあえず1.15.1以降であればOK。“`
gem ‘capybara-webkit’, ‘~> 1.15.1’
“`
とか“`
gem ‘capybara-webkit’, ‘>= 1.15.1’, ‘< 1.16' ``` みたいにバージョンを指定してからbundle installでOK。`'< 2'`でもいい。 個別にやるなら以下で。 ```gem install capybara-webkit -v '1.15.1' --source 'https://rubygems.org/'``` --- #### 参考 この記事そのままで解消できましたので感謝。 原因、および公式のPull Requestのリンクなど。qt5.5の問題がまだ解決されて
田舎ポンコツ大学生がRubyに目覚めた話
#初めに
**※※田舎ポンコツ学生による日々のアウトプットと、始めたばかりの初心者にむけた記事です。
間違っていることなど先輩方からアドバイスいただけるとありがたいです。※※**私は現在福島県会津若松にある株式会社Eyes,JAPANでリモートワークでアルバイトをしています。
私は初め、働くといっても私は独学でプログラミングを学んだだけの学生です。なにができるのだろうか、という気持ちでした。
#Udemy
私は2019年の1月から6月頃まで独学でHTML、CSS、JavaScript、jQuery、PHPの基礎を一通り学びました。
しかしアルバイトをするにしても、独学で基礎を学んだだけ、いかんせん能力がないです。しかもリモートワーク。
ということで
これまでの独学の情報確認とスキルアップのため、Udemy (https://www.udemy.com/ )と呼ばれるオンライン学習サービスを使い、現在学習中です。
学習すればするだけできることが多くなりこなせる仕事も多くなります、自然とその人の価値が上がってくると思うので頑張っていきます!
#Ruby
会社ではよく
Rubyの学習を始めた
#Rubyの勉強を始めた。
– 理由
– 時間にゆとりができたから。
– WEB アプリ系をつくってみたいとふと思ったから
– 実務では使うことはないが、知識として触って観たかった。
– 1ヶ月くらいで基礎はできるようになりたい。
– つまり、ほぼ興味。#今回の練習
– 今回は、ドットインストールで数当てゲームというものを作成した。
– 意外とシンプルにかけるので驚いた。
– ドットインストール久しぶりにプレミアム会員。“` main.rb
answer = rand(10) + 1
count = 0loop do
print “Your guess? ”
guess = gets.to_i
# count = count + 1
count +=1if answer == guess
puts “Bingo! It took #{count} guesses!”
break
elsif answer > guess
puts “Bigger!”
else