Railsのコードを書き始める前に知っておくこと

はじめに

本記事は、Railsのコードを実際に書き始める前に、Railsとはどのようなことをするフレームワーク(大まかなことが決まっていて、それぞれの仕事内容に合わせて具体的な内容を書いていくもの)なのか解説する記事です。

 

基本的にプログラミングはぐだぐだ言ってないで早くコードを書き始めた方がいいという方が多いですし、私もそちらの立場ですが、Railsに関してはいきなりコードを書き始めるのは難しいと感じています。ファイルがとても多く全体像を理解するのが難しいためです。Rubyでプログラミングを楽しいと感じていたが、Railsを始められて心が折れたという方は少なくないでしょう。

 

 

 

プログラミングの大前提

 

ほとんどの場合、プログラミングは人間が手作業でできること以上のことはできません。

 

動画の再生も極端に言えばパラパラ漫画を手で動かせばいいですし、ウェブサーバも電話でリクエストを受け、ファックスで報告書を返送すればいいのです。

 

もちろんRailsも例外ではありません。そこで、Railsが行っていることを紙とペンを使ったゲームで理解していこうと思います。

 

Railsゲーム

準備

 

まず用意するのは紙とペン、それだけです。

 

そこに次のように書いてみましょう。

---

【人物データベース】

  • 加藤太郎 23歳 男性 159cm 60kg 
  • 山田一郎 60歳 男性 170cm 70kg
  • 清水花子 30歳 女性 162cm 50kg

---

これから私の指示に従って仕事をしてください。役所の仕事を想像するとわかりやすいです。

 

Railsゲーム仕事マニュアル

仕事を始める前にマニュアルを読んでおきましょう。

 

以下が仕事のマニュアル(手順)です

  1. さまざまな客から人物に関する問い合わせが来ます。ただし、人物以外の問合せに対しては「できません」と返信してください。
  2. 基本的に問合せは人物に関する一覧の開示や人物の登録・編集などです。対応するテンプレート報告書があるので、空欄に内容を記入して返信してください。(テンプレートは実際に用意する必要はありません。そういうものがあるんだなと思っておいてください。)
  3. テンプレートは専用の作業デスクに山積みにされています。作業するときは席を移動して、専用デスクで作業するようにしてください。
  4. 申請書(登録や更新に必要な書類。後述)には気を付けてください。たまに名前が空欄とかあるので、そういう時は赤ペンで「間違ってます」と書いて却下してください。

最初の仕事

客1「人物データを全て見せてください。」

 

仕事をしてみる

さて、最初の客がやってきました。

この仕事のなかで最も基本的で簡単な問合せです。さあやってみましょう。

 

まずは使う報告書のテンプレートを選びましょう。人物の一覧が書けるリストの様式が良いですね。報告書テンプレートは専用デスクに用意されているので席を移動しましょう。

 

席に着いたらまずはテンプレートを見てみましょう。人物データの全ての人物と全ての情報(名前や年齢など)が必要なようです。あと、作成日時も必要なようです。

 

手元の人物データを見ながらテンプレートに記入していきましょう。日時はデスクのカレンダーと腕時計をみて正確に記入しましょう。

 

テンプレートに記入したら報告書の完成です。あとは客1に返したら終わりです。

 

ちょっと難しい仕事

客1「先ほどデータを受け取ったのですが、山田一郎の年齢が間違っているようです。61歳に変更しておいてください。」

 

仕事開始

なるほど、情報の変更ですね。このような問合せに対しては、どのように変更するかをお客さんに申請書を書いてもらう必要があります。申請書が置いてあるデスクへ移動しましょう。

 

テンプレートには現在の情報を書く欄がありますね。そこに今手元の紙に書かれた山田さんの情報を全て書きましょう。

 

申請書ができました。まずはお客さんにこれを渡しましょう。

 

ちょっと難しい仕事2

客1「申請書が書けました、お願いします。」

 

仕事開始

申請書が届きました、情報の更新報告書を書くデスクへ移動しましょう。

 

