40分
中級者向け

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

Jumpaku Jumpaku

キーワード

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

概要

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

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

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

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

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

対象者

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

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

リファレンス

40分
初心者向け

大企業で始めるクラウドコミュニティづくり ~1組織からはじめるコミュニティジャーニー~

前川博志

ダイキン工業の研究開発部門であるテクノロジー・イノベーションセンター(TIC)では、新たな製品やサービスを開発するため、「ダイキン情報大学(DICT)」という取り組みで若手中心にAIやクラウドなどの教育を行い、数百名の若手のIT技術者を育成してきました。 これらの新しいエンジニアたちを、厳格なセキュリティルールや重厚なレビューによって自由度やスピードを犠牲にしたくはありませんでした。

そこでまずTICの中から、技術者に自由な環境を与えながら様々なリスクに対応できるような仕組みづくり、ルール作りから小さな啓蒙活動を初めて行きました。クラウド開発におけるベストプラクティスから始まり、TIC内での実験環境の整備、Githubなどのツールの導入などを進めながら仲間を増やしていきました。

そのようにクラウドに関する情報発信を進めていると、DICT生向けのクラウドコミュニティについての相談が舞い込みました。
DICTという社内に広く根付き始めた活動をフックに、それ以外のメンバーも巻き込んだ社内のクラウドコミュニティを立ち上げを決意し、全社向けのイベントを企画しました。
そのイベント参加者から、これまで繋がりの浅かった全社IT部門との繋がりができ、研究部門とIT部門が双方いる運営メンバーにて、社内のクラウドコミュニティを本格的に立ち上げました。

このように一研究部門から始まったクラウド文化は、着実に組織を超えて広がりつつあります。 これらの一連の取り組みについて、実際のエピソードを交えながらお話します。

40分
中級者向け

物理ノート活用とチームコラボレーションによるコミュニケーションの進化

fumiyasac 酒井文也

エンジニアとしてキャリアをスタートした当初、私はコミュニケーションに対して強い苦手意識を持っていました。しかし、ある日、大学時代にしたためたノートを読み返したことで、仕事やアウトプットへの新たな着想を得ました。この「シンプルで当たり前のこと」が、大きな武器となり、キャリアにおける大きな転機となったのです。

まず、ノートを活用した「断片をできるだけ拾い上げる」取り組みについてお話しします。リモートワークが主体となったコロナ禍では、オフラインでのコミュニケーションを円滑に取ることが難しく、口頭だけでは十分に伝わらないことが頻繁にありました。これを補うために様々な資料を用意することもありましたが、それだけでは「かゆい所に手が届かない」状態は解消されませんでした。

例えば、議事録を見たら結論は書いてあるが、その過程がわからない、口頭で説明したが伝わっていない、文章に起こしてみても言語化がうまくできない、などの経験はないでしょうか?私も例外ではなく、特にデザイナー時代には何度もこの点を指摘されました。その解決策として実践したのが「他人に見せるつもりでノートを取る」習慣です。この習慣が、円滑なコミュニケーションや効果的な情報共有に大きく寄与しました。

次に、チームでのUI&機能実装やデザイナーとの共同作業を円滑に進めるためのポイントについて共有します。デザイナーとの仕様すり合わせや、デザインデータから実装への橋渡し、機能ロジックとUI実装の調整、自前で準備するかライブラリを使うかの判断、Web表現をモバイルアプリで実現する際の注意点、AndroidとiOSのUI表現の違いなど、多岐にわたるテーマを取り上げます。

具体的には以下の点をカバーします:

  • デザイナーとの仕様すり合わせの際に心がけるポイントと習慣
  • デザインデータから実装における勘所を紐解く
  • 機能ロジックとUI実装を合わせる際に違和感を感じた場合の対応方法
  • 自前で準備するかライブラリを使うかの切り分けと判断
  • Webで頻出する表現をモバイルアプリで実現する際の注意点
  • Androidアプリでよく見かけるUI表現をiOSアプリで実現する場合の勘所

私の手書きノートを例に、これらの具体的な方法を紹介し、チーム全体での効果的なコラボレーションを促進するヒントを提供します。

40分
中級者向け

限られた時間で成果を出す:OSS開発の実践と工夫

catatsuy Tatsuya Kaneko

平日は業務で忙しい中、休日に複数のOSSプロジェクトを効率的に開発・管理しています。以下のプロジェクトは多くのスターを獲得しています:

本トークでは、これらのプロジェクトの管理方法を紹介します。

  1. 責任感と協力:
    private-isuやisucon9-qualifyは対応言語が多いため、協力者を募っています。無理をしない心構えと協力体制の重要性について話します。

  2. Renovateの活用:
    nginx-buildでは、依存ライブラリや言語のバージョンアップにRenovateを活用。設定方法や効果について説明します。

  3. ChatGPTの活用:
    purlはChatGPTを使い英語のREADMEやHacker News投稿文を生成し、2024年に200スターを獲得。具体的な活用方法を紹介します。

  4. CIの工夫:
    private-isuやisucon9-qualifyではDocker Composeを使い、アプリを起動しつつベンチマークを実行する特殊なCIを構築。設定方法やセキュリティ設定も紹介します。

  5. Goプロジェクトでのinternal活用:
    notify_slackではinternalディレクトリを使い、API仕様変更に対応。internalの利点と活用方法を説明します。

限られた時間でも効率的にOSSを開発・維持する方法を共有します。

40分
中級者向け

これからのTDDの話をしよう

tyonekubo 米久保 剛

2014年にRuby on Railsの作者であるDavid Heinemeier Hansson氏が発表した記事「TDD is dead. Long live testing.」は多くの議論を呼びました。
日本においては、TDD(テスト駆動開発)に対する誤った理解や、自動テストやテストファーストとの混同なども多く見られ、死ぬ以前に、広く普及していないというのが実状ではないでしょうか。
2022年末にChatGPTが発表されて以来、生成AIは爆発的なスピードで普及が進み、日々進化を遂げています。
GitHub Copilotのようなコーディングに特化した学習モデルを用いたサービスが登場し、プロダクションコードやテストコードの自動生成も可能となりました。
この技術革新によって、TDDは不要となるのでしょうか。それとも新たな形で息を吹き返すのでしょうか。

このセッションでは、TDDに対する過去の問題提起や議論を振り返った上で、TDDの本質について今改めて考えてみます。
そして、生成AIというゲームチェンジャーが登場した時代の荒波の中で、TDD復興の活路を見出すための考え方やアプローチを共有したいと思います。

40分
中級者向け

稼働中サービスの多言語化対応における意思決定

konifar konifar

私の所属しているKyashにて、2023年に英語でも利用できるようにしました。
もともと日本語のみだったサービスを、リリース後しばらく経ってから英語でも利用できるようにするということで、リリースまでにはいくつかの意思決定が必要でした。

このトークでは、当初多言語化対応という形で始まった背景から、
何をどこまで対応するかの方針、
サーバーサイド、iOS/Androidの改修方針、
品質担保の方針、
FAQや問合せ体制などユーザーコミュニケーションの方針
といった観点で意思決定してきたこととその振り返りをお話します。

今後誰かがサービスの多言語化を進めることになった際のひとつのケーススタディとなれば嬉しいかぎりです。

1
40分
初心者向け

イベントストーミングでチームのコラボレーションを強化する方法

katsutomu かつとむ

イベントストーミングは、ソフトウェア開発の要件定義をシンプルにして、チームの協働を深める素敵な手法です。イベントストーミングを使ってどうやってチームのコミュニケーションを改善し、要件定義のプロセスを効果的に進めるかをお話しします。

トピック
・チームでのイベントストーミングの利用タイミングと使い方
・チームメンバーがどうやってコミュニケーションを取ったか
・プロジェクトでの課題とその解決法、成功のためのコツ

また、イベントストーミングを始める時に社内をどう巻き込んだか、直面した問題とその乗り越え方もシェアします。自分のプロジェクトに役立てられる具体的なアイデアを持ち帰っていただければ嬉しく思います。

対象者
・チーム内でのコミュニケーションを改善し、システム要件を正確に理解したい方
・新しいコラボレーション手法を試したい方
・興味/関心はあるが何から始めていいか、お悩みの方

40分
初心者向け

epochから54年、技術史となりつつある知識を共有しよう ~老人会と新人の架け橋~

s3i7h Yuichiro Smith

新しい!と思った知識は実は昔にも存在しているものがとても多い。しかしうまく引き継がれていなかったために「発掘」「再発見」される。
こういう事象に対して、過去をググらないから、、と切り捨てるのは簡単だが、情報が溢れてくるにつれて有益な一次情報は埋もれ、ツールを書いた巨人たちが共通の常識として持っていた知識は引き継がれず、経験者がびっくりするようなテクニック(自称)が技術と呼ばれているのは当たり前の光景になっている。もはや「どうしてこうなっているの?」という質問に「調べなさい」とインターネットに任せきることが適切ではなくなっているフェーズに入っていると言っても過言ではない。
私たちエンジニアは新しい技術を追求していくとともに、そこまでに至る道筋を整備していくことも新しい責任となってきているのではないか?
老人会として昔話に花を咲かせるのはこういったカンファレンスの醍醐味ではあるが、実はそこで共有されている知識にはものすごい価値がある。そして私たちが昔参考にしてきた資料たちは次々にアクセス不能になっていっており、歴史を紡いでいくことは喫緊の課題でもあるのだ。

このセッションでは、思った以上にどうでもいいようなことに価値があるという認識をみんなで共有し、経験者に向けては如何に自分たちが蓄えている知識や経験を体系立てた形で残していくのか、その時に何を注意すればいいのかということを整理し、新人に向けてはどのように過去を踏まえるべきなのかという心得のようなものを伝えたい。

1
40分
中級者向け

落下傘マネージャーの<最初の100日> - モッシュピットに投げ込まれたマネージャーがサバイブするために必要だった5つの知恵

kiyosick Kiyoshi Yoshida

転職先でいきなり管理職ポジションに就任する、いわゆる「パラシュート人事」は、うまくワークしないことが多いとされています。スタートアップに転職してわずか数日後、そんなつもりじゃないのにマネージャー(= 事業責任者)になってしまった私の<最初の100日>を振り返りつつ、モッシュピットの渦中で突き上げた拳の血潮を共有させてください!

対象者

  • 新たに管理職に就任した方、特に転職直後にマネージャーになった方
  • ミドルマネージャーやリーダーシップを必要とするポジションの人々

話す内容

  • コミュニケーション戦略
  • チームのリビルディング
  • 「文化の中心」としてカルチャーを作る
  • Small Winをどうやって積んでいくか
  • 自分の「ニッチ」を見つめ直す
5
40分
初心者向け

よい分割 わるい分割 そんなの ひとの かって ほんとうに つよい エンジニアなら すきな分割で かてるように がんばるべき(ではない)

shinpei0213 丸山しんぺい

ソフトウェアを書いていく際、関数やメソッドのレイヤーからマイクロサービスのレイヤーまで、さまざまなレイヤーで私たちはシステムを分割していきます。しかし、ただ分割すれば良いというものではありません。分割に失敗すると、「ひとつひとつの部品はたしかに小さくシンプルに見えるけれどコールグラフはめちゃくちゃで読みにくい」というようなシステムができてしまったり、「たったひとつの部品のパフォーマンス問題や障害がサービス全体の障害を引き起こしてしまった」ということが起こってしまいます。

この分割の仕方がうまいソフトウェアエンジニアは「センスが良い」と評されたりしますが、その「センス」の正体とは一体なんなのでしょうか?

本トークでは、「良い分割とはどのような分割なのか」「悪い分割とはどのような分割なのか」を平易な例を交えて、それらの例から見えてくる原則を見出していきたいと思います。

対象者:

  • システム設計の中で分割の指針がわからなくて困っている方
  • 自分ではセンスの良い分割ができている自信があるが、設計レビューなどで他人の設計をレビューするときに「それが悪い分割である理由」をうまく説明できないと感じている方
  • ソフトウェアの分割に興味がある全ての方
1
40分
中級者向け

クライアントサイドでよく使われるDebounce処理をサーバサイドで3回実装した話

yoshiori 庄司 嘉織

Debounce 処理というのはクライアントでよく使われる技術です。 高頻度で呼び出されるイベント(キー入力やマウスの移動、ウインドウのサイズ変更)などを制御するテクニックのひとつです。たとえばJavaScriptのライブラリLodashに実装されていたりそれなりにクライアント側では使われる技術です。
そんなDebounce処理をサーバサイドで実装したので、そのお話をしようと思います。
Debounce処理自体の説明から、 クライアントで処理すべきものをなぜサーバサイドで実装しなくてはいけなかったのかの背景の説明、 実際にどうやって複数のサーバで実装しているのか、なぜ3回も実装したのか、そして4回目の実装の構想などをお話します。
今回のようにクライアントサイドではよく使われるけどサーバサイドではあまり使われない、もしくはその逆の技術などは色々あると思います。みなさんのなかで「あ、もしかして俺が知ってるあの技術、実はこっちに応用できるのでは?」とか考えるようになるきっかけになれば幸いです。

1
40分
中級者向け

イベントソーシングのつくりかた

nrslib 成瀬 允宣

本トークではイベントソーシングライブラリを使わずにイベントソーシングを実現したコードをベースに解説することで、その基本動作原理をわかりやすくお伝えします。

イベントソーシングはシステム上の出来事をイベントとして永続化することでシステムを構築する手法です。
システムをイベントでとらえることは伝統的なステートソーシングに比べて、多くの利点をもたらします。

たとえば、システムの全ての状態変化を時間を追って追跡することが可能となることはひとつの利点です。
何らかの問題が発生した場合には、発生したイベントのシーケンスをたどることで問題の原因を容易に特定できます。
ちょうどGitのログをたどるのと同じイメージです。
この特性はシステムの運用を確実に楽にします。

その他にもイベントデータはシステム間の連携を疎結合にします。
また、永続化されたイベントデータを利用して、あとからBIツールと連携するといった芸当も可能です。

このように便利なイベントソーシングをベースにして、システムを構築する場合、多くはイベントソーシングライブラリを活用することになります。
イベントソーシングライブラリを活用すると、深くその仕組みを理解せずとも扱うことができます。
しかしながら、こういった動作原理を覚えておくことは有用です。
動作原理を学ぶのに手っ取り早い方法は自前で実装してしまうことです。

そこで、本トークではイベントソーシングライブラリを使わずに実装した例をもとに、その動作原理を深堀りし、イベントソーシングに求められる要件などについてお話します。

本トークにより、イベントソーシングに対するイメージがブラックボックスではなく、身近なものとしてシステム開発のお供になれば幸いです。

4
40分
中級者向け

組織をエンジニアリングする技術 - 当事者意識が組織をエンジニアリングする

soudai1025 曽根 壮大

今、現場で「なんかうまく行ってないなぁ」ってプロジェクトがあるなら、それは立て直すチャンスです。

実際にどのように立て直すのか。
どうやって目の前の課題を解決していくのか。
ソフトウェアの知識は組織改善にも通じます。

実際に開発組織、事業部、組織全体と、この2年半のC(超)T(トラブル解決する)O(おふぃさー)としてやってきた学びと壮大なる物語をご紹介します。

対象者

  • チームが上手く行ってないけどなんとかしたいなって思っている人
  • ステークホルダーと如何にコミュニケーションとればいいか悩んでいる人
  • 物事を前に進めたいのにうまく行っていない人

話す内容

  • コミュニケーションとSBIモデル
  • ビジョンと期待値調整とガイドライン
  • シンプルな構造はインターフェイスを導く
  • とにかくなんかいい話
5