SlideShare a Scribd company logo
1 of 14
Download to read offline
RubyGems と
Bundler について
2018/4/12
大手町.rb #12
大手町.rb #5 発表資料 「RubyGems と Bundler について」
1自己紹介
Tomoya Kawanishi a.k.a. @cuzic
エネチェンジ株式会社 チーフエンジニア
電力会社、ガス会社を切り替えるなら、エネチェンジ経由で!
一般家庭も!法人も!Ruby関西の中の人
Ruby関西の中の人
発表者として登壇くださる方、あとで声かけください。
大手町.rb の中の人
毎月 大手町.rb の開催を予定
東京駅、各線大手町駅から直結!
Ruby の初級者がメインターゲット
大手町.rb #5 発表資料 「RubyGems と Bundler について」
今日のテーマ
Bundler と RubyGems 聞いたことはあるはず
こんなことありませんか?
謎の呪文・・・
教えてもらったまま、なんとなくやってる・・・
そういう人向けに基本的なことを説明します
逆に下記のことは解説しません
Gem ファイルの作り方、gemspec の作り方
gem のビルドの仕方
2
大手町.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
大手町.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 をデフォルトで採用
大手町.rb #5 発表資料 「RubyGems と Bundler について」
パッケージ管理システムとは
パッケージ管理システムでできること
インストール、アンインストールの管理
依存関係の解決
依存済パッケージの最新化
リポジトリからの指定パッケージの検索
RubyGems
上記のことができる Ruby 用のパッケージ管理システム
gem形式と呼ばれるファイル形式を採用
Bundler
たくさんの gem がどのバージョンを使うかを一元管理可能
Gemfile (使いたいバージョンを指定するファイル)と
Gemfile.lock(Bundler が決定したインストールすべきバージ
ョンを格納したファイル)を使って管理する
5
大手町.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 を初期状態に戻す
大手町.rb #5 発表資料 「RubyGems と Bundler について」
Bundler がなかったとき、あるとき
Bundler の前の世界
アプリケーションを開発する
当然のように、いくつか外部ライブラリを使う
最初はうまく動いている
あるタイミングから、インストールしたけど、動きませんと報
告が上がってくる
理由を調べたら、依存ライブラリの一部が最新バージョンでは
過去と非互換なふるまいをしていることが判明
バージョンを古い環境で動かしたらちゃんと動いた。
けど、これを各利用者の環境で周知、作業してもらうのは大変
Bundler が誕生したあとの世界
Gemfile を書く
必ず同じ gem のバージョンで動作する
古いプロジェクトでもちゃんと動作する
みんな、幸せ
7
大手町.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
大手町.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
大手町.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 で出力する
大手町.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
大手町.rb #5 発表資料 「RubyGems と Bundler について」
まとめ
今回は、みんな使っているけれど、深くは理解していな
い RubyGems と Bundler について紹介しました。
知らない機能もあったかもしれません。
これからの開発にお役立ちできるとうれしいです。
12
ご清聴ありがとう
ございました

More Related Content

What's hot

State transfer With Galera
State transfer With GaleraState transfer With Galera
State transfer With GaleraMydbops
 
EthernetやCPUなどの話
EthernetやCPUなどの話EthernetやCPUなどの話
EthernetやCPUなどの話Takanori Sejima
 
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링OpenStack Korea Community
 
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021Valeriy Kravchuk
 
Block I/O Layer Tracing: blktrace
Block I/O Layer Tracing: blktraceBlock I/O Layer Tracing: blktrace
Block I/O Layer Tracing: blktraceBabak Farrokhi
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較NaoyaFukuda
 
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?OpenStack Korea Community
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本yoyamasaki
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くTetsuyuki Kobayashi
 
LAS16-400: Mini Conference 3 AOSP (Session 1)
LAS16-400: Mini Conference 3 AOSP (Session 1)LAS16-400: Mini Conference 3 AOSP (Session 1)
LAS16-400: Mini Conference 3 AOSP (Session 1)Linaro
 
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...NoSQLmatters
 
PubSub and Notifications in Ceph
PubSub and Notifications in CephPubSub and Notifications in Ceph
PubSub and Notifications in CephYuval Lifshitz
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기NHN FORWARD
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912Yooseok Choi
 
ProxySQL High Avalability and Configuration Management Overview
ProxySQL High Avalability and Configuration Management OverviewProxySQL High Avalability and Configuration Management Overview
ProxySQL High Avalability and Configuration Management OverviewRené Cannaò
 
MaxScale이해와활용-2023.11
MaxScale이해와활용-2023.11MaxScale이해와활용-2023.11
MaxScale이해와활용-2023.11NeoClova
 
2017 red hat open stack(rhosp) function overview (samuel,2017-0516)
2017 red hat open stack(rhosp) function overview (samuel,2017-0516)2017 red hat open stack(rhosp) function overview (samuel,2017-0516)
2017 red hat open stack(rhosp) function overview (samuel,2017-0516)SAMUEL SJ Cheon
 
