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.7k
Gemを作るときの依存関係の書き方について もう一度考えてみた
2020/01/15 あなたの知ってるRubyGemsTips
madogiwa
January 15, 2020
Tweet
Share
Other Decks in Technology
See All in Technology
Terraformで構築する セルフサービス型データプラットフォーム / terraform-self-service-data-platform
pei0804
1
180
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
190
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.3k
共有と分離 - Compose Multiplatform "本番導入" の設計指針
error96num
2
490
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
330
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
12
4.8k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
6
380k
いま注目のAIエージェントを作ってみよう
supermarimobros
0
200
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
970
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
140
S3アクセス制御の設計ポイント
tommy0124
3
200
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
220
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Optimizing for Happiness
mojombo
379
70k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Facilitating Awesome Meetings
lara
55
6.5k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
The Art of Programming - Codeland 2020
erikaheidi
56
13k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Balancing Empowerment & Direction
lara
3
620
Documentation Writing (for coders)
carmenintech
74
5k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
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