OSS Gateオンラインワークショップに参加してOSSにPRを出した

先日、『OSS Gateオンラインワークショップ』というのに参加してきました!

oss-gate.doorkeeper.jp

勉強になったしとても楽しかったので、その振り返りを書きます🙌

きっかけ

僕が現在プログラミングを勉強しているフィヨルドブートキャンプで、前にこのワークショップとのコラボ企画を開催されていることがあり、OSS Gateさんの名前は認識していました。

そして最近、フィヨブー卒業生のハムさんがこのワークショップに参加されたのを見て改めて興味を持ったのと、次回開催でハムさんがサポーターとして参加されることを知ったので、自分も参加してみようと思いました。

余談1

上記の前回開催ワークショップは6/14(土)でしたが、この日はフィヨルドブートキャンプ内でLT会があった日でした。 そのLTの中でとても感銘を受けたものがあり、その時の勢いで(まさにエイヤーで)即このワークショップに申し込みをした、という経緯があります。

speakerdeck.com

きっかけを作ってくれたham-capさん、そしてhirokiej さんに感謝です🙏

余談2

土曜日の日中開催のため、参加するには家族の協力が不可欠になります。ソフトウェア開発のことは何も知らない家族にOSSのことを説明するにあたり、「ゲームのMODを修正・改善できるよう製作者に要望を出すみたいな感じ」という説明が刺さりました。
「MODを直すのは偉大だ、どんどんやれ」「私のやってるゲームのMOD直してくれない?」などと言われ、ニュアンスが伝わって良かったなと思いましたが実際MODを直すのは別の話なので無理だと伝えました😂

当日の流れ・学んだこと

当日の流れ

当日はざっくり以下のような流れでワークショップが進んでいきました。

  1. OSS開発手順の説明
  2. コントリビュートしたいOSSを探す
  3. OSSを実際に動かしながらフィードバックポイントを探す
  4. OSSへのフィードバック
  5. まとめ・ふりかえり

1日で説明からOSS探しから実際のフィードバックまでやるということで間に合うのか結構心配でしたが、スムーズな進行で説明などもわかりやすく、また実際にフィードバック(PR作成)まで進めることができて良かったです!

学んだこと

ざざーっと箇条書きで書いていきます📝

  • 一次資料(公式ドキュメント・開発リポジトリ)を参照する
    • 誰かのブログ記事などに載っている方法を参照してうまくいってしまうと、コントリビュート(貢献)に繋がらなくなる
    • 本来、ソフトウェアは一次情報だけで無理なく操作できるのが理想
    • 一次情報で不足していたり誤っていることがあればそれを改善することで貢献できる
  • 自分の「困った」を大切にする
    • 「この不明点は、自分が初学者だからわからないだけなのでは…」と思わなくていい
    • 自分が困ったら、同じ部分で困る人が他にもいるはず
    • 「こうなっていたら自分は困らずに済む」という状態になるように改善要望を出す
      • 開発者自身はドキュメントを見ずにできちゃうので、意外と気づかない。初学者のためにはこういう部分こそがコントリビュートチャンス
  • Issueは丁寧に、PRはシンプルに
    • Issueを出す場合は、とにかく丁寧に書く
      • 自分の動作環境、何をしたのか、何をしてないのか、期待した結果がどうで実際の結果がどうだったのか等を、省略せずに書く
    • PRを出す場合はコードが語ってくれる
      • コードの差分によって何をしたいのかは明確なので、descriptionを長々と書く必要は無い(むしろ簡潔なほうが良い)
  • コントリビュートのお作法を確認する
    • OSSではコントリビュートの手順などを指定されていることも多い。CONTRIBUTING.md やその他の部分で、コントリビュートの方法が書かれていないか確認する
  • ライセンスを確認する
    • ライセンスはOSSの利用・改変・再配布等に関するルールを定めたものなので、めちゃくちゃ重要

どこにPRを出したか

