Classi開発者ブログ

教育プラットフォーム「Classi」を開発・運営するClassi株式会社の開発者ブログです。

オープンセミナー2025@岡山に Classi のメンバーが登壇しました

こんにちは、エンジニアの id:kiryuanzu です。

2025年10月18日(土)に岡山県岡山市のオルガホールで開催された「オープンセミナー2025@岡山」に参加し、「思い切りの情熱、 私なりのアウトプット活動とコミュニティの向き合い方について」という題名で講師として登壇させていただきました。

okayama.open-seminar.org

本記事では、イベントでの登壇・参加を通して感じたことをレポート記事としてまとめていきます。

オープンセミナー岡山について

オープンセミナー岡山は、岡山県岡山市で毎年開催されているソフトウェア技術をテーマにした無料セミナーです。毎年テーマを変えつつ、実行委員会の方々がその年のテーマに合った方を「講師」として指名し、講演する形式となっています。

去年のオープンセミナー2024@岡山では弊社メンバーのmaepon (id:hukuchosan) さんが実行委員長を担当し、 同僚の koki さんが講師として「成長するための努力をやめたエンジニアのこれまでとこれから」というタイトルで発表しています。

今年は「情熱」がテーマとなっており、様々な背景のあるエンジニア・デザイナーの方々が今までのキャリアを振り返りつつ好きなことへの熱意が込められたトークを展開されていました。

登壇を通して

speakerdeck.com

今回の登壇では「思い切りの情熱、 私なりのアウトプット活動とコミュニティの向き合い方について」と題して、自身の学生時代から今に至るまでの活動の向き合い方についての話をしました。
初めての40分の登壇ということで、ちゃんと時間通り話せるかが少し不安でしたが、会場にいられる方々の暖かい雰囲気もありリラックスして挑むことができました。

今回の登壇を通して、自身の活動の向き合い方について改めて言語化し、じっくりと振り返ることができました。
特に、仕事で壁にぶつかっていた時期に行動を見返しながら一つ上の「プロフェッショナルエンジニア」のロールになるまでに至った流れを今回の場で話すことで、今もそれを意識した動きができているかどうかを見返す機会となりました。

発表後には、参加者の方々から前向きなフィードバックをたくさんいただきとても嬉しかったです。お世話になった同僚たちにこの場を通して感謝を伝える機会にもなりました。

参加を通して感じたこと

先ほども述べたように、今回のテーマ「情熱」をもとに筆者含む6名のエンジニア・デザイナーの方々が熱意こもったトークを展開する場となっていました。

https://okayama.open-seminar.org/timetable
オープンセミナー2025@岡山のイベント資料一覧

  • 井上 大輔(a-know)さん: 入りたかった企業での度重ねての挑戦、岡山の地域ITコミュニティ「Okayama.なんか」の運営など、自分のやりたいことに一貫して丁寧に向き合い続ける姿勢を感じられました。
  • 佐藤 弘崇(はすじょい)さん: 「架空言語」を作る情熱についてまず語られていたのがとてもインパクトがありました。そこから言語という概念に対してずっと向き合い続けていたのがとても印象的でした。
  • KOBA789さん: ニコニコ技術部、技術書執筆、YouTube配信での技術トーク配信といった、徹底的に好きなことに向き合っている姿勢が素敵でした。「本気を出してみるのは結構気持ちがいい」と語る姿勢にシンパシーを感じました。
  • 間嶋 沙知さん: ご自身の体験からアクセシビリティの重要性を力強く語る姿勢が印象的でした。穏やかな話し方をされつつもアクセシビリティにまつわるセンシティブな話題も取り上げられており静かなる信念も感じました。
  • 井上 恭輔(きょろ)さん:「境界の彼方」というキーワードをテーマに、シリコンバレーでのキャリア・個人のワイナリー継承、別荘事業への挑戦など、越境に向き合い続ける話をノンストップで話されており圧倒されました。個人的には、初の「境界」として地元から出る「県境」を越える難しさについて、地方出身者の目線で強く共感していました。

イベントのクロージングトークでは、実行委員長の方による各講師に向けてスライド1枚ずつの講評がありとても丁寧な締めくくりとなっていました。

イベント後は「Ryoutei 座・スタジアム」での懇親会にも参加し、岡山の地域ITコミュニティの方々とたくさん交流できました。映画館のようなスクリーンのある施設で、飛び込み歓迎のLT大会も大盛り上がりでした。
参加者のみなさんも講師陣に並ぶくらい「好きなこと」への情熱を持つ方々ばかりで、とても刺激ある時間となりました。

まとめ

40分といった長尺の登壇・岡山でのITコミュニティへの参加など、初めての経験となることばかりで最初はドキドキでしたが、とても楽しく参加できました。
このイベントを通して、まさに今年の登壇テーマでもある「情熱」を持ち合わせた方々にたくさんお会いし、刺激ある時間を過ごすことができました。
このような機会を与えてくださったオープンセミナー岡山実行委員会の皆様にこの場を借りてお礼を伝えたいです。

次回のオープンセミナー岡山の開催も楽しみにしております。ありがとうございました!

Classiのエンジニアが Kaigi on Rails 2025 に参加しました

はじめに

こんにちは、エンジニアの id:kiryuanzu です。 2025年9月26日(金)、27日(土)の二日間で東京駅のJPタワー ホール&カンファレンスにて Kaigi on Rails 2025 が開催されました。

弊社からは2025年度新卒メンバーを含む複数名のメンバーが参加し、弊社メンバーの id:da1chi24 が「Web Componentsで実現する Hotwire とフロントエンドフレームワークの橋渡し」というタイトルで登壇しました。

tech.classi.jp

本記事では弊社エンジニア の id:kiryuanzu、新卒メンバーのakinko、id:nekobitsdreams、yuu.kun、id:kanapiiii の参加レポートをお送りします。

id:kiryuanzu

今回の Kaigi on Rails 2025に参加した id:kiryuanzu です。 去年は2日目のみの参加でしたが、今年は新卒メンバー4名+同僚の id:da1ch24 さん、id:kozy4324 さん と一緒に両日とも現地参加しました。
当日は様々な発表を聴講し、たくさんの刺激を受ける機会となりました。
ここでは 同僚の id:da1chi24 さんの発表と、id:hogelog さんの発表についての感想を述べていきます。

Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し

speakerdeck.com

同僚としてプロポーザルのレビューをさせてもらったり、社内で行われた発表練習会のレビュアーとして関わったりしたのもあり、現地で聴講することができて大変嬉しかったです。
Web Components を Rails に導入する段階的な導入事例をシンプルなものから複雑な内容まで順を追って紹介しつつ、試行錯誤した点についてもしっかり盛り込まれていて15分の中でとてもボリュームのある構成となっていました。
社内の予行練習会では、id:dai1chi24 さん本人から「近い技術構成の他チームがこれから Hotwireを使う際にモチベーションを上げられるような内容を意識している」という話を聞いていました。
その時から更にブラッシュアップされた発表を現地で聞くことができ、これからチームで着手するHotwireでの開発への気持ちが高まりました!

"複雑なデータ処理 × 静的サイト" を両立させる、楽をするRails運用

speakerdeck.com

当日の発表では、実務での経験を元にしたテーマの内容が多くありましたが、その中で筆者の好きなジャンルである個人開発をテーマに話されていた id:hogelog さんの発表も印象に残りました。
CRubyコントリビュータを可視化する「Ruby Contributors」というサイトを個人で開発した過程を述べられている発表でした。
作った動機が「自分のCRubyコントリビュートを眺めたい」という、まずは自分が一人目のユーザーということを意識して作られているのが個人開発ならではの動きだなと感じました。
Railsの開発経験を活かして複雑なデータ処理のバッチを書いてみたり、一般利用者が触れるのは静的サイトのみなのでセキュリティリスクを最小限に抑えることができたりと、無理ない範囲で楽しく運用できるバランスを見出されていました。
筆者自身もいまRails で動く個人のサービスを運用しているため、とても共感できる要素が多くありました。この発表を受けて、自分も手持ちのサービスの改良できそうなところを探して手入れをしたくなってきました。

終わりに

今回は過去最多の新卒メンバー4名の方々と参加し、去年登壇された id:kozy4324 さんに続き id:da1ch24 さんの発表を現地で見ることができたのがとても印象的でした。
ここでは紹介しなかった発表を含め、カンファレンスに参加した週明けの月曜からすぐに役立ちそうな話をたくさん耳にしました。それらの話を思い出しながら、私自身も次回の Kaigi on Rails ではプロポーザルを出せるよう日々開発に向き合っていきたいと思います!

akinko

今回は、新しい用語や知識、そしてスピーカーの方々の経験から得られるティップスを通して、カンファレンスならではの醍醐味を感じられる回でした。スライドや話の内容が難しくても必死に食らいつきながらメモを取り、学びを深めました。Railsひとつを取っても、さまざまな観点や視点から課題や解決策が語られ、その議論は尽きることがないのだと実感しました。さらに、今回のカンファレンスに関連したイベントも多様で非常に楽しく、人との交流もあり、思い出に残る一日となりました。特に印象に残った3つのセッションを紹介します。

Keynote: dynamic!

speakerdeck.com

プロジェクト立ち上げ時には「こういう機能もあったら嬉しいんじゃないか」とアイデアが次々に浮かびますが、そういう瞬間こそ冷静さが求められるのだと学びました。「ハッピーパス」という言葉は初耳でした。最もシンプルで、うまくいきそうなものだけをまず形にすることで、議論や開発、その後の拡張も軽やかかつスムーズになり、より現実的で効率的に進められることがわかりました。今後の業務では、新しい機能や要件が出たときに、まずは最低限の機能を備えたプロトタイプを作るところから始めたいと感じました。

もう並列実行は怖くない コネクション枯渇とデッドロック解決の実践的アプローチ

speakerdeck.com

これまで人間が担っていた作業をAIに置き換える場面は今後ますます増えていくと考えられます。その際、人間の操作とAI処理を並列実行する中で生じる問題は、多くの企業が直面する可能性が高いと感じました。セッションを通じて、別プロセス化やコネクションプールサイズの調整といった工夫によって、コネクション枯渇の課題を解決できることを学びました。特に、数々の問題に直面しながらも原因を丁寧に分析し、設定を見直し実装を重ねることで、リサーチ件数を1日3,500件から45万件へと大幅に拡大させた事例は、大きな成果であり非常に印象的でした。

GraphQL×Railsアプリのデータベース負荷分散 - 月間3,000万人利用サービスを無停止で

speakerdeck.com

テレビ放送後にアクセスが集中し、サービスダウンにつながった事例は決して他人事ではないと感じました。せっかく興味を持って調べてくれた新規ユーザーを失ってしまうのは大きな機会損失であり、こうした現象を事前に防ぐように設計しておくことが重要だと学びました。興味深かったのは、通常時は検索でヒットした商品ページからアクセスするためキャッシュが効いていたのに対し、放送後はサービス名で検索したユーザーが多く、キャッシュを効かせていなかったトップページにアクセスが集中した点です。ユーザーの動きによってシステムへの影響がこれほど変わるのだと実感しました。

Classiでも「欠席連絡」画面に朝アクセスが集中するため、ある程度の動きを予測して対策をとっていますが、今回のように例外的な動きがあった場合でも、その変化を推測し、未然に備える必要があると強く感じました。今後は日頃からユーザーの行動を意識し、柔軟に対応できる設計を心がけたいと思います。

最後に

今回登壇されたエンジニアの方や会社の先輩方が、普段どのようなことを考え、リスクを察知して設計・開発を行っているのかを学ぶことができました。私はまだ新卒でリスクの高い箇所を担当することは少ないですが、「どんなリスクが起こり得るか」を意識してアンテナを張ることは今からでもできます。今後は自社のサービス全体の状態をより気にかける姿勢を大切にしていきたいです。

id:nekobitsdreams

現在、私はRailsをふだん使わないチームに所属しており、Kaigi on Railsでの話についていけるか不安でしたが、Kaigi on RailsではRailsに限らない設計に関する話も多くとても楽しめました。

今改めてServiceクラスについて考える 〜あるRails開発者の10年〜

speakerdeck.com

チーム開発におけるソフトウェア設計の難しさについて考えさせられました。中でもServiceクラスは実際の仕事の現場では出来る限り使わないほうが良いと仰られたのには驚きが有りました。
当初は複数のモデルにまたがる複雑なビジネスロジックを表現するにはServiceクラスを用いるという認識があり、Serviceクラス無しで表現するのはコードの肥大化を招くのではと思っていました。
ですが、講演を聞いていく中で自分の中で一定の理解を得ることができました。それは、チーム開発における「共通認識」の重要性です。Railsなどのフレームワークにおける利点として「どこに何が書かれているか」という共通認識が存在するが、Serviceクラスという層を追加すると、想像がつきにくくなり、全体像の把握が難しくなるということです。Serviceという名前も曖昧で開発者ごとにServiceクラスの解釈がバラバラで実装に差が生じてしまう点も納得です。
一方でServiceクラスが活きる場面も紹介されており、一概にダメでは無いという点も考えさせられました。ServiceクラスやFormクラスはあくまで表現技法の一つに過ぎないので、ドメインコンテキストを理解し、ビジネスの変化に合わせて継続的に改善し続けることを頭におき、チームメンバーや、ユーザーにとって驚きが少ない開発をしていけるようにしていきたいと思いました。

「技術負債にならない・間違えない」権限管理の設計と実装

speakerdeck.com

権限の管理はとても重要です。Classiでは学校に関する情報を取り扱っています。他校の生徒情報や、先生しか閲覧することのできない情報など、権限管理が重要なサービスのため技術的な方法で事故が起きないように取り組むなどの対策を行っています。
そんな中、本講演ではadminという名前の権限を使った判定はアンチパターンだと言う話には正直驚きがありました。多くの記事やチュートリアルでadminという話は出てくるので当たり前の概念として認識していまいた。ですが、実際はadminの中にも様々な役割が出てきてsuper_adminなどの概念も出てきてしまうというのもあるので難しい話だなと思いました。発表の中でも役割が変わったり、機能が追加されたりすることで変わっていくものだと仰られていたようにadminという名前は変更に弱いのだなと知ることができました。

ではどうするのか、adminではない名前を変えた役割を作るのだろうかと思いましたが、そうではありませんでした。役割に依存した実装は権限が暗黙的になってしまうため、レビュアーは常に役割ごとの権限を把握する必要が発生してしまいます。そこでcan_〜〜?(〜〜を実行可能か?)というユーザーが何を行えるのかを明示的に書く方法です。これによりコードの意図は明確となり、役割の変化にも強い実装となるというのには納得でした。実装の方法は更に工夫があったのですが、ここでは省略させていただきます。

権限管理においてもビジネスの変化に合わせて継続的に改善し続けられるということが重要で、変更に強い実装を心がける必要があるのだなと感じました。

最後に

今回、Kaigi on Railsに参加する支援をしてくださったClassiの皆様に感謝いたします。今回は非常に多くの刺激や知識を得られたと思っています。この経験を業務に活かせるよう日々努力していきたいと思います。

yuu.kun

みなさんこんにちは!2025年度新卒エンジニアのyuu.kunです!

今回は、Kaigi on Rails 2025にて設計について興味深い登壇があったので紹介しようと思います。

なぜ「設計」が興味深いか

私が「設計」という分野に強く惹かれるのには、明確な理由があります。
第一に、フレームワークなどの技術は急速に変わっていきますが、その根底にある設計思想自体は変わらない「普遍性」があるからです。
第二に、設計の考え方は、開発だけでなく仕事の進め方など他分野にも応用が効く「汎用性」があるからです。
そして最後に、私自身が研修で悩んだ際、「あの時この概念を知っていれば、もっと楽だったはずだ」と痛感した「実体験」があるからです。
だからこそ、設計は今学ぶべき本質的な技術だと感じています。

Railsによる人工的「設計」入門

speakerdeck.com

株式会社万葉の社長である大場さんの登壇です。 私が所属しているチームにも万葉の方が在籍しており、大場さんがどのようなお話をされるのか気になって拝見しました。

この登壇は、「設計とは何か」を理解するために、まず「設計を体得できていない状態」とは何かを具体的にイメージしながら理解を深めていく、というユニークな内容でした。ここで「状態」という言葉を選ぶあたりがエンジニアらしく、個人的に好きなポイントです。

以前、Classiの研修でゼロからプロダクトを設計する機会がありましたが、その時私が考えたのは「DB→モデル→コントローラー→ビュー」という実装の「手順」でした。しかし大場さん曰く、それは設計ではなく手順である、とのこと。

