Judeeeの自由帳

雑にまとめてく

Shinjuku.rb #91でLTしました

概要

先週、Shinjuku.rb #91 好きなもの紹介LT大会でLTをしました🎙️

shinjukurb.connpass.com

この記事では、以下について書きました✍️

  • LTの感想
  • GitHub ActionsのTips

LTの感想

地域rbでLTするのは2回目でした。 今回のテーマが「好きなもの紹介LT」だったのもあり、前回ほどは緊張しなかったです。

発表中の皆さんのリアクションが温かく、とっても話しやすかったです〜!

ご清聴ありがとうございました🙏

speakerdeck.com

LT会を振り返ると、皆さん楽しそうに話す姿が印象的でした!

本当に好きなんだな〜と思える素敵な発表ばかりでした✨

また、2次会に誘っていただけたのも嬉しかったです!ご馳走様でした🙇‍♀️

LTの余談

実装の経緯について少し話します👀

凝っているGitHubのプロフィールページをよく見かけるのですが、あれ格好いいですよね...! 私も改造したい〜!と思い幾つか候補はあったものの、どうせなら可愛くしたいと自作に至りました💪

github.com

ずっと同じ見た目だと飽きが来そうなので、更新する方法を探していました。 下記の参考サイトを元に、GitHub Actionsを使って更新させました🙆‍♀️

参考:

banatech.net

zenn.dev

qiita.com

ヘッダー・フッター画像の作成

ポケモンの画像から手動で色を抽出して、ヘッダー・フッター画像を作っていました。 どんな画像を作成するか?の部分でもかなり悩み、最終的にストライプ柄に落ち着きました。

一時期ポケモン図鑑とずっと睨めっこしていました😇

zukan.pokemon.co.jp

ドミナントカラー(画像のメインとなる色)を抽出するライブラリがあるので、これらを使うともっと楽に画像作成できそうです。

参考:

wood-roots.com

GitHub ActionsのTips

実装で気付いた意外と知られていない(?)Tipsを残しておこうと思います✍️

手動実行

GitHubにpushした時に発火するイメージがあると思いますが、手動実行できます🆗

docs.github.com

定期実行

こちらも驚かれたのですが、できます! ただ、タイムゾーンとcronの日時指定には注意が必要です。 そして、日時指定してもその時間ピッタリに実行されないです。(体感15分ズレている)

docs.github.com

タイムアウトの設定

不測の事態で実行時間が伸びて課金されることを防ぐために、タイムアウトを設定しました。

docs.github.com

おまけ

自動でcommitするために、yamlでユーザーを指定する必要があります。 勿論、自分のユーザー名とメールアドレスを使ってもいいのですが、GitHub Actions用のユーザーがあるっぽい?

以下のコメントによると、ユーザーは3種類あるみたいです🙂🙂🙂

github.com

初めてLT会を主催しました

概要

3月末にフィヨルドブートキャンプ(以下FBC)内で、「初めてのLT会vol.15(オンライン)」を主催しました⚡️

この記事は、

  • 主催したきっかけ
  • 主催としてやったこと
  • 感想

を書きました✏️

主催したきっかけ

一言で言うと、「自分がLT登壇したかったから」です。

機会がないなら作るか!ということで、開催に至りました🏃‍♀️

LT会のテーマは「最近面白かったこと・もの」で、幅広く募集しました!

speakerdeck.com

FBCでは、失敗を気にせずにどんどん挑戦してみればいいじゃん!という風土があると思います。 そのため、初めての主催でしたが抵抗を感じませんでした。

主催としてやったこと

先人達のTODOリストを参考に準備を進めていました。(FBCのDoc、先人のブログ記事など)

FBC内のLTで主催を考えている方は、これらのドキュメントを読めば間違いないと思います。

LT会当日までにやったことを時系列にまとめました。

時期 内容
1ヶ月前 告知 & 登壇者の募集 & 登壇者向けリハーサルの日程調整
1週間前 リハーサル
LT会当日 司会業

