Slide 1

Slide 1 text

Sansan株式会社 部署 名前 Denoで作る チーム開発生産性向上のための CLIツール Sansan技術本部 技術本部 Strategic Products Engineering Unit Contract One Devグループ 伊藤 遼太

Slide 2

Slide 2 text

写真が入ります 伊藤 遼太 - Ryota Ito - Sansan株式会社 技術本部 Contract One Dev グループ - 2021年11月 Sansan 入社 - Backend (Kotlin) / Frontend (TS) / Management - X: itomise0f

Slide 3

Slide 3 text

PR: Contract One とは

Slide 4

Slide 4 text

PR: Contract One とは

Slide 5

Slide 5 text

PR: Contract One の技術スタック

Slide 6

Slide 6 text

チーム開発生産性向上のための CLIツール

Slide 7

Slide 7 text

プロダクションコード以外でも、いろんなところで使いまわされているコー ドがあったりする (以下、周辺コードと呼びます) - 定型的 - 自動化されていない運用作業 - テストデータ作成 - コード生成 - 突発的 - ログ分析 - インシデント調査 - etc … サービス開発では様々なコードが必要になる

Slide 8

Slide 8 text

- ドキュメントにコードがはられていたり - sql, shell など - 便利用スクリプトリポジトリが作られたり - いろんな言語で書かれたり - 共有しておらず、複数人が同じコードを書いていたり - ローカルで使っていたけど、どこに置いたか忘れて使えなかったり - … 周辺コードは管理が煩雑になりがち

Slide 9

Slide 9 text

- Contract One でも、周辺コード用のリポジトリを運用していた - Ruby で書かれていたり、Go で書かれていたり - メンテがあまりされず、ドキュメントもほとんどなかったので、知る人ぞ 知るという状態になっていた - アップデートしたりしても気づかないため、他の開発者がメリットを享受 できない 課題

Slide 10

Slide 10 text

- 共通の実行環境を作って整備すれば、管理の問題を解決できると考えた - 技術構成は、Deno を採用した - 理由は後述 解決策

Slide 11

Slide 11 text

デモ

Slide 12

Slide 12 text

何が嬉しいの?

Slide 13

Slide 13 text

Contract One CLI で実際にやっていること - データ準備系 - XのデータをYの状態にする - ユニークなサンプルPDFを生成する - 運用系 - 機能で提供していない運用作業を自動化したスクリプト - 手順書を不要にし、全体の認知コストを下げる目的 - リリース作業 - AI生成系 - 自然言語からいい感じの変数名、クラス名を出してくれる - 要件定義のテキストから一通りのコードを生成してくれる

Slide 14

Slide 14 text

効果 - 開発シーンで利用し、作業効率が上がったという声がある - 開発者が思いついた時にすぐにコードを書いて、他の開発者に価値が 提供できるため、自動化に向き合う文化ができてきている - 複雑な工程が必要な場合でも CLI でインタラクティブな体験を作れる ため、CLI 環境ならこんなことも体験良く作れそう、というアイデアが 実装され始めている

Slide 15

Slide 15 text

なぜ Deno なの?

Slide 16

Slide 16 text

Denoの採用理由 1. 標準機能の豊富さ 2. Global Install 機能 3. 既に採用済みの言語のため

Slide 17

Slide 17 text

1. 標準機能の豊富さ - Denoは標準の機能が充実しており、標準ライブラリもDenoの コアメンバーによってメンテナンスされている - CLIアプリを作るに当たって必要な機能はほとんど標準ライブラリで実装 できる - 標準ライブラリ以外のライブラリ自体も依存関係がかなり少ないので、 全体の依存関係をかなり小さくできている - 依存関係が増えるとそれらのメンテナンスコストもかかってくるため、 メリットがある

Slide 18

Slide 18 text

- 現状の標準ライブラリ以外の依存関係 - @david/dax : コマンドラインを実行するためのdeno製ライブラリ - postgres : postgres と通信するためのdeno製ライブラリ - zod : 依存関係ゼロのバリデーション用ライブラリ 1. 標準機能の豊富さ Contract One CLI 開発環境の依存パッケージ

Slide 19

Slide 19 text

- Deno 2.0 の Youtube 動画「Programming Should Be Simple」 - Node.js で同じことをやろうとすると、typescript, uuid, csv, lint, config, vitest … と多くの依存関係と設定を管理する必要が出てくる (またそれらの 噛み合わせも...) - CLIアプリのような、小さい環境で 小さく実行したい、というユースケースに はDenoが合っていると判断した 1. 標準機能の豊富さ

Slide 20

Slide 20 text

- CLIアプリは利用側の体験が重要 - 使いにくいアプリは使われなくなる - Global Installation 機能 - 指定したファイル、モジュールを任意のコマンドでグローバルに実行可能に なる - ファイルを編集したりしても再インストールが必要ない - Contract One はモノレポ構成をとっているため、CLIのコードもそこに 含めて運用している - コマンドを作ってpushするだけで、開発者全員に迅速に価値を届けられる 2. Global Installation 機能

Slide 21

Slide 21 text

- Contract One ではフロントエンド環境に TypeScript を利用しているため、 開発者全員の学習コストがほとんどない - 開発生産性向上のためには、全ての開発者が能動的に自動化に向き合える 環境を作ることが重要 3. 既に採用済みの言語のため

Slide 22

Slide 22 text

- Deno 2.0, 2.1 でのアップデート内容も大きい - 標準ライブラリの多くが v1 に - npm 完全互換 - long term support Denoの採用理由: その他

Slide 23

Slide 23 text

今後に向けて

Slide 24

Slide 24 text

今後 - より機能を充実させて開発生産性に向き合っていきたい - 自動化の文化を醸成していきたい

Slide 25

Slide 25 text

最後に - Deno 2.1 おすすめ - Denoのメリットを享受できる部分はたくさんあると思っており、CI 環境で 実行するものも Deno で置き換える予定 - ぜひフォローお願いします! - X: itomise0f

Slide 26

Slide 26 text

- デモリポジトリ: https://github.com/itomise/deno-cli-app Appendix

Slide 27

Slide 27 text

No content