Giter Club home page Giter Club logo

gimei's Introduction

Gimei

Coveralls Code Climate Gem

gimei は、日本人の名前や、日本の住所をランダムに返すライブラリです。テストの時などに使います。似たようなライブラリにfakerがあります。fakerはとても優れたライブラリで、多言語対応もしていますが、ふりがな(フリガナ)は流石に対応していません。gimei はふりがな(及びフリガナ)に対応しています。

使い方

名前をランダムで返す

下記のように使います。

gimei = Gimei.name
gimei.kanji          #=> "斎藤 陽菜"
gimei.hiragana       #=> "さいとう はるな"
gimei.katakana       #=> "サイトウ ハルナ"
gimei.romaji         #=> "Haruna Saitou"
gimei.gender         #=> :female
gimei.male?          #=> false
gimei.female?        #=> true
gimei.last.kanji     #=> "斎藤"
gimei.last.hiragana  #=> "さいとう"
gimei.last.katakana  #=> "サイトウ"
gimei.last.romaji    #=> "Saitou"
gimei.first.kanji    #=> "陽菜"
gimei.first.hiragana #=> "はるな"
gimei.first.katakana #=> "ハルナ"
gimei.first.romaji   #=> "Haruna"

gimei.last, gimei.first の代わりに、gimei.family, gimei.given を用いることもできます。

gimei.family.kanji     #=> "斎藤"
gimei.family.hiragana  #=> "さいとう"
gimei.family.katakana  #=> "サイトウ"
gimei.family.romaji    #=> "Saitou"

gimei.given.kanji    #=> "陽菜"
gimei.given.hiragana #=> "はるな"
gimei.given.katakana #=> "ハルナ"
gimei.given.romaji   #=> "Haruna"

下記のように男性/女性の名前を返すことを明示的に指定できます。Gimei.name の場合は男女の名前を等確率で返します。

gimei = Gimei.male
gimei.male?   #=> true
gimei.female? #=> false
gimei.gender  #=> :male
gimei.kanji   #=> "小林 顕士"

gimei = Gimei.female
gimei.male?   #=> false
gimei.female? #=> true
gimei.gender  #=> :female
gimei.kanji   #=> "根本 彩世"

漢字、ひらがな、カタカナ、ローマ字どれか一種類だけ取得できればよい場合には、下記のように短縮して書くことも出来ます。

Gimei.kanji          #=> "伊藤 結衣"
Gimei.hiragana       #=> "いとう みさき"
Gimei.katakana       #=> "タカハシ ユイナ"
Gimei.romaji         #=> "Miki Obara"
Gimei.last.kanji     #=> "清水"
Gimei.last.hiragana  #=> "いとう"
Gimei.last.katakana  #=> "コバヤシ"
Gimei.last.romaji    #=> "Wakabayashi"
Gimei.first.kanji    #=> "結菜"
Gimei.first.hiragana #=> "ここあ"
Gimei.first.katakana #=> "ヤマト"
Gimei.first.romaji   #=> "Noriyuki"

Gimei.family.kanji     #=> "黒沢"
Gimei.family.hiragana  #=> "いずみ"
Gimei.family.katakana  #=> "エノモト"
Gimei.family.romaji    #=> "Okada"

Gimei.given.kanji    #=> "航"
Gimei.given.hiragana #=> "まさみつ"
Gimei.given.katakana #=> "ユカ"
Gimei.given.romaji   #=> "Haruto"

同じ名前を二度取得したくない場合には、以下のようにuniqueを挟みます。次のようにすると、利用した名前をGimei内で保持することで必ず一意な名前を返すようにできます。

Gimei.unique.name

上記の場合は、フルネームの漢字が一意であることを保証します。つまり、次のように姓や名の単位では重複することもありえます。

Gimei.unique.name.kanji #=> "前島 真一"
Gimei.unique.name.kanji #=> "神谷 真一"
Gimei.unique.name.kanji #=> "前島 太郎"

これを避けたいときは次のようにlastfirstを利用してください。これは姓や名の単位で一意な名前を返します。

Gimei.unique.last
Gimei.unique.first

この場合でも、ふりがな(フリガナ)の単位では重複することがあります。

Gimei.unique.first.hiragana #=> "しんいち"
Gimei.unique.first.hiragana #=> "しんいち"

もし名前の候補が枯渇するなど、一意な名前を返せない場合はエラーになります。

これまで利用した名前のリストを消去したい場合は、次のようにします。

