こんにちは、@doewです。
師走ですね。忙しいですね。この記事はTimee Advent Calendar 2025 の20日目の記事としても公開されています。
ちょっとした自動化スクリプトを書きたいけれど、わざわざ bundle init して Gemfile 書くのは正直億劫な時があります。
そこで今回は、「Rubyの標準ライブラリだけで動く(Gemの追加インストール不要)」「1ファイル(ペライチ)で完結する」 という縛りで、地味に便利なスクリプトを3つ紹介します。
コピペして ruby script.rb とするだけですぐ動きます。
1. マージ済みブランチを一掃する「お掃除スクリプト」
開発が進むと、ローカルに溜まりがちな feature/xxx や fix/xxx などのブランチがたまりがちです。
手動で消すのは面倒ですが、誤って必要なものまで消すのも怖いですよね。
そこで、git branch --merged の結果を利用して、マージ済みブランチ安全に削除するスクリプトです。
ソースコード (clean_branches.rb)
#!/usr/bin/env ruby
# main/master以外のマージ済みブランチを取得
branches = `git branch --merged`.split("\n").map(&:strip).reject { |b|
b.include?('main') || b.include?('master') || b.include?('*')
}
if branches.empty?
puts "✨ 削除できるブランチはありませんでした!"
exit
end
puts "以下のブランチを削除しますか?"
puts branches.join("\n")
print "\n削除を実行しますか? (y/n): "
if gets.chomp.downcase == 'y'
branches.each do |branch|
# システムコマンドを実行
system("git branch -d #{branch}")
puts "🗑️ #{branch} を削除しました"
end
puts "🎉 完了しました!"
else
puts "キャンセルしました"
end
ポイント
git branch --mergedを使っているので、未マージのコードを消してしまう事故を防げます。- Rubyのバッククォート記法(
cmd)を使うと、シェルコマンドの結果を配列で受け取れるので便利です。
2. Excel等でもらったCSVをJSONにする「データ変換くん」
「データはCSVで渡すから、DBに入れておいて」と言われた経験はありませんか。 CSVをパースしてJSONに変換する作業も、Rubyなら標準ライブラリだけで一瞬です。
ソースコード (csv2json.rb)
#!/usr/bin/env ruby
require 'csv'
require 'json'
file_path = ARGV[0]
unless file_path && File.exist?(file_path)
puts "Usage: ruby csv2json.rb <file.csv>"
exit
end
# ヘッダーをキーにしてハッシュの配列に変換
data = CSV.read(file_path, headers: true).map(&:to_h)
# JSONとして標準出力(整形付き)
puts JSON.pretty_generate(data)
使い方
$ ruby csv2json.rb data.csv > data.json
ポイント
require 'csv'とrequire 'json'は標準ライブラリなのでgem install不要。headers: trueオプションを渡すだけで、1行目をキーとしたハッシュに変換してくれます。
3. 担当サイトのSSL証明書期限をチェックする「監視員」
「あれ、あの管理画面の証明書、いつ切れるんだっけ?」と不安になった時に便利です。 ブラウザで確認しに行かなくても、コマンド一発で残り日数を教えてくれます。
ソースコード (check_ssl.rb)
#!/usr/bin/env ruby
require 'socket'
require 'openssl'
target_host = ARGV[0] || 'google.com'
port = 443
begin
# TCP接続してSSLソケットを作成
tcp_client = TCPSocket.new(target_host, port)
ssl_client = OpenSSL::SSL::SSLSocket.new(tcp_client)
ssl_client.hostname = target_host
ssl_client.connect
# 証明書情報を取得
cert = ssl_client.peer_cert
days_left = ((cert.not_after - Time.now) / 86400).to_i
puts "Target: #{target_host}"
puts "Expires: #{cert.not_after}"
puts "残り日数: #{days_left}日"
if days_left < 30
puts "⚠️ 更新時期が近づいています!"
else
puts "✅ まだ余裕があります"
end
ssl_client.close
rescue => e
puts "Error: #{e.message}"
end
使い方
$ ruby check_ssl.rb example.com
ポイント
opensslライブラリを使うと、HTTPリクエストを飛ばさずにSSLハンドシェイクの情報だけを取得できます。- これをCronに仕込んで、残り日数が少ない時だけSlackに通知する…といった運用も簡単に作れます。
おわりに
RubyはRailsのイメージが強いですが、標準ライブラリだけでも強力なグルーコード(接着剤のようなコード)が書けます。 ササッと業務効率化ツールを作りたい時、ぜひ「標準ライブラリ縛り」で書いてみてください。ライブラリ群は公式にサポートされメンテされているほか、環境構築ゼロ(厳密にはrubyだけ)で動くのは正義です。