cpmでinstallしたCPANモジュールの個人的パス通し法

cpmでinstallしたPerlモジュールを使おうという時の個人的な技です


追記

追記:cpmの作者のid:shoichikaji さんから 2か3がおすすめ との情報を頂きました。ありがとうございます。


1 carton exec

わかりやすく無難な方法だと思っています。

carton exec -- perl hoge.pl  的な感じでの実行です。

2 perl -I$PWD/local/lib/perl5

主にbin以下に落としたcuiアプリを起動する際に使っています。 例えばmorboを起動する時は

perl -I$PWD/local/lib/perl5/ local/bin/morbo みたいに実行します。

3 env PERL5LIB

環境変数PERL5LIB にパスを通すやり方です。 direnvを使う時に使っています。

4 FindBin+lib

スクリプトを書く時に使う事が多いです。

   use FindBin;
   use lib "$FindBin::Bin/local/lib/perl5";

これをvimスニペットに設定しているのでぱぱっとやってしまう事が多いです。

個人的な知見なので、何かいい方法などあれば教えていただければ嬉しいです。

--

WebService::YDMMリリースした

どうもこんにちは。id:anatofuzです。

anatofuz.hatenablog.com

このエントリから数ヶ月…ついに本日リリースしました!!

metacpan.org github.com

作成にあたっては id:papixさんに助言を頂いたりなど、皆さんに助けられてようやく…!という形です。 Acmeモジュール以外のCPANモジュールを初めて作成しました。

今回はなんとなく p-rで機能を追加していったのですが道中幾つかの処理が内部で共通化出来るなと気づき、リファクタリングのp-rを出す事ができました。

Modified floor method by AnaTofuZ · Pull Request #6 · AnaTofuZ/p5-webservice-YDMM · GitHub

個人的には

sub actress {
    my($self,$query_param) = @_;
    return $self->_send_get_request("ActressSearch", +{ %$query_param })->{result};
}

sub genre {
    my $self  = shift;
    my $query_param = _suggestion_floor_param(@_);
    return $self->_send_get_request("GenreSearch", +{ %$query_param })->{result};
}

と理路整然(?)と処理を3行くらいにまとめられたのは達成感を感じました。(自己満足ですが…)

最近ちょっと落ち込んでいましたが、やはり形になるものを公開できると嬉しいというか達成感があるので、続けていきたいですね。

今回のモジュール作成では Test2::V0 を主に使い、初めてモックテストをしっかり組むなどの行為も出来たので、今後テストの知見も溜めていきたいと考えています。頑張っていこうな

もう1つのDMMクライアントWebService::YDMMについて(予告)

これはPerl Advent Calendar 2017 15日目のエントリです。


広告

YAPC::Okinawaは現在カンファレンス参加チケット・トークプロポーザルを絶賛募集中です!!!是非ご応募ください!!!

yapcjapan.org


さて今回のエントリですが,実際にAPIクライアントが完成…とまでは時間の都合上行かなかったので,大まかな実装の内容と機能についてのご紹介となります。また実装についてアドバイスなどがあれば感激です!!!(むしろそこが目的)

CPAN名前空間にはWebService::* というものがあり,こちらには主にAPIクライアントのCPANモジュールが登録されています。

この名前空間についてはpapixさんの資料が詳しいのでそちらをお読みください。

今回は練習も兼ねてタイトルにある通りDMM.comAPIクライアントの作成を行っています。

DMM APIクライアントについて

さてDMMAPIクライアントの前にDMMのAPIについて解説していきます。 DMMは公式にAPIアフィリエイトサービスの活性化の為に公開しており,誰でもアフィリエイトユーザー登録を行えば使用することが可能です。

affiliate.dmm.com

主にDMMの花形である動画サービスに関するAPIで構成されています。 例えばそういったビデオの作者,シリーズ,ジャンル検索や 女優に関してはスリーサイズをクエリパラメータとして設定可能という点で異彩を放っています。

DMM APIは2017/12/15現在でversion3.0となっており,ここ1年ほど目立った更新がない為,安定したAPIと言ってもいいでしょう。

以前はレスポンスがXMLのみでしたが,version3.0よりJSON形式が標準のレスポンスとなった為,FurlJSON系のモジュールさえあれば簡単にPerl経由でAPIを叩くことが可能です。