僕は現在、フィヨルドブートキャンプの最終課題である『Web サービスを作る』というプラクティス(通称『自作サービス』)に取り組んでおり、Ruby on Railsのアプリケーションを開発中です。

そこでまさにこれから導入しようと思っているbulletというgemにPRを出しました。

bulletは、N+1問題を検出してくれる便利かつ有名なgemです。

The Bullet gem is designed to help you increase your application's performance by reducing the number of queries it makes. It will watch your queries while you develop your application and notify you when you should add eager loading (N+1 queries), when you're using eager loading that isn't necessary and when you should use counter cache.
(bullet)

「有名gemはたくさんの人の目に触れているので、改善ポイントをサッと見つけられないこともある」という話もあったので少し不安でしたが、ドキュメントに沿ってインストール・設定を進める中で改善できそうな箇所を見つけることができました。

そして実際に立てたPRは以下です。ギリギリワークショップの時間内に間に合いました🏃‍♂️

github.com

感想・今後の展望

楽しかったです!

今回のワークショップで実際にPRを出すところまでできて、OSS参加のハードルが少しだけ下がったように思います。
今回はREADMEを少し修正するというシンプルなPRでしたが、引き続きOSSに触れる中で何か気づくことがあればIssueやPRを立てていきたいですし、ゆくゆくはコードの中身を改善するようなコントリビュートもできたら良いなと思いました🚀

追記:マージされました🎉

ブログを公開した日の夜(PR提出の翌日)、無事マージされていることを確認しました😄

github.com

迅速に対応いただいてありがとうございます〜!!!

Insightsの方にもコントリビュートの履歴が残りました

Macの予測変換がおかしくなってきた時のリセット手順

突拍子もない変換をしてくるMacさん

Macで日本語入力している時、あまりに突拍子もない予測変換をしてくる時があります。気づけば笑って直すのですが、たまに長文を入力していて変な変換に気づかないまま後になって「なぜここにこんな無関係の言葉が!?」となるケースもあります。
あと、画面共有で自分の画面を他者に見せている時に突拍子もない予測変換が出ると、なんかちょっと恥ずかしい😇

Macさんが謎の学習をしていることが原因のようで、リセットをすれば直ります。
前にも何度か対応したことがあったのですが毎回忘れるので、備忘録として手順を残しておきます。

謎の変換をリセットするための手順

Mac左上画面のアップルアイコンから「システム設定…」をクリック

②システム設定ウィンドウの左メニュー「キーボード」を選んで、スクロールして下の方に出てくる「テキスト入力」「入力リソース」の「編集…」をクリック

③左メニュー「日本語 - ローマ字入力」を選んで、スクロールして下の方に出てくる変換学習の「リセット…」をクリック

④確認ダイアログが出るので、そのまま「リセット」をクリック

これで謎の変換がされなくなりました。

これまでの経験から、またしばらくすると出てくると思うのですが、この学習自体ストップできないのかな?

隠しファイル/隠しディレクトリをgitignoreする2つの方法

👻 気づくとそこにいる隠しファイル

GitHubを使って複数人で開発作業をしていると、たまに「おみゃーさん、いつどこで入ってきたんだがね?(愛知弁)」というファイルがコミットに紛れ込んでくることがあります。

代表的なものは.DS_Storeなどです。

.DS_StoreMac固有の隠しファイルで、いろんなフォルダに実は潜んでいます🥷
個人的には、デザイン業務とかで写真のやり取りをするときにzip圧縮したり他の人にファイルを送ったりするといつの間にか可視化されているという経験は幾度となくありました。

他にはWindows固有のファイルであるThumbs.dbや(これは「隠し」ファイルではないか?)、あとは.vscodeのようなエディタ固有の隠しディレクトリもあります。

👋 隠しファイルはGit管理対象外へ

こういった隠しファイル系はリポジトリ内には不要なものなので、Gitの管理対象外にしてしまうのが手っ取り早いです。

