Masteries

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

Class::Accessor::Typed 0.02をリリースしました

Class::Accessor::Typedをリリースしました - Masteries

こちらで紹介した, Class::Accessor::Typedの0.02を先程リリースしました.

metacpan.org

今回の変更点としては, id:motemen さん謹製のClass::Accessor::Lite::Lazyのようなrw_lazy/ro_lazyを追加しました. これで, オブジェクト生成時に初期値を与えなかったプロパティについて, 呼び出し時にデフォルト値を生成する... ということが可能になります.

ひとまず最低限欲しかった機能はこれで実装しきりましたが, (実行速度が遅くなりすぎない範囲で)便利な機能はちまちまと足していきたいと思っています. 要望やバグレポートなどあれば, GitHubのIssueなどで投げてもらえると助かります!!!! もちろんpatches welcomeです.

github.com

Class::Accessor::Typedをリリースしました

papix.hatenablog.com

こちらのエントリで紹介したClass::Accessor::Type改めClass::Accessor::TypedをCPANにリリースしました.

metacpan.org

Class::Accessor::Liteを便利に使っているが, もう少しSmart::Argsのように型の恩恵を受けたい... という時に使ってみて下さい. 今後の展望としては,

  • コードをもう少し見直して, 高速化出来ないかの検討
  • Class::Accessor::Lite::Lazyのように, 後からdefault値を評価出来るようにする仕組みの導入
  • ドキュメント整備

辺りをやっていきたいと思っています.

Class::Accessor::TypeというCPANモジュールを書いた

Class::Accessor::LiteやClass::Accessor::Lite::Lazyはサクッとオブジェクトのクラスを作ることが出来て便利なのですが, newするために初期値を渡す時や, rwないしwoでオブジェクトに値を書き込む時に, 渡された値のチェックが出来ない(例えば, 関数の引数をSmart::Argsでチェックするように...)という点が気になっていました.

MouseやMooを使えば良いという話題はありつつ, それよりももう少し軽量で, Class::Accessor::LiteにSmart::Argsでやっているような値のチェックが出来る程度のモジュールがあったら便利そうでは...? ということで, 若干車輪の再発明感もあったのですが, Class::Accessor::TypeというCPANモジュールを書いてみました. まだshipitはしていません.

github.com

...コードを読めばわかるのですが, まんまClass::Accessor::Lite + Smart::Argsの融合合体という感じのモジュールになりました(ついでに両方のモジュールを丁寧にコードリーディングする良い機会になって良かったです). 結果として, Class::Accessor::Liteのようにオブジェクトのクラスを定義しつつ, Smart::Argsで出来るような値の指定(isadefaultの宣言)が出来るようになっています.

特にimportの実装がもちゃっとしている点, あとはテストが書いていない点などまだまだ荒削りですが, 需要がありそうであればその辺りも整備してshipit出来ると良さそうかな, と思っています. ご意見ご感想などあれば, TwitterやIssueにてお知らせ下さい.

AWS::XRayでEC2プラグインが使えるようになりました

id:sfujiwara さんのAWS::XRayファミリーにいくつかpull requestを送らせて頂いて, EC2プラグインを使えるようにしてみました.

github.com

github.com

X-Rayのプラグインとは

X-Rayには, 公式にプラグイン機能が提供されています. 例えばRubyのSDKだとこういう感じです.

github.com

現在, EC2, ECS, Elastic Beanstalkの各プラグインが用意されており, アプリケーションがそれぞれのリソース上で動いている場合に, その詳細情報をセグメントに含めて送ってくれるようになっています. 例えば, EC2プラグインであればセグメントが処理されたEC2インスタンスのIDと, それが所属するAvailability Zoneの情報が追加されるようになっています.

使い方

Plack::Middeware::XRayを使っているのであれば, 次のようにして簡単にEC2プラグインを有効にすることができます.

enable "XRay"
  name => "myApp",
  plugins => ["AWS::XRay::Plugin::EC2"],

あとはX-Rayにデータが送られるのを待つだけです. ブラウザでX-Rayの各セグメントの詳細を見る時に,

f:id:papix:20190902203156p:plain
「Origin」を見ると, EC2インスタンス上で処理されたことがわかる

f:id:papix:20190902203159p:plain
そのセグメントが処理されたEC2インスタンスのIDやAZがわかる

...という感じで, EC2の詳細な情報も見れるようになります.

あるセグメントがどのEC2インスタンスで実行されたかがわかれば, 例えば何かしらの問題が発生した時, 実際にそのインスタンスにある各種ログを調査するといった作業が手軽に出来るようになり, 問題に関連した情報が更に得やすくなるはずです. 是非使ってみて下さい.

「builderscon tokyo 2019」でLTをしてきました

builderscon.io

builderscon tokyo 2019に参加してきました. 今回は当初, 何かしらのネタでproposalを出そうと思っていたのですが, 「きっとPerlConで燃え尽きているだろうな...」と予想して回避しておったのですが, 案の定風邪(+ その後長引いている咳)で滅していたので, 結果的にセーフ(?)みたいな感じになっていました.

業務だったり, あとは咳による体調不良だったりで, 今回は余りトークを聞きに行くことはなかったのですが, 懇親会や休憩スペースなどではいろいろな方と久々にお会いしたり, 有意義な会話が出来て非常に良かったです.

...とはいえ, このままだと(完全に自責ではありますが)不完全燃焼だな, ということでLTに登壇してきました. 先日参加してきたPerlConネタです.

スライドの中でも紹介している, PerlCon参加レポートはこちら.

developer.hatenastaff.com

今回は, マイクを握った瞬間に何故かいつもよりギアが高まってしまって, 異様なテンションでのLTとなりましたが, 「海外のカンファレンスに参加するのもアリだよ!!! 楽しいよ!!!」という事が伝えられたのであれば, 幸いです.

buildersconは, かつてのYAPC::Tokyoのように, 年に1回いろいろな界隈の人達が集まる大同窓会のような様相があり, また「知らなかった, を聞く」ことができ, 刺激を貰える良いカンファレンスだと思っています. YAPC::Japanなどに関わっている身としては, スタッフの皆様は本当に準備や運営など大変だろうなあ... という気持ちがあって, 今回も素晴らしい場所を作って頂いて本当にありがとうございました, お疲れさまでした! という気持ちでいっぱいです. 来年があるなら是非参加したいですし, 次こそはproposal出して何かしら発表したいなと思います!!!