jp_address 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +241 -0
- data/Rakefile +1 -2
- data/db/migrate/20160312045953_create_jp_address_zipcodes.rb +1 -1
- data/lib/jp_address/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef948c1cac5b64467a6007a4679ce93ef6be1e68e367dbf52cabd69f7d3099f5
|
4
|
+
data.tar.gz: e08a3c24c255492740a037f02f27b09b3522034186753711c1f0fe1f524afa8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 489a71906ce28abc642138bc4129d8f3608098d1d6a666d43bef11ee083e6a31ccc4364f51a55a37ddae0eaad5e98bac1abe57041b5fbafd9aaf1a83d8cb2afb
|
7
|
+
data.tar.gz: 44d2f3ea727acff307d755a186817f341b6fb7e0b539822e65f39a294b78ec066903a5fa062835b367e3353bd05414ead9a84eadfbb4bb9d003ac7fa1a3d6d95
|
data/README.md
ADDED
@@ -0,0 +1,241 @@
|
|
1
|
+
# Ruby on Rails 6 で 郵便番号住所検索 な gem
|
2
|
+
|
3
|
+
## JpAddressとは
|
4
|
+
日本郵便の「[郵便番号データ](https://www.post.japanpost.jp/zipcode/dl/oogaki-zip.html)」を Rails 6.1 で使用するための gem です。
|
5
|
+
以下の機能を提供します。
|
6
|
+
|
7
|
+
* [[郵便番号データ](https://www.post.japanpost.jp/zipcode/dl/oogaki/zip/ken_all.zip "ken_all.zip")]をダウンロードして自前DBのテーブル(jp_address_zipcodes)にロードするクラスメソッド。(```JpAddress::Zipcode.load_master_data```)
|
8
|
+
* 郵便番号を受け取り都道府県名と住所をJSONで返却するAPI。
|
9
|
+
(```jp_address/zipcodes#search```)
|
10
|
+
|
11
|
+
要するに、「**郵便番号住所検索 ruby gem**」でググった人向けの gem です。
|
12
|
+
|
13
|
+
APIはお使いのRailsアプリケーションにマウントして使います。外部のサービスに依存しません。<br>
|
14
|
+
あと必要なのは、戻ってくるJSONを加工してHTML要素にセットするJavaScriptの記述だけです。<br>
|
15
|
+
(本記事下部にサンプルコードを掲載しています。)
|
16
|
+
|
17
|
+
### インストール
|
18
|
+
GemFileに追記
|
19
|
+
```ruby
|
20
|
+
gem 'jp_address'
|
21
|
+
```
|
22
|
+
|
23
|
+
### テーブル(jp_address_zipcodes)の作成
|
24
|
+
```
|
25
|
+
$ bundle
|
26
|
+
$ bundle exec rails jp_address:install:migrations
|
27
|
+
$ bundle exec rails db:migrate
|
28
|
+
```
|
29
|
+
|
30
|
+
### テーブルへの郵便番号データのロード
|
31
|
+
```
|
32
|
+
# 開発環境
|
33
|
+
$ bundle exec rails runner -e development 'JpAddress::Zipcode.load_master_data'
|
34
|
+
|
35
|
+
# 本番環境
|
36
|
+
$ bundle exec rails runner -e production 'JpAddress::Zipcode.load_master_data'
|
37
|
+
```
|
38
|
+
|
39
|
+
環境にもよりますが、1~3分ぐらいかかると思います。
|
40
|
+
|
41
|
+
※ APP_ROOT/tmp/ を作業ディレクトリに使用しています。<br>
|
42
|
+
※ 最初にテーブルをトランケートしますので、毎回「全件insert」になります。
|
43
|
+
|
44
|
+
### APIのマウント
|
45
|
+
Railsアプリの config/routes.rb に追記。
|
46
|
+
```ruby
|
47
|
+
mount JpAddress::Engine, at: "/jp_address"
|
48
|
+
```
|
49
|
+
|
50
|
+
### APIの利用
|
51
|
+
/jp_address にマウントした場合、下記URLへGETリクエストをすることで、JSONを取得できます。<br>
|
52
|
+
後はこれを好きに加工してテキストボックスなどにセットして使ってください。
|
53
|
+
|
54
|
+
**get リクエスト先**
|
55
|
+
```
|
56
|
+
http://localhost:3000/jp_address/zipcodes/search?zip=5330033
|
57
|
+
```
|
58
|
+
|
59
|
+
**API が返す JSON**
|
60
|
+
```js script
|
61
|
+
{"id":84280,"zip":"5330033","prefecture":"大阪府","city":"大阪市東淀川区","town":"東中島"}
|
62
|
+
```
|
63
|
+
|
64
|
+
### APIを利用するサンプル JavaScript
|
65
|
+
フォームに
|
66
|
+
1. #zipcode (郵便番号を入力するテキストボックス)
|
67
|
+
2. #prefecture_id (いわゆる都道府県プルダウン)
|
68
|
+
3. #address (住所を表示するテキストボックス)
|
69
|
+
|
70
|
+
の3要素があるとします。<br>
|
71
|
+
#zipcodeに入れられた値を keyup イベントで拾ってAPIを叩き、都道府県プルダウンを選択し、住所をセットするサンプルです。
|
72
|
+
|
73
|
+
都道府県プルダウンは、戻ってくるJSONの "prefecture" すなわち都道府県名で選択します。<br>
|
74
|
+
ですので、お持ちの都道府県マスターの各レコードがどのようなIDを持っていても構いません。
|
75
|
+
|
76
|
+
※ JQuery の存在を前提にしています。<br>
|
77
|
+
※ 郵便番号の半角ハイフンは自動でカットされます。<br>
|
78
|
+
※ もともと CoffeeScript で書いてあったソースを decaffeinate したものですので冗長です。本質的な処理はAddressSearch が担っているだけで、他の関数は decaffeinate に必要なだけです。
|
79
|
+
|
80
|
+
#### フォーム
|
81
|
+
```
|
82
|
+
<form>
|
83
|
+
<input type="text" name="zipcode" id="zipcode">
|
84
|
+
<select name="prefecture_id" id="prefecture_id">
|
85
|
+
<option value="1">北海道</option>
|
86
|
+
<option value="2">青森県</option>
|
87
|
+
<option value="3">岩手県</option>
|
88
|
+
<option value="4">宮城県</option>
|
89
|
+
<option value="5">秋田県</option>
|
90
|
+
<option value="6">山形県</option>
|
91
|
+
<option value="7">福島県</option>
|
92
|
+
<option value="8">東京都</option>
|
93
|
+
<option value="9">神奈川県</option>
|
94
|
+
<option value="10">埼玉県</option>
|
95
|
+
<option value="11">千葉県</option>
|
96
|
+
<option value="12">茨城県</option>
|
97
|
+
<option value="13">栃木県</option>
|
98
|
+
<option value="14">群馬県</option>
|
99
|
+
<option value="15">山梨県</option>
|
100
|
+
<option value="16">新潟県</option>
|
101
|
+
<option value="17">長野県</option>
|
102
|
+
<option value="18">富山県</option>
|
103
|
+
<option value="19">石川県</option>
|
104
|
+
<option value="20">福井県</option>
|
105
|
+
<option value="21">愛知県</option>
|
106
|
+
<option value="22">岐阜県</option>
|
107
|
+
<option value="23">静岡県</option>
|
108
|
+
<option value="24">三重県</option>
|
109
|
+
<option value="25">大阪府</option>
|
110
|
+
<option value="26">兵庫県</option>
|
111
|
+
<option value="27">京都府</option>
|
112
|
+
<option value="28">滋賀県</option>
|
113
|
+
<option value="29">奈良県</option>
|
114
|
+
<option value="30">和歌山県</option>
|
115
|
+
<option value="31">鳥取県</option>
|
116
|
+
<option value="32">島根県</option>
|
117
|
+
<option value="33">岡山県</option>
|
118
|
+
<option value="34">広島県</option>
|
119
|
+
<option value="35">山口県</option>
|
120
|
+
<option value="36">徳島県</option>
|
121
|
+
<option value="37">香川県</option>
|
122
|
+
<option value="38">愛媛県</option>
|
123
|
+
<option value="39">高知県</option>
|
124
|
+
<option value="40">福岡県</option>
|
125
|
+
<option value="41">佐賀県</option>
|
126
|
+
<option value="42">長崎県</option>
|
127
|
+
<option value="43">熊本県</option>
|
128
|
+
<option value="44">大分県</option>
|
129
|
+
<option value="45">宮崎県</option>
|
130
|
+
<option value="46">鹿児島県</option>
|
131
|
+
<option value="47">沖縄県</option>
|
132
|
+
</select>
|
133
|
+
<input type="text" name="address" id="address">
|
134
|
+
</form>
|
135
|
+
```
|
136
|
+
|
137
|
+
#### application.js など共通に読み込まれるファイルに配置するJavaScript
|
138
|
+
|
139
|
+
```js script
|
140
|
+
function _classCallCheck(instance, Constructor) {
|
141
|
+
if (!(instance instanceof Constructor)) {
|
142
|
+
throw new TypeError("Cannot call a class as a function");
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
function _defineProperties(target, props) {
|
147
|
+
for (var i = 0; i < props.length; i++) {
|
148
|
+
var descriptor = props[i];
|
149
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
150
|
+
descriptor.configurable = true;
|
151
|
+
|
152
|
+
if ("value" in descriptor)
|
153
|
+
descriptor.writable = true;
|
154
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
155
|
+
}
|
156
|
+
}
|
157
|
+
|
158
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
159
|
+
if (protoProps)
|
160
|
+
_defineProperties(Constructor.prototype, protoProps);
|
161
|
+
if (staticProps)
|
162
|
+
_defineProperties(Constructor, staticProps);
|
163
|
+
return Constructor;
|
164
|
+
}
|
165
|
+
|
166
|
+
var AddressSearch = function() {
|
167
|
+
"use strict";
|
168
|
+
function AddressSearch(zip_elem_id, prefecture_elem_id, address_elem_id) {
|
169
|
+
_classCallCheck(this, AddressSearch);
|
170
|
+
this.zip = $(zip_elem_id);
|
171
|
+
this.prefecture = $(prefecture_elem_id);
|
172
|
+
this.address = $(address_elem_id);
|
173
|
+
this.prefecture_elem_id = prefecture_elem_id;
|
174
|
+
}
|
175
|
+
|
176
|
+
_createClass(AddressSearch, [{
|
177
|
+
key: "_remove_hyphen",
|
178
|
+
value: function _remove_hyphen() {
|
179
|
+
return this.zip.val(this.zip.val().replace(/-/, ''));
|
180
|
+
}
|
181
|
+
}, {
|
182
|
+
key: "_clear_current_value",
|
183
|
+
value: function _clear_current_value() {
|
184
|
+
$(this.prefecture_elem_id + ' >option:eq(0)').prop('selected', true);
|
185
|
+
return this.address.val('');
|
186
|
+
}
|
187
|
+
}, {
|
188
|
+
key: "_set_prefecture",
|
189
|
+
value: function _set_prefecture(json) {
|
190
|
+
return $(this.prefecture_elem_id + ' > option').each(function() {
|
191
|
+
if ($(this).text() === json['prefecture']) {
|
192
|
+
return $(this).prop('selected', true);
|
193
|
+
}
|
194
|
+
});
|
195
|
+
}
|
196
|
+
}, {
|
197
|
+
key: "_set_address",
|
198
|
+
value: function _set_address(json) {
|
199
|
+
return this.address.val(json['city'] + json['town']);
|
200
|
+
}
|
201
|
+
}, {
|
202
|
+
key: "_call_api",
|
203
|
+
value: function _call_api() {
|
204
|
+
var _this = this;
|
205
|
+
return $.getJSON('/jp_address/zipcodes/search', {zip: this.zip.val()}, function(json) {
|
206
|
+
if (json['id'] === null) {
|
207
|
+
return _this._clear_current_value();
|
208
|
+
} else {
|
209
|
+
_this._set_prefecture(json);
|
210
|
+
return _this._set_address(json);
|
211
|
+
}
|
212
|
+
});
|
213
|
+
}
|
214
|
+
}, {
|
215
|
+
key: "execute",
|
216
|
+
value: function execute() {
|
217
|
+
this._remove_hyphen();
|
218
|
+
if (this.zip.val().length === 7) {
|
219
|
+
return this._call_api();
|
220
|
+
}
|
221
|
+
}
|
222
|
+
}]);
|
223
|
+
|
224
|
+
return AddressSearch;
|
225
|
+
}();
|
226
|
+
```
|
227
|
+
|
228
|
+
#### フォームのあるページに配置するJavaScript
|
229
|
+
```js script
|
230
|
+
// #zipcode, #prefecture_id, #address を各自の環境に合わせて書き換えてください。
|
231
|
+
$(function() {
|
232
|
+
var address_search = new AddressSearch('#zipcode', '#prefecture_id', '#address');
|
233
|
+
$('#zipcode').keyup(function() {
|
234
|
+
address_search.execute();
|
235
|
+
});
|
236
|
+
});
|
237
|
+
```
|
238
|
+
|
239
|
+
##### 作者
|
240
|
+
Copyright 2016 (c) Tad Kam, under MIT License.<br>
|
241
|
+
Tad Kam <densya203@skult.jp>
|
data/Rakefile
CHANGED
@@ -10,7 +10,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
10
10
|
rdoc.rdoc_dir = 'rdoc'
|
11
11
|
rdoc.title = 'JpAddress'
|
12
12
|
rdoc.options << '--line-numbers'
|
13
|
-
rdoc.rdoc_files.include('README.rdoc')
|
14
13
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
14
|
end
|
16
15
|
|
@@ -31,4 +30,4 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
31
30
|
end
|
32
31
|
|
33
32
|
task :default => :spec
|
34
|
-
task :test => :spec
|
33
|
+
task :test => :spec
|
data/lib/jp_address/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jp_address
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tad Kam
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -108,7 +108,7 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
description: JpAddress is simple japan-zipcode-address-search API. You can
|
111
|
+
description: JpAddress is simple japan-zipcode-address-search API. You can load master-data
|
112
112
|
from JapanPost and mount address-search-api to your rails application.
|
113
113
|
email:
|
114
114
|
- densya203@skult.jp
|
@@ -117,6 +117,7 @@ extensions: []
|
|
117
117
|
extra_rdoc_files: []
|
118
118
|
files:
|
119
119
|
- MIT-LICENSE
|
120
|
+
- README.md
|
120
121
|
- Rakefile
|
121
122
|
- app/assets/javascripts/jp_address/application.js
|
122
123
|
- app/assets/stylesheets/jp_address/application.css
|