properties, yaml, and me

20
*.properties *.yml 私。 Java Casual #2 LINE Corp@渋谷ヒカリエ 2016-11-07 @nabedge わたなべ 1

Upload: nabedge-watanabe

Post on 06-Jan-2017

566 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: properties, yaml, and me

*.properties と *.yml と 私。

Java Casual #2LINE Corp@渋谷ヒカリエ2016-11-07@nabedge わたなべ

1

Page 2: properties, yaml, and me

Who ?● わたなべ

○ twitter: @nabedge○ (株)ビズリーチ

○ Mixer2というOSSのテンプレートエンジンを作ってます

● 12月3日(Sat)のJJUG-CCC 2016 Fall で登壇します。

○ 「俺のコードがどこで使われているのかわからない

問題 - あるいはマイナーOSSの生存戦略」

2

Page 3: properties, yaml, and me

Javaエンジニア

絶賛募集中www.bizreach.co.jp/recruit

3

Page 4: properties, yaml, and me

本題

4

Page 5: properties, yaml, and me

ある日見たプルリクエスト5

Page 6: properties, yaml, and me

● native2asciiってやつ。

非ASCII文字をユニコードエスケープ表現に変換したもの。

● そのブランチを手元にcheckoutして

IDEで見ればいいじゃんってだけの話かもしれないけどさ。

6

Page 7: properties, yaml, and me

別な日に見たプルリクエスト7

Page 8: properties, yaml, and me

何が起きた?

● Aさんがeclipseでメンテしていたpropertiesファイル

● BさんがIntelliJ IDEAで開いて閉じて。

● eclipseのプロパティエディタプラグインは

小文字でエンコードする

● IntelliJのエディタの透過native2ascii設定は

大文字でエンコードする

● デコードされる文字は同じなのでアプリの挙動に問題はない

8

Page 9: properties, yaml, and me

アンケート:普段使っているIDEは?

● IntelliJ IDEA

○ 透過的にnative2asciiする設定はオン?オフ?

■ (ちなみにデフォルトはオフのはず)

● Eclipse

○ プロパティエディタプラグイン入ってる?

9

Page 10: properties, yaml, and me

どうする?

● IntelliJ IDEAが小文字でエンコードするように設定を追加する

○ IntelliJなメンバー全員がやらないと意味がない。

○ githubのプルリク画面でのレビューがしづらい問題は残る

10

Page 11: properties, yaml, and me

どうする?

● propertiesファイルをUTF-8で書く。

つまりnative2asciiしない。

○ githubのプルリク画面でレビューしやすくなる!

○ Eclipse使っているメンバー全員がプロパティエディタプラグイ

ンをオフる必要あり。

○ そもそもJava6以降からnative2asciiは不要ですよ奥さん

11

Page 12: properties, yaml, and me

まだ*.propertiesファイルで消耗してるの?

俺たちは、Java言語とIDEの、

それぞれの歴史的な事情に振り回されているだけだ。

12

Page 13: properties, yaml, and me

YAML Ain’t a Markup Language 13

Page 14: properties, yaml, and me

YAML Ain’t a Markup Language 14

Page 15: properties, yaml, and me

*.propertiesから*.yamlへの書き換え

1. foo.bar=bazを

foo.bar: bazに書き換えて、ファイルの拡張子を*.ymlか*.yamlにする

2. あとは

SnameYamlYamlPropertiesFactoryBean (Spring使ってる場合)でググる

15

Page 16: properties, yaml, and me

16

java.util.Properties

ではなく

java.util.ResourceBundle

として使いたいケースだったら?

例: messages.properties と messages_ja.properties をyaml形式にしたい

Locale, Properties, ResourceBundle

Page 17: properties, yaml, and me

長くなるのでヒントだけ。

1. Java6以降での国際化リソースの記述方法は次の二つ

a. *.propertiesファイルで表現する foo.propertiesと foo_[ロケール名].properties

b. java.util.ListResourceBundleの派生クラスとして

Javaクラスで表現する

2. ListResourceBundleを継承したクラスの中で、SnakeYamlとかで*.ymlを読めるようにしておく

17

Page 18: properties, yaml, and me

長くなるのでヒントだけ。

// 英語ロケールの場合の例. クラス名にロケールをつけるのがポイント.

public class FooProperties _en extends AbstractYamlResourceBundle {

public FooProperties _en() {

super("foo_en"); //これでfoo_en.ymlを読む

}

}

// ロケールを指定してリソースバンドルを取得

ResourceBundle.Control control =

ResourceBundle.Control.getControl(ResourceBundle.Control .FORMAT_CLASS);

ResourceBundle rb_english = ResourceBundle.getBundle(

com.example.FooProperties.class .getName(),

Locale.US,

control

);

18

java.util.ListResourceBundleを継承した共通クラスを自作

Page 19: properties, yaml, and me

まとめ

● 10年も前からnative2asciiは不要のはず。

● しかし、道具(IDE)、知識、意識が置き去りのまま

● っていうか、まだ*.propertiesファイルで消耗してるの?

● いっそのこと *.yml の方が今風ですよね

● java.util.Propertiesにするのは簡単

● java.util.ResourceBundleにするのもそう難しくない

19

Page 20: properties, yaml, and me

ご清聴ありがとうございました

ナウでヤングなXHTMLテンプレートエンジン

Mixer2も、よろしくね。http://mixer2.org

20