SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Ruby のワンライナーについて
2019/02/20
大手町.rb #14
大手町.rb #14 「Rubyのワンライナーについて」
1自己紹介
Tomoya Kawanishi a.k.a. @cuzic
エネチェンジ株式会社 チーフエンジニア
電力会社、ガス会社を切り替えるなら、エネチェンジ経由で!
一般家庭も!法人も!
Ruby関西の中の人
発表者として登壇くださる方、あとで声かけください。
大手町.rb の中の人
毎月 大手町.rb の開催を予定
東京駅、各線大手町駅から直結!
Ruby の初級者がメインターゲット
大手町.rb #14 「Rubyのワンライナーについて」
今日のテーマ
Ruby のワンライナーについて
ワンライナーとは
ruby –e など、一行でいろんなことを実現することです。
シェル上でさくっと実行できる使い捨てのスクリプト
たった1行でたくさんのことを実施できます
2
大手町.rb #14 「Rubyのワンライナーについて」
表示
-e オプションの引数を Ruby スクリプトと解釈します
計算・四則演算
順列組合せをすべて表示する
Ruby にはイケてるメソッドがたくさん
ワンライナーで実行することで、shell のコマンド履歴
に残る
あとで、もう一度使いたいときに検索しやすい
ワンライナーの基本 3
ruby -e 'puts 70/(1.75*1.75)' # 体重70Kg、身長 175cm の BMI
ruby -e 'puts "Hello, World!"'
ruby -e 'puts [1,2,3].permutation(2).map{|a| a.join(",")}'
大手町.rb #14 「Rubyのワンライナーについて」
拡張ライブラリの利用
-r で拡張ライブラリを読み込めます
ランダムな文字列を表示する
-r のあとに半角空白を書いても書かなくても正しく動作します
YAML を JSON に変換する
-r を複数回書くこともできます
4
ruby -r securerandom -e 'puts SecureRandom.hex'
#=> 99a92ed098bdfaac8a27816220b76c89
ruby -rsecurerandom -e 'puts SecureRandom.uuid'
#=> d528c944-dfcd-4ccf-bc33-4431024b5cfc
ruby -ryaml -rjson -e ¥
'puts YAML.load_file("config/locales/ja.yml").to_json'
#=> {"ja": 略 }
大手町.rb #14 「Rubyのワンライナーについて」
ワンライナーで特に有用な un
un (unix ライクコマンドのユーティリティ)
Windows でも Unix と同様にワイルドカードを認識できる
特に httpd が他のマシンとのデータ交換などの目的で便利
5
ruby -run -e cp -- [-prv] SOURCE DEST
ruby -run -e ln -- [-sfv] TARGET LINK_NAME
ruby -run -e mv -- [-v] SOURCE DEST
ruby -run -e rm -- [-frv] FILE
ruby -run -e mkdir -- [-pv] DIRS
ruby -run -e rmdir -- [-v] DIRS
ruby -run -e install -- [-pv -m mode] SOURCE DEST
ruby -run -e chmod -- [-v] OCTAL-MODE FILE
ruby -run -e touch -- [-v] FILE
ruby -run -e wait_writable -- [OPTION] FILE
ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION]
ruby -run -e httpd -- [OPTION] DocumentRoot
ruby -run -e help [COMMAND]
大手町.rb #14 「Rubyのワンライナーについて」
-n : 入力を受け取り、順次処理する
正規表現にマッチする行を表示する
上と同じ。 「$_ =~」 は省略可。 -ne とも短縮可
print を使うと、引数 $_ を省略できる
6
ruby –n -e 'puts $_ if $_ =~ %r(18/Feb/2019)'
ruby –ne 'puts $_ if %r(18/Feb/2019)'
ruby –ne 'print if %r(18/Feb/2019)'
大手町.rb #14 「Rubyのワンライナーについて」
-p : 入力を受け取り加工後出力する
大文字に変換する
各行の $_ の内容を表示する
とはいえ、Ruby では単に puts を使う方が自然な気がする
7
echo -e "abc¥nabcde¥nabcdefg¥n" | ruby -pe '$_ = $_.upcase'
ABC
ABCDE
ABCDEFG
ruby -ne 'puts $_.upcase'
大手町.rb #14 「Rubyのワンライナーについて」
-a : 空白区切りで配列として受け取る
PPID が 1 のプロセスを一覧表示
空白区切りで分割した結果がグローバル変数 $F に入る
$F は文字列の配列。
特定の IP アドレスからのユーザのアクセスを調査
上記の 6 とか 0 とかの部分はログフォーマットで異なるので
適宜修正してください。
$F[6] にアクセスしているパスが入っている想定です
8
ps -ef | ¥
ruby -ane 'puts $F.values_at(0,1,7).join(",") if $F[2] == "1"'
cat log/nginx-access.log | ¥
ruby –ane 'puts $F[6] if $F[0] == "xxx.xxx.xx.xx"'
大手町.rb #14 「Rubyのワンライナーについて」
-F : -a で区切るときの文字を指定する
/etc/passwd で : で区切り、最初の要素を表示
$F[-1] で最後の要素にアクセスできる
$F.last でも最後の要素にアクセスできる
9
cat /etc/passwd | ¥
ruby –anF: -e 'puts $F[0]'
cat /etc/passwd | ¥
ruby –anF: -e 'puts $F[0] if $F[-1].chomp.end_with?("sh")'
cat /etc/passwd | ¥
ruby –anF: -e 'puts $F[0] if $F.last.chomp.end_with?("sh")'
大手町.rb #14 「Rubyのワンライナーについて」
-e を複数回書く場合
-e は複数回 書ける。
複数回書くと、それぞれが改行区切りで順にあるように
解釈される
上記のスクリプトを使うと最新の manifest ファイルで
アセットの対応関係を表示することができる
10
ls -1t public/assets/manifest-*.json | ¥
head -n 1 | ¥
ruby -r json –e 'json = JSON.load(open(ARGF.read.chomp).read)' ¥
-e 'puts json["assets"].map{|v| v.join("¥t")}'
大手町.rb #14 「Rubyのワンライナーについて」
BEGIN 、END
BEGIN で前処理、END で後処理を書くことができる
下記の例では、BEGIN で変数の初期化
END で計算後の出力処理を実施している
11
aws cloudwatch get-metric-statistics ¥
--metric-name RequestCount ¥
--start-time $(date -u -d "1 hour ago" +%FT%H:00:00) ¥
--end-time $(date -u +%FT%H:00:00) ¥
--period 60 --namespace AWS/ELB --statistics Sum ¥
--dimensions Name=LoadBalancerName,Value=prod-front ¥
--query "Datapoints[]" --output text | ¥
ruby -ane 'BEGIN{ $min, $max = Float::INFINITY, 0 }' ¥
-e '$max, $max_time = $F[0].to_f, $F[1] if $max < $F[0].to_f' ¥
-e '$min, $min_time = $F[0].to_f, $F[1] if $min > $F[0].to_f' ¥
-e 'END{ puts "#{$max_time} max: #{$max}"; puts "#{$min_time}
min: #{$min}"}'
大手町.rb #14 「Rubyのワンライナーについて」
まとめ
Ruby のワンライナーを作るときのテクを紹介しました
ちょっとしたときにとても便利です
コマンド実行履歴で検索できるのも、便利です。
キメるととても気持ちいい! 💊
Happy Engineer Life を!
12
ご清聴ありがとう
ございました

