• このエントリーをはてなブックマークに追加


お仕事で関わっているサービスが稼働しているサーバを移行するらしく,その作業に巻き込まれるにあたり,perlbrew + cpanm な Perl ではあるもののグローバルレベルでモジュールを入れてしまっている現環境から,移行先では plenv + carton で管理できるように苦戦中な最近.

で,cpanfile を準備するにあたり,アプリケーション単位で使用モジュールを洗い出す必要がありますが,さてどうしましょ?と少々悩んだあげく,以前,そんなことをしてくれる CPAN モジュールの存在をタイムラインか何かで見た気がしたけれど検索のキーワードすら思い出せなかったので,ack をベースに即席でワンライナーをでっち上げてみた次第です:

ack --group 'use ' <target_list>  | grep --color=no 'use ' | perl -pe 's/^\d+:use ([^ ;]+).*$/$1/' | sort | uniq

Amon2-5.06amon2-setup.pl MyApp --flavor=Large した直後のアプリケーションだとこんな感じ:

% ack --group 'use ' lib script  | grep --color=no 'use ' | perl -pe 's/^\d+:use ([^ ;]+).*$/$1/' | sort | uniq
5.008001
5.010_001
Amon2::Web::Dispatcher::RouterBoom
Carp
DBI
File::Basename
File::ShareDir
File::Spec
Module::Find
Module::Functions
MyApp::Admin
MyApp::Admin::Dispatcher
MyApp::Admin::View
MyApp::Admin::ViewFunctions
MyApp::DB
MyApp::DB::Schema
MyApp::Web
MyApp::Web::Dispatcher
MyApp::Web::View
MyApp::Web::ViewFunctions
Plack::App::File
Plack::Builder
Plack::Session::Store::DBI
Teng::Schema::Declare
Text::Xslate
lib
parent
strict
utf8
warnings

あくまで即席なので抜けがあるかもしれませんが,これをベースに cpanfile を作っていけば,それなりにラクと思います.