Git管理対象外にするといえばgitignore。方針としては大きく2つあるようです。

  1. リポジトリ内の.gitignoreファイルに追記する(.gitignoreがなければ新規作成する)
  2. 自身のMacでグローバルなgitignore設定をする
    • マシン固有の隠しファイルは、リポジトリ側でなく自身のMacで設定するほうが良さそう

今回は自身のMacの方の設定の話です。

自分はどうだっけと思って調べたら、ユーザーディレクトリ直下(/Users/myname/)に.gitignore_globalというグローバル設定用のファイルがあり、その中にすでに.DS_Storeの記述がありました。自分で入れたんだっけ、何も覚えていない…😇

📁 gitignoreのスタンダードな置き場所

少し調べてみたところ、gitignoreを設定する場所としてデフォルトは別にあるようです。

Its default value is $XDG_CONFIG_HOME/git/ignore. If $XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/ignore is used instead.
Git - gitignore Documentation

上記によると、~/.config/git/ignore内がデフォルト値とのことです。

一方、日本語訳もある8.1 Git のカスタマイズ - Git の設定 の方でガッツリ~/.gitignore_globalというのが出てきます。

このような設定を行うには、グローバルな .gitignore のようなファイルが必要です。 ~/.gitignore_global ファイルへ次の内容を書き込んで、(以下略)

Git - Git の設定

昔の僕が、これを参照して設定をしたのかもしれません。(繰り返しますが、何も覚えていない😇)

🚚 gitignore置き場のお引越し

上の記事内で書かれているように、今の~/.config/git/ignoreのままでも問題はないようなのですが、せっかく今回デフォルト値を知ったので場所を移すことにしました。

# 必要なディレクトリを作成(-pオプションで、すでにディレクトリがあってもエラーにならないようにしている)
mkdir -p ~/.config/git

# 元々あった.gitignore_globalをリネームしてさらに移動
mv ~/.gitignore_global ~/.config/git/ignore

# 新しく設置した方のファイルをグローバルなgitignoreとして使うように変更するコマンド
git config --global core.excludesFile ~/.config/git/ignore

これによりユーザーディレクトリ直下にあった.gitignore_globalファイルは無くなりました。
ユーザーディレクトリ直下は煩雑になりがち(というかなっている)なので、ファイルが1つ減ったのも何気に嬉しいポイントでした✨

🔬 参考記事

この記事を書くにあたって、以下の記事を参考にさせていただきました🙏

zenn.dev

zenn.dev

おまけ

この話は続きがあるかもしれず、続きができたらまた別の記事で書きます🚀

『フィヨブーファンブック Vol.1』が作られると聞いて表紙・原稿・イラストでフルコース参加させてもらいました

まずは…

入稿おめでとうございますー!🎉🎉🎉

色々参加させてもらいました

ということでタイトルの通りですが、僕がプログラミングを勉強しているオンラインスクールの『フィヨルドブートキャンプ(略称FBC、通称フィヨブー)』のファンブックが作られるということで何かしたいなぁと思って色々と関わらせていただきました!

経緯などは主催のかわかみさんのブログに詳しく書かれているので是非ご覧ください。かわかみさんのパワー、めちゃ凄いです。

asya81.hatenablog.com

僕は文章を書くのが割と好きなほうなので(毎日日記を書くくらいには好き)、とりあえず原稿は絶対に書かないとなーと思い、軽い気持ちで応募表明しました。
まぁアドベントカレンダーを春にも書くと思えばなんとかなるでしょう。

そして、原稿だけで飽き足らずほかにも何かお手伝いできないかな?と思い、表紙のタイトル文字とか作りたいなぁと思ってかわかみさんに雑に相談してみました。

その後、輪読会などでもめっちゃお世話になっているFBC仲間の ayu さんが表紙イラストを描かれることなどをお聞きして、ayuさんにご用意いただいたイラストをもとに表紙と裏表紙をまるっと作らせてもらうことになりました✨

