IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

gem の sorcery を使ってみる

はじめに

gem の sorceryを使うと、認証機能を作成できる。

 

使ってみる

サンプル用のプロジェクトを作成する。

  • rails new sorcery_sample
  • cd sorcery_sample

 

sorcery をインストールする。

  • echo 'gem "sorcery"' >> Gemfile
  • bundle

 

ジェネレーターを実行して初期設定をする。

  • bin/rails generate sorcery:install

 

マイグレーションを実行する。

 

これによって、users テーブルは以下のようになる。

f:id:matt-note:20190707165603p:plain


コンソールを起動して、User を作成してみる。

f:id:matt-note:20190707165736p:plain

-> ユーザーから password の文字列が渡されると、変換された crypted_password と salt の値が DB に自動的に設定されることになる。(password をそのままDBで保存しない)

 

sorcery は devise と違って、コントローラやビューのファイルは自前で作成していく必要がある。この点のつくり方は、公式のチュートリアルの通りに作ると、作成できる。

 

Ruby で image_processing を使ってみる

はじめに

Rails6 から画像ファイルを加工する gem が minimagick から image_processing に変更になるとのことで、試しに使ってみることにする。

 

使ってみる

使い方は image_processing リポジトリの doc に書かれている。

 

gem をインストールする。

  • gem install image_processing

 

ここでは2枚の画像を合成してみることにする。

まず source メソッドで画像の読み込みを行い、composite メソッドで合成する画像を指定して、どこに配置するのか指定する。最後に call メソッドで画像処理を実行する。この時に destination オプションを渡すと、実行結果を書き込む場所を指定することができる。

f:id:matt-note:20190703182338p:plain

 

f:id:matt-note:20190703183231p:plain

-> image_processing を使って画像を合成することができた。

 

Rails のモデルから Active Strorage で保存したファイルのパスを取得してみる

はじめに

ActiveStorage::Blob.service.path_for(avatar.key) のようにして、Rails のモデルから Active Storage で保存したファイルのパスを取得することができる。

 

使ってみる

ここでは ActiveStorage で外部の画像を保存してみる で作成したリポジトリで実行してみることにする。

コンソールを起動する。

f:id:matt-note:20190701160405p:plain

-> Active Storage で保存したファイルのパスを取得できた。

 

「モデル」から Active Storage で保存したファイルのパスを取得する場合、以下のメソッドを実行してみたが、うまくいかなかった。

  • url_for
  • polymorphic_url
  • rails_blob_path
  • rails_representation_url
  • service_url

 

Ruby の pop/shift メソッドを使ってみる

はじめに

Ruby には破壊的メソッドがある。破壊的メソッドはレシーバであるオブジェクトそのものに変更を加えるメソッドで、この使い方の理解があやふやだと実際に使いこなすことはできない。

 

使ってみる

以下の例では、配列に対して pop メソッドを実行して、返り値を変数に格納している。この時の返り値は、配列から削除された配列の最後の要素が返される("123")。一方で、配列には代入をしていないけれど、配列の状態が変化する("123"がなくなる)。

f:id:matt-note:20190628223510p:plain

 

split メソッドと組み合わせると、うまいこと文字列を分割して、特定の要素を抜き出すことができる。

f:id:matt-note:20190628224015p:plain

 

shift メソッドも同様にして、破壊的メソッドとして使うことができる。

文字列で先頭の @ を削除した文字列を得たい場合は、以下のようにして実行できる。

f:id:matt-note:20190707143713p:plain

 

なお、破壊的メソッドをメソッドチェーンして実行しようとする時は注意が必要になる。(ここでの戻り値は "@" になるため、join メソッドを呼び出せず、エラーになる)

f:id:matt-note:20190707143853p:plain

 

配列の要素が1つの時の Ruby の join メソッドの動作

使ってみる

以下の例では、配列に文字列が2つあり、これに対して join メソッドを実行している。この時は普通に join メソッドで文字列を "_" で結合させた結果を返す。ここでは "hello_world" が返される。

f:id:matt-note:20190628220751p:plain

 

一方で、配列の要素が1つで、join メソッドの引数に "_" を渡して実行した場合、実行結果は "hello_" とはならず、"hello" を返す。この動作は私には少し驚きだった。

f:id:matt-note:20190628221024p:plain

 

まとめると、以下のようになる。

f:id:matt-note:20190628231848p:plain

 

まとめ

配列の要素が1つの時は、文字列の結合が実行されず、join メソッドの引数で渡した文字列は結合されない。

 

Firefox で uBlacklist を使って codeday を表示しないようにする

はじめに

codeday というサイトが邪魔だったので、Google の検索で表示されないようにしたい。uBlacklist というアドオンを使うと、これを実現することができる。

 

使ってみる

Ctrl + Shift + a でアドオンの設定画面を表示できる。

以下のようにすると、codeday.me を Google の検索結果に表示しないようにすることができる。

f:id:matt-note:20190627134417p:plain

参考

Ubuntu/Ruby で headless ブラウザを使ってみる

はじめに

gem の headless を使うことで、Ubuntu でも leadless ブラウザを使えるようになった。

 

使ってみる

インストールには、以下のコマンドを実行する。

  • sudo apt-get install xvfb
  • gem install headless

 

以下のようにすると、Google にアクセスして title 要素を表示することができる。

f:id:matt-note:20190627122241p:plain

f:id:matt-note:20190627122357p:plain