More Related Content
PDF
PDF
Fast, deterministic, and verifiable computations with WebAssembly. WASM on th... PDF
PDF
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール PDF
20191125 Container Security PDF
【学習メモ#1st】12ステップで作る組込みOS自作入門 PDF
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話 PDF
What's hot
PDF
論文紹介 Semantic Mapping for Mobile Robotics Tasks: A Survey PDF
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa PDF
PDF
PDF
PDF
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから PPTX
凡人の凡人による凡人のためのデザインパターン第一幕 Public PDF
PDF
PDF
PDF
古典プログラマ向け量子プログラミング入門 [フル版] PDF
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発 PDF
PDF
PDF
PDF
PDF
PDF
PDF
C#, C/CLI と CUDAによる画像処理ことはじめ PDF
Similar to RubyGems と Bundler について
PDF
CocoaPoderと賢者の宝石 〜 まだ bundle exec で消耗してるの? 〜 PPTX
Ruby on Rails を用いたWEBアプリケーションの開発 PDF
PDF
PPTX
PDF
PDF
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー KEY
Bundler kanazawa.rb meetup #2 2012/09/19 PDF
PDF
Management of Gems using Bundler. PDF
ODP
PDF
PDF
KEY
PDF
PPT
PPTX
PDF
PDF
More from Tomoya Kawanishi
PDF
PDF
PDF
PDF
Ruby on Rails のキャッシュ機構について PDF
PDF
PDF
PDF
PDF
PDF
PDF
Ruby on Rails プロジェクトでの他言語エコシステムとの共存方法 PDF
PDF
ENECHANGE社での Scout APM 利用事例 PDF
PDF
PDF
PDF
Active record query interface PDF
Active Support のコア拡張機能について PDF
PPTX
Recently uploaded
PDF
20260119_VIoTLT_vol22_kitazaki_v1___.pdf PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」 PDF
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf PDF
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S... PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望 PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信 PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis PDF
FY2025 IT Strategist Afternoon I Question-1 Balanced Scorecard PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector PDF
アジャイル導入が止まる3つの壁 ─ 文化・他部門・組織プロセスをどう乗り越えるか RubyGems と Bundler について
- 1.
- 2.
大手町.rb #5 発表資料「RubyGems と Bundler について」
1自己紹介
Tomoya Kawanishi a.k.a. @cuzic
エネチェンジ株式会社 チーフエンジニア
電力会社、ガス会社を切り替えるなら、エネチェンジ経由で!
一般家庭も!法人も!Ruby関西の中の人
Ruby関西の中の人
発表者として登壇くださる方、あとで声かけください。
大手町.rb の中の人
毎月 大手町.rb の開催を予定
東京駅、各線大手町駅から直結!
Ruby の初級者がメインターゲット
- 3.
大手町.rb #5 発表資料「RubyGems と Bundler について」
今日のテーマ
Bundler と RubyGems 聞いたことはあるはず
こんなことありませんか?
謎の呪文・・・
教えてもらったまま、なんとなくやってる・・・
そういう人向けに基本的なことを説明します
逆に下記のことは解説しません
Gem ファイルの作り方、gemspec の作り方
gem のビルドの仕方
2
- 4.
大手町.rb #5 発表資料「RubyGems と Bundler について」
3パッケージ管理システムの例
OS
Red Hat Enterprise Linux系: RPM、Yum
Debian系: dpkg、APT
MacOS: Homebrew、MacPorts
Windows: Chocolatey、PackageManagement、NuGet
言語
Ruby: RubyGems、Bundler
Python: pip、conda
PHP: PEAR、PECL、Composer
- 5.
大手町.rb #5 発表資料「RubyGems と Bundler について」
4歴史的な流れ
Ruby Conf 2004 (at Washington D.C.)
RubyGems と Ruby on Rails 、YARV の発表などがあった
Ruby on Rails は複数のコンポーネントから構成される
ActiveRecord、ActionPack、ActiveSupport など
インストールの単純化などのためにパッケージ管理が必須!
Ruby on Rails が RubyGems を正式採用!
当時、 RubyGems 以外にもバージョン管理システムがあったが、
Ruby on Rails の影響もあり、RubyGems がデファクト化
Ruby 1.9 から RubyGems が標準に含まれる
Ruby on Rails は依存gem が多すぎ。
バージョンアップのつらみがすごい
Bundler が登場!
複数バージョンの共存、バージョンアップが簡単になった。
Ruby on Rails 3 から Bundler をデフォルトで採用
- 6.
大手町.rb #5 発表資料「RubyGems と Bundler について」
パッケージ管理システムとは
パッケージ管理システムでできること
インストール、アンインストールの管理
依存関係の解決
依存済パッケージの最新化
リポジトリからの指定パッケージの検索
RubyGems
上記のことができる Ruby 用のパッケージ管理システム
gem形式と呼ばれるファイル形式を採用
Bundler
たくさんの gem がどのバージョンを使うかを一元管理可能
Gemfile (使いたいバージョンを指定するファイル)と
Gemfile.lock(Bundler が決定したインストールすべきバージ
ョンを格納したファイル)を使って管理する
5
- 7.
大手町.rb #5 発表資料「RubyGems と Bundler について」
RubyGems のコマンド
多くの人は install しか使わないのでは?
例えば、下記コマンドで rake の gem のファイルの中
で def invoke という文字列を検索できる
gem contents rake | xargs fgrep "def invoke"
6
gem --help # ヘルプを表示
gem install bundler # bundler をインストール
gem environment # RubyGems のインストールディレクトリなどを表示
gem contents rake # インストールされたファイルのフルパス一覧を表示
gem list # 手元でインストール済の gem の一覧を表示
gem open rake # 指定した gem を EDITOR で開く
gem pristine rake # 指定した gem を初期状態に戻す
- 8.
大手町.rb #5 発表資料「RubyGems と Bundler について」
Bundler がなかったとき、あるとき
Bundler の前の世界
アプリケーションを開発する
当然のように、いくつか外部ライブラリを使う
最初はうまく動いている
あるタイミングから、インストールしたけど、動きませんと報
告が上がってくる
理由を調べたら、依存ライブラリの一部が最新バージョンでは
過去と非互換なふるまいをしていることが判明
バージョンを古い環境で動かしたらちゃんと動いた。
けど、これを各利用者の環境で周知、作業してもらうのは大変
Bundler が誕生したあとの世界
Gemfile を書く
必ず同じ gem のバージョンで動作する
古いプロジェクトでもちゃんと動作する
みんな、幸せ
7
- 9.
大手町.rb #5 発表資料「RubyGems と Bundler について」
Bundler を使ったプロジェクトのワークフロー
bundle init で Gemfile を作成する
※ Ruby on Rails のプロジェクトなら不要
Gemfile を編集する
bundle install する
指定バージョンの gem をインストール
Gemfile を編集して、使う gem のバージョンを上げる
bundle install では
conflict発生
bundle update sinatra で conflict 解消
8
> bundle init source 'https://rubygems.org'
gem 'sinatra', '~> 1.3.6'
gem 'rack-cache'
gem 'rack-bug'
> bundle install
source 'https://rubygems.org'
gem 'sinatra', '~> 1.4.5'
gem 'rack-cache'
gem 'rack-bug'
> bundle install
> bundle update sinatra
- 10.
大手町.rb #5 発表資料「RubyGems と Bundler について」
Gemfile の例 9
source 'https://rubygems.org' # 使いたい gem リポジトリを指定
source 'https://user:password@gems.example.com' # 社内の gem リポジトリも指定できる
ruby '2.5.1' # 使いたい Ruby のバージョンを指定する
gem 'rails', ">= 5.0.0" # Rails 5.0.0 以上のバージョンを使う
gem 'rails', ">= 5.0.0", "< 5.1" # 5.0.0 以上、5.1 未満のバージョンを使う
gem 'rails', "~> 5.0.0", # 上と同じ(5.0.0 以上、5.1 未満のバージョンを使う)
gem 'rails', "~> 5.0", # 5.0 以上、6 未満のバージョンを使う)
gem 'rspec', :require => false # インストールするけど、require はしない。
gem 'activerecord-session_store', github: 'rails/activerecord-session_store' # github レ
ポを使う。(Bundler 2.0 まで非推奨らしい)
gem 'webmock', group: "test" # bundle install --without test で、インストールを除外できる。
gem 'pry-rails', group: [:development, :test] # 一度に複数の group を指定
group :development, :test do # 複数の group への指定をブロック形式で記述
gem 'pry-doc'
gem 'pry-byebug'
end
- 11.
大手町.rb #5 発表資料「RubyGems と Bundler について」
bundle のコマンド 10
> bundle install # 依存関係を解決しつつ、インストール
> bundle update # バージョンを最新化
> bundle update rails # Rails とその依存関係のgem のバージョンのみ最新化。
> bundle exec rails -v # 現在のコンテキストで rails –v を実行
> bundle config # Bundler の設定を表示。レポジトリにアクセスするときのクレデンシャルの設
定のときとかに使う
> bundle binstubs # bin/ ディレクトリに現在のコンテキストで実行する stub を生成
> bundle clean # すでに使われなくなった gem を削除
> bundle list # 現在のコンテキストでの依存関係を含めたすべての gem のリストを表示
> bundle open activesupport # EDITOR で activesupport のディレクトリを開く
> bundle show rake # rake のインストール先のディレクトリを表示
> bundle pristine # ローカルの編集済の gem を初期状態に戻す
> bundle viz # graphviz を使って、依存関係のグラフを PNG で出力する
- 12.
大手町.rb #5 発表資料「RubyGems と Bundler について」
良くある開発サイクル
① 依存ライブラリに起因してそうな不具合を発見
② そのメソッドがどこにあるか調査
# 下記のコマンド的な
> gem contents rake | xargs fgrep "def invoke"
> bundle show rake | xargs fgrep –r "def invoke"
③ そのメソッドで binding.pry などして詳細を調査
> gem open rake
> bundle open rake
④ 調査完了したら、gem pristine や bundle
pristine を使って、初期状態に戻す
⑤ gem の記述内容を変更しても安心!
11
- 13.
大手町.rb #5 発表資料「RubyGems と Bundler について」
まとめ
今回は、みんな使っているけれど、深くは理解していな
い RubyGems と Bundler について紹介しました。
知らない機能もあったかもしれません。
これからの開発にお役立ちできるとうれしいです。
12
- 14.