Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

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

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Hier ansehen

1 von 17 Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Aktuellste (20)

Anzeige

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,

×