【Go Conference 2025】参加レポート - Day 2

こんにちは、BBSakura Networksの松下です。

本日2日目を迎えたGo Conference 2025(以下GoCon)に、BBSakuraのエンジニア6名で参加しました!

今年度のGoConではBBSakuraはブロンズスポンサーを務めており、本日は弊社エンジニアの早坂(@takemioIO)が「Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する」というテーマで登壇しました。 Goに標準で組み込まれたMPTCPをテーマに、実装や運用ノウハウに触れる実践的なセッションでした!

本日2日目は、セッションでの学びや、昨日の懇親会、スポンサーブースの様子を即日レポートします。

会場内の Go Conference 看板

blog.bbsakura.net

発表の様子
発表の様子

⁠印象に残ったセッション

Go1.25新機能 testing/synctest で高速&確実な並列テストを実現する方法

本セッションでは、Go 1.25で追加された新機能 testing/synctestを用いた非同期テストを高速に実行させる方法について紹介されていました。

goroutineを使った非同期なテストには、以前より課題がありました。例えば、別のgoroutineで実行される関数の結果をメインのテストgoroutineで検証しようとしても、実行タイミングが保証されないため、たとえ単純なテストであっても失敗してしまいます。

これまでの一般的な対策は、time.Sleepを挟んで非同期に実行されている処理の完了を待つことでした。しかし、このアプローチにはテスト時間と安定性のトレードオフという問題が伴います。

  • Sleepの時間を長くすればテストは安定しますが、実行時間が長くなる
  • Sleepの時間を短くすれば高速になるが、実行環境によっては処理が間に合わずに失敗する、いわゆる flaky test(不安定なテスト) の原因となる

この課題を解決するのが、Go 1.25で標準パッケージとして導入されたtesting/synctestです。

本セッションでは、synctestの解説と、その重要なコンセプトであるbubble, durably blockedについて、実際の実装例を交えながら詳細に解説が行われていました

発表者からは、実際に社内のテストコードにsynctestを組み込んだ結果も共有され、実装は1〜2時間程度で完了し、実際に高速化を実現できたものの、既存のモックサーバーがそのまま使えず、テスト用にダミーの挙動を実装する必要があった、といった実践的な知見も得られました。

私自身、非同期処理のテストが不安定になり、結果としてSleepを多用してテスト全体が長大化してしまった経験があります。今回のセッションで紹介されたsynctestは、まさにその課題を解決してくれるツールだと感じました。社内のテストコードにも高速化できそうな箇所がいくつか思い当たるため、ぜひ積極的に導入していきたいと考えています。(清水)

panicと向き合うGo開発 - nilawayで探る見逃されるnil参照とその対策

Goのnil参照が原因で発生するpanicとなりうる箇所を検出するための静的解析ツールuber-go/nilawayについてのセッションでした。

標準パッケージに同梱されているnilnessでは、err ! = nilなら有効な値を返すという前提のもとで解析を行っています。

この前提に基づかない、関数やパッケージの境界を跨いだnil参照をnilawayでは検出することができます。これを実現するためnilawayは、プログラム中のnil値のフローを2-SAT問題としてモデル化しています。

  • nilが入りうる箇所の次もnilが入りうる(nilable制約)
  • nilが入ってはいけない箇所の前にもnilが入ってはいけない(nonnil制約)

このモデルにおいてnilableとnonnilとの矛盾の発生を検知することで静的解析を行っています。

しかし、以下のような場合は誤検知(偽陽性)の可能性があります。

  • net/httpのClient.Do()の返り値

      loc := resp.Header.Get("Location")
      if loc == "" {
          // While most 3xx responses include a Location, it is not
          // required and 3xx responses without a Location have been
          // observed in the wild. See issues #17773 and #49281.
          return resp, nil
      }
    
    • respが空だがerrorもnilの可能性がある、とnilawayは指摘
    • ステータスコード300台のときにerror = nil, Body = nilで返る仕様なので、それを前提に実装している場合、偽陽性となってしまう

これらの誤検知の対処として、nolintディレクティブの付与による回避やPRを送るなどが挙げられていました。

nilawayを導入することで大半のnil参照を防ぐことができるとのことで、導入価値は大きいと感じました。 nilawayがnil参照の複雑な問題へどのようにアプローチしているのか、http.Client.Do()のような身近な例でなぜ偽陽性が起きるのかを知ることができ、静的解析を身近に感じることができました。(外山)

Goのビルドシステムの変遷

このセッションでは、Go 言語のビルドシステムの進化を、歴史的背景とともに振り返って解説されました。初期の Makefile 時代から最新の Go Workspace に至るまでを時系列で追い、長年にわたる改善の歩みも示されました。

