Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. Mojolicious

Mojoliciousですべての処理の前に実行する処理をアンダーで記述する

たとえば認証などを行う場合は、すべての処理の直前で、ログインしているかどうかを確認したいと思います。このような場合はアンダーという機能を利用します。ルートからunder()でアンダーを作成して、実行したいコールバックを指定します。コールバックの戻り値が、真の場合は続きの処理を行い、偽の場合は続きの処理を行いません。

sub startup {
  my $self = shift;
  
  my $r = $self->routes;

  # 認証
  $r = $r->under(sub {
    my $self = shift;
    
    if ($self->session('login_name')) {
      return 1;
    }
    else {
      my $url = $self->req->url->to_string;
      if ($url =~ m#login$#) {
        return 1;
      }
      else {
        $self->render('denied');
        return;
      }
    }
  });

  $r->get('/')->name('index');
}

少し変な記述に見えますが、toメソッドがアンダー自体を返すので上記のような書き方が簡潔だと思います。すべてのルートでアンダーを共有するので、$r自体を上書きしてしまっています。セッションIDが発行されていない場合でログインを行うためのURL以外にアクセスした場合は、認証が拒否の知らせるテンプレートを描画するようにしています。

Mojolicious 6からの変更点

Mojolicious 6からは、ブリッジを作成するbridgeメソッドが、underメソッドに統合されています。機能は同じなので、underメソッドを使うようにしてください。

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。