その他
    ホーム 技術発信 DoRuby Scaffoldはどこからくるの? 前編

    Scaffoldはどこからくるの? 前編

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    こんにちは。
    KBMJのエンジニアの高瀬です。

    今回、ruby on railsに関する技術コラムを書くと言う事で、
    scaffoldでプログラムを作ってみて、またそのプログラムは

    どの様にして作られているか解説します。

    Scaffoldってそもそも何?
    最近のアプリケーション(特にWeb)は、アプリケーションのデータを

    DB上で管理する事が多くなっていますが、

    そういったDB上のテーブルを操作するプログラムを作りたい場合に、

    基本的なテンプレートを提供してくれるのがscaffoldです。

    scaffoldを使うと、簡単なアプリケーションがそれこそ10分で

    出来上がるので、かなり重宝します。

     実際にScaffoldで作ってみる。
    まず、Scaffoldを使ってアプリケーションを作ってみます。

    最初に、railsでscaffold_testプロジェクトを作ってみましょう。

    コマンドプロンプト上で、

    rails scaffold_test
    と入力してみてください。(>は入力しなくて良いです。)

    大量に[ create ~~]と出てきたと思います。

    今後は、このプロジェクト上で作業を行うので、

    cd scaffold_test


    で、カレントディレクトリを移動しておいてください。

     

    次に、scaffold_testプロジェクト内でscaffoldを作ってみます。

    扱うテーブルを決める必要がありますので、とりあえずメンバー管理として、

    Memberモデルをつくり、名前(name)と説明(discription)と誕生日(birthday)だけ管理しましょう。

     ruby script/generate scaffold Member name:string discription:text birthday:datetime

    これで、scaffoldの土台は出来ました。

    ですが、肝心のdbがないので、 DBを作成します。

    rails 2.0から、db:createが出来たので、そのコマンドを使います。rake db:create

    (ここでは、DBの作成方法のエラーが出た場合や、1.x系の話は割愛します)

    DBが出来たら、scaffoldで作成されたmigrationファイルからテーブルを作成します。

    rake db:migrate

    これでテーブルが出来たのでサーバーを立ち上げて、

    プログラムにアクセスしてみましょう。

    ruby script/server

    を実行し、 下記のURLにアクセスしてください。

    http://localhost:3000/members

    「Listing members」と表示されるページにアクセスできると思います。

    これで、New memberと表示されているリンクをクリックすると

    メンバーが登録できます。

    これだけで簡単なメンバー管理システムの出来上がりです。

    scaffoldのソースを見てみる。


    途中で実行した

    ruby script/generate scaffold Member name:string discription:text birthday:datetime

    で、管理する項目や、項目の属性を指定しているのですが、

    今のプロジェクトのソースを見てみましょう。

    scaffold_test フォルダの下にある、

    app/controllers/members_controller.rbを何かのテキストエディタで

    開いてみてください。

    自分が書いた覚えのないプログラムが存在していると思います。

    実は、ruby script/generateコマンドを実行した時、

          exists  app/models/
          exists  app/controllers/
          exists  app/helpers/
          create  app/views/members
          exists  app/views/layouts/
          exists  test/functional/
          exists  test/unit/
          create  app/views/members/index.html.erb
          create  app/views/members/show.html.erb
          create  app/views/members/new.html.erb
          create  app/views/members/edit.html.erb
          create  app/views/layouts/members.html.erb
          create  public/stylesheets/scaffold.css
      dependency  model
          exists    app/models/
          exists    test/unit/
          exists    test/fixtures/
          create    app/models/member.rb
          create    test/unit/member_test.rb
          create    test/fixtures/members.yml
          create    db/migrate
          create    db/migrate/001_create_members.rb
          create  app/controllers/members_controller.rb
          create  test/functional/members_controller_test.rb
          create  app/helpers/members_helper.rb
           route  map.resources :members
     と、大量にメッセージが出たと思いますが、ここで、createと出ている行は、railsが自動で

    ソースコードを作ってくれています。      create  app/views/members
          create  app/views/members/index.html.erb
          create  app/views/members/show.html.erb
          create  app/views/members/new.html.erb
          create  app/views/members/edit.html.erb
          create  app/views/layouts/members.html.erb
          create  public/stylesheets/scaffold.css
          create    app/models/member.rb
          create    test/unit/member_test.rb
          create    test/fixtures/members.yml
          create    db/migrate
          create    db/migrate/001_create_members.rb
          create  app/controllers/members_controller.rb
          create  test/functional/members_controller_test.rb
          create  app/helpers/members_helper.rb

     というわけで、次回はこのコードがどの様にして作られているか、解説して行きたいと思います。