あれもこれもやらないと、と焦っていたのですが、1つ1つのタスクはそこまで重くなかったです。

ふりかえり

事前準備で後悔したことがいくつかあるので、後学のためにブログに残しておきます。

1. 発表のコメントを事前に準備しておく

LT会当日は各登壇者の発表後に一言感想を伝えて進行をしていました。 リハーサルの時点で発表の内容がある程度わかっていたので、事前に準備して当日に備えておけばよかったです😫

場を繋ぐために私がその時思ったことを素直に発言していたのですが、失礼なこと言っていないか不安だったのと、沈黙を避けたい気持ちで焦りました💦 リハーサルの段階で準備していくことをお勧めします。

2. 主催者もLT登壇する場合、一時的に他の人に司会を変わってもらう

私のケースは特異かもしれないのですが、自分が発表する際には一時的に司会を変わってもらい、次の発表まで場を繋いでいただいた方がいいと思います。 余裕がなくなるのもあり、自分が一方的に話して置いてけぼりにしていないか不安になりました😅

感想

やりきったぞ〜という達成感でいっぱいです!

LT会終了後にフィードバック目的でアンケートを行ったのですが、どの回答もポジティブで励まされました🙌 また、LT登壇していただいた方にアンケートの回答を共有して喜んでもらえたのがとても嬉しかったです🥰

登壇者を募集した当時は、前回のLT会から1ヶ月しか空いておらず人数が集まるか不安でした。 無事人数も集まり、登壇した方にもチャレンジして良かったと言われて開催して本当に良かったです😭😭

改めてLT会に関わった全ての方に感謝いたします。 ありがとうございました!

エラー表示を可愛くするGemを作りました💎

概要

  • Rubyプログラムを実行した際に発生したエラーをネコチャンが話すGemを作りました
  • Gemを作った話をGotanda.rbでLTしました(ほぼ人生初LT)

Gemを作った

作ったGemはこれです。

Exception.prepend(MyModule)としてエラーメッセージを上書きしています💎 rubygems.org

本当は、エラーを日本語化する土台を先に作って、ネコチャンが話す拡張機能をつけるつもりでした。 (これは現在進行形で再設計しています。)

半年以上前から構想はあったのですが、興味があるものに色々手を出していて触れていませんでした😿

今回Gotanda.rbが開催されるとのことで、登壇駆動実装をしていました🏃‍♀️💨

ほぼ人生初のLT

フィヨルドブートキャンプのオンラインイベントではLTをしたので、ほぼ人生初と書きました。

オフラインで、しかも50人を超える人の前でLTをしたのでかなり緊張しました。

gotanda-rb.connpass.com

今回のLTはGemの実装を進めたいという理由以外に、けじめをつける(?)面もありました。

Gotanda.rbに初めて参加した際の懇親会で、勉強のためにGemを作っている話をしていましたが、今回のLTまでお披露目できていなかったのです。 これがずっと心残りだったのもあり、LTを決意しました。

スライドはこちらです。 speakerdeck.com

正直、GemのリポジトリはREADMEも書いていないし、commitの積み方も綺麗ではないです。

ですが、自分の中の"完璧"を待っていたらいつまでも来ないというのと、作って早めにフィードバック貰いたい気持ちの方が強かったです。

背伸びせず、ありのままを晒すことで、LTでも伸び伸びと話せたのは良かったと思います。緊張で震えてたけど発表中もリアクション貰えて楽しかったよ!

そして偶然にも私の発表直後にokuramasafumiさんがエラーを解決するために大事な話をされて、偶然にも話が繋がっていたのがとても印象的でしたw

LTというと、できるエンジニアの方が役に立つ話や仕事の学びを話している印象が強いと思いますが、私のようなへっぽこでも発表できているんだぞ!LT楽しいぞ!と誰かを勇気づけられたらとっても嬉しいな〜。

