diff --git a/README.md b/README.md index e4f641b..0848405 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ -# [gimei-cli] -- 偽名・住所データ生成ツール +# [gimei-cli] -- 姓名・住所データ生成ツール [![check vulns](https://github.com/spiegel-im-spiegel/gimei-cli/workflows/vulns/badge.svg)](https://github.com/spiegel-im-spiegel/gimei-cli/actions) [![lint status](https://github.com/spiegel-im-spiegel/gimei-cli/workflows/lint/badge.svg)](https://github.com/spiegel-im-spiegel/gimei-cli/actions) [![GitHub license](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://raw.githubusercontent.com/spiegel-im-spiegel/gimei-cli/master/LICENSE) [![GitHub release](https://img.shields.io/github/release/spiegel-im-spiegel/gimei-cli.svg)](https://github.com/spiegel-im-spiegel/gimei-cli/releases/latest) +[willnet/gimei](https://github.com/willnet/gimei "willnet/gimei: random Japanese name and address generator") および [mattn/go-gimei](https://github.com/mattn/go-gimei) からの fork で,コマンドライン上で姓名や住所名のダミーデータを大量に生成することを目標に作成しています。 + ## ビルド & インストール ``` @@ -19,7 +21,7 @@ See [latest release](https://github.com/spiegel-im-spiegel/gimei-cli/releases/la ``` $ gimei-cli -h -偽名・住所データ生成ツール +姓名・住所データ生成ツール Usage: gimei-cli [flags] @@ -29,7 +31,7 @@ Available Commands: address 住所名の生成 cities 市区町村の表示 completion generate the autocompletion script for the specified shell - gimei 偽名の生成 + gimei 姓名の生成 help Help about any command prefectures 都道府県の表示 version バージョン表示 @@ -43,7 +45,7 @@ Flags: -n, --name string 絞り込み市区町村名(一部でも可) -r, --repeat int 試行回数 (default 1) -t, --template-path string テンプレートファイルへのパス - -u, --unique 住所名の重複を避ける + -u, --unique 姓名+住所名の重複を避ける Use "gimei-cli [command] --help" for more information about a command. @@ -92,7 +94,26 @@ $ gimei-cli --json | jq . ] ``` -テンプレートファイルを指定して任意に整形することも可能。 +- 姓名および住所名のデータは [willnet/gimei](https://github.com/willnet/gimei "willnet/gimei: random Japanese name and address generator") のものを利用している +- 性別は男性・女性が概ね半々になるよう調整している。また `--gender` (`-g`) オプションを付けると 1/16 の確率で「その他」の性が出現する +- 住所名は Prefecture, City, Town をランダムに組み合わせているため実在しない住所が多く出る。なお `--name` (`-n`) オプションでキーワードを指定するとキーワードを含む市区町村で絞り込むことができる + +``` +$ gimei-cli -r 10 -n 広島 +高松 昌史 (タカマツ マサシ : 男性) -> 広島県 府中市 矢田 (ヒロシマケン フチュウシ ヤタ) +平山 颯馬 (ヒラヤマ ソウマ : 男性) -> 広島県 大竹市 木伏 (ヒロシマケン オオタケシ キップシ) +中原 成果 (ナカハラ ナルミ : 女性) -> 広島県 三次市 丸山町 (ヒロシマケン ミヨシシ マルヤマチョウ) +和田 鮎夢 (ワダ アユム : 男性) -> 北海道 北広島市 御津町豊沢樽美 (ホッカイドウ キタヒロシマシ ミトチョウトヨサワタルミ) +前川 啓文 (マエカワ ヒロフミ : 男性) -> 広島県 東広島市 相島 (ヒロシマケン ヒガシヒロシマシ アイシマ) +向井 竜次 (ムカイ リュウジ : 男性) -> 広島県 広島市安佐北区 赤城町 (ヒロシマケン ヒロシマシアサキタク アカシロチョウ) +水野 成樹 (ミズノ セイキ : 男性) -> 広島県 安芸高田市 美濃池町 (ヒロシマケン アキタカタシ ミノノイケチョウ) +平川 昌紀 (ヒラカワ マサキ : 男性) -> 広島県 廿日市市 八幡町 (ヒロシマケン ハツカイチシ ハチマンチョウ) +岡本 夏甫 (オカモト カホ : 女性) -> 広島県 広島市安佐南区 小谷美濃山町 (ヒロシマケン ヒロシマシアサミナミク オダニミノヤマチョウ) +川田 規加 (カワタ ミカ : 女性) -> 広島県 尾道市 氷上町絹山 (ヒロシマケン オノミチシ ヒカミチョウキヌヤマ) +``` + +- `--unique` (`-u`) オプションを付けると姓名+住所名の組み合わせで重複するものを排除する +- `--template-path` (`-t`) オプションでテンプレートファイルを指定し,出力を任意に整形することが可能 ``` $ cat testdata/template.txt @@ -115,8 +136,338 @@ $ gimei-cli -r 10 -t testdata/template.txt | 松井善和 | マツイ ヨシカズ | 男性 | y.matsui@example.com | 和歌山県常滑市坪山 | ワカヤマケン トコナメシ ツボヤマ | ``` +### 姓名の生成 + +``` +$ gimei-cli gimei -h +姓名の生成 + +Usage: + gimei-cli gimei [flags] + +Aliases: + gimei, name, g, n + +Flags: + --crypt-rand crypt/rand 乱数生成器を使う + -g, --gender 「その他」の性別を含める + -h, --help help for gimei + -j, --json JSON形式で表示 + -r, --repeat int 試行回数 (default 1) + -t, --template-path string テンプレートファイルへのパス + -u, --unique 姓名の重複を避ける + +Global Flags: + --debug for debug + +$ gimei-cli gimei +多田 爽太 (タダ ソウタ : 男性) + +$ gimei-cli gimei --json | jq . +[ + { + "Gender": 1, + "FirstName": { + "Name": "有星", + "Katakana": "アリセ", + "Hiragana": "ありせ", + "Roman": "arise" + }, + "LastName": { + "Name": "菅原", + "Katakana": "スガハラ", + "Hiragana": "すがはら", + "Roman": "sugahara" + } + } +] +``` + +- 性別は男性・女性が概ね半々になるよう調整している。また `--gender` (`-g`) オプションを付けると 1/16 の確率で「その他」の性が出現する +- `--unique` (`-u`) オプションを付けると重複する姓名(読み仮名は無視)を排除する +- `--template-path` (`-t`) オプションでテンプレートファイルを指定し,出力を任意に整形することが可能 + +``` +$ cat testdata/gimei-template.txt +| 名前 | カタカナ | 性別 | メールアドレス | +| --- | --- | :---: | --- |{{ range . }} +| {{ .FullName.Name }} | {{ (.FullNameWithSep " ").Katakana }} | {{ .Gender }} | {{ .Email }} |{{ end }} + +$ gimei-cli gimei -g -r 10 -t testdata/gimei-template.txt +| 名前 | カタカナ | 性別 | メールアドレス | +| --- | --- | :---: | --- | +| 竹内秋甫 | タケウチ アキホ | 女性 | a.takeuchi@example.com | +| 清水学 | シミズ マナブ | 男性 | m.shimizu@example.com | +| 松原優佑 | マツバラ ユウスケ | 男性 | y.matsubara@example.com | +| 大久保彩郁 | オオクボ アヤカ | 女性 | a.ookubo@example.com | +| 三好慎之介 | ミヨシ シンノスケ | 男性 | s.miyoshi@example.com | +| 須田咲枝 | スダ サエ | 女性 | s.suda@example.com | +| 滝沢祐作 | タキザワ ユウサク | 男性 | y.takizawa@example.com | +| 寺田彰 | テラダ アキラ | その他 | a.terada@example.com | +| 関口昌則 | セキグチ マサノリ | 男性 | m.sekiguchi@example.com | +| 中本知保 | ナカモト チホ | 女性 | c.nakamoto@example.com | +``` + +### 住所名の生成 + +``` +$ gimei-cli address -h +住所名の生成 + +Usage: + gimei-cli address [flags] + +Aliases: + address, addr, a + +Flags: + --crypt-rand crypt/rand 乱数生成器を使う + -h, --help help for address + -j, --json JSON形式で表示 + -n, --name string 絞り込み市区町村名(一部でも可) + -r, --repeat int 試行回数 (default 1) + -t, --template-path string テンプレートファイルへのパス + -u, --unique 住所名の重複を避ける + +Global Flags: + --debug for debug + +$ gimei-cli address +佐賀県 新座市 原町田 (サガケン ニイザシ ハラマチダ) + +$ gimei-cli address --json | jq . +[ + { + "Prefecture": { + "Name": "山口県", + "Katakana": "ヤマグチケン", + "Hiragana": "やまぐちけん", + "Roman": "yamaguchiken" + }, + "City": { + "Name": "西諸県郡高原町", + "Katakana": "ニシモロカタグンタカハルチョウ", + "Hiragana": "にしもろかたぐんたかはるちょう", + "Roman": "nishimorokataguntakaharuchou" + }, + "Town": { + "Name": "岩崎", + "Katakana": "イワサキ", + "Hiragana": "いわさき", + "Roman": "iwasaki" + } + } +] +``` + +- `--name` (`-n`) オプションでキーワードを指定するとキーワードを含む市区町村で絞り込むことができる + +``` +$ gimei-cli address -r 10 -n 広島 +広島県 大竹市 大淀南 (ヒロシマケン オオタケシ オオヨドミナミ) +広島県 竹原市 本渡町本渡 (ヒロシマケン タケハラシ ホンドマチホンド) +広島県 府中市 宇筒原 (ヒロシマケン フチュウシ ウトウバラ) +北海道 北広島市 宮丸 (ホッカイドウ キタヒロシマシ ミヤマル) +広島県 府中市 波積町本郷 (ヒロシマケン フチュウシ ハヅミチョウホンゴウ) +広島県 尾道市 加子母 (ヒロシマケン オノミチシ カシモ) +広島県 廿日市市 高坂 (ヒロシマケン ハツカイチシ タカサカ) +広島県 庄原市 吉川区泉 (ヒロシマケン ショウバラシ ヨシカワクイズミ) +広島県 広島市安佐北区 吉田町 (ヒロシマケン ヒロシマシアサキタク ヨシダマチ) +広島県 三次市 新宮町市野保 (ヒロシマケン ミヨシシ シングウチョウイチノホ) +``` + +- `--unique` (`-u`) オプションを付けると重複する住所名を排除する +- `--template-path` (`-t`) オプションでテンプレートファイルを指定し,出力を任意に整形することが可能 + +``` +$ cat testdata/address-template.txt +| 都道府県 | 市区町村 | 住所 | カタカナ | +| --- | --- | --- | --- |{{ range . }} +| {{ .Prefecture.Name }} | {{ .City.Name }} | {{ .Town.Name }} | {{ (.FullNameWithSep " ").Katakana }} |{{ end }} + +$ gimei-cli address -r 10 -t testdata/address-template.txt +| 都道府県 | 市区町村 | 住所 | カタカナ | +| --- | --- | --- | --- | +| 長崎県 | 碧南市 | 南崩山町 | ナガサキケン ヘキナンシ ミナミクエヤママチ | +| 佐賀県 | 伊都郡九度山町 | 大瀬戸町雪浦久良木郷 | サガケン イトグンクドヤマチョウ オオセトチョウユキノウラキュウラギゴウ | +| 鳥取県 | 韮崎市 | 宝町 | トットリケン ニラサキシ タカラマチ | +| 鳥取県 | 島牧郡島牧村 | 赤橋 | トットリケン シママキグンシママキムラ アカイバシ | +| 山梨県 | 神戸市北区 | 南新町 | ヤマナシケン コウベシキタク ミナミシンマチ | +| 山口県 | 東蒲原郡阿賀町 | 猫田 | ヤマグチケン ヒガシカンバラグンアガマチ ネコダ | +| 徳島県 | 伊万里市 | 朽木平良 | トクシマケン イマリシ クツキヘラ | +| 奈良県 | 加賀郡吉備中央町 | 亀崎 | ナラケン カガグンキビチュウオウチョウ カメザキ | +| 福井県 | 横浜市青葉区 | 長府新松原町 | フクイケン ヨコハマシアオバク チョウフシンマツバラチョウ | +| 香川県 | 能美市 | 美星町烏頭 | カガワケン ノミシ ビセイチョウウトウ | +``` + +### 都道府県の表示 + +``` +$ gimei-cli prefectures -h +都道府県JISコードおよび都道府県名の表示 + +Usage: + gimei-cli prefectures [flags] + +Aliases: + prefectures, prefs, pref, p + +Flags: + -h, --help help for prefectures + -j, --json JSON形式で表示 + -n, --name string 都道府県名(一部でも可) + +Global Flags: + --debug for debug + +$ gimei-cli prefectures +01: 北海道 (ホッカイドウ) +02: 青森県 (アオモリケン) + +... + +46: 鹿児島県 (カゴシマケン) +47: 沖縄県 (オキナワケン) +``` + +- `--name` (`-n`) オプションでキーワードを指定するとキーワードを含む都道府県名で絞り込むことができる + +``` +$ gimei-cli prefectures -n 島 +07: 福島県 (フクシマケン) +32: 島根県 (シマネケン) +34: 広島県 (ヒロシマケン) +36: 徳島県 (トクシマケン) +46: 鹿児島県 (カゴシマケン) + +$ gimei-cli prefectures -n 島 --json | jq . +[ + { + "Code": "07", + "Name": "福島県", + "Katakana": "フクシマケン", + "Hiragana": "ふくしまけん", + "Roman": "fukushimaken" + }, + { + "Code": "32", + "Name": "島根県", + "Katakana": "シマネケン", + "Hiragana": "しまねけん", + "Roman": "shimaneken" + }, + { + "Code": "34", + "Name": "広島県", + "Katakana": "ヒロシマケン", + "Hiragana": "ひろしまけん", + "Roman": "hiroshimaken" + }, + { + "Code": "36", + "Name": "徳島県", + "Katakana": "トクシマケン", + "Hiragana": "とくしまけん", + "Roman": "tokushimaken" + }, + { + "Code": "46", + "Name": "鹿児島県", + "Katakana": "カゴシマケン", + "Hiragana": "かごしまけん", + "Roman": "kagoshimaken" + } +] +``` + +### 市区町村の表示 + +``` +$ gimei-cli cities -h +市区町村JISコードおよび市区町村名(都道府県+市区町村)の表示 + +Usage: + gimei-cli cities [flags] + +Aliases: + cities, city, c + +Flags: + -h, --help help for cities + -j, --json JSON形式で表示 + -n, --name string 市区町村名(一部でも可) + +Global Flags: + --debug for debug + +$ gimei-cli cities +01100: 北海道札幌市 (ホッカイドウサッポロシ) +01202: 北海道函館市 (ホッカイドウハコダテシ) + +... + +47381: 沖縄県竹富町 (オキナワケンタケトミチョウ) +47382: 沖縄県与那国町 (オキナワケンヨナグニチョウ) +``` + +- JIS都道府県コードおよびJIS市区町村コードは総務省の「[全国地方公共団体コード](https://www.soumu.go.jp/denshijiti/code.html "総務省|地方行政のデジタル化|全国地方公共団体コード")」で公開されているデータを利用している +- `--name` (`-n`) オプションでキーワードを指定するとキーワードを含む市区町村名で絞り込むことができる + +``` +$ gimei-cli cities -n 広島市 +01234: 北海道北広島市 (ホッカイドウキタヒロシマシ) +34100: 広島県広島市 (ヒロシマケンヒロシマシ) +34212: 広島県東広島市 (ヒロシマケンヒガシヒロシマシ) + +$ gimei-cli cities -n 広島市 --json | jq . +[ + { + "Code": "01234", + "Pref": { + "Code": "01", + "Name": "北海道", + "Katakana": "ホッカイドウ", + "Hiragana": "ほっかいどう", + "Roman": "hokkaidou" + }, + "Name": "北広島市", + "Katakana": "キタヒロシマシ", + "Hiragana": "きたひろしまし", + "Roman": "kitahiroshimashi" + }, + { + "Code": "34100", + "Pref": { + "Code": "34", + "Name": "広島県", + "Katakana": "ヒロシマケン", + "Hiragana": "ひろしまけん", + "Roman": "hiroshimaken" + }, + "Name": "広島市", + "Katakana": "ヒロシマシ", + "Hiragana": "ひろしまし", + "Roman": "hiroshimashi" + }, + { + "Code": "34212", + "Pref": { + "Code": "34", + "Name": "広島県", + "Katakana": "ヒロシマケン", + "Hiragana": "ひろしまけん", + "Roman": "hiroshimaken" + }, + "Name": "東広島市", + "Katakana": "ヒガシヒロシマシ", + "Hiragana": "ひがしひろしまし", + "Roman": "higashihiroshimashi" + } +] +``` + ## Modules Requirement Graph [![dependency.png](./dependency.png)](./dependency.png) -[gimei-cli]: https://github.com/spiegel-im-spiegel/gimei-cli "spiegel-im-spiegel/gimei-cli: 偽名・住所データ生成ツール" +[gimei-cli]: https://github.com/spiegel-im-spiegel/gimei-cli "spiegel-im-spiegel/gimei-cli: 姓名・住所データ生成ツール" diff --git a/ecode/ecode.go b/ecode/ecode.go deleted file mode 100644 index ef60c9b..0000000 --- a/ecode/ecode.go +++ /dev/null @@ -1,31 +0,0 @@ -package ecode - -import "errors" - -var ( - ErrNullPointer = errors.New("null reference instance") - ErrNoCommand = errors.New("No command") -) - -/* MIT License - * - * Copyright 2021 Spiegel - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ diff --git a/facade/facade.go b/facade/facade.go index 30412b4..fcc0482 100644 --- a/facade/facade.go +++ b/facade/facade.go @@ -29,8 +29,8 @@ var ( func newRootCmd(ui *rwi.RWI, args []string) *cobra.Command { rootCmd := &cobra.Command{ Use: Name, - Short: "偽名・住所データ生成ツール", - Long: "偽名・住所データ生成ツール", + Short: "姓名・住所データ生成ツール", + Long: "姓名・住所データ生成ツール", RunE: func(cmd *cobra.Command, args []string) error { // options jsonFlag, err := cmd.Flags().GetBool("json") @@ -110,7 +110,7 @@ func newRootCmd(ui *rwi.RWI, args []string) *cobra.Command { //options rootCmd.Flags().BoolP("json", "j", false, "JSON形式で表示") - rootCmd.Flags().BoolP("unique", "u", false, "住所名の重複を避ける") + rootCmd.Flags().BoolP("unique", "u", false, "姓名+住所名の重複を避ける") rootCmd.Flags().StringP("name", "n", "", "絞り込み市区町村名(一部でも可)") rootCmd.Flags().BoolP("gender", "g", false, "「その他」の性別を含める") rootCmd.Flags().BoolP("crypt-rand", "", false, "crypt/rand 乱数生成器を使う") diff --git a/facade/name.go b/facade/name.go index 01e8e2c..e25b7e1 100644 --- a/facade/name.go +++ b/facade/name.go @@ -17,8 +17,8 @@ func newNameCmd(ui *rwi.RWI) *cobra.Command { nameCmd := &cobra.Command{ Use: "gimei", Aliases: []string{"name", "g", "n"}, - Short: "偽名の生成", - Long: "偽名の生成", + Short: "姓名の生成", + Long: "姓名の生成", RunE: func(cmd *cobra.Command, args []string) error { // options jsonFlag, err := cmd.Flags().GetBool("json") @@ -81,7 +81,7 @@ func newNameCmd(ui *rwi.RWI) *cobra.Command { } nameCmd.Flags().BoolP("json", "j", false, "JSON形式で表示") nameCmd.Flags().BoolP("gender", "g", false, "「その他」の性別を含める") - nameCmd.Flags().BoolP("unique", "u", false, "名前の重複を避ける") + nameCmd.Flags().BoolP("unique", "u", false, "姓名の重複を避ける") nameCmd.Flags().BoolP("crypt-rand", "", false, "crypt/rand 乱数生成器を使う") nameCmd.Flags().IntP("repeat", "r", 1, "試行回数") nameCmd.Flags().StringP("template-path", "t", "", "テンプレートファイルへのパス") diff --git a/testdata/address-template.txt b/testdata/address-template.txt index ce4ebac..1562e9c 100644 --- a/testdata/address-template.txt +++ b/testdata/address-template.txt @@ -1,3 +1,3 @@ | 都道府県 | 市区町村 | 住所 | カタカナ | -| --- | --- | :---: | --- |{{ range . }} +| --- | --- | --- | --- |{{ range . }} | {{ .Prefecture.Name }} | {{ .City.Name }} | {{ .Town.Name }} | {{ (.FullNameWithSep " ").Katakana }} |{{ end }}