はじめに
Ruby on Railsで作成したWebアプリケーションにファビコンを設定する方法をメモφ(..)
設定方法
app/assets/images
フォルダにファビコン用の画像を配置し、application.html.erb
内に下記を記述します。
application.html.erb
# favicon.pngは任意のファイル名に変更 <%= favicon_link_tag 'favicon.png'%>
ブラウザのタグにファビコンが設定されます。
以上
Ruby on Railsで作成したWebアプリケーションにファビコンを設定する方法をメモφ(..)
app/assets/images
フォルダにファビコン用の画像を配置し、application.html.erb
内に下記を記述します。
application.html.erb
# favicon.pngは任意のファイル名に変更 <%= favicon_link_tag 'favicon.png'%>
ブラウザのタグにファビコンが設定されます。
以上
最近作ったWebサービスが、全然googleの検索結果に乗らなくて悲しかったので、対処法をメモφ(..)
Google では、「ウェブ クローラ」と呼ばれるソフトウェアを使用して、公開されているウェブページをクロール(情報を取得)します。最もよく知られているクローラは「Googlebot」です。クローラは、ユーザーがウェブ上でコンテンツを閲覧する場合と同じように、ウェブページを見て、ページ上のリンクをたどります。リンクからリンクに移動し、これらのウェブページに関するデータを Google のサーバーに蓄積していきます。
通常では、GoogleのWebクローラーがWebページを自動的に検知し、サーバー上に蓄積していくが、リンク等が貼られていない段階では中々見つけて貰えないようです。。。
下記のページからgoogleへWebページの登録リクエストを送ることが出来ます。
私の場合は、登録リクエストの送信後、5分かからずに検索結果に反映されました…!゚゚( ゚д゚ )クワッ!!
対象のWebページがGoogleに登録されているかどうかは、site:Wenbページのurl
で検索すれば確認できます。
検索結果にWebページが表示されてればOKです。
Ruby on Railsでメール送信を行う際に必要となったツール及び実装を整理しましたφ(..)
Railsには、メールを送信するために、ActionMailerという仕組みがあります。 ActionMailerは、コントローラやーViewと同じような使い方でメールを送信させることができます。
SendGridを使うことで、自前でSMTPサーバ(メール送信用の端末)を 用意しなくてもRailsからメールを送付することが出来る。
SendGridはクラウドベースのメール配信サービスです。 アカウントを取得するだけですぐに利用を開始でき、簡単・確実にメールをお届けします。 面倒なメンテナンス作業や無駄なコストを削減し、ビジネスを加速させましょう!
rem SendGridのプラグインを導入 rem Herokuアカウントにクレジットカード情報を登録しないとエラーとなるため注意 heroku addons:create sendgrid:starter
rem USER_NAMEの確認 heroku config:get SENDGRID_USERNAME rem PASSWORDの確認 heroku config:get SENDGRID_PASSWORD
rem USER_NAMEの環境変数設定 heroku config:set SENDGRID_USERNAME=(調べたSENDGRID_USERNAME) rem PASSWORDの環境変数設定 heroku config:set SENDGRID_PASSWORD=(調べたSENDGRID_PASSWORD)
config/environments/production.rb
に下記を追記
config.action_mailer.default_url_options = { host: '自分のHerokuアプリのドメイン' } #hoge.herokuapp.com ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.smtp_settings = { user_name: ENV['SENDGRID_USERNAME'], password: ENV['SENDGRID_PASSWORD'], domain: "heroku.com", address: "smtp.sendgrid.net", port: 587, authentication: :plain, enable_starttls_auto: true }
※環境変数からユーザー名やパスワードを取得することによって、公開を防ぐ事ができる。
rem herokuのドメイン名確認 heroku domains
letter_opener_webはメールの送信結果をブラウザ上で確認出来るgem
Gemfile
へ下記を追記し、bundle install
実施する。
省略 # 開発環境のみで使用 group :development do gem 'letter_opener_web' end
config/routes
に下記を追記する。
# 開発環境かどうかを判断 if Rails.env.development? mount LetterOpenerWeb::Engine, at: "/letter_opener" end
config/environments/development.rb
に下記を追記
# 省略 config.action_mailer.default_url_options = { host: 'localhost:3000' } config.action_mailer.delivery_method = :letter_opener_web
rails g mailer "Mailer名" rem rails g mailer "Mailer名" "メソッド名"で、メソッドをあわせて作成することも可能
Mailerでは宛先とメールのタイトル等を指定可能、引数も取ることが出来る。
app/mailers/notice_mailer.rb
class NoticeMailer < ApplicationMailer 省略 def sendmail_blog(blog) @blog = blog mail to: "メールアドレス", # 宛先 subject: "メールタイトル" # メールのタイトル end end
Mail Viewでは実装に送信するメールの文面を通常のViewのように記載可能
※MailerもControllerと同様にメソッド名と紐付いたViewを取得するため注意
app/views/notice_mailer/sendmail_blog.html.erb
<h1>新しくブログが投稿されました!</h1> <h4>title: <%= @blog.title %></h4> <p>content: <%= @blog.content %></p> <p> <%= link_to '投稿されたブログはこちら', blogs_url %> </p>
※テキスト形式のメール文面も作成する場合はapp/views/notice_mailer/sendmail_blog.text.erb
も合わせて編集する。
メールの送信にはdeliver
メソッドを使用する。
app/controllers/blogs_controller.rb
def create @blog = Blog.new(blogs_params) if @blog.save redirect_to blogs_path, notice: "ブログを作成しました!" NoticeMailer.sendmail_blog(@blog).deliver else render 'new' end end
以上
勉強がてらnokogiriを使ってwebスクレイピングをやってみたので、頭の整理を兼ねて色々とメモしてみたφ(..)
ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラーあるいはウェブ・スパイダーとも呼ばれる。 通常このようなソフトウェアプログラムは低レベルのHTTPを実装することで、もしくはウェブブラウザを埋め込むことによって、WWWのコンテンツを取得する。
ようするにWebページにアクセスして、HTMLを取得すること = Webスクレイピング webスクレイピングによって、Web上に掲載された特定の情報を素早く・扱いやすい形で取得することが出来ます。
例) 特定のジャンルのニュース記事のタイトル一覧を作成する等
Rubyを使ったWebスクレイピングでよく使われるgemがnokogiri
です。
nokogiri
を使うことによって簡単にhtmlを解析し、必要な情報を抽出することが出来ます。
nokogiri
を使ったwebスクレイピングの練習として、yahoo newsにアクセスしタイトルを取得してみたいと思います。
# ================== # gemの読み込み # ================== require 'nokogiri' require 'open-uri' # ================== # 定数宣言 # ================== URL = "https://news.yahoo.co.jp/" # ================== # スクレイピング処理 # ================== # 変数宣言 charset = nil # webページにアクセスし、HTMLを取得 html = open(URL) do |f| charset = f.charset # 文字種別を取得 f.read # htmlを読み込んで変数htmlに渡す end # nokogiriで扱えるように取得したHTMLを変換 doc = Nokogiri::HTML.parse(html, nil, charset) # 取得したHTMLのタイトルを表示 p doc.title
nokogiri
を使ったWebスクレイピングの流れは下記のように行っていきます。
open-uri
を使ってWebページにアクセスし、HTMLを取得Nokogiri::HTML.parse
を使って扱いやすいように変換css
、xpath
を使って必要な情報を抽出今度は少し応用で、yahoo newsにアクセスしてトップニュースを取得してみましょう。 ちょっと試すだけだったら、paiza.ioが環境構築もいらないのでオススメです!
nokogiri
を使ったWebスクレイピングでは、二種類の抽出方法が主に使われます。
HTMLを'//div/p[@class="text"]'
というように要素の階層構造を指定し、抽出することが出来ます。
HTMLをjQueryで扱うように'div p.text'
という形で要素を抽出することができます。
私は今回、教えてgoo!のスクレイピングツールを作ってみました(/・ω・)/
特定カテゴリの質問のタイトルと質問文、ベストアンサー、その他回答の一覧をjsonファイルで吐き出します。
Webスクレイピングを使えば、必要な情報を素早く・扱いやすい形で取得できます。
画像の収集やニュースアプリの作成等、色々なことに使えるのではないかと思いましたφ(..)
私自身の学びの整理のために書きましたが、この記事がみなさんの学習の一助にも、なれば幸いです:D
Railsのアプリを作ってて、複数TBLを結合した結果をGROUP BY
で集計するような、ちょっと複雑な検索処理が必要となり生のSQLを実行したかったので、そのやり方をメモしましたφ(..)
SELECT文の場合は、ActiveRecord::Base.connection.select_all
の引数にSQLの文字列を与えてあげればOK(/・ω・)/
返り値をto_hash
してあげれば、[{"column1" => "hoge1","column2" => "hoge2"},{"column1" => "hoge1","column2" => "hoge2"}...]
のような形で扱える。
# SQLを作成 sql = <<-"EOS" SELECT pages.name, pages.url, COUNT(*) FROM pages INNER JOIN favorites ON pages.id = favorites.page_id GROUP BY pages.name, pages.url ORDER BY COUNT(*) DESC EOS # sqlを実行し、取得結果をhashに変換 ActiveRecord::Base.connection.select_all(sql).to_hash
ちなみにUPDATEの場合は、ActiveRecord::Base.connection.execute
を使うらしい。
sql = "UPDATE favorites SET read = true" ActiveRecord::Base.connection.execute(sql)
書いたあとに調べたけど、テーブル同士の結合とかは、ActiveRecordのメソッドを使っても実現出来たかもしれない。。。
生のSQLを書くのは、DBを変更(posgresql -> mysql等)の際に不具合の元になったりしそうなので、あまり推奨されないと思いますが、どうしても必要なときもあると思いますので、参考になれば幸いです。
Rubyですぐに使えそうな見やすい書き方を自分のためにも整理してみました(/・ω・)/
before
hoge.title = "hoge_name" hoge.read = "hoge_name" hoge.content = "hoge_content"
after
hoge.title = "hoge_name" hoge.read = "hoge_name" hoge.content = "hoge_content"
=
の位置を合わせた方が見やすいです!
before
if flg == true puts hoge end
after
if flg puts hoge end
bool型の場合は、そのままでOKです!
before
hoge.each do |h| puts h end
after
hoge.each{ |h| puts h }
1行であれば{...}
を使用した方が見やすいです!
before
if hoge puts hoge end
after
puts hoge if hoge
実行したい処理が1行であれば、後ろにifをつけた方が見やすいです!
before
if hoge == "a" || hoge == "b" || hoge == "c" puts hoge end
after
if ["a", "b", "c"].include(hoge) puts hoge end
対象を配列にいれてしまってinclude?
で判定したほうが見やすいと思います!
before
if 0 < hoge && hoge < 100 puts hoge end
after
if hoge.between?(1,99) puts hoge end
between?(min, max)
で判定したほうが見やすいと思います!
before
values = ["a", "a", "b", "c" ] result = [] values.each |v| do result.push(v) if v == "a" end
after
values = ["a", "a", "b", "c" ] result = values.select{ |v| v == "a"}
select{条件}
を使用すると見やすく書けると思います。
before
result = []
hoges.each { |h| result.push(h.name) }
after
reslut = hoges.map{ |h| h.name }
map
を使用すると見やすく書けると思います。
とりあえず、思いついたものを書いてみました! ソースコードが見やすくなると時間がたったあとでも処理が思い出しやすくなったり、 モチベーションがあがりますよね!
また思いついたら追記しようと思いますφ(..)
デフォルトのフォントだと満足出来なくなってきたので、Webフォントを使ってみようと思ったらGoogleが良いものを提供してくれていました・・・!(..)アリガタヤ
使い方をメモしておきます。
[目次] [:contents]
Webフォントを導入すると、サーバー上にあるフォントファイルを参照するため、ユーザーのPCにインストールされていないフォントを表示できるようになります。 CSS3が一般化してきて、そろそろ本格的に利用したくなってきましたね。
Webフォント = サーバー上のフォントファイル!
「ユーザーのローカルにフォントが無くて、ページがださくなる!」といったことが無くなる!(/・ω・)/
Webフォントの使い方は思ってた以上に簡単でした(..)
まずはWebフォントを見つけましょう!
私は下記のサイトを利用しました(/・ω・)/
↓詳しい使い方はこちら saruwakakun.com
見つけたWebフォントをHTMLファイルに導入しましょう・ω・
sample.html
<html> <head> <title>sample</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <!-- ↓WebフォントへのURL --> <link href="https://fonts.googleapis.com/css?family=Poiret+One" rel="stylesheet"> <style> body{ /* Webフォントを反映 */ font-family: 'Poiret One', cursive; } </style> </head> <body> <h1>Sample Title</h1> <h2>Sample Section</h2> <p>Sample Text1</p> <p>Sample Text2</p> <p>Sample Text3</p> </body> </html>
これだけ!ヮ(゚д゚)ォ!
実際の画面
フォントでWebページのイメージはガラッと変わりますよね!
Webフォントを使ってお洒落なページを作っていきたいですね(/・ω・)/