別冊とっしーぱんち

IT技術系、Ruby関連、プログラミングお役立ち

キーワード引数でメソッドをわかりやすくする

Rubyのメソッドで使うことができるキーワード引数がとても便利だったのでご紹介します。

使い方は簡単で、メソッドの引数の後ろにコロン入れるだけです。実際のコードはこんな感じになります。

# キーワード引数を使ったメソッド
def show_profile(name:, age: 0)
  puts "#{name}さん #{age}"
end

# 両方入れる。通常の例
show_profile(name:'とっしー', age:18)
# => とっしーさん 18歳

# ageは引数を省略できる。その場合は0が入る。
show_profile(name:'とっしー')
# => とっしーさん  0歳

# 順番は自由に入れ替えることもできる。
show_profile(age:36, name:'とっしー')
# => とっしーさん  36歳

# ハッシュを引数として渡すこともできるようです。
profile = {name: 'とっしー', age: 52}

# その場合は変数の前に**を入れます。
show_profile(**profile)
# => とっしーさん  52歳

メソッド呼び出す側にも引数名を明示するのもわかりやすさが増して好きです。引数が増えてくると順番間違えたりするんですよね。しかも中途半端に動いたりしてしまいます。例えばこんなような例ですね

# 順番間違えそうなメソッド
def show_profile(first_name, family_name)
  puts "#{family_name} #{first_name}"
end

どっちも文字を入れますがあべこべに入れても動いちゃいます。引数2つくらいならまあ間違えないですけども、これが3つ4つと増えてくると混乱してきます。こういうときにキーワード引数使うとわかりやすく、間違えにくいと感じました。

他のプログラミング言語ではあまり見かけない?Rubyの特徴的な書き方やルール

今回は、Rubyでプログラムを書いていて、他の言語だとあんまり見かけない特徴的な書き方だなあと思っているところをご紹介します。

定数に代入できる

他のプログラミング言語では、「定数とは一度値を入れたら変えられないもの」として動作するのですが、Rubyの場合は代入することができます。実行するときに警告表示は出るのですが、代入自体は成功します。

# 定数を作る
NAME = 'とっしーぱんち'

# 代入できる
NAME = 'とっしー'


puts NAME
# =>とっしー

# 実行するとこんなwarningが出ます。
# =>warning: already initialized constant NAME
# =>warning: previous definition of NAME was here

if文が式になってる

Rubyの場合if文が式になっていて、たとえばこんなふうに書くことができます。

a = 1

# if文の条件式に当てはまる最後の結果がbに代入されます。
b = if a == 1
  'とっしー'
else
  'ぱんち'
end

# a == 1なので、とっしーと表示されます。
puts b
# =>とっしー

ブロックの最後にreturnつけなくても値が返却される

先ほど紹介したif文が式になるのと近いのですが、メソッドの最後にreturnと書かなくても最後に書いた結果が自動で返却されます。こんな感じです。

def hello
  # 他の言語ではreturn 'とっしー'と書く場合が多いです。
  'とっしー'
end

puts hello
# =>とっしー

メソッドを呼び出すときに()を省略できる。

さきほど、しれっと書いてしまいましたが、メソッドは()をつけなくても呼び出すことができます。

# 引数がない場合は()をつけなくてもよい
def hello
  # 他の言語ではreturn 'とっしー'と書く場合が多いです。
  'とっしー'
end

# hello()と書いても良いし、helloのままでも問題ないです。
puts hello
# =>とっしー

たびたび登場しているputsというのも実はメソッドで()を省略しているだけっぽいです。なので、puts(hello)と書いても同じ意味になります。

【ビアドキュメント】改行付きで見たままの文字列を変数に入れたりする

文字列を扱うとき、改行付きで書いたそのままを変数に入れたり、出力したい場合が稀によくあります。

そんなときは、ヒアドキュメントという機能が使えます。こんな感じです。

ヒアドキュメント

改行用の\nという文字を入れることで改行することもできますが、文字数の調整とか行頭の位置とかはこのように直接入力した方がわかりやすく感じます。


ヒアドキュメントという用語はRubyだけの言葉ではなくて、他のプログラミング言語でも出てくる用語なので、もし他の言語でも試してみたいとかあれば、「ヒアドキュメント Python」とか検索してみると、やりかたが見つかるかもです。ヒアドキュメントという言葉自体を覚えておくと応用が効くのでこの記事をきっかけに頭の片隅に記憶して貰えばと思います。

文字列を改行やカンマで区切るなどする【ちょこっとRuby】

Rubyはテキスト処理が簡単にできて便利だなあと感じます。

プログラムを書いていると、,(カンマ)で区切ったり改行で区切ったりすることに出くわすのですが、Rubyだとこんな感じで書けます。

Rubyで文字列の連結をする。

個人的おすすめは、一番下の配列を用意してからjoinメソッドでくっつけるというやり方です。このやり方のメリットとしては

  • 途中で文字を入れ忘れたりするミスが少ない
  • たくさん連結する対象がある場合でもコードがすっきりする。
  • メソッド呼び出しを使うことでここで連結ということが明示されているのでわかりやすい(気がする)

といったところでしょうか。特に3番目がお気に入りなんですが、コードが自分で喋ってるみたいに書いてあるので、余計な説明しなくても伝わる感じがします。だからといって他のやり方が間違っているとかでもないのですし、どのやり方も同じ結果になるので使い方は人それぞれでよいです。まずは楽しく作れればそれが一番ですからね。

プログラミングのモチベーションを維持する方法

仕事と違って誰かに頼まれて作業するわけでもないですし、具体的に作りたいものがあるわけでもない。

プライベートの時間を使ってプログラムを書く場合には、モチベーションを維持するのが難しい部分もあるかと思いますが、どうやったら長続きしそうか?秘訣というほどではないですが、実際にやってみて効果が感じられた手法をご紹介します。

GitHubに、登録する

なにはともあれGitHubにソースコードを登録するところから始めるのはおすすめです。どんな小さなプログラムでも構わないのでひとまず登録してみましょう。そうすると次のような副作用が得られました。

変更量は少なくても、細かくコミットすることで、自分の作業が可視化される。

GitHubにコミットしていくことで、自分が書いたソースコードの変更点、追加点を履歴として残すことができます。なので、コミットするときのメッセージは具体的に書いておくとあとで振り返りやすいです。さらにPushしておけば、GitHub上にその履歴が可視化されます。こんな感じです。

コミットした日が緑色になっていきます。不思議なものでこれをみていると、緑に埋めていきたい欲が高まってきます。なので少ない変更量でもこまめにコミットするということ自体がひとつの楽しみに変わっていきます。なんならプログラムの修正ではなくてもよくてソースコードにコメントを追加したり、ドキュメントに追記したりでもよいと思います。

完成させない。だけど、完了させる。

GitHubに共通する点もすこしあるのですが、プログラミングを続けていくとあれもやりたい、これもやってみたい、と色々とやりたいことが溜まっていきます。と同時に色々作りたくていつもよりも多くの作業時間を割いてしまうことがあります。


人それぞれ時間配分があるので、没頭して作業するというのも楽しいところではあるのですが、他の趣味も満遍なく楽しみたいという欲が強いため、やりたいことを残しつつも、今日はここまで!という風な区切りをつけることが多いです。そのきっかけとなるのがGitHubへのコミットです。


完成系はおぼろげながらイメージしつつも、今日はここで完了させる。ということを意識していくと気持ちもリラックスしながら、楽しく続けていけているように思います。

ひとつ注意点としてあるのは、コミットする場合は、必ず動作する状態でコミットすることにしています。例外として動作結果としてのエラーが出る場合がありますが、解消が難しい場合などは一旦コミットするのもありかもしれません。ただ変数名が違っているから先に進まないとかそういうエラーは取り除いておいてコミットしておくのがここでいう完了の定義としています。

ブログに書く。

