LEFログ:学習記録ノート

leflog: 学習の記録をどんどんアップしていきます

【OSS活動】JavaScriptのライブラリのコードの修正案をPull Requestで出した話、GitHubでリンクを貼る際に気をつけるべきこと

はじめに

こんにちは! 地球育ちの青いゾウ、LEF(レフ)と言います。🌏🐘

自分はとある学習コミュニティ、フィヨルドブートキャンプに所属していて、そのプラクティスの一貫でNodejsを使ったコマンドラインで動くメモアプリを作成していたのですが、その際に困ったことがありました。

ターミナル上でコマンドを選択する際、予期せぬエラーが出てしまったのです。自分のコードを何度読み返してみても、おかしな点は見当たりませんでした。

そこで、私はVSCodeのIntegrated Terminalを使って、ステップインを駆使しながらデバッグ作業に明け暮れました。

そしてついに、エラーの原因を突き止めました。どうやら、自分が使っているライブラリ「Enquirer」の挙動がおかしかったのです。

問題箇所の技術的なポイントについては、リンク先の以下のコメントに自分でまとめました。

https://github.com/lef237/js-practices/pull/4#discussion_r1023468871

このような問題が立ち現れたのですが、ライブラリの仕様な気もするし……報告するにもあまり自信が持てないし……と、どうしようか迷っていました。
そんな中、フィヨルドブートキャンプ内のコメント欄で、メンターのtdakakさんが後押ししてくださいました!ありがとうございます🙏

そのコメントを拝見し「あまり気負わずに軽い気持ちで提案すれば良いかもしれない!」と前向きになり、今回Pull Requestを送ることに決めました。

Pull Requestの内容について

メンテナさんが英語話者なので英語で作成しています。DeepL万歳!

Resolved a problem in which a number passed by return statement inside result() would change to an empty string inside then(). by lef237 · Pull Request #410 · enquirer/enquirer

このような形で、以前に別のOSSへコントリビュートしたような流れで、Pull Requestを作成してみました。

ちなみに、英語を書くのは全然むずかしくないです。

  • DeepLとGoogle翻訳の両方を使う
  • 再翻訳しても意味が通じているか確認する
  • 翻訳機を使わずに読んでみて、ニュアンスが変化しているところがないかチェックする
  • 回りくどい言い回しを避けつつ、丁寧に説明する

というところでしょうか。むかしスティーブン・キングの小説作法を読んだことがあるのですが、英語は副詞を削ればなんとかなるのです。たぶん。

GitHubでリンクを貼るときに気をつけるべきポイント

上のURLをクリックしてPull Requestを読んだ方なら分かると思うのですが、なにか違和感に気づきましたでしょうか?

そうです。自分はちょっとしたミスをしてしまっているのです。

なぜここに日本語が!?

Pull Requestの説明文の下のところに、

lef237 mentioned this pull request 2 hours ago
メモアプリコマンドライン版(クラス) lef237/js-practices#4

と書かれています。これは、自分がまったく意図していなかったものでした。

自分は現在フィヨルドブートキャンプに在籍していて、この「メモアプリコマンドライン版」の課題を提出していたのですが、そのセルフレビューの中で次のようなコメントをしました。

マークダウン記法でPull Requestのリンクを貼りました

補足的な説明のつもりでこのようなコメントを書いたのですが、ここで貼られたリンクをGitHubが勝手にメンションだと解釈し、先程のような表示が現れたというわけです。

コメントを消してみたものの、mentionedの表示は消えないままでした。

色々調べてみたところ、次のような記事を見つけました。

誤って他リポジトリのIssueを参照してしまった際の対処法

こちらのZennの記事で書かれていることとまったく同じ過ちを自分はしてしまったのです。このような仕様があるとは全く知りませんでした。予測不能な状態になって焦りました。🥲

IssueやPull Request内に他のIssueやPull Requestのリンクを貼ると、mentionedが自動的に表示されてしまい、元になっているIssueやPull Requestを消さないと、mentionedの表示も消えないらしいです。
(mentionedの表示だけを消すことは現状できないらしいです)

皆さんも、GitHub上にリンクを貼る際は気をつけましょう。

※こちらはmentionedではなくreferencedになっていますが、プライベートリポジトリが表示されてしまう場合もあるようです。→GitHubのissueのreferencedは削除できない | script life 千夜一夜 プログラミング別館

以前から成長したこと

自分は今年の7月頃にも、OSS活動に取り組みました。

lef237.hatenablog.com

初めてOSS活動をおこなって得た知見、gem 'devise-i18n'を使う上で注意すべきポイント - LEFログ:学習記録ノート

この記事に詳細がまとまっていますが、この時はメンターさんの助けもあって、無事に解決することができました。Pull Requestも、無事にマージされていました。

そこから4ヶ月だった今回の成長としては、自分自身でエラーの原因となるコードを突き止めたことです。
デバッグはとても地道な作業ですが、根気よくコードを追いかけていると、どこで問題が起こっているのかが明らかになることを身をもって実感しました。

特に大変だったのが、Integrated Terminalを使うことです。
普通にデバッグするだけでは、ターミナル上で現れた選択肢を選ぶことができなくなってしまうからです。その問題を自力で調べて解決するのには骨が折れました。

また、デバッグする際に、OSSの巨大なコードを読み解くのは苦労しました。変数の中身がどこで変化したかをチェックし続けることで該当箇所に気づいたのですが、これはVSCodeの機能をフル活用してなんとかなった感じがあります。

How to debug interactive node.js, such as Inquirer in VS Code - Stack Overflow

自走力をつけるためにも、こうしたデバッグ作業に強くなっていきたいです。

なぜブログ記事にまとめたのか?

今年の6月あたりからEnquirerライブラリのメンテナさんの更新が止まっていて、マージされる気配が無さそうです。
マージされるか却下されるか分かりませんが、結果が出るのは半年後くらいになりそうだったので、忘れないうちにブログにまとめてみました。

また、上記で挙げたように、GitHub上にリンクを貼る際には皆さん注意してください。一度mentionedになってしまうと、元の情報をまるごと削除しないと、消すことはできないからです。

以上で、今回のブログ記事を終えさせていただきます。
もしマージされた暁には、追記として記述する予定です。

追記(2023-07-27)

無事にマージされました!

人生で2回目のOSSコントリビュートをしました!🎉🥳 - LEFログ:学習記録ノート