また、表紙の企画を考える中で「ピヨルドくんのイラストを募集しよう」というアイデアも出て、めちゃくちゃ絵が下手な僕ですがこの企画にも参加しました。 なので「表紙・裏表紙のレイアウト」「原稿」「ピヨルドくんイラスト」とかなりのフルコースでフィヨブーファンブックに関わらせていただくことができました。
あ〜楽しかった。

表紙について

記事冒頭のエックス投稿貼り付けで表紙は見えていると思いますが改めて。

溢れ出る祝祭感

いや〜めっちゃ良いイラストですね。祝祭感がすごい。

タイトル文字、初めはオリジナルで作字というかロゴみたいなものを考えたいなと思っていたんですが、時間がなくて ayuさんの素敵なイラストの仕上がりを見て、考えを改めました。変に個性的なタイトル文字にするよりも、イラストの雰囲気に溶け込みながらもタイトルとしてしっかり主張できるようなタイトルにしようということで、既存フォントを調整して作っていく方向に舵を切りました。形になってみて、その方向にして良かったなと思っています。

タイトルの色についても、フィヨブーのブランドカラー(パープル寄りのネイビー)とRubyカラー(レッド)をイラストとマッチするようにそれぞれ少し明るめに調整して使いました。

中身について

中身については手に取っていただいてのお楽しみ、ということであまり詳しくは書けないのですが、僕は「なかなか卒業できないけどコツコツ楽しく頑張ってまっせ」みたいなことを書きました。

(チャッピーことChatGPTに添削をしてもらったんですが、チャッピーは何を書いても「最高です!」「完璧です🎉」とばかり言ってくれるので笑、自己肯定感はアップしましたが添削の意味はあまり無く、結局書いては消してを繰り返して仕上げていきました)

冊子は全88ページで、想像していたよりも数倍ボリュームがあり驚いています。
お手伝いの役得ですでに原稿などチラ見しているのですが、めちゃくちゃ良いです。現役生・卒業生・顧問・メンター・アドバイザーなど様々な立場の人からの原稿が集まってその数なんと約25!ほんとにアドベントカレンダーが1つできちゃう数です🎄

どこで手に入るの?

ということでもうすぐ完成する『フィヨブーファンブック Vol.1』ですが、今週末に開催される技術書典というイベントで購入することができます。
(オフライン開催が6/1日曜11:00~17:00で、オンライン上は5/31土曜〜6/15日曜)

techbookfest.org

技術書典は、ITや機械工作とその周辺領域について書いた本を対象にした同人誌即売会。 技術者たちの「コミケ」とも言われる。 Wikipediaより

残念なことに僕は当日会場に行けないのですが、会場に行かれる方はもちろん、行かない方もよろしければ以下のページなどご覧くださいませ!

techbookfest.org

多分オンラインでも買えるようになる、はず?(よくわかってない)

(5/30 17:00追記:オンラインで購入できるようになってました!!!)

おわりに

改めて主催のかわかみさん、アドバイザーの桐生あんずさん、ありがとうございました! そしてayuさん、素敵なイラストをありがとうございました!一緒に表紙を作れて楽しかったです〜✨

アドバイザーとして関わってくださりガッツリ書籍のDTPも担当された桐生あんずさんの記事も紹介いたします。

kiryuanzu.hatenablog.com

git rebase -i でコミットの歴史を改変したのでメモ

GitHubのリモートリポジトリにプッシュをした後でいくつか作業漏れが発覚して、本来1つのコミットに入れたかった修正内容が複数のコミットに分かれてしまいました。

そのままでも良いケースもあると思いますが、今回は1つに整理しておきたかったので、複数に分かれたコミットを後から1つにまとめるためにgit rebase -iを使いました。 その時のメモです📝

手順

前提として、今回の作業は「直近5つのコミットを1つにまとめる」です。

ローカル

まずは手元でコミットを綺麗にする。

git rebase -i HEAD~5を実行、VSCodeのエディタ側で編集画面が開く (VSCodeでコミットメッセージを編集する設定にしていることによるもの。通常であればvimでの設定になると思います)

