MORITOMOMENT

登山好きエンジニアのテックブログ

プログラミング・アウトドア関連を中心に発信

Railsチュートリアルのhello, world!で立ち止まった話: コントローラ名がなぜapplicationなのか調べてみた

最近作りたいWebアプリケーションを思いついたのでRailsの勉強をはじめました。 巷で流行っているRailsチュートリアルで勉強しています。 railstutorial.jp 勉強しはじめたものはいいものの、さっそく序盤で腑に落ちないことができちゃったのでブログに書き留めさせていただきました。

正直こういうものなのかなと、振り切って先に進めてもいいのですが、ちゃんと理解したいと思い記事にしました。 もしかしたら同じところで疑問に思ったRails入門の同志がどこかにいるかもしれないので!!

最初に僕の前提知識をまとめておきます。

わかるプログラミング言語

ただ大学の研究で使用している程度なので、実務経験知識が足りません。 特にWEB開発には疎く、フレームワークにも触れたことがありません。

かといって、大学は情報科学部だし、応用情報技術者の資格は持っているので基礎知識はあるかと思います。

なにがわからなかったのか

第1章にさっそくとりかかってみたもの順調に進んでいき、見事hello,world!を表示しました。

f:id:moritomo7315:20181210165916p:plain

hello, world !を表示するために以下のコードをチュートリアルで作成しました。

ここで本題、次のコード内のapplicationというコントローラ名をどこから参照しているのかが腑に落ちない

# app/controllers/application_controller.rb

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

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

# 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' # ←ここのapplicationってやつがコントローラ名
end

仕組みとしては以下の感じかなと理解しました。(Ruby on Railsはじめたばかりで浅い知識ですがお許しを。)

  • routes.rbに「root 'application#hello'」とあるので urlのルート'/'にアクセスするとapplicationという名のコントローラが持つhelloというアクションがおこなわれる。
  • helloというアクションは、application_controller.rbで定義されている。「render html: "hello, world!''」によってhello, world!とwebに表示される。

なぜapplicationというコントロール名が腑に落ちなかったか

pythonJavaC++のようにオブジェクト指向で記述できるプログラミング言語を触っていたので、どこからapplicationがでてきたの??って感じになりました。

application_controller.rbをオブジェクト指向で解釈すると 「ApplicationControllerっていうクラスがあり、そのメソッドとしてhelloがある」って感じになると思うのですが、

じゃあ「applicationってインスタンスはどこで作ったの??」って疑問に思ってしまいました。

もしかすると、これがオープンソースフレームワークブラックボックス的な怖さなのか、、、と感じてしまいました笑

調査開始

このことは「こういうもんだと思っておこう」ってことにして次に進んでもよかったんですが、なぜこうなるのかを追求しないことには思考停止かなと思ってしまったので調査。 ただ単に気になってしょうがないだけですが笑

とりあえずRailsチュートリアル1.3節をもう一度読み直してみました。すると1.3.4節にこんな文章が。

Railsのルーティングファイル (config/routes.rb) にはRailsガイドの「ルーティング」を参照するようコメントがあり、ルートルーティングの構成方法がリンク先に示されています 。

ということでRailsガイドの「ルーティング」に飛んでみました。

んーapplicationってキーワードはない。Railsチュートリアルを読み進めると、

上のコードの場合、コントローラ名はapplicationであり、アクション名は helloです。

というようにapplication_controller.rbを示して、当たり前かのようにコントローラ名はapplicationであると言っている、、、

ということで最終手段!Googleに聞こう!

Rails コントローラ名」で検索すると、

www.javadrive.jp

の記事が最初に出てきました。

もう一瞬で謎が解けてしまいました。

Railsではコントローラの命名規則があるんですね。

コントローラ名がapplicationの場合、クラス名はApplicationController、ファイル名はapplication_controller.rbとなるルールだそう。

しかも

rails generate controller コントローラ名

でコントローラが作成できると。 「コントローラ名Controller」というクラスが記述された「コントローラ名_controller.rb」が自動で作成されるようです。

まとめ

チュートリアル進めていったらこの腑に落ちないことものちに解決したのかなレベルのものでした笑

でも腑に落ちないことを調べることは大事だと思います。

それがフレームワークの理解に繋がると思うし、あらゆることの本質の理解するときに重要な姿勢なのではないでしょうか。

Rails便利そうなんだけど、やはりフレームワークブラックボックス的な感じに注意しないといけないんですね!!

これからも詰まることは、みんなも詰まるような気がするのでどんどん発信していきたいと思います。

最後に、参考させていただいた記事は株式会社バズワード様が運営するサイトでした。 非常にわかりやすかったです。本当に初心者でもわかりやすいプログラミングサイトでした。

www.javadrive.jp