1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

文系卒だけどいきなりRuby on Railsの勉強をはじめてみた #1 ゼロからデプロイまで

Last updated at Posted at 2020-06-13

本記事の目的

この記事はプログラミング初心者である筆者のアウトプットが目的となっている。
RubyOnRailsの勉強をしていくなかで、わかったことや難しかったところをアウトプットしていく。
勉強にはRailsチュートリアルを用いている。

第1章 ゼロからデプロイまで

早速はじめの章から勉強を開始していく。
しかし、開始3秒でもう既にやるきの8割を持っていかれてしまった。

なぜか?

早速「デプロイ」という明らかに初心者にはすんなり理解できないであろう単語が章のタイトルに盛り込まれているからだ。

チュートリアルという言葉には「基礎から応用までを学べる教材」という意味が含まれているはずだが、このRailsチュートリアルは早速初心者を殺しにかかりに来ているようだ。

つべこべ言わずに「デプロイ」について調べた。

デプロイ(英: deploy)とは、「配置する」「配備する」「展開する」といった意味の英語の動詞です。 日本語の中では、ソフトウェア開発の工程のうち、開発した機能やサービスを利用できる状態にする作業を指す語として用いられています。

ということらしい。
つまりこのチュートリアルをやるとなにかのサービスをゼロから作成して利用できる状態で提供できるようになるのだろう。

このチュートリアルではどうやら3つのアプリケーションを作成するらしい。

  • hello
  • toy
  • sample

の3つだ。

Railsはどうやらめちゃくちゃ便利な言語で、有名企業もRailsを採用しているようだ。

  • Twitter
  • GitHub
  • Airbnb

あたりがそうらしい。

Railsが人気である理由はオープンソースで、制約の少ないMITライセンスで公開されているからだとのこと。なにをいっているかさっぱりわからないので、わからない単語を調べる。

オープンソースとは、ソフトウェアのソースコード(プログラミング言語で記述された文字列)を無償で公開し、誰でも自由に改良・再配布ができるようにしたソフトウェアのことです。 対して、一般的なソフトウェアは利用料が必要となります。 ソースコードを公開することはなく、その開発者でなければ修正などができません。

MITライセンス(エムアイティーライセンス)(MIT License)というのは、オープンソースソフトウェアのライセンスのひとつで、無料で自由につかうことができる(制限がほんのすこししかない)のが特徴です。

くわしいことはよくわからないが、色んな人が使えて無料なんだろう。

チュートリアルでは演習問題が課される。飛ばしても問題はないが、飛ばさないほうがいいぞとのこと。
早速演習。

Ruby on Railsで使うRuby gemはどのWebサイトにありますか?ヒント: 分からないときはとにかくググりましょう。

https://rubygems.org/

現時点でのRailsの最新バージョンはいくつですか?

6.0.3.1

Ruby on Railsはこれまでに何回ダウンロードされたでしょうか?調べてみてください。

228,312,165

早速アプリケーションを作成していく。
rails newというコマンドを打てば、railsアプリケーションのスケルトンが作成できるようだ。

スケルトンとは、骨格、骸骨、骨組、粗筋、骨子、枠組、残骸、などの意味を持つ英単語。

早速rails _5.1.6_ new hello_appというコマンドを叩くと、hello_appというフォルダが作成され、中にはいろいろなフォルダやファイルが入っている。これがスケルトンというやつか。

次はBundlerを実行して、アプリケーションに必要なgemをインストールします、とのこと。
なにを言っているのかわからないので、ぐぐる。

gemはRubyのパッケージ(ライブラリともいいます)です。
パッケージとは、プログラムの部品で便利な機能をひとまとめにしたものです。パッケージを使用することで、自分で1からコードを書くことなく機能を実装することができ、開発効率が大きく上がります。
Rubyのgemにも便利なものがたくさんあり、例えば、ユーザー登録機能や認証機能といった複雑な機能も、gemを使えば簡単に実装可能です。

bundlerとは
bundlerとはgemを管理するためのツールで、bundler自体もgemの一種です。bundlerを使うことで、複数のgemの依存関係を保ちながらgemの管理ができます。

とりあえずチュートリアルに従ってbundle installをするとエラーが出た。

You have requested:
  spring = 2.0.2

The bundle currently has spring locked at 2.1.0.
Try running `bundle update spring`

If you are updating multiple gems in your Gemfile at once,
try passing them all to `bundle update`

なにが起こったのかわからないが、Try running bundle update springと書いてあるので、実行してみる。
すると、次のエラーが。