以下スクショの通り、まとめたい分(つまりコミットとしては消える分)を全部squashにする (vimであれば、編集し終わったら:wqで保存して閉じる)

before: すべてpickの状態

after: 最新以外をsquashにする

(ちなみに、確認はできてないのですがおそらくvimだと時系列が逆で最新が一番上になっているかもしれないので、どれをsquashにするかはご注意)

保存して閉じる。

するとまたVSCodeで別の編集画面が開く (これもVSCodeでコミットメッセージを編集する設定にしていることによる)

修正前の複数のコミットが表示されている

上記の2〜5の分を丸っと消して、以下の状態で保存して閉じる。

# This is a combination of 5 commits.
# This is the 1st commit message:

ここに、最終的に残すコミットメッセージ

# Please enter the commit message for your changes. Lines starting
# 以下略

これでローカルでのコミットが整理されました! git log --onelineで、コミットが1になったことを確認しておくと安心です。

リモート

続いてリモートに反映させるために、force pushをしていく。

% git push --force

# 今回はプッシュのタイミング的に上記だけでは自動的にプッシュしてくれなかったので、以下のコマンドでプッシュしました
% git push --set-upstream origin hotfix/fix-regular-event-ended-logic

これで5つに分散していたコミットが1つにまとまりました🎉

終わりに

履歴が綺麗になって良かったです。 ただし、force pushしたこと自体は履歴に残りますし何でもかんでもまとめれば良いってわけでもないと思うので、使い所に気をつけながら活用していこうと思います🚀

歴史は変えられるが、変えたという履歴は残る

DependabotによるアップデートPRでCIが通らないケースがあったので解決法のメモ

Dependabotは、GitHubが提供しているbotで、gemなどのバージョンアップを自動で検知してアップデートのPRを作ってくれるというとっても便利な機能。

docs.github.com

Rails7.2からデフォルトで有効になっていて、先日学習用にRails8をインストールしたら自動でアップデートPRを作ってくれるようになった。

学習用リポジトリで中身もほとんど入っていないので、まずは慣れるために基本的にどんどんマージしているのだけど、いくつか並行してPRが作られていて順番にマージしてたら、何やらCIのエラーが発生してマージできない事態が発生した。

怒られが発生

今は大変ありがたいことに、コパイロットが解説もしてくれるのでそれも参照しサクッと解決できそうだったので、備忘録も兼ねてメモしておきます。

解決した手順

まずは、dependabotさんが作ってくれたPRをローカルに持ってくる。

% git fetch origin
% git checkout -b dependabot/bundler/selenium-webdriver-4.31.0 origin/dependabot/bundler/selenium-webdriver-4.31.0

続いて、bundle update brakemanを実行すると、Gemfile.lockが更新される。

-    brakeman (7.0.0)
+    brakeman (7.0.2)

大丈夫そうなのでコミットしてプッシュ。

git add .
git commit -m "brakemanのバージョンを7.0.0から7.0.2に修正"
git push origin dependabot/bundler/selenium-webdriver-4.31.0

再びCIが走って、無事マージできるようになりました。

All Greenになった🎉

バージョンアップはこまめにやる習慣をつけておきたいので、期せずして学習用リポジトリでちょくちょく経験を積めるのは大変ありがたいです🚀

2024年の雑な振り返り

今年も書きます、毎年恒例年末の雑な振り返り。

法人化して5年が経った

  • 5年、早いな…!5年間も法人として存続できていることは本当にありがたいです。

仕事について

  • 今年もメインはウェブサイトの制作・更新などだったけど、今年は周年ロゴや企業ロゴのデザインをするチャンスもあり、楽しかった!まだ完成していないけど、企業ロゴのコンペで採用される大変嬉しい出来事もあった。やっぱりロゴデザイン好きだな〜と思う
  • 今年も Kaigi on Rails 2024 のいちデザイン担当として関わることができて楽しかった
  • 年の後半に、来年のことを見越していろいろ動き始めた。まだ書けないけど来年はチャレンジの年なのです、ドキドキ…

