RubyとGitHub Actionsにこんにちは
Rubyはあまり書いたことがなかったのですが、興味があったのでFizz buzzを書いたりGitHub ActionsでテストやLint Checkを回してみました。GitHubのリポジトリはこちらです。
特に誰が嬉しいわけではないと思いますが、参考までにメモを残しておきます。
Fizz buzz
まずはFizz buzzを書きます。頑張って短くしてみました。人類に理解可能な範囲でもっと短くできる方法があれば教えてください。
# main.rb
require_relative './fizzbuzz'
(1..100).each do |n|
puts fizzbuzz n
end
# fizzbuzz.rb
def fizzbuzz n
s = ''
s << 'Fizz' if n % 3 < 1
s << 'Buzz' if n % 5 < 1
"#{s != '' ? s : n}"
end
if n % 3 < 1
のところは、if n % 3 == 1
と書くより1文字短いです。- 3で割り切れる時は
s
にFizz
、5で割り切れる時はs
にBuzz
を加えます。 - 3項演算子と文字列フォーマットを使って、
s
が空文字でなければs
を、s
が空文字ならn
を返します。
Rubyの言語機能を調べながら頑張って短く書いてみました。楽しいですね。
minitest
最近のRubyには同梱されているというminitestを使ってテストを書きました。簡単に書けて良かったです。
# fizzbuzz_test.rb
require 'minitest/autorun'
require_relative './fizzbuzz'
class FizzBuzzTest < Minitest::Test
def test_fizzbuzz_1
assert_equal '1', fizzbuzz(1)
end
def test_fizzbuzz_3
assert_equal 'Fizz', fizzbuzz(3)
end
def test_fizzbuzz_5
assert_equal 'Buzz', fizzbuzz(5)
end
def test_fizzbuzz_15
assert_equal 'FizzBuzz', fizzbuzz(15)
end
def test_fizzbuzz_98
assert_equal '98', fizzbuzz(98)
end
def test_fizzbuzz_100
assert_equal 'Buzz', fizzbuzz(100)
end
end
GitHub Actions
Fizz buzzを実行
特にどうということはないです。Rubyのバージョンは .ruby-version
に書いてあって、バージョンは 3.0.2
です。
name: FizzBuzz
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
fizzbuzz:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
- name: fizz buzz
run: ruby main.rb
テスト実行
なんかもっといい方法がありそうな気がしますが、単純に ruby fizzbuzz_test.rb
でテストを実行してます。何かもっと良い方法があれば教えてください。
name: Test
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
- name: run test
run: ruby fizzbuzz_test.rb
Lint Check実行
reviewdogとrubocopでLint Checkを実行します。 reviewdog/action-rubocop
を使えば一発でした。
name: Lint Check
on:
pull_request:
types: [ opened, synchronize, reopened ]
jobs:
rubocop:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
- name: rubocop
uses: reviewdog/action-rubocop@v2
with:
rubocop_version: gemfile
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
Gemfileはこんな感じで書いておきました。
# frozen_string_literal: true
source 'https://rubygems.org'
gem 'rubocop', require: false
実行結果
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
まとめ
楽しかったです。
About me 😎

茨城県つくば市在住のソフトウェアエンジニアです。専門領域はAndroidアプリ開発で、特にアーキテクチャに興味があります。某社でAndroidアプリ開発のテックリードをしています。
Jetpack ComposeによるAndroid MVVMアーキテクチャ入門の著者です。
👉 もっと詳しく
Writing 📝
Android MVVMアーキテクチャ入門
Androidアプリ開発の初学者に向けた、MVVM(Model-View-ViewModel)アーキテクチャの入門書を書きました。初学者の方を確実にネクストレベルに引き上げる技術書です。
👉 もっと詳しく