三連休は仕事でした。
休めなかったのでアンニュイな気分でもありますが,代わりに結構イケてるコマンドをみつけてハッピーです。
rgxg
という Linux や Unix 系の OS で使用できるコマンドです。何をやるコマンドなのか。なんと正規表現ジェネレータです。正規表現というのは文字列の集合を表す文字列のことです。例えば Excel のファイルを表現するときは,*.xslx
と表記しますね。この *
の部分が様々なファイル名を表しています。
今回とある案件でやりたかったのが,IP アドレスの CIDR 記法で書いた時の範囲指定を正規表現で書くことでした。わかる人はわかると思いますが,Web サーバの Apache のアクセス制限の設定をするのです。Apache の方は割と情報があるのですが,192.168.100.0/16
みたいな範囲を正規表現で書かないといけないのですが,私は正規表現が大の苦手。
会社にめちゃくちゃ正規表現に強いエンジニアがいるのですが,連休中で休みですし。調べたらあるじゃないですか。どんぴしゃりなコマンドが。
会社ではこの記事にしたがって Ubuntu Linux を Virtual Box の VM で用意したのですが,自宅でも使いたいなと思ってみたものの mac のディスク容量が逼迫しているので macOS に入らないかと探っていたらいけました。
$> brew install rgxg
Ubuntu だと apt-get
で一発ですが,macOS の場合は brew
でいけるみたいです。
==> Pouring rgxg-0.1.1.sierra.bottle.tar.gz 🍺 /usr/local/Cellar/rgxg/0.1.1: 27 files, 89.8KB
久々に brew
コマンドを叩いたのでアップデートとか走りましたが,無事インストールできました。早速使ってみます。
$> rgxg cidr 192.168.124.0/24 192\.168\.124\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])
サブコマンドに cidr
を指定して IP アドレスと CIDR ブロックを指定します。これで一発で正規表現が出て来ます。これで 192.168.124.1 〜 192.168.124.254
の範囲の IP アドレスの文字列をひっかけることができます。すごいぞ!
ちなみに Apache でこれを使うのは X-Forwarded-For
の設定で SetEnvIf
を使う場合ですが,一般論で X-Forwarded-For
にはアクセス元の IP アドレスが途中にプロキシなど経由した場合はカンマ区切りで連結されて来ます。一番根元のアクセス元から順に右側に追加されるので,一番左が最初のアクセス元です。これを引っ掛けるには rgxg
で出力した正規表現に ^
をつけます。
^192\.168\.124\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])
です。もし仮に一番後方の IP アドレスを引っ掛ける場合は,
192\.168\.124\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$
と後ろに $
をつけます。
個人的に近年稀に見るイケてるコマンドです。正規表現は得意な人はものすごく得意にしていますが,私のように苦手な人はとことん苦手です。そういった人にある程度生成できる分野は限定されますがジェネレータがあるのは本当に助かります。これのおかげでなんとか連休中の仕事を乗り切りました。おまけに mac でも使えることがわかって万々歳です。