Bundler could not find compatible versions for gem "activesupport":
  In snapshot (Gemfile.lock):
    activesupport (= 5.1.7)

  In Gemfile:
    rails (= 5.1.6) was resolved to 5.1.6, which depends on
      activesupport (= 5.1.6)

    coffee-rails (= 4.2.2) was resolved to 4.2.2, which depends on
      railties (>= 4.0.0) was resolved to 5.1.7, which depends on
        activesupport (= 5.1.7)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

なにが起こったのかはわからないが、Running bundle update will rebuild your snapshot from scratchと書いてあるので、実行してみる。その後、bundle installするといけた。
どんな問題があってなにが原因だったのかはわからないが、ぐぐったとおりにやったらいけた。

さて、演習。

デフォルトのRailsページに表示されているものと比べて、今の自分のコンピュータにあるRubyのバージョンはいくつになっていますか? コマンドラインでruby -vを実行することで簡単に確認できます。

ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]

同様にして、Railsのバージョンも調べてみましょう。調べたバージョンはリスト 1.1でインストールしたバージョンと一致しているでしょうか?

Rails 5.1.6
一致している。

次にMVCフレームワークというものについて学ぶらしい。
コントローラーの中にアクションを定義する。
そして、ルーターというものがデフォルトで先述のアクションを実行するように指示するらしい。

プログラミングではおきまりの「Hello, world」を表示させることに成功した。

リスト 1.7のhelloアクションを書き換え、「hello, world!」の代わりに「hola, mundo!」と表示されるようにしてみましょう。

application_controller.rb内のhello, world!をhola, mundo!に変えるだけでOK

Railsでは「非ASCII文字」もサポートされています。「¡Hola, mundo!」にはスペイン語特有の逆さ感嘆符「¡」が含まれています (図 1.16)18 。「¡」文字をMacで表示するには、Optionキーを押しながら1キーを押します。この文字をコピーして自分のエディタに貼り付ける方が早いかもしれません。

無事に表示される。

リスト 1.7のhelloアクションを参考にして、2つ目のアクションgoodbyeを追加しましょう。このアクションは、「goodbye, world!」というテキストを表示します。リスト 1.9のルーティングを編集して、ルートルーティングの割り当て先をhelloアクションからgoodbyeアクションに変更します (図 1.17)。

defを使ってアクションを定義。その後、route.rbでgoodbyeアクションを指定するといけた。

次はGitでバージョン管理。
バージョン管理をするメリットは、

  • 過去のある時点のバージョンに復元できる
  • プログラムの変遷を辿れるようになる

などがあるっぽい。

1.3.4.1と同じ変更を行い、本番アプリでも「hola, mundo!」を表示できるようにしてください。

コントローラー内のアクションと、routes.rbを書き換える。その後にgit add . git commit -a -m "hoge" git push git push heroku masterでいけた。

1.3.4.1と同様、ルートへのルーティングを変更してgoodbyeアクションの結果が表示されるようにしてください。またデプロイ時には、Git pushのmasterをあえて省略し、git push herokuでデプロイできることを確認してみてください。

コントローラー内のアクションと、routes.rbを書き換える。その後にgit add . git commit -a -m "hoge" git push git push heroku masterでいけた。

第2章 Toyアプリケーション

この章ではscaffoldジェネレータというスクリプトを使うとのこと。
要は、これを使うと大量の機能を自動的に生成できるっぽい。

早速bundle installをしていく。エラーが出るがもう怖くない。
一回対処しているからね。

次にgitコマンドを打っていく。gitがなかなかに難しい。

とりあえず、
git initはリポジトリにつき1回実行すればOK
git add -Aは指定ディレクトリの中のものをすべてgitにぶちこむ準備をする
git commit -mはメッセージつきでgitへの出荷準備をする
くらいの理解でいる。

リポジトリはとりあえずデータを格納できる場所、位の認識。

次にscaffoldを使うことでモデルを実装できるっぽい。
データベースをマイグレーションしましょうと言われたが、なんのことかもなんのためにやるのかもわからない。

マイグレーション機能をひと言で説明すると、「SQLを書くことなくRubyでデータベース内にテーブルを作成することができる機能」です。

とのことらしい。なんかやらないとだめっぽい。

進めていくと、また演習に。

CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?

残念だが、CSSを知らないので、なにをいっているのか理解できない。一旦飛ばそう。

emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?
「@example.com」のような間違ったメールアドレスを入力して更新しようとした場合、どうなるでしょうか?