それにしてもリポジトリ見返すと伸び代ありまくりなのでなんとかしたい😐

LT後の反応

発表中のXのリアクションも沢山貰ったし(嬉しすぎて全ていいねした)、懇親会でも沢山声かけていただけてとっても嬉しかったです🥰

また、chobishibaさんのnoteで言及して貰ったのもすごく嬉しかったです!ありがとうございます〜!

note.com

最後に

私はお酒があまり強くないのですが、LTが終わった安堵感から会場で提供されていたビールを飲んでベロベロになりました🍺

空腹にビールを入れると二日酔いもするのでオススメしないです(戒め)

textlintを使って日報の校正を始めました

概要

  • 文章を書くことに苦手意識があるので、textlintを導入してみました🔍
  • 導入した話をLTで発表しました💬
    • フィヨルドブートキャンプで開催されていた「初めてのLT会 vol.15⚡️」
  • 人生初LTでしたが、満足のいく発表ができました🙌

発表スライド

speakerdeck.com

この記事ではスライドに載せていない部分の、

  • LTの動機
  • 発表してよかったこと

などを書いていこうと思います✍️

発表の動機

主催者の方が声をかけてくれたのがきっかけです!

前々からLTが気になっていたのと、お誘いを受けたらなるべくYesと答えるのが私の信条なので、思い切って挑戦することにしました💪

(気持ち的には飲食店で大盛り無料と言われ、勿体無いから頼むのと変わらない気がする🤔)

何故そのネタを選んだの?

LT会のテーマは「私のおすすめ!」でした。

いくつか発表のネタはあったのですが、最終的にtextlintについて話すことにしました。

textlint.github.io

textlintにした決め手は、実際に使ってみて感動したのが一番大きいです。

自動で校正してくれるなんて、何て便利なんだ...。昔の自分に教えてあげたい🥺

発表本番に向けての準備

何よりも優先したのは、「時間内で発表が終わること」です。

発表時間は5〜10分と指定されていましたが、5分で収まるようにスライド作成に取り掛かりました。

(話が長いと聞いていて疲れてしまうので時間は死守しました。)

具体的にやったこと

  1. 紙上でスライドの大枠をざっと書きだしました。
  2. 上記を元に原稿なしで通しで話してみて、詰まった箇所をマークしていきました。
  3. 話しやすいように一文の文字数を減らし、言い切ることを意識して原稿を作成しました。
  4. 原稿を元にスライドの作成に着手しました。発表時間を見て枚数を調整しました。
  5. 原稿を見ながらスライド送りができるように発表練習をして、詰まらず話せる状態になったら原稿なしでスライドだけ見て話せるようにしました。

1~5までで2, 3日かかりました。

スライドのデザイン修正を含めると、完成するまでに4日かかりました。

発表した感想

初LTながら、堂々と発表できた気がします🙆‍♀️内心かなり緊張していましたが!w

発表後に皆さんからリアクション貰えるのがとても嬉しかったです!🙌

textlint便利そうなので使ってみたい!と仰った方もいて、発表した甲斐がありました😂

自分の好きな話を聞いて貰えるの嬉しいし楽しいですね〜!

この感動をまた味わいたくて、今月LT会を主催して発表することにしました🎉

LT会がなければ自分で発表する場を作っちゃえ〜!!ワハハ!!ってノリで主催したので頑張ります...!!

次回のLT会の感想もブログに残しますね〜。

【macOS】お手軽!アバターでWeb会議に参加する方法【2024】

簡単に実現できて感動したので、熱が冷めやらぬうちに記事にまとめます🔥

今までやらなかった背景

  • macOS対応のものが少ない(Windowsだといっぱいある)
  • 手軽に試したいだけなのに、OBSとかウェブカメラを準備するのが面倒
  • 難しい専門知識が必要そうで敷居が高い

これから紹介する手順が詰まらずできたら、確認まで30分もかからないと思います。

