every Tech Blog

株式会社エブリーのTech Blogです。

OPTiMさんとGolangの共同勉強会を開催しました

OPTiMさんとGolangの共同勉強会を開催しました

目次

はじめに

こんにちは。 トモニテ開発部ソフトウェアエンジニア兼、CTO室Dev Enableグループの庄司(ktanonymous)です。
今回の記事では、先日OPTiMさんと共同で開催した勉強会についてご紹介したいと思います。

勉強会の概要

7月2日(火)に、弊社everyとOPTiMさんとの2社合同でのGoの勉強会 OPTiM × every Golang Developer Night を開催しました。

この勉強会は、OPTiMさんのご厚意により、OPTiMさんのオフィスで開催させていただきました。 受付では各社のノベルティも配られました。また、暑いなか参加上限に近い数の方にご参加いただき、勉強会も懇親会も盛況でした。

受付のノベルティ
受付のノベルティ
会場の様子
会場の様子
勉強会中の風景
勉強会中の風景
懇親会の様子
懇親会の様子

勉強会では、OPTiMさんとeveryからそれぞれメンバーが登壇し、Golangを利用したプロジェクトでの成功事例や課題克服にまつわるLTが行われました。
以下が当日のタイムスケジュールとなっています。

時間 内容
19:30 - 19:35 オープニング
19:35 - 19:40 OPTiM 会社紹介
19:40 - 19:45 every 会社紹介
19:45 - 20:00 LT枠1: Go x LLMで 新たなコード生成の可能性を探る (OPTiM 今枝)
20:00 - 20:15 LT枠2: Go言語で行うメール解析 (every きょー。)
20:15 - 20:30 LT枠3: プロダクトでどれくらいMELTしてますか? (OPTiM 坂井)
20:30 - 20:45 LT枠4: slices/maps pkgを活用してオレオレ実装を撲滅したい (every ayaka.yoshida)
20:45 - 21:00 質疑応答
21:00 - 21:10 クロージング
21:10 - 懇親会

LT枠1: Go x LLMで 新たなコード生成の可能性を探る (OPTiM 今枝)

speakerdeck.com

このセッションでは、Go言語のコード生成について紹介が行われました。
コード生成は、DX向上や品質・セキュリティ向上、パフォーマンス最適化、保守性・拡張性の向上、相互運用性・プラットフォーム互換性の向上などの目的で行われます。 oapi-codegen1 のような api interface や templategen2 のようなテンプレート生成など、 Go言語自体がコード/テンプレートの自動生成をサポートしているため、手軽にコード生成を行うことができます。 そこに、LLMによるコード生成も加わることで、より効率的なコード生成が可能になるという提案に関するお話でした。 コード生成ツールとして、plandex3というGo言語で書かれたOSSも紹介されました。

コードを自動で生成できることで、開発効率が向上し、品質やセキュリティの向上にもつながるため、 LLMを織り交ぜたコード生成を上手く取り込むことで、より効率的な開発が目指せそうだと感じました。

Go x LLMで 新たなコード生成の可能性を探るの発表の様子

LT枠2: Go言語で行うメール解析 (every きょー。)

speakerdeck.com

このセッションでは、Go言語を使ったメール解析について紹介が行われました。
メールのプロトコルの話から始まり、ヘッダーのようなメールの構成などの説明があり、実際にGo言語でメール解析を行う方法についても解説がありました。 メールのメッセージは、RFC28224 で規定されたメールプロトコルで構成されており、 メールヘッダーの情報を利用することで、トラブルシューティングやスパム検出、セキュリティ分析など様々な用途に活用できるようです。
Goではnet/mailパッケージ5が標準で提供されており、 メッセージからヘッダーやボディの情報を取得することで、様々なメール解析を行うことができるとのことでした。

発表中には実際のユースケースの紹介もあり、メール解析の活用方法についてのイメージをより具体的に持つことができました。 ちなみに、Goによるメール解析の実際のユースケースとして、きょー。が弊社everyのテックブログも書いているので、興味のある方はぜひご覧ください。

tech.every.tv

Go言語で行うメール解析の発表の様子

LT枠3: プロダクトでどれくらいMELTしてますか? (OPTiM 坂井)

(発表資料は公開準備中です。公開され次第追記します。)

このセッションでは、MELT6という、モニタリング/オブザーバビリティに関する概念についての紹介が行われました。
MELTとは、システムレベルの懸念を理解するための「モニタリング」とアプリケーションレベルの懸念を理解するオブザーバビリティに関する考え方であり、 SaaSなどの発展で複雑化して管理者による制御が難しくなってきているシステムに対して、 Metrics/Events/Logs/Tracesを基本的な観測可能性のシグナルとして捉えることで、観測可能なシステムの開発ライフサイクルの実現を目指すための概念とのことでした。 OpenTelemetry7 などを用いて、Goでどのように計装し可視化するのか、デモも交えて説明していただけました。

モニタリング/オブザーバビリティの考え方は、システムの問題の特定や解決を行うための重要な概念であり、 Go言語を用いた計装方法や可視化方法を学ぶことで、システムの理解を深めることができると感じました。
また、実際にデモを行っていただいたことで、どのように可視化されるのかが明確になり、ツールの良さをより実感することができました。

プロダクトでどれくらいMELTしてますか?

LT枠4: slices/maps pkgを活用してオレオレ実装を撲滅したい (every ayaka.yoshida)

speakerdeck.com

このセッションでは、Go言語のslices/mapsパッケージの活用方法について紹介が行われました。
Go1.21でslicesパッケージ8およびmapsパッケージ9が追加され、sliceやmapの操作をより簡潔に行うことができるようになりました。 これにより、以前まではforループなどを駆使して自前で実装していた処理を、公式提供のslices/mapsパッケージのメソッドに置き換えることができるようになったということでした。
実際にプロジェクトで使われているコードを新しいパッケージのメソッドに置き換えた例が提示され、コードがより簡潔で可読性の高いものになることが参加者も実感できたのではないかと思います。

Goでは、最低限の機能のみを提供することによるシンプルな言語設計を方針とされていますが、その影響で自前の実装が長大になるケースもあったかと思います。 しかし、slices/mapsのように、公式によるパッケージ提供のおかげで徐々にプログラムの記述が簡潔になってきているのではないかと感じました。
1.22以降でも、ループ変数のスコープの変更やイテレータなど、様々な改善が行われているため、今後もGo言語の進展に注目していきたいと思いました。

slices/map pkgを活用してオレオレ実装を撲滅したいの発表の様子

まとめ

今回の記事では、7月2日(火)にOPTiMさんと共同で開催した勉強会について紹介しました。 LT枠では、Go言語を使ったコード生成やメール解析、MELTを意識したGoによるシステムのmonitoring/observation、slices/mapsパッケージの活用について発表がありました。 それぞれのセッションを通じて、Go言語の新たな活用方法や機能、システムの可視化方法などを学ぶことができ、非常に有意義な時間を過ごすことができました。 最後に、このような機会を提供していただいたOPTiMさん、登壇者の皆様、参加者の皆様、本当にありがとうございました。お疲れ様でした。

最後まで読んでいただき、ありがとうございました。