冒頭、Go が登場した当初の状況が紹介されました。最初期は Makefile によるコンパイル管理が行われており、その後 2010 年に goinstall が登場しました。さらに Go 1.0 のリリースで go get や go build が導入され、設定より規約を重視する思想のもと、手動での依存配置や Makefile の記述が不要となり、大きな前進を遂げました。しかし当時の go get にはバージョン管理の概念がなく、常に最新の HEAD を取得する仕組みだったため、依存関係の衝突や再現性のないビルドといった問題が残っていました。

2015 年に導入された vendoring はその暫定的な解決策でしたが、依存パッケージを vendor 以下にコピーする手間や、依存バージョンの管理が分かりにくいといった不満は依然として残っていました。その後、godep、gopkg.in、glide、gb などコミュニティ発のツール、さらに Go チームによる dep の提供といったさまざまな試行錯誤が続きました。

こうした経緯を経て、2018 年に vgo が登場し、翌年には Go Modules が正式に導入されました。go.mod と go.sum による標準化やモジュールキャッシュの導入によって依存管理は大幅に改善されました。しかし、依存先リポジトリが落ちるとビルドできない、リポジトリのタグが変更されると再現性が失われる、オリジナルリポジトリに過大な負荷がかかる、といった新たな課題も浮上しました。これを解決するために導入された Module mirror と Checksum DB は、セキュリティと可用性を大きく向上させました。

長期にわたる進化の過程においても、Go のビルドシステムは後方互換性を保持していました。さらに、直近では大きな変更も落ち着いて安定期に入っていると紹介されていました。

Go を使い始めてまだ 1 年ほどの自分にとって、このセッションは知らなかった歴史や背景を知る貴重な機会となりました。普段触れているのは最新の Go 環境だけなので、GOPATH や vendoring、さらにはコミュニティ主導で多くのツールが乱立していた時代のことをほとんど知りませんでした。go.mod や GOPROXY が当たり前に使える背景には、こうした試行錯誤の積み重ねがあることを実感し、Go の進化の裏にある工夫や苦労を改めて感じました。(平山)

Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する

Go v1.24からデフォルトで有効になったMPTCP(Multipath TCP)について、弊社エンジニアの@takemioIOが発表を行いました。本セッションでは、MPTCPの概要、Goにおける実装状況、さらにLinuxで培われた運用ノウハウが紹介され、非常に濃密な内容となりました。

MPTCPは、TCPをマルチパス化する技術であり、従来のTCPの利便性を維持しつつ、下層で複数のTCPコネクションを束ねる仕組みを提供します。主なメリットは以下の通りです。

  • シームレスなハンドオーバー
  • 帯域の集約
  • 最適経路の選択

Apple MusicでMPTCP導入により音楽再生の停止回数や停止時間が減少したことや、Korea TelecommunicationがWi-Fiと4G LTE回線を組み合わせることで800Mbps超の帯域を実現したことが実際の活用事例として挙げられてました。

一方でMPTCPは万能ではなく、既存のミドルウェアとの相性に課題が残ります。発表では特にロードバランサー(LB)との関係に焦点が当てられ、LB経由での利用においては以下の工夫が必要であると解説されました。

  • Subflowのパスが重複しないように制御する
  • クライアントから直接到達可能なサーバーアドレスを渡す

これらをサーバー側で実現することで、LB環境でもMPTCPを安定的に利用できます。

Linuxにおいてはすでに豊富なMPTCP関連ノウハウが蓄積されており、Goの標準ライブラリでのMPTCPサポートも今後さらに成熟していくことが期待されます。

本セッションを通じて、MPTCPの利点と課題をよく理解でき、実装や運用に関わるエンジニアにとって学びの多い時間となりました。濃厚で歯応えのある発表でありつつも、GoとMPTCPの今後の発展を期待させる内容でした。(松下)

発表資料

スポンサーブースの様子

スポンサーブースでは、各社が趣向を凝らした展示やノベルティを用意しており、とても楽しめました。スタンプラリー形式になっていて、スタンプを集めるとくじを引くことができ、景品が当たります。筆者は運良く「Go飯」をゲット!セッションの合間の良い息抜きになりました。

スポンサーブースの様子

懇親会の様子

懇親会は前日の開催でしたが、多くの参加者と直接話すことができ、とても有意義な時間となりました。技術的な知見だけでなく、キャリアや日常的な取り組みについても共有できました!

懇親会の様子

まとめ

2日間にわたる Go Conference 2025 もついに終了しました。