では設計とは何か。大場さんは、設計とは「逆算」で考えるものだと提唱しています。 まずは「完成したシステム」を想像し、次に「中核的な価値の実現」にフォーカスする。そして「そのためには何が必要か?」を順々に掘り下げ、全体像を明らかにしていくアプローチです。

私が考えたような実装の流れを「順算」とするなら、大場さんの考え方はまさしく「逆算」です。この逆算思考は、作りたいものの抽象的な構想から、必要な要素という具体的な構想へと落とし込んでいくため、様々な場面で応用できます。

また、目的を達成するための手段も複数考えやすく、比較検討しやすいので、初学者でなくても非常に有用な概念だと感じました。 説明が明快で、色々な場面に活かせるお話だったので、エンジニアに限らず多くの方におすすめしたい発表です!

Railsだからできる、例外業務に禍根を残さない設定設計パターン

speakerdeck.com

株式会社坂ノ途中さんのeiichiさんによる登壇です。 この登壇では、避けられない「例外業務」と、その問題にどう立ち向かうかといったテーマでした。

坂ノ途中さんの事業は、生産者からお客様へ野菜を届けるというもので、そういったオペレーションの中で、様々な例外業務が存在するといいます。

しかし例外業務は、引き継ぎが困難だったり、仕様変更時の影響範囲が不明瞭になったりと多くの問題を生み出すため、システム担当者が全てを実装し続けるのは現実的ではありません。なので業務担当者が掌握(運用・メンテナンス)できるようにしていくことが肝心になります。それを叶えるためにeiichiさんが提唱するのが、例外を「設定」として捉え業務担当者が主体的に運用・メンテナンスできるようにするというアプローチです。

ここでの「設定化」とは要件を段階的に実装していく手法を指します。具体的には「変更の多さ」「設定パターンの複雑さ」を軸に、6段階の実装パターンから最適なものを選択・適用します。このアプローチによって過剰な実装や実装不足を防げるだけでなく、段階的に進める中でプロダクトへの理解が深まる「ドメインの蒸留」にも繋がり、システムの柔軟性を高める効果も期待できます。

この「設定」という考え方は例外処理だけでなく、複雑になりがちな業務を処理する上で非常に有効な手段だと思います。

今回の発表を通して、例外業務に向き合う上での考え方について学ぶことができました。

私の現在の業務においても、標準的な機能開発とは異なる例外業務の可能性について考えることがあります。例えば、私が担当している保護者連絡サービス「tetoru」の欠席連絡機能では、欠席・遅刻・早退の理由を、あらかじめ用意された選択肢の中から選ぶ仕様になっています。
以前から複数の学校より「うちの学校独自の欠席理由を追加してほしい」という個別の要望が寄せられていました。この課題に対するアプローチとして、まず、各学校が管理画面から自由に欠席理由を追加・編集できる「カスタマイズ機能」を開発することをチームで検討していました。
tetoru(テトル)プレミアムプランに新機能「欠席連絡カスタマイズ」を2026年4月から提供開始(予定)いたします | Classi(クラッシー) - 子どもの無限の可能性を解き放ち、学びの形を進化させる

このような汎用的な機能開発ではなく、要望をいただくたびに私たちtetoru側が個別に理由を追加していくといった「例外業務」での対応をするといった方法ももう一つの選択肢としてあり得たのではないかと考える機会となりました。

終わりに

今回は、設計というテーマで、登壇されたお二人の紹介をしました。

このように日々の業務課題を解決するヒントやアイデアを見つけられるのも、Kaigi on Railsの楽しみの一つだと感じました。

また、gifteeさんの新卒エンジニアの方との出会いや先輩方に知り合いのエンジニアの方を紹介していただき大変刺激を得られる機会でした。
こういった付き合いは大事にしていきたい限りです!

id:kanapiiii

このたび、Kaigi on Rails 2025 に初めて参加しました。
Rubyは研修の中で少し触れた程度で、私はまだ初学者です。ですが、先輩のid:kozy4324さんid:kiryuanzuさんid:da1chi24さん に案内していただき、緊張することなく交流の場を楽しむことができました。その中で yumuさん を紹介していただき、つながりを持てたことがとても嬉しかったです。

Railsアプリから何を切り出す?機能分離の判断基準

speakerdeck.com

内容を聞きながら「機能分離を判断するのは、機能実装経験が少なく、失敗から学ぶ機会もこれからだと感じたので、まだ自分には先のことだ」と思っていました。ですが、一番心に残ったのは「失敗から学び、判断基準を磨く」という言葉です。
5つの判断軸があり、チームの状況によって重みが変わるため、常に判断基準を磨き続けることが大事だというお話がありました。完璧な分離や実装はなく、状況に応じて変化していくものだと学び、失敗を恐れず挑戦していこうという気持ちになりました。

お友達の発表を聞き、「いつか自分も登壇してみたい」と思うようになり、ロールモデルを見つけられたことが大きな刺激になりました。

Railsアプリケーション開発者のためのブックガイド

speakerdeck.com

日頃から本を読むことが多い私にとって、一番興味を持った講演でした。 本を購入して積読してしまうことが多いので反省していましたが、高橋さんが「読まない・積読する」と話されたのは衝撃的で罪悪感がなくなりました。

特に印象に残ったのは、

  • 「本はみんなが同じものを読める」こと
  • 「共有財」としての価値があること

というお話です。社内で参加している読書会も、まさに共有財として機能していると感じました。Railsに限らず、他の言語を学ぶ際にも参考になる本ばかりで、気づけば紹介された本を購入していました。すでに持っていた本もあり、改めて読み返したくなりました。

今回のカンファレンスでは、知らない単語も多く理解が点になる部分もありました。ですが、それ以上に「もっと勉強したい」という強い刺激をいただきました。

来年は、自分の意見を持ちながら講演を聞けるように、日頃から技術を磨き、本を読み、イベントに参加して学びを深めていきたいと思います。

まとめ

以上、Classiメンバー5名による参加レポートをお届けしました! 来年もぜひ、Kaigi on Rails 2026 でお会いしましょう!

Kaigi on Rails 2025 に「Web Componentsで実現する Hotwire とフロントエンドフレームワークの橋渡し」というタイトルで登壇します

こんにちは、Classiでソフトウェアエンジニアをしている daichi ( id:da1chi24 ) です。

2025年9月26日 (金) から 27日 (土) に、JPタワー ホール&カンファレンスで開催予定の Kaigi on Rails 2025 にて、「Web Componentsで実現する Hotwire とフロントエンドフレームワークの橋渡し」というタイトルで登壇させていただくことになりました。

kaigionrails.org

今回は、このテーマを選んだ背景と、登壇を通じて達成したいことを事前にお伝えします。

このテーマを選んだ背景

私たちのチームでは、2025年に「申請・提出物」と「カスタム名簿」という2つの機能をリリースしました。これらは学校における申請書の提出や集計を電子化し、先生方の業務負荷を大きく軽減することを目的としています。

【申請・提出物】【カスタム名簿】2025年4月正式リリース予定 | 保護者捺印が必要な書類の電子化に! – チエノワ

「申請・提出物」と「カスタム名簿」の開発にあたり、社内で初めてHotwireを導入しました。Rails単体のシンプルな構成でモダンなUIを実現できることに、大きな可能性を感じました。

しかしその一方で、社内には長年培ってきたAngularの知識と、共通ライブラリとして整備された豊富なUIコンポーネントという、無視できない「資産」がありました。

「共通ライブラリという既存資産を活かしながら、Hotwireの恩恵を受けることはできないだろうか?」

この課題を解決するため、私たちは「Web Componentsを橋渡し役として、UIコンポーネントを段階的に導入する」というアプローチを取っています。

その取り組みの過程で得た経験やノウハウが、多くの開発者にとって価値があるのではないかと考えプロポーザルを提出したところ、今回お話しする機会をいただきました。

登壇を通じて達成したいゴール

Web Components は、フレームワークに依存せず再利用可能な HTML 要素を定義できる Web 標準技術です。登場から10年以上が経つ今も、仕様の検討や改善が続いています。

私たちのチームでは、この技術を使って、小さく試しながら段階的に Angularコンポーネントを導入しています。

当日の発表では、共通コンポーネントで構築された画面を題材に、導入したプロセスを紹介します。「これなら明日から試せそう」と思えるヒントを持ち帰っていただくことをゴールにしています。

プレゼン資料から一部抜粋

また、私たち自身もまだ試行錯誤の最中にあるため、同じ課題を抱えるチームとの議論のきっかけになれば嬉しいです。

おわりに

私にとってカンファレンスでの登壇は今回が初めてです。より伝わる内容を目指して、今現在も準備を進めています。

もし「Hotwireを使ったRailsサービスと共通ライブラリとの共存方法」や「Web Componentsの導入事例」といったテーマに興味を持っていただけましたら、ぜひ聴きに来てください。

当日は Classi のメンバーも現地で参加予定です。会場でお会いできることを、楽しみにしています。

新卒1年目に3つのチームを巡る短期留学で得た学び

ソフトウェアエンジニアのいもりです。 昨年度、Classiでは新卒エンジニアの研修として新たな試みを始めました。3つの開発チームを数ヶ月ごとに巡る「短期留学プログラム」です。

私は24年度に入社した新卒エンジニアとして、短期留学プログラムを通じて多くの学びを得てきました。 今回は、このプログラムで得た学びが、学習トレーニングチームに本配属された今、私のエンジニアとしての土台をどのように築き、そして今後どのようなエンジニア像を目指すきっかけとなったのかについてお話します。

短期留学プログラムとは

このプログラムは、座学を終えた*1新卒エンジニアが、複数の開発チームを数か月ごとに巡り、実際の開発現場でOJTを経験するというものです。この取り組みには、新卒側と受け入れ側の双方に、明確な狙いがありました。

新卒側にとってのねらい:

  • 多くの社員とつながりを作り、配属前に人脈を広げること。
  • 研修で学んだ知識を、様々な開発現場で実践すること。
  • 複数のチームを経験することで、会社全体のシステムの全体像を理解すること。
  • チームごとの文化や業務内容を肌で感じ、自身の希望を明確にした上で本配属先を決めること。

開発チーム側にとってのねらい:

  • 新卒メンバーの受け入れを通して、オンボーディングやチーム体制を見直すこと。
  • 将来的なインターンシップ受け入れ体制を整えるためのトレーニングとすること。

これらの狙いのもと、私の短期留学先にはデータプラットフォームチーム欠席連絡チーム、そして現在の所属先である学習トレーニングチームが選ばれました。

次に、それぞれのチームでの経験と学びについて、詳しくお話しします。

各チームでの経験と学び

データプラットフォームチーム

最初に配属されたのはデータプラットフォームチームでした。ここでは、ユーザー向けの機能開発ではなく、社内のエンジニアがより効率的に開発を進められるようにするための基盤づくりを経験しました。 具体的には、BigQuery上のスキャン量が多かったテーブルにパーティションを付与してコストを削減したり、手動でデプロイしていた社内サービスをIaCで管理できるようにしたり、テーブルへのメタデータ付与の自動化を進めるための足がかりを作成*2したりしました。

