Slide 1

Slide 1 text

© LayerX Inc. GoのWebプロダクトに 途中参加するときのキャッチアップ 2024-05-24 Layerx.go #0 Yoichiro Shimizu

Slide 2

Slide 2 text

© LayerX Inc. 2 ▶ 株式会社LayerX (2023.03 - 現在) - カード開発グループ TechLead ▶ Go Conference運営法人理事 ▶ 2022年にGoの本を出版 - 24年3月韓国語版出版 画像を入れてね 自己紹介 清水 陽一郎 @budougumi0617

Slide 3

Slide 3 text

© LayerX Inc. 3 GoのWebプロダクトに途中参加したときのキャッチアップ - まったくゼロからサービス開発するフェーズはなかなかない - 転職・異動などでプロダクトコードがすでにあるチームにアサインされること大半 - GoはデファクトなWebフレームワーク、技術スタックがない - 既存プロダクトコードがどのように構成されているかをキャッチアップする必要がある 今日のトピック 今日のトピック

Slide 4

Slide 4 text

© LayerX Inc. 4 コードを見る前にやったほうがよいキャッチアップ - コードを触る前に行ったほうがよいキャッチアップは省略します - ドメイン知識(業務知識、業界標準、関連法制度 etc)のキャッチアップ - 開発環境でプロダクトを動かしてみる - プロダクトのサポートページを読む - システムアーキテクチャを把握する(RDBMS, 本番実行環境 etc) - DBスキーマやER図を確認する 前提(今日話さないこと) 今日のトピック

Slide 5

Slide 5 text

サービスを動かす前に

Slide 6

Slide 6 text

© LayerX Inc. 6 初期設定をする README, Makefile, .env サービスを動かす前に - READMEに環境変数の情報などがないか確認 - .env.localなどを用意する必要があるならば準備 - make initのようなコマンドがあるならばそれを実行 - バクラクの場合 - Rancher Desktopなどをインストール、認証を設定する - lx.sh bootstrap コマンドを実行すると全プロダクトの初期構築が完了する - https://tech.layerx.co.jp/entry/2022/12/12/131507

Slide 7

Slide 7 text

© LayerX Inc. 7 用意されたコマンドを確認 Makefile サービスを動かす前に - GoのタスクランナーはMakefileがほぼデファクトな印象 - テストの実行方法 - コードの自動生成 - ローカルの起動方法 - ビルド、デプロイ方法

Slide 8

Slide 8 text

© LayerX Inc. 8 go.modをみて依存pkgの確認する 依存関係の確認 サービスを動かす前に - go getしてみる - 社内共通pkgなど、別のprivate repositoryに依存しているならば GOPRIVATE を設定する

Slide 9

Slide 9 text

© LayerX Inc. 9 依存ライブラリからプロダクトが取り扱う要素技術を確認する 依存関係の確認 サービスを動かす前に - プロトコル - GraphQL, gRPC, OpenAPI, REST API - 自動生成 - gqlgen, protoc, buf, go-swagger, xo, gomock… - ORM - GORM, sqlx, bun, ent - バクラクの場合 - GraphQL, gRPC, OpenAPI, - xo + GORM

Slide 10

Slide 10 text

ローカルで動かしてみる

Slide 11

Slide 11 text

© LayerX Inc. 11 プロダクトを動かしてみる 起動してみる ローカルで動かしてみる - go run, docker compose up, make… - MakefileやREADMEに書いてあるはず? - バクラクの場合 - TUIで全プロダクトを起動・管理できる

Slide 12

Slide 12 text

© LayerX Inc. 12 どんな操作でどんなデータが作られるのか確認する 操作してみる ローカルで動かしてみる - フロントエンドから操作する - 直接APIを実行する - バクラクの場合 - graphiql - lx.sh tool curlコマンド - いい感じに認証情報をつけてgRPCコールをしてくれるコマンド

Slide 13

Slide 13 text

© LayerX Inc. 13 アクセスログやエラーログを出してみる ログをみてみる ローカルで動かしてみる - terminal, docker compose logs etc… - バクラクの場合 - TUIで確認する - Grafanaで確認する

Slide 14

Slide 14 text

コードを読んでみる

Slide 15

Slide 15 text

© LayerX Inc. 15 リポジトリの歩き方を覚える ディレクトリ構成を理解する コードを読んでみる - GoはデファクトのWebフレームワークがないので各社それぞれのディレクトリ構成となる - エンドポイントを探すならば、認証ロジックを探すならば、どのディレクトリからたどるとよいか - よくみかけるディレクトリ名 - handler, api - middleware, interceptor - usecase, service - domain - repository, gateway - infrastructure

Slide 16

Slide 16 text

© LayerX Inc. 16 IDEを使おう ソースコードを読む コードを読んでみる - Goは型付け言語なのでIDEフレンドリー - 定義元ジャンプ, 参照元検索で辿れる - interface定義から「interfaceを満たす実装」をたどるのは正直IDEがないと辛い

Slide 17

Slide 17 text

© LayerX Inc. 17 GitHub Copilot Chatに聞いてみる ソースコードを読む コードを読んでみる - VSCodeやJetbrains IDEなどから利用可能 - ファイルを開いて「100行目は何をしているの」とか聞いてみる - (ご利用は所属元の許可状況を確認の上!) - バクラクの場合 - LayerXではGitHub Copilot, ChatGPT Teamが使えます

Slide 18

Slide 18 text

© LayerX Inc. 18 テストを実行してみる go test コードを読んでみる - make test - IDEから実行してみる - パラメータを変えて実行してみる - GoLandではテーブル駆動テストのケースごとに実行も可能 - 不要なケースをコメントアウトして実行するでもよい - デバッグ実行してみる

Slide 19

Slide 19 text

おわりに

Slide 20

Slide 20 text

© LayerX Inc. 20 次のNew Joinerのためにキャッチアップ結果をアウトプットしておく 大事なこと おわりに - 環境構築ドキュメントはアップデートが追いついていないことが多い - プロダクトの進化速度と増員頻度が異なるとすぐ陳腐化してしまう - ドキュメントの古くなっていたところを修正する - 人に聞かないとわからなかったことはドキュメントにする

Slide 21

Slide 21 text

© LayerX Inc. 21 私がやるコードキャッチアップ方法を話しました おわりに おわりに - キャッチアップ結果のアウトプットは新しくプロダクトへのアサインされた人の最初の貢献! - バクラクプロダクトではどうなっているかも少し紹介しました - もっと詳しい話が聞きたい!こうやったほうがいいよ!などあればXなどでぜひお声がけください! - @budougumi0617