Mastodonを読む

はじめに

さて、確認環境ができたのでMastodon本体の読解に入ります。まずは、「http://mastodon.dev/」と「/」にアクセスしたときに何が行われるかについて見ていきましょう。

config/routes.rb

というわけで、routes.rbを見て「/」にアクセスされたときにどのコントローラのどのメソッドが呼び出されるのかを確認します。ついでにroutes.rbに定義されているそれ以外のルーティングについても見ていきます。

認証周り

まず目に入るのは以下の記述です。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
 
 
 
 
 
 
  devise_for :users, path: 'auth', controllers: {
    sessions:           'auth/sessions',
    registrations:      'auth/registrations',
    passwords:          'auth/passwords',
    confirmations:      'auth/confirmations',
  }

認証処理にはdeviseを使っていることがわかります。今回は、登録、ログインはできているものとしてdeviseの中身には踏み込まないことにします。

ユーザ周り

次に目に入るのは以下の部分。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 
-
-
-
|
!
!
|
|
|
|
|
|
|
|
!
 
 
 
  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周り

ユーザ設定、サイト設定などのルーティングが続きますが飛ばします。

その後、APIと思われる記述があります。一部省略して載せると、

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
-
|
|
-
-
|
|
|
|
|
|
|
!
!
  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という単語が出ているのはここだけです。怪しい。

ルートとその他

残りのルーティングは以下になります。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
 
 
 
 
 
 
 
  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メソッドが呼ばれる、ということのようです。

おわりに

「/」がアクセスされたときにどのコントローラが呼ばれるかということでroutes.rbを見てきました。「/」が指定されたとき以外にもAPIに書かれているtimelineの記述など気になるものがありました。これらは今後読んでいくと明らかになっていくでしょう。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS