ようへいの日々精進XP

よかろうもん

2018 年 04 月 18 日(水)

ジョギング

  • 香椎浜 x 2 周
  • 昨日よりは黄砂は飛来していない気がする

日課

  • やすみ

Fukuoka.rb

fukuokarb.connpass.com

に初参加.

awspec の generator でどうしても解決出来ない問題があったので相談させて頂いた.

github.com

@udzura さんや @k1LoW さんの助言を頂きながら, 問題を解決して PR 出してマージまでして頂いた.

マサカリがバンバン飛んでくるような勉強会だと思っていたけど, まったくそんなことは無くて, とても馴染みやすくて, 居心地の良いもくもく会だった.

次回も, 何か課題を設定して, 事前にその課題を自分なりに解決した上で参加して, レビューをしてもらおうかと目論んでいる.

今日のるびぃ ~ exercism.io で世界を相手に Ruby のプログラム問題を解いていく (1) ~

exercism.io というプログラム問題ライブラリで提供されている Ruby の問題を解いていきたいと思います.

exercism.io

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 のダッシュボードで確認することが出来る. また, 場合によってはマサカリが飛んできたりすることもあるらしい.

フムフム.