SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
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
ご清聴ありがとう
ございました

Contenu connexe

Tendances

AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかShunsukeNakamura17
 
ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証Sugawara Genki
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行についてTomoya Kawanishi
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Masahito Zembutsu
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -MITSUNARI Shigeo
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについてmametter
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)増田 亨
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paiza
 
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)NTT DATA Technology & Innovation
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素Takahiro YAMADA
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法yoku0825
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 

Tendances (20)

AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
 
ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行について
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 

Similaire à 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
 
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
 

Similaire à Ruby のワンライナーについて (16)

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 のキャッシュ機構について
 
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初心者からよく質問されること
 

Plus de 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
 

Plus de 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の使いどころ
 

Dernier

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Dernier (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

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