二ヶ月弱のご無沙汰でしたが、あ、ありのまま起こったことを(略)。
MooseのMoose Quick-Ref Cardというクイックリファレンスカード(チートシート)へネイティブトレートによるヘルパーメソッドだけ追加して今風にするつもりで私家版チートシートを書いていたら、いつの間にか「Moose & Mouse基本文法最速マスター/The Fastest Way to Mastering Moose & Mouse」になってしまいました。
下書きをしていたら流行りの「基本文法最速マスター」のような内容になったので、折角なので各種の情報を参考にしつつ、説明文などを追加して公開してみました。「基本」文法でないものも少なからず混じっていますが、副産物なのでご容赦ください。また、Moose用語は可能な限り元の英語を併記していますが、Moose用語以外の英語への訳出はいい加減です。ごめんなさい。
誤っている点, ご不明な点, 冗長すぎてかえって初学者を混乱させかねないため削除すべき点などがありましたら、上記記事へのコメントやトラックバックなどでお寄せいただければ幸いです。適宜改訂します。また、CC-BYライセンスなので、「とても見ていられないので俺が全面的に書き直してしまえ」という企ても歓迎です。
公開場所の選定基準
出来上がったものをどこに晒そうか迷ったのですが、Perl界隈にはせっかくperl-users.jpやperl-mongers.orgという素敵なサイトがあるので、この場末ドメインのブログではない公の場に寄稿すことにしました。
昨年末にYappoさんにCodeReposのコミット権をいただいたのでperl-users.jpの方に書こうかとも考えましたが、
- ブログだとコメントやトラックバックなどを受け付けられ、perl-mongers.orgではすぐにでもブログ記事を書ける
- 今回のネタはperl-users.jpの単独コンテンツほど精錬されていないように思えた
などの事情に鑑みて、今回はperl-mongers.orgにお世話になることにしました。
苦心したこと・書くまで気付かなかったこと
- 何と言うこともないものですが、アトリビュート構築オプションを分類して記述してみました。羅列すると圧迫感を感じるのは人間として無理からぬことだと思うので、或る程度の関連性のあるものを小分けにしてまとめています。
- ネイティブトレートの引数と挙動を書きました。
absを使ったことがなかったため、アトリビュートの値を汚すことは知りませんでした。 - 「設定」と「指定」の使い分け。アトリビュートの値をセットすることを(
defaultなどでセットされること)を「設定」・コードに各種のメタ操作を定義すること、記述することを「指定」と書いていますが、結構曖昧ですね......。「格納」と「記述」とかでも良かったかも知れません。 - 「オブジェクト」と「インスタンス」の使い分け。これも微妙ですが、an objectとan instance of a classの関係を気にしました。
handles指定時にisa指定が必須であることなどは知りませんでした。私は「Moose入門研修」で「型は動的チェックなので、多用すると遅くなる」というお話を伺ったにもかかわらず偏執狂的にisaをほぼ必須指定しているので、なかなか気付きにくい仕様でした。
余談
CodeRepos.orgやLivedoor.comのOpenIDだとサインイン出来なかったので(原因は追えていません)他の方を参考にMyOpenID.comにアカウントを作ったり、MarkdownフォーマットだとWide character in subroutine entryエラーが出たので素のフォーマットで書いたりと、色々ありました。
そしてさらに、細かな修正を行おうとしてもmt.cgiがしばらく503になって再ログイン出来ない状態を引き起こしてしまいました(当日の昼には復帰していました)。何か私が悪いことをしてしまったか心配です。ごめんなさい。
ということで、取り急ぎtwitterでvkgtaroさんへお詫びというかご報告というかを差し上げました。
目次(完全版)
目次が膨大すぎるとかえって読む気が失せそうなので、先方には簡略版の目次だけ掲げています。当初書こうとしていた目次は、もう少し階層を深く掘った以下のようなものです。単語だけ眺めると、Mooseのイロハは網羅できているのかな、と思っています。
role_type, duck_type, 無名型, handlesにロールを渡した場合の挙動, DEMOLISHALL, Moose::Exporter等々の記述を省いたくせにカリー化辺りが入っているのは私の独断と偏見によります。
Parameterized TypesがMoose 0.26+であるとか、かなり昔から存在する機能についてはバージョンを明記しないようにしています。ただ、その閾値の見極めは難しいです。
- クラス/Classes
- ロール/Roles
- シュガー関数/Sugar Functions
- アトリビュート構築オプション/Attribute Constructor Options
- 型/Types
- 委譲/Delegation
- インスタンスの生成と破棄/Construction and Destruction of Instances
- その他の内容の触り/Other Tidbits
- 名前空間の汚染への対策/Measures against Namespace Pollution
- メタオブジェクトプロトコルとClass::MOP/Meta Object Protocol and Class::MOP
- メタクラスの不変化による高速化/Speed Up by Immutabilizing Metaclasses
MouseMooseX拡張モジュール/MooseXExpansion Modulesoose- インターフェースの消費タイミング/Timing to Consuming Interfaces
- メソッド衝突対策/Measures against Method Conflict
- テスト対策/Measures against Testing
- Mooseを使うか否か/To Moose or not to Moose
- 情報源など/See Also
おそらくは FastCGI 周りの問題だと思うんですが、原因を追ってみようと思います。 記事のポストと不具合のご連絡ありがとうございました!
どうもありがとうございます。お手数をお掛けしてごめんなさい。