その中でも、特に印象に残ったのはメタデータ拡充活動の足がかりを作成したことです。

当時、BigQuery上のスキーマにメタデータを付与するには、2つのリポジトリを行き来してPRを作成する必要があり、さらに手動での作業だったため、チームの負担が大きいという課題がありました。

この課題を解決するため、私は 「スキーマファイルに付与されているコメントを、BigQueryのdescriptionに自動で反映させる」 というゴールを設定し、開発を始めました。

開発方針を定めるために書いたメモがあるのですが、今見返すとDesignDocのようなものだと気付きました。当時書いたものは「社内の開発効率化」がテーマでしたが、学習トレーニングチームでは「ユーザーの学習体験改善」がテーマになります。この時の経験は、解決すべき課題の対象が社内からユーザーへと変わっても、そのプロセスは同じだと気づかせてくれる貴重なものでした。

*3

このドキュメントでは、単に作業を効率化するだけでなく、 「社内の意識改革」 という大きな目標も掲げていました。メタデータを付与する作業のハードルを下げ、全エンジニアがより積極的にデータと向き合える文化を作りたいと考えたのです。

この開発は、技術的な挑戦の連続でした。例えば、手動で付与したメタデータが自動生成で上書きされないように工夫したり、Goの go generate コマンドとS3を組み合わせて、安全かつ効率的にファイルを連携させる方法を模索したりしました。

このチームでの経験を通じて、私はプロダクトの表舞台を支える縁の下の力持ちがいかに重要かを学びました。エンジニアがスムーズに開発できる環境を整えることが、結果としてユーザーにより良いサービスを届けられることにつながると実感できたのです。

また、この経験がプロダクト開発を行う上でBigQuery上での分析や、BIツールによるユーザーの活用状況モニタリングへの抵抗を減らしてくれました。自分が改善に携わったことでツールに親しみが生まれ、今ではデータに基づいた判断を自然に行うことができています。

欠席連絡チーム

次に配属されたのは欠席連絡チームでした。データプラットフォームチームとは打って変わって、欠席連絡では実際に先生や保護者といったお客様に触っていただくサービスの開発に携わることになります。 欠席連絡チームは一言で言うと少数精鋭チームです。メンバーは当時の私含めて4人、ミーティングは基本週1回、日頃のコミュニケーションはチャットベーススタイルが特徴です。

欠席連絡チームでは 「チーム開発」ではない開発プロセスを学び、自律した個としての成果を出していくことが求められました。新人ながらも、企画から実装、リリースまでを一貫して担当し、自身の貢献がチームの成果に直結するやりがいを実感しました。

ここでは、学校/保護者向けの「学校確認済」機能の開発に携わり、私は主にフロントエンドの画面設計や開発に携わりました。

学校確認済機能については以下を参照してください。

chienowa.classi.co.jp

自分が関わった機能が、実際にユーザーの課題を解決する様子を間近で見られたことは、プロダクト開発の面白さを教えてくれました。

また、機能開発だけでなく、リリース後の運用やリスク管理も重要な仕事だと学びました。例えば、古いコードベースの書き換えや、ECSのスケーリング調整といった内部改善にも取り組みました。機能を作ったら終わりではなく、その機能が長く安定して使われるように考えることが、ユーザーと会社に対する責任なのだと実感しました。

この学校確認済機能のリリース内容を全社会で発表しました。リリースまでに苦労したことやリリース後の活用状況を話し、良い発表だったと褒めていただいたことがとても印象深いです。

このチームでの経験は、私にプロダクトエンジニアとしての振る舞いを身につけさせてくれました。少数精鋭の環境で、自分の仕事がチーム全体の成功に直接結びつくことを肌で感じられたのは、何物にも代えがたい経験です。そして、ユーザーに届けるサービスを創ることの喜びを知り、これが今後のエンジニアとしてのキャリアを考える上で大きな指針となりました。

学習トレーニングチーム

最後の短期留学先として、そして本配属されたチームが学習トレーニングチーム(以下、学トレチーム)です。欠席連絡チームとは真逆で、チーム開発を重視した、Classiの中でも人数の多い開発チームです。

留学として配属された当初、私は主に生徒画面の改善に取り組みました。 具体的には、課題学習に取り組んだ生徒に自主学習への誘導を促す導線の作成、課題取り組み中の問題数表示、課題一覧画面での取り組み目安時間表示などです。

これらの改善は、もともとあった改善要望をもとに基本的に一人で実装を進めてリリースしたものでした。 また、学トレチームに留学した初日に、「もっと自主学習を使いやすくしたい!」という思いが湧き上がり、留学の締めタスクとして 「今日の一問」 という機能を開発してリリースしました。

chienowa.classi.co.jp

「今日の一問」機能は、DesignDocの作成からフロントエンド・バックエンドの開発まで、皆さんに助けてもらいつつも一通り担当しました。開発中に次年度の新卒研修のメンターも担当し、とても慌ただしい中での開発でしたが、最終的にリリースすることができました。その結果、当初1ヶ月半で7千人程度の利用ユーザーを目標としていたのに対し、2万人を超えるユーザーにご利用いただけました。自分が作った機能が、これだけ多くのユーザーに届いたという事実は大きな自信につながりました。

ただ、これまでの留学中の開発はチームで動くというよりは個人の裁量で進めることがほとんどでした。ユーザーからの改善要望や、私が課題感を持ったものがきっかけであり、大体は一人で実装を進めてリリースしたものでした。

正直に言うと、学トレチームに配属された当初は、欠席連絡チームとのギャップに悩みました。欠席連絡チームでは個の成果が重視されていたのに対し、学トレチームではチームとして動くことが多く、どうしてもスピードが落ちてしまうため、やりたいことが思うようにできないと悩んでいたのを覚えています。