Customer overview oracle solaris cluster, enterprise edition
Customer overview oracle solaris cluster, enterprise editionCustomer overview oracle solaris cluster, enterprise edition
Customer overview oracle solaris cluster, enterprise editionsolarisyougood
 
MySQL Database Architectures - 2020-10
MySQL Database Architectures -  2020-10MySQL Database Architectures -  2020-10
MySQL Database Architectures - 2020-10Kenny Gryp
 

What's hot (20)

State transfer With Galera
State transfer With GaleraState transfer With Galera
State transfer With Galera
 
EthernetやCPUなどの話
EthernetやCPUなどの話EthernetやCPUなどの話
EthernetやCPUなどの話
 
RSS++
RSS++RSS++
RSS++
 
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
 
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
 
Block I/O Layer Tracing: blktrace
Block I/O Layer Tracing: blktraceBlock I/O Layer Tracing: blktrace
Block I/O Layer Tracing: blktrace
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較
 
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
 
LAS16-400: Mini Conference 3 AOSP (Session 1)
LAS16-400: Mini Conference 3 AOSP (Session 1)LAS16-400: Mini Conference 3 AOSP (Session 1)
LAS16-400: Mini Conference 3 AOSP (Session 1)
 
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...
 
PubSub and Notifications in Ceph
PubSub and Notifications in CephPubSub and Notifications in Ceph
PubSub and Notifications in Ceph
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
 
ProxySQL High Avalability and Configuration Management Overview
ProxySQL High Avalability and Configuration Management OverviewProxySQL High Avalability and Configuration Management Overview
ProxySQL High Avalability and Configuration Management Overview
 
MaxScale이해와활용-2023.11
MaxScale이해와활용-2023.11MaxScale이해와활용-2023.11
MaxScale이해와활용-2023.11
 
2017 red hat open stack(rhosp) function overview (samuel,2017-0516)
2017 red hat open stack(rhosp) function overview (samuel,2017-0516)2017 red hat open stack(rhosp) function overview (samuel,2017-0516)
2017 red hat open stack(rhosp) function overview (samuel,2017-0516)
 
Customer overview oracle solaris cluster, enterprise edition
Customer overview oracle solaris cluster, enterprise editionCustomer overview oracle solaris cluster, enterprise edition
Customer overview oracle solaris cluster, enterprise edition
 
MySQL Database Architectures - 2020-10
MySQL Database Architectures -  2020-10MySQL Database Architectures -  2020-10
MySQL Database Architectures - 2020-10
 

Similar to RubyGems と Bundler について

RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler についてTomoya Kawanishi
 
Ruby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてRuby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてTomoya Kawanishi
 
Reudy on Ruby1.9
Reudy on Ruby1.9Reudy on Ruby1.9
Reudy on Ruby1.9Glass_saga
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行についてTomoya Kawanishi
 
Ruby の String のメソッドについて
Ruby の String のメソッドについてRuby の String のメソッドについて
Ruby の String のメソッドについてTomoya Kawanishi
 
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーRuby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーTomoya Kawanishi
 
Ruby のワンライナーについて
Ruby のワンライナーについてRuby のワンライナーについて
Ruby のワンライナーについてTomoya Kawanishi
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」Hiromu Shioya
 
Ruby の正規表現について
Ruby の正規表現についてRuby の正規表現について
Ruby の正規表現についてTomoya Kawanishi
 
RubyのDir、File、IO について
RubyのDir、File、IO についてRubyのDir、File、IO について
RubyのDir、File、IO についてTomoya Kawanishi
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道Shigeru UCHIYAMA
 
Thread の利用事例紹介
Thread の利用事例紹介Thread の利用事例紹介
Thread の利用事例紹介Tomoya Kawanishi
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
Ruby初心者からよく質問されること
Ruby初心者からよく質問されることRuby初心者からよく質問されること
Ruby初心者からよく質問されることTomoya Kawanishi
 
Ruby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けてRuby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けてKoji SHIMADA
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室higaki
 
Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5azumakuniyuki 🐈
 
#027 tddのさわり
#027 tddのさわり#027 tddのさわり
#027 tddのさわり森下 智裕
 

Similar to RubyGems と Bundler について (20)

RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler について
 
Ruby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてRuby の制御構造とリテラルについて
Ruby の制御構造とリテラルについて
 
Reudy on Ruby1.9
Reudy on Ruby1.9Reudy on Ruby1.9
Reudy on Ruby1.9
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行について
 
Ruby の String のメソッドについて
Ruby の String のメソッドについてRuby の String のメソッドについて
Ruby の String のメソッドについて
 
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーRuby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
 
Ruby のワンライナーについて
Ruby のワンライナーについてRuby のワンライナーについて
Ruby のワンライナーについて
 
Rake
RakeRake
Rake
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
 
Ruby の正規表現について
Ruby の正規表現についてRuby の正規表現について
Ruby の正規表現について
 
RubyのDir、File、IO について
RubyのDir、File、IO についてRubyのDir、File、IO について
RubyのDir、File、IO について
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
 