最後の8連続LTも非常に盛り上がりがありました!

セッションでの学びはもちろん、スポンサーブースや懇親会を通じて新しいつながりや刺激を得ることができ、とても充実した時間となりました。

来年もまた、この熱気ある場に参加できることを楽しみにしています。

閉会式の様子

【Go Conference 2025】参加レポート - Day 1

こんにちは、BBSakura Networksの外山です。

本日から2日間で開催されているGo Conference 2025(以下GoCon)に、普段からGo言語で開発をしているBBSakuraのエンジニア6名が参加しています!

今年度のGoConでは、BBSakuraはブロンズスポンサーをしており、2日目には早坂(@takemioIO)が「Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する」というテーマで登壇します。

blog.bbsakura.net

本ブログでも、BBSakuraの若手メンバーを中心に2日間に渡って、セッションやワークショップでの学びや会場の様子を即日レポートします。

会場内のGo Conference看板

⁠印象に残ったセッション

Go1.24で進化したmap型について理解する

Go1.24で進化したmap型について理解する のセッションをみました。 内容は1.24 Runtimeにあるbuiltin mapをSwiss Table ベースの実装に置き換わった性能改善についてでした。 Swiss Tableによる map実装の階層構造の紹介と階層上位オブジェクトから下位オブジェクトを探索する処理の説明をしていました。 それぞれのアルゴリズムによる改善ポイントを列挙してくれていて、その場で分からなくても調べやすくて助かります。

Swiss Table版の map の内部は Directory, Table, Group, Slots という4階層で構成されています。

  • TableSwiss TableGroup, Slot で構成されている
  • mapExtendible hashing によって Directoryを経由してTable を引き当ている

Swiss TableQuadratic probing, Control word など仕掛けが多く SIMD 命令も活用しやすく面白いかったです。 ただ自分はリハッシュのコストを下げるために採用された Extendible hashing に興味を持ちました。利用する tophash を階層化してリハッシュ範囲を狭めているのは面白かったです。 実装詳細はソースコードblogを当たると良いのです。

最近のリリースノートのRuntimeはGCを中心にメモリ管理の話が多く、あとは panic の扱いやトレースの問題が多い印象でした。 1.24ではマップの性能改善が入っています。頻繁に利用されるmapのデータ構造が差し替えられバージョンアップするだけで性能改善のはありがたいですね。

久しぶりに Go Conference 2025 に参加しました。単なるキャッチアップではなく調べにいくきっかけになるのでよかったです。(金井)

サプライチェーン攻撃に学ぶmoduleの仕組みとセキュリティ対策

このセッションでは、2025年2月に判明したGo言語モジュールのサプライチェーン攻撃の事例を基に、Go Moduleの管理とセキュリティの仕組みが紹介されました。

今回の事例では、タイポスクワッティングと、Go Moduleの不変性の悪用を組み合わせた巧妙な手口となっていました。 具体的には、

  1. github.com/boltdb/bolt に対して名前を似せたgithub.com/boltdb-go/boltという悪意のあるパッケージを準備
  2. それが最初にgo getされた段階でGo Moduleのキャッシュに記録される
  3. このタイミングでgithubのタグを正規のものに付け替えて、自身の痕跡を隠蔽する

という手法が取られていました。「一度キャッシュされたモジュールは永続的に利用可能」という特性が悪用され、プロキシ経由で悪意のあるパッケージを配布され続ける事態となりました。

もちろん、Go言語にも悪意のあるパッケージの配布を防ぐための対策が用意されており、主に以下の3点が紹介されました。

  • MVS(依存関係の中から常に最小の互換性のあるバージョンを選択する仕組み)
  • go.sum ファイルによるローカルでの検証
  • Checksum DB によるグローバルでの検証

しかし、これらの対策は正規のパッケージが改ざんされることを防ぐものであり、今回のようなタイポスクワッティングを発端とするようなサプライチェーン攻撃への対策としては限界があります。

Goのセキュリティ機能は非常に強力である一方、万能ではないことが明らかになったため、既存の機能でカバー出来るセキュリティの範囲を正しく理解し、それ以外の場所については、開発者による注意深い判断が求められると結論付けられました。

本セッションを通じて、ツールの能力と限界を正しく理解し、それらがカバーできない領域を人間が補う意識を持つことが、巧妙化するサプライチェーン攻撃からプロダクトを守るために不可欠であると感じました。近年トレンドとなっているAIコーディングも、もし開発者がチェックを怠れば、今回のような脅威を招きかねないため、ツールを賢く利用しつつも、最終的な責任は開発者自身にあるということを改めて認識する必要があると感じました。(清水)

