- 1. Rubyで始めるスクレイピング 〜入門編〜
- 2. Leetcode: Swap Nodes In Pairs
- 3. Leetcode: Reverse String
- 4. Rubyのメソッドを再実装する勉強法(Enumerable#chunkを再実装)
- 5. 最小限の手間でMac上にOACISを導入する方法
- 6. Rails Tutorialの知識から【ポートフォリオ】を作って勉強する話 #18.5 環境変数, Gmail送信設定編
- 7. リファクタリングでモブプロみたいなことをしたお話
- 8. 【Rails】I18n.tはtに省略できるんじゃない、省略したほうが良い
- 9. Ruby 変数に格納された文字列の開始文字数と終了文字数を指定して表示する
- 10. Rubyの基礎まとめ[メモ]
- 11. Leetcode: Serialize And Deserialize Binary Tree
- 12. 【Rails】Docker環境下でbinding.pryを使えないとき確認すべきポイント4つ
- 13. Rails、hamlでFontAwesomeを使う
- 14. iOSエンジニアがSign in with Appleをサーバーサイドで実装したときに行き詰りを感じたところとか
- 15. LINE の スマートスピーカー Clova Friends と Clova Desk の HTTP リクエストを調べる
- 16. Shift_jis(CP932) -> UTF-8変換の例外処理
- 17. RailsでHamlを書く
- 18. 【heroku】ActiveRecord::IrreversibleMigration が出たときの対処法
- 19. bin とは
- 20. rails_same_site_cookie gemで、RailsアプリにChrome 80向けのSameSite属性を指定する
Rubyで始めるスクレイピング 〜入門編〜
# スクレイピングとは
Webサイトから自分の知りたい情報を抽出すること。
ex) 文章、画像、動画など# TL; DR
Qiitaで「ruby」で検索して「いいね順」に並べた検索結果一覧をスクレイピングします。
コードを見ながら説明します。**1. まずは前準備。**
“`scraping01.rb
# コードのsyntax highlight・補完などをしてくれるgem(無くてもいいけどめっちゃ便利)
# https://github.com/janlelis/irbtools
require ‘irbtools/more’# URLにアクセスした内容をファイルのように扱えるgem
require ‘open-uri’# スクレイピングのgem
require ‘nokogiri’# CSV出力するgem
require ‘csv’url = ‘https://qiita.com/search?q=ruby&sort=like’
“`# URLのパラメータの仕組みについて
`https://qiita.com/search?page=1&q
Leetcode: Swap Nodes In Pairs
“`ruby
require ‘minitest/autorun’
require ‘pry’
class SwapNodesInPairs < Minitest::Test def test_run list = ListNode.new(1) list.next = ListNode.new(2) list.next.next = ListNode.new(3) list.next.next.next = ListNode.new(4) new_list = swap_pairs(list) assert_equal(2, new_list.val) assert_equal(1, new_list.next.val) assert_equal(4, new_list.next.next.val) assert_equal(3, new_list.next.next.next.val) list = ListNode.new(1) new_list = swap_pairs(lis
Leetcode: Reverse String
“`ruby
require ‘minitest/autorun’
require ‘pry’
class ReverseString < Minitest::Test def test_run input = ["h", "e", "l", "l", "o"] output = ["o", "l", "l", "e", "h"] assert_equal(output, reverse_string(input)) end def reverse_string(s, index = 0) return s if index == s.size / 2 first_char = s[index] last_char = s[s.size - 1 - index] s[index] = last_char s[s.size - 1 - index] = first_char index += 1 reverse_string(s, index)
Rubyのメソッドを再実装する勉強法(Enumerable#chunkを再実装)
社内で定期的にやっているRubyのメソッドを再実装する勉強法の紹介です。
※ メソッドの再実装は[Grow.rb](https://github.com/akinov/reimplement_ruby/tree/master/enumerable)を参考にしています。Rubyのメソッドを再実装することでRubyの理解を深め基礎力をつけることを目的にしています。
複数メンバーでやることで十人十色な実装、書き方に触れることができるので面白いです。今回は`Enumerable#chunk`を再実装します。
※問題は[GitHub](https://github.com/akinov/reimplement_ruby)にまとめています。# `Enumerable#chunk`
>要素を前から順にブロックで評価し、その結果によって要素をチャンクに分けた(グループ化した)要素を持つ Enumerator を返します。
ブロックの評価値が同じ値が続くものを一つのチャンクとして取り扱います。すなわち、ブロックの評価値が一つ前と異なる所でチャンクが区切られます。
返り値の Enumerat
最小限の手間でMac上にOACISを導入する方法
この記事ではMac上で最小限の手順で[OACIS](https://github.com/crest-cassia/oacis)の環境をセットアップする手順について説明します。
OACISは様々な環境で動作する様に汎用的に作られている一方で、Linuxの知識がないとセットアップが難しい部分もあります。ここではMac使い向けに「とにかくこの手順に従えばセットアップできる」という方法をお伝えします。
詳細が知りたくなったら[公式ドキュメント](http://crest-cassia.github.io/oacis/ja/)を参照してください。
ここでは2020年1月時点で最新のv3.7.0をインストールします。手順は以下の通り。
1. Rubyをインストールする
1. MongoDBとRedisをインストールする
1. localhostに対してSSHログインできるように設定する
1. OACISのソースコードをダウンロードする
1. OACISを起動する
1. OACISにlocalhostを登録する## Rubyをインストールする
rbenvを使ってインストールします。r
Rails Tutorialの知識から【ポートフォリオ】を作って勉強する話 #18.5 環境変数, Gmail送信設定編
# こんな人におすすめ
* プログラミング初心者でポートフォリオの作り方が分からない
* Rails Tutorialをやってみたが理解することが難しい前回:[#18 EC2環境構築, Nginx+Puma+Capistrano編](https://qiita.com/aokyo17/items/281b5a1658ea58bc7b24)
次回:準備中# 今回の流れ
1. Railsの環境変数を設定する
2. 本番環境でのGmailの送信を設定する# Railsの環境変数を設定する
Rails5.2以降の環境変数の設定には、credentials.yml.encを使います。
デフォルトで.gitignoreになり暗号化されているのでおすすめです。
以下のように設定します。“`shell:shell
EDITOR=vim rails credentials:edit
“`“`yml:credentials.yml.enc
# aws:
# access_key_id: XXXX
# secret_access_key: XXXX# Used as
リファクタリングでモブプロみたいなことをしたお話
弊社内でエンジニア3人が集まって楽しくリファクタリングをした話です。
# 背景
社内のプロダクトで「手が空いてるならリファクタリングやってくれると嬉しい。手が足らない」というようなSOSを受け取り、
そのプロダクトをある程度知っている人 1人 + 知らない人 2人 の3人でリファクタリング部隊を作ってリファクタリングしていこうという話になりました。今回は、モブプロ「みたいなこと」です。厳密なモブプロではないです。
なので、– ドライバーも考える (みんなで考える)
– ドライバーは変わらないという感じでゆるく進行しました。
## プロダクトについて
Railsで動いています。Rails3から始まり、今Rails5です。– 7年ぐらい前から動いているプロダクト
– 新しく書いたところは新しく、古いものは古いという歴史が積み重なっている
– Rails3からのコードが残っている
– Rails何それ?Ruby何それ?から始まったコードが存在している
– ただファイルが分割されただけのコードがConcernsとして存在している
– でもテストはちゃんと書かれていると
【Rails】I18n.tはtに省略できるんじゃない、省略したほうが良い
## I18n.tの省略記法
まだなんにもわかっていないRails触り始めて1週間くらいの頃、
**「RailsはViewファイル内では`I18n.t(‘hoge’)`って書かなくても`t(‘hoge’)`って書けるよ、
先輩たちもそう書いてるから合わせてね」**って言われてふむふむなるほど、
よくわからんがviewでは省略できるのかってなった経験はありませんか?実はI18n.tをtにすると**文字が4文字節約できるってレベルではない変化**が起きていた
## つまりどういう事か
詳しい実相は[この辺](https://github.com/rails/rails/blob/a33dbb17b0818e8a2c75581275374bc0853958ca/actionview/lib/action_view/helpers/translation_helper.rb#L60)
`TranslationHelper`にtが実装されていたんですね“`rails/actionview/lib/action_view/helpers/translation_helper.rb
de
Ruby 変数に格納された文字列の開始文字数と終了文字数を指定して表示する
# 目的
– 変数に格納された文字列の開始文字数と終了文字数を指定して表示する方法をまとめる
# 書き方の例
– 下記に変数Aに格納された文字列を開始文字数と終了文字数を指定して表示する方法を記載する。
“`ruby
puts 変数A.slice(開始文字数..終了文字数)
“`# より具体的な書き方の例
– 変数`today`に格納された文字列の0文字目から10文字目までを表示する方法を記載する。
“`ruby
today = “2020-02-04 09:01:35”
puts today.slice(0..10)
2020-02-04
“`
Rubyの基礎まとめ[メモ]
コーディングテスト用のメモ。
# 基礎文法
### 繰り返し
– for
“`ruby
for i in 1..3 do
puts i
end
“`※配列でも可
“`ruby
for num in [1, 2, 3] do
puts num
end
“`– each
“`ruby
[1, 2, 3, 4].each do |num|
p num
end
“`– while
“`ruby
num = 0 #初期値
while num <= 12 do #条件 p num #処理 num += 3 #値の更新 end ``` - times ```ruby 3.times do |num| p num end ``` ### 各桁の和 ```ruby a = 11 puts a.to_s.split('').map{|x| x.to_i}.inject(:+) #=> 2
“`### 条件分岐(書き換えパターン)
– pattern(1)
“`ruby
s = “hoge”
if s==hoge
p
Leetcode: Serialize And Deserialize Binary Tree
“`ruby
require ‘minitest/autorun’
require ‘pry’
class SerializeAndDeserializeBinaryTree < Minitest::Test def test_run expected = [1, 2, 3, nil, nil, 4, 5] tree = TreeNode.new(1) tree.left = TreeNode.new(2) tree.right = TreeNode.new(3) tree.right.left = TreeNode.new(4) tree.right.right = TreeNode.new(5) serialized_tree = "12XX34XX5XX" assert_equal(serialized_tree, serialize(tree)) deserialize(serialized_tree) end def serialize(root)
【Rails】Docker環境下でbinding.pryを使えないとき確認すべきポイント4つ
## はじめに
Docker環境下でこんなシーンに遭遇したことはありませんか?**「Railsでバグ発生!デバッグしなきゃ!よーし、`binding.pry`しよう!」**
↓
**「うわ、コンソール出ない!!!これじゃ何も出来ない!!!」**
こんな**やるせない気持ち**になった方のために、自分がこれまで詰まった箇所とその解決法を残しておこうと思います。
## 環境
“`yaml
OS: macOS Catalina 10.15.3
Ruby: 2.6.5
Rails: 6.0.2.1
Docker: 19.03.5
docker-compose: 1.24.1
“`## 1.`binding.pry`のコンソールが出ない
`docker-compose up`などで**rails server**を立ち上げていて、`binding.pry`を入力した箇所で動作が止まっているのに、
**「コンソールが出ない!どうしよう!」**
という状態を想定しています。
### 解決法
“`shell
$docker container ls
“`
でRai
Rails、hamlでFontAwesomeを使う
今日、だいぶつまいたので、メモ程度に書いておきます。
①ハッシュロケットをシンボル型に直す。
ハッシュロケットは時代遅れになっているようで、 取り残されないようにシンボル型に書き換えます。
基本形
ハッシュロケット
:rocket => “rocket”シンボル型
hash: “hash”書き換えてみる
ハッシュロケット
%meta{:content => “text/html; charset=UTF-8”, “http-equiv” => “Content-Type”}/シンボル型
%meta{content: “text/html; charset=UTF-8”, “http-equiv”: “Content-Type”}/②link_toでFontAwesomeを表示
a(href)を
= link_to “#” doに変更= link_to new_group_path do
= fa_icon ‘edit’
iOSエンジニアがSign in with Appleをサーバーサイドで実装したときに行き詰りを感じたところとか
**Sign in with Apple 実装のデッドラインは4月** ですね☺️
Web/iOS/Androidなど、複数プラットフォームをサポートするためWebViewでログイン機能を実装しているサービスや、外部サービスAPI利用の際に独自のAPIを噛ませているなど、サーバーサイドでSign in with Appleに対応するケースはあるかと思います。iOSエンジニアであるわたしがサーバーサイドで実装した際に、わかりにくいな〜?と感じたポイントについて記載します。
自分のスキルセットとして、認証・認可、Webの知識はほぼ0でした?
**実装したソースコードをの抜粋を載せていますが、言語はrubyです。**# やること
今回ご説明する Sign in with Apple の全体のざっくりフローは、1. Apple Developer サイトでの設定
2. Apple ID サインイン画面表示(Authorizeエンドポイント)、認可コード受取り
4. 認可コードを使い、AppleのユーザーIDを取得(Tokenエンドポイント)です。
**取得したいデータがema
LINE の スマートスピーカー Clova Friends と Clova Desk の HTTP リクエストを調べる
## 概要
– LINE Clova から Custom Extension (スキル) 起動時に送信される HTTP リクエストを調べる
– Ruby + Heroku による調査用 Web サーバ (Extension サーバー) を立てて HTTP リクエストの内容を調べる## Clova とは
LINE が提供しているスマートスピーカー。
[LINE Clova公式サイト](https://clova.line.me/)
> ClovaはLINEが開発したAIアシスタントです。
> 話しかけるだけでLINEの送受信や家電の操作など、あなたの様々なリクエストに応えます。## Clova の HTTP リクエスト
Clova は CEK (Clova Extensions Kit) を介して HTTPS リクエストを Extension サーバーに送信している。
[CEKの概要 \- Clova Developer Center β](https://clova-developers.line.biz/guide/CEK/CEK_Overview.md)
>
Shift_jis(CP932) -> UTF-8変換の例外処理
# Shift_jis(CP932) -> UTF-8へのcsvの変換機能
今回はrubyで開発をしたので、rubyの書き方で説明致します。
Shift_jisで書かれたcsvをUTF-8に変換する機能を実装した際、エラーが起きてしまい変換出来ない件について。## 課題
エラー文
`”\xFB\xFC” from Shift_JIS to UTF-8`コード
“`
CSV.foreach({ファイル名}, encoding: “Shift_JIS:UTF-8”, headers: true) do |row|
“`
Shift_JIS→UTF-8に変換してcsv出力したいのに、、エラーが。。
何を言っているんだ?
どーいうエラー?
どう対処すれば、、。## 何が起きている??
このエラー文は、`変換出来ない文字が含まれているよー!だから変換出来ません!`と教えてくれています。変換出来ない文字とは、`Shift_JISの範囲外の文字(旧字体)`の事!
→Shift_JISで書かれたcsvに、Shift_JISが認識出来ない文字が含まれてる。**Shift_JIS
RailsでHamlを書く
#概要
基礎的なhamlの書き方とhamlにおけるrailsヘルパーメソッドのルールを書きました。
特にヘルパーメソッドの書き方は初心者がよくsyntaxエラーを起こしやすい箇所なので参考になればと思います。#HTMLタグ
##基礎
HTMLタグは基本的に「%」をつければOKです。“`haml:haml
%div
%a
%input
%header
“`
“`html:結果(HTML)“`
##クラス名、ID名
クラス名は「.(ドット)」、ID名は「#(シャープ)」をそれぞれHTMLタグの後ろにつけることで作成できます。
「.」や「#」を連続することで複数のクラス名やID名をつけることができます。また、HTMLタグ無しでクラス名やID名を記述するとdivタグになります。
(divタグの省略記法)“`haml:haml
%div.class-name
%div#id-name
%div.class1.class2.class3
.no-html-tag
#no-html
【heroku】ActiveRecord::IrreversibleMigration が出たときの対処法
nemlog検索サイト https://searchnemlog.herokuapp.com/
作成の時herokuデプロイで詰まってしまったので解決方法をメモしときます。#ActiveRecord::IrreversibleMigration
おそらくスクレイピングを通してデータベースに保存していたので起きてしまったエラーと思われます。以下からはこのエラーの解決手順を記したいと思います。
#ロールバック
“`
heroku run rake db:migrate:reset
“`恐らくエラー文が表示されると思います。
そこに
“`
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
“`と書かれていたらそれを利用してDB生成が可能になります。
#ドロップ
“`
heroku run RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop
“`先ほどのエラー文を利用してドロップするとなんとかドロ
bin とは
binファイルとは?
binとはbinaryの略で、binファイルとは
テキスト形式ではなくバイナリ形式で書かれているデータを扱うファイル。バイナリデータとは、コンピュータが理解するためのプログラムが書かれたデータのことである。
rails_same_site_cookie gemで、RailsアプリにChrome 80向けのSameSite属性を指定する
## はじめに
以下の記事にあるとおり、Chrome 80では2020年2月17日の週以降にデフォルトのSameSite属性が変更されます。
[Chrome 80が密かに呼び寄せる地獄 ~ SameSite属性のデフォルト変更を調べてみた – Qiita](https://qiita.com/ahera/items/0c8276da6b0bed2b580c)
この変更が入ると、次のように「決済や認証などで外部サービスを利用し、外部サイトからPOSTで戻ってくるサイト」でユーザーが識別できないエラーが発生します。
![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_117852_84f60298-2a3f-65b0-5ff6-daacf12a1c4b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/c9bcba25-0e88-37d0-ef02-26ed9ba71a2f.png)
(画像の引用元:[Chrome 80が