Thread の利用事例紹介
Thread の利用事例紹介Thread の利用事例紹介
Thread の利用事例紹介
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
Ruby初心者からよく質問されること
Ruby初心者からよく質問されることRuby初心者からよく質問されること
Ruby初心者からよく質問されること
 
Ruby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けてRuby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けて
 
Ruby紹介
Ruby紹介Ruby紹介
Ruby紹介
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室
 
Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5
 
#027 tddのさわり
#027 tddのさわり#027 tddのさわり
#027 tddのさわり
 

More from Tomoya Kawanishi

ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例Tomoya Kawanishi
 
エンジニア転職のノウハウ
エンジニア転職のノウハウエンジニア転職のノウハウ
エンジニア転職のノウハウTomoya Kawanishi
 
Ruby の文字列について
Ruby の文字列についてRuby の文字列について
Ruby の文字列についてTomoya Kawanishi
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてTomoya Kawanishi
 
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことAWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことTomoya Kawanishi
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選Tomoya Kawanishi
 
HTTPと Webクローリングについて
HTTPと WebクローリングについてHTTPと Webクローリングについて
HTTPと WebクローリングについてTomoya Kawanishi
 
Active record query interface
Active record query interfaceActive record query interface
Active record query interfaceTomoya Kawanishi
 
Active Support のコア拡張機能について
Active Support のコア拡張機能についてActive Support のコア拡張機能について
Active Support のコア拡張機能についてTomoya Kawanishi
 
Ruby on Rails プロジェクトでの他言語エコシステムとの共存方法
Ruby on Rails プロジェクトでの他言語エコシステムとの共存方法Ruby on Rails プロジェクトでの他言語エコシステムとの共存方法
Ruby on Rails プロジェクトでの他言語エコシステムとの共存方法Tomoya Kawanishi
 
マークアップで使えるRuby
マークアップで使えるRubyマークアップで使えるRuby
マークアップで使えるRubyTomoya Kawanishi
 
エネチェンジでの Side ci 利用事例について
エネチェンジでの Side ci 利用事例についてエネチェンジでの Side ci 利用事例について
エネチェンジでの Side ci 利用事例についてTomoya Kawanishi
 
AWSコストの事業部別コスト配分について
AWSコストの事業部別コスト配分についてAWSコストの事業部別コスト配分について
AWSコストの事業部別コスト配分についてTomoya Kawanishi
 
Pry による repl 駆動開発について
Pry による repl 駆動開発についてPry による repl 駆動開発について
Pry による repl 駆動開発についてTomoya Kawanishi
 
Module での名前解決について
Module での名前解決についてModule での名前解決について
Module での名前解決についてTomoya Kawanishi
 
ガス単独診断に学ぶ Vue js
ガス単独診断に学ぶ Vue jsガス単独診断に学ぶ Vue js
ガス単独診断に学ぶ Vue jsTomoya Kawanishi
 

More from Tomoya Kawanishi (19)

英単語の覚え方
英単語の覚え方英単語の覚え方
英単語の覚え方
 
ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例
 
エンジニア転職のノウハウ
エンジニア転職のノウハウエンジニア転職のノウハウ
エンジニア転職のノウハウ
 
Ruby の文字列について
Ruby の文字列についてRuby の文字列について
Ruby の文字列について
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構について
 
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことAWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったこと
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
 
HTTPと Webクローリングについて
HTTPと WebクローリングについてHTTPと Webクローリングについて
HTTPと Webクローリングについて
 
Active record query interface
Active record query interfaceActive record query interface
Active record query interface
 
Active Support のコア拡張機能について
Active Support のコア拡張機能についてActive Support のコア拡張機能について
Active Support のコア拡張機能について
 
Ruby on Rails プロジェクトでの他言語エコシステムとの共存方法
Ruby on Rails プロジェクトでの他言語エコシステムとの共存方法Ruby on Rails プロジェクトでの他言語エコシステムとの共存方法
Ruby on Rails プロジェクトでの他言語エコシステムとの共存方法
 
マークアップで使えるRuby
マークアップで使えるRubyマークアップで使えるRuby
マークアップで使えるRuby
 
エネチェンジでの Side ci 利用事例について
エネチェンジでの Side ci 利用事例についてエネチェンジでの Side ci 利用事例について
エネチェンジでの Side ci 利用事例について
 
AWSコストの事業部別コスト配分について
AWSコストの事業部別コスト配分についてAWSコストの事業部別コスト配分について
AWSコストの事業部別コスト配分について
 
Pry による repl 駆動開発について
Pry による repl 駆動開発についてPry による repl 駆動開発について
Pry による repl 駆動開発について
 
Module での名前解決について
Module での名前解決についてModule での名前解決について
Module での名前解決について
 
Tsort について
Tsort についてTsort について
Tsort について
 
ガス単独診断に学ぶ Vue js
ガス単独診断に学ぶ Vue jsガス単独診断に学ぶ Vue js
ガス単独診断に学ぶ Vue js
 
Fiberの使いどころ
Fiberの使いどころFiberの使いどころ
Fiberの使いどころ
 

Recently uploaded

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Recently uploaded (10)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

RubyGems と Bundler について

  • 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