都道府県の情報を簡単に扱うためのライブラリをKotlinで作った。
都道府県コードと都道府県名を変換するようなことをJavaで書いたのが非常に辛かった。 もう同じことをしないでいいように、使いまわせる形にした。
Javaでリスト操作ができなかったのでKotlinでさっと操作したいと思ったのがモチベーションです。
実際Kotlin要素はほぼないのでタイトルは若干釣りです。
Zipangu
ライブラリ名が思いついたので、作りました。
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を使う第一歩にしてもらえればと思います。