Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GoのWebプロダクトに途中参加するときのキャッチアップ #layerxgo / How to catch up Go web product

GoのWebプロダクトに途中参加するときのキャッチアップ #layerxgo / How to catch up Go web product

layerx.go #0で発表した資料です。
日時: 2024/05/24(金) 19:00 〜 20:00
URL: https://layerx.connpass.com/event/317228/

スライド中で紹介したlx.shコマンドについては以下のブログに記載されています。

エンジニアオンボーディングを改善するツールの紹介
https://tech.layerx.co.jp/entry/2022/12/12/131507

Yoichiro Shimizu

May 24, 2024
Tweet

More Decks by Yoichiro Shimizu

Other Decks in Technology

Transcript

  1. © LayerX Inc. 2 ▶ 株式会社LayerX (2023.03 - 現在) -

    カード開発グループ TechLead ▶ Go Conference運営法人理事 ▶ 2022年にGoの本を出版 - 24年3月韓国語版出版 画像を入れてね 自己紹介 清水 陽一郎 @budougumi0617
  2. © LayerX Inc. 3 GoのWebプロダクトに途中参加したときのキャッチアップ - まったくゼロからサービス開発するフェーズはなかなかない - 転職・異動などでプロダクトコードがすでにあるチームにアサインされること大半 -

    GoはデファクトなWebフレームワーク、技術スタックがない - 既存プロダクトコードがどのように構成されているかをキャッチアップする必要がある 今日のトピック 今日のトピック
  3. © LayerX Inc. 4 コードを見る前にやったほうがよいキャッチアップ - コードを触る前に行ったほうがよいキャッチアップは省略します - ドメイン知識(業務知識、業界標準、関連法制度 etc)のキャッチアップ

    - 開発環境でプロダクトを動かしてみる - プロダクトのサポートページを読む - システムアーキテクチャを把握する(RDBMS, 本番実行環境 etc) - DBスキーマやER図を確認する 前提(今日話さないこと) 今日のトピック
  4. © 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
  5. © LayerX Inc. 7 用意されたコマンドを確認 Makefile サービスを動かす前に - GoのタスクランナーはMakefileがほぼデファクトな印象 -

    テストの実行方法 - コードの自動生成 - ローカルの起動方法 - ビルド、デプロイ方法
  6. © LayerX Inc. 8 go.modをみて依存pkgの確認する 依存関係の確認 サービスを動かす前に - go getしてみる

    - 社内共通pkgなど、別のprivate repositoryに依存しているならば GOPRIVATE を設定する
  7. © 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
  8. © LayerX Inc. 11 プロダクトを動かしてみる 起動してみる ローカルで動かしてみる - go run,

    docker compose up, make… - MakefileやREADMEに書いてあるはず? - バクラクの場合 - TUIで全プロダクトを起動・管理できる
  9. © LayerX Inc. 12 どんな操作でどんなデータが作られるのか確認する 操作してみる ローカルで動かしてみる - フロントエンドから操作する -

    直接APIを実行する - バクラクの場合 - graphiql - lx.sh tool curlコマンド - いい感じに認証情報をつけてgRPCコールをしてくれるコマンド
  10. © LayerX Inc. 15 リポジトリの歩き方を覚える ディレクトリ構成を理解する コードを読んでみる - GoはデファクトのWebフレームワークがないので各社それぞれのディレクトリ構成となる -

    エンドポイントを探すならば、認証ロジックを探すならば、どのディレクトリからたどるとよいか - よくみかけるディレクトリ名 - handler, api - middleware, interceptor - usecase, service - domain - repository, gateway - infrastructure
  11. © LayerX Inc. 16 IDEを使おう ソースコードを読む コードを読んでみる - Goは型付け言語なのでIDEフレンドリー -

    定義元ジャンプ, 参照元検索で辿れる - interface定義から「interfaceを満たす実装」をたどるのは正直IDEがないと辛い
  12. © LayerX Inc. 17 GitHub Copilot Chatに聞いてみる ソースコードを読む コードを読んでみる -

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

    test - IDEから実行してみる - パラメータを変えて実行してみる - GoLandではテーブル駆動テストのケースごとに実行も可能 - 不要なケースをコメントアウトして実行するでもよい - デバッグ実行してみる
  14. © LayerX Inc. 20 次のNew Joinerのためにキャッチアップ結果をアウトプットしておく 大事なこと おわりに - 環境構築ドキュメントはアップデートが追いついていないことが多い

    - プロダクトの進化速度と増員頻度が異なるとすぐ陳腐化してしまう - ドキュメントの古くなっていたところを修正する - 人に聞かないとわからなかったことはドキュメントにする
  15. © LayerX Inc. 21 私がやるコードキャッチアップ方法を話しました おわりに おわりに - キャッチアップ結果のアウトプットは新しくプロダクトへのアサインされた人の最初の貢献! -

    バクラクプロダクトではどうなっているかも少し紹介しました - もっと詳しい話が聞きたい!こうやったほうがいいよ!などあればXなどでぜひお声がけください! - @budougumi0617