ですが、そんな悩みを抱えながらも、学トレチームメンバーが力を合わせ、大きな機能を開発していくことを目の当たりにしたとき、私も一緒にその輪に入ってチームとしての開発に携わりたいと強く感じました。

本配属後、チームの一員として

本配属後、最初のタスクとしては6月末にリリースした「授業理解課題」の開発に参入し、それからは主にチームの一員として開発に携わっています。「個の成果」を出すところと「チームの成果」を出すところはそれぞれの良さを感じております。

「個の成果」を出しやすい良い点として、例えば「これは一人で進めてあとから確認したほうがいいな」と思ったことはパッと実装し、社内で使っていただくことでスピーディーにフィードバックを得られることです。逆にチーム内で話して合意形成をとり、スムーズに方針が定まって一人では難しい課題解決ができる良さも実感しており、今後はよりそのバランスを重視した動きができるようになることを目指していきたいです。

短期留学の総括

この一年間の短期留学プログラムは、私に大きな成長をもたらしてくれました。

データプラットフォームチームでは基盤を支える重要性とデータ分析の視点を、欠席連絡チームではプロダクトエンジニアとしての振る舞いを、そして学習トレーニングチームでは企画から形にする楽しさとチーム開発の流れを学びました。

異なる3つのチームを経験したことで、一つのプロダクトがユーザーに届くまでの流れ全体を理解することができ、幅広い視点から物事を捉えられるようになったと感じています。技術的なスキルはもちろん、異なる文化や働き方を知れたことは、今後のエンジニアとしてのキャリアを考える上で、かけがえのない財産となりました。

今後の展望としては、「お客様にとって価値を感じてもらうサービスを作って改善していくこと」や、「チーム開発についてより深く学び、貢献していくこと」を意識できるエンジニアになっていきたいです。

まとめ

最後に、今年度の新卒研修も無事に終わり、後輩たちが1回目の短期留学先に配属されていきました。 私も留学生から本配属を経て、今は迎え入れる立場となりました。どうすれば私と同じ「短期留学を経験してよかった」と思ってもらえるかを日々考えています。

短期留学中にはここに書ききれなかった以上に悩んだことや壁にぶつかった経験もありましたが、どれも今の私を形作っています。目の前の課題にがむしゃらに取り組んできたからこそ成長を実感できています。

このプログラムが、今後のClassiのエンジニア育成の一つの形になり、私の経験が後輩たちにも良い影響を与えられれば嬉しいです。

*1:新卒研修を終えた後に書いたブログ記事「24年度新卒エンジニアが研修を終えて」https://tech.classi.jp/entry/2024/09/06/163000

*2:当時のチームリーダーがより技術的な記事を書いてくださっています https://tech.classi.jp/entry/metadata-management-by-dbt

*3:「ソクラテス」はClassiのデータ基盤の愛称です。ソクラテスに関する記事はこちら https://tech.classi.jp/entry/socrates-architecture-2024

データ基盤とデータ活用に関する合同勉強会を開催しました!

こんにちは、データプラットフォームチームの鳥山(to_lz1)です。

この度Classi新宿オフィスで、株式会社マネーフォワードさんとの合同勉強会を開催しました。データ基盤とデータ活用にフォーカスし、エンジニアやアナリストなど広い職種が交わって話す良い機会となったため、その模様を開発者ブログの形でお伝えします。

クローズドな勉強会として実施したため、お伝えできる内容には限りがありますが、勉強会開催の一事例として参考になれば幸いです。

  • きっかけ〜開催まで
  • 当日の流れ
  • 筆者が発表した内容
  • ハイブリッド開催を支えた工夫
  • 振り返り・まとめ
続きを読む

GitHub CI/CD実践ガイド読書会をしたら自社への理解が深まった

こんにちは、SREチーム kaoru.inoueです。

約半年間、「GitHub CI/CD実践ガイド」を用いた読書会を開催しました。 本記事では、その活動内容や参加者の感想を含めてご紹介します。

なぜこの本を選んだのか?

Classiでは既にGithub Actionsの活用が進んでいます。私のGitHub Actions力が弱かったのでキャッチアップを図りたかったのと、同様に困ってる人もいるんじゃないかという点がありました。

GitHub CI/CD実践ガイドについて

gihyo.jp

後半に向かうにしたがって難易度が上がっていく構成になっています。 1〜4章まで読むと構文への理解からCI/CDの構築ができるようになり、 5〜6章で効率化、7章以降はセキュリティと更なる効率化のための知見が詰まっていました。

読書会の進め方

読書会は各章ごとに担当者を決めて進行しました。

  • 各章ごとの担当が章を事前に読んでまとめを準備し、読書会参加者には感想のesaを書いてもらう
  • 前半30分は担当者のまとめと感想の発表30分、SREがその章に関係がありそうなClassiのGitHub Actions の事例解説を5分(あれば)、後半25分でディスカッション

中間振り返り

ボリュームがある技術書は途中で心が折れがちだと思います。中間振り返りを行い「途中で心が折れるのは普通だよ」と共有しておくことで参加のハードルを下げてみました。

その際に出た主な感想は次の通りです。

  • GitHub Actionsの基本概念や設定について、実際に手を動かして理解が深まった
  • YAMLを書いてpushするだけで動き出す仕組みに感動した(2章)
  • ジョブとランナーの役割が最初は理解しづらかったが、実例を見て理解できた(2章)
  • CLIツール(gh run watch)が便利で、CIのログを手軽に確認できるようになった(2章)

