builderscon 2024で登壇

はじめに

2024-08-10にbuildersconというテックカンファレンスがあり,スピーカーとしてこれに参加させていただきました.

builderscon 2024

builderscon 2024 #builderscon - fortee.jp

buildersconは,「「知らなかった、を聞く」をテーマとした技術を愛する全てのギーク達のお祭り」ということで,エンジニアが何かを作りたくなるような新しい知識の共有ができるカンファレンスでした.本記事ではその参加記として,なぜプロポーザルを提出しようと思ったのか,当日どのように過ごしたのか,どのような発表があったのかなどについて述べます.

プロポーザルの提出

CLIジェネレータ「cyamli」を開発した私は,この成果を誰かに知って欲しいと思い,以前からいくつかのLT会に参加してcyamliの様々な側面を発表してきました.

github.com

しかし,短時間のLTでは自分のこだわりや思いを伝えきることができないと感じていました. そんな中で,「LTの内容が興味深かったが,カンファレンス等に応募することは考えていないのか?」というフィードバックをいただき,テーマの合うカンファレンスを探し始めました. そこで,見つけたのが以下のプロポーザル募集ツイートでした.

テーマにも合うと考え,早速プロポーザルを書いて提出しました.

キーワード

CLI, YAML, コード生成, 静的型付け, Go言語

概要

CLI(Command Line Interface)を備えたコンソールアプリケーションを開発する際には、CLIを定義・解釈する仕組みが必要となります。この仕組みを実現するために、私は「cyamli」という名前のCLIジェネレータを開発しました。「cyamli」は、YAMLファイルに記述されたCLIスキーマに基づき、型付けされたCLIを扱うためのコードを生成します。

本発表では、「cyamli」について詳しく紹介したいと考えています。具体的には、まず以下の「cyamli」の特徴について説明します。

  • コマンドライン引数の定義・解釈:CLIとして、サブコマンド、オプション引数、位置引数で構成されるコマンドライン引数を定義・解釈することができます。
  • 型付けされたCLI:生成されるコードは、型付けされたCLIを適切に扱えるため、静的チェックやコード補完といった機能を活用できます。
  • 情報源の集約:CLIスキーマの情報源をYAMLファイルに集約して管理できるため、コードの一貫性を維持しやすくなります。
  • 様々な出力形式:現時点で、GoとPython3をサポートしており、テキストおよびMarkdown形式のヘルプメッセージも出力できます。

さらに、以下の内容についてイメージしてもらえるように、実際にデモンストレーションを実施して、例を示しながら解説したいと考えています。

  • CLIスキーマをどのように定義するのか
  • どのようなコードが生成されるのか
  • 生成されたコードをどのように利用するのか

対象者

以下のような方々に興味を持っていただけると思います。

  • Go言語を使う方
  • コンソールアプリケーションを開発する方
  • スキーマ駆動開発に興味のある方

リファレンス

https://github.com/Jumpaku/cyamli

CLIジェネレータ「cyamli」によるコンソールアプリのスキーマ駆動開発 by Jumpaku | トーク | builderscon 2024 #builderscon - fortee.jp

プロポーザルを書く上で心がけたのは以下の点です.

  • テーマに沿っていること
  • 自分のこだわり・主張を示すこと
  • 発表内容をできるだけ詳細に示すこと
  • 幅広いエンジニアに発表内容を想像してもらえるようなキーワードを含めること

プロポーザルの採択

プロポーザル募集締切から期間をおいて,採択を知らせるメールが届きました. 何度も読み返して採択のお知らせであることを確かめると,嬉しさに任せてすぐに受諾の手続きを進めました.

全プロポーザルが46個くらいあったと思いますが,その中で採択されたプロポーザルの個数を数えてみると6個しかなく,採択率が2割未満と低いものであると知りました. 自分に大役が務まるのかという不安とレビューを突破したという自信がないまぜとなって気合が入りました.

発表準備

発表時間を40分もいただけるということで,普段のLTで触れることのできない深いこだわりや充実したデモを含めることができると考えました.そこでこれまで発表したLTを元にしつつ,cyamliの設計方針,実装の詳細,こだわった点をふんだんに盛り込み,スライド枚数と表現を調整しました.

当日

行き

当日は,早朝に起床し発表スライドを仕上げた後,発表が40分に収まるかどうかを通して確認しました. 会場は埼玉県にある埼玉会館というところで,JR浦和駅から徒歩10分程度の場所にありました. JR浦和駅は,JR渋谷駅から湘南新宿ラインで30分程度で行くことができ,意外と行きやすいと思いました. 浦和駅に着くと,電車酔いと空腹で具合が悪くなっていたのでおにぎりと飲み物を買って,できるだけ涼しい日陰を通りながら埼玉会館へ向かいました. 埼玉会館の入口では,会場となっている部屋までの案内をしていただき,部屋の前で受付をしてTシャツをいただきました. 空いてる席に座ってすぐにおにぎりを食べ,Tシャツを着て,デモの準備と動作確認を進めながら,午前の部の開始を待ちました.

