Ruby on Railsが動作するようになったところで、アプリケーションの完成形をイメージしていきます。抽象的な事項(アプリケーションが提供する機能)は先に掲げたとおりですので、その機能を提供するための具体的な方法や手順について考えていきます。これにより、アプリケーションがどのようなウェブページを提供しなければならないのか、そして何を作らなければならないのか、明らかになっていきます。
Anacondaは、情報源を外部に頼ります。そのため、「どのような情報が存在するのか」をシステムに知らせてあげなければなりません。情報はIDによって識別するものとします。Evernoteは各ノートにGUIDを割り当てているので、このGUIDをIDとして使えばいいでしょう。Spiderで考えれば、ネットワークのGUIDと、情報オブジェクトの番号を組み合わせた文字列がIDになります。Anacondaは、まず最初に、このID収集を行う必要があります。IDを収集する際、同時に、どの情報源から取得したのかも記録しておく必要がありますね。
使用する情報のIDが集め終わったら、反復学習を始めることができます。以前にチェックした日時と、そのときのユーザー評価から、表示すべき状態にある情報を選び出し、表示します。そして、ユーザーは表示された情報についてチェックし、もう表示する必要はない、ある程度分かったので次のチェックは先でよい、分かっていなかったので次のチェックは近くに行う、などの評価を与えます。メモを残せるようにしてもよいですが、現時点では見送ることにしましょう。ある情報についてチェックが終わったら、次の情報を表示します。表示すべき状態にある情報が無ければ、その日の分は終了したということになります。
なかなか理解が進まない情報や、全体に対する進捗情報などを確認する、分析的な処理もあると便利ですね。しかし、これも現時点では見送ることにしましょう。いつか追加する予定がある、という程度に捉えておきます。
以上から、Anacondaが提供すべきウェブページは、次のようになります。
- ID収集・学習などの機能へ分岐するトップページ。
- ID収集のため、収集元を選択するページ。
- 表示すべき状態にある情報を表示し、それに対する評価を与えるためのページ。
とりあえずは、トップページから作っていくことにしましょう。
とは言ったものの、何を編集すればよいのか分かりません。Ruby on Railsのガイドを見ながら進めていくことにします。
まずはアプリケーションを作成します。
1 | $ rails new Anaconda |
詳しい仕組みはまだ分からないのですが、サイト上のルートディレクトリはプロジェクト上のpublic/
に相当し、ここにindex.html
というファイルが存在すれば、これを読み込むようです。静的なウェブページを使うことはないはずなので、削除してしまいます。すると、ルーティングに失敗するというエラーが出るようになります。ルートディレクトリについて表示すべきファイルがないため、エラーが出ているようです。そこで、表示すべきページを作成することにします。これは、Ruby on Railsが提供する機能を使って自動的に行うことができます。
1 | $ rails generate controller index home |
次に、ルーティングを行うファイルに、ルートディレクトリとして表示すべきものの位置を教えてあげる必要があります。config/routes.rb
を開き、次の行を書き加えます。
1 | root :to => "home#index" |
ルートとして、"home#index"
を指定するという意味です。これは、コントローラhome
のindex
メソッドを表しており、home
というページのindex
というラベルを表すものではありません。ここまで書き加えれば、サーバを起動して、http://localhost:3000
にアクセスすることで、home
コントローラのindex
メソッドが呼び出されていることを確認できます(表示されているのはビューhome
のindex.html.erb
)。
ところで、config/routes.rb
には、次の行も追加されています(railsコマンドで自動的に追加される)。
1 | get "home/index" |
これは、パスhome/index
に対するHTTPのGETリクエストを許可するという意味です。呼び出されるのは、home
コントローラのindex
メソッドになります。この行を取り除く前はhttp://localhost:3000/home/index
に対するアクセスが成功し、取り除いた後はhttp://localhost:3000/home/index
に対するアクセスがエラーを返すようになります。home/index
は使わないので、取り除いておきます。
サーバの起動は、次のようにして行います。
1 | $ rails server |
いきなり「コントローラ」や「ビュー」という言葉が出てきました。これは、MVCモデルのControllerとViewのことです。Ruby on RailsはMVCモデルを採用しています。これによって、論理のコードと表示のコードを分離することができ、開発を局所に集中して行うことができるようになります。なお、Rubyはとても緩い言語ですので、表示に関する処理のみをすべきであるビューに、データ操作に関する処理を入れてしまうことができます(たぶん)。これをやるとMVCモデルを採用している意味が完全に失われてしまうので、自分がいまどの部分について作業しているのか、しっかりと自覚しておく必要があります。まだModelが出てきていませんけれども、じきに登場します。