特に注目したポイント

  • GitHub Actionsのスケジュール実行時間が10〜30分程度ずれる場合があることが分かり、スケジュール指定を夜間のテスト実行などに利用する工夫を考えるようになった(5章)
  • GitHubの無料利用枠が有限であることを再認識し、コスト意識が高まった(5章)

中間振り替えの様子
中間振り返りの様子

最終的な振り返り

半年間を通しての最終的な振り返りでは、以下のような感想が挙がりました。

  • GitHub Actionsの高度な使い方やセキュリティについて深く学ぶことができ、業務での安心感が増した(8章)
  • 継続的デリバリーに関して、リリースの恐怖を克服するには「慣れ」と小さなリリース単位で成功体験を積むことが重要だと理解した(18章)
  • デプロイのフロー設計を具体的に学び、PRをこまめにデフォルトブランチにマージする重要性を実感した(18章)

読書会で得られたもの

  • GitHub Actionsを体系的に理解できた
  • 他チームの工夫や課題感を共有でき、横断的な知識交流が活発になった

おわりに

私が印象的だったのは

  • 会社の読書会だと自社のコードを使って理解を深められるのが素敵
    • 「Classiでいうと、ここで使ってるよね」と動いてるコードが見れる
  • 400ページ、独りだと心が折れそう
  • 詳しい人の観点からも学びがあった
  • 自社環境での「出来ている」「出来てない」「言わんとしている事は分かる。が、やっていくのがつらい」といった共感がしやすい書籍
  • 個人プロジェクトでも使えるTipsが多い という点が印象的でした

長期にわたる読書会を通じて多くの知見や課題を共有・議論でき大変充実した時間でした。これからも継続的な学習と情報発信を続けていきます。

最後に、この読書会に参加してくれた皆さん、そして素晴らしい書籍を執筆してくださった著者に感謝いたします。

この記事が、GitHub ActionsやCI/CDを学びたい方の参考になれば幸いです。

それではまた!

視覚障害者の声から始まったtetoruのアクセシビリティ改善の取り組み

保護者連絡サービス「tetoru」のプロダクトマネージャーを担当している米谷です。

tetoruは全国5,000以上の教育機関で、200万人を超える保護者の方にご利用いただいています。今回は、ある保護者の方のSNS投稿をきっかけとして取り組んだ、tetoruアプリのアクセシビリティ改善についてお伝えします。

視覚障害のある保護者の声

ある日、視覚障害のある保護者のSNSの投稿が目に留まりました。そこでは、お子さんの通う学校で利用されている連絡アプリの音声読み上げについてやりとりされており、その対応状況によっては視覚障害のある方にとって利用そのものが困難になるケースがあることを知りました。

この投稿を受け、tetoruの保護者向けアプリが、視覚障害のある方にとって不自由なく使えるものになっているかを確認したいと思い、私自身でも音声読み上げ機能を試してみることにしました。

実際にiOSのVoiceOverで操作してみると、テキスト部分については大きな課題はなかったものの、アイコンや画像が使われている箇所で一部が適切に読み上げられていないことに気づきました。

エンジニアへの連携と対応

チームにSNSの投稿内容と検証結果を共有したところ、メンバーが早速実装状況を調査し、いくつかの課題と改修方針を提案してくれました。主な課題は以下です。

  • アイコンの読み上げが不十分
  • ブックマークの操作や状態が不明瞭
  • 未読・既読といった状態変更の対応不足
  • 検索UIの読み上げが不十分

今回の改修では、アプリのトップページでもある学校からの連絡一覧画面のアクセシビリティ対応を重点的に行いました。この画面は学校からの緊急連絡などを確認するために利用されるため、優先的に改善することにしました。

iOSのVoiceOver対応では、要素の役割(accessibilityLabel)や操作のヒント(accessibilityHint)、状態変化への対応(UIAccessibility.post)などの適切な設定を行いました。また、AndroidのTalkBackにおいても、読み上げ範囲をアイコンなどの要素ごとに細かく分割して説明(contentDescription)を設定したり、iOSと同様に状態変化を動的に読み上げる対応を行いました。

さらなる改善としての文字サイズの可変対応

音声読み上げ機能の改善を進める中で、以前から一部のユーザーの方よりご意見をいただいていた「文字サイズが小さい」という課題についても、まずは学校からの連絡一覧と詳細画面について対応しました。

Androidは標準で文字サイズの変更に対応していましたが、iOSでは文字サイズが固定値で実装されていたので、OSの設定に合わせて文字サイズが可変となるよう調整を行いました。

この改善では、デザイナーがiOSのDynamic Typeの挙動を理解するために、SwiftUIを学習して実際にどのように文字サイズが変わるのかといった技術的な理解を深めながら、既存のUIに大きく影響が出ないように文字サイズの定義を提案してくれました。

おわりに

2024年4月から改正障害者差別解消法が施行され、事業者による「障害のある人への合理的配慮の提供」が義務化されました。

今回の対応はウェブアクセシビリティの規格である『JIS X 8341-3:2016』の準拠を意図するものではありませんが、多くのユーザーに日々活用していただく中で、少しでも早く改善することを優先しました。

また、多様な保護者の方への対応という観点では、日本語を母語としない方々にもtetoruを快適にお使いいただけるよう、学校からの連絡を自動翻訳する機能のリリースを2025年9月に予定しています。視覚障害のある方への配慮と同様に、言語の違いも学校と保護者のコミュニケーションにおける大きな障壁となる場合があります。

tetoruは今後もより多くの利用者にとって使いやすいサービスを目指し、引き続きアクセシビリティの向上に取り組んでいきます。

© 2020 Classi Corp.