Giter VIP home page Giter VIP logo

monorepo's Introduction

monorepo

monorepoは、ゼロイチ開発の品質、速度をあげることを目的として、ispecがプロジェクトを通じて得たプラクティスを蓄積、集約し、新しくプロジェクトを始める際のテンプレートとして利用できるようにするためのOSSプロジェクトです。

monorepo is an OSS project that aims to improve the quality and speed of MVP development by accumulating and consolidating the practices that ispec has learned through its projects and making them available as templates for starting new projects.

Features

Developement

Branch & CI/CD Rules

.
├── main (master) -> Deploy all changed resource to stg. Run only CI/CD whose codes in "paths" are changed.
├── release/go-admin -> Deploy go/svc/admin to prd. Run go CI and go/svc/admin CD.
├── release/go-article
├── release/ts-admin
├── release/ts-article
├── release/mg-article -> Run migaration/article in prd.
└── release/terraform -> Deploy terraform resources to prd.

monorepo's People

Contributors

aganomaminmi avatar github-actions[bot] avatar harutaka814 avatar jasonwoodland avatar minminzemi avatar mrsala avatar renovate-bot avatar renovate[bot] avatar rinchsan avatar satoshi0ta avatar shunya078 avatar tanimutomo avatar txxxxc avatar yamad07 avatar yumafuu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

monorepo's Issues

社内のGoのコーディング規約のための草案作成

概要

社内でコーディング規約を定めたいのだが、いろんな会社のレビュー項目がいろんな場所に散らばっているので、それを調査して、草案を作れるような状態にしたい。

タスク

  • Uberをはじめ、公開されてるgoのコードレビュー基準みたいなものをかき集める
  • 共通する内容や、会社独自のものをざっくり分けてまとめる

Action Required: Fix Renovate Configuration

There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.

Error type: undefined. Note: this is a nested preset so please contact the preset author if you are unable to fix it yourself.

[rinsan-fb] cmd/api/adapter

[** cmd/api/adapter]
 せっかくpresenterパッケージを作っているので、成功したときのレスポンス生成もpresenterパッケージで抽象化するとキレイになりそう
 jsonタグをつけられる構造体に対してはjson.Marshalじゃなくてjson.Encoderを使うことが公式で推奨されてたりします

GraphQLのサービスを追加する

何をするのか

なぜやるのか

どうやってやるのか

工数

ロジックの複雑さ

サードパーティ製ツールのキャッチアップコスト

書くコードの量

リソースを作成するエンドポイントの作成

何をするのか

invitationを新規作成するエンドポイントを追加
(ついでにreadmeかく)

なぜやるのか

動作確認をスムーズにするため

どうやってやるのか

router, handler, usecase, repo, daoに必要な処理を書く

工数

ロジックの複雑さ

サードパーティ製ツールのキャッチアップコスト

書くコードの量

GitHub Actions

何をするのか

コードを自動でテストする各種リントツールを導入する.

なぜやるのか

レビューを自動化し,コードを業界標準に保つため.

どうやってやるのか

  • Dockerのリントツール
  • goのテスト実行
  • goのカバレッジ計測

工数

6

ロジックの複雑さ

0

サードパーティ製ツールのキャッチアップコスト

3

書くコードの量

3

Remove proto file and unused codes

何をするのか

なぜやるのか

どうやってやるのか

工数

ロジックの複雑さ

サードパーティ製ツールのキャッチアップコスト

書くコードの量

[rinsan-fb] pkg/domain

[** package domain]
 gomockでモックをgenerateするなら、モック生成対象のinterfaceの上とかに、//go:generate コメントを書いておくと、go generate ./...ですべてのモックを生成できるので保守性が上がりそう
 修正されるとは思いますが、gomockで生成されたモックが古いなのか、interfaceに準拠してないってエラーが出てます

[rinsan-fb] pkg/registry

[** package registry]
registryがUsecaseに依存しているのはできれば避けたい
min_repo_rinsanで共有した設計では、registryはrepository interfaceに準拠するdaoの実装を返すだけのメソッドが並ぶ、他のパッケージには依存しない簡易的なDIコンテナとして運用される意図でした

[rinsan-fb] テストの整備

usecase/daoのテストについて

検討すべき箇所

  • テストメソッドの命名
  • テスト用データのシーディング

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Awaiting Schedule

These updates are awaiting their schedule. Click on a checkbox to get an update now.

  • Update dependency msw to v1

Other Branches

These updates are pending. To force PRs open, click the checkbox below.

  • Update dependency @apollo/client to v3.7.5
  • Update dependency @unocss/webpack to v0.49.0
  • Update dependency unocss to ^0.49.0
  • Update module github.com/aws/aws-sdk-go to v1.44.187
  • Update typescript-eslint monorepo to v5.49.0 (@typescript-eslint/eslint-plugin, @typescript-eslint/parser)
  • Update Node.js

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

cocoapods
typescript/apps/react-ionic-template/ios/App/Podfile
docker-compose
docker-compose.yml
  • golang 1.18
  • redis 6.2
  • mysql 5.7
  • mysql 5.7
  • jwilder/dockerize 0.6.1
go/docker-compose.yml
  • golang 1.18
  • redis 6.2
  • mysql 5.7
  • mysql 5.7
  • jwilder/dockerize 0.6.1
typescript/apps/admin/docker-compose.yml
typescript/apps/nuxt-apollo-admin/docker-compose.yml
typescript/apps/nuxt-ssr-user/docker-compose.yml
dockerfile
go/docker/dev/Dockerfile
  • golang 1.18
go/docker/prod/Dockerfile
  • golang 1.18
go/tools/gen/docker/Dockerfile
  • golang 1.18
mysql/migrations/article/Dockerfile
  • alpine 3.15.2
typescript/apps/admin/docker/dev/Dockerfile
  • node 14.19
typescript/apps/admin/docker/prod/Dockerfile
  • node 14.19
  • nginx 1.23.3
typescript/apps/nuxt-apollo-admin/docker/dev/Dockerfile
  • node 14.19
typescript/apps/nuxt-apollo-admin/docker/prod/Dockerfile
  • node 14.19
  • nginx 1.23.3
typescript/apps/nuxt-ssr-user/docker/dev/Dockerfile
  • node 14.19
typescript/apps/nuxt-ssr-user/docker/prod/Dockerfile
  • node 14.19
  • nginx 1.23.3
github-actions
.github/workflows/go-deploy.yml
  • actions/checkout v2
  • aws-actions/configure-aws-credentials v1
  • aws-actions/amazon-ecr-login v1
  • actions/checkout v2
  • actions/checkout v2
  • peter-evans/create-pull-request v3
.github/workflows/go-test.yml
  • actions/checkout v2
  • codecov/codecov-action v1
.github/workflows/reviewdog.yml
  • actions/checkout v2
  • actions/setup-go v3
  • reviewdog/action-staticcheck v1.9
  • actions/checkout v2
  • reviewdog/action-hadolint v1
.github/workflows/sqldef.yml
  • actions/checkout v2
.github/workflows/techdoc.yml
  • actions/checkout v2
  • actions/setup-node v2
  • aws-actions/configure-aws-credentials v1
.github/workflows/terraform-apply.yml
  • actions/checkout v2
  • hashicorp/setup-terraform v1.3.2
  • aws-actions/configure-aws-credentials v1
.github/workflows/terraform-plan.yml
  • actions/checkout v2
  • technote-space/get-diff-action v4.2.0
  • aws-actions/configure-aws-credentials v1
  • hashicorp/setup-terraform v1.3.2
  • actions/github-script v3.1.1
.github/workflows/ts-test-user.yml
  • actions/checkout v2
  • actions/setup-node v1
.github/workflows/ts-test.yml
  • actions/checkout v2
  • actions/setup-node v1
.github/workflows/util-functions-ts-test.yml
  • actions/checkout v2
  • actions/setup-node v1
gomod
go/go.mod
  • go 1.18
  • github.com/DATA-DOG/go-txdb v0.1.5
  • github.com/aws/aws-sdk-go v1.43.37
  • github.com/caarlos0/env/v6 v6.9.1
  • github.com/getsentry/sentry-go v0.13.0
  • github.com/go-chi/chi v1.5.4
  • github.com/go-chi/cors v1.2.0
  • github.com/gomodule/redigo v1.8.8
  • github.com/google/uuid v1.3.0
  • github.com/graph-gophers/graphql-go v1.4.0
  • github.com/k0kubun/pp v3.0.1+incompatible
  • github.com/pkg/errors v0.9.1
  • github.com/stretchr/testify v1.7.1
  • go.uber.org/multierr v1.8.0
  • golang.org/x/sync v0.0.0-20210220032951-036812b2e83c@036812b2e83c
  • golang.org/x/text v0.3.7
  • gorm.io/driver/mysql v1.3.3
  • gorm.io/driver/postgres v1.3.4
  • gorm.io/gorm v1.23.4
gradle
typescript/apps/react-ionic-template/android/gradle.properties
typescript/apps/react-ionic-template/android/capacitor.settings.gradle
typescript/apps/react-ionic-template/android/settings.gradle
typescript/apps/react-ionic-template/android/variables.gradle
  • androidx.appcompat:appcompat 1.4.1
  • junit:junit 4.13.2
  • androidx.test.ext:junit 1.1.3
  • androidx.test.espresso:espresso-core 3.4.0
typescript/apps/react-ionic-template/android/build.gradle
  • com.android.tools.build:gradle 3.6.4
  • com.google.gms:google-services 4.3.10
typescript/apps/react-ionic-template/android/app/capacitor.build.gradle
typescript/apps/react-ionic-template/android/app/build.gradle
gradle-wrapper
typescript/apps/react-ionic-template/android/gradle/wrapper/gradle-wrapper.properties
  • gradle 5.6.4
npm
typescript/apps/admin/package.json
  • @aspida/axios 1.11.0
  • @babel/preset-env 7.20.2
  • @nuxt/typescript-build 2.1.0
  • @nuxt/typescript-runtime 2.1.0
  • @nuxtjs/auth 4.9.1
  • @nuxtjs/axios 5.13.6
  • @types/jest 27.5.2
  • @types/uuid 8.3.4
  • @typescript-eslint/eslint-plugin 4.33.0
  • @typescript-eslint/parser 4.33.0
  • @vue/runtime-dom 3.2.45
  • @vue/test-utils 1.3.3
  • axios 0.27.2
  • babel-core 6.26.3
  • camelcase-keys 6.2.2
  • eslint 7.32.0
  • eslint-plugin-github 4.6.0
  • eslint-plugin-typescript 0.14.0
  • hygen 6.2.11
  • jest 27.5.1
  • npm-run-all 4.1.5
  • nuxt 2.15.8
  • nuxt-typed-vuex 0.3.1
  • pathpida 0.20.1
  • sass 1.57.1
  • snakecase-keys 3.2.1
  • ts-jest 27.1.5
  • ts-loader 8.4.0
  • ts-node 10.9.1
  • typed-vuex 0.3.1
  • typescript 4.4.2
  • uuid 8.3.2
  • vee-validate 3.4.14
  • vue-class-component 7.2.6
  • vue-eslint-parser 7.11.0
  • vue-jest 3.0.7
  • vue-property-decorator 9.1.2
  • vuex-module-decorators 1.0.1
  • @nuxt/typescript-build 2.1.0
  • @nuxtjs/dotenv 1.4.1
  • @nuxtjs/eslint-config 3.1.0
  • @nuxtjs/eslint-config-typescript 2.1.0
  • @nuxtjs/eslint-module 2.0.0
  • @nuxtjs/stylelint-module 4.1.0
  • @nuxtjs/vuetify 1.12.3
  • @types/nuxtjs__auth 4.8.8
  • cypress 6.9.1
  • eslint-config-prettier 6.15.0
  • eslint-plugin-cypress 2.12.1
  • eslint-plugin-nuxt 1.0.0
  • eslint-plugin-prettier 3.4.1
  • husky 4.3.8
  • lint-staged 10.5.4
  • prettier 2.8.3
  • sass-loader 7.3.1
  • stylelint 13.13.1
  • stylelint-config-prettier 8.0.2
  • stylelint-config-standard 20.0.0
typescript/apps/next-apollo/package.json
  • @apollo/client ^3.5.10
  • cross-fetch ^3.1.5
  • graphql-tag ^2.12.6
  • install ^0.13.0
  • next ^12.1.0
  • react ^18.2.0
  • react-dom ^18.2.0
  • sass 1.57.1
  • @graphql-codegen/cli ^2.11.6
  • @graphql-codegen/introspection ^2.2.1
  • @graphql-codegen/typescript ^2.7.3
  • @graphql-codegen/typescript-graphql-request ^4.5.3
  • @graphql-codegen/typescript-operations ^2.5.3
  • @graphql-codegen/typescript-react-apollo ^3.3.3
  • @testing-library/jest-dom ^5.16.5
  • @testing-library/react ^13.3.0
  • @testing-library/user-event ^14.4.3
  • @types/graphql ^14.5.0
  • @types/jest ^28.1.6
  • @types/node ^18.7.1
  • @types/react ^18.0.17
  • @types/react-dom ^17.0.11
  • @typescript-eslint/eslint-plugin 5.21.0
  • @typescript-eslint/parser 5.21.0
  • @unocss/webpack 0.30.13
  • eslint 8.8.0
  • eslint-config-next 12.0.9
  • eslint-config-prettier ^8.5.0
  • eslint-plugin-import ^2.25.4
  • eslint-plugin-prettier ^4.0.0
  • eslint-plugin-react ^7.29.4
  • eslint-plugin-typescript-sort-keys ^2.1.0
  • graphql-codegen-typescript-mock-data ^2.2.5
  • husky ^7.0.4
  • hygen ^6.2.0
  • jest ^28.1.3
  • jest-environment-jsdom ^28.1.3
  • lint-staged ^12.3.7
  • msw ^0.44.2
  • npm-run-all ^4.1.5
  • prettier ^2.6.0
  • typescript ^4.5.5
  • unocss ^0.30.7
  • windicss ^3.5.1
typescript/apps/nuxt-apollo-admin/libs/fast-form/package.json
  • dayjs ^1.10.6
  • @types/node 14.18.10
  • typescript 4.2.4
typescript/apps/nuxt-apollo-admin/libs/util-functions/package.json
  • @babel/preset-env ^7.15.6
  • @types/jest ^27.0.2
  • jest ^27.2.3
  • rfdc ^1.3.0
  • ts-jest ^27.0.5
  • ts-node ^10.2.1
  • @types/node 14.18.10
  • typescript 4.2.4
typescript/apps/nuxt-apollo-admin/package.json
  • @apollo/client 3.5.10
  • @babel/preset-env 7.20.2
  • @nuxt/typescript-build 2.1.0
  • @nuxt/typescript-runtime 2.1.0
  • @nuxtjs/apollo 4.0.1-rc.5
  • @nuxtjs/auth 4.9.1
  • @nuxtjs/axios 5.13.6
  • @types/jest 27.5.2
  • @types/uuid 8.3.4
  • @typescript-eslint/eslint-plugin 4.33.0
  • @typescript-eslint/parser 4.33.0
  • @vue/apollo-option 4.0.0-alpha.20
  • @vue/test-utils 1.3.3
  • babel-core 6.26.3
  • camelcase-keys 6.2.2
  • eslint-plugin-typescript 0.14.0
  • graphql 16.3.0
  • graphql-tag 2.12.6
  • husky 7.0.4
  • hygen 6.2.8
  • jest 27.5.1
  • npm-run-all 4.1.5
  • nuxt 2.15.8
  • nuxt-property-decorator 2.9.1
  • nuxt-typed-vuex 0.3.1
  • pathpida 0.20.1
  • sass 1.57.1
  • snakecase-keys 3.2.1
  • ts-jest 27.1.5
  • ts-loader 8.4.0
  • ts-node 10.2.1
  • typed-vuex 0.3.1
  • typescript 4.4.2
  • uuid 8.3.2
  • vee-validate 3.4.14
  • vue-class-component 7.2.6
  • vue-eslint-parser 7.11.0
  • vue-jest 3.0.7
  • vue-property-decorator 9.1.2
  • vuex-module-decorators 1.0.1
  • @nuxt/typescript-build 2.1.0
  • @nuxtjs/dotenv 1.4.1
  • @nuxtjs/eslint-config 3.1.0
  • @nuxtjs/eslint-config-typescript 2.1.0
  • @nuxtjs/eslint-module 2.0.0
  • @nuxtjs/stylelint-module 4.1.0
  • @nuxtjs/vuetify 1.12.3
  • @types/nuxtjs__auth 4.8.8
  • cypress 6.9.1
  • eslint 7.32.0
  • eslint-config-prettier 6.15.0
  • eslint-plugin-cypress 2.12.1
  • eslint-plugin-nuxt 1.0.0
  • eslint-plugin-prettier 3.4.1
  • lint-staged 10.5.4
  • sass-loader 7.3.1
  • stylelint 13.13.1
  • stylelint-config-prettier 8.0.2
  • stylelint-config-standard 20.0.0
  • yarn 1.22.17
typescript/apps/nuxt-ssr-user/package.json
  • @nuxt/typescript-runtime 0.4.10
  • @nuxtjs/auth 4.9.1
  • @nuxtjs/axios 5.13.6
  • @types/jest 27.5.2
  • @typescript-eslint/eslint-plugin 4.33.0
  • @typescript-eslint/parser 4.33.0
  • @vue/test-utils 1.3.3
  • babel-core 6.26.3
  • camelcase-keys 6.2.2
  • eslint-plugin-typescript 0.14.0
  • jest 27.5.1
  • node-sass 7.0.1
  • nuxt 2.15.8
  • nuxt-property-decorator 2.9.1
  • nuxt-typed-vuex 0.3.1
  • snakecase-keys 3.2.1
  • ts-jest 27.1.5
  • ts-loader 8.4.0
  • ts-node 10.2.1
  • typed-vuex 0.3.1
  • typescript 4.4.2
  • typescript-eslint 0.0.1-alpha.0
  • vee-validate 3.4.14
  • vue-class-component 7.2.6
  • vue-eslint-parser 7.11.0
  • vue-jest 3.0.7
  • vuex-module-decorators 1.0.1
  • @nuxt/typescript-build 1.0.3
  • @nuxtjs/dotenv 1.4.1
  • @nuxtjs/eslint-config 3.1.0
  • @nuxtjs/eslint-config-typescript 2.1.0
  • @nuxtjs/eslint-module 2.0.0
  • @nuxtjs/stylelint-module 4.1.0
  • @types/nuxtjs__auth 4.8.8
  • cypress 6.9.1
  • eslint 7.32.0
  • eslint-config-prettier 6.15.0
  • eslint-plugin-cypress 2.12.1
  • eslint-plugin-nuxt 1.0.0
  • eslint-plugin-prettier 3.4.1
  • husky 4.3.8
  • lint-staged 10.5.4
  • prettier 2.8.3
  • sass-loader 7.3.1
  • stylelint 13.13.1
  • stylelint-config-prettier 8.0.2
  • stylelint-config-standard 20.0.0
typescript/apps/react-ionic-template/package.json
  • @capacitor/android 2.5.0
  • @capacitor/core 2.5.0
  • @capacitor/ios 2.5.0
  • @ionic/react 5.9.3
  • @ionic/react-router 5.9.3
  • @testing-library/jest-dom 4.2.4
  • @testing-library/react 9.5.0
  • @testing-library/user-event 8.1.3
  • @types/jest 24.9.1
  • @types/node 12.20.47
  • @types/react 16.14.24
  • @types/react-dom 16.9.14
  • @types/react-router 5.1.18
  • @types/react-router-dom 5.3.3
  • ionicons 5.5.4
  • react 16.14.0
  • react-dom 16.14.0
  • react-router 5.2.1
  • react-router-dom 5.3.0
  • react-scripts 4.0.3
  • styled-components 5.3.3
  • styled-theme 0.3.3
  • typescript 3.9.10
  • @capacitor/cli 2.5.0
  • @typescript-eslint/eslint-plugin 3.10.1
  • @typescript-eslint/parser 3.10.1
  • awesome-typescript-loader 5.2.1
  • cypress 6.9.1
  • eslint 7.32.0
  • eslint-config-prettier 6.15.0
  • eslint-config-react-app 5.2.1
  • eslint-plugin-flowtype 5.10.0
  • eslint-plugin-import 2.25.4
  • eslint-plugin-jsx-a11y 6.5.1
  • eslint-plugin-prettier 3.4.1
  • eslint-plugin-react 7.29.3
  • eslint-plugin-react-hooks 4.3.0
  • husky 4.3.8
  • jest-transform-stub 2.0.0
  • jss 10.9.0
  • lint-staged 10.5.4
  • pre-commit 1.2.2
  • prettier 2.8.3
  • ts-jest 26.5.6
typescript/apps/react-vite-relay/package.json
  • react ^17.0.2
  • react-dom ^17.0.2
  • react-relay ^13.0.2
  • react-router ^6.2.2
  • react-router-dom ^6.2.2
  • relay-runtime ^13.0.2
  • styled-components ^5.3.3
  • @types/react ^17.0.33
  • @types/react-dom ^17.0.10
  • @types/react-relay ^13.0.1
  • @types/rebass ^4.0.10
  • @types/relay-config ^6.0.2
  • @types/relay-runtime ^13.0.1
  • @typescript-eslint/eslint-plugin ^5.15.0
  • @typescript-eslint/parser ^5.17.0
  • @vitejs/plugin-react ^1.0.7
  • @vitejs/plugin-react-refresh ^1.3.6
  • eslint ^8.11.0
  • eslint-config-next ^12.1.0
  • eslint-config-prettier ^8.5.0
  • eslint-import-resolver-typescript ^2.4.0
  • eslint-plugin-graphql ^4.0.0
  • eslint-plugin-import ^2.23.4
  • eslint-plugin-jsx-a11y ^6.4.1
  • eslint-plugin-prettier ^4.0.0
  • eslint-plugin-react ^7.23.2
  • eslint-plugin-react-hooks ^4.2.0
  • graphql ^16.3.0
  • husky ^7.0.4
  • prettier 2.8.3
  • relay-compiler ^13.2.0
  • relay-config ^12.0.1
  • typescript ^4.5.4
  • vite ^2.8.0
  • vite-plugin-relay ^1.0.7
typescript/libs/fast-form/package.json
  • dayjs ^1.10.6
  • @types/node 14.18.10
  • typescript 4.2.4
typescript/libs/proto/package.json
  • @types/google-protobuf 3.15.5
  • google-protobuf 3.19.4
  • typescript 4.3.2
typescript/libs/util-functions/package.json
  • @babel/preset-env ^7.15.6
  • @types/jest ^27.0.2
  • jest ^27.2.3
  • rfdc ^1.3.0
  • ts-jest ^27.0.5
  • ts-node ^10.2.1
  • @types/node 14.18.10
  • typescript 4.2.4
typescript/package.json
nvm
typescript/apps/nuxt-apollo-admin/.nvmrc
  • node 16.0.0
terraform
terraform/modules/lambda_edge/main.tf
  • aws 2.70.1
terraform/modules/scheduled_task/main.tf

  • Check this box to trigger a request for Renovate to run again on this repository

renovateの設定の最適化

何をするのか

  • renovateの設定項目の調査
  • ispecのプロジェクトに導入する上での最適な設定を monorepo で行う
  • patch version は auto-merge するなど,運用方法の提案までする

なぜやるのか

  • renovate のタスクが,default で 2h ごとに回っていて,actions の usage limit を逼迫させていた
  • renovate の PR のマージルールなどが確立されておらず,PRが放置されている

どうやってやるのか

以下を参考にして,設定について調査する
https://docs.renovatebot.com/configuration-options/

工数

ロジックの複雑さ

サードパーティ製ツールのキャッチアップコスト

3

書くコードの量

1

テストフレームワークの作成

