ジョギング
- 香椎浜 x 2 周
- 昨日よりは黄砂は飛来していない気がする
日課
- やすみ
Fukuoka.rb
に初参加.
awspec の generator でどうしても解決出来ない問題があったので相談させて頂いた.
@udzura さんや @k1LoW さんの助言を頂きながら, 問題を解決して PR 出してマージまでして頂いた.
マサカリがバンバン飛んでくるような勉強会だと思っていたけど, まったくそんなことは無くて, とても馴染みやすくて, 居心地の良いもくもく会だった.
次回も, 何か課題を設定して, 事前にその課題を自分なりに解決した上で参加して, レビューをしてもらおうかと目論んでいる.
今日のるびぃ ~ exercism.io で世界を相手に Ruby のプログラム問題を解いていく (1) ~
exercism.io というプログラム問題ライブラリで提供されている Ruby の問題を解いていきたいと思います.
exercism コマンドラインツールの導入
導入環境は以下の通り.
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"
コマンドラインツールを導入.
wget https://github.com/exercism/cli/releases/download/v2.4.1/exercism-linux-64bit.tgz tar zxvf exercism-linux-64bit.tgz cp exercism ~/bin/
セットアップ
API キーを exercism.io サイトの API Key より取得して, コマンドラインで以下のように実行する.
exercism configure --key=xxxxxxxxxxxxxxxxxxxxxxxxxx --dir=/path/to/exercism
--dir
で指定したパスに問題を展開することが出来る.
問題の取得
以下のように fetch
コマンドで問題を取得する.
exercism fetch ruby
HelloWorld
1 問目は HelloWorld.
$ tree hello-world/ hello-world/ ├── GETTING_STARTED.md ├── README.md └── hello_world_test.rb 0 directories, 3 files
hello_world_test.rb
がテストになるので, このテストを通すようにコードを書いていく.
... class HelloWorldTest < Minitest::Test def test_say_hi assert_equal "Hello, World!", HelloWorld.hello end end ...
Hello, World!
という文字列を返す, クラスメソッドを実装してあげれば良さそう.
# パターン 1 (オーソドックスな書き方) class HelloWorld def self.hello 'Hello, World!' end end # パターン 2 (特異クラスパターン) class HelloWorld class << self def hello 'Hello, World!' end end end # パターン 3 (既に HelloWorld クラスが定義されている場合) class HelloWorld; end def HelloWorld.hello 'Hello, World!' end # パターン 4 (モジュールメソッドを extend することで, クラスメソッドとして振る舞わせることが可能) module Greeting def hello 'Hello, World!' end end class HelloWorld extend Greeting end
上記のような書き方が想定できる. ほかにも書き方があるかもしれないけど. 色々な実装パターンを考えるのは楽しい.
解答を提出
以下のように submit
すると, 解答が提出される.
exercism submit hello_world.rb
提出したら, exercism.io のダッシュボードで確認することが出来る. また, 場合によってはマサカリが飛んできたりすることもあるらしい.
フムフム.