Gimei.unique.clear # 全体を消去
Gimei.unique.clear(:name) # Gimei.unique.name の結果を消去
Gimei.unique.clear(:first) # Gimei.unique.first の結果を消去

次のメソッドで生成された名前はGimei.unique.clear(:name)で消去します。

  • Gimei.unique.male
  • Gimei.unique.female
  • Gimei.unique.kanji

出力される名前の候補となるデータは lib/data/names.yml にあるので、必要であればファイルを修正してください。

住所をランダムで返す

バージョン0.2.0からは、住所情報も取得できるようになりました。都道府県、区、市、町を組み合わせた住所情報を漢字、ひらがな、カタカナで取得することができます。

address = Gimei.address
address.kanji                 # => 岡山県大島郡大和村稲木町
address.to_s                  # => 岡山県大島郡大和村稲木町
address.hiragana              # => おかやまけんおおしまぐんやまとそんいなぎちょう
address.katakana              # => オカヤマケンオオシマグンヤマトソンイナギチョウ
address.romaji                # => Okayamaken Ooshimagunyamatoson Inagicho

address.prefecture.kanji      # => 岡山県
address.prefecture.to_s       # => 岡山県
address.prefecture.hiragana   # => おかやまけん
address.prefecture.katakana   # => オカヤマケン
address.prefecture.romaji     # => Okayamaken

address.city.kanji            # => 大島郡大和村
address.city.to_s             # => 大島郡大和村
address.city.hiragana         # => おおしまぐんやまとそん
address.city.katakana         # => オオシマグンヤマトソン
address.city.romaji           # => Ooshimagunyamatoson

address.town.kanji            # => 稲木町
address.town.to_s             # => 稲木町
address.town.hiragana         # => いなぎちょう
address.town.katakana         # => イナギチョウ
address.town.romaji           # => Inagicho

省略形も用意しています。

Gimei.prefecture.kanji        # => 青森県
Gimei.prefecture.to_s         # => 滋賀県
Gimei.prefecture.hiragana     # => やまがたけん
Gimei.prefecture.katakana     # => チバケン
Gimei.prefecture.romaji       # => Wakayamaken

Gimei.city.kanji              # => 利根郡昭和村
Gimei.city.hiragana           # => うべし
Gimei.city.katakana           # => カモグンヤオツチョウ
Gimei.city.romaji             # => Itanogunaizumichou

Gimei.town.kanji              # => 竹野
Gimei.town.to_s               # => 富久山町南小泉
Gimei.town.hiragana           # => じょうしんでん
Gimei.town.katakana           # => イケナイ
Gimei.town.romaji             # => Heisei

同じ住所を二度取得したくない場合には、以下のようにuniqueを挟みます。次のようにすると、利用した住所をGimei内で保持することで必ず一意な名前を返すようにできます。

address = Gimei.unique.address

上記の場合は、住所全体が一意であることを保証します。つまり、次のように県や市町村の単位では重複することもありえます。

Gimei.unique.address.prefecture.kanji #=> 東京都
Gimei.unique.address.prefecture.kanji #=> 東京都

もし県や市町村の単位で一意であることを保証したいのであれば、次のように短縮形を使います。

Gimei.unique.prefecture.kanji #=> 東京都
Gimei.unique.prefecture.kanji #=> 神奈川県

もし住所の候補が枯渇するなど、一意な名前を返せない場合はエラーになります。

これまで利用した住所のリストを消去したい場合は、次のようにします。

Gimei.unique.clear # 全体を消去
Gimei.unique.clear(:address) # Gimei.unique.address の結果を消去
Gimei.unique.clear(:prefecture) # Gimei.unique.prefecture の結果を消去

出力される住所の候補となるデータは lib/data/addresses.yml にあるので、必要であればファイルを修正してください。

再現可能なランダムデータ

下記のように乱数生成器を設定することで、再現性のあるランダムデータを生成できます。

Gimei.config.rng = Random.new(42)
Gimei.name.kanji    #=> "飯島 誠吾"
Gimei.address.kanji #=> "熊本県日進市東場内"

Gimei.config.rng = Random.new(42)
Gimei.name.kanji    #=> "飯島 誠吾"
Gimei.address.kanji #=> "熊本県日進市東場内"

Supported versions

  • 2.3.x
  • 2.4.x
  • 2.5.x
  • 2.6.x
  • 2.7.x
  • 3.0.x
  • 3.1.x
  • 3.2.x
  • 3.3.x

他言語による実装

Installation

Add this line to your application's Gemfile:

gem 'gimei'

And then execute:

$ bundle

Or install it yourself as:

$ gem install gimei

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

