Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Gemを作るときの依存関係の書き方について もう一度考えてみた
Search
madogiwa
January 15, 2020
Technology
1
1.4k
Gemを作るときの依存関係の書き方について もう一度考えてみた
2020/01/15 あなたの知ってるRubyGemsTips
madogiwa
January 15, 2020
Tweet
Share
Other Decks in Technology
See All in Technology
AWS IAM Identity Center議論会 〜 認証認可結合モデルと認証認可分離モデル / 20240827-jawsug-arch-iam_identity_center
opelab
3
300
Discover Your Tailored Platform Strategy with Real-World Practice
hhiroshell
1
130
Dojo 20240830 COBOL to Java on Z
ichikawayasuhisa
0
240
SHIFTの課題と目指したい組織像 / 20240827 Rinto Ikenoue
shift_evolve
0
140
ログラスが面白いと思う理由をマネージャーがエモく語ってみる / 20240829 vs LT
yoshikiiida
1
510
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
1
160
エンジニア向け会社紹介資料
caddi_eng
15
250k
waitany と waitall を作った話
mrkn
0
110
Azure Cosmos DB での時系列ログの運用と改善
sansantech
PRO
0
190
実践的なバグバウンティ入門
scgajge12
4
2.1k
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
9
41k
日経電子版から始まった内製開発の現在地と向き合っている課題/inhouse
nishiuma
0
220
Featured
See All Featured
A better future with KSS
kneath
235
17k
Bash Introduction
62gerente
608
210k
Learning to Love Humans: Emotional Interface Design
aarron
270
40k
Building Adaptive Systems
keathley
36
2.1k
Debugging Ruby Performance
tmm1
72
12k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
52k
Code Reviewing Like a Champion
maltzj
518
39k
Design by the Numbers
sachag
277
19k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
24
2k
Principles of Awesome APIs and How to Build Them.
keavy
125
16k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Fontdeck: Realign not Redesign
paulrobertlloyd
80
5.1k
Transcript
2020/01/15 あなたの知ってるRubyGemsTips Gemを作るときの依存関係の書き方について もう一度考えてみた MedPeer, Inc. Jun Morita
自己紹介 • SIerのシステムエンジニアから2018年4月にメドピ アに入社。 • 入社後は、医師専用コミュニティサイト「MedPeer」 におけるニュースサービスのリニューアルや、クイ ズサービスの立ち上げ、Rails 5.2.0へのアップグ
レードに従事。 • 現在は、新規事業となる医師向けのインターネット テレビ「MedPeer Channel」のサービス開発を担 当。 @Madogiwa0124 @madogiwa_boy
PR MedPeerの紹介
PR Misson(存在意義) Supporting Doctors, Helping Patients. 医師を支援すること。そして患者を救うこと。 Vision(実現したい姿) 集合知により医療を再発明する。
PR 医師専用コミュニティサイトの運営をしています
PR 医療業界でIT ✕ ?で色々なサービスを展開しています!
PR
PR We are hiring ! MedPeerの紹介でした
今日話すこと(本題) `bundle gem gem_name`すると `Gemfile`と`gemspec`という2つ のファイルが作成されます。 (v2.0.2時点) どっちを使ったほうが良さそうか というのを色々考えてみました
gemにおける依存の書き方のおさらい Gemfile / gemspec(add_development_dependency, add_dependency) add_development_dependency -> DEVELOPMENT依存性 開発時に依存するgem
add_dependency -> RUNTIME依存性 実行時に依存するgem ※add_dependencyはadd_runtime_dependencyのailias https://guides.rubygems.org/specification-reference
gem installの基本的な流れ Ruby Gems.org PC metadata(gemspec)を取得 依存gem含めてinstall install対象のgem
gemspecの内容を元にしているので、 Gemfileに依存gemを記載しても、 installされない ※Gemfileに記載しても依存gemとしては扱われない gem installの基本的な流れ
gemを作るのにGemfileは必要ない gemの最小構成 gemspecがあればgemが作れる gemspecを作り、 gem build
gemspecでビルドして .gemファイルを作ってあげれば、 install可能なgemが作れる -> gem installにGemfileは必要ない Ruby 2.7.0 リファレンスマニュアル library rubygems https://docs.ruby-lang.org/ja/2.7.0/library/rubygems.html
実行時に依存するgemは、 gemspecに書いたほうが良さそう > It’s best practice to specify all the
gems that our library depends on in the gemspec. > https://bundler.io/v2.0/guides/creating_gem.html#getting-started 開発時に依存するものは・・・? ということで、、、
基本的にはgemspecに書いといた方が良さそうだけど… • 依存関係を明示する必要がないケース • bundler独自の機能を使いたいケース 開発時に依存するgemをどっちに書くか
• dotenv、pry等の依存してないが必要なgemを管 理したい場合等 gem内に依存しているコードは無い。 しかしadd_develop_dependencyに記載してしまうと、 RubyGems.orgに依存gemとして表示されてしまうので、Gemfile に記載して管理しておくケース等 依存関係を明示する必要がないケース
• requires等を使いたい `gem ‘rubocop, require: true`行ってBundler.requireでrequireし たい • RubyGems.org以外に配置してあるgemを参照した い
まだRubyGems.orgに公開されてない開発中のgemが公開され るまで`source`を指定してinstallしたい等 bundler独自の機能を使いたいケース
コミュニティでの議論 • Please deprecate (and/or rename) `add_development_dependency` #1104 https://github.com/rubygems/rubygems/issues/1104
`add_develop_dependency`は非推奨にして、Gemfileに書くようにした方がいいんじゃないか?と いった議論がされている。(現在はClose済み) • Remove `add_development_dependency` from new gems #7222 https://github.com/rubygems/bundler/pull/7222 `bundle gem`実行時に`add_develop_dependency`に記載されていたものがGemfileに記載され るようになった。(bundler 2.1.0でリリースされてる) 開発時に依存するgemをどっちに書くか
まとめ 実行時に依存するgemは、 gemspecを使った方が良さそう 開発時に依存するgemは、 色々な考え方がありそうだがbundle gem時のデフォルトもGemfile になったのでGemfileの方が良さそう? と個人的に思いました
ご清聴ありがとうございました MedPeer, Inc. Jun Morita