こんにちは!はる@halushiroiです。
半年以上コツコツとプログラミングを続けてきて、すごく悩んでいることがあります。
「自分で1からそれなりのアプリを作れない」ということです。
初めはスクールに通って、次は動画教材をやって、本もいくつか買って…
と、Rubyについて学習を重ねてきました。
いざ「こんなアプリを作ろう!」と思っても、途中で何が必要か、どう組み立てたら良いか、ロジックの作り方が分からず、思い描いたものに全然届かないという状況になっています。
自分のできなさに悲観しましたが、だからこそ最初からもう一度やってみたら良いと思い、progateのRubyに着手することにしました。
結果として、曖昧だった部分がクリアになり、お題のアプリを少しカスタムして作り直すこともできたので、やって正解でした。
お題に必ず解説がついており、分かりやすい例えを使っているので、理解しやすいです。
もしまだ触れていない方がいましたら、挑戦して欲しいと思います。
Contents
progateのRubyはどこから始まる?
progateはPCとネット環境さえあれば、誰でもプログラミングができる優れものです。
progate側でブラウザ上に簡易ターミナルを用意しているので、ややこしい環境構築は不要です。
内容自体も「Hello World」という文字列を表示させるところから始まり、それもどうすればいいかの丁寧な解説付きとなっています。
さっとまとめると、progateのプログラミング講座は
・誰でもできるように、とても親切な作り方
・補足説明のスライドも用意されている
・必ずお題をクリアできる仕組み
このように、初めてプログラミングに挑戦する方でも全く問題は無いように作られています。
PCでインターネットをしたことがあるなら、なお良しです。
プログラミングに興味を持ったのならば、まずProgateで触れてみるのが良いですね。
足し算引き算をやってみよう、みたいに簡単なところから始まります。
※最初は無料ですが、少し難しくなるあたりから有料となります。ですが、980円とリーズナブルです。
今回の記事は有料部分で学んだことについてとなります。
本当に初めてやる場合にはどのようなことをするか?別の記事で紹介します。
今回Progateで作ってみたアプリ
ProgateのRubyは、全5章の単元で成り立っています。
第4章で本格的にRubyのアプリを作ることとなります。
内容は「メニューから食べ物か飲み物を選んで、何個でいくらになる」という注文アプリです。
そのアプリを作成、復習したあとに、使っている要素はほぼ同じで「旅立ちにポケモンとわざマシンをプレゼントしてもらえる」アプリを作ってみました。
アプリの完成形は?
まず、アプリの完成形でどのようなことができるか?を纏めます。
・4匹のポケモンから選択できる
・4匹のポケモンには名前、タイプ、初期技2個が表示される
・わざマシンはランダムで何かがプレゼントされる
・もらうポケモンは番号を入力して選択する
アニメのポケモンにならい、ピカチュウ、フシギダネ、ゼニガメ、ヒトカゲの4匹から選べるようにします。
また、それだけでは味気ないので、わざマシンもプレゼントしてもらえるようにしました。
言葉だけで言うとアッサリしてますが、色んな要素を使います。
では、この4行をクリアするために1個1個組み立てていきます。
ポケモンアプリの必要パーツ作り
クラス作成
まず、ポケモンの名前、タイプ、初期技がそれぞれ違うので、別々の物を引っ張ってこなければいけません。
そのためにインスタンス変数を設定する必要があるので、インスタンス変数が使えるようにクラスを作ってあげなくてはいけません。
クラスはメニュー表、インスタンスはメニュー表に載っている食べ物の名前や価格と言う情報、と考えると分かりやすいです。
class Pocket_monster
end
これで、ポケモンの情報を持たせる土壌が整いました。
ポケモンの情報を作る(インスタンス)
次に、ポケモンクラスにポケモンの情報(インスタンス)を作ります。
変数にポケモン情報の引数を添えて、クラス内で情報を共有できるようにします。
pokemon(name:, type:, skill1:, skill2)
def initialize
self.name = name
self.type = type
self.skill1 = skill1
self.skill2 = skill2
end
nameがポケモンの名前、typeがタイプ、skill1と2が初期技を表しています。
selfをつけることにより、クラス内でこの情報を引っ張れるようになります。
わざマシンをもらえるメソッドを作る
次に、複数のわざマシンから、どれか一つをランダムでもらえるメソッドを用意します。
def present
skill_machine = [“わざマシン00:メガトンパンチ”,
“わざマシン16:いやなおと”,
“わざマシン40:スピードスター”,
“わざマシン47:うそなき”]
skill_machine.sample
end
変数「skill_machine」にわざマシン配列を作り、.sampleでどれかがランダムに受け取れると言う仕組みです。
ポケモンの情報を作成する(initializeメソッド)
次に、クラス名.newを行ったときに、自動でポケモン情報を変数に保存してもらいます。
initializeメソッドはもう定義しているので、変数にどのような情報を入れてあげるのか?を決めてあげます。
pokemon1 = Pocket_monster.new(name:”ヒトカゲ”, type”ほのお”, skill1″ひっかく”, skill2″なきごえ”)
これをpokemon4まで同じように記述していきます。
ポケモンの情報を配列にしてひとまとめにする
pokemon1〜4のポケモン情報を作成したら、それらを配列にして纏めます。
pokemons = [pokemon1, pokemon2, pokemon3, pokemon4]
pokemonsと言う変数に全てのポケモン情報を入れることにより、情報を引っ張りやすくします。
ポケモンの情報を表示するメソッドを作る
ポケモンの情報ができたら、今度はそれを表示させるメソッドを作ります。
今のままではポケモンの情報を見せてあげるコードがどこにもありません。
def pokemon_info
puts “#{self.name}:#{self.type}”
puts”わざ:#{self.skill1}、#{self.skill2}”
end
ポケモンの情報を全部取得する
pokemon_infoメソッドを表示させるために、poklemon1~4の情報を全て取得します。
このときに1個1個の情報を繰り返し、最後まで取得するためにeach文を使います。
pokemons.each do |pokemon|
pokemon.pokemon_info
end
pokemonsには先ほど決めたポケモン情報の配列が代入されているので、ここで選択できるポケモン情報をいっぺんに取り出せます。
ポケモン情報にインデックス番号をつける
最初の仕様で「もらうポケモンは番号を入力して選択する」としたので、ここで番号をつけてあげます。
index = 0
pokemons.each do |pokemon|
index += 1
pokemon.pokemon_info
end
+= 1としているので、変数indexが最初は0から始まり、最後のポケモンになるときは3の番号が頭につくことになります。
文章の中でポケモンを選択してもらう
このままだと何の文章も表示されず、ポケモンをもらうにしては味気なさすぎるので、ポケモン博士の言葉と説明の文章を挿入し、気分を盛り上げつつも分かりやすくします。
#{selected_pokemon.name}で選んだポケモンの名前が表示されます。
select_number = gets.chomp.to_i
selected_pokemon = pokemons[select_number]
gets.chompで数字を打ってもらい、その数字を.to_iで文字列から数値に変換。
変換した数値を変数select_numberに代入。
pokemons[select_number]とすることでpokemons配列の番号を指定し、それがポケモン情報と紐づくことになります。
さらにそれを変数selected_pokemonに代入し、.nameや.typeをつけることにより、選んだポケモンのタイプや名前が表示されます。
代入に代入を重ねると、結果的に別の場所で元の情報が扱えるようになります。
わざマシンをプレゼントする
これで、もらえるポケモンを選択し、情報を見ることができるようになりました。
最後に、旅立ちの選別となるわざマシンをプレゼントしてもらえうようにコードを追記しましょう。
前に作ったpresentメソッドをここで展開します。
そうすることにより、設定したわざマシンの中からどれかをランダムでプレゼントしてもらえます。
終わりに
今回のポケモンアプリは、Progateのサンプルをほぼ流用し、プレゼントの箇所を自分なりに追加してみました。
大体はコピーをしつつ、少しでも自分で「こうしてみたらどうだろう」ができれば、アウトプットとして身につくのではないかと思い、作成しました。
ポケモンとしたのは、自分が好きな物をモデルにした方が想像力が働くかなと考えたからです。
実際に、どんな方向性にしようかな?と言うのはすぐに固まりました。
また自分なりにアプリを作り、記事として残していきたいと思います。
それではまた!