4
3

More than 3 years have passed since last update.

Faker使ってFactoryBot作ったけど、たまに意図しないパスワードが生成されるから、コンソールで色々条件を変えて検証してみた話

Posted at

はじめに

 Fakerを使ってFactoryBotを作成して、テストコード書いていました。しかし、時々すでにテストコードが通っていた場所なのに、「パスワードが不正な値です」というエラーが出てしまいました。ふと、疑問に思い、Fakerについて調べてみました。
 主な内容は、Fakerが提供している、パスワードをランダムに生成する機能の英語を訳したようなものです。

Fakerとは

FakerのGitHub

 gemとしてインストールすることで、ランダムに色々な値を生成してくれます。名前や住所はもちろん、ポケモンの名前まで…(笑
 しかし、全て英語です…。私は、雰囲気だけで使ってます。

Faker::Internet

基本形

Faker::Internet.password
#=>"W9vSoO7oRzE5aNkB"

基本形と言いつつ、以下の文字からランダムにが選ばれています。字数はバラバラです。
- 大文字
- 小文字
- 数字

逆に、%や$や#などの記号は選ばれません。


ここからは、基本形に条件を加えていったものです。
まずは、

字数に条件を設ける

【最低文字数】

Faker::Internet.password(min_length: 8) #最低でも8文字生成します
#=>"IgQnSpLk113E"

【最大文字数】

Faker::Internet.password(max_length: 20) #最大でも20文字生成します
#=>"RbL74hTbLxJl1UrI5327"

次に紹介する2つは、ランダムに選ばれる文字の種類についてです。
2つともtruefalseを切り替えることが出来ます。

文字の種類に条件を設ける

【大文字小文字】

Faker::Internet.password(mix_case: true) #大文字も小文字も数字も選ばれる可能性があります
#=>"FbSeLc2PyJ"
Faker::Internet.password(mix_case: false) #大文字が選ばれることはありません
#=>"1w24yba8g1wa"

【大文字小文字】はデフォルトでtrueです。

【記号】

Faker::Internet.password(special_characters: true) #色々な記号が選ばれる可能性があります
#=>"!@*2zBxB7yD4yCl"
Faker::Internet.password(special_characters: false) #記号が選ばれることはありません
#=>"50MtIaT8kLaHv"

これは、もはや、基本形と全く同じ状態です。
【記号】については、デフォルトでfalseです。

備考

 それぞれの条件は単体で使うことも、組み合わせて使うことも可能です。生成したいパスワードに合わせて指定してください。組み合わせる際は、,で区切ります。
例)
最大文字数記号可

Faker::Internet.password(max_length: 10, special_characters: true)
#=>"#%&!4XxO"

最低文字数大文字不可

Faker::Internet.password(min_length: 6, mix_case: false)
#=>"ysndk7ao450u"

最低最高文字数大文字不可・記号可

Faker::Internet.password(min_length: 6, max_length: 10, mix_case: false, special_characters: true)
#=>"$l0cam32"

最後に

 あくまで、ランダムに生成されているので、確率の問題で、たまに、数字が入らず、バリデーションで英数字最低1文字以上としていると、エラーになることがあります。現状の解決方法としては、最低文字数を多めに設定しておけば、数字がないために、エラーとなる可能性を減らすことが出来そうです。
 正規表現みたいに、英数字最低1文字以上という指定の仕方があればいいのに…

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3