そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

管理画面づくりとmojoな話

会社の管理画面を整備する機会があったので、試しにMojolicious使ってみたら結構良かったよー的なお話。



管理画面ってナメてると痛い目見るよね

ある程度規模のあるウェブサービスをやってる所は、製造を行うエンジニアと運営スタッフが分業されていることが多い。
そんなわけで、お客さんに見せる画面とは別に運営スタッフが使用する管理画面を用意する必要が出てくる。

例えば「〜な条件のユーザの抽出」とか「〜な設定の修正」とか、エンジニアであれば直接DBをいじったりスクリプトを書けば済むのだけれども、運営スタッフにそれを要求するわけにはいかない。
しかし毎回運営スタッフに依頼されて開発作業を中断するのは非効率なわけで、それ用に社内からアクセスできる管理画面を作成をするということが多々ある。

さて、そんな管理画面だがエンジニア的には「どうせ客に使わせるものではないし」と横着してしまいがちだが、ここで適当なものを作ってしまうと

  • 使い方がわかりずらいことによる学習コスト
  • 事故の発生とそのリカバリーをするためのコスト
  • 拡張性や可読性が考慮されないことによるメンテナンスコスト

が生じることになる。

組織やサービスの規模にもよるが、エンジニア・運営ともに多かれ少なかれ人の出入りがあるが常であり、このあたりのコストを軽視していると後になって痛い目をみることになる。


そんなわけで管理画面作るときには

  • 使用感に統一性をもたせる
  • 全体としての見通しを良くする

ことが重要だと思う。


フレームワーク使おうぜ

エンジニアが各々で好き勝手にページを作ってしまうと、当然使用感はバラバラだし、コードが行方不明になったり機能が重複してたりと、クソ面倒くさい状況に陥ったりする。

そんなわけで文明の利器フレームワークを使おうという話になってくるのだけれど、会社で使う場合

  1. 自分以外のエンジニアもメンテナンスができるような学習コストの低いこと
  2. 製品が動いているのと同サーバだったりするので環境依存性が低いこと

が望まれる。


Mojolicious良さげじゃん

かくいう僕の職場はPerlを使用している。
そんなわけで流行りどころのPerlフレームワークについて色々調べてみたところ、Mojoliciousが条件に合いそうなのでこれを使うことにした。

Mojoliciousの良いところとして

  • Cpanから導入すればそのまま使える手軽さと依存性の低さ
  • cgiが動く場所に放り込みさえすればそのまま使えるポータビリティの高さ

が挙げられる。

そして何より気に入ったのがMojolicious::Liteの存在。
なんと1ファイルでフレームワークを利用できるのだ。
もちろん必要に応じてテンプレートや機能で分割していくことができるので、とりあえず1ファイルでサクッと作成して機能を追加していくスタイルが可能だ。
Mojolicious::Lite · yuki-kimoto/mojolicious-guides-japanese Wiki · GitHub

  1 #!/usr/bin/env perl
  2 use Mojolicious::Lite;
  3 
  4 # Documentation browser under "/perldoc"
  5 plugin 'PODRenderer';
  6 
  7 get '/' => sub {
  8 my $self = shift;
  9 $self->render('index');
 10 };
 11 
 12 app->start;
 13 __DATA__
 14 
 15 @@ index.html.ep
 16 % layout 'default';
 17 % title 'Welcome';
 18 Welcome to the Mojolicious real-time web framework!
 19 
 20 @@ layouts/default.html.ep
 21 <!DOCTYPE html>
 22 <html>
 23 <head><title><%= title %></title></head>
 24 <body><%= content %></body>
 25 </html>

7行目から10行目までがリクエストされた際の挙動の定義で、9行目で指定されたテンプレートを読み込んで描画する。
テンプレートはデフォでは__DATA__以下に記述されているが、templatesディレクトリ以下に別ファイルとして置くこともできる。

普通にPerlが使えれば直ぐに使いこなせる簡単な構造なのが良い。


ただ1点だけ問題が。
僕の職場のPerlはバージョン9.8系なのだが、Mojoliciousはバージョン9.10.1以降からでしか動作しないのだ・・・(最初に気づけよ


Mojo-legacy様!

悲観にくれつつ検索していくと、そんな要望に対応したMojo-legacyなるものを発見!
perl-5.10のperl機能を排除し、Mojoliciousをperl-5.8.7で動くよう改造したmojo-legacyのv3.54 - エンジニアブログ - スカイアーク

そんなわけで導入作業。

git clone git://github.com/jamadam/mojo-legacy.git

とかでgitから自分のディレクトリにでも拾ってきて

perl Makefile.PL
make
sudo make install

とインストールしてやれば完了。

あとはcgiが動作するディレクトリにでも入り、

mojo generate lite_app アプリ名.cgi

とでも生成コマンドを叩けばOK。

ちなみにテンプレートファイルの分割は

perl アプリ名.cgi inflate

と叩けば自動でやってくれる。

もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)

もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)


Mojolicious

Mojolicious


今回触れてないけど、テンプレートの記法もあんまり癖が無いのが個人的には好感触。

あと、Mojolicious::Lite使うことによって「RubyRails勉強するよかSinatraでサクッと作ったら楽じゃね?」という気分になってきた。