概要
goのユニットテストと結合テストを簡単に作成・実行できるような仕組みをつくる。

実行できるテストの種類

  • ユニットテスト
    • 単体の関数、構造体の振る舞いをテストする。
  • 結合テスト
    • 複数のモジュールを組み合わせたテスト。usecaseレイヤーのテストなどはここに当たる。
  • E2Eテスト
  • リクエストを送ってレスポンスが正しく返って来るかを検証する。

インターフェース

# ファイルをパースしてテストコードの雛形を作成
$ make test gen unit /path/to/unit
$ make test gen app /path/to/unit
$ make test gen e2e /path/to/unit


# ルートディレクトリから見た全部のディレクトリのテストの、特定のタイプのテストを実行
$ make test exec unit
$ make test exec app
$ make test exec e2e

[rinsan-fb] pkg/infra

[** package infra]
 テストまわりをもう少し整備したほうが良さそう
  テストメソッドの命名やテスト用データのシーディングなど
  あとapperror.ErrorがError interfaceに準拠していないのにテスト内でError()メソッドを呼んじゃってるような気がする

[rinsan-fb] docker周り


[** Dockerまわり]
 Dockerfileで使うGoのイメージはバージョン指定したほうが良さそう
  golang:alpineだとdocker pullしたときの最新バージョンになってしまうので開発者間で環境差異が生じてしまう
 マルチステージビルドをしているが、ローカル開発環境ではコード変更のたびにビルドするのが大変なので、docker-composeにてローカルのコードをVolume mountして、その変更に対してローカルサーバをホットリロードできるようにすると開発効率が上がりそう
 	マルチステージビルドしてalpineとかの軽いイメージにバイナリだけ乗せるのはGoではよくあるやり方だが、それはコンテナの立ち上がりスピードとかが求められる本番環境での話なので、本番用とローカル開発用の2つのDockerfileを用意して、開発用ではホットリロードのライブラリを起動するCMDを書く(docker-composeでのCMD上書きもやめる)、というのが良いと思う
 	mysqlがready for connectionになるのを待機したいなら、 https://github.com/jwilder/dockerize とかを使うと最適化されて良さそう
 	ついでに本番用はalpineではなくscratchを使うようにするとさらにイメージサイズ削減になるかもなので検討してみてもいいかも
 Dockerfileがプロジェクトルートにあるので、分散モノリスで他のAPIをビルドするDockerfileは置き場所に困りそう
 	1つのリポジトリで1つのAPIしか管理しないなら問題ない
 ADD使う必要がない場合はCOPYにしたほうが良さそう
 	https://qiita.com/momotaro98/items/bf34eef176cc2bdb6892
 cmd/api/server内の全ファイルを明示的に指定してビルドしているが、ファイルが増えたりしたときに変更するのが面倒なので、そのディレクトリをWORKDIRに指定してgo buildするとファイル指定しなくても良いので保守性上がりそう
 appuserをadduserしてるのはビルドしたバイナリの実行権限を与えるためでしょうか?ちゃんと検証できていないので微妙ですが、/go/bin/serverとかにバイナリを置くと実行可能な状態で渡せたような気がします

[rinsan-fb] その他

[** その他細かい点]
 vendorをgitignoreしといてもいいかも
 	ローカルでのコード補完とかでvendor使いたい人とかがいたり、CI上で依存ライブラリをキャッシュしたいときとかにもvendorが有用になってくることがあるので、一応go mod vendorしても問題ないように
 ところどころで不必要なExportや、関数の引数が大文字始まりになっていたりするので、そのへんキレイにできると可読性が上がりそう
 daoでgorm.IsRecordNotFoundError(err)でエラーの分岐をしているところ、switch使えばキレイになりそう
 configパッケージ内のNewRouterを外部から呼んでいるところ、今はサーバ起動時の1回しか呼ばれないコード量になっているが、このパッケージにこれからいろんな設定情報が入ってきて、その設定を取得するたびにNewXxxx()を呼ぶ設計にしてしまうと、一番よくある環境変数から設定情報取得する、という結構コストの高い処理がいろんなところから呼ばれるようになってしまい、パフォーマンスの管理が大変になるかも
 	せっかくinit.go作っているので、そこにinit()を書いて、パッケージ初期化時にのみ設定情報を読み込み、あとはconfig.Shared.App.Envみたいな形でシングルトンっぽく管理されたものに必要な場所からアクセスする、という形がよいと思うが、init()を嫌うLint設定とかもあるので、このへんは好みになるかもしれない

[rinsan-fb] src

 src]
 input.goがjsonタグを持っていて、ビジネスロジックにJSONというAdapterの関心事が入っちゃってます
 	これは僕がmin_repoで最初に共有したやつが悪いので申し訳ないです
 	改善策としては、adapterにrequest.goみたいなのを作ってそいつがjsonタグを持っていて、そいつがinputを生成する、みたいな感じがいいと思います
 	何も認証とかしないAPIだとrequest.goとinput.goがほとんど一緒になって気持ち悪いかもですが、Adapterでユーザ認証のUsecaseを呼んでUserIDをトークンから割り出してinputに入れてビジネスロジック用のUsecaseに渡す、みたいなコードになることが多いので、コード量が増えてくるとあまり気にならない気がしています
 OutputやInputという命名になっているのは、これからUsecaseメソッドが増えてくると衝突するので、Usecase名が入ったInput/Outputを作るべきだと思います
 せっかく.envファイルから環境変数を注入しているので、テストもDocker内で行えるようにしてdotenvをなくせるとキレイかも
 daoのテストと同じように、これからUsecaseがドンドン増えていく中でテストを保守していきやすいように整備しておくとあとあと楽になりそう
 cmd/apiみたいにモノレポっぽく複数のAPIをこのリポジトリで管理するなら、ビジネスロジックもAPIごとに分けたほうがキレイかもしれないので、src/apiみたいな感じで分けるのもアリかも
 	複数のAPIで同じビジネスロジックを参照するようなことが多い可能性も分散モノリスでは十分ありえるので、一旦今のまま進めてもいいかもです(認証まわりとかは同じUsecaseになることがやっぱり多い)

Makefileの修正

概要

  1. lint、coverage、formatterが実行できるようにする。
  2. 現状のdocker経由の起動を、make docker-runmake docker-buildみたいな感じでdockerのprefixをつける (goの環境がないフロントエンドエンジニア用にDockerで起動する手段を残しておきたい)

工数

合計
4

コーディング
4

ロジック
0

キャッチアップ
0

テスト基盤のコードレビュー

概要
コードをざっと見ていただき、とくにテスト周りで修正できそうなポイントをスクラップボックスに列挙してもらう。
りんさんがすでにやってくれているが、レビューの重複とかは問題ないのと、優先順位がたかそうなものがあればその旨も書いていただけると嬉しいです!

参考

工数

  • 4

golintからstaticcheckへの移行

何をするのか

goの静的解析ツールをstaticcheckへ移行する

なぜやるのか

golintが非推奨になった。

どうやってやるのか

今作っているスタイルガイドのルールのうち、staticcheckで対応できる部分の設定をする。

工数

ロジックの複雑さ

1

サードパーティ製ツールのキャッチアップコスト

3

書くコードの量

2

[rinsan-fb] pkg/mysql


[** package mysql]
 GetConnectionでdbを返しているが、できるだけdbはPrivateにしたいので、db.Close()を呼ぶCleanup()関数とかを作って、その関数をSetDB()で返すようにして、呼び出し側ではそのcleanupをdeferで呼ぶ、みたいにすると、main.goでのmysql依存も少しは減るのでキレイになりそう
 そもそもmain.goでmysqlパッケージを見てしまっているのはDIとかしにくくなるので、registryを経由したいところ
 	多分registryの使い方があまり伝わっていなさそうです
 	イメージとしては、repo, cleanup := registry.NewRepository(); defer cleanup()を書いたあとに、repoをrouter生成メソッドに渡し、router生成メソッド内部でHandlerの生成をするときにrepo.NewInvitation()を呼んでrepository.Invitationの実装を取得する、みたいなイメージです(テキストでの説明めっちゃむずいのでコード書いたほうが良さそう)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.