本当にお手軽すぎてびっくりした。この感動を広めたい〜。

本編

事前準備

  • BOOTHアカウント
  • お金(アバターを購入する場合)

1. アバターを準備しよう!

アバターがないと何も始まらない!まずはアバターモデルを準備しましょう!

この後使うアバター化アプリ(VCam)では、vrm拡張子のモデルを読み込んで利用します。

私はBOOTHで、「(検索したい単語) .vrm」と検索して購入しました。(300~500円位だった)

booth.pm

0円のものも多くあったので、色々試してみてはいかがでしょうか? 勿論、利用規約はちゃんと読みましょう👀

2. Vcamをダウンロードしよう!

Vcam公式ページからダウンロードできます! 初期設定は公式ドキュメントに詳しく書かれています。

3. Vcamを立ち上げて、モデルをインポートしよう!

公式ドキュメントのアバターの読み込みを参考にインポートしましょう! 私は初めインポートが反映されなかったのですが、アプリとPCの再起動をしたら問題なく動作しました。

4. 仮想カメラの設定をしよう!

この手順を踏まないとWeb会議ツールで使用できないです😢 こちらも公式ドキュメントの仮想カメラ設定に記載があります。 (公式ドキュメント読めば大体大丈夫🙄)

5. Web会議ツールの設定をしよう!

Web会議ツールのカメラ設定で、カメラの種類をVcamと選択すると、アバターが反映されます。 私が確認できたWeb会議ツールは以下です。

nako_sleep_9hさんの記事では、zoomで使用するまでの手順が丁寧に書かれているので、こちらも是非参考にしてください!

azumashi.hatenablog.com

おまけ

私が購入したアバターが可愛いので自慢したい。 これです。かわい〜〜〜🥰 booth.pm

こちらを制作された昼間の倉庫さんは他にも可愛い動物のアバターを作られていて、全て可愛いのでオススメです!

kohiru.booth.pm

今後Web会議で積極的に使っていきたい! 無職なので会議なんてないけどな!!ガハハ!!!

〜おわり〜

ちゃんと理解する!RailsでのN+1問題💎

この記事は、「フィヨルドブートキャンプ Part 2 Advent Calendar 2023」10日目の記事です。

adventar.org

概要

N+1問題と聞いて、ちゃんと説明できる方はどれくらいいるでしょうか?

「あ〜なんかパフォーマンス落ちるやつでしょ」「Railsのメソッド使えば何かいい感じに解決できるでしょ」という認識で、上手く噛み砕けていない方もいるかと思います(私のことです)

本記事では、Railsのメソッドを使わずにN+1問題の解決を試みました。

わかっている方にとってはくどく感じるかもしれません🙇

本記事の流れ

本のタイトルと、それを所持しているユーザーの名前を一覧画面に表示させることを考えていきます。

テーブルは下図を想定します。

よく見るパターン

N+1問題でよく見る例を元に、紐解いていきましょう👀

# books_controller.rb
def index
  @books = Book.all 
end
# index.html.erb
<% @books.each do |book| %>
  <p><%= book.title %></p>
  <p><%= book.user.name %></p>
<% end %>

図で書くとこのようなイメージになります。

このように、クエリがレコード数分だけ発行されていることがわかります。

この例ではレコード数が少ないですが、レコード数に比例してパフォーマンスが落ちます。

他テーブルを参照しない形に変更する

他テーブルを参照する時にN+1問題が発生するので、これを解決できれば良さそうです!

つまり、該当するレコードを一度に一気に取得してみましょう💪

# books_controller.rb
  def index
    @books = Book.all
    user_ids = @books.map{|book| book.user_id}
    @users = User.where(id: user_ids)
  end
# index.html.erb
  <% @books.each do |book| %>
    <p><%= book.title %></p>
    <p><%= @users.find{|user| user.id = book.user_id}.name  %></p>
  <% end %>

図で書くとこのようなイメージになります。

SQLの発行は2回で済んでいることがわかると思います。

