nownab.log

nownabe's daily posts

Gem in a Boxに簡単にリリースできるGem作ったけどいっぱいあったのでまとめ

Posted on May 20, 2015

はじめに

プライベートなGem Serverというか、Gem in a Boxに手軽にGemをリリースできるようにするgeminabox-rake_tasksというGemを作りました。

https://github.com/nownabe/geminabox-rake_tasks

このGemを使うと、次の2点が実現できます。

  • Rubygems.orgにリリースできない
  • 通常のrakeタスクと同じコマンドでGem in a Boxサーバにリリースできる

社内でプライベートなGem ServerをGem in a Boxで構築してる場合など手軽でいいんじゃないかと思います。

使い方

まず、gemspecファイルに次の行を追加します。

spec.add_development_dependency "geminabox-rake_tasks"

お決まりのbundle installしてください。

$ bundle

Rakefileのrequire "bundler/gem_tasks"を削除して、次の行を追加します。

require "geminabox/rake_tasks"

リリースする前に、Gem in a Boxサーバの設定が必要になります。

$ bundle exec gem inabox -c
Enter the root url for your personal geminabox instance (e.g. http://gems/).
Host:  http://yourgeminabox/

このコマンドで、./gem/geminaboxが設定されます。

$ cat ~/.gem/geminabox
---
:host: http://yourgeminabox/

これでリリースできるようになってます。

$ bundle exec rake release
testgem 0.1.0 built to pkg/testgem-0.1.0.gem.
Tagged v0.1.0.
Pushed git commits and tags.
Pushed testgem 0.1.0

01

他にも、bundler/gem_tasksと同じタスクが使えます。

$ bundle exec rake -T
rake build          # Build testgem-0.1.0.gem into the pkg directory
rake install        # Build and install testgem-0.1.0.gem into system gems
rake install:local  # Build and install testgem-0.1.0.gem into system gems without network access
rake release        # Create tag v0.1.0 and build and push testgem-0.1.0.gem to your gem in a box server

競合

よく調べもせずに作ったので、同じようなのがいっぱいありました。

geminabox-release

https://github.com/dfherr/geminabox-release

Rakefile:

require "geminabox-release"
GeminaboxRelease.patch(use_config: true)

# か、 GeminaboxRelease.path(host: "http://yourgeminabox/")

Rake Tasks:

$ bundle exec rake -T
rake build             # Build testgem-0.1.0.gem into the pkg directory
rake inabox:forcepush  # Build & push testgem-0.1.0.gem overwriting same version to http://localhost:8080
rake inabox:push       # Build & push testgem-0.1.0.gem to http://localhost:8080
rake inabox:release    # Create tag v0.1.0 and build and push testgem-0.1.0.gem to http://localhost:8080
rake install           # Build and install testgem-0.1.0.gem into system gems
rake install:local     # Build and install testgem-0.1.0.gem into system gems without network access
rake release           # Create tag v0.1.0 and build and push testgem-0.1.0.gem to Rubygems

geminabox-rake

https://github.com/jgraichen/geminabox-rake

Rakefile:

require "geminabox/rake"
GeminaboxRake.install

Rake Tasks:

$ bundle exec rake -T
rake geminabox:build          # Build testgem-0.1.0.gem into the pkg directory
rake geminabox:install        # Build and install testgem-0.1.0.gem into system gems
rake geminabox:install:local  # Build and install testgem-0.1.0.gem into system gems without network access
rake geminabox:release        # Create tag v0.1.0 and build and push testgem-0.1.0.gem to Rubygems

bundler-geminabox

https://github.com/sonots/bundler-geminabox

Rakefile:

require "bundler/geminabox/gem_tasks"

Rake Tasks:

$ bundle exec rake -T
rake build              # Build testgem-0.1.0.gem into the pkg directory
rake geminabox_release  # Create tag v0.1.0 and build and push testgem-0.1.0.gem to https://your.rubygems.org
rake install            # Build and install testgem-0.1.0.gem into system gems
rake install:local      # Build and install testgem-0.1.0.gem into system gems without network access
rake release            # [WARN] Release to rubygems.org is prohibited, use rake geminabox_release

このGemはbundle gemの所から面倒みてくれるみたいです。 こっちのほうがうっかりrubygems.orgにリリースすることはないかもしれません。

というかこのGemでいいような気がしてきました。

GEMINABOX=https://your.rubygems.org bundle-geminabox gem foo
      create  foo/Gemfile
      create  foo/.gitignore
      create  foo/lib/foo.rb
      create  foo/lib/foo/version.rb
      create  foo/LICENSE.txt
      create  foo/foo.gemspec
      create  foo/.consolerc
      create  foo/Rakefile
      create  foo/README.md
       force  foo/Gemfile
       force  foo/Rakefile

bundler_geminabox

https://github.com/joshkrueger/bundler_geminabox

Rakefile:

require "bundler_geminabox/gem_tasks"

Rake Tasks:

$ bundle exec rake -T
rake build          # Build testgem-0.1.0.gem into the pkg directory
rake install        # Build and install testgem-0.1.0.gem into system gems
rake install:local  # Build and install testgem-0.1.0.gem into system gems without network access
rake release        # Create tag v0.1.0 and build and push testgem-0.1.0.gem to your geminabox server

ほぼ同じでした。

おわりに

急いでたのでろくに調べずに作ってしまったんですが、まあ普通に考えたら誰か作りますよねw