午前の部

「誰が作成しても1つの構造になるモデリング作成技術、Theory of Models⁠ に夢を見る」by mokuo

fortee.jp

午前の部の最初の発表は,仕様に対して定型操作により個人の主観やスキルに依らずにモデリングするための設計手法の紹介でした. 具体的なケースを例として説明された定型操作は,設計において自分が経験と勘に頼っていた点や見落としがちな点をカバーしながら,妥当なモデルを導くことができていてとても興味を持ちました. 一方で気になったのは,定型操作が実際のところどの程度妥当なモデルを導くことができるのか,特に仕様変更に対してどの程度ロバストなモデルが導くことができるのかという点で,実際,そのような質問もありました. しかし少なくとも,どのようにモデリングすれば良いかわからない複雑な仕様に直面した時や,考えたモデルが妥当かどうか判断するのが難しい時などにはとても強力なツールとして使うことができると思いました.

「法律に準拠した本人確認システムを0から作った話 〜家計簿プリカB/43でのeKYC開発実例〜」by 三谷 昌平

fortee.jp

次の発表は,本人確認システムを要件策定から運用体制まで構築した話の紹介でした. ここでは資金移動業に関する法律に基づいて本人確認機能が備えるべき要件を策定し,これを実現するための要素技術を選定し,構築したシステムをどのような体制で運用してきたのかについて,詳細に踏み込んだ具体的な話を聞くことができました. もし自分が本人確認システムを構築することになった時に何を調べ何を実装する必要があるのかイメージできるようになった気がします. あとは,自分がシステムを構築しきって運用を支える自信さえ持てれば,自分でもできるかもしれないと思わせる説得力があり,とても興味深く聞くことができました.

お昼

お昼は近くの狼煙という名のつけ麺屋へ行きました.

tabelog.com

注文したのは,限定メニューの坦々まぜそばです.

タレの絡まった麺の上の刻み玉ねぎ,メンマ,チャーシュー,ひき肉,ガーリック,海苔,卵黄,チンゲン菜などが乗っている
狼煙の坦々まぜそば

とても美味しくいただきました.つけ麺を注文しているお客さんも多かったので,次機会があればそちらも食べてみたいと思いました.

お昼ご飯を食べたあとは次の発表開始まで時間があったため,散歩をすることにしました.埼玉会館の周りには埼玉県庁や埼玉地方裁判所などの大きな建物がありとても立派で見応えがありました. また埼玉会館自体もいくつかのパーツからできていて内部も入り組んでいて探検し甲斐がありました.

午後の部

「React Server Component の疑問を解き明かす」by mizdra

fortee.jp

React Server Componentの導入により,サーバーで実行されるコンポーネント(Server Component)とクライアントで実行されるコンポーネント(Client Component)を同居させながらUIを構築することができるようになり,パフォーマンスや管理性の改善が可能になるというような話だと理解しました. この仕組みがないとパフォーマンスの改善に限界があるという点についてはよく理解できるのですが,管理性が改善されるかどうかに関しては理解が追いつきませんでした. これはJSXのように文書構造とロジックをまとめてコンポーネントにするという考え方やServer ComponentをClient Componentを同居できるようにするという考え方が,これまでのUIの実装におけるコード分割の考え方(CSS,HTML,JavaScriptに分ける,サーバー/クライアントで分ける,モデル,ビュー,コントローラに分けるなど)に関する自分の理解と整合しているように見えなかったためだと思います.

この発表は,自分に対してとてもクリティカルで,自分のUI実装に対する考え方を見直すきっかけとしなければいけないと思いました.

「すこやかなサービス運営のための PWG (Performance Working Group)」by Takafumi ONAKA

fortee.jp

こちらは,元々予定されていた発表がキャンセルとなったことによる,代打での発表でした. 関係者が集まってダッシュボードを眺める「PWG (Performance Working Group)」という会を実施しているという話でした. 自分の開発・運用経験につながるイメージが掴めず,実感をもって理解できなかったことが少し悔しいと思いました. これは,私の関わるプロダクトや組織より,規模が大きかったり,難易度が高かったり,文化が異なったりすることが理由かもしれないと思います. もしくは,集中力が弱まっていただけかもしれません.

「ホー○ページビルダー 2024」by Masayuki Matsuki (Songmu)

fortee.jp

こちらも代打の発表で,個人ブログの運用に関する様々な話題や考えが紹介されました. 特に印象に残った話題が,自分の死後にデジタルの成果物はどうなるのかというものでした. どうなっても良いという場合は簡単ですが,消したいまたは残したいという場合にどのような手段があるかということは考えたことがありませんでした. 自分は,自分のデジタルの成果物をどうしたいのか,少し考えてみようと思います.

CLIジェネレータ「cyamli」によるコンソールアプリのスキーマ駆動開発」by Jumpaku

fortee.jp

こちらは,私の発表となります.

自作OSS「cyamli」について紹介しました.