移動したらまずは手元の人物データを申請書通り変更しておきましょう。忘れないうちに。

ちゃんと変更できたら、テンプレートを使って報告書を書くだけです。ちゃんと変更が指定された人物だけであることを示すために、また全ての人物データを書いていた方がいいようです。

せっかく更新のデスクへ移動したのですが、人物一覧報告書のデスクへ移動しろとデスクに書いてあります。

 

席を移動して、変更したメモを元に人物一覧テンプレートに情報を記入しましょう。

出来たら提出。

あ、ちょっと待って、これじゃ変更がうまくいったのか、お客さんに確かめてもらうという手間がかかってしまいますね。ちょっと親切に、報告書の一番上に赤字で「加藤さんのデータを変更しました」と書いておきましょうか。私たちを信頼しているお客さんならこれを書いておけば確認する手間が省けるはずです。

 

できた報告書を提出したらお終いです。

 

続々とくる客たち

その後も客はどんどんきました。新たな人物を登録したい客、人物データを削除した客、ただ情報を見たいだけの客、、、

何となく仕事のイメージは付きましたか。

 

なんだか同じような仕事で飽きてきましたね。しかも、明日からは1秒間に10人の客が来るようです。とても一人では対応しきれませんね。そこで、何とかプログラミングを駆使して作業を自動化してみましょう。

 

では、ここからは、これらの仕事がRailsとどのように結びつくのか見ていきましょう。

 

Railsとの対応

 Railsの中でもほとんど同じ手順で仕事は進められていきます。ルーティング、コントローラ、モデル、ビューの順番です。

ルーティング

ルーティングは客からの問い合わせを、どこのデスクですればいいかの地図です。

 

ただし、「人物データ全部くれ」「とにかく全部みせろ」と口語で言われるとプログラミングで処理するのは難しくなってしまいます。

 

そこで、問い合わせの様式を固定しましょう。人物データ全ての取得は「/users」に統一しました。これで、/usersが来たら、人物データ全件報告書のデスクへ移動するとすぐにわかります。

 

ルーティング、特にroutes.rbファイルには統一された問い合わせのパターン(/usersや/users/:idなど)とデスクの場所がペアで書かれています。

コントローラ

デスクです。

移動したデスクにはどのテンプレートを使って、どのようなデータが必要なのか、具体的な指示か書かれています。指示に従ってデータを見たり、編集したりします。

 

モデル

手元の紙データをパソコン、特にデータベースというソフトで管理したものです。濡れたり破れたりする心配はなくなりました。

ビュー

報告書テンプレートです。

 

<% %>が虫食い部分なので、用意したデータを使って報告書を完成させます。

 

最近は、お洒落な報告書が流行っているので、HTMLというテンプレートに情報を書きこむと、良い感じの報告書が出来上がります。お洒落にしてくれているのはCSSというやつらしいです。javascriptで動く報告書も作れるらしいです。

自動化すげえ

 

その他

情報の更新デスクには、人物データ全件デスクへと移動しろと書いてありました。これがリダイレクトです。(redirect_to)

 

報告書の一番上に赤字でメッセージを書くのはflashです。(flash[:notice] = message)

 

デスクによっては、他のデスクのテンプレートを使えと書いてある場合があります。

 これはレンダーです。(render "new")

 

最後に

一つのデータに対する、登録、参照、更新、削除はそれぞれの先頭を取ってCRUDと呼ばれます。CRUDRailsの中で最も基本的で重要な処理となっています。一方でこのイメージがうまくつかめず、なかなかRails基礎から抜け出せない。

 

本記事はCRUDに関するイメージを紙とペンを使った仕事でつかんでもらおうと書いたものです。ここでは書いていませんが、削除はどのような問合せか、新規登録はどのように処理するのか考えてみてください。

 

イメージをつかんだら実際にコードを書いてみましょう。

難しい場合は、まずはscaffoldを使い、自動生成されたコードをじっくり一行一行読んでみましょう。それらが紙とペンを使った仕事とどのように対応しているのか考えてもらえるとイメージしやすいと思います。