Mais conteúdo relacionado

Mais procurados

大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌LINE Corporation
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングYuma Ohgami
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューションOAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューションTatsuo Kudo
 
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014VirtualTech Japan Inc.
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】WESEEKWESEEK
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景Tatsuo Kudo
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方akira6592
 
Kotlin vs TypeScript
Kotlin vs TypeScriptKotlin vs TypeScript
Kotlin vs TypeScriptSaiki Iijima
 
いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方Hiroshi Tokumaru
 
ダブリング
ダブリングダブリング
ダブリングsatanic
 
ロードバランスへの長い道
ロードバランスへの長い道ロードバランスへの長い道
ロードバランスへの長い道Jun Kato
 
Uuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみたUuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみたYu Yamada
 
OAuth認証再考からのOpenID Connect #devlove
OAuth認証再考からのOpenID Connect #devloveOAuth認証再考からのOpenID Connect #devlove
OAuth認証再考からのOpenID Connect #devloveNov Matake
 
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことAWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことTomoya Kawanishi
 
【JAWS DAYS 2016】ランサーズを支えるAurora
【JAWS DAYS 2016】ランサーズを支えるAurora【JAWS DAYS 2016】ランサーズを支えるAurora
【JAWS DAYS 2016】ランサーズを支えるAuroraYuki Kanazawa
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은jieun kim
 

