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.

RubyGemsで公開されているライブラリをモンキーパッチした話

739 views

Published on

2019/7/12 開催
Webナイト宮崎 Vol.5 〜てげ飲みながらLTしたい〜
LT用資料

Published in: Technology
  • Be the first to comment

  • Be the first to like this

RubyGemsで公開されているライブラリをモンキーパッチした話

  1. 1. Webナイト宮崎 Vol.5 〜てげ飲みながらLTしたい〜 RubyGemsで公開されている ライブラリをモンキーパッチした話 Shoya Yamamoto 2019 / 7 / 12
  2. 2. 今日話すこと 自己紹介 モンキーパッチってなに? モンキーパッチすることになった ライブラリ「era_ja」 Railsでのモンキーパッチのやり方 ハマったこと、注意点 最後に宣伝
  3. 3. 自己紹介 山元 彰也(Yamamoto Shoya) 27歳 システムエンジニア(3年程) Ruby,Rails,CMS保守/開発‐ 好きなこと / もの 音楽(主に邦楽Rockバンド)‐ 関ジャニ∞ ※ジャニヲタです。‐ ゲーム(Splatoon2)‐ サッカー、フットサル‐
  4. 4. モンキーパッチってなに? モンキーパッチは、オリジナルのソース コードを変更することなく、実行時に動 的言語のコードを拡張したり、変更した りする方法である。 [「wikipedia」より引用]
  5. 5. モンキーパッチすることになった ライブラリ「era_ja」 GitHub https://github.com/tomiacannondale/era_ja 引数としてstftimeのフォーマット文字列を使 用 EraJa#to_eraメソッドで、和暦変換のフォー マット文字列が使える
  6. 6. モンキーパッチすることになった ライブラリ「era_ja」 EraJa#to_eraメソッドで使える 和暦変換のフォーマット文字列 %o:元号をアルファベットで表記 %O:元号を漢字で %E:西暦を和暦で出力 %J:数字を漢数字に変換
  7. 7. ライブラリ「era_ja」の使用例 Dateインタンスを和暦に変換 test_date = Date.new(2019,5,1) test_date.to_era # => "R01.5.1" ※引数にフォーマットを指定しない場合 test_date.to_era("%O%E年%m月%d日") # => "令和01年5月01日" test_date.to_era("%O%JE年%Jm月%Jd日") # => "令和元年五月一日"
  8. 8. 今回拡張した内容 令和01年の表記を令和元年にしたい その他の数字は数字のまま つまり・・・ if test_date.to_era("%E") == "01" test_date.to_era("%O%JE年%m月%d日") else test_date.to_era("%O%E年%m月%d日") end
  9. 9. なぜモンキーパッチしたのか view上に存在する対象の箇所が大量にあった 予算内の改修方法がこれだった 令和01年を使うことがない前提 ※大前提としてモンキーパッチはさけるべき。 大人数で開発しているとパッチの存在が忘れら れ、予期せぬエラーが起きるため。 また、保守性も低下してしまうため、できるな らライブラリは、公開されているままの状態で 使用するのが望ましい。
  10. 10. Railsでのモンキーパッチのやり方 オープンクラスを使う。 Railsではデフォルトでconfig/initializers 以下 の.rbファイルが起動時に自動で読み込まれま す。 このディレクトリ以下に、パッチをまとめると 管理しやすい。
  11. 11. 具体的に何をしたのか module EraJa module Conversion private def format_year(year, match) era_year = sprintf("%02d", year) if match == "%J" era_year = year == 1 ? "元" : to_kanzi(era_year) end era_year = "元" if year == 1 <=これを追記 era_year end end end
  12. 12. ハマったこと、注意点 config/initializersが読み込まれるタイミング config/initializers以下にパッチを配置しても、 意図した挙動にならなかった。。。 基本的にRailsはapp/以下とconfig/routes.rbの 変更は再起動不要。 逆を言えば、それ以外のファイルは基本的に起 動時に読み込まれるらしい。(※例外有) モンキーパッチに限らず、上手く動かない場合 は、再起動してみると良いかも。
  13. 13. 最後に 宣伝
  14. 14. 一緒に勉強しませんか?? ジャンル / 経験問いません 不定期でどこかに集まって勉強したい!! 一人だとモチベーションが持たない プログラミングってなにから始めれば... 意見交換の場が欲しい...etc つまり....
  15. 15. 友達が 欲しい!!
  16. 16. SNSやら Facebook => 「山元 彰也」で検索 Twitter => @yamamon_zawawa LINEもあるよ Gmailもあるよ
  17. 17. Fin,

×