【Rails入門】Cloud 9 で（ちょっと）Railsやってみよう！

どうも。高校生プログラマのdrumathです。この間Life is TechのWebプログラミングコースを体験してきました。そこでWebプログラミングって楽しいなぁって感じたので今回の記事を書かせていただきました。ちなみにLife is TechではSinatraというフレームワークを使いました。

# Cloud9でRails
まず[Cloud 9](https://c9.io/?redirect=0)　にアクセスしましょう。アカウントを持っていない方はまずそこから。
![image](https://qiita-image-store.s3.amazonaws.com/0/86191/4be73c0b-c484-1ef7-5fb3-4f1392cf1450.png)

で、新規作成(Create a new WorkSpace)を押して、適当な名前を付け、Railsマークのついた「Ruby」の項目にマーク。

![image](https://qiita-image-store.s3.amazonaws.com/0/86191/4062da37-c874-ed1e-97a9-3d571c5df994.png)

コンテナが出来たら、READMEが出ていますので、一回消して
下のbashコンソールを使ってRailsの環境を整えます。

## サーバを立てよう
Railsは標準でサーバーを用意してくれているので、まずサーバを立ち上げてみます。
Bashに

```
rails server -p $PORT -b $IP
```
と入力すると立ち上がります。するとCloud 9からメッセージが出てきますので、そこの黄色いURLをクリックするとこんな画面が出てきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/86191/6b88f412-16ec-dba8-4c2f-c945f25a1f82.png)
この画面が出れば、成功です。まずはRailsサーバ開通おめでとうございます。

## コントロールを作ろう
再びbashの方に移って、今度は

```
rails generate controller hello
```

と打ちましょう。すると
![image](https://qiita-image-store.s3.amazonaws.com/0/86191/d49f0cc3-035b-1a5c-0b25-d2d23efe94a0.png)
シェルではこんな出力が出て、右のツリーで「hello　」から始まるファイルが追加されているのがわかります。Rails開発ではappフォルダの中身をいじっていくことが多くなるので覚えておきましょう。開発において**MVCモデル**というのが重要になっていきます。わからない人は調べてみてください。簡単に言うと、**M**は**モデル**、**V**は**ビュー**、**C**は**コントローラ**の略で、それぞれ、データベースやHTML、CSSやスクリプトの役割を意味します。今回はコントローラ部分だけをいじっていこうと思います。

## Hello, World!
### hello_controller.rb
最初にappフォルダ内の```hello_controll.rb```にコードを記述していきます。
初期のファイルの中は

```rb
class HelloController < ApplicationController
end
```
ですが、クラスの中に

```rb
class HelloController < ApplicationController
    def index
        render text: "Hello, World!"
    end
end
```
と記述してください。```render text:'something'```で文字を出力するのは、一般的なやり方ではありません。さきほど述べた、ビューをここに埋め込んでHTML（正確にはERB）を操作する形になります。しかし、今回はHello,Worldだけなので、とりあえず。。。
### ルーティング
では次にルーティングの設定を行います。ルーティングとはブラウザにどのファイルを表示するか、みたいなものです。この設定は```config```フォルダ内の```routes.rb```に記述します。
初期の段階では

```rb
Rails.application.routes.draw do
  # The priority is based upon order of creation: first created -> highest priority.
  # See how all your routes lay out with "rake routes".

  # You can have the root of your site routed with "root"
  # root 'welcome#index'

  # Example of regular route:
  #   get 'products/:id' => 'catalog#view'

  # Example of named route that can be invoked with purchase_url(id: product.id)
  #   get 'products/:id/purchase' => 'catalog#purchase', as: :purchase

  # Example resource route (maps HTTP verbs to controller actions automatically):
  #   resources :products

  # Example resource route with options:
  #   resources :products do
  #     member do
  #       get 'short'
  #       post 'toggle'
  #     end
  #
  #     collection do
  #       get 'sold'
  #     end
  #   end

  # Example resource route with sub-resources:
  #   resources :products do
  #     resources :comments, :sales
  #     resource :seller
  #   end

  # Example resource route with more complex sub-resources:
  #   resources :products do
  #     resources :comments
  #     resources :sales do
  #       get 'recent', on: :collection
  #     end
  #   end

  # Example resource route with concerns:
  #   concern :toggleable do
  #     post 'toggle'
  #   end
  #   resources :posts, concerns: :toggleable
  #   resources :photos, concerns: :toggleable

  # Example resource route within a namespace:
  #   namespace :admin do
  #     # Directs /admin/products/* to Admin::ProductsController
  #     # (app/controllers/admin/products_controller.rb)
  #     resources :products
  #   end
end
```
こんな感じの長いコメントがありますが、気にしないでください。
この最後の```end```の前に一行足します。

```rb
Rails.application.routes.draw do
  #～中略～
  match ':controller(/:action(/:id))', via: [:get, :post, :patch]
end
```
これでルーティングの設定は終わりです。```:controller```はようするにhelloのことでさきほど```rails generate controller hello```をしましたよね。helloというルーティングに行ったときに```”Hello,World”```が表示されるという意味になります。かっこがついているのは省略可能という意味です。

## 実際に動かしてみる
ではまた```rails s -p $PORT -b $IP```でサーバを起動してみましょう。
その次にURLの後ろに```/hello/index```と打ちます。すると
![image](https://qiita-image-store.s3.amazonaws.com/0/86191/106d5311-6729-9e24-9df9-e89d14eb3b1d.png)
Hello,Worldと表示されました。

# 最後に
今回、Railsを使ってHello,Worldをやってみたわけですが、実際いじったのはコントローラ部分だけです。ここからHTMLを編集したり、データベースをいじったりすることで、Webプログラミングができます。