ブログに残しておくのも効果高いです。これをやった次はこれやりたい。みたいなものでもいいし、自分の書いたコードを振り返ってみるのでもよいです。

ブログに書いていく効能として、書きながら自分の理解が足りてないところや、新しいアイデアが出てきたりするところです。

書き方のコツとしては以下のようなポイントを踏まえて書くようにしています。

たくさん書きすぎない。細かく説明し過ぎない。

プログラムの解説って意外に時間がかかります。細かく追っていくとキリがなくなって文章書くのも疲れてしまうので、適度に要点だけ踏まえて書くようにしています。

無理して書こうとしない。

ブログに書くことを意識しすぎると、疲れてストレスが溜まってしまいます。GitHubにも登録されているので記録としては残りますから、いまいち気分が乗らない時は書かない時は割り切って書かないとか、内容を簡潔にするとか、できる範囲でやっていくのがなにより大事に思います。


総じて大きく進めるよりも、とにかく小さく、小さく進めていくようなイメージでやっていくと、あまり疲れを感じずに楽しく続けていけています。


本質的には、長い時間、膨大な学習量のなか、自分が作りたい意欲、を小さく分割する。その分割した単位を完了させていく。というところでしょうか。

Ruby入門用プログラミング教材、2つ紹介します。

プログラミングのとっかかりとしては、教材を参考に真似しながら理解していくというのが手っ取り早いです。正解が書いてあるので答え合わせしやすいですし。かといって教材を選んだりする時間、購入費用がかかるものなどは、最初のとっかかりとして抵抗あるので、無料で安心感がある教材を2つ紹介します。

TryRuby

try.ruby-lang.org

ブラウザ上でRubyのコードを書いて実行することができるWebサイトです。お題が出てくるのでそれを解きながら進めていくだけでRubyの文法を学ぶことができます。ブラウザで動くので、スマホやタブレットなど、Rubyをインストールしなくても試してみることができます。内容もすごくシンプルな例からはじまっていくのでとっつきやすいです。

20分ではじめるRuby

www.ruby-lang.org

少しプログラミングに慣れてきたら、20分ではじめるRubyという教材が用意されています。読み進めながら教材に書いてあるコードを写経していくだけでもRubyの世界に触れることができます。Rubyのインストール方法も書いてありますが、Macのセットアップ方法について本ブログでもメモ書きとして残しているので参考にしてみてください。

osio-tosimasa.com

懸念として、途中からプログラムをファイルに書いて保存しながら進めていく箇所があるのですが、いきなり?になる可能性もなきにしもあらず。プログラムを書く際にはエディタという、文字入力とプログラミング向けのアプリケーションを使うことが多いので、これを機にエディタデビューしてみるのがおすすめです。

余談ですが、エディタとしてはMicrosoftさんが提供する無料のエディタ「Visual Studio Code」がおすすめです。Ruby以外にもHTML,CSS,JavaScript,Pythonなど、たくさんの言語に対応しているので、使い方を覚えておくと応用も効きやすいです。

”VisualStudioCode Ruby”でググったりすると情報がたくさん出てくるので、入門編としても最適に思います。

灯台もと暗し的に公式サイトを探索してみよう。

そもそもなんで安心感あるの?って話なんですが、どちらもRuby公式サイトに紹介されているからというオチなのでした。


いまやプログラミング教材は書籍や動画サイトなど、素晴らしいものがたくさん公開されているのでそちらに目を奪われがちなのですが、基本に立ち戻って公式サイトを覗いてみると見落としていた情報が見つかったりします。なにより公式サイトなので、そうそう間違ったことは書いていないという安心感もあります。


このブログもそうですが、2次情報を扱う記事も参考にはしつつ、まずは公式サイトを1次情報源として見ておくことは、他のプログラミング言語なんかでも重要だったりするノウハウだと思います。Ruby公式サイトには、今回紹介した教材の他にも、様々な情報が載っているので、教材の学習と並行していろいろと探索してみると面白いかもですね。