mainvisual

railsチュートリアルをやってみました。半年ぐらい前に2回ぐらいやったことはあったんですが、その後railsを触る機会ありませんでした。golangとかはめっちゃやってたんですがね…

というわけで、Railsに関してほぼほぼ初心者になってしまったんで、ここで復習がてからRailsチュートリアルをしてみたいと思います。

この記事はぶっちゃけ「メモ」です。私は忘れることが得意なので、それに抗うため自分が何をしたのかを残しておこうと思います。 何をしたか後で見返すことが出来なければ意味が無いので、できるだけわかりやすいように書くつもりです!

開発にミスはつきものです。失敗作業はちゃんとこのします。

2017/2/21追記: 次回はこちら

:x: ミス: railsチュートリアル開始!

公式サイト: https://railstutorial.jp/

それでは、はじめましょう。今回はMacを使い、開発環境を作ります。

railsのバージョンが5以上になっている事を確認して実行します。

$ mkdir rails_workspace && cd $_
$ rails -v
Rails 5.0.1
$ rails new .
       exist
      create  README.md
      create  Rakefile

. 
.
.

Bundle complete! 15 Gemfile dependencies, 62 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
         run  bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted

では、bundle exec spring binstub --allで起動してみます。

$ bundle exec spring binstub --all
* bin/rake: spring already present
* bin/rails: spring already present

ここで、bundleでパスの設定をしていなかったことに気がつく…

:o: 成功: railsチュートリアル開始!

$ mkdir rails_workspace && cd $_
$ rails -v
Rails 5.0.1
$ rails new . --skip-bundle
       exist
      create  README.md
      create  Rakefile
. 
.
.

$ bundle install --path vendor/bundler
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform mingw, mswin, x64_mingw, jruby`.
Fetching gem metadata from https://rubygems.org/..........
.
.
.
Bundle complete! 15 Gemfile dependencies, 62 gems now installed.
Bundled gems are installed into ./vendor/bundler.

「The dependency tzinfo-data…」 の対処

警告の内容についてしらべると、どうやらこれは「エラーではない」ようです。

以下のリンク先によると、Windowsの場合においてタイムゾーンを適切に処理するためのデータベースで、UbuntuMacなどのUnix系OSではタイムゾーンデータがPC内に存在するためtzinfo-dataは不要とのことです。

このエラーは無視することも出来ますが、同士も気になる場合は次の方法を選択することが出来ます。

  1. Gemfileのgem 'tzinfo-data'からplatformsオプションを削除し、bundle updateを実行する
  2. Gemfileからgem 'tzinfo-data'の行を消去する(Windowsでは、アプリケーション実行時に例外TZInfo :: DataSourceNotFoundが発生します。)
  3. bundle lock --add-platform mingw, mswin, x64_mingw, jrubyを実行する

今回、Windowsで実行する予定はないので、行消去を行いました。

ディレクトリの説明

各ディレクトリの説明はこんな感じ!

ディレクトリ用途
app/モデル、ビュー、コントローラ、ヘルパーなどを含む主要なアプリケーションコード
app/assetsアプリケーションで使用するCSS (Cascading Style Sheet)、JavaScriptファイル、画像などのアセット
bin/バイナリ実行可能ファイル
config/アプリケーションの設定
db/データベース関連のファイル
doc/マニュアルなど、アプリケーションのドキュメント
lib/ライブラリモジュール
lib/assetsライブラリで使用するCSS (Cascading Style Sheet)、JavaScriptファイル、画像などのアセット
log/アプリケーションのログファイル
public/エラーページなど、一般(Webブラウザなど)に直接公開するデータ
bin/railsコード生成、コンソールの起動、ローカルのWebサーバの立ち上げなどに使用するRailsスクリプト
test/アプリケーションのテスト
tmp/一時ファイル
vendor/サードパーティのプラグインやgemなど
vendor/assetsサードパーティのプラグインやgemで使用するCSS (Cascading Style Sheet)、JavaScriptファイル、画像などのアセット
README.mdアプリケーションの簡単な説明 (訳注: 近年は .rdocよりも .md ファイルの方がよく使われているようです)
Rakefilerakeコマンドで使用可能なタスク
Gemfileこのアプリケーションに必要なGemの定義ファイル
Gemfile.lockアプリケーションのすべてのコピーが同じgemのバージョンを使用していることを確認するために使用されるgemのリスト
config.ruRackミドルウェア用の設定ファイル
.gitignoreGitに取り込みたくないファイルを指定するためのパターン

引用: デフォルトのRailsフォルダ構造まとめ - railstutorial

railsアプリケーション起動

$ bundle exec rails server

いい感じ!:thumbsup::thumbsup::thumbsup::thumbsup:

コントローラーを書く(Hello, world!)

ディレクトリを開いてわかった。進化してる…

まぁ、とりあえずApplicationControllerをいじりましょう。

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def hello
    render html: "hello, world!"
  end
end

protect_from_forgeryはCSFRというJavaScriptを用いた攻撃手法を対策するための処理です。攻撃者がユーザーに意図しない動作を行わせ、不正な処理を防ぐ事が出来ます。

CSFRが有効なのはブラウザを用いたときだけなので、APIとして利用する際にはprotect_from_forgery with: :null_sessionに変更します。この場合、CSFRでアクセスを行うことは可能になり、理解せずに安易に変更するのは「危険」ですのでよく考えて変更しましょう。

次に、config/routes.rbをいじりましょう

Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root 'application#hello'
end

http://0.0.0.0:3000/にアクセスしましょう。

コードの変更箇所はこうなりました。

最後に

最後に、コミットしてタグをつけましょう。

$ git add -A
$ git commit -m "railstutorial 1.3終了"
$ git tag turorial-chapter1

再現

この記事の状況を再現するには、

$ git clone https://github.com/k4zzk/railstutorial.git
$ cd railstutorial
$ git checkout a33050865419679640afbc51c7525610a533aac5
$ rails server

を実行して下さい。

comments powered by Disqus