Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

properties, yaml, and me

2,984 views

Published on

*.propertiesと*.ymlと私
JavaCasual#2 at LINE corp , Hikarie, Shibuya

Published in: Internet
  • Be the first to comment

properties, yaml, and me

  1. 1. *.properties と *.yml と 私。 Java Casual #2 LINE Corp@渋谷ヒカリエ 2016-11-07 @nabedge わたなべ 1
  2. 2. Who ? ● わたなべ ○ twitter: @nabedge ○ (株)ビズリーチ ○ Mixer2というOSSのテンプレートエンジンを作ってます ● 12月3日(Sat)のJJUG-CCC 2016 Fall で登壇します。 ○ 「俺のコードがどこで使われているのかわからない 問題 - あるいはマイナーOSSの生存戦略」 2
  3. 3. Javaエンジニア 絶賛募集中 www.bizreach.co.jp/recruit 3
  4. 4. 本題 4
  5. 5. ある日見たプルリクエスト 5
  6. 6. ● native2asciiってやつ。 非ASCII文字をユニコードエスケープ表現に変換したもの。 ● そのブランチを手元にcheckoutして IDEで見ればいいじゃんってだけの話かもしれないけどさ。 6
  7. 7. 別な日に見たプルリクエスト 7
  8. 8. 何が起きた? ● Aさんがeclipseでメンテしていたpropertiesファイル ● BさんがIntelliJ IDEAで開いて閉じて。 ● eclipseのプロパティエディタプラグインは 小文字でエンコードする ● IntelliJのエディタの透過native2ascii設定は 大文字でエンコードする ● デコードされる文字は同じなのでアプリの挙動に問題はない 8
  9. 9. アンケート:普段使っているIDEは? ● IntelliJ IDEA ○ 透過的にnative2asciiする設定はオン?オフ? ■ (ちなみにデフォルトはオフのはず) ● Eclipse ○ プロパティエディタプラグイン入ってる? 9
  10. 10. どうする? ● IntelliJ IDEAが小文字でエンコードするように設定を追加する ○ IntelliJなメンバー全員がやらないと意味がない。 ○ githubのプルリク画面でのレビューがしづらい問題は残る 10
  11. 11. どうする? ● propertiesファイルをUTF-8で書く。 つまりnative2asciiしない。 ○ githubのプルリク画面でレビューしやすくなる! ○ Eclipse使っているメンバー全員がプロパティエディタプラグイ ンをオフる必要あり。 ○ そもそもJava6以降からnative2asciiは不要ですよ奥さん 11
  12. 12. まだ*.propertiesファイルで消耗してるの? 俺たちは、Java言語とIDEの、 それぞれの歴史的な事情に振り回されているだけだ。 12
  13. 13. YAML Ain’t a Markup Language 13
  14. 14. YAML Ain’t a Markup Language 14
  15. 15. *.propertiesから*.yamlへの書き換え 1. foo.bar=baz を foo.bar: baz に書き換えて、ファイルの拡張子を*.ymlか*.yamlにする 2. あとは SnameYaml YamlPropertiesFactoryBean (Spring使ってる場合) でググる 15
  16. 16. 16 java.util.Properties ではなく java.util.ResourceBundle として使いたいケースだったら? 例: messages.properties と messages_ja.properties を yaml形式にしたい Locale, Properties, ResourceBundle
  17. 17. 長くなるのでヒントだけ。 1. Java6以降での国際化リソースの記述方法は次の二つ a. *.propertiesファイルで表現する foo.propertiesと foo_[ロケール名].properties b. java.util.ListResourceBundleの派生クラスとして Javaクラスで表現する 2. ListResourceBundleを継承したクラスの中で、SnakeYamlと かで*.ymlを読めるようにしておく 17
  18. 18. 長くなるのでヒントだけ。 // 英語ロケールの場合の例. クラス名にロケールをつけるのがポイント. 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 を継承した共通クラスを自作
  19. 19. まとめ ● 10年も前からnative2asciiは不要のはず。 ● しかし、道具(IDE)、知識、意識が置き去りのまま ● っていうか、まだ*.propertiesファイルで消耗してるの? ● いっそのこと *.yml の方が今風ですよね ● java.util.Propertiesにするのは簡単 ● java.util.ResourceBundleにするのもそう難しくない 19
  20. 20. ご清聴ありがとうございました ナウでヤングなXHTMLテンプレートエンジン Mixer2 も、よろしくね。http://mixer2.org 20

×