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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
madogiwa
January 15, 2020
Technology
1.8k
1
Share
Gemを作るときの依存関係の書き方について もう一度考えてみた
2020/01/15 あなたの知ってるRubyGemsTips
madogiwa
January 15, 2020
Other Decks in Technology
See All in Technology
2026年に相応しい 最先端プラグインホストの設計<del>と実装</del>
atsushieno
0
120
AWS DevOps Agentはチームメイトになれるのか?/ Can AWS DevOps Agent become a teammate
kinunori
1
190
幾億の壁を超えて/Beyond Countless Walls(JP)
ikuodanaka
0
130
Revisiting [CLS] and Patch Token Interaction in Vision Transformers
yu4u
0
140
AIエージェントを構築して感じた、AI時代のCDKとの向き合い方
smt7174
1
250
AgentCore RuntimeからS3 Filesをマウントしてみる
har1101
4
440
みんなの「データ活用」を支えるストレージ担当から持ち込むAWS活用/コミュニティー設計TIPS 10選~「作れる」より、「続けられる」設計へ~
yoshiki0705
0
180
QGISプラグイン CMChangeDetector
naokimuroki
1
260
2026年、知っておくべき最新 サーバレスTips10選/serverless-10-tips
slsops
12
4.8k
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
5
14k
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」ご紹介資料
laysakura
0
2.2k
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
230
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.1k
KATA
mclloyd
PRO
35
15k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.5k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
500
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
380
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
How to Think Like a Performance Engineer
csswizardry
28
2.5k
What's in a price? How to price your products and services
michaelherold
247
13k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
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