Go で WebAssembly を利用した実用的なプラグインシステムの構築方法

本セッションは、Go言語と WebAssembly (WASM) を用いたプラグインシステムの構築方法について、実運用で得られた知見を基に解説したものでした。1 年半以上にわたる本番環境での運用から得られた具体的な経験が紹介されました。

冒頭、WASM をプラグインシステムに利用するメリットが示されました。サンドボックス機構によって悪意あるプラグインの実行(例: rm -rf /)を防げること、プラグインがクラッシュしてもホストアプリケーションに影響が及ばないこと、一度ビルドすればどこでも動くという高い移植性を持つことなどです。これらの特徴は、従来の Shared Library や RPC ベースのプラグインシステムでは解決が難しかった課題を補うものです。

一方で、WASM 導入にはいくつかの問題があることも紹介されました。

このセクションは、以下の3つの主要な問題が「壁」として紹介され、それらを乗り越えるための方法も示されました。

  • Network Socket / TLS の壁

    • 課題: GoのWASI P1ビルドでは、Network Socketが未対応で、sock_recvsock_sendの実装が存在しない、TLSを扱う際には、システム証明書ストアがないため、証明書を明示的に指定しない限り検証が失敗する
    • 解決策
      • dispatchrun/wasi-godispatchrun/netを組み合わせることで、Network Socketに対応

      • プラグインビルド時に、go build -overlaylinkname directiveを使い、標準ライブラリの実装をWASI P1用の動く実装に置き換えるアプローチで解決できる

      • net.DialContextcrypto/x509.(*Certificate).Verifyなどをホストの処理に委譲し、セキュアな実行を実現

  • コマンド実行の壁

    • 課題: GoのWASI P1ビルドでは、exec.Commandがサポートされていない
    • 解決策
      • 標準ライブラリの置き換えを利用し、

        os/exec.(*Cmd).Start/Stopをホスト関数に委譲

      • これにより、ホスト側で実行したくないコマンドを弾くなど、よりセキュアな実行が可能

  • 並行処理の壁

    • 課題: WASMインスタンスはシングルスレッドで非同期割り込みがないため、Guest関数を抜けると非同期処理も停止する
    • 解決策
      • wasmexportを使用せず、main loopでHostからのリクエストを待ち受け、ランタイムが停止しないようにする
      • HostとGuest間でs.Pipe()を使って通信し、HostはGuestのSTDINにリクエストを送り、GuestはHost関数を使ってレスポンスを返す

本セッションを通じて、WASM がプラグインシステムにもたらす可能性と、それを実運用に落とし込むための課題、さらに具体的な解決策を学ぶことができました。ツールの能力と限界を正しく理解し、カバーできない部分を開発者が補う意識を持つことの重要性を改めて実感しました。(平山)

全てGoで作るP2P対戦ゲーム入門

このセッションでは、複数言語を組み合わせて進められることの多いゲーム開発を、Go 言語だけで完結させる取り組みについて紹介されていました。「Go だけでゲームを作る」というアプローチは、シンプルで統一的な開発体験を実現するための一つの可能性として非常に興味深く感じました。

以下の通信要件を満たすゲームが紹介されていました。


  • マッチングはインターネットを介して行う
  • 自分と対戦相手のターン性を保つ仕組み
  • プレイヤーの操作は入力と出力のみで完結させる

実際に遊べるQRコードも紹介されていました。 また、ゲーム開始までの流れも具体的に解説されました。


  • 画面描画には Ebitengine を利用し、HTTPやCSSを利用せずに壁画を実現
  • マッチングには WebSocket を採用し、対戦相手との接続を確立
  • 実際の対戦は Ayame を用いた P2P 通信によって低遅延を実現
  • ゲーム開始後のデータ連携は channel を活用し、Go らしい並行処理でターン制を実装

このように Go のライブラリを組み合わせることで、ゲームの全体像がひとつの言語で構築されていく点が印象的でした。特に channel を使ったデータ連携は、Go ならではの強みをうまくゲームに応用していると感じます。 個人的に自分も対戦ゲームをよく遊ぶので、設計や仕組みの話をとても楽しく聞くことができました。Go 言語でゲームを作ることによって、言語が持つ高速な処理性能や並行処理のしやすさを活かしつつ、開発の一貫性や保守性が高まるメリットがあるのではないかと思います。 実際の商用レベルの対戦ゲームでは、ターン制よりもリアルタイム性が重視されることが多く、処理する要素も膨大になるため、さらなる工夫や技術の積み重ねが必要になるでしょう。しかし、今回紹介されたアプローチは「まずはシンプルにゲームの骨格を作る」ための非常に良い実践例であり、Go がゲーム開発分野においても可能性を秘めていることを実感しました。今後の発展にも期待したい内容でした。(松下)