N+1を解決するメソッド

RailsにはN+1を解決するメソッドがいくつかあります。

本記事では詳細な説明を省きますが、実は今まで説明してきたことがRailspreloadメソッド一行で実現できます。

書き方は以下の通りです。

Book.all.preload(:user)

便利😎

参考:

api.rubyonrails.org

まとめ

Rails特有のメソッドを用いずにN+1について説明してきました。

初めてお絵描きソフトを使ったので、楽しくてポンチ絵をいっぱい書いてしまいました🖼️

少しでも理解の助けになれば幸いです!

ゆるもく会、始めました🍅

この記事は、フィヨルドブートキャンプ Part 1 Advent Calendar 2023」10日目の記事です。

adventar.org

 

フィヨルドブートキャンプ(以下FBC)で主催している「ゆるもく会」について書きます👀

 

 

🍅ゆるもく会概要🍅

ゆるもく会は、火・木にFBCのDiscordの#もくもくチャンネルに集まって各自ひたすら黙々と勉強する会です🍅

(詳細はFBCのイベントページから確認してみてください!)

 

「一人で勉強してて学習のモチベが下がる…」「定期的に学習時間を確保したい」という方には特にオススメしたいです!

また、雑談が苦手でオンラインイベント参加に抵抗があるな…って方も最初のステップとして参加しやすいと思います〜

とにかく敷居を低くしてゆるく続けていけたらと思っています!

 

📅開催の経緯📅

私個人の話になりますが、今年7月に会社を退職し無職になりました。

時間があるので、生活リズムや学習計画が崩れやすくなりますよね。

また、金銭面を気にして家に引きこもりがちになり、誰とも話さず孤独感を感じることもありました😓

 

このままではいけない!と思い、

  • イベントに参加して、ベクトルを内側(自分)から外側に向けてネガティブを防止する
  • 毎日5分でもいいから学習する

 

を直近の課題として、解決方法を模索しました。

 

イベントの参加

FBCでは、毎週輪読会がいくつも開催されています。

輪読会に参加すると、他の受講生とも新陸が深まる・勉強時間が確保できて良さそうです。

参加している方のお話を聞いても、みなさんワイワイしていてとても楽しそうな印象です!

 

しかし、私は途中参加のキャッチアップが大変な印象があり、まだ参加に踏み切れずにいます...。

また、学習の進捗と比較してまだその分野は手をつけ参加はまだ早いかな、と思ったこともあります😢

(現在はそこまで気にしていないので、近々お邪魔させてください🙇)

 

学習と向き合う

唐突ですが、気力がなくても図書館やカフェに行くと勉強が捗った経験はありますか?

これは、人がいて程よい緊張感がでるからだと思っています。

 

誰かに見られているかもしれない環境なら、より勉強の効率が上がると考え、Discordのチャンネルに入り勉強を進めることにしました。

 

このように、「イベントの参加」と「誰かに見られている環境」の2つを実現するためにゆるもく会を開催しました🍅

 

❤️よかったこと❤️

開催からまだ日は浅いですが、主に3つあります。

  1. FBCのイベントに気が引けて参加できてなかった方達が参加してくれた😭
    •  イベント自体初参加の方にも参加していただけて嬉しかったです!
    • また、勉強が捗ったと日報で報告していただけたことも励みになりました☺️
  2. 勉強に集中できる時間が増えた💪
    • 主催していることもあって、その時間帯は勉強と向き合わざるを得ないです。ほんの少しでも勉強すると、流れでその後も集中して勉強できています。良い😎
  3. ゆるもく会開催以外の時間で、もくもく部屋チャンネルの利用が増えた🍅
    • ふらっと見ると誰かがいるので、自分も頑張ろうと励まされます🫶

 

📝まとめ📝

主催しているゆるもく会の概要と開催経緯についてお話してきました。

少しでも興味を持っていただけたら、是非参加してくれると嬉しいです!