Masteries

技術的なことや仕事に関することを書いていきます.

AWS::CLIWrapperにPull Requestを投げた

AWSの機能を任意の言語から利用するためのSDKですが, 悲しいことにPerl向けのものはありません. 従って, Perl Monger達はAWSのCLIであるawsコマンドをラップしてPerlから実行する, AWS::CLIWrapperというモジュールを駆使しています.

metacpan.org

さまざまな事情があって, AWSに最近追加された機能をPerlから使いたかったので, さっくりとPull Requestを投げました.

github.com

即座にマージ頂いて, 1.13としてリリースされました. 対応ありがとうございました!

おもしろポイント

AWS::CLIWrapper, たくさんあるAWSの機能に対してどのようにして対応しているのだろう...? と前々から思ったのですが, 今回Pull Requestを出すにあたって眺めてみたところ, aws helpコマンドを使ってAWSの各機能を利用するためのコードを, 自動的に生成していました: https://github.com/hirose31/AWS-CLIWrapper/blob/master/lib/AWS/CLIWrapper.pm#L259-L261

# aws help | col -b | perl -ne 'if (/^AVAILABLE/.../^[A-Z]/) {  s/^\s+o\s+// or next; chomp; next if $_ eq 'help'; my $sn = $_; $sn =~ s/-/_/g; printf "sub %-18s { shift->_execute('"'"'%s'"'"', \@_) }\n", $sn, $_ }'
# aws help | col -b | perl -ne 'if (/^AVAILABLE/.../^[A-Z]/) {  s/^\s+o\s+// or next; chomp; next if $_ eq 'help'; my $sn = $_; $sn =~ s/-/_/g; printf "=item B<%s>(\$operation:Str, \$param:HashRef, %%opt:Hash)\n\n", $sn}'
# =item B<s3>($operation:Str, $path:ArrayRef, $param:HashRef, %opt:Hash)

ドキュメント(ヘルプ)から自動生成すれば漏れがないので, 「なるほど賢い!」と思いました.