{"id":17637867,"url":"https://github.com/Yuki-TU/point-app-backend","last_synced_at":"2025-09-08T09:31:45.011Z","repository":{"id":61847757,"uuid":"555728610","full_name":"Yuki-TU/point-app-backend","owner":"Yuki-TU","description":"ハッカソン2022で作成するポイントアプリのバックエンドプロジェクト","archived":false,"fork":false,"pushed_at":"2025-04-19T10:29:33.000Z","size":2776,"stargazers_count":15,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-06T03:57:18.217Z","etag":null,"topics":["docker","gin","golang"],"latest_commit_sha":null,"homepage":"https://Yuki-TU.github.io/point-app-backend/swagger/index.html","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Yuki-TU.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-10-22T07:19:06.000Z","updated_at":"2025-04-27T15:02:47.000Z","dependencies_parsed_at":"2023-10-01T05:23:05.854Z","dependency_job_id":"428e5766-313f-4949-bb30-4a649d4340f9","html_url":"https://github.com/Yuki-TU/point-app-backend","commit_stats":{"total_commits":438,"total_committers":7,"mean_commits":62.57142857142857,"dds":0.5684931506849316,"last_synced_commit":"028ace12b5a55a5ef5bb8ecc603100bb6ec5c7c2"},"previous_names":["yuki-tu/point-app-backend"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Yuki-TU/point-app-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yuki-TU%2Fpoint-app-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yuki-TU%2Fpoint-app-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yuki-TU%2Fpoint-app-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yuki-TU%2Fpoint-app-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Yuki-TU","download_url":"https://codeload.github.com/Yuki-TU/point-app-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yuki-TU%2Fpoint-app-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274165315,"owners_count":25233868,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","gin","golang"],"created_at":"2024-10-23T03:06:29.339Z","updated_at":"2025-09-08T09:31:44.994Z","avatar_url":"https://github.com/Yuki-TU.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# point-app-backend\n\nハッカソン2022で作成するポイントアプリのバックエンドプロジェクト\n\n## 開発手順\n\n```sh\n# 環境手順\ngit clone https://github.com/hack-31/point-app-backend.git\ncd ./point-app-backend\n\n# JWTに必要なキー生成\nmake create-key\n# ビルド、コンテナ起動\nmake build-up\n# コンテナの中に入る\nmake in\n# マイグレーション適用\nmake migrate\nmake seed\n# コンテナを抜ける\nexit\n# サーバーログ\nmake log\n\n# ２回目位以降\nmake up\nmake log\n```\n\n詳しくは、makeコマンドを実行\n\nサーバー起動したら、ホスト側で以下のURLでアクセス可能\n\n- [API](http://localhost:8081)\n- [swagger-ui](http://localhost:80)\n- [adminer](http://localhost:8082)\n- [aws](http://localhost:4566)\n\nソースコードを書く際、vscodeを利用しているユーザは、[Dev container](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)を利用して開発することを推奨する。\nコンテナ内のファイルを直接修正でき、[Goの拡張機能](https://github.com/golang/vscode-go)により型補完や保存時フォーマットが使えるようになる。\n\ndev containerでの開発方法\n\n1. vscodeに[Dev container](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)を導入\n2. cmd+shift+pを押し、`\u003eopen folder in container`を押し、このプロジェクトを選択\n3. 右下の通知に表示されるGo拡張機能に必要なモジュールをインストールボタンを押し、インストールする\n4. vscode内のターミナルで`air`でサーバー起動\n\n今回、ホットリロードを利用しているため、保存のたびにサーバーを再起動する必要はない。\n\n## フォーマッター、リンター\n\nコンテナ内で以下のコマンドを実行\n\n```sh\n# フォーマッター\nmake format\n# リンター(フォーマッターを事前)\nmake lint\n```\n\n## テスト\n\nテストを実行するのみであれば以下のコマンドで行う\n\n```sh\nmake test\n```\n\nより詳細なテストのカバレッジを表示したい場合は以下のコマンドを実行\n\n```sh\n# ブラウザで表示(ホスト側)\nmake wc\n```\n\n## DB\n\n開発用データベース情報\n\n| 項目             | 値        |\n| ---------------- | --------- |\n| データベース種類 | MySQL     |\n| サーバ           | db        |\n| ユーザ名         | admin     |\n| パスワード       | password  |\n| データベース     | point_app |\n\n## マイグレーション\n\n`make dry-migrate`でDDLを確認して、`make migrate`でマイグレーションする流れとなる\n\n```sh\n# マイグレーションする際に発光されるDDLを確認(実行はされない)\nmake dry-migrate\n# マイグレーション適用\nmake migrate\n```\n\n## 初期データ挿入\n\n`./_tool/mysql/seed.sql`に初期データを挿入するコマンドを記述\nAWS cloud9の[point-app-dev](https://ap-northeast-1.console.aws.amazon.com/cloud9/home/environments/9e3ee1e0dda0408b80b541ecd88be4da?permissions=owner)で以下のコマンドで挿入\n\n```sh\nmake seed\n```\n\n## DIツール\n\nDIを行う際には、[google/wire](https://github.com/google/wire)というDIツールを使用します。新しいルーティングを追加したり、既存のルーティングのIFが変更された場合は、それに合わせて更新する必要があります。以下のコマンドで更新できます。\n\n```sh\n# api\nmake wire\n# batch\nmake wire-b\n```\n\n`router/wire.go`は定義元のファイルであり、`router/wire_gen.go`は生成されたファイルです。実際の利用では、`router/wire_gen.go`が使用されます。\n\n## 各ディレクトリの説明\n\n詳しい説明は、各ディレクトリのREADME.mdに些細されているものもあります。\n\n- `/auth`\n  - JWT認証におけるトークン作成や検証を行う処理が書かれたパッケージ\n- `/router`\n  - ルーティング処理を書きます\n  - DIを行う\n- `/docs`\n  - ドキュメントが配置\n  - swaggerなどを修正する際は`/docs/openapi.yml`で行う\n- `/cmd`\n  - コマンド\n  - main関数があるエントリーファイルの置き場\n- `/handler`\n  - ハンドラー層\n  - クライアントのデータをバリデーション\n  - クライアントにデータを返す\n- `/service`\n  - サービス層\n  - ドメイン層、リポジトリ層を利用してユースケースを実現する\n- `/domain`\n  - ドメイン層\n  - サービス間(ユースケース間)をまたがるロジックを記述\n- `/repository`\n  - リポジトリ層\n  - DBやキャッシュサーバーにアクセスする\n- `/myerror`\n  - カスタムエラーを定義する\n- `/_tools`\n  - 各ツールを利用するためのディレクトリ\n  - `/_tools/mysql/schema.sql`にテーブル作成のためのDDL定義\n- `/config`\n  - 各種環境変数などの設定値など\n- `/constant`\n  - サービス全体として定数などを定義\n- `/utils`\n  - ユーティリティパッケージ\n\n## バッチ\n\n```sh\n# バッチアプリの作成\nmake batch\nsuccess! try batch command!\n# batchの実行\nbatch \nNAME:\n   batch - point app batch processing\n\nUSAGE:\n   batch [global options] command [command options] \n\nCOMMANDS:\n   reset_sendable_point, rsp  Reset sendable point\n   help, h                    Shows a list of commands or help for one command\n```\n\n## モック\n\n以下の方法で実行。\n\n```sh\nmake mock\n```\n\n各インターフェース定義書があるディレクトリに`/_mock`があり、`mock_*.go`というファイルが作成される。\nそのファイルがモックファイルになる。\n\n以下の方法は古いため、mockgenを利用した方法に書き換える。\n\n以下のコマンドでモックを作成する\n\n```sh\nmake moq\n```\n\n各層でモックを作成する。\nモックを追加する際は、`./Makefile`の`go moq`に記載された`moq`コマンドのオプションにIF名を追加する\n\n```sh\nmoq -out ./handler/moq_test.go ./handler RegisterUserService [ここにIF名を追加する]\n```\n\n今後モックファイルを追加する際は`*_moq_test.go`と命名にすること\n\n## デプロイ\n\nGitHub Action, Codepipelineによる自動デプロイになります。mainブランチにマージされると自動でデプロイされます。\nGitHub Actionでは、Docker Imageを作成、ECRに登録を行い、Codepipelineでは、ECRからImageを取得し、ECSにデプロイします。\n\n### 手動デプロイ方法\n\nAWS cloud9の[point-app-dev](https://ap-northeast-1.console.aws.amazon.com/cloud9/home/environments/9e3ee1e0dda0408b80b541ecd88be4da?permissions=owner)にて以下のコマンド実行\n\n```sh\npwd\n/home/ec2-user/environment/point-app-backend\n# 値の設定\nAWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)\nIMAGE_TAG=$(git rev-parse HEAD)\nECR_REGISTRY=${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com\n# ビルド\ndocker image build \\\n  -t ${ECR_REGISTRY}/point-app-backend:latest \\\n  -t ${ECR_REGISTRY}/point-app-backend:${IMAGE_TAG}  \\\n  --target deploy ./ --no-cache\n# ECRログイン\naws ecr --region ap-northeast-1 get-login-password | docker login --username AWS --password-stdin ${ECR_REGISTRY}/point-app-backend\n# ECR push\ndocker image push -a ${ECR_REGISTRY}/point-app-backend\n```\n\nmakeコマンドを利用する場合は、以下の2つでデプロイ可能\n\n```sh\nmake build\nmake push\n```\n\nECRにデプロイされると、latestタグの更新がトリガーとなり、codepipelineによってECSにデプロイが走ります。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYuki-TU%2Fpoint-app-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FYuki-TU%2Fpoint-app-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYuki-TU%2Fpoint-app-backend/lists"}