LoginSignup
3
0

More than 3 years have passed since last update.

第8回

Last updated at Posted at 2020-12-10

!Ubuntu-20.04.1 !ruby-2.7.1p83

これは講義用のまとめサイトです。見た人は是非LGTMを押しといてください。

やったこと

  • rake
  • command_line

rake

rakeとは、makeコマンドのruby板である
makeコマンドとは、MakeFileに記述したコマンドを一挙に実行するコマンド
rakeも同様にRakeFileにコマンドを書いておけばいちいちいくつもコマンドを打たなくてもいいというものらしい
つまり、gitにアップロードするときに毎回「git pull~」「git add~」「git commit~」「git push~」と打ってたのを一発で実行できるようにしたりできる。こう言われると確かに嬉しい気がする

とりあえずコピペ

task :default do
  system 'rake -T'
  exit
end

desc 'hello NAME'
task :hello do
  name = ARGV[1]
  puts "Hello #{name}!"
  exit
end

で、

>rake hello World
>Hello Wordl

となる。これはつまりRakefileの中の「hello」というtaskを実行したことになる。
なお、「desc 'hello NAME'」のdescって何?机?と思って調べたら、descはdescription、つまり単にtaskの説明を書いてるものらしく、なくてもよかった
(12/16追記)
先生からのコメントによると、descを書いておくことでhelpなどで説明が出るようになるので(暗黙的に)なくてはならない物だそうです。

gitの操作を一発でできるようにしよう

system callで実用的なtaskを作っておこう

desc 'git push'
task :push do
  p comm = "git pull origin main"
  system comm
  p comm = "git add -A"
  system comm
  p comm = "git commit -m \'commit\'"
  system comm
  p comm = "git push origin main"
  system comm
  exit
end

これはgitにアップロードする際の一連のコマンドをまとめたtaskである。これをRakefileに書き込んでおけば、さっきと同じ要領で

> rake push

とするだけでなんとgitにアップロードできちゃうのです。こりゃだいぶ楽になった
しかも変数も使えるらしく、例えばコメントのところは毎回違う内容を入れたいならARGV[0]で入力を受け付けてやれば実現できる

command_line

上ではsystem関数を呼び出して無事gitのアップロードが楽になりましたと言いたいところだが・・・このやり方はsystemで外部のコマンドを呼び出してるので高速ではないらしい
そこで組み込み関数を学んでプログラムを高速化することを考える

標準出力を得たい

目標:組み込み関数を使ってほかの人のREADME.orgの情報を得てデータを成形し、標準出力を取り出す
その前に

> gem install command_line

でcommand_lineというgemをインストールしておく。これは標準出力を取り出すためのもので、ruby2.4以上じゃないと使えないらしいけど、一応確認すると2.7.1を使ってるので無問題
とりあえず最初の5人分テストで取り出してみることにする

require 'command_line/global'
desc 'make list'
task :mk_list do
  targets = "../**/README.org"
# systemを使った場合
  # system 'ls -1 {#targets}'
  # p targets
# command_lineを使った場合
  Dir.glob(targets)[0..4].each do |file|
  p file
  res = command_line "grep qiita_id #{file}"
   p res.stdout
  end
  exit
end

targetsに拾ってきた各人のREADME.orgへのパスが入る。
組み込み関数のDir.globはsystem関数でlsで呼び出してた動作を代替している。ここではとりあえず0番目から4番目を呼び出してる
取得した各ファイルについて、eachでファイル名、そして各ファイル内にあるqiita_idを出力させている
結果

"../0922tooy/README.org"
"#+qiita_id: 0922tooy\n"
"../acoe5781/README.org"
"#+qiita_id: Acoe\n"
"../adchello/README.org"
"#+qiita_id: adchello\n"
"../batamon-427/README.org"
"#+qiita_id: batamon-427\n"
"../createiveIKEP/README.org"
"#+qiita_id: creativeIKEP\n"

はい、5人分のqiita_idが取得できましたね。まあsystemで全員分のREADME.org呼び出す操作を実行したところで、この程度の人数なら見た目では別に差はないんですが

参考記事

チャート式ruby-appendix-IV(rake) Rakeで自動化&Export


  • source ~/MasahiroOba/grad_members_20f/members/MasahiroOba/chapter8.org
3
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0