こんにちは、エンジニアの西條 未来、谷口 実聡、宮崎 真衣です。
2024年5月10日(金)に、第19回 開発合宿を開催しました。
Fusicには、技術力向上を目的に、参加者がそれぞれに好きな技術やテーマを自由に設定し、通常業務から離れて1~2日間の合宿を行い、開発に集中する『開発合宿』という制度があります。
開発合宿では、個人や数名のグループに分かれ、それぞれ事前に決めた内容について開発・発表を行います。
今回の開発合宿は、いつもお世話になっている福岡県古賀市の快生館をお借りして実施しました。
現地参加のメンバーもいれば、リモート参加のメンバーもいます。
西條は2回目、宮崎と谷口は初めての開発合宿。
そして3人とも初めての快生館ということでドキドキ、ワクワクしながら参加しました。
自然が豊かで、いつもと違う環境でリフレッシュしながら開発に取り組むことができました。
参加メンバーの様子や私たちが体験したことをレポートします!
開発の様子
快生館には複数の施設サービスがあり、今回はフリースペースとスモールオフィスをお借りして、各々のスタイルで開発に取り組みました。
どこからか持ってきた棚を台にして開発中……!
私たちも負けていられません、真剣な眼差しです。
広々としたテーブルで開発中(ディスプレイを自宅から持ってきたメンバーも……)
ハンギングチェアで開発中、キマってますね。
新卒3人組、Yogiboを台にお互いに質問し合いながら開発中。
休憩中(お昼・夕食)
お昼
快生館は山の中にあるので、各々車や徒歩でお昼を探しに向かいました。
快生館より少し山奥にある旅館で「茄子田楽丼」を食べたメンバーや、車でカレー屋さんに行って本格インドカレーを食べたメンバーもいました。
一方で、なかなか昼食にありつけず、往復1時間かけてコンビニに買いに行ったメンバーもいました。
コンビニのご飯は、まさに合宿という感じがしてめちゃくちゃ美味しかったそうです。
夕食
日帰り組が帰った後、宿泊組は夕食会を開催。
買い出しの担当を決め、車でスーパーやピザ屋に買い出しに行きました。
買ったものを並べるとちょっとしたパーティーみたいですね。
発表会
翌日の疲れを引きずりつつも、最後は発表で締めます。
朝8時半からオンラインとオフライン合同で開発成果の発表を行いました。
今回はチーム開発よりも個人開発のメンバーが多く、総勢15名が発表を行いました。
業務で使用している技術を使った内容や、全く違う技術についての内容、セールスメンバーがChatGPTを駆使したテトリスを開発するなど、どれも面白い内容でした。
発表できなかったメンバーは後日、開発記事を書いてアウトプットしました。
開発したもの
今回の記事を担当している3人の開発成果を紹介します。
西條
私はサーバーレスで議事録自動生成ツール(名付けて、スーパーぎじろくん)の開発を行いました。
きっかけは、議事録を取りたくない!という強い気持ちです。
絶対に自分を幸せにするんだ!という気持ちで取り組みました。
Slackで会議などの動画を投げたら、いい感じの議事録が返ってくる!ということを目標にしました。
構成図は以下のとおりです。
スーパーぎじろくんを作る上で一番大変だったのは、Bedrockへのプロンプトエンジニアリング(Lambda③の部分)です。
プロンプトエンジニアリングは、生成系AIが適切な返事をくれるように、質問や指示(プロンプト)を適切に設計・調整する技術です。
プロンプトが良くないと、適切な返事は返ってきません。
数時間で、Slackに動画をアップロードしてBedrockから何らかの議事録のようなものが返ってくるところまでは作ることができました。
しかし、出てきた議事録は議事録としての役割を果たしていませんでした。
出てきた議事録はこんな感じでした。
(発言者の名前)
- 今週の予定について説明があった
(発言者の名前)
- 今日から4年目になる新卒の方や6年目などの長期在職の方について説明した
(発言者の名前)
- 給与体系の改定について説明した
(発言者の名前)
- オンライン会議について質問した
(発言者の名前)
- 明日の研修発表会について案内した
(発言者の名前)
- 育休取得について報告した
(発言者の名前)
- 有給取得について報告した
(発言者の名前)
- コーヒーこぼしてしまったことを申し訳なかった
大事な部分が何も残ってないのに、コーヒーをこぼしてしまった話は議事録に残っている……。
今後プロンプトを調整して、適切な議事録を返してくれるようにする必要があります。頑張ります。
宮崎
今回の目的は、GitHub API v4を用いてさまざまな情報を取得するAPIの開発でした。
きっかけは、自分が関わったPull Requestなどの情報から、日頃の自分の開発について可視化したい!という気持ちからです。
普段見ているブラウザ上からは得られない情報がAPIから取得できます。
GitHub API v4を使ってみること、そして処理はPythonで書いてみることが今回のテーマでした。
構成図がこちら。
まずはデータを取得して表示するだけのページを作ろう!ということで、触れたこともあるNext.jsをCloudflare上にデプロイしてみました。
デプロイ自体は簡単でしたがフォーム作成やIP制限の設定に想定以上の時間をかけてしまい……、開発時間の半分以上はAPIよりもクライアント側の作業をしていました。
実際に作成した画面の一部がこちら。
発表があるからとにかく完成させよう!と雑でいいから動くものを作ることを特に意識しました。
その結果、当初の目的から外れることもありましたが最終的には様々な技術に触れることができ楽しかったです。
谷口
私は、今年の春に新卒で入社して、普段はLaravelを使用した研修に励んでいますが、今回は全く別の技術について取り組みました。
今回使用したのは、Kotlin Multiplatform (KMP)とCompose Multiplatformです。
Android Studio上で、開発言語としてKotlin、UIツールキットとしてJetpack Composeを使用し、複数のプラットフォームに適した開発を行うことが可能です。
最近では、FlutterやReact Nativeなどのクロスプラットフォーム開発をよく耳にしますが、同時に開発ができる反面、UIが統一されることでネイティブ独自のUIを守ることができなくなってしまうなどの問題もあります。
その問題を解決するために、Kotlin Multiplatform (KMP) を使用して、バックエンドやその他の共通部分はKotlinで書き、UIはCompose Multiplatformを使用してプラットフォームごとにカスタマイズするアプローチが有効です。
KMPは、共通のコードベースを使って複数のプラットフォーム(Android、iOS、Web、デスクトップなど)向けにアプリケーションを開発するためのフレームワークです。
一方、Compose Multiplatformは、Jetpack Composeの宣言的UIフレームワークを使用して、共通のUIレイアウトを複数のプラットフォーム向けに構築します。
この組み合わせにより、ビジネスロジックやデータ処理を共通化しつつ、各プラットフォームに適したUIを提供することができます。
今回が初めて触る機会だったので、Androidの公式が提供するAndroid向けの学習記事をKMPで再現しました。
Android開発とKMPでは使用しているプラグインなどのバージョンが異なるため、最初の環境構築にとても時間がかかってしまいました。
結果的にはなんとか各々のプラットフォームにあわせた実装を行うことができました。
一つの言語でAndroid、iOS、Webアプリの開発が同時にできるのは本当に便利だなと思いつつ、まだまだKMPについてはわからないことだらけというのが現状です。
Androidが好きなので、今後も学習を続けて、業務で取り入れてもらえるように学んだことをアウトプットしていきたいです。
最後に
初参加の開発合宿、自由にのびのびと取り組んだ開発体験はもちろんのこと、各メンバーの開発の進め方や発表もとても勉強になりました。
こういった時間を会社で用意してくださり本当に感謝です!
また次回も参加できることを楽しみにしています!