LoginSignup
18
14

More than 5 years have passed since last update.

日本の住所関連のマスターデータをライブラリにしてみた

Last updated at Posted at 2018-05-10

発端と問題意識

今まで幾度となく、areasテーブルだとかprefecturesテーブルだとかつくってきました。
毎回バカみたいにseederクラスを作ってました。

...この時間って超無駄じゃなイカ?
...余計な機能なんていらないからmigrationとseedだけライブラリにまとめとけばいいんじゃなイカ?

...そして重い腰が偶然にも上がってしましたとさ。

方針

migrationとseedだけあればいいかな?(適当)
一応、最低限のModelくらいはつくっとくか(良心)

コードとかデータとか概要

データは日本郵便から引っ張りました。

物理名 論理名 備考
areas 地域        8地域
prefectures 都道府県 47都道府県
cities 市区町村 1,896市区町村
towns 町域        116,787町域。郵便番号データあり。

導入方法

インストール

作ったもののテストなどほぼしてませんので、自己責任でお願いします。(無責任)

composer require new-japan-orders/japanese-address

migrationとseederを展開

php artisan vendor:publish --provider "NewJapanOrders\JapaneseAddress\ServiceProvider"
composer dump-autoload

以下のファイルが展開されます。

base_path
└ database
    ├ migrations
    │   ├ YYYY_mm_dd_HHiiss_create_areas_table.php
    │   ├ YYYY_mm_dd_HHiiss_create_prefectures_table.php
    │   ├ YYYY_mm_dd_HHiiss_create_cities_table.php
    │   └ YYYY_mm_dd_HHiiss_create_towns_table.php
    └ seeds
        ├ AreaSeeder.php
        ├ PrefectureSeeder.php
        ├ CitySeeder.php
        └ TownSeeder.php

展開したファイルを実行

php artisan migrate
php artisan db:seed --class AreaSeeder
php artisan db:seed --class PrefectureSeeder
php artisan db:seed --class CitySeeder
php artisan db:seed --class TownSeeder

※ TownSeederの実行はそこそこ時間がかかります。

使い方

Modelクラスがあるので以下のように使ってください。
必要に応じて継承するなりして使えばよいかと思っております。


use NewJapanOrders\JapaneseAddress\Area;
use NewJapanOrders\JapaneseAddress\Prefecture;
use NewJapanOrders\JapaneseAddress\City;
use NewJapanOrders\JapaneseAddress\Town;

$areas = Area::all();
$prefecture = Prefecture::find(3);
$area = $prefecture->area()->first();
$cities = $prefecture->cities()->get();
$city = $prefecture->cities()->first();
$towns = $city->towns()->get();
$town = $city->towns->first();

今後の課題

  • テストコードを書く。
  • ちゃんとテストする。
18
14
5

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
18
14