Mais procurados (20)

暗認本読書会12
暗認本読書会12暗認本読書会12
暗認本読書会12
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューションOAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
 
Fiberの使いどころ
Fiberの使いどころFiberの使いどころ
Fiberの使いどころ
 
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方
 
Kotlin vs TypeScript
Kotlin vs TypeScriptKotlin vs TypeScript
Kotlin vs TypeScript
 
いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方
 
ダブリング
ダブリングダブリング
ダブリング
 
ロードバランスへの長い道
ロードバランスへの長い道ロードバランスへの長い道
ロードバランスへの長い道
 
Uuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみたUuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみた
 
OAuth認証再考からのOpenID Connect #devlove
OAuth認証再考からのOpenID Connect #devloveOAuth認証再考からのOpenID Connect #devlove
OAuth認証再考からのOpenID Connect #devlove
 
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことAWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったこと
 
【JAWS DAYS 2016】ランサーズを支えるAurora
【JAWS DAYS 2016】ランサーズを支えるAurora【JAWS DAYS 2016】ランサーズを支えるAurora
【JAWS DAYS 2016】ランサーズを支えるAurora
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은
 

Semelhante a Ruby のワンライナーについて

Ruby の String のメソッドについて
Ruby の String のメソッドについてRuby の String のメソッドについて
Ruby の String のメソッドについてTomoya Kawanishi
 
Ruby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてRuby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてTomoya Kawanishi
 
Ruby の正規表現について
Ruby の正規表現についてRuby の正規表現について
Ruby の正規表現についてTomoya Kawanishi
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてTomoya Kawanishi
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行についてTomoya Kawanishi
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler についてTomoya Kawanishi
 
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講習会2013
メイカーRuby講習会2013メイカーRuby講習会2013
メイカーRuby講習会2013Kindai University
 
Ruby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けてRuby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けてKoji SHIMADA
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室higaki
 
Thread の利用事例紹介
Thread の利用事例紹介Thread の利用事例紹介
Thread の利用事例紹介Tomoya Kawanishi
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案nagachika t
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1耕平 谷口
 
Ruby初心者からよく質問されること
Ruby初心者からよく質問されることRuby初心者からよく質問されること
Ruby初心者からよく質問されることTomoya Kawanishi
 

Semelhante a Ruby のワンライナーについて (17)

Ruby の String のメソッドについて
Ruby の String のメソッドについてRuby の String のメソッドについて
Ruby の String のメソッドについて
 
Ruby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてRuby の制御構造とリテラルについて
Ruby の制御構造とリテラルについて
 
Ruby の正規表現について
Ruby の正規表現についてRuby の正規表現について
Ruby の正規表現について
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構について
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行について
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler について
 
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講習会2013
メイカーRuby講習会2013メイカーRuby講習会2013
メイカーRuby講習会2013
 
Ruby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けてRuby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けて
 
Rake
RakeRake
Rake
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室
 
Thread の利用事例紹介
Thread の利用事例紹介Thread の利用事例紹介
Thread の利用事例紹介
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
 
Ruby初心者からよく質問されること
Ruby初心者からよく質問されることRuby初心者からよく質問されること
Ruby初心者からよく質問されること
 

Mais de Tomoya Kawanishi

ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例Tomoya Kawanishi
 
エンジニア転職のノウハウ
エンジニア転職のノウハウエンジニア転職のノウハウ
エンジニア転職のノウハウ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 ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー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 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
 

