とりあえず超簡単なアプリを作ってみる【Ruby on Rails】


はじめに

今回はRuby on Railsでscaffoldコマンドを利用してめちゃくちゃシンプルなアプリを作成する方法を紹介します。

目標はまだRuby on Railsを使ってアプリを作ったことがない人が、とりあえずのものを作って動かしてみることができる、です。

環境

Windows Subsystem for Linux (Ubuntu 18.04)

必要知識・準備

  1. Linuxの超基本的なコマンド(cd, mkdirなど)を知っているもしくは調べて理解できること。
  2. rubyの導入が終わっていること。

アプリ作成の手順

STEP.1
プロジェクトディレクトリを作成し、移動
$ cd linux_home/project
$ mkdir sumple
$ cd sumple

渡しの場合とりあえずホームディレクトリに『linux_home』というディレクトリがあって、その下に『project』というディレクトリを作っています。

project ディレクトリに移動して、その下に『sumple』ディレクトリを作りました。これがアプリのルートディレクトリ、つまり置き場みたいなものになります。

作ったら sumple ディレクトリに移動しています。

STEP.2
”bundle init"してGemfileを生成する

bundlerを利用してgemを管理しますのでもしbundler自体をまだインストールしていないのなら

$ gem install bundle

でbundlerを準備します。

準備したら

$ bundle init

を実行することで“sumple”ディレクトリ内に”Gemfile.rb”というファイルが作られます。ここに必要なGemを記入することでgemを管理します。

STEP.3
Gemfileを編集する
source "https://rubygems.org"
gem "rails", "5.2"

生成されたGemfileにはすでになにか書いてあると思いますが、全部消して上の2行だけを貼り付け、上書き保存します。

STEP.4
railsをインストールする
$ bundle install --path=vendor/bundle

Gemfile編集後、bashで上のコマンドを入力、実行すると先ほどGemfileに入力したrailsがsumpleアプリにインストールされます。

以下のようなログが出力されると思います。Gemfileには”rails”しか入力していませんが、関連するgem群が一緒にインストールされるので、入力していないgemも勝手にインストールされます

Fetching rake 12.3.2
Installing rake 12.3.2
Fetching concurrent-ruby 1.1.4
Installing concurrent-ruby 1.1.4
Fetching i18n 1.2.0
Installing i18n 1.2.0
Fetching minitest 5.11.3
Installing minitest 5.11.3
~~
省略
~~
Fetching sprockets-rails 3.2.1
Installing sprockets-rails 3.2.1
Fetching rails 5.2.0
Installing rails 5.2.0
Bundle complete! 1 Gemfile dependency, 41 gems now installed.
Bundled gems are installed into `./vendor/bundle`
Post-install message from i18n:
STEP.5
アプリを生成する

それではとうとうアプリを生成します。

bundle exec rails new . --skip-bundle

途中で

Overwrite /vagrant/TestApp/Gemfile? (enter "h" for help) [Ynaqdh]

と聞かれるので『y』と入力して『Enter』を押しましょう。

. --skip-bundleとは?

簡単に解説しておくと、”rails new”のタイミングでいろんなgemがインストールされるのですが、gemは『(アプリのルートディレクトリ)/vendor/bundle』という場所にまとめてインストールしておきたいので、いったんgemのインストールはスキップさせています(”rails new”だけすると違う場所にgemがインストールされてしまう)。

STEP.6
基本gemをまとめてインストールする
bundle install

上のコマンドでGemfileに書かれた基本gemをすべてインストールします。

これはまぁまぁ時間かかると思います(数分~10分程度)。

Gemfileはいつ書き換えられた?

STEP.3でGemfileは2行だけに書き換えたはずですが今見ると何やらたくさん書いてあります。これはいつ書かれたのでしょう?実は先程のSTEP.5にて途中で聞かれた『Overwrite /vagrant/TestApp/Gemfile?』というのが『Gemfileがすでにあるけど、初期セットの内容に上書きしていい?』という問いかけで、『y』と答えたのが『yes』を表すので、このタイミングでgem初期セットの内容に書き換えられていたんですね。

本来であれば、ここで”bundle install”する前に必要なgemを追記したりしてから”bundle install”するといいです。今回は必要ありませんが。

STEP.7
アプリが動かせるか確認する

ここまでで一応アプリは生成できているのでチェックしてみましょう。

アプリの起動にはbashに次のコマンドを打ち込みます。

bundle exec rails s

エラーが無ければ次のような表示がされるはずです。

=> Booting Puma
=> Rails 5.2.0 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.0 (ruby 2.5.3-p105), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
Started GET "/" for 127.0.0.1 at 2018-12-16 18:18:30 +0900
Processing by Rails::WelcomeController#index as HTML
  Rendering vendor/bundle/ruby/2.5.0/gems/railties-5.2.0/lib/rails/templates/rails/welcome/index.html.erb
  Rendered vendor/bundle/ruby/2.5.0/gems/railties-5.2.0/lib/rails/templates/rails/welcome/index.html.erb (6.5ms)