発表直前には,これまでの発表が全て時間通りでバッファが全く消費されていないという話が聞こえてきたため,自分も時間通りに終わらせないといけないというプレッシャーを感じる一方で,ここで時間通りに発表を終えることで自分も格好良くキメるチャンスだと考えました.

発表では,型付けされたCLIを適切に扱うための自作ツールを開発する上でのこだわりについて余す所なく示しました. また,型付けによる恩恵をより実感してもらうために,統合開発環境でコード補完を効かせながらデモを実施しました. このデモは「cyamli」の有用性を示すためにとても有効だったと感じています. デモにおいて,両手でキーボードを操作しようとするとマイクを持てないことに気がついたスタッフの方がマイクを持ってくださって,とても助かりました.

発表資料を以下に示します.

drive.google.com

発表後,以下の質問を受けました.

  1. サポート言語を追加するためには,どのような作業が必要になるか?
  2. グローバルなオプション引数などの追加仕様を提案する余地はあるか?

1.に対する回答として,コード生成のテンプレートとそれに流し込むデータを実装しcyamliのサブコマンドの追加することが必要で,サポート済みの言語用の実装をコピペして変更することで実現できるというような内容を返したつもりです. また,2.に対する回答として,公開済みの仕様は完成されたものとは考えておらず,仕様追加の提案を受け入れる余地もあるが,議論も必要だと思うというような内容を返したつもりです.

「1000 行で実現する Linux on Browser」by bokuweb

fortee.jp

最後の発表は,CPUを中心とした計算機のエミュレータをブラウザ上に実装し,そこでLinuxを起動するという内容でした. CPUの仕様やバスによるデバイス間の連携など今まで潜ったことのない低レイヤーの話でしたが,Rustで書かれたエミュレータソースコードの要点を掻い摘みながら示しつつ,それでいて全体のつながりが分かるように説明されたことで,とても理解しやすくて面白いと感じました. 計算機のエミュレータを実装するというのがどういう作業なのかイメージできて,自分の世界が広がった気がしました.

懇親会

一通りの発表が終わり集合写真の撮影が済んだあと,懇親会までの間に休憩時間がありました. 懇親会で実施されるLTが募集されていて気になるものにシールを貼るように周知されていたため,全ての候補にシールを貼ったところ,直後に一人一枚までという話が聞こえてきてとても申し訳なくなりました.

懇親会では,他のグループに入っていくのが苦手なためか少しおどおどしてしまいましたが,近くにいた方と話をすることもできました. スピーカーである三谷 昌平さん,mokuoさんには近くでお話しする機会があったため,それぞれ発表を聞いた感想として上で示したような内容を伝えました. また,私の発表テーマのcyamliについて近くにいた聴講者と話したりもしました. 他にも,私の所へ飛び込んできて話をしてくれる方もいました. 懇親会も楽しく過ごすことができて良かったです.

帰り

20時半ごろに,懇親会が終わるとJRで帰宅しました. 電車内では,Twitterで #bulderscon のついたTweetを見返しながら,自分の発表の振り返りをしました.

「cyamli 自体も cyamli で作られているのだろうか」という質問があり,その通りである旨をリプライしました.

また,「usageの生成とかしてくれたら便利そう」というコメントに対して,実装済みである旨をリプライしました.

これについてはデモで示しておけば良かったと思いました.

そして,「情報源の集約というのは CLI ツールのインターフェイスの定義を 1 ファイルにまとめることを指してるのかな?」という質問がありました.

これに関しては,何と答えるべきか分からずリプライできませんでした. インターフェイスの定義について,1ファイルにまとめることというよりは,コード内に散乱させないことと過不足なく整理することの両方を指すという方が自分の思いに近い気がします. 一貫性を維持しやすくしたり保守しやすくするためには,これらが必要な気がします. もしかしたら,情報源の集約ではなく,SSOT(Single Source of Truth)な設計の実現と表現した方が適切だったかもしれません.

この日は21:00からAtCoderのコンテストがありましたが,疲労のため参加を見送りました. 疲れていても出るべきだったと少し後悔しています.

AtCoder Beginner Contest 366 - AtCoder

まとめ

builderscon への参加や,テックカンファレンスでのプロポーザル提出とLT以外の登壇は,初めてでした. 聴講においては,どの発表も歯ごたえがあり,面白いものでした. 発表においては,40分という時間の中で,自作ツールのこだわりを詳細に話すことができ,充実したデモを示すこともできたと思います. 懇親会でも,人見知りな割に,近くにいた方といろいろ話すことができて楽しむことができました.

浦和駅周辺においても,埼玉会館の他に美味しいつけ麺屋,埼玉県庁周辺などを巡ることができました.

ここで得た感覚は,仕事でも趣味でも開発の中で思い返すことがあると思います. また,cyamli を含めた自分の開発のモチベーションも高まりました.

展望として,今後機会があれば,懇親会の2次会も行ってみたいと思いました.

謝辞

buildersconの運営スタッフ,スピーカーの方,私の発表を聴講していただいた方,懇親会で話をした方に感謝します.