発表資料

ワークショップ

Day 1 では、事前に申し込みが必要なワークショップも開催されました。

†開発を加速させる黒魔術講座†

「黒魔術」という怪しげな響きに強く惹かれ、このワークショップに参加しました。

このワークショップは、提示された8種類のテーマの中から、各自が興味のあるものを選んで自由に取り組むという形式でした。 テーマは、build時に特定の処理をフックさせるtoolexecのような実践的なものから、Goアセンブリでの関数実装、unsafeパッケージを使った非公開フィールドへのアクセスといった、まさに「黒魔術」と呼ぶにふさわしいマニアックなものまで多岐にわたりました。

会場では4人1組ほどのグループに分かれ、約1時間で各々が選択した課題に挑戦。その後、課題を通して得られた知見やテクニックをグループ内で共有し合いました。

自分はtoolexecに挑戦し、go buildした際にgopher君のAAを表示させたり、各処理のプログレスバーを表示させる処理をhookさせました。 これを応用すれば、各Packageのコンパイルにかかる時間なども計測できそうなので、CI/CDでも活用できそうだと感じました。

普段の業務ではなかなか触れることのないテクニックを学ぶことができ、好奇心が大いに満たされる楽しい時間でした。

このワークショップの資料はオープンソースとして公開されているので、ディープなテクニックに興味がある方はぜひ挑戦してみてはいかがでしょうか。(清水)

github.com

TinyGo + Gopherくん基板で遊ぼう

普段は電子工作に関わることがありませんが、Gopherくん基板の可愛さに惹かれて参加しました。

参加者には、GopherくんのマスコットキャラクターのGopherを型取ったオリジナル基板やセンサー、ブレッドボードが配られました。参加者はほぼ全員、Goは書いているけれどTinyGo未経験とのことでした。

今回のワークショップでは、ブレッドボードを用いて配線をし、すでに書かれているGoのプログラムをTinyGoでコンパイルし、それをマイコンボードに書き込む作業を行いました。

フルカラーLEDを光らせたり、赤外線通信を行ったり、液晶画面にGopherくんを映し出したりという作業を行いました。

Gopherくんを映したGopherくん基板

短時間だったので用意していただいたコードをそのまま動作させる、で終わってしまったのが残念ですが、実際に動かすことができてとても楽しかったです。 同様のプログラムはいろいろなところで開催されていそうで、機会があれば皆さんにも参加していただければと思います。(外山)

Goのカードゲームで遊ぼう

Sendai.go発進のオリジナルカードゲームを体験してきました!

Goを書いていなくても楽しめるカードゲームですが、カードの背面にあるデザインのコードは実際に動作するらしく、細部にこだわられています! カードゲームの様子

まずはプレイのお手本を見せていただきました。その後、他の参加者とコミュニケーションをとりながらゲームを進め、最後にはオリジナルの追加ルールを考えてプレイしました。 ゲーム性もあり、他の参加者とコミュニケーションを取る良い機会となりました!(外山)

まとめ

今回のGoConは、参加⁠申し込み開始から1週間後にはチケットが完売しており、それくらいの盛り上がりが会場からも伝わってきました!

Go Conference 2025 Day 1 が終了しました。開会から夜までセッションが盛り沢山で、Goコミュニティの熱気を直接感じることができました。

Day 2も引き続き、このブログでレポートをお届けします!

BBSakuraのメンバーはオリジナルのステッカーを持っています。登壇する早坂はもちろん、Tシャツを着たメンバーを見かけた際には、ぜひお気軽に声をかけていただけると嬉しいです! オリジナルTシャツを着た社員

BBSakura は Go Conference 2025 にブロンズスポンサーとして協賛しています

BBSakura Networks(以下「BBSakura」)は、明日 9 月 27 日から開催される Go Conference 2025 にブロンズスポンサーとして協賛しています!

gocon.jp

こんにちは。BBSakura で技術広報をやっている、みずき @n0mzk です。

この記事では、初めて Go Conference に協賛することにした背景や、Go Conference 参加に向けた社内の取り組みをご紹介します。

協賛の背景

BBSakura が開発する OCX などのプロダクトは主に Go 言語で開発されており、社内でもっともよく書かれる言語となっています。

カンファレンスの協賛や登壇・参加を通して Go コミュニティに継続的に貢献したいと考え、今回初めて Go Conference のスポンサーに応募しました。