Mais de Tomoya Kawanishi (17)

英単語の覚え方
英単語の覚え方英単語の覚え方
英単語の覚え方
 
ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例
 
エンジニア転職のノウハウ
エンジニア転職のノウハウエンジニア転職のノウハウ
エンジニア転職のノウハウ
 
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 ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーRuby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
 
RubyのDir、File、IO について
RubyのDir、File、IO についてRubyのDir、File、IO について
RubyのDir、File、IO について
 
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
 

Último

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
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
 
論文紹介: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
 
論文紹介: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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
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
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Último (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
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」の紹介
 
論文紹介: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
 
論文紹介: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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
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
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

Ruby のワンライナーについて

  • 2. 大手町.rb #14 「Rubyのワンライナーについて」 1自己紹介 Tomoya Kawanishi a.k.a. @cuzic エネチェンジ株式会社 チーフエンジニア 電力会社、ガス会社を切り替えるなら、エネチェンジ経由で! 一般家庭も!法人も! Ruby関西の中の人 発表者として登壇くださる方、あとで声かけください。 大手町.rb の中の人 毎月 大手町.rb の開催を予定 東京駅、各線大手町駅から直結! Ruby の初級者がメインターゲット
  • 3. 大手町.rb #14 「Rubyのワンライナーについて」 今日のテーマ Ruby のワンライナーについて ワンライナーとは ruby –e など、一行でいろんなことを実現することです。 シェル上でさくっと実行できる使い捨てのスクリプト たった1行でたくさんのことを実施できます 2
  • 4. 大手町.rb #14 「Rubyのワンライナーについて」 表示 -e オプションの引数を Ruby スクリプトと解釈します 計算・四則演算 順列組合せをすべて表示する Ruby にはイケてるメソッドがたくさん ワンライナーで実行することで、shell のコマンド履歴 に残る あとで、もう一度使いたいときに検索しやすい ワンライナーの基本 3 ruby -e 'puts 70/(1.75*1.75)' # 体重70Kg、身長 175cm の BMI ruby -e 'puts "Hello, World!"' ruby -e 'puts [1,2,3].permutation(2).map{|a| a.join(",")}'
  • 5. 大手町.rb #14 「Rubyのワンライナーについて」 拡張ライブラリの利用 -r で拡張ライブラリを読み込めます ランダムな文字列を表示する -r のあとに半角空白を書いても書かなくても正しく動作します YAML を JSON に変換する -r を複数回書くこともできます 4 ruby -r securerandom -e 'puts SecureRandom.hex' #=> 99a92ed098bdfaac8a27816220b76c89 ruby -rsecurerandom -e 'puts SecureRandom.uuid' #=> d528c944-dfcd-4ccf-bc33-4431024b5cfc ruby -ryaml -rjson -e ¥ 'puts YAML.load_file("config/locales/ja.yml").to_json' #=> {"ja": 略 }
  • 6. 大手町.rb #14 「Rubyのワンライナーについて」 ワンライナーで特に有用な un un (unix ライクコマンドのユーティリティ) Windows でも Unix と同様にワイルドカードを認識できる 特に httpd が他のマシンとのデータ交換などの目的で便利 5 ruby -run -e cp -- [-prv] SOURCE DEST ruby -run -e ln -- [-sfv] TARGET LINK_NAME ruby -run -e mv -- [-v] SOURCE DEST ruby -run -e rm -- [-frv] FILE ruby -run -e mkdir -- [-pv] DIRS ruby -run -e rmdir -- [-v] DIRS ruby -run -e install -- [-pv -m mode] SOURCE DEST ruby -run -e chmod -- [-v] OCTAL-MODE FILE ruby -run -e touch -- [-v] FILE ruby -run -e wait_writable -- [OPTION] FILE ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION] ruby -run -e httpd -- [OPTION] DocumentRoot ruby -run -e help [COMMAND]
  • 7. 大手町.rb #14 「Rubyのワンライナーについて」 -n : 入力を受け取り、順次処理する 正規表現にマッチする行を表示する 上と同じ。 「$_ =~」 は省略可。 -ne とも短縮可 print を使うと、引数 $_ を省略できる 6 ruby –n -e 'puts $_ if $_ =~ %r(18/Feb/2019)' ruby –ne 'puts $_ if %r(18/Feb/2019)' ruby –ne 'print if %r(18/Feb/2019)'
  • 8. 大手町.rb #14 「Rubyのワンライナーについて」 -p : 入力を受け取り加工後出力する 大文字に変換する 各行の $_ の内容を表示する とはいえ、Ruby では単に puts を使う方が自然な気がする 7 echo -e "abc¥nabcde¥nabcdefg¥n" | ruby -pe '$_ = $_.upcase' ABC ABCDE ABCDEFG ruby -ne 'puts $_.upcase'
  • 9. 大手町.rb #14 「Rubyのワンライナーについて」 -a : 空白区切りで配列として受け取る PPID が 1 のプロセスを一覧表示 空白区切りで分割した結果がグローバル変数 $F に入る $F は文字列の配列。 特定の IP アドレスからのユーザのアクセスを調査 上記の 6 とか 0 とかの部分はログフォーマットで異なるので 適宜修正してください。 $F[6] にアクセスしているパスが入っている想定です 8 ps -ef | ¥ ruby -ane 'puts $F.values_at(0,1,7).join(",") if $F[2] == "1"' cat log/nginx-access.log | ¥ ruby –ane 'puts $F[6] if $F[0] == "xxx.xxx.xx.xx"'
  • 10. 大手町.rb #14 「Rubyのワンライナーについて」 -F : -a で区切るときの文字を指定する /etc/passwd で : で区切り、最初の要素を表示 $F[-1] で最後の要素にアクセスできる $F.last でも最後の要素にアクセスできる 9 cat /etc/passwd | ¥ ruby –anF: -e 'puts $F[0]' cat /etc/passwd | ¥ ruby –anF: -e 'puts $F[0] if $F[-1].chomp.end_with?("sh")' cat /etc/passwd | ¥ ruby –anF: -e 'puts $F[0] if $F.last.chomp.end_with?("sh")'
  • 11. 大手町.rb #14 「Rubyのワンライナーについて」 -e を複数回書く場合 -e は複数回 書ける。 複数回書くと、それぞれが改行区切りで順にあるように 解釈される 上記のスクリプトを使うと最新の manifest ファイルで アセットの対応関係を表示することができる 10 ls -1t public/assets/manifest-*.json | ¥ head -n 1 | ¥ ruby -r json –e 'json = JSON.load(open(ARGF.read.chomp).read)' ¥ -e 'puts json["assets"].map{|v| v.join("¥t")}'
  • 12. 大手町.rb #14 「Rubyのワンライナーについて」 BEGIN 、END BEGIN で前処理、END で後処理を書くことができる 下記の例では、BEGIN で変数の初期化 END で計算後の出力処理を実施している 11 aws cloudwatch get-metric-statistics ¥ --metric-name RequestCount ¥ --start-time $(date -u -d "1 hour ago" +%FT%H:00:00) ¥ --end-time $(date -u +%FT%H:00:00) ¥ --period 60 --namespace AWS/ELB --statistics Sum ¥ --dimensions Name=LoadBalancerName,Value=prod-front ¥ --query "Datapoints[]" --output text | ¥ ruby -ane 'BEGIN{ $min, $max = Float::INFINITY, 0 }' ¥ -e '$max, $max_time = $F[0].to_f, $F[1] if $max < $F[0].to_f' ¥ -e '$min, $min_time = $F[0].to_f, $F[1] if $min > $F[0].to_f' ¥ -e 'END{ puts "#{$max_time} max: #{$max}"; puts "#{$min_time} min: #{$min}"}'
  • 13. 大手町.rb #14 「Rubyのワンライナーについて」 まとめ Ruby のワンライナーを作るときのテクを紹介しました ちょっとしたときにとても便利です コマンド実行履歴で検索できるのも、便利です。 キメるととても気持ちいい! 💊 Happy Engineer Life を! 12