- 投稿日:2019-07-16T23:32:26+09:00
[正規表現] 英文から簡単に単語を抽出する
はじめに
次のような英文があるとする.
sample.rbtxt = "The widow she cried over me, and called me a poor lamb, and she called me a lot of other names, too, but she never meant no harm by it. She put me in them new clothes again, and I couldn’t do nothing but sweat and sweat, and feel all cramped up. Well, then, the old thing commenced again. The widow rung a bell for supper, and you hadto come to time. When you got to the table you couldn’t go right to eating, but you had to wait for the widow to tuck down her head and grumble a little over the victuals, though there warn’t really anything the matter with them, – that is, nothing only everything was cooked by itself. In a barrel of odds and ends it is different; things get mixed up, and the juice kind of swaps around, and the things go better."このとき,英文中の
me
が出現する回数を数えるなら,sample.rbtxt.scan("me").sizeとするのが一般的だが,
me
以外の単語も数えてしまう.例えばnames
やmeant
に反応する.他にも色々と回避するために正規表現を付け加えると,行頭のme
やme,
に反応しなくなる不幸も起きる.\bの効用
そこで余計な単語を無視したいときに役立つのが
\b
である.\b
は単語の境界を表す正規表現で,単語の区切り目を条件づけることができる.sample2.rbtxt.scan(/\bme\b/).size単語を取り出したいと感じたらとりあえず
\b
使っていこう!
- 投稿日:2019-07-16T22:51:52+09:00
Sprokets::FileNotFound couldn't find 'spree/backend/all.js'
初めて
docker-compose up —build
を行い、ページに飛んだ際にこのエラーに出くわしました。all.jsがないと言われているから、検索していると、
rails g spree:install
をすると解決するといった記事を見つけたので、以下の方法1のように実行しました。(先に結論から言うと、自分の場合は、この方法でエラーを解決することはできませんでした。)方法1(失敗した方法)
$docker-compose up -d
で、コンテナを起動し、
$docker-compose exec potepanec bash
で、コンテナ内に入り(potepanecの部分は、各自のものに変えてください)、
$bundle exec rake db:migrate:reset
$bundle exec rails g spree:install
を実行しましたが、エラーは解決する事ができませんでした。
方法2(成功した方法)
$docker rm -f $(docker ps -aq) && docker rmi -f $(docker images -q) && docker volume rm -f $(docker volume ls -q)
を行い、一度全部削除しました。この時気をつけなければいけないのは、これだとdockerに入っている他のプロジェクトも削除することになります。自分の場合は、扱っているプロジェクトがエラーを出しているものだけだったので、このコードで、一度全部削除しました。次に、
rm -f app/tmp/pids/server.pid
で、pidを削除しました。このpidを削除しないと、同じエラーをはき出すので、dockerを削除した後、pidも削除することをお勧めします。docker,pidを削除した後、
docker-compose up --build
を行ったところ、無事立ち上がりました!
- 投稿日:2019-07-16T21:55:58+09:00
SQLite3
- 投稿日:2019-07-16T20:37:50+09:00
cannot load such file -- bundler/setup (LoadError)と出てきたときの対処法
最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!どういうエラーなのか
railsのリポジトリをクローンしてきてちゃんと動くか確かめようとした時に発生しました!
やったことはbundle installをしたら最後に以下のような感じのものが出てきました//省略 `require': cannot load such file -- bundler/setup (LoadError)どうやらbundlerのGemが欠けてみたいだったので
sudo gem install bundler以下のようにコマンドを入力したら問題なくいけました!
- 投稿日:2019-07-16T19:13:26+09:00
ActionMailerでhelperメソッドを使用する
メール機能であるActionMailerのviewテンプレートで、先ほど作成したhelperメソッド(regular_format)
を使おうとしたらエラーとなってしまった。解決方法
ActionMailerのView内でhelperメソッドを使いたい場合は、
add_template_helper(ApplicationHelper)
を追加すれば良い。application_mailer.rbclass ApplicationMailer < ActionMailer::Base add_template_helper(ApplicationHelper) ・ ・ ・これで無事helperメソッド
regular_format
が使えるようになった。
- 投稿日:2019-07-16T16:14:39+09:00
Scenic を使って、Railsで RDB の VIEWを使う
こちらの記事を参考にRDBのVIEWを導入しました。
https://techracho.bpsinc.jp/morimorihoge/2019_06_21/76521VIEWを使う意図
複数の似ているテーブルをまとめて検索・参照したい
という意図で調査・検討を始めました。
そもそものDB設計として、 "似て非なるものは分ける” という思想で設計を始めるとまとめて表示・検索したい時にどうするか?というところに行き当たります。
Rails ですと、STIかとなるのですが、あまりしっくり気ませんでした。サブクラスを参照すると必ず typeで絞り込むことや、アプリケーションよりDBのデータの方が長く使われるということを考えると、やはりサブクラスはテーブルを分けておきたいと考えました。
そこで RDBのUNIONを使って参照だけする方式を検討していました。同じ時期に冒頭の Techracho さんの記事を目にして、うまく当てはまりそうだったので、 Scenic でUNION を使った VIEWを作り、 ActiveRecordのモデルで参照する方法で実装をはじめました。この記事では、上記実装に向けてまず簡単に Scenicで VIEWを作るところのみの説明をします。
Scenicの導入
gem の README を参考に作業して、すんなりできました。
以下要点だけまとめておきます。
- Gemfileにgem追加
rails g scenic:model 参照用モデル
db/views/参照用モデル_v01.sql
に SELECT文を記述rake db:migrate
db/views/参照用モデル_v01.sql
の例:SELECT users.id, users.email FROM usersここまでで、参照用モデルを使ってDBレコードを参照することができるようになりました。VIEWのバージョン管理もできています。
一応実行例を載せておきます。あまり意味が無い気もしますが、参考までに。
rails console
:参照用モデル.first終わり
とても簡単な導入記事になってしまいましたが、Qiitaで Scenicを扱う記事がなかったので少しで参考になれば幸いです。
次回は、具体的にアプリケーションのモデルを作成して複数のテーブルを参照できるようにします。
- 投稿日:2019-07-16T15:01:57+09:00
Transactionの中で意図的にロールバックさせたい
ActiveRecord::Base.transaction
はとっても便利です
save!メソッドなどの例外を拾ってロールバックを自動でかけてくれます
トランザクションの中でロールバックを意図的にかけたいときがあると思いますダメな例
begin ActiveRecord::Base.transaction do if xxx_method # trueかfalseを返すメソッド xxx else raise ActiveRecord::Rollback # ロールバックは実行される end end rescue e => # ここは実行されない Rails.logger.error(e) end良い例
ActiveRecord::RecordNotSaved
でもロールバックが走るため、こちらを例外として投げてあげると、
rescueでキャッチすることができるbegin ActiveRecord::Base.transaction do if xxx_method # trueかfalseを返すメソッド xxx else raise ActiveRecord::RecordNotSaved end end rescue e => # 実行される Rails.logger.error(e) end
- 投稿日:2019-07-16T14:05:51+09:00
Railsでsimple_formatとrails_autolinkを掛け合わせて使うと便利
文字列の中からリンクを自動で生成してくれるgemの
rails_autolink
と改行で表示してくれるsimple_format
を掛け合わせてみた。rails_autolinkをインストール
Gemfile.gem 'rails_autolink'これで
bundle install
を実行する。掛け合わせて使う
show.html.erb<%= auto_link(simple_format(@user.description), html: {target: '_blank'}) %>helperとしてmethod作成
method名はお好みでネーミングすれば良いのですが、
application_helper.rbdef regular_format(arg) auto_link(simple_format(arg), html: {target: '_blank'}) end
regular_format
という名前で定義してあげれば、先ほどのshow
はshow.html.erb<%= regular_format(@user.description), html: {target: '_blank'}) %>こうしてあげると色々便利です。
- 投稿日:2019-07-16T14:05:51+09:00
simple_formatとrails_autolinkを掛け合わせて使うと便利
文字列の中からリンクを自動で生成してくれるgemの
rails_autolink
と改行で表示してくれるsimple_format
を掛け合わせてみた。rails_autolinkをインストール
Gemfile.gem 'rails_autolink'これで
bundle install
を実行する。掛け合わせて使う
show.html.erb<%= auto_link(simple_format(@user.description), html: {target: '_blank'}) %>helperとしてmethod作成
method名はお好みでネーミングすれば良いのですが、
application_helper.rbdef regular_format(arg) auto_link(simple_format(arg), html: {target: '_blank'}) end
regular_format
という名前で定義してあげれば、先ほどのshow
はshow.html.erb<%= regular_format(@user.description), html: {target: '_blank'}) %>こうしてあげると色々便利です。
- 投稿日:2019-07-16T12:11:51+09:00
Rails6 のちょい足しな新機能を試す53(tiff 編)
はじめに
Rails 6 に追加されそうな新機能を試す第53段。 今回は、
tiff
編です。
Rails 6 では、variant
メソッドがtiff
フォーマットの画像ファイルをサポートするようになりました。Ruby 2.6.3, Rails 6.0.0.rc1, Rails 5.2.3 で確認しました。Rails 6.0.0.rc1 は
gem install rails --prerelease
でインストールできます。$ rails --version Rails 6.0.0.rc1準備
今回は、 Rails6 のちょい足しな新機能を試す15(Active Storage編) を元にして作業を進めます。
Gemfile に MiniMagick を追加する
画像を変換するために MiniMagick を使用します。
Gemfile... gem 'mini_magick' ...show ページを修正する
show ページで、
variant
メソッドを呼び出して画像ファイルをリサイズしてみます。
元の画像ファイルと、 50x50 に変換した画像を表示します。app/views/users/show.html.erb... <% if @user.avatar.attached? %> <h2>original size</h2> <%= image_tag @user.avatar %> <h2>50x50 size</h2> <%= image_tag @user.avatar.variant(resize: "50x50") %> <% end %> ...ユーザー登録して確認する
ブラウザからユーザーを登録します。
このとき画像ファイルとして tiff ファイルを選択します。
詳細画面を表示するとサイズを変換した画像が表示されます。なお、 tiff ファイルは、 IE や Safari であれば表示できますが、 Firefox や Chrome では表示できないようです。
ですが、サイズ変換した画像は、 PNG フォーマットになるので、変換した画像は、 Chrome でも表示できました。
下は、Chrome のスクリーンショットです。Rails 5 では
ActiveStorage::InvariableError
が発生します。試したソース
試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try053_accept_tiff_by_variant参考情報
- 投稿日:2019-07-16T09:04:05+09:00
TECH DAY 3
勉強した項目: Ruby、Rails
時間: 11:00
内容:*学習アウトプットです。なにぶん間違いなんかもあります。気をつけますがその際はご指摘いただけますと幸いです*
【attr_accessor】
ゲッター、セッターを簡単に定義できるメソッドclass Dog attr_accessor :name, :type, :age end【リファクタリング】
コードの仕様を変えずに中身を改善することRailsの環境構築 Homebrewについて
•Homebrewは、Mac OS上でのソフトウェア管理を行うソフトウェアのこと
•インターネット上から便利なアプリケーションを簡単にインストールしたり、そのバージョン管理をすることができるrbenvとruby-buildについて
•rbenvとruby-buildは、Rubyのバージョンを管理する際に組み合わせて使う
•benvを使用することでrubyのバージョンを切り替えることできる
•バージョンを切り替える必要は、開発環境によってはRubyの特定のバージョンでなければエラーが出てしまうことがあるためパスを通すとは
•本来アプリケーションを利用するためにはそのアプリケーションの実行ファイルが存在するディレクトリまで移動するか、実行ファイルの在処を絶対パスで指定する必要がある
•しかし、設定ファイルにコードを書き設定することで、どのディレクトリからもアプリケーションを呼び出せるようになる、これを「パスを通す」というMySQL
•データを保存するデーターベースサーバーの一種
gem
•Rubyを便利に扱うためのアプリケーションの総称
【rails new コマンド】
Railsで新規アプリケーションを作成する際に使用ターミナル
$ rails new アプリケーション名 # アプリケーションを新規作成 $ rails new アプリケーション名 -オプション名 # オプションを付けてアプリケーションを作成【リクエストとレスポンス】
PCやスマートフォンを使ってウェブサイトにアクセスした時、PCからはリクエストというものが送信され、
それに対して、リクエストを受け取ったサーバーはリクエストに対して適切なレスポンスを返すことRailsでの処理はルーティング→コントローラ→ビューの流れで行われている
【ルーティング】
ルーティングには、送られてきたリクエストに対してどのコントローラのどのアクションを動かすのかを設定する【コントローラ】
コントローラはルーティングとビューをつなぐ役割
リクエストが送られてきた際にルーティングが読まれると、それに対応するコントローラが動く
コントローラでの処理が終わると、そのコントローラから指定したビューが読みこまれる*コントローラはルーティングからビューへと処理を受け渡す役割
【モデル•ルーティング•コントローラー•ビュー】
•モデルは、アプリケーションとデータベースを繋げる
•ビューはブラウザに返すファイル
•ルーティングはリクエストに応じて呼び出すアクションを指定する【rails s コマン】
rails s コマンドはアプリケーションを動かすためのテストサーバーを起動するためのもの
rails sのsとはserverを省略したもの【 control c コマンド】
rails s コマンドで立ち上げたサーバーは
「control + c」(controlボタンとcを同時押し)で終了できる【テーブル】
表形式の収納場所【レコードとカラム】
テーブルの•横1行のことをレコード•縦1列のことをカラム【モデル】
Railsの中でデータベースへのアクセスをはじめとする情報のやりとりに関する処理を担当【モデルの命名規則】
種類 概要 名前例 モデルクラス名 先頭は大文字、単数形 Tweet モデルクラスのファイル名 先頭は小文字、単数形 tweet.rb テーブル名 先頭は小文字、複数形 tweets 【マイグレーションファイル】
マイグレーションファイルは、テーブルの設計図である。
マイグレーションファイルにどんなカラムを持つテーブルにするかを書き込み、実行することでテーブルが作成できる。
【ActiveRecord】
ActiveRecord(アクティブレコード)はRubyのGemの一つで、
このGemはモデルとテーブルをつなぎ合わせることで、Railsからテーブルのレコードにアクセスできるようなる【allメソッド】
allメソッドはApplicationRecordを継承したモデルと結びつくテーブルのレコードを全て取得できる
コンソール[1] pry(main)> Tweet.all【newメソッド・saveメソッド】
newメソッドはクラスのインスタンスを生成するメソッド
saveメソッドを実行するとテーブルに保存されるコンソール
[1] pry(main)> tweet = Tweet.new(name: "takamasa", text: "頑張ります") [2] pry(main)> tweet.save【ヘルパーメソッド】
Railsでは主にviewでHTMLタグを出現させたりテキストを加工するために予めメソッドが用意してある
他には、form_tag(フォームを出現させるメソッド)やlink_to(aタグを出現させるメソッド)などもあるビューファイル内で使用するメソッドである
- 投稿日:2019-07-16T05:59:15+09:00
【Programming News】Qiitaまとめ記事 July 15, 2019 Vol.1
筆者が昨日2019/7/15(月)に気になったQiitaの記事をまとめました。
Programming News
2019年
7月15(月)
Java
- Spring Boot
Kotlin
Python
- Beginner
- Tips
Ruby
- Beginner
- Apps
Rails
- Beginner
- OAuth
- Tips
C#
Android
Swift
- Summary
- Apps
- Tips
Flutter
- Tips
Vue.js
- Beginner
- Apps
Vuex
React
- Beginner
- Tips
JavaScript
- Beginner
Node.js
- Tips
Laravel
- Beginner
- Tips
jQuery
- Tips
Go言語
- Beginner
Unity
- Beginner
Bot
HTML
MySQL
- Beginner
AI
Git
- Beginner
- Tips
Azure
インフラ
- 仮想環境
- ubuntu
- ubuntu環境構築 #### Network
- Tips
RPA
Docker
- Beginner
Linux
Google Apps Script
- Beginner
- Tips
- Apps
Server Side
Develop
PowerShell
Vim
- Beginner
UML
- PlantUML
Raspberry
Security
- SSL
資格
- AWS
- 基本情報
- ネットワーク
更新情報
Kotlin
- Kotlin入門
Java
- Java 10
IDE