はじめに
ずっと印象に残っているPull Requestのやり取りの回想記事です。
Findyさんの企画で「あなたのキャリアのなかで、特に印象に残るPull Requestは何ですか?」というテーマの記事をお見かけしました。
このテーマを見かけて、私にとっては何だろうと思い返すと、Ruby製の環境変数を管理できる cocoapods-keys へのPull Requestが思い浮かびます。
印象に残る Pull Request
2017年の当時は、iOS アプリのパッケージ管理に CocoaPods を利用しており、Ruby製のプラグインを自由に組み合わせることもできて、cocoapods-keys はそのプラグインとして、シークレットをリポジトリに追加しなくても、環境変数としてバンドルするのに活用していました。
ことのきっかけは、個人開発アプリでシークレットの扱いを探していたところ、このプラグインに出会いました。以下は、当時のアプリリリース記事1
Tumblr API を使うにあたって Consumer key と secret key のバンドルが必要になります。ソースコードは公開を前提としていたので、 Swift で扱える環境変数的なライブラリを探していたら cocoapods-keys を見つけたのでこれを採用してみました
利用を進める過程で、Issueに遭遇します。複数のプロジェクトで利用している場合に、あるプロジェクトのキーを消した場合に動作が安定しませんでした。
このIssueへの対応は冒頭の印象に残るPull Requestとは異なり、シンプルなものでした。
Looks good - and this CI error looks unrelated - thanks! 👍
たしか、コメントにあるようにCIエラーになっているものの、今回の変更とは関係なさそうなので先にマージして、別途対応しました。この先にマージする判断も後続の問題と切り分けができるようになるので、大事な判断基準です。
Patch rubocop
ここからが印象に残る Pull Request の話になります。(再掲です)
以下の rake spec 実行時のエラー対応を行いました。コメントが紐づいていないので確証がないですが、たしか前述の CI エラーと同等の内容だったと思います。
ActiveSupport
最初にレビューを依頼すると、まず、Ruby 2.0 のサポートを維持したいので、ActiveSupport のバージョンを下げて欲しいと修正リクエストをもらいました。
we really need to keep ruby 2.0 support around - any chance you can add activesupport < 5 to the Gemfile?
どのバージョンをサポートするか意思決定がはっきりしていて、こういう観点でレビューコメントをもらえたことは、レビュープロセスの大切な原点になっています。
ActiveSupport 5.0.0 からは、Required Ruby Version: >= 2.2.2 となっています。つまり、Ruby 2.0 はサポートされません。一方、4系2では、Required Ruby Version:>= 1.9.3 と Ruby 2.0 のサポートが維持されます。
YAML.load
次は Ruby 2.0 にないメソッドを利用していませんかと質問を受けました。
any chance you can check for YAML.safe_load's existence before using it? in the CI it doesn't seem to exist (could be a ruby 2.0 thing )
ローカルでパスして、CIで失敗するということだったので、確認するとローカルでは Ruby 2.4 で実行していることに気づきました。
現在では、YAML の情報源を探そうとしてもなかなか辿り着けません。というのも YAML は内部で Psych ライブラリを使っていて、最新の Ruby では Psych を直接利用する形に変わっているようでした。以下のスライドがとても参考になりました。
Ruby 2.0.0 Psych を確認すると safe_load はありません。一方、Ruby 2.2.0 Psych では safe_load を確認できました。
おわりに
このようにして Ruby 2.0 のサポートを維持しながらテストを修復し、CIがパスしたことでマージされました。
Amazing! Thanks!
当時のこの言葉が灯火となって、今日の自分を動かし続ける原動力の一つになっていると改めて実感しています。
なお、現在は cocoapods-keys ではなく、arkana の利用を推奨しています。
CocoaPods Keys has had a great run since its creation in 2014, and still works perfectly fine today. If you're interested in a fresh re-think of the concept, check out https://github.com/rogerluan/arkana