gimei's People

Contributors

atolix avatar dependabot[bot] avatar greendrop avatar hamadata avatar hanachin avatar izumitomo avatar koic avatar kossy0701 avatar matarillo avatar miyohide avatar mpg-ryutaro-mitoda avatar nard-tech avatar purintai avatar takkanm avatar tmr111116 avatar willnet avatar youpong avatar yujideveloper avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gimei's Issues

郵便場号の生成機能

すてきなgemをありがとうございます。
住所に郵便場号があればなお便利かなと思って聞いてみたところです。
またこちらでPR作ってみたいと思います。

市町村統廃合のymlファイルへの反映

謝辞

便利なGemを作成し、公開していただいて誠にありがとうございます。

課題提起

以下のymlファイルを拝見させて頂きましたが、2014年以降にいくつか市町村の統廃合が行われていたようです。
該当ファイルURL: https://github.com/willnet/gimei/blob/master/lib/data/addresses.yml

実施年月日 旧市町村名 合併等の内容 合併、市・町制施行後の状況 JISコード
2019.05.01 篠山市 市名変更 丹波篠山市(タンバササヤマシ) 28221
2018.10.01 筑紫郡那珂川町 市制 那珂川市(ナカガワシ)(同郡消滅) 40231
2016.10.10 黒川郡富谷町 市制 富谷市(トミヤシ) 04216

出典: http://www.kokudo.or.jp/marge/result.php

こちらの修正プルリクエストを機を見て出してみたいと考えております。
以上、宜しくお願い致します。

データの読み込みを必要になるまで遅延させる

  • テスト環境以外でもgimeiを使っているケースがある
  • ピンポイントでgimeiを利用するシーンまでデータファイルの読み込みを遅延させると、普段のメモリ使用量が減りユーザに良い影響がありそう

0.2.0 リリース

だいぶ大幅にリファクタリングしたので、一晩おいて見なおして、問題なさそうなら 0.2.0 をリリースする

存在しない住所の組み合わせが出る

address = Gimei.address
address.kanji

=> #<Gimei::Address:0x00007f8caa4c9b70
 @city=#<Gimei::Address::City:0x00007f8caa4c9b20 @cities=["加茂郡八百津町", "かもぐんやおつちょう", "カモグンヤオツチョウ"]>,
 @prefecture=#<Gimei::Address::Prefecture:0x00007f8caa4c9b48 @prefectures=["愛知県", "あいちけん", "アイチケン"]>,
 @town=#<Gimei::Address::Town:0x00007f8caa4c9ad0 @towns=["港町", "みなとまち", "ミナトマチ"]>>
[4] pry(main)> address.kanji
=> "愛知県加茂郡八百津町港町

正しくは”岐阜県加茂郡八百津町”

Ruby 3.4のテストが失敗する

gimeiが依存しているromajiが標準添付ライブラリのnkfに依存しており、nkfがRuby3.4からdefault gemではなくなることからテストが失敗するようになってしまった。

