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.5k
Gemを作るときの依存関係の書き方について もう一度考えてみた
2020/01/15 あなたの知ってるRubyGemsTips
madogiwa
January 15, 2020
Tweet
Share
Other Decks in Technology
See All in Technology
C++26 エラー性動作
faithandbrave
2
870
Denoで作るチーム開発生産性向上のためのCLIツール
sansantech
PRO
0
120
ソフトウェア開発における「パーフェクトな意思決定」/Perfect Decision-Making in Software Development
yayoi_dd
2
2.6k
I could be Wrong!! - Learning from Agile Experts
kawaguti
PRO
8
1.6k
信頼されるためにやったこと、 やらなかったこと。/What we did to be trusted, What we did not do.
bitkey
PRO
0
1k
実践! ソフトウェアエンジニアリングの価値の計測 ── Effort、Output、Outcome、Impact
nomuson
0
640
【令和最新版】ロボットシミュレータ Genesis x ROS 2で始める快適AIロボット開発
hakuturu583
2
1.4k
Fearsome File Formats
ange
0
540
スケールし続ける事業とサービスを支える組織とアーキテクチャの生き残り戦略 / The survival strategy for Money Forward’s engineering.
moneyforward
0
210
React Routerで実現する型安全なSPAルーティング
sansantech
PRO
3
430
エンジニアリングマネージャー視点での、自律的なスケーリングを実現するFASTという選択肢 / RSGT2025
yoshikiiida
4
2k
rootful・rootless・privilegedコンテナの違い/rootful_rootless_privileged_container_difference
moz_sec_
0
100
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Cost Of JavaScript in 2023
addyosmani
46
7.1k
A better future with KSS
kneath
238
17k
Building an army of robots
kneath
302
44k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Code Reviewing Like a Champion
maltzj
521
39k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Six Lessons from altMBA
skipperchong
27
3.5k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
220
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
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