!Mac OS X-10.15.7 !ruby-2.7.1p83
CoCの第一歩
Convention over Configurationという標語があります.configurationというのは 設定 という意味ですが,ソフトの動作をいくらでも設定できるのはいいことですよね.ところがほとんどの場合はデフォルトのままで使いますし,そのほうがどこに何があるかを探さなくてもいいので,みんなが迷うことがありません.それなら「デフォルトのままでいんじゃね」というのがconvention( 規約 と訳されていますが,コンベンションセンターの方が私はなじんでました,意味はa way in which something is usually doneだそう)です.
それを徹底的にシステム化したのが,David Heinemeier Hansson(DHH)が開発したRuby on Railsです.CoCの触りとして,linuxの世界でのbinの掟とRailsでよくはじまるscaffolding(足場組)の感覚を紹介します.
動作のメモ
動くようになったら使えるようにしましょう.shebangというのを設定して,さらにexecutableに直します.
- cp hello.rb hello
- emacs hello
- #!/usr/bin/env rubyを追加
- セーブして
- chmod a+x helloでexecutableにします.
置き場所を工夫すれば,とても便利です.
場所 | for whom |
---|---|
. | # very local |
./bin | # project |
~/bin | # user |
gem | # all users |
tight bindingという考え方があります.これは,必要なファイルを出来るだけ必要な場所に近いところに置いておくことを意図しています.そうすると可搬性が増すから.
execなどの種類で整理したり,~/binなどに置いておくとそのうち爆発します.localはlocalに必要なprojectで実行できるように.さらに,チョコチョコ直すのも気兼ねなくできるようになります.ここでしか使わないから.
pathの設定
commandが多くなるとsystemが実体を探すのに時間がかかります.そこで「pathを通す」んですが,これはやりたくないconfigurationの一種.でも,仕方がないんで,覚えてください.
> emacs ~/.bashrc
export PATH=".:~/bin:$PATH" を追加,保存
> source ~/.bashrc
これで今いるところとか,'~/bin`に置いたexecutableなcodeを動かすことができます.
fishの場合は,以下の通り.
> emacs ~/.config/fish/config.fish
set PATH . $HOME/bin $PATH
を追加,保存
> source ~/.config/fish/config.fish
bundler
さらに,便利なものや,いろいろな場面で使う共通のアプリはいろいろなところから使えると便利ですよね.そういう時にはgemにしちまいましょう.
> gem install bundler
> bundle gem hello_rudy -b
最初は少し質問されますが,TEST:"test-unit", CI:"github"他いくつかの質問には'y'で答えてください.あるいは
bundle gem hello_rudy -b --git --mit --test=test-unit
これでgem作成に必要なファイルが自動生成されます.
あとは,少し修正です.
> bundle exec exe/hello_rudy
で動かないですね.
> chmod a+x exe/hello_rudy
で動くかな.
もう少し,
> emacs hello_rudy.gemspec
で怒られたところを修正します.用意できてないところは,コメントアウトしときましょう.
さらにlib/hello_rudy.rbを次のように加筆します.
require "hello_rudy/version"
module HelloRudy
class Error < StandardError; end
# Your code goes here...
name = ARGV[0] || 'Rudy'
puts "Hello #{name}."
end
そうして,動くことが確認できたら,
> rake install:local
hello_rudy 0.1.0 built to pkg/hello_rudy-0.1.0.gem.
hello_rudy (0.1.0) installed.
そうすると
> hello_rudy Rudy
Hello Rudy.
とちゃんと動くようになったでしょ?
これにはconfiguration要りません.どこに入れるかとか,それを読み込む動作とかは,gemがよしなにやってくれてます.気になるならgem envとかで調べてください.
scaffolding
bundleというコマンドでどのようにして自動作成が行われたかを少し観察してください.
> brew install tree
> tree
.
├── CODE_OF_CONDUCT.md
├── Gemfile
├── Gemfile.lock
├── LICENSE.txt
├── README.md
├── Rakefile
├── bin
│ ├── console
│ └── setup
├── exe
│ └── hello_rudy
├── hello_rudy.gemspec
├── lib
│ ├── hello_rudy
│ │ └── version.rb
│ └── hello_rudy.rb
├── pkg
│ └── hello_rudy-0.1.0.gem
└── spec
├── hello_rudy_spec.rb
└── spec_helper.rb
6 directories, 15 files
となっています.
- どこに何を置くかを決めておく.
これがCoCの第一歩になります.名前とかも自動生成されて,作業の足場(scaffold)ができあがっていることに注目してください.あとは,指示に従って修正していく.これもTDDです.
- source ~/git_hub/ruby_docs/chart_style_ruby/c03_bundler.org