読者です 読者をやめる 読者になる 読者になる

nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Visual Studio and Development Technologies。なお掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Prismにプルリクを送ろうとした話をしてみたい

Prism OSS

皆さんも、きっと憧れのプロジェクトのContributersに名前を載せたい!
と思ったことが一度や二度はあるのではないでしょうか?

私はあります。
そして実際に採用される価値がありそうなアイディアもありました。

今回はそう思って取った行動とその結果を、お話ししたいなと思います。

私がプルリク送りたい!と思ったのは、まぁ私をご存知の方であれば大体想像がつくでしょう。
そうPrismです。

github.com

PrismではDependencyServiceを一枚ラップするIDependencyServiceを利用することで、DependencyService自体をインジェクションするような機能が提供されています。
で、私は思いました。

「これ、Xamarin.Forms.Deviceクラスでも同じことやったら便利なのに」

Xamarin.Forms.DeviceはXamarin.Forms.Initに依存していたり、デバイスに依存していて、そのまま利用してしまうとテスタビリティが失われてしまいます。
そこで1枚インターフェースでラップしてインジェクションできるようにすることで、便利になるはずだと考えていました。

そう考えていたころ、たまたま製作者であるところのBrian Lagunas氏が来日し、しかも運のよいことに直接お話しする機会を得ることができました。
というわけで、突撃インタビュー(同時通訳者外付けバージョン)してみました。

私    :へい、ブライアン!なんでDeviceにはIDeviceないんだい?過去に議論でもあったのかい?
ブライアン:いや、特に議論はしてないよ。でも必要性が良くわからないね
私    :じゃぁちゃんっとIssue上げるんで、良さそうならプルリク送ってもいいかい?
ブライアン:OK!まってるぜ!

てなやり取りがあったわけです。
で、私根が真面目なので、PrismのContributingマニュアル全部翻訳しましたよね。
ニュアンスが分からなくてTwitterで助けてもらったりもしました。
@takuya_takeuchiさん、@espresso3389さんありがとう!

www.nuits.jp

ふむふむ。
「プルリク送りたければ、まずはIssue立てて議論するのがベスト!」

OK!Issue立てるのね。楽勝楽勝。Google翻訳先生お願いしますっと。
立てたのがリンク先のIssueなんですが要約するとこんな感じです。

私     :へいブライアン!IDeviceが欲しいんだけど。こんな作りで!
ブライアン :作るのは簡単だね。でもどういうシナリオで使うんだい?
どこかの誰か:これこれこういう時に使いたいなあ <- 援護きた~! 私     :あとは、これこれこういう時かな
ブライアン :なるほど、いいんじゃない?簡単だぜ!
私     :おお!じゃぁPR送っていいかい!?
ブライアン :楽勝楽勝!もう作ったよ!RPレビュー頼むぜ!

私     :( ゚д゚)ポカーン あのその。。。PR送りた。。。あ~。。。Genericsのメソッドはいらないのかい?

ブライアン :Oh!忘れたぜ!足したのでレビュー頼む!
私     :い、いいと思うぜ!完璧だ!
ブライアン :OK!これで1件Done!

github.com

という顛末になりました。
いや、ブライアンいい奴なんだけどな?おれPR送りたかったよ。。。

というわけで、Prismの次のバージョン6.3では、IDeviceServiceがリリースされることになりました。

Prism/IDeviceService.cs at master · PrismLibrary/Prism · GitHub

次からは、Issueと同時にこんなんでどうよ!?ってPR送ってやんよ!(#゚Д゚)ドルァ!!

あ、繰り返しお伝えしておきますが、ブライアンはいい奴だったよ。マジで。
みんなもPrism使おう!