せっかくスポンサーするならスポンサーセッションで BBSakura 内での Go の利用について話したい、ブースを出して他社のエンジニアと交流したい、と考え、スポンサーセッションとブースなどのベネフィットがある「Goルド」プランで応募しました。

Goルドプランは抽選で 2 社しか当選できません。狭き門をくぐり抜けられず、シルバープランの抽選にも外れ、ブロンズスポンサーとなりました。

Go Conference ホームページへトップに会社ロゴを、ホームページ内ジョブボードにロゴとリンクを掲載いただいています。

次回以降もスポンサー応募を継続して、Go コミュニティへの参加を続けていきたいと考えています。

社内エンジニアの参加を促す取り組み

会社としてだけでなくエンジニア個人としてもコミュニティに参加していってもらいたいと考え、登壇やカンファレンス参加への取り組みも行いました。

登壇を目指す取り組み

エンジニアには、ぜひ社外に向けた発信をしてもらいたく、プロポーザル応募を促しました。

Go を使って良い取り組みをしているメンバーに声をかけ、プロポーザルとして組み立ててみないかと誘いました。

声をかけたメンバーは全員快諾してくれ、複数のプロポーザルを出すことができました。

OCX のリファクタを推進しているエンジニアは、データベースを利用した go test が「ビジネス的価値・技術的価値を担保するため」ではなく「テストを成功させるため」になってしまいつつあった状況を改善するために dockertest ライブラリを導入した話を、チャレンジセッションとして応募してくれました。

モバイルネットワークエンジニアは、Go で書かれた OSS モバイルコアの事例を紹介したり、Go 製モバイルコアを構築・運用する中で得たプロトコル処理などの知見を解説するというロングセッションのプロポーザルを出してくれました。

非エンジニアも 1 件プロポーザルを出しました。BBSakura では、企画職のメンバーも Go を使ってプロダクトコードを書くことがあります。企画職の人間が開発をやろうと思った動機や経験と気付きについて、チャレンジセッションとして応募してくれました。

早坂 @takemioIO は「Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する」というセッションで応募し、採択されました!

Day 2(9/28) 11:40 から Room 1 にて登壇しますので、ぜひ聞きに来てください。

gocon.jp

惜しくも採択されなかったセッションについても、社外に向けて発信しようと積極的にチャレンジしたことは大きな成果でした。今後の機会に登壇してもらいたいと思っています!

カンファレンスに行く人を増やす取り組み

登壇の機会はなくともコミュニティに参加してもらいたいと考え、技術広報チームとしてエンジニアに対して参加の後押しをしました。

BBSakura のエンジニアの人数は増えてきていますが、社外の勉強会に参加したり、カンファレンスで登壇したりと外に出ていくメンバーはまだ一部に限られています。

私自身にとって社外のコミュニティが良い刺激になっていること、業務にも社外で学んだことが活きていることから、他のエンジニアたちにもどんどん社外に出て刺激を受け、また、刺激を与えてほしいと思っています。

今回はメインで使っている言語のカンファレンスということもあり、普段あまり社外に出ないエンジニアも参加する良い機会です。社外イベント経験のあるメンバーが一緒に参加することでハードルを下げようと、若手を中心に参加の誘いをしました。

また、会場での存在感を高めようと、おそろいの T シャツも作りました。

他社の方たちがおそろい T シャツで目立っているのを見て、いいなー、と思っていたのです。

Tシャツの表面・裏面のイメージ画像。グレーのTシャツの左胸にBBSakuraロゴ、左袖に「Enabling a Connected Future」の文字、背面襟下にBBSakuraロゴと「BBSakura Networks」の文字が入っている。

参加メンバーは BBSakura ロゴや OCX ロゴのステッカーを持っているので、T シャツを着たメンバーに声をかけて受け取ってもらえたら嬉しいです!

当日の様子もブログや SNS で発信していく予定です。ぜひフォローしてお待ちください!

NotebookLMでOCXの解説動画を作りました

こんにちは!BBSakura Networks株式会社でクラウド接続を担当している赤羽です。

今回は、GoogleのAIツール「NotebookLM」を使って、BBIXのOpen Connectivity eXchange(OCX)の解説動画を作成してみました。

ソースとなるURLやドキュメントを指定するだけで、AIが自動で動画解説を生成してくれます。実際に試してみたところ、以下のような出来上がりです(すごい!)

この動画のソースはOCXドキュメントサイトのクイックスタートを指定しています。NotebookLMのすごさはもちろん、OCXの魅力もわかりやすく伝わる内容になっていると思います。ぜひご覧ください!


NotebookLMの設定について

