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

More Related Content

What's hot

フロントエンド温泉にサーバーレスでダイブする(Public)
フロントエンド温泉にサーバーレスでダイブする(Public)フロントエンド温泉にサーバーレスでダイブする(Public)
フロントエンド温泉にサーバーレスでダイブする(Public)
Yuki Ito
 
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
Ryuichi Ueda
 
Ruby関西勉強会発表資料
Ruby関西勉強会発表資料Ruby関西勉強会発表資料
Ruby関西勉強会発表資料
三七男 山本
 
今のWeb開発者に伝えたいWebブラウザの病みの歴史
今のWeb開発者に伝えたいWebブラウザの病みの歴史今のWeb開発者に伝えたいWebブラウザの病みの歴史
今のWeb開発者に伝えたいWebブラウザの病みの歴史
Sho Okada
 
Firefox OSがモテないのは どう考えてもお前らが悪い!(FxOS Gecko勉強会LT版)
Firefox OSがモテないのは どう考えてもお前らが悪い!(FxOS Gecko勉強会LT版)Firefox OSがモテないのは どう考えてもお前らが悪い!(FxOS Gecko勉強会LT版)
Firefox OSがモテないのは どう考えてもお前らが悪い!(FxOS Gecko勉強会LT版)
星影 月夜
 
OSC 2016 Nagoya - MineOSのすすめ -
OSC 2016 Nagoya - MineOSのすすめ -OSC 2016 Nagoya - MineOSのすすめ -
OSC 2016 Nagoya - MineOSのすすめ -
roamer7038
 
WordCamp Yokohama2010 プレゼン
WordCamp Yokohama2010 プレゼンWordCamp Yokohama2010 プレゼン
WordCamp Yokohama2010 プレゼン
miccweb
 
SDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみるSDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみるHirokuma Ueno
 
【Qp08】ざびたん2リリース報告lt 20111022
【Qp08】ざびたん2リリース報告lt 20111022【Qp08】ざびたん2リリース報告lt 20111022
【Qp08】ざびたん2リリース報告lt 20111022
Seiichiro Ishida
 
サーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy liteサーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy lite
Seiichiro Ishida
 
松江Ruby会議03 LT るりまアピール
松江Ruby会議03 LT るりまアピール松江Ruby会議03 LT るりまアピール
松江Ruby会議03 LT るりまアピールSho Hashimoto
 
pecoを使おう
pecoを使おうpecoを使おう
pecoを使おう
Hideaki Miyake
 
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipmIT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
鉄次 尾形
 
RaspberryPi Zero W で FreeBSD を動かす方法にやっと気がついたのと、USB OTGも動いてよかった。
RaspberryPi Zero W で FreeBSD を動かす方法にやっと気がついたのと、USB OTGも動いてよかった。RaspberryPi Zero W で FreeBSD を動かす方法にやっと気がついたのと、USB OTGも動いてよかった。
RaspberryPi Zero W で FreeBSD を動かす方法にやっと気がついたのと、USB OTGも動いてよかった。
Suzuki Mitsuhiro
 
はじめませんか? Bash on Windows
はじめませんか? Bash on Windowsはじめませんか? Bash on Windows
はじめませんか? Bash on Windows
Hideaki Aoyagi
 
Trident lt vagrant-hands-on
Trident lt vagrant-hands-onTrident lt vagrant-hands-on
Trident lt vagrant-hands-onRyouta Morita
 
Django と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMSDjango と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMS
Iosif Takakura
 
jTthree V3 technical preview
jTthree V3 technical previewjTthree V3 technical preview
jTthree V3 technical preview
Masaki Yamamoto
 
Android 開発を加速するオープンソースライブラリ
Android 開発を加速するオープンソースライブラリAndroid 開発を加速するオープンソースライブラリ
Android 開発を加速するオープンソースライブラリ
健一 辰濱
 

What's hot (20)

フロントエンド温泉にサーバーレスでダイブする(Public)
フロントエンド温泉にサーバーレスでダイブする(Public)フロントエンド温泉にサーバーレスでダイブする(Public)
フロントエンド温泉にサーバーレスでダイブする(Public)
 
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
 
Ruby関西勉強会発表資料
Ruby関西勉強会発表資料Ruby関西勉強会発表資料
Ruby関西勉強会発表資料
 
今のWeb開発者に伝えたいWebブラウザの病みの歴史
今のWeb開発者に伝えたいWebブラウザの病みの歴史今のWeb開発者に伝えたいWebブラウザの病みの歴史
今のWeb開発者に伝えたいWebブラウザの病みの歴史
 
Firefox OSがモテないのは どう考えてもお前らが悪い!(FxOS Gecko勉強会LT版)
Firefox OSがモテないのは どう考えてもお前らが悪い!(FxOS Gecko勉強会LT版)Firefox OSがモテないのは どう考えてもお前らが悪い!(FxOS Gecko勉強会LT版)
Firefox OSがモテないのは どう考えてもお前らが悪い!(FxOS Gecko勉強会LT版)
 
OSC 2016 Nagoya - MineOSのすすめ -
OSC 2016 Nagoya - MineOSのすすめ -OSC 2016 Nagoya - MineOSのすすめ -
OSC 2016 Nagoya - MineOSのすすめ -
 
WordCamp Yokohama2010 プレゼン
WordCamp Yokohama2010 プレゼンWordCamp Yokohama2010 プレゼン
WordCamp Yokohama2010 プレゼン
 
SDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみるSDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみる
 
【Qp08】ざびたん2リリース報告lt 20111022
【Qp08】ざびたん2リリース報告lt 20111022【Qp08】ざびたん2リリース報告lt 20111022
【Qp08】ざびたん2リリース報告lt 20111022
 
サーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy liteサーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy lite
 
松江Ruby会議03 LT るりまアピール
松江Ruby会議03 LT るりまアピール松江Ruby会議03 LT るりまアピール
松江Ruby会議03 LT るりまアピール
 
pecoを使おう
pecoを使おうpecoを使おう
pecoを使おう
 
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipmIT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
 
Bootstrap
BootstrapBootstrap
Bootstrap
 
RaspberryPi Zero W で FreeBSD を動かす方法にやっと気がついたのと、USB OTGも動いてよかった。
RaspberryPi Zero W で FreeBSD を動かす方法にやっと気がついたのと、USB OTGも動いてよかった。RaspberryPi Zero W で FreeBSD を動かす方法にやっと気がついたのと、USB OTGも動いてよかった。
RaspberryPi Zero W で FreeBSD を動かす方法にやっと気がついたのと、USB OTGも動いてよかった。
 
はじめませんか? Bash on Windows
はじめませんか? Bash on Windowsはじめませんか? Bash on Windows
はじめませんか? Bash on Windows
 
Trident lt vagrant-hands-on
Trident lt vagrant-hands-onTrident lt vagrant-hands-on
Trident lt vagrant-hands-on
 
Django と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMSDjango と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMS
 
jTthree V3 technical preview
jTthree V3 technical previewjTthree V3 technical preview
jTthree V3 technical preview
 
Android 開発を加速するオープンソースライブラリ
Android 開発を加速するオープンソースライブラリAndroid 開発を加速するオープンソースライブラリ
Android 開発を加速するオープンソースライブラリ
 

Recently uploaded

FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 

Recently uploaded (15)

FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 

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