こんにちは! SmartHRで新規企画の開発を担当していますchanMisaです。もうそろそろ年末の足音が聞こえてきそうですね。 この記事では、2024年10月18日に開催された第8回LT大会について紹介したいと思います。
SmartHR LT大会について
SmartHR LT大会は有志のプロダクトエンジニアがDevRelとともに企画・運営している社内イベントです。 プロダクトエンジニアの中から11名の登壇者を募り5分間のLightning Talks(LT)を行います。 登壇者はプロダクトエンジニアに限定していますが、当日は職種によらず社員であれば聴講可能です。 配信もしており、現地参加が難しい社員でもリモートで楽しめるイベントとなっています。
参加者情報
今回のLT大会への参加者以下の通りでした。
- 現地参加者: 36名 (うち登壇者: 11名)
- オンライン参加者: 19名
- 懇親会参加者: 34名
発表内容レポート
今回も色々なテーマで話がありました。今もホットなAIから、開発時のちょっとした手間を解消するツールまで色々あります。 早速レポートに入っていこうと思います!
昨今話題のAIでデータを比較する際にやっていること
発表者は rock_san さん。
昨今何かと話題の「AI」を利用した開発について、ユーザーが入力した文字列に近似するデータを紐づける場合のベクトル化の方法や類似度の比較方法について解説しました。 ベクトル化の方法については、今まではクリーニングや形態素解析など様々な手順を踏まないといけなかったのですが、Azure OpenAI Serviceのembeddings APIなどを利用するとデータを入力するとベクトル化されたデータが返ってくるようです。だいぶ便利になりましたね! 類似度の比較方法についても複数例を挙げ、どの方法がどれに向いているか紹介しました。
データ比較をする際にどのような手順が必要なのか大きな流れを理解することができ、プロダクトに組み込む際の足掛かりとしてとても良い発表でした。
レトロスペクティブ powered by『地面師たち』
発表者は akht さん。
読者の中にNetflixの『地面師たち』を観たことがある方はいますでしょうか? レトロスペクティブのタイムキープのため、Figjamのタイマーで『地面師たち』の名言「もうええでしょ!」という言葉でタイムアップを教えてくれる方法を紹介しました。 Chrome Extensionでchrome.declarativeNetRequestを使って音声ファイルへのリクエストを用意した音声ファイルにリダイレクトすることができるそうです。 注意点として自分しか音声が変えられないのでみんなに聞かせることはできないとのことでした。(残念……!
Chrome Extensionでこんなことができるなんて考えもしたことがなかったので、発想に驚いたとともに、自分もExtensionを色々見てみたら面白い発見ができるかもなと思わされる発表でした。
Active Record入門
発表者は sugamasao さん。
RubyやRubyKaigiがチョットわかる sugamasao さんがActive Recordパターンの解説をベースにRailsのActive Recordについて話しました。
Active Recordパターンについては『エンタープライズアプリケーションアーキテクチャパターン』という本に載っています。作成、読み込み、更新、削除など、それほど複雑ではないドメインロジックに対して優れた選択肢であり、Active Recordの最大のメリットは、シンプルな構造とのことでした。 一方、大規模で複雑なアプリケーションの場合、オブジェクト設計とデータベース設計とが結合しているので設計分析が困難になってしまうことがあるようですが、Fat Modelを解消するためのテクニックや機能があるので、大規模に耐えられない、というわけではなさそうです。
RailsのActive Recordの成り立ちや得意・不得意を理解した上で付き合っていくことが大事という言葉で締めくくられました。
普段何気なく利用している機能に関して、ちょっと立ち止まって「なぜその仕組みなのか」を考えることでより良いコードを書いていけそうですね。
Jiraとわたし
発表者は murano さん。
昔はjiraが苦手だった murano さんが今のチームに入ってJiraを使いこなすようになり、好きになるまでのお話でした。
Jiraイヤイヤ期ではほぼJiraを活用できず、ちょっといいかも期ではGitHub連携などで少し恩恵を受けられるようになり、スプシと連携してポイントを計算するなど自らもJiraでの運用を改善していくことに興味を持ち始めました。
改善確変期では少数で運用が定まっていないチームに入ったことで、今までの経験を活かしつつ、Jiraの運用を毎週変えてより良くすることが楽しくなったそうです。 チケットをコンテキスト(メインのfeatureや改善など)ごとに分けて管理することでプランニング時に改善を少しだけ入れるなどの運用がしやすくなったり、タイムラインで開発計画をすることで短期計画を現在の状況に合わせてリアルタイムに変更することができるようになりました。
Jiraは言うなれば転校してきてクラスに馴染めない子。優しく受け入れてあげることでJiraアレルギーもきっとなくなるとのことでした。
Jiraは多機能でやれることがたくさんあるから逆に何もできなくなってしまうという側面もありそうですね。皆さんもまずは一歩、踏み出してみませんか?
サポートデスクでRAGを頑張るはなし
発表者は 16bit_idol さん。
SmartHRの労務管理機能の開発側サポートデスクでAIの力を借りて負担を軽くするため、回答支援ができるAIを作ろうと試行錯誤しているお話でした。
問い合わせが来た際に、類似の問い合わせを提示してくれるAIを作ることを目指しているそうです。 RAG(Retrieval-augmented generation)という、探してきた情報を元に、生成AIモデルの精度と信頼性を向上させる方法を使用しようとしています。 RAGを使用するための、学習データをエンベディング(数値ベクトル変換)するための情報を作る際、過去の回答を要約してフォーマットを合わせる必要がありますが、こちらもAIに任せるようにしているそうです。
将来的には一次回答までしてくれるAIにしていきたいとのことでした。
ユーザーが増えることで問い合わせも徐々に増えていくため、AIの力を借りて問い合わせの返答速度向上&負担軽減ができるようになるとすごく助かりますね。 また、一次回答までできるAIができるかもと思うと夢が広がりますね……!
マイクロサービスから見るSmartHR のアーキテクチャ
発表者は n9te9 さん。9月入社の入社ほやほやで登壇してくれました!
マイクロサービスとモノリスの境界線について改めて考えた上でSmartHRのアーキテクチャについて考えるという発表でした。
マイクロサービスのメリットとしてデプロイ独立性が挙げられますが、労務管理サービスがデータを持っていることで、他のサービスが労務管理のサービスに依存してしまうため、デプロイ独立性が損なわれてしまっている可能性に言及しました。
組織のスケーラビリティと各サービスへの負荷分散を四象限にマッピングすると、SmartHRが向かうべき方向性が見えてくるかもという話がありました。
改めてSmartHRのアーキテクチャを考えることで、組織の拡大に合わせてどの形が最適なのか、ありたい姿に近づいていけるかもしれないですね。
はじめてのPostgreSQL
発表者は ikkun さん。
とあるカラムを削除するコードを見た際に、インデックスの削除がロック時間に影響するのか気になったことからPostgreSQLのソースコードを読んでみる話でした。
ソースコードの構成はPostgreSQLのソースコードの構造に綺麗にまとまっています。また、gram.yにクエリの構文定義が載っているのでそこから調べたり、生成AIに聞いてみるのも手とのことでした。 実際にソースコードを追いかけて、依存関係の削除がロック時間に影響を与えることがわかりました。 ソースコードを読むことで確実な情報が得られるのでおすすめとのことです。
まず削除の時のロック時間に着目するのがさすがだな、と思いました。細かいところにも意識を向けつつ早く実行できるコードを書いていきたいですね。 また、 ikkun さんは佐渡島に関係があるとのことからスライドの下部にはトキについての雑学が流れていて、そこもみんなの着目ポイントでした。遊びゴコロがありますね!
遊び心のすゝめ
発表者は nomuson さん。
SmartHRのカルチャーや#ScrumMasterWay の スクラムマスターのメタスキルとしても遊び心が入っていることから、実際に nomuson さんのチームで実施した遊び心のある取り組みを紹介してくれました。
スプリントレビューのシナリオに某なんか小さくてかわいいやつを起用することで、ほっこり、シナリオ準備を楽しく、それなりにリアリティがありフィードバックを得やすくなるなどの効果が得られたとのことです。
また、スプリントゴールを川柳にすることで文字が限られるため、スプリントゴールが簡潔になったり、スプリントゴールを覚えやすいと言うメリットが得られたとのことでした。 一方、川柳を考えることが苦手な人は苦手ということで一旦この取り組みは休止中だそうです。
普段の開発の中にも、ひっそりと遊び心を取り入れることで、みんなのモチベーションを上げつつ良い結果を得られるかもしれないですね! スプリントレビューのシナリオは、実際筆者も聞いていてなんか楽しいし、イメージがついてとても良いシナリオでした。
IAMを 調べようとは したけれど(5-7-5)
発表者は hotaka さん。 遊び心のすゝめからの良いバトンタッチで川柳風のタイトルですね!
hotaka さんは権限を管理する機能の開発に携わっており、権限に対する要件は日々高まっているけど、一つずつ対応していくと破綻してしまうかもしれない、という懸念から権限管理の目指す姿の一つとなるかもしれないIAMを調べてみたそうです。
スライドではIAMの構成について説明しました。
実際色々と調べてみた結果、ちょっと求めてる姿とは違うかもしれない、という結論に至ったとのことでした。 ただ、今やっていることとちょっとギャップあるよね!ということ、IAMと衝突しないなんかいい感じの詳細を制御する仕組みを考え続ける必要があるというということがわかったそうです。
実際に日々の開発業務でどうにかしたい!と思ったことを調べてみるのはとても良いトライだなと感じます。 結果として大きな収穫がなかったとしても、そこじゃないということが自分ごととしてわかっているかどうかは大きいですよね。 筆者も意識してやっていきたいと感じました。
YAPC::Hakodate 2024とモチベ 〜 ウィジェット量産計画を添えて 〜
発表者は mktakuya さん。
YAPC::Hakodate 2024でぶち上がったモチベーションを元にSmartHRのダッシュボードに表示するウィジェットの雛形をコマンド一発で生成できるようにしたそうです。
また、今後はウィジェット提供側でやっている認証処理などもパッケージ化していこうとしているそうです。
YAPC::Hakodate 2024でカッコイイエンジニアのカッコイイ話でモチベをあげ、行動を変えてみる、素直さが mktakuya さんの強みかもと言っていました。
元々組み込む手順書がとても丁寧に書かれていて、みんなスムーズに開発ができていたようですが、一歩踏み込んで自動化まで頑張るのはすごいと感じます。 モチベーションが上がるだけでなく、しっかり行動を変えていけているのを見習っていきたいです。
CSV編集を楽にする拡張機能作った
発表者は ymtdzzz さん。
SmartHRにはCSVでデータをアップロードする機能がたくさんあるので、動作確認の際に大量のxx.csvファイルが作成されます。 このCSVファイル、管理がとても大変!ということでCSVをダウンロードせずに編集できるChrome拡張を作ったそうです。 いじれるだけでなく、直接アップロードできる機能も備えていて、CSVファイルをローカルで管理する必要がなくなるようです。
この機能を1週間で作ったとのことで、みんなすごい!となっていました。 地味に苦労するCSVファイル管理にもってこいかと思います。 現在審査中とのことですが、気になる方は ymtdzzz さんのリポジトリでビルドして使ってみることができるとのことですので試してみてください!
記念撮影
全ての発表を行った後、懇親会の前にオフラインで集まった登壇者と参加者による記念撮影を行いました。
懇親会
記念撮影の後は懇親会を行いました!
We Are Hiring!
SmartHRでは一緒にSmartHRを作りあげていく仲間を募集中です! 今回紹介させていただいたLT大会のように、チームの垣根を越えてエンジニア同士で交流する場も豊富です。 少しでも興味が出ましたら、是非カジュアル面談で色々とお話できればと思います!