動画のソースとして指定したのは、以下の2つです。

①URL:OCXドキュメントサイトのクイックスタート

②テキスト:NotebookLMの右下から「メモを追加」で作成し、ソースとして指定

(テキストに記載した内容はこちら↓)

  • 音声解説には他社商標を含めない
  • 「**」「**ブロック」は使用しない(**は某有名ブロック玩具です・・)
  • 動画内のテキストは自然な改行にする
  • 全体で10分以内に収める

※動画解説メニューのカスタマイズでもこのあたりの指定が可能なようです。

この2つをソースに指定し、「動画解説」をクリックすると、数分でこの動画が完成しました。

"NotebookLMのコンソール画面。ソース選択箇所と動画解説を生成するボタンを赤枠で表示"
NotebookLMコンソール

テキストのソース無しで動画解説を作成した場合、OCXを某有名ブロック玩具に例えてくれて非常にわかりやすかったのですが、プロモーション動画としては適切でないと判断し、具体的な商品名は使用しないようにしました。

動画内のテキスト改行の指示については、意図したとおりには反映されませんでしたが、全体的なクオリティとしては十分満足のいくものでした。

ノートブックの作成数や音声生成数などの制限が異なりますが、無料のGoogleアカウントでもNotebookLMを利用できます。ぜひ一度試してみてはいかがでしょうか?

以上です。

代表のバトンを受け取りました

代表就任のご挨拶

このたび、BBSakura Networks株式会社の代表取締役社長に就任いたしました川畑 裕行(かわばた ひろゆき)です。

まずはじめに、これまでBBSakura Networksを支えてくださったすべての皆さまに、心より感謝申し上げます。 設立から5年を超え、次のステージへと進もうとしているこのタイミングで舵取りを任せていただくことになり、身の引き締まる思いです。

技術者としての原点とBBSakuraとの歩み

2015年にさくらインターネットへ新卒入社し、通信が大好きな技術者としてのキャリアがスタートしました。 この「通信」という技術領域は、今でも自分の根幹にあるものであり、技術者として、そしてこれからは経営者としての判断軸でもあり続けると思います。

2019年はBBSakura Networksの立ち上げにあたり、さくらインターネットから出向という形で参画し、以来「ショートメッセージサービス」や「Open Connectivity eXchange」といったサービスの立ち上げに携わってきました。 特にOCXは2013年から温められていた構想がようやく形になるタイミングでの参画となり、初期の設計・開発にはじまり、サービス提供体制の整備や事業戦略の検討・営業チームとの提案活動まで、いち開発者としての役割を越えて、徐々に事業企画全体へと関わりを深めていきました。最終的には開発責任者として、多くの同僚とともに試行錯誤を経てサービスを形にしていきました。

代表への転換と関わり方

これからも変わらず技術者として開発に関わり続ける気持ちで経営に臨もうと思っています。 技術が商売道具であるこの会社において、その意味や意図・本質を理解しないまま意思決定をすることのないよう、自ら手を動かし、日々アップデートを重ねていきたいと考えています。

会社規模や社会情勢の変化など、いつかは現場から一歩引いてより俯瞰的な判断を優先せざるを得ない場面が来るかもしれません。 しかし少なくとも今は現場に立ち続け、メンバーとの対話を重ねながら、エンジニアリングに根ざした判断をひとつずつ積み上げていく。 それが、この会社を少しでも前に進めていく力になると信じています。

最後に

私たちはまだ成長過程にある小さな組織ですが、その分柔軟で変化を受け入れられる強さがあります。 これからも社内外の多くの方と関係を築き、BBSakura Networksらしい形で社会に貢献していく所存です。

引き続き、どうぞよろしくお願いいたします。

2025年7月 川畑 裕行

榎本、BBSakura 副社長になったってよ

このたび、BBSakura Networks株式会社の代表取締役副社長 兼 COOに就任いたしました榎本です。

前任の代表・佐々木、CMO・山口が築き上げてきた意志と挑戦のマインドを受け継ぎながら、これからのBBSakura Networksは、次の時代に必要とされる価値を自らの手で創り出していきます。

「技術の会社」であるというアイデンティティを大切にしながら、最先端技術とエンジニアの力を最大限に引き出し、確かなビジネスへとつなげていく。会社をさらにスケールさせ、継続的な成長とインパクトを生み出すフェーズに入っていきます。

私自身、これまでに「OCX」というコアサービスの立ち上げを担ってきました。今後はこのOCXをさらに成長させつつ、BizDev(ビジネス開発)の面でも新たな挑戦を仕掛けていきます。従来の枠組みにとらわれず、スピード感と柔軟性を持って新しい価値を創出し、パートナーやお客様から選ばれ続ける存在を目指します。

クラウド、IoT、AIなどの技術が急速に進化し、市場環境が大きく動く今こそ、私たち自身がその変化を先取りし、挑戦的かつ常識を覆すような事業を展開していくべきタイミングです。BBSakura Networksを、マーケットの中心で、最先端を走り続ける存在へと進化させていきたいと考えています。

お客様、パートナーの皆さま、そして社員の皆さんと力を合わせ、面白く、価値のあるサービスを社会に届け、挑戦と進化を止めずに歩んでまいります。

今後とも、BBSakura Networksをよろしくお願いいたします。

代表取締役副社長 兼 COO 榎本

Findy Team+ 導入してからの フロントエンドチームの開発改善について

Findy Team+ 導入してからの フロントエンドチームの開発改善について

1. はじめに

はじめに こんにちは、BBSakura Networks 株式会社(以降 BBSakura) で OCXのフロントエンドを開発しているソンと申します。 BBSakuraのフロントエンド開発では、チームで協力しながら開発を進めています。

その中で以下のような課題を感じており、改善に取り組みました。

  • 開発状況が感覚ベースで語られ、定量的に把握できていない
  • GitHubの運用ルールが統一されてない
  • PR(Pull Request)レビュアーの偏りがあり、レビューが遅れることがある

本記事では、これらの課題を解消するために、 Findy Team+ を導入してチームで開発生産性を向上できた取り組みを共有いたします。


2. Findy Team+ とは?

Findy Team+ は、開発生産性を向上させるためのツールとなります。

  • GitHubでの開発状況(PRの作成、レビュー、マージなど)を可視化
  • チームの改善サイクルを回すためのデータを提供
  • 振り返りやボトルネックの特定に役立つ

これにより、チームの開発体験そのものを見直すきっかけになりました。


3. チーム課題

GitHubの使い方がチーム内でルールが統一されてない状況

メンバーそれぞれ、PRの作成時に「Draft」機能を活用するかどうかが人によって異なっており、使用するメンバーと使用しないメンバーが混在していました。 また、レビュー依頼の方法も統一されておらず、PRのコメント内でメンションを使う人もいれば、Slackで別途依頼する人もいるなど、対応がバラバラな状態でした。

特定メンバーにレビュー依頼が集中し、レビューが遅れる

レビュー依頼が特定のメンバーに偏る傾向があり、その結果としてレビュー対応が遅れるケースも発生していました。 レビューの負担が一部のメンバーに集中することで、対応までに時間がかかってしまったり、チーム全体の開発スピードにも影響が出る場面がありました。

実際に、Findy Team+のメトリクスを確認してみたところ、 レビューまでの平均時間が長かったり、PRの滞留数が多かったりと、数値的にも開発の生産性があまり良くない状態であることを確認できました。

感覚として抱えていた課題が、数値やグラフを通じて明確に確認できたことで、具体的な改善へ取り組むきっかけとなりました。


4. 課題への取り組み

Findy Team+の導入と共に、フロントエンドチームでは以下のような取り組みを行いました。

  • 開発開始からの時間を計測するため、ブランチ作成の初期段階に空コミットが入る仕組みを運用
  • PRのOpenタイミングを明文化(レビュー依頼する段階にルール化)
  • レビュアーは全員が対応できる体制を意識
  • PR作成・レビューのSlack通知で反応速度を向上
  • チーム定例MTGでの定期的な振り返りの時間を確保

5. 導入後、チームの変化

導入から4ヶ月で、以下のような成果が見え始めました。

可視化されたメトリクス

  • サイクルタイム(PRの最初のコミットからマージまでの平均時間):370時間減少
    サイクルタイムのグラフ。2024/12/1 から 2025/4/1 にかけて、時間が約半分に減っている。
  • オープンからアプルーブまでの時間:60%改善
    オープンからアプルーブまでのグラフ。2024/12/1 から 2025/4/1 にかけて、60%改善されている。

チーム内の変化

  • レビューの担当が特定のメンバーに偏ることが減り、チーム全体でバランスよくレビュー対応できるようになりました。
  • 自分のPRへの反応が早まり、フィードバックの質も向上
  • 振り返りを通じて、継続的な改善サイクルが生まれた

6. まとめ

Findy Team+ の導入によって、フロントエンドチームでは「見える化」と「ルールの明確化」を通じて、チーム開発全体のスピードと体験が大きく改善されました。

チーム全体が前向きに開発に取り組めるよう、これからも継続的に働きやすい環境づくりに取り組んでいきます。💪