DMM公式(DMM.com Labo)は現在SDKを公開しています。

現在公式が対応しているSDKですが

この3言語が対応・公開されています。

またRubyの場合gemにruby-dmmとしてmeganemuraさんが公開されています。


広告

YAPC::Okinawa運営ブログも更新中です!!!

皆さん是非トーク応募しましょう!!!

docs.google.com


PerlにおけるDMM APIの対応状況

Perlでは現在CPANを見るとsyohexさんが作成されたWebService::DMMAPIクライアント実装となっています。

ですがこちらはversion2.0までのAPI実装によって作成されているので現在は使用する事が不可能となっています。

そこで現在考案しているのが新たなDMMのAPIクライアントであるWebService::YDMMです。

実装予定案

ここからは実装予定となっています。 現在作業しているリポジトリこちらとなっております

利用予定モジュール

こちらですがFurlの利用も考えていましたが,基本コアモジュールによせて書いていきたいという方針でHTTP::Tinyでの実装で進めています。

またXML形式でなく,JSONを選択しているのは個人的に(JSONの方が)使い慣れているという点です。

予定上のサンプルコード

予定上のサンプルコードです。。基本はPHP,javascript実装によせて作ることを計画しています。

use strict;
use warnings;
use utf8;


use WebService::YDMM;

my $dmm =  WebService::DMM->new(+{
                         affiliate_id => $ENV{affiliate_id}, 
                          api_id       =>  $ENV{api_id},
                      });

まずこの用にしてAPIクライアントのインスタンスである $dmm を作成します。今回はnewで呼び出し時に明示的にアフィリエイトIDをAPI IDを指定する方式にしています。

$keyword = 'ナース';
$responses = $dmm->product->("DMM.co.jp", +{
  'keyword' => $keyword
  });

map { "print $_->{title}\n" } @$responses;
# ナースなんとか…etc.

公式PHPSDKに寄せててこのように検索対象のドメインをメソッドの第一引数として取る方法と,クエリパラメータとして site=xxx の用に取る2パターンに対応を予定しています。

またレスポンス自体はオブジェクトに包まず,JSONでデコードしてhasrefの形にして複数の場合は配列形式で返却する予定です。

懸念点

バリデーションどうする問題が微妙にあります。 ここはDMM公式SDKでも各実装によって異なっており,例えばPHP実装はクエリパラメータのバリデーションは行っていません。

また公式でないですが,Rubyでの実装に関しては,一切のバリデーションは行っていないようです。

ですがGolangの実装の場合,きちんとバリデーションをしています(ここはGolangが型付き言語であることも起因してそうですが…)

今回のようなあるサービスに特化し,さらに各クエリパラメータに最大値最小値などの制限がある場合,明確にバリデーションをAPIクライアント側でした方が良いのか…?というのは疑問点です。

今後の展望

まずは年内-年明けを目指して実装していきたいと考えています。 他にもAPIクライアントとして作成したいwebサービスがあるので,このあたりを勢いで実装出来るようになっていけるといいですね!!アドバイスなどもお待ちしています!! ありがとうございました。

Perlと入学式とAnaTofuZ

これは Perl入学式アドベントカレンダー3日目の記事です。

こんにちは id:anatofuz です。ようやく寒くなってきた沖縄から失礼します。

そういえば去年もアドベントカレンダーに参加していて,あれから1年経ったのか…と思っています.

あれから1年か…と思っているので,去年のアドベントカレンダーからの僕とPerl入学式について書いていこうと思います。その為後半になるに連れてエモさが加速していきます。色々とすいません。

Perl入学式in沖縄でメインスタッフした