/home/runner/work/gimei/gimei/vendor/bundle/ruby/3.4.0+0/gems/romaji-0.2.4/lib/romaji.rb:3: warning: nkf was loaded from the standard library, but is not part of the default gems since Ruby 3.4.0. Add nkf to your Gemfile or gemspec.
Stopped processing SimpleCov as a previous error not related to SimpleCov has been detected
/home/runner/.rubies/ruby-head/lib/ruby/3.4.0+0/bundled_gems.rb:[7](https://github.com/willnet/gimei/actions/runs/8865498997/job/24341815240#step:4:8)8:in 'Kernel.require': cannot load such file -- nkf (LoadError)
	from /home/runner/.rubies/ruby-head/lib/ruby/3.4.0+0/bundled_gems.rb:7[8](https://github.com/willnet/gimei/actions/runs/8865498997/job/24341815240#step:4:9):in 'block (2 levels) in Kernel#replace_require'
	from /home/runner/work/gimei/gimei/vendor/bundle/ruby/3.4.0+0/gems/romaji-0.2.4/lib/romaji.rb:3:in '<top (required)>'
	from /home/runner/.rubies/ruby-head/lib/ruby/3.4.0+0/bundled_gems.rb:78:in 'Kernel.require'
	from /home/runner/.rubies/ruby-head/lib/ruby/3.4.0+0/bundled_gems.rb:78:in 'block (2 levels) in Kernel#replace_require'
	from /home/runner/work/gimei/gimei/lib/gimei/name.rb:1:in '<top (required)>'
	from /home/runner/.rubies/ruby-head/lib/ruby/3.4.0+0/bundled_gems.rb:78:in 'Kernel.require'
	from /home/runner/.rubies/ruby-head/lib/ruby/3.4.0+0/bundled_gems.rb:78:in 'block (2 levels) in Kernel#replace_require'
	from /home/runner/work/gimei/gimei/lib/gimei.rb:4:in '<top (required)>'
	from /home/runner/.rubies/ruby-head/lib/ruby/3.4.0+0/bundled_gems.rb:78:in 'Kernel.require'
	from /home/runner/.rubies/ruby-head/lib/ruby/3.4.0+0/bundled_gems.rb:78:in 'block (2 levels) in Kernel#replace_require'
	from /home/runner/work/gimei/gimei/spec/spec_helper.rb:7:in '<top (required)>'
	from /home/runner/work/gimei/gimei/spec/address_spec.rb:2:in 'Kernel#require_relative'
	from /home/runner/work/gimei/gimei/spec/address_spec.rb:2:in '<top (required)>'
	from /home/runner/.rubies/ruby-head/lib/ruby/3.4.0+0/bundled_gems.rb:78:in 'Kernel.require'
	from /home/runner/.rubies/ruby-head/lib/ruby/3.4.0+0/bundled_gems.rb:78:in 'block (2 levels) in Kernel#replace_require'
	from /home/runner/work/gimei/gimei/vendor/bundle/ruby/3.4.0+0/gems/rake-[13](https://github.com/willnet/gimei/actions/runs/8865498997/job/24341815240#step:4:14).2.1/lib/rake/rake_test_loader.rb:21:in 'block in <main>'
	from /home/runner/work/gimei/gimei/vendor/bundle/ruby/3.4.0+0/gems/rake-13.2.1/lib/rake/rake_test_loader.rb:6:in 'Array#select'
	from /home/runner/work/gimei/gimei/vendor/bundle/ruby/3.4.0+0/gems/rake-13.2.1/lib/rake/rake_test_loader.rb:6:in '<main>'

ref: prepare 1.4.0 · willnet/gimei@391e7a7

字種の拡張

素晴らしい gem をありがとうございます。

さて,現状,人名も地名も文字種が JIS X 0208 の範囲に収まっていると思います。
目的によると思うのですが,システムの動作を確認するためのテストデータを作るうえで,

  • (シフト JIS を経由するシステムで)JIS X 0208 に含まれないが,Windows 31J(= CP932)に含まれる文字(髙〔ハシゴダカ〕,﨑〔タチサキ〕など)が正しく扱えるか
  • Windows 31J に含まれないが Unicode の基本多言語面(BMP: Basic Multilingual Plane)に含まれる文字(鷗,嵓など)が正しく扱えるか
  • Unicode の基本多言語面に含まれない文字(UTF-8 で 4 バイトになる文字;𡈽 など)が正しく扱えるか

といったことを確かめたいこともあると思いますので,ぜひデータの中に

  • 髙橋,山﨑
  • 鷗外
  • 嵓上(和歌山県西牟婁郡白浜町の地名)
  • 𡈽田

のようなものも含めていただければと思います。
(システムの動作を保証するうえでは,ランダムに発生させるデータではなく,上記のような文字列をあらわに記述したテストコードを書いて確認すべきですが,人手で動作を見たりデモンストレーションが目的の場合,やはりランダムにでも上記のような文字列が含まれていてほしいということです)

また,現状では人名に「島」(を含むもの)はあっても「嶋」(を含むもの)はありませんが,検索システムが異体字の揺れに対応していることを確認する(デモする)うえで,やはりあってほしいので,

  • 島/嶋(あるいは嶌なども)
  • 斉/齊/斎/齋
  • 龍/竜
  • 鉄/鐡/鐵

といった異体字のバリエーションも含まれているとよさそうです。

gemspec に license を追加

WARNING でるので。

WARNING:  licenses is empty
  Successfully built RubyGem
  Name: gimei
  Version: 0.0.1
  File: gimei-0.0.1.gem

電話番号生成機能

Gimei#phone 作りたい

gimei = Gimei.new
gimei.phone #=> '0311115678'

短縮形あり

Gimei.phone #=> '0312345678'

ハイフン付きでほしい

Gimei.phone(hyphen: true) #=>  '03-1234-5678'

ケータイの番号限定で返す(最初が090, 080になる)

Gimei.mobile_phone(hyphen: true) #=>  '090-1234-5678'

できたら

gimei = Gimei.new

としたときに、address と phone を一致させたいけどそれは余裕があったら。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.