どんな形式のemailを入力しようが、しまいが、ユーザーを作成できる。

上記の演習で作成したユーザーを削除してみてください。ユーザーを削除したとき、Railsはどんなメッセージを表示するでしょうか?

User was successfully destroyed.

MVCについての現段階の理解は、Modelはデータベースみたいなもので、Viewは実際の画面のことという認識。Controllerがよくわからない。ModelとViewの架け橋みたいなものだろうか。

ぐぐってみると、次のような解説があった。あながち間違っていなかったのかも。

・モデル(Model):表示や入力に関連しない処理を担当
・ビュー(View):表示や入力に関する処理を担当
・コントローラ(Controller):ビューとモデルの橋渡し役を担当

そして、users_controller.rbの中身をみていくとなにやらいろんなアクションがある。editやdestroyなどだ。これはURLに表示されていたものと同一なので、ユーザーの編集や削除はこのコントローラーが関わっていたのだろう。

ちなみに、RESTはREpresentational State Transferの略ということはわかったもののそれがなんなのかはさっぱりわからなかった。
見なかったことにして次に進む。

すると、演習に。

図 2.11を参考にしながら、/users/1/edit というURLにアクセスしたときの振る舞いについて図を書いてみてください。

editアクションを呼び出すんだろうというところまではわかる。
これは答えをぐぐろう…。

図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。

route resources :usersか…?(まったく外しており、本当は@user = User.find(params[:id])らしい。)

ユーザーの情報を編集するページのファイル名は何でしょうか?

edit.html.erbか…?

次はマイクロポストリソースを作成するみたいだ。rails generate scaffold Micropost content:text user_id:integerでつくれるっぽい。よくわからんけど、便利だなあ。

で、また、rails db:migrateをする。
よくわからんけどやらないといけないやつ。

CSSを知っている読者へ: 新しいマイクロポストを作成し、ブラウザのHTMLインスペクター機能を使って「Micropost was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?

CSSわからんのでパス。

マイクロポストの作成画面で、ContentもUserも空にして作成しようとするどうなるでしょうか?

作成できる。

141文字以上の文字列をContentに入力した状態で、マイクロポストを作成しようとするとどうなるでしょうか? (ヒント: WikipediaのRubyの記事にある1段落目がちょうど150文字程度ですが、どうなりますか?)

作成できる。

上記の演習で作成したマイクロポストを削除してみましょう。

削除できる。

次に140文字制限をかけてみた。

先ほど2.3.1.1の演習でやったように、もう一度Contentに141文字以上を入力してみましょう。どのように振る舞いが変わったでしょうか?

Content is too long (maximum is 140 characters)

CSSを知っている読者へ: ブラウザのHTMLインスペクター機能を使って、表示されたエラーメッセージを調べてみてください。

CSSわからんのでパス。

次の演習。

ユーザーのshowページを編集し、ユーザーの最初のマイクロポストを表示してみましょう。同ファイル内の他のコードから文法を推測してみてください (コラム 1.1で紹介した技術の出番です)。うまく表示できたかどうか、/users/1 にアクセスして確認してみましょう。

<p>
<strong>first_content:</strong>
<%= @user.microposts.first.content %>
</p>

リスト 2.16は、マイクロポストのContentが存在しているかどうかを検証するバリデーションです。マイクロポストが空でないことを検証できているかどうか、実際に試してみましょう (図 2.16のようになっていると成功です)。

Content can't be blank

リスト 2.17のFILL_INとなっている箇所を書き換えて、Userモデルのnameとemailが存在していることを検証してみてください (図 2.17)。

FILL_INを:name:emailにすればOK

次の演習。

Applicationコントローラのファイルを開き、ApplicationControllerがActionController::Baseを継承している部分のコードを探してみてください。

class ApplicationController < ActionController::Base

ApplicationRecordがActiveRecord::Baseを継承しているコードはどこにあるでしょうか? 先ほどの演習を参考に、探してみてください。ヒント: コントローラと本質的には同じ仕組みなので、app/modelsディレクトリ内にあるファイルを調べてみると...?)

ApplicationRecordって何のこと状態。よくわからないけど、app/models/application_record.rbの中にclass ApplicationRecord < ActiveRecord::Baseって書いてあるからこれだと思う。

第二章では、ユーザー(Users)や投稿(Microposts)を作成した。
その中で、必須入力項目を実装したり、文字制限を加えたりした。
MVCの理解も少し深まった。気がする。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?