大学生がプログラマーを目指すはなし

ruby, python, AIの話が多いです

rakeの基本

前提 rubyプログラムの中でC言語コンパイルして実行する。
1. まず最初に適当な作業ディレクトリを作成し、そこにRakefileを作る。

ここでお約束的な感じでRakefileの頭文字は大文字にしておく。

2. 今回使用するC言語プログラムを作っておく。

今回実行するプログラムはamidakuji.c

3. RakefileにCプログラムをビルドして実行するためのコードを書いていく。

f:id:rk0822ps4:20180707155733p:plain

 $ rake としたらdefaultでamidakujiが呼ばれるようにしておく。

4~6行目で実行プログラムで、8~10行目でビルドだ。

このように芋ずる式で書いていくと良い。

$ rake

で実行できる。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8時間かけて作ったソースファイル達を rm ./* してしまった。

2日かけて計8時間ほどかけて作ったプログラムがありました。

それをGitHub上にpushしようと思ったんですよね。

だからまずローカル環境で、作業用ディレクトリからpush用のディレクトにコピーしました。そしてそこで一応中身を確認していたのですが一部気に入らない箇所があり、もう一度作業用ディレクトリの中で訂正しようと思ったんですよね。んで、そのファイル達を一旦消しました。

そしたら...

 

「あれ?」

作業用ディレクトリの中にさっきまで開いていたファイルがないお??

あれ、どこ行ったんだろ...

 

...

.......

「ない.......」

 

 

コマンドの履歴を確認してみたところ作業用ディレからpush用ディレにmvしていたようでした。

そして移動させたファイルを綺麗に削除したみたいでした。

 

解決策は基本的になく、もう一回作り直すしかないらしい...。゚(゚´ω`゚)゚。

 

 

その後誰かに聞いたら「そのためのgitじゃね? コミットしーや。」

とのことで解決しましたとさ。

 

Rake taskでコマンドラインから複数引数を指定する方法

1. taskを作成してみる。

$rake g task file_name

file_nameにてきとうな名前をつける。
すると、rails/lib/task/ に以下のようなファイルが作成される。

file_name.rake
namespace :file_name do
end

 2. taskに処理を書いてみる。

file_name.rake
namespace :file_name do
  task practice do
print "hello" end end

これで保存する。

 

3. rake taskを確認してみる。

$ rake -vT

# 出力結果
...
rake file_name:practice
...

 こう出力されれば作成されている。

 

4. 実行してみる。

$ rake file_name:practice

# 出力結果
hello

 ここまでくればとりあえず完成である。

 

5. Rake taskでコマンドラインから複数引数を指定する方法

5-1. 概要

rakeコマンド実行時にコマンドラインから複数の引数を入力として受け取るには主に2つの方法があります。

  1. taskを複数定義する。
  2. 環境変数を複数定義する。

5-2. taskを複数定義する。

例えば、

task :practice, 'firstname', 'lastname'

task :practice do |i, args|

  puts "My name is  #{args['first_name']} #{args['last_name']}"

end

 として、実行してあげると

$ rake file_name:practice[Ryotaro,Kubota]

 

# 出力結果

My name is Ryotaro Kubota 

とできる。

5-3. 環境変数を複数定義する

例えば、

task :practice do |t|

  puts "My name is #{ENV['first_name']} #{ENV['last_name']}"

end

 として、実行してあげると

$ rake file_name:practice first_name=Ryotaro last_name=Kubota

# 出力結果

My name is Ryotaro Kubota 

とできる。

 

6. どっちがいいの?

まぁどっちでもいいと思ってしまいますが、強いていうなら環境変数の方が好きかもしれないです。

なぜならtaskを繋げてたくさん書いていくとrake -vTで確認したときに、横にたくさん連なって色々見辛くなります(笑)

$ rake -vT

# 出力結果
...
rake file_name:practice,'sample1','sample2','sample3','sample4'...
...

 こうなっちゃうとdescで説明したところが右側に追いやられてしまうんですよね...

何か良い方法があれば別ですが...

 

 

gsub!を使いこなす

gsubとは

文字列の中で正規表現のパターンにマッチした部分をすべて指定の文字列に置換します。

ここで、!(ビックリマーク)が付いているものを破壊的なメソッドと呼び、その場で完全に置き換えて値が変わることを言います。

基本的な使い方

greet = "My name is ひかる"

html.gsub!("My name is", "私の名前は")

print greet

出力 → 私の名前はひかる

 My name is 私の名前は に変わる。

 

Terminalの基本的なこと

ターミナル操作で必要になるコマンドは全て環境変数で設定されている。

/bin, /usr/bin ここのディレクトリにpathを通したコマンドがある。

ちなみに、このようなコマンドは自分で作ったり消したりできる。しかし、初心者のうちはあまりいじらない方が良い。あまりわかっていない状況で操作すると、大変なことにもなる。

 

基本的なコマンド

$ env
環境変数の一覧を見ることができる。
$ echo
→echo $USERなどと打つと中身が確認できる便利なコマンド
$ curl http://example.com -o foo.html
→URLからファイルをダウンロードできる。
$ open
→とにかく開くコマンドだが、引数を.とした場合、カレントディレクトリをfinderで開ける。
$ brew search tree
brewはsearch, install, uninstallといったサブコマンドと言われる引数を最初に指定します。macで使う。