Completed 200 OK in 32ms (Views: 24.9ms | ActiveRecord: 0.0ms)

これが表示されたら見に行ってみましょう。URLは『http://localhost:3000/』です。

上の画像が表示されていればバッチリです。これがデフォルトの画面になります。

あとはここにいろんなページや機能を追加していけば立派なアプリになります。

ちなみに、起動したままだとそのbash上ではコマンドが打ち込めないので、いったん『Ctrl + C』で終了しましょう。

“Ctrl + C” を入力すると以下のようなメッセージが出て再びコマンドが打ち込めるようになります。

^C- Gracefully stopping, waiting for requests to finish
=== puma shutdown: 2018-12-16 18:26:45 +0900 ===
- Goodbye!
Exiting

railsアプリケーションの終了は『Ctrl + C』を覚えておきましょう。

STEP.8
scaffoldで各種画面を生成する

ところでrailsには便利な機能がいろいろありますが、その中のひとつ『scaffold』というコマンドを紹介しましょう。

これはデータの作成、編集、削除などのページがたった2つのコマンドだけで生成できる魔法のようなコマンドです。

まぁ実践するのが一番早いのでやってみましょう。

bundle exec rails generate scaffold User name:string age:integer

上のコマンドを打ち込みます。とりあえずよくわからなくてもOKです。

実行すると以下のようなメッセージが返ってきます。create と書いてあるのでなにやらいろいろなものが作られたみたいですね。

      invoke  active_record
      create    db/migrate/20181216093229_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      invoke  resource_route
       route    resources :users
      invoke  scaffold_controller
      create    app/controllers/users_controller.rb
      invoke    erb
      create      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      invoke    test_unit
      create      test/controllers/users_controller_test.rb
      create      test/system/users_test.rb
      invoke    helper
      create      app/helpers/users_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/users/index.json.jbuilder
      create      app/views/users/show.json.jbuilder
      create      app/views/users/_user.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/users.coffee
      invoke    scss
      create      app/assets/stylesheets/users.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.scss

今度は次のコマンドを実行してください。

bundle exec rails db:migrate

以下のようなコメントが返ってくればOKです。

== 20181216093229 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0020s
== 20181216093229 CreateUsers: migrated (0.0023s) =============================

実はこれだけで先ほど言った『データの作成、編集、削除など』ができるページが作られているのです。

STEP.9
完成

できたアプリを触ってみましょう。

できたアプリを触ってみる

まずはアクセスしてみよう

それではアプリを起動してアクセスしてみましょう。

アプリの起動は先程やったとおり以下のコマンドです。覚えましょう。

bundle exec rails s

起動したら次は『http://localhost:3000/users』にアクセスしてみてください。

↑こんなページが表示されればOKです。

データを作成してみよう

“New User”をクリックしましょう。

Name(名前)とAge(年齢)を入れる場所が出てきました。適当に入力して、”Create User”ボタンを押してみましょう。

“User was successfully created.”(ユーザーを作成できました)と表示されると思います。”Back”を押して戻ってみると、

先ほどのページに今入力して作成した人物のデータが表示されるようになっています!

同様にどんどん作ってみると、表示される数は増えていきます。

また、”Edit”で編集することや、”Destroy”で削除することもできます。

ちょっとだけ解説

Scaffoldコマンドについて

bundle exec rails generate scaffold User name:string age:integer

先ほど魔法のコマンドといったscaffoldコマンドですが、解説を全くしていなかったので簡単に説明します。

“bundle exec rails generate scaffold”

ここまでは良いでしょう。こういう構文なのでこういうものと思うしかないですね。

“User”

ここでなんのModel(モデル)を作成するのかを指示しています。モデルについてよくわからない方は『なんのデータを扱うものか』と考えてもらえばいいと思います。今回は人物の名前と年齢を記録するアプリを作るために”User”という名前のモデルを作成しました。つまり別にここは”User”でなくても大丈夫なのです。

“name:string age:integer”

Userモデルになんの属性をもたせるか、というのを指示しています。

人物なので名前と年齢という属性をもたせています。”string”や”integer”はそれぞれ文字列と整数を表していて、各属性がどんな値を持つのかというのを支持しています。

db:migrate コマンドについて

bundle exec rails db:migrate

次に実行した↑のコマンドですが、これはmigrationファイルというDB(データベース)の設計図のようなものから、DBのテーブル(表)を作成するコマンドになります。設計図はいつできたのかというと↑のscaffoldコマンドで生成されています。設計図にはUserテーブルを作成し、name(文字列)とage(整数)をもたせる、という内容が書かれています。

おわりに

今回はscaffoldコマンドを利用したシンプルなアプリ制作を取り扱いました。

今回はscaffoldを使ってみるところに焦点を当てたために、ちょっと説明を省いている部分も多かったので、ほんとにイチからやれるような記事を準備してもいいかなとも思いましたので、また書いていきますね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください