SlideShare a Scribd company logo
1 of 14
Download to read 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
ご清聴ありがとう
ございました

More Related Content

What's hot

メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?Takuya Ueda
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介JustSystems Corporation
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかKoichiro Matsuoka
 
Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話terurou
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?kwatch
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!shinjiigarashi
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話Daichi Koike
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?takezoe
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 sasezaki
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることShingo Fukui
 
フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感Chao Li
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来増田 亨
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 

What's hot (20)

メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
Railsで作るBFFの功罪
Railsで作るBFFの功罪Railsで作るBFFの功罪
Railsで作るBFFの功罪
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 

Similar to 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
 

Similar to 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初心者からよく質問されること
 

More from Tomoya Kawanishi

ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例Tomoya Kawanishi
 
エンジニア転職のノウハウ
エンジニア転職のノウハウエンジニア転職のノウハウ
エンジニア転職のノウハウTomoya Kawanishi
 
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことAWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったこと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
 

More from Tomoya Kawanishi (19)

英単語の覚え方
英単語の覚え方英単語の覚え方
英単語の覚え方
 
ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例
 
エンジニア転職のノウハウ
エンジニア転職のノウハウエンジニア転職のノウハウ
エンジニア転職のノウハウ
 
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことAWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったこと
 
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
 
Fiberの使いどころ
Fiberの使いどころFiberの使いどころ
Fiberの使いどころ
 

Recently uploaded

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

Recently uploaded (9)

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

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