記事: PyLadies Tokyoの活動に参加したことでOSSにPR出す心理的障壁が低くなった話
おしながき
これは何?
何の話を書くの?
どんなPRを送ったの?
なぜPRを送ったの?
それがPyLadies Tokyoとどう関係あるの?
具体的には?
「少しずつ、自分の中の心理的障壁をなくしていく」ということ
個人的に、次にやること
1. これは何?
思いの外長くなっちゃった
2. 何の話を書くの?
3行で説明すると、
ので、PyLadies Tokyoの皆様ありがとう & まだ参加していない人には「ここが良い点だよ」と伝える
3. どんなPRを送ったの?
NetworkXとBokehに、不具合修正と機能追加のissueを立ててPRを送った
具体的には以下のisseとPR。
pandasで作った隣接行列をNetworkXに変換する時、行順と列順が揃っていないと意図しないグラフ構造になる現象を修正した
NetworkXからBokehに変換する時、ノードとエッジの属性が引き継がれるようにした
NetworkXからBokehへの変換で、固定レイアウトを扱えるようにした
自分が追加した機能に関するサンプルコードを追加
4. なぜPRを送ったの?
PyConJP 2018でNetworkXとBokehというライブラリの連携について話すことになった NetworkXとBokehの連携でハマったところについてTipsを書いているうちに、
「(NetworkXで踏んだバグについて)"こういう不具合があるから注意してね"と資料に書くよりも、不具合の原因がわかっていて自分で修正できるレベルの内容であれば、修正PRを送る方が助かる人が多いのでは?」 という声が(私の頭の中に)降ってきた
ので、issueを立ててPRを送った
5. それがPyLadies Tokyoとどう関係あるの?
「GitHubで公開されているOSSに初めてissueを立ててPRを送る」ときに、最低限必要なことは以下の4つかなと思う
3) ちゃんとそのOSSのDeveloper Guidelineを読んで、そのOSSでPRを送るときのルールを理解して、英語で他の開発者とコミュニケーション(提案、質問への回答、レビュー)ができること これを満たすのに、PyLadies Tokyoのイベントが助けになった
ひとつひとつは、実は技術的には大したことはない
プライベートのOSS活動は、仕事と違って強制力がない
強制力がないので、スキル的には可能で、内心やりたいと思っていても、心理的障壁があると何となく先延ばししてしまう でも、PyLadies Tokyoの活動に参加して、色々なものに少しずつ慣れていって、結果「心理的障壁」を下げることができた
補足
*2:私はPR出したてのピヨピヨなので、当然コアコミッターとかやっているレベルの方だとまた全然違うと思う 6. 具体的には?
1) GitHubの基本的な使い方がわかっていること
PyLadies Tokyo参加前の私のレベル:
業務では
GitHubは使っていない
業務で使う機会がないけど「使えないとマズい」という危機感はあったので、数年前に自分の業務用 PCにGitだけ入れて、作業記録用にコマンド打って履歴残す等、少しでも触れられるようにしてた(日報書くとき何の作業したか振り返る用に使ってた) プライベートでは
個人で作った小さいものを管理するために使っていた
が、基本ひとり作業のためのものなので、きっちりした版管理はしていないし、PRを送る機会がない PyLadies Tokyoに参加して:
初期はGitHubでMarkdown形式のテキストファイルで管理してた
issueで翻訳範囲と担当を指定して、PRを送ってレビューする、というやり方
「この方法面倒くさいね」ということで今はTransfixに移行して翻訳作業が進められているのだけど、個人的にはこの頃にGitHubでPR送って共同作業するのに慣れることができた 2) 実装とテストコードが書けること
特に「テストコードが書けること」
PyLadies Tokyo参加前の私のレベル:
業務では
プライベートでは
「そろそろ単体テスト自動化を覚えて精神的に楽になりたい」「テストコード書いてないと人権認めてもらえない」と後ろめたさを感じてPyQとかでちょろちょろ触ってたけど、どうしてもアルゴリズムとかの方が楽しく感じてしまって、学ぶのが先延ばしになってた PyLadies Tokyoに参加して:
そんな折にちょうどタイミングよくpytestを使ったテスト駆動開発入門のハンズオンイベントがあった このイベントで思ったのが、
「テスト駆動開発というのはスタイルだから、習慣の部分も大きいのでは」ということ(*あくまで入門者の認識です) 慣れてないとどうしても機能の実装から先にやっちゃう(やってた)
私はハンズオンでどーしても先に機能を作りたくなっちゃってもどかしくなってたのだけど、@maaya8585さんが「(明確な仕様書がなくて頭の中にあるもののプロト作る感じだと)どうしても先に実装したくなっちゃうよねー」みたいなことを言ってて「そういうもんなのか。これは慣れなのか」「慣れの問題なら、やり続ければ何とかなる」と思ったのを覚えてる (実際の言葉めっちゃうろ覚えなのでご本人の意図していたこととニュアンス違うかもしれないけど、個人的には何かその時すごくしっくり来たのは覚えている)
その後NetworkXに PRを出すとき、
最初のPRでテストコードを書いてなかった
レビュアーの方に「テストは後で書く感じ?(テストも書いてね)」と言われた
初めて書くもんだから「おぉう。。。」とちょっと不安になった
けど、「PyLadies Tokyoでやったんだから書ける書ける!大丈夫!!」って不安が軽減されて取り組めた(本当)
余談
その後Book: テスト駆動Python読んで、今は自分で作る小さめのツールや泥臭くて変わりやすい前処理の質を担保するのにpytestを使っている(1〜2ヶ月かけて徐々に適用していった)。すごく精神的に楽になったのでその話はまたいつかする。 3) ちゃんとそのOSSのDeveloper Guidelineを読んで、そのOSSでPRを送るときのルールを理解して、英語で他の開発者とコミュニケーション(提案、質問への回答、レビュー)ができること
これは普通に業務で心がけてたことが役にたった感じ
やってみて、実際のところ「何かを提案する」という点ではそんなに仕事と変わんないなって思った
(Guidelineを読んでそのPJのフォーマットに反していないのを確認した上で)以下を心がけた
必要な情報をちゃんと書く。例えばissueは、
概要
詳細
現在の動作
期待結果
この不具合を修正or 機能追加をした方が良いと思う理由
「これは特殊ケースではなく、ほげほげの理由により一般的な問題だと思うので解決して欲しい」等
自分が考える解決策(具体的なコード。できれば2〜3種類)
上記をなるべくシンプルな英単語を組み合わせて書く
完全に動作するコードを添える
英語が変でも、コードを読めば意図がわかるように
私の英語力だと、ディスコミュニケーションが発生して細かいニュアンスの理解が必要になるようなやりとりが発生すると立て直すのが大変そうだったので、可能な限り簡潔に具体的に書くよう努めた
「ちょっと混乱してきたな」という時は、自分が理解できる英語で選択肢を複数書いて「ちょっとよくわかっていないのだけど、この中ではどれをやるのがOKですか?」って聞いてた
私の英語が下手なのは文章読めばわかるので、わざわざ「英語が下手ですみません」みたいなことは書かなかった(口頭だと言っちゃうけど)
これが良かったかどうかはわからないし、(簡潔を心がけたとはいえ)issueとしては長くなってしまったかもしれないけど、結果として不具合修正と機能追加の提案は割とすんなり受け入れてもらえて、PRに取り組めた
4) あとは、心理的障壁を超えられること
色々書いたが、最終的にはここに集約される
GitHubの使い方も、テスティングフレームワークの使い方も、深いところを極めれば深いし、ゼロからPJの骨子を作る段階だと思想を理解している必要があるとは思うけど、それでも既に形ができているPJに対して「GitHubに初めてPRを送る」ときに最低限必要なのは、実は本当に基本的な部分だけだと思う またコミュニティに少しずつ関わっていくことで「コミュニティの運営にもライブラリやPython言語本体の開発にも、(当たり前だが)中にちゃんと人がいる」ってのが実感できるようになってきて、「自分が欲しい機能が自分で実装できるレベルのもので、しかも他の人の役にも立ちそうなら、誰かがやってくれるのを待つのではなく自分でPRを送るのは普通のことだ」と何となく感じるようになってきた #まだ言葉足らず 7. 「少しずつ、自分の中の心理的障壁をなくしていく」ということ
PyLadies Tokyoに話を絞ると、
「 Pythonが好き」x 「女性である」x 「わざわざ休日に出てきてコード書いてる」とかなり層が絞り込まれているはず
それなのに、Pythonがカバーする領域の多様さのためか、色々なバックグラウンドを持つ人たちが集まっている
だから、 PyLadies Tokyoの入門系イベントは本当に色々な種類がある
Azure、ラズパイ、Alexa、数学、テスト、分析、深層学習、、、
LTの機会もあるので、「いきなり大きい場所で話すのは不安」って場合でも徐々に練習できる 8. 個人的に、次にやること
明示的に何のスタートなのかは自分でもよくわかっていない
が、なんとなく「こういう風になりたいよね」というものに、ようやく一歩近づけた気がした
OSSにPR出したり、PyConJPに登壇したり
でも、まだまだやりたいことが沢山ある。例えば
今作っているもの(これとか)をちゃんとした形にする その他いっぱい
「で、最終的にどこにたどり着きたいの?」というのは自分でもよく見えていない
「こんなものがあったら面白そう/便利そう」と思い浮かんだものを、浮かんだままにしておくんじゃなくて、実際に実装して本当にそれが面白いのか/便利なのか検証できるようになりたい
なので、今はやりたいと思ったことを無駄に怖がることなくとにかくやってみて、それで、しっくり来れば続ければよいし、やってみて「あれ?なんかちょっと違うな?」と感じたらそれはそれで軌道修正しながら試行錯誤しようと思う この前PyLadies Tokyo Advent Calendar 2018 の13日目の@PyLadiesTokyoのTweetへのリプライ PyLadies Tokyoの良いところをこのツイートにリプください!
このツイートをPyLadie Tokyo Advent Calendar 2018 の13日目に登録します!
初めて行くイベントでも誰かPyLadies関係者がいたりするので何となく安心する。
論文読み会や機械学習ハッカソンになるとまだぼっち参加だったりするけど、逆に自分が「あのイベントこんな雰囲気だったよ」って伝えられる側になると考えればまぁ良いかなぁと思う。
心理的障壁が下がって動けるようになって、そうやって自分が試行錯誤したことが、回り回っていつかどこかの誰かの心理的障壁を下げられたら良いのかなぁと思う
余談
https://gyazo.com/26bfd106f0fb75976b42a81fa870ded5
https://gyazo.com/fddff09c3c591cbc867685d07b8d9f78
PR送って、海外の開発者の人と色々やりとりして、マージしてもらえると嬉しいし楽しいよ
🐱にゃー