自分のアカウント名を刷新した

  • 自分のインターネット的ニュースといえばこれ
  • インターネット上のあらゆる自分のアカウント(ID、ユーザーネーム)を sugiwe に変更した
  • アカウント名については1年以上めちゃくちゃ悩んだけど、最終的に短くシンプルでユニーク(一意的)な文字列にできてものすごく気に入っている
  • 余談だけど、それまで自分は「本名+イラストアイコン」という組み合わせでインターネット上で活動することが多かったけど、色々と思うことがあって「ハンドルネーム+実写アイコン」のが良さそう、という結論に至っている(少なくとも2024時点では)

フィヨルドブートキャンプ(FBC

  • 2021年秋に入会してずっとお世話になっているプログラミングスクール、フィヨルドブートキャンプ
  • 気づいたら3年経ってしまった…。平均値よりかなり時間がかかっている、というかかなり上位の在籍期間だと思う😂
  • でも楽しいし、今年も勉強頑張ったなーと思う。「楽しさ」については去年よりかなり高まっている感じがあり、良い兆候
  • FBC内のオンラインイベントでLT登壇もした
  • 来年いよいよ卒業、できるはず…!理想は春かなと思っていたけど、現実的には夏前くらいなのかな。どうにか頑張ります🔥

プロジェクトFH

  • これは内緒ではないけどまだ広く告知もしていないというプロジェクトなのだけど、2024年の初め(厳密には2023年の終わり)から @juneboku さんと一緒に進めているプロジェクトがあって、めちゃくちゃ楽しいし勉強になっている。無理せず、だけど良い方向に進むように継続していけたらとても嬉しい。そして来年には広くお知らせできるように頑張りたい。
    • 楽しく使えるフィードリーダーを作っています。もしアルファ版を使ってみたい・興味があるという方がいらっしゃったら、ご連絡ください✨

生活

  • 相変わらずの早朝生活。早起き最高
  • 去年の振り返りで書いた娘の部屋問題は、ひとまず家全体の模様替えを実行して「自分と娘の共同部屋」という形で結構良いスペースができている。今のところ気に入ってくれていて嬉しい、すぐに「自分1人の部屋が欲しい」と言い出すかもしれないけれど😂
  • 今年は早朝に幾つかのルーティンを実施していて、最近始めたばかりのものもあるけど良い感じ
    • 体重の計測
    • ラジオ体操
    • 筋トレ(腕立て・腹筋・スクワット)
    • ウォーキングはやったりやらなかったりだったな〜、やりたい
  • 趣味の1人語りポッドキャストも毎週欠かさず配信できて良かった
  • Cosenseで書いている日記は365日毎日継続してて、もう丸2年が経過した
  • ドラムスティックを買い直した!とりあえず1人でスタジオ入りたいな
  • 家族のプロジェクトとして、YouTubeチャンネルを1つ作った。チャンネル登録・高評価よろしくお願いします!(言ってみたかったやつ)

2024年の総括

  • 2024年もあっという間だったなぁ。大変なこと・辛いこともあったような気もするけどあまり思い出せない。総じてめちゃくちゃ良い1年だったと思う。ありがたい。
  • 今年は後厄であったが、無事過ごすことができた

2025年やりたいこと

  • これまで通り、生活リズムを保って家族で仲良く楽しく過ごしたい
    • 生活リズムがかなり自分にとって重要であると年々思う
  • なんと言ってもフィヨルドブートキャンプを卒業したい!頑張る
  • 仕事面で大きなチャレンジがある。2025年、良い報告をしたい
  • プロジェクトFHを引き続き頑張りたい。2025年は広くお知らせできたらいいな
  • Ruby Silverを取る。2024年に取ろうと思ってたのにできなかった涙
  • 英語の技術書を読みたい
  • ポッドキャストは継続したい。そしてゲストを呼びたい
  • ドラムをちょくちょく練習して、かつてのバンド仲間とまた演奏したい