昨年はin沖縄の受講生だったのですが,今年はin沖縄のメインスタッフとして講師したりしていました。(そういえば最後の入学式で id:papixさんから「次は運営だね(ニッコリ」的ななリプを貰ったような気がする…)

一部資料改正などにも携わることが出来て,初めてGithubでpull-requestを出すという経験をしたりしました。

講師としても何回かやったのですが,ちょっとわかりにくかったり,一生懸命になってしまってネタ分が足りなかったりと今年の参加者の皆さんにはちょっと申し訳なかったかなと思っています。来年度以降は改善してより良い入学式を出来るようにしていきたいと思っています。

東京にも行った

夏の帰省がてら東京のPerl入学式にもお邪魔しました。

沖縄は半数が学生という参加体型でしたが,東京は逆に殆どが社会人の方という状態だったので地域差を感じていました。 id:xtetsujiさんのWebアプリケーションの回だったのですが,細かい気配りとわかりやすい解説があったりとスタッフとしても勉強になりました。

2017年と僕とPerl入学式と

僕とPerl入学式の2017年はこの様な感じでしたが,今年は僕とPerlの付き合いは色々と考えさせられた年でした。 例えば夏にとあるインターンに参加して「もうダメだ…」となったことが(個人的には)強烈に残っています。

正直その後は様々な事も重なったことも有りエンジニア向いていないんじゃないかなぁ…とか思うことが多々ありました。 HTMLもCSSも知識としては持っていないし,何より同年代のエンジニア候補と比べるとバイトもバズったサービスをリリースしているわけでもなく 世界的に有名なOSSにコミットしているわけでもなく,かと言って著名な論文を出しているわけでもない俺は…俺は…となっていました。

そんなことも有り9月は精神的に色々ときつかったのですが id:papix さんと id:gomayumax に東京で飲み会をしていただいたり(しかもid:papixさんには家に泊めて頂いた) 沖縄に来た時に飲みに誘っていただいたり, 夏休み期間中は隔週で id:papix さんと会うという中々無い経験をしていました。本当にpapixさんには感謝しても仕切れないなと思っています。ありがとうございます。

…思い返してみると、自分がPerl入学式に参加したのは id:codehex 先輩がYomitan.pmで「Perl入学式in沖縄します!!」と言って開催した第1回の予告を、大学のニュースサイトに投稿したものを見たのが最初の切っ掛けでした。

あの時そういえば第1回Yomitan.pmが開催されるという情報もその前に手に入れていたのですが,コミュニティ活動というのがどういったものか知らなかったことも有り参加できなかったな…という事を思い出しました。 Perl入学式はコミュニティとか知らない僕でも、初心者向けと言っているものなら参加できるかな…と考えたことを思い出しました。

ですが、去年のエントリには書かなかった事実なのですが実は1日目行こっかな…と迷った経験があります。つまり僕は参加する1日目の最後までちょっと迷いがあったのです。

ただ1歩,Perl入学式の会場に行くと,そもそも行く切っ掛けを作ったid:codehex さんを始めid:papixさんやid:xtetsujiさんがいらっしゃり,新たな1歩がたしかに踏めた感覚がありました。

そして次のPerl入学式の参加や,そこで知ったOkinawa.pm,YAPCの参加などで id:masakyst さんや同じ学科の id:cat2koban さん, 東京の id:sironekotoro さん などPerl入学式に参加しなければ,知ることさえ無かった様な方々とお話する事が出来ました。

…今こうしてみるとあの時Perl入学式に参加しなかった時の現在は想像も出来ません。あの時,もし入学式に参加しなかったら,今のようにそこまでプログラミングに興味も発生せず,なんとなくの日常を過ごしていたのかなと思います。

僕が参加できたPerl入学式in沖縄はid:codehexさんがやるぞ!!と宣言したのが切っ掛けですが, その宣言は、最後のYomitan.pmに id:papixさんが参加したことが切っ掛けで、そしてYomitan.pmは id:masakystさんら沖縄のPerlMongerのみなさんがいないと始まらなかったと考えると、Perlを通して様々な人々が繋がってきたんだなと感じています。

Perl入学式は良いコミュニティと思っていて、全国5拠点に集まるPerlMongerや他の日本全国のPerlやプログラミングに興味がある様々な人々がいます。僕のように学生をしている人もいれば, 現役のPerlエンジニアの方,またIT系とはまったく異業種の方もいらっしゃいます。

その人々が共通言語として「Perl」で一同に集まっている。この感じは非常に良いなと思っています。Perlが好きな人が,Perlを通して知見を共有する。そのコミュニティに属させていただいて,ちょっとずつですが,目標の「Perlを母国語にする」に近づいていけたと思っています。

しかし,まだ僕は「胸を張って言えます!!!」とか「ここが強みです!!」とか言えるレベルでは無いと思うんですが、それでも教えてもらうことと教えることが好きなのでPerl入学式での活動は続けていきたいと思っています。きっと自分でも出来ること,自分が得意としていて貢献できるものがあると思っているので。

2017のin沖縄の皆さんには至らぬ点を多々見せたと思いますが,もしよろしければ2018年のin沖縄のサポーターやYAPC::Okinawa でまたお会い出来ることを心待ちにしています。そして「来年もしあるなら行ってみようかな…」という皆さん!多分来年もやっていきます!!よろしくお願いします!!

それでは明日は id:codehex さんです!お楽しみに!

Acme大全2017に乗せていただいた

Acme界隈の聖書こと「Acme大全2017」の物理本を友人経由でついに入手したのですが
今までCPANにアップしていた拙作Acmeモジュール3作品について解説をして頂きました.
Acmeが好きでPerlをやっているぞみたいな所があるので,本当に興奮というか光栄で嬉しいです.

f:id:anatofuz:20170921222808j:plain

ちなみMadokaMagicaについては一部処理が壊れていること.
HowToMakeSushiとWant500trillionについてはAAが大きすぎるとのご指摘を頂きました.
まかまかさん本当に丁寧にAcmeモジュール動かして執筆されているのだなと思うと本当に畏怖の念をいだきます.

そんな聖書「Acme大全2017」はなんと電子書籍で購入できます.みなさん買いましょう
booth.pm

「すぐわかるオブジェクト指向Perl」読んだ

Acmeモジュール書いていると良くPerlにおけるオブジェクト指向について触れるのですが そのコアな部分について解説している本です.

すぐわかる オブジェクト指向 Perl

すぐわかる オブジェクト指向 Perl

と言っても前半はリファレンスやmapやgrepといったPerlの便利関数についての解説が多く Perl入学式終わった後のレベルで読むと前半部分は非常に良いかなと思いました. この本で解説されているPerlオブジェクト指向は,基本に忠実な1番素朴なオブジェクト指向です.

著者の深沢さんはYAPC::Kansaiの時にお会いし,かんたんPerlを頂いた思い出があります. かんたんPerlと同様に,初心者でもわかりやすく.またwindowsユーザーでも難なく実行出来るような文になっています. 若干warningプラグマを使っていないなど,書き方が今のPerlの書き方では無い部分がありますが,十分自分で直せる範囲なので どんどん進めていけました.

かんたん Perl (プログラミングの教科書)

かんたん Perl (プログラミングの教科書)

オブジェクト指向と言っても,モジュール作成時によく(?)引っかかる,謎の$class変数についても語られており 「これからモジュール作ってみるぞ!」という方にも個人的にオススメです. また前述の通り,リファレンスやmap,grepの使い方の解説が秀逸で 特に研究コーナー2「リファレンスのまとめとシュウォーツ変換」の章は一読するべきかなと思います.

現代のPerlではMouseやMooなどが広く使われていますが,これらモジュールについてのtipsはこの本では語られていないので そのあたりの情報が知りたい場合モダンPerl入門などがオススメのようです.(こちらは2~3ページしか読んでない…)

モダンPerl入門 (CodeZine BOOKS)

モダンPerl入門 (CodeZine BOOKS)

また最後はCGIを開発していきますが,現在主流(だと思っている) Perl5.24.0などはCGIモジュールが標準で入っていない為 Cartonやcpanm,cpmを使ってcgiモジュールをCPANからダウンロードする必要があります.

ですが,そういった細かい所が気にならないほどわかりやすい本です!!オススメです!!

YAPC::Fukuokaに参加してLTソンでLTとかした話

どうもこんにちは @AnaTofuZ です. 前回のYAPC::Kansaiに引き続き2度目のYAPCに参加させていただいたので,レポートです.

今回も学生支援スポンサーの皆様のお陰で行くことが出来ました…!!ありがとうございます!!!

前夜祭

前夜祭の前にヌーラボYAPC::Okinawaのミーティングがあり,その後前夜祭でした. 今回の前夜祭はLTソンが開催されており,かつてYAPC Asia Tokyoの際にLTソンの司会をやられていたうずらさんの進行でワイワイしました.

時間までは他のPerlMongerの方とお話したりご飯食べたりしてましたが,charsbarさんが 5000兆円欲しい!のAcmeモジュール を僕がリリースした事を知っていて,めちゃくちゃ嬉しかったです.

LTしました

今回の前夜祭はLTソンなので,勢いで応募して勢いでLTしました. 色々とありますが,作ったAcmeモジュールをひたすら勢いで紹介していく感じになりました. 途中焦って色々とテンパっていましたが,うずらさんから「頑張って-!!」と声をかけていただくなどワイワイと出来ました.

前夜祭は他にAcmeモジュールの発表があったり,などと酒を入れながらLTをするという最高な会でした. やはりLTとアルコールは親和性高いと言える….

その後はAcme神のまかまかさんにMackerel鯖の店に連れて行って頂きました.

YAPC::Fukuoka HAKATA

今回は前回のkansaiとくらべてPerlの話が多くPerlのカンファレンスだ!!という印象を強く受けました. Kansaiから個人的にPerl6をちょっと試してみたりしたこともあり,非常にワクワクした内容のものが多かったです.

2017年夏のPerl

charsbarさんのYAPC風物詩となっている(?)トークでした. 個人的な印象ですが,中々ModernPerlについての情報源が初心者には少ないように感じるので勉強になりました. また後半はPerl6の最新情報であり,今までの歴史を踏まえながらエコシステムがCPANに統合されること. 当分はググらず信頼できる情報源を類っていくことなどの今後Perl6をやっていく上で需要なtipsを知る事が出来ました.

Be PaaS Monger - クラウドエンジニアの三大美徳、またはIaaSを使わない3つの理由

Perl入学式でもお世話になっているわいとんさんのトークでした! ちなみに,わいとさんとは前夜祭で初対面でした.(3日目で博物館でお見かけしたような…?)

azureやawsなど,Cloudサービスは普段中々触らないのですが,実務では非常に使えるなと改めて思えたトークでした. 学生無料枠が使えそうなので,少しずつ遊んでいきたいと思います.

コンテナを「守る」仕組みから中身を理解しよう!!

前夜祭でもお見かけしたuduzraさんでした. OSの講義で触れたようなシステムコールの話をPerlRubyを交えながらコンテナについて見ていく内容で 非常に為になりました.containerと言えばDockerというイメージでしたが,Dockerが来る前にも幾つかの技術が会ったのは知らなかった….

はてなブログ最近の開発テクニックと最新の開発風景のご紹介

hitode909さんのはてなブログの開発にまつわるトークでした. はてなブログの裏側は非常に気になるところでしたが,デザイナーの方も開発に近いことをするというのは驚きでした. またエディタの設定は仕事だ!!というところも印象に残りました.

Web application good error messages and bad error messages

moznionさんのトークでした.次元によるエラーメッセージの種類など,普段はエラーメッセージを見る事が専門なので, 実際にエラーメッセージを運用していく立場の話は新鮮でした.

ランチセッション

学生支援で来させていただいていることもあり,スポンサーの企業さんとお話しながらご飯を食べました. サポーターズの方から是非沖縄で!!と熱くpushされたので是非沖縄でもお願いします!!

本当に学生支援スポンサーの皆様ありがとうございました!!

未来のプログラマー達へ ~Perl入学式卒業生から~

Perl入学式でお世話になっているtomchaさんのセッションでした. tomchaさんは職業プログラマの方ではないですが,キッカソンなどの運営などPerl入学式を通して この業界の人々と関わりを持ち始めた経歴の方です. 個人的にOkinawaでの入学式の運営を通して色々と学ぶ事があるので,共感できる内容でした. ちょっとの勇気はやはり重要…!!

未来志向のCPANモジュール開発 - アイデアを生み出し実装する方法

サンプルコードPerl入門の木本さんのトークでした. CPANモジュールはAcmeモジュールなら量産していますが,ちゃんとした?CPANモジュールはまだ開発した事が無いので 実装方法などの参考になりました.やっぱりOSSはソースが読めるので良いですよね. 僕もAcmeモジュールは他の方のモジュールを参考にさせて頂いています. こないだリリースされたSPVMの話も聞けて良かったです!

P6W に基づく Perl6 に於ける Web 開発の基礎となる Crust

tokuhiromさんのPerl6のセッションでした.Perl6は日本語チュートリアルを斜め見している感じなので まだWaFなどについての知識はないのですが,Perl6でもweb開発は出来なくはない. しかし安定性や開発者的な問題から実用はまだまだ難しいという印象です. Perl6ちょっとずつやっていきたい…

グローバルなエンジニアを目指す為の入門的な話

大学では頻繁にグローバル化だ!!と言われ「グローバル化ってなんや!!英語か!!英語で書けばええんか!!」みたいな雰囲気で生きていましたが,実際にグローバル化を考えると相当大変であることを感じました.

特に文化の違いというものはかなり大きなネックになり,実際歴史や文化を知る事はグローバル化するプロダクトを行う上で必須であると学べました. 実際問題こういった案件を僕がする事になるのかはまだまだですが…

The plan of Aniki 2.0

かるぱさんのAnikiなトークでした. Anikiについては前回のOkinawa.pmでもトークを聞いたので,新機能ということで聞いていました. ORMは今勉強している最中なのですが,N+1問題などはちょっと知っていたのでぼーっとですが雰囲気はつかめたと思います. やはりこういったトークを理解出来るようになっていきたい…

サービスディレクターの意思決定を支える技術

個人的な話なんですが,ディレクターという職種がIT系でもあったことを知らなかったです…(ディレクターと言えばテレビ業界なイメージ) ただディレクターと言ってもjs書いたりと,やはりエンジニア寄りの職種だったりするのかな…という印象でした.

使用するツールがGoogleのサービスだったのですが,Googleのツールといえばスプレッドシートとかしか知らなかったので,新しい発見でした.

Inside Evalpark - the evolution of sandboxing

弾さんのトークでした.前回のKansaiでは弾さんのトークを聞けなかったので,単純に聞いてみたく聴講してました. FreeBSD上でEvalparkが動いていて,内部ではPerlで処理をしている. 実際の処理のテクニックが,中々高度だったように感じましたが幾つかのモジュールで使われていた技術かな? という雰囲気でした.もう少し勉強したい…

巨大Perlプロジェクトに、Dockerが出会った

まだ複数人でPerlプロジェクトを扱った経験が無いのですが,cpan.snapshotがOS依存であることは知りませんでした. 確かにDockerを使うと環境そのものを共有できるので,なるほどなーと思いながら聞いていました. 大学でもDockerが密かなブームとなっている節があるのでDockerも触っていきたいです.

LT

前夜祭と比べると真面目なtechLTでした.kazeburoさん初めてお見かけした… ベストLTはOkinawa.pmのKさんでした!めでたい

Keynote

山本 竜三 さんのKeynoteでした.海外で働くことが何か昨今持て囃されていて,「お前らとりあえず海外行け!!」みたいな風潮でしたが実際に行った方のトークは中々無かったので貴重でした. やはり現実問題として言語の壁や文化から来る業務の違い,何より時差など,実際に海外で仕事をするとなるとかなりキツいなという印象を受けました. それでも上手くやっている山本さんほんとすごいな…

懇親会

懇親会はお座敷スタイルだったので,大勢の人と喋ったりという訳では無かったのですが,ワイワイしました.

今回も941さんに 沖縄県民詐欺」 かりゆしウェア着てるのに山梨」 などとイジられました!!! 俺は雰囲気で沖縄に住んでいる.

その後の二次会は屋台でワイワイしました. ラーメンが美味しかった….福岡最高では….

YAPC::Okinawa ONNASONやっていきます

というわけで次のYAPCはOkinawaです!!!めでたい!!!

Perlを初めてまだ少しですが,気づいたらOkinawa.pmの1人としてYAPC::Okinawaのスタッフとなりました!

会場は恩納村と少し遠いですが,極めて沖縄感がある最高の場所なので是非お越しください! 当日晴れることを期待して Acme::TeruteruBouzuを作っていますので,是非お使いください.

次のYAPCではスタッフとして,今までのYAPCスタッフのみなさんとOkinawa.pmのメンバーと協力してワイワイしていきます!! 出身は山梨県だけどな!!ガハハ!!