メモ2ブログ

メモtoウェブログ。旧ブログはこちら。 http://sakebook.blogspot.jp/

都道府県の情報を簡単に扱うためのライブラリをKotlinで作った。

都道府県コード都道府県名を変換するようなことをJavaで書いたのが非常に辛かった。 もう同じことをしないでいいように、使いまわせる形にした。

Javaでリスト操作ができなかったのでKotlinでさっと操作したいと思ったのがモチベーションです。

実際Kotlin要素はほぼないのでタイトルは若干釣りです。

Zipangu

ライブラリ名が思いついたので、作りました。

github.com

Maven Centralにも登録したので、 dependenciesに一行追加だけでいけます。

compile 'com.github.sakebook:Zipangu:0.1.0@aar'

使い方

都道府県コードや都道府県名から逆引きができます。

Zipangu.code(1) // return prefecture 北海道
Zipangu.code("北海道") // return prefecture 北海道

八地方区分と、気象庁の分類の一部に対応しています。

Zipangu.area(Area.中部) // return prefectures 中部地方
Zipangu.segment(Segment.North) // return prefectures 北日本

nullを返したくなかったので、逆引きに失敗した時はダミーのPrefectureを返します。

ダミーのPrefectureは初期化の際に設定できます。 Mutableなので取得した際に変更もできます。

Zipangu.beginning(this, Prefecture(0, "県外", "県外", Segment.None))

使用上の注意

一応Javaから使うサンプルと、Kotlinから使うサンプルを置いてありますが、基本一行なのでほぼ同じです。

作ってからわかったのですが、JavaからKotlinのライブラリを呼び出す際は、プロジェクトがKotlinを使えるように設定していないとエラーが出て使えません

次のようなエラーがでました。

Could not find class 'kotlin.reflect.KProperty[]', referenced from method com.sakebook.android.library.zipangu.Zipangu.<clinit>
java.lang.VerifyError: com/sakebook/android/library/zipangu/Zipangu
java.lang.NoClassDefFoundError: kotlin.jvm.internal.Intrinsics

作成上の小話

データはassetsのjsonにアクセスしています。

始めはjsonを細かくし、並列に読み込めるようにして、変更しやすい、コントリビュートしやすい作りにしようとしたのですが、そもそもどんな区分で分けるか?明確に決まったものが少ない上に、ファイルアクセスのオーバヘッドの方が大きいと思ったので、シンプルにしました。

MavenCentralに上げる際に、先人と同じようにjavadocの生成で失敗しました。これもまた先人と同じように回避したので、javadocは空です。。

まとめ

これから都道府県の情報を扱うことになる人にとっては、一手間省けるものになると思うので、Kotlinを使う第一歩にしてもらえればと思います。

参考

全国地方公共団体コード / Wikipedia

全般気象情報などに用いる地域名 / 気象庁

KotlinでAndroidライブラリを作ってリリースする / Qiita

Kotlinのライブラリをbintray-releaseを使ってアップロードするときにハマったこと / Qiita