~/tmp/bin/とかに手軽にRubyのスクリプトを書いて置いといたりする.これは前時代的なのでなんとかしたい.
- ほうっておくと動かなくなったり消えたりするので,どこかに置いといてインストール可能な状態にしたい
- いまどきbin/以下にコピー,とかしたくない
- 手軽にすぐ作りたい
- グローバルなネームスペースを汚染したくない
- rubygems.orgやCPANではsome-my-useful-toolとかApp::My::Useful::Toolみたいになるけど,この名前は世界中で唯一無二でプレッシャーが高い
- ネームスペースの衝突を恐れてキラキラネームをつけたりしているけど釈然としなくて,これならUUID::1992246e::6a7f::493d::8d82::f2fe042b4a31とかで済みそうな気もする
Gistに置いたRubyのスクリプトをGem形式で公開してそのままインストールできると便利かと思ったけどいまいちだった.
GistにGemを置きつつも実行したいファイルも置く,という形にしてみたのだけど,これ単体ではgem installできない…..
https://gist.github.com/hitode909/8e3fde72960e9adbbc7b5cbf4e0d5861
Gem::Specification.new do |spec| spec.name = "urls" spec.version = "0.0.3" spec.authors = ["hitode909"] spec.email = ["hitode909@gmail.com"] spec.summary = "Extract and print the URLs" spec.files = ["urls"] spec.bindir = "." spec.executables = ["urls"] end
配布したいのは,標準入力に含まれるURLを出力するurlというスクリプト.これはこれでべんり.
require 'uri' while line = gets begin URI.extract(line, ['http', 'https']).each do |uri| puts uri end rescue end end
このurlsコマンドを使うには,もう1つgistを置いて,こちらにはGemfileを置いて,--binstubして,bin/urlsする.これで実行できたけど,あまり意味がなさそう.このディレクトリに移動してから実行することになってうれしさが少ない.
https://gist.github.com/hitode909/5b2ae7b965c389f0e993fa7fe54099d0
gem "urls", git: "https://gist.github.com/8e3fde72960e9adbbc7b5cbf4e0d5861.git"
モジュールをプロジェクトの一部として管理するならGistで済むけど,実行ファイルをインストールしたいときにはGistは使えなかった(なんか方法あったら教えてください).
こういうのはGoとかNodeで書くと楽そうな気がする.hitode909/urls みたいに著者の名前つきで実行ファイルをインストールできるとプレッシャーが少なくて気楽だと思う.
似たような話題がPerlのモジュール管理にもあって,社内で使いたいモジュールなどを作ったとき,うちの会社ではgitのsubmoduleに置いてるのだけど,そうするとcpanfileで管理できなくなる.
cpanfileにgitのURLやブランチやタグなど書けるようになれば,CPANに上げる前に個人のgithubからインストールして様子を見たりできて便利そう.今はいきなり世界中に公開するしかなくてちょっと不便.