[[Mastodonを読む]]
 
 #contents
 
 *はじめに [#ae0ea627]
 
 さて、確認環境ができたのでMastodon本体の読解に入ります。まずは、「http://mastodon.dev/」と「/」にアクセスしたときに何が行われるかについて見ていきましょう。
 
 *config/routes.rb [#a6f1eeeb]
 
 というわけで、routes.rbを見て「/」にアクセスされたときにどのコントローラのどのメソッドが呼び出されるのかを確認します。ついでにroutes.rbに定義されているそれ以外のルーティングについても見ていきます。
 
 **認証周り [#gcf2cdf0]
 
 まず目に入るのは以下の記述です。
 
 #code(Ruby){{
   devise_for :users, path: 'auth', controllers: {
     sessions:           'auth/sessions',
     registrations:      'auth/registrations',
     passwords:          'auth/passwords',
     confirmations:      'auth/confirmations',
   }
 }}
 
 認証処理には[[devise>https://github.com/plataformatec/devise]]を使っていることがわかります。今回は、登録、ログインはできているものとしてdeviseの中身には踏み込まないことにします。
 
 **ユーザ周り [#f65db7c3]
 
 次に目に入るのは以下の部分。
 
 #code(Ruby){{
   get '/users/:username', to: redirect('/@%{username}'), constraints: { format: :html }
 
   resources :accounts, path: 'users', only: [:show], param: :username do
     resources :stream_entries, path: 'updates', only: [:show] do
       member do
         get :embed
       end
     end
 
     get :remote_follow,  to: 'remote_follow#new'
     post :remote_follow, to: 'remote_follow#create'
 
     resources :followers, only: [:index], controller: :follower_accounts
     resources :following, only: [:index], controller: :following_accounts
     resource :follow, only: [:create], controller: :account_follow
     resource :unfollow, only: [:create], controller: :account_unfollow
   end
 
   get '/@:username', to: 'accounts#show', as: :short_account
   get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
 }}
 
 あるユーザについて、ユーザのホームを表示する、フォロワーを表示する、トゥートを表示するなどが定義されています。
 フォロー関係、onlyで1メソッドしか指定しないのなら一つのコントローラにまとめてしまっていいような気がするのですが、将来拡張を考えてのことでしょうか。
 
 って、確認のためにポチポチしてると画面全体再描画されてないのにURL切り替わりますね。そんなことできるんだっけ?turbolinksだとできたかな。
 
 **API周り [#o5c9c6d8]
 
 ユーザ設定、サイト設定などのルーティングが続きますが飛ばします。
 
 その後、APIと思われる記述があります。一部省略して載せると、
 
 #code(Ruby){{
   namespace :api do
     省略
 
     # JSON / REST API
     namespace :v1 do
       省略
 
       get '/timelines/home',     to: 'timelines#home', as: :home_timeline
       get '/timelines/public',   to: 'timelines#public', as: :public_timeline
       get '/timelines/tag/:id',  to: 'timelines#tag', as: :hashtag_timeline
 
       省略
     end
   end
 }}
 
 config.rb中でtimelineという単語が出ているのはここだけです。怪しい。
 
 **ルートとその他 [#tbed5ec8]
 
 残りのルーティングは以下になります。
 
 #code(Ruby){{
   get '/web/(*any)', to: 'home#index', as: :web
 
   get '/about',      to: 'about#show'
   get '/about/more', to: 'about#more'
   get '/terms',      to: 'about#terms'
 
   root 'home#index'
 }}
 
 というわけで、home_controllerのindexメソッドが呼ばれる、ということのようです。
 というわけで、HomeControllerのindexメソッドが呼ばれる、ということのようです。
 
 *おわりに [#d0aae6f5]
 
 「/」がアクセスされたときにどのコントローラが呼ばれるかということでroutes.rbを見てきました。「/」が指定されたとき以外にもAPIに書かれているtimelineの記述など気になるものがありました。これらは今後読んでいくと明らかになっていくでしょう。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS