• Deep dive into Vulnerability Management for Go

    Goはメモリ安全であり、CやC++と比べ、比較的セキュアなプログラムを書きやすいプログラミング言語です。しかし、バグなどに起因する脆弱性やサプライチェーン攻撃など、セキュリティの脅威から逃れられている訳ではありません。Goは公式で脆弱性データベースや静的解析ツールの開発が進められています。本セッションでは、公式が取り組んでいる脆弱性管理システムについて紹介し、それらがどう動作しどう利用することで脅威から身を守るのか解説します。

    メイン会場
    Sat 10:10 am - 10:50 am
    • 40min Session
  • こんなコード書いていませんか?

    Go に慣れて、ひと通りコードが書けるようになったら、コードの書き方を意識してセキュアにしませんか

    メイン会場
    Sat 1:00 pm - 1:40 pm
    • 40min Session
  • BigQuery エミュレータの作り方

    2022年初頭から BigQuery エミュレータの開発を個人で行っており、社内の開発で利用できるレベルまで仕上がってきました。このセッションでは、BigQuery エミュレータの作り方を順を追って説明しながら、エミュレーションをする上で得た知見をできるだけ汎用化したテクニックとして紹介します。例として、巨大なC++ライブラリをcgoを使ってバインディングするときに考慮しなければいけないこと、エミュレーションする際に利用した go-sqlite3 ( https://github.com/mattn/go-sqlite3 ) の活用方法などを紹介したいと思います。このセッションを通して、作ろうとまでは思わないけれどこうすれば作れるんだという手応えや、知らなかった知見を少しでも持ち帰っていただければ嬉しいです。リポジトリは https://github.com/goccy/bigquery-emulator で公開中です。

    メイン会場
    Sat 2:20 pm - 3:00 pm
    • 40min Session
  • OSSの最適なリリースエンジニアリングを求める旅路

    本トークでは、案外複雑で暗黙知になりがちなOSSのリリースエンジニアリングを簡単に、そして他者からもわかりやすくする方法について論じます。

    私はこれまでGoやそれ以外の言語でも、趣味でも業務でも多くのOSS開発に携わってきました。ほとんどは小さなものですが、その数は100個を越え、その半分以上がGoのソフトウェアです。

    数多くのOSSを管理している中で感じることの一つに、OSSのリリースエンジニアリングは案外暗黙知になりやすいということがあります。

    リリース作業自体は、幾つかのファイルのバージョン番号を書き換えてタグを打つ、であったり、それらを自動化するようなスクリプトやツール等を使うことが多いのですが、これらは些細な変更であることや、場合によってはリリース用の特別な権限が必要だったりするため、メンテナの手元で行われることも多いのです。

    これらは他の人から見えづらく引き継ぎづらかったり、メンテナ本人も久しぶりにメンテナンスするときにリリース方法を忘れていることも珍しくありません。結果として腰が重くなってメンテをあきらめたり、ミスが起きたり、権限の問題が発生したりします。

    よく考えて見ると、言語、オーサリングツールやそのトレンド、そのソフトウェアがライブラリなのかコマンドラインツールなのかアプリケーションなのか、などの変数を考えると、リリースエンジニアリングには多くのパターンがあることがわかります。

    また、ソフトウェアのリリース時には以下のようなことを考慮する必要がでてきます。

    - リリース前のQA
    - バージョニングポリシーとそれに従ったタグ付け
    - バージョンが記述されたspecファイル類の変更ルール
    - Changelogの生成及びメンテナンスポリシー
    - コンテナやパッケージのビルド
    - セントラルパッケージリポジトリやコンテナリポジトリへの登録
    - それらの権限管理

    そう、OSSのリリースにはあまり手間は書けたくないのが心情ですが、案外複雑でもあるのです。

    本トークではこれらについてのベストプラクティスを考えます。これまでの私のOSSリリースエンジニアリング変遷や、その中で活用したりしているGo製のツールについても取り上げます。この中には私が作ったものも幾つか含まれています。

    最近の個人的なトレンド手法としては、Pull RequestやGitHub Releases、GitHub Actionsを活用し、今リリースがどの段階にあるか、どうすればリリースされるのかを、メンテナ以外のリポジトリ訪問者にもわかりやすくするというものがあります。この手法をやりやすくするために私が最近作った tagpr というGo製のツールも解説します。

    本トークの主題はGoに限らない話ではありますが、話をするのがGoのカンファレンスであり私自身もGoに親しんでいることから、Goでの事例が多く出てくることになるでしょう。

    メイン会場
    Sat 11:00 am - 11:20 am
    • 20min Session
  • Dive into testing package

    Goの標準パッケージの1つであるtesting packageを読み、Goはどのようにtestを実行しているのか、どのような実装をしているのかを一緒に理解しましょう!

    メイン会場
    Sat 11:30 am - 11:50 am
    • 20min Session
  • SNKRDUNKでGo+gRPCですすめるモジュラモノリス

    株式会社SODAで運営するSNKRDUNKでは、サービス、リポジトリ、組織の急激な拡大に伴い、開発スピード、品質を落とさないようにGo+gRPCを利用し、将来的にマイクロサービスも視野にいれながらモジュラモノリスへのリプレイスを進めています。
    社内で実践しているGo+gRPCでのモジュラモノリスでの実装方法や、現状抱えている課題などをお話できればと思っています。

    メイン会場
    Sat 1:50 pm - 2:10 pm
    • 20min Session
  • 認知的複雑度から見るGo言語のイベントソーシング実装

    イベントを設計の中心に据えたアプローチが注目されており、イベントソーシングのパターンを採用するケースが増えてきています。

    イベントソーシングでは、発生したイベントを追記のみの形式で保存しておき、最新の状態はイベントから導出することになります。これは多くの開発者にとって馴染みのある、最新の状態を編集するステートソーシングとは大きく異なる実現方法です。

    また学習コストが掛かることやアーキテクチャが複雑になるといった点が代表的なデメリットになりますが、実装されたコードはどうでしょうか。

    本発表では、Go言語によるイベントソーシングの実装とステートソーシングの実装を比較し、またソースコードの複雑さを測る指標である認知的複雑度を使ってそれぞれの実装について考察します。

    お話しすること
    - イベントソーシングとステートソーシングのコンセプト
    - Go言語により実装した場合の複雑さについて
    - 認知的複雑度について

    お話ししないこと
    - イベントストアやメッセージブローカーなどのミドルウェアについて
    - ドメイン駆動設計やマイクロサービスアーキテクチャについて

    メイン会場
    Sat 3:15 pm - 3:35 pm
    • 20min Session
  • 作って学ぶ GraphQL

    GraphQL について学んだことを発表します。GraphQL と REST を比較しながらそれぞれのメリット・デメリットについて話します。
    初めての LT、楽しみます!!

    メイン会場
    Sat 3:40 pm - 3:45 pm
    • LT
  • gotoは悪?GoでWebフレームワークを自作する過程でEchoやGinから学んだ正しいgotoの使い方

    Goにおけるgotoの正しい使い方やgotoを使った最適化について話します。

    GoでWebフレームワークを自作する上で学んだ、GinやEchoといったフレームワークでgotoが使われてることや、理由を可読性や処理速度の面から簡単な例を交えて説明していきます。

    処理速度において、gotoを使わない時の実装とgotoを使った実装のtesting パッケージを使ったベンチマークで比較を可読性を考慮しながら話します。

    最後に時間が余れば自作したWebフレームワークの紹介をしようと思います。

    メイン会場
    Sat 3:45 pm - 3:50 pm
    • LT
  • クリーンアーキテクチャを導入することで変わる、プログラミングのしやすさについて

    クリーンアーキテクチャを導入することで、何がよくて、何がだめだったか、自分の体験と、株式会社Appify Technologies で得られた知見を元に話します。

    メイン会場
    Sat 3:50 pm - 3:55 pm
    • LT
  • 標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"

    8月にリリースされたGo1.19で標準パッケージ初のgenerics利用事例であるsync/atomic.Pointerが実装されました。
    このセッションではsync/atomic.Pointerの導入背景や利用方法、内部実装について解説します。

    メイン会場
    Sat 3:55 pm - 4:00 pm
    • LT
  • 標準ライブラリを1年間読んで学んだこと

    Sendai.goは基本的に毎月、標準ライブラリのコードリーディング会を実施しています。
    定期開催になってからちょうど1周年の節目なので、標準ライブラリのコードリーディングの中で気づいた「Goらしさ」や「おもしろポイント」を共有したいと思います。

    メイン会場
    Sat 4:00 pm - 4:05 pm
    • LT
  • 爆速!5分でわかるDagger~どこでも動くCI/CD~

    今年の4月に公開されたGo製のポータブルなCI/CDツールであるDagger。最近注目されつつある(気がする)Daggerを簡単に紹介します。

    メイン会場
    Sat 4:05 pm - 4:10 pm
    • LT
Session and Speaker Management powered by Sessionize.com