{"id":16466243,"url":"https://github.com/isystk/kotlin-springboot-boilerplate","last_synced_at":"2026-04-09T23:55:17.694Z","repository":{"id":47193365,"uuid":"328037305","full_name":"isystk/kotlin-springboot-boilerplate","owner":"isystk","description":"🌙 SpringBoot2（Kotlin）の学習用サンプルアプリケーションです。SpringBootを初めて学習してみたい方、Dockerを利用したJavaの開発環境を構築したい方、ECサイトを学習してみたい方、管理画面も作成（マルチログイン）を作成したい方、Stripeを利用した決算処理を作成してみたい方、ソーシャルログインを作成してみたい方、オブジェクトストレージへの画像アップロードを作成してみたい方、フロントエンドをReactで作成してみたい方にオススメです。","archived":false,"fork":false,"pushed_at":"2022-07-23T11:50:27.000Z","size":48042,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-27T23:02:45.602Z","etag":null,"topics":["adminlte3","docker","doma2","kotlin","mysql","react18","reacthooks","solr","springboot2","storybook","stripe","swagger"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/isystk.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}},"created_at":"2021-01-08T23:47:32.000Z","updated_at":"2024-01-05T08:33:28.000Z","dependencies_parsed_at":"2022-07-26T05:32:13.141Z","dependency_job_id":null,"html_url":"https://github.com/isystk/kotlin-springboot-boilerplate","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/isystk/kotlin-springboot-boilerplate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isystk%2Fkotlin-springboot-boilerplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isystk%2Fkotlin-springboot-boilerplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isystk%2Fkotlin-springboot-boilerplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isystk%2Fkotlin-springboot-boilerplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isystk","download_url":"https://codeload.github.com/isystk/kotlin-springboot-boilerplate/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isystk%2Fkotlin-springboot-boilerplate/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267803984,"owners_count":24146527,"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-07-30T02:00:09.044Z","response_time":70,"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":["adminlte3","docker","doma2","kotlin","mysql","react18","reacthooks","solr","springboot2","storybook","stripe","swagger"],"created_at":"2024-10-11T11:36:52.837Z","updated_at":"2026-04-09T23:55:17.653Z","avatar_url":"https://github.com/isystk.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌙 kotlin-springboot-boilerplate\n\n[![isystk](https://circleci.com/gh/isystk/kotlin-springboot-boilerplate.svg?style=svg)](https://circleci.com/gh/circleci/circleci-docs)\n![GitHub issues](https://img.shields.io/github/issues/isystk/kotlin-springboot-boilerplate)\n![GitHub forks](https://img.shields.io/github/forks/isystk/kotlin-springboot-boilerplate)\n![GitHub stars](https://img.shields.io/github/stars/isystk/kotlin-springboot-boilerplate)\n![GitHub license](https://img.shields.io/github/license/isystk/kotlin-springboot-boilerplate)\n\n## 📗 プロジェクトの概要\n\nSpringBoot ＆ React.js の学習用サンプルアプリケーションです。\n本プロジェクトは、[こちら](https://github.com/isystk/java-springboot-boilerplate)で作成した「java-springboot-boilerplate」をKotlinでリメイクしたものになります。\n\n### 対象としている方\n- SpringBootを初めて学習してみたい方\n- Dockerを利用したSpringBootの開発環境を構築したい方\n- フロントだけでなく管理画面も作成して統合的なサンプルを作成したい方\n- オブジェクトストレージへの画像アップロードを作成してみたい方\n- フロントエンドをReact.jsで作成してみたい方\n- Stripeを利用した決算処理を作成してみたい方\n- ソーシャルログインを作成してみたい方\n\n\n### 利用している技術\n\n#### ■ インフラ\n- Nginx　・・・　WebサーバーとしてNginxを採用しました。自己証明書を設定済みなので開発環境でSSLとして動作可能です。\n- MySQL　・・・　DBサーバーにはMySQLを採用しました。データファイルや設定ファイル、 ログなどはコンテナの外に出して 開発時に参照出来るようにしています。\n- phpMyAdmin　・・・　起動したMySQLのデータを参照・編集するためのツールです。\n- MailHog 　・・・　ダミーのSMTPサーバーです。送信したメールをブラウザで閲覧することが可能です。実際にはメールは送信されないので開発時の誤送信してしまう心配がありません。\n- Minio 　・・・　S3に完全互換性のあるオブジェクトストレージです。アップロードした画像の保存先として利用しています。\n- Redis 　・・・　永続化可能なインメモリデータベースです。DBから取得したデータのキャッシュとして利用しています。\n- Solr 　・・・　検索サーバーです。事前にバッチを実行してDBの値をSolrにインデックスしておくことでWeb検索時の速度アップや負荷軽減が期待できます。\n\n#### ■ アプリケーション\n\n- SpringBoot 2.5\n- React 18\n- Typescript\n- Bootstrap 4\n- Adminlte 3\n\n## 🌐 Demo\n\n#### ■ フロント画面(React)\n\n![フロント画面](./front.png \"フロント画面\")\n\n- ログイン/ログアウト\n- 会員登録\n- パスワードリマインダ\n- 商品一覧\n- カートに追加\n- 決算処理(Stripe)\n- お気に入り追加\n- お問い合わせ\n- ソーシャルログイン(Google)\n\n```mermaid\ngraph LR\n\n  classDef default fill: #fff,stroke: #333,stroke-width: 1px;\n  style funcA fill: #fff,stroke: #333,stroke-width: 1px;\n  style funcB fill: #fff,stroke: #333,stroke-width: 1px;\n  style funcC fill: #fff,stroke: #333,stroke-width: 1px;\n  style funcD fill: #fff,stroke: #333,stroke-width: 1px;\n  style header fill: #fff,stroke: #333,stroke-width: 1px;\n\n  TOP--\u003eログイン--ID/パスワード認証--\u003eマイカート\n  TOP--\u003eお問い合わせ入力\n  ログイン--\u003e会員仮登録\n  ログイン--\u003eパスワードリセット\n\n  subgraph funcA [商品購入]\n    マイカート--\u003e商品購入完了\n  end\n\n  subgraph funcB [会員登録]\n    会員仮登録--\u003e会員仮登録完了--メール送信--\u003e会員登録完了\n  end\n\n  subgraph funcC [パスワードリセット]\n    パスワードリセット--メール送信--\u003eパスワード変更\n  end\n\n  subgraph funcD [お問い合わせ]\n    お問い合わせ入力--\u003eお問い合わせ完了\n  end\n\n  subgraph header [ヘッダ]\n    マイカート\n    お問い合わせ入力\n    ログアウト\n  end\n```\n\n\n#### ■ 管理画面(Bootstrap)\n\n![管理画面](./admin.png \"管理画面\")\n\n- ログイン/ログアウト\n- 商品管理\n- 注文履歴\n- 顧客管理\n- お問い合わせ管理\n- 画像管理\n- CSVダウンロード\n- PDFダウンロード\n- 画像アップロード \n\n#### ■ バッチ処理\n\n- Solrインデックス生成バッチ\n- CSV商品データ/画像取り込みバッチ\n\n## 💬 インストール\n\n※ この環境を利用する為には、事前にdocker、docker-composeが動作する状態であることが前提条件です。\n(Windowsの場合は、以下を参考に「WSL」と「Docker Desktop for Windows」を用意してください)\n\n### WSLのインストール(Windowsの場合)\n参考\nhttps://docs.microsoft.com/ja-jp/windows/wsl/install\n\nWSLでUbuntuを起動する\n```\n# 初回起動時に、ユーザ名とパスワードが聞かれます。\n# 何も入力せずにEnterを押すとroot ユーザーで利用できるようになるので、rootユーザーとして設定します。\n# 初めにライブラリを最新化します。\n$ apt update\n# 日本語に対応しておきます。\n$ apt -y install language-pack-ja\n$ update-locale LANG=ja_JP.UTF8\n$ apt -y install manpages-ja manpages-ja-dev\n```\n\n### Docker Desktop for Windows のインストール(Windowsの場合)\n\nhttps://docs.docker.com/docker-for-windows/install/\n```\n↓コマンドプロンプトでバージョンが表示されればOK\ndocker --version\n```\n\n### WSL2から、Docker for Windows を利用できるようにする(Windowsの場合)\n参考\nhttps://qiita.com/endo_hizumi/items/0cc50bdfbd827579733e\n```\n１．通知領域から、dockerのアイコンを右クリックして、Settingを選択\n２．Generalのexpose deamon on~~のチェックを入れます。\n３．ResourcesのWSL INTEGRATION から、\"Ubuntu\" をスイッチをONにします。\nWSL 側のルートを Docker for Windows に合わせるように WSL のマウント設定を行います。\n$ vi /etc/wsl.conf\n---\n[automount]\nroot = /\noptions = \"metadata\"\n---\n以下のように Cドライブのパスが\"/mnt/c/\"→\"/c/\" に変更されていれば正常です。\n$ cd /c/Users/USER/github\n$ pwd\n/c/Users/USER/github\n# WSL 上にDockerとDocker Composeをインストールする。\n$ apt install docker\n$ apt install docker-compose\nこれでWSLからWindows側にインストールしたDockerが利用できるようになります。\n```\n\n### ソースコードをダウンロードする\n\ngithub からソースコードをダウンロードします。 Windows の場合はWSL側ではなく、必ずWindows側のディレクトリに配置してください。\nWSL側でSpringbootを起動した場合はホスト側のブラウザからアクセスが出来なくなってしまいます。\n```\n# ソースコードを配置したいディレクトリに移動する\ncd /c/Users/USER/github\n# Githubからソースコードをダウンロードする\ngit clone git@github.com:isystk/kotlin-springboot-boilerplate.git\n```\n\nWSL の場合は、MySQLのConfファイルがWindows側のディスクにあると権限の違いでDockerコンテナがロードできなくなるのでWindows側で読み取り専用に変更してください。\n\n![WSL-MySQL](./wsl-mysql.png \"WSL-MySQL\")\n\n### IntelliJ IDEAのインストール\n\n以下のURLから、IntelliJ IDEA をダウンロードしてインストールを行います。無料のCommunity版で問題ありません。\nhttps://www.jetbrains.com/ja-jp/idea/download/\n\n```\n# コードフォーマッターを設定する\n「Preferences - Editor - Code Style - Java」にて、Schemeのところの設定アイコンから、\"intellij-java-google-style.xml\" をインポートする。\n\n# Annotation Processingを有効にする\n「Preferences - Build,Execution,Deployment - Compiler - Annotation Processors」から、\n”Enable annotation processing” を有効にする\n\n# デバック時のホットスワップを有効にする\n「Preferences - Advanced Settings - Compiler」から、”Allow auto-make to start even if developed application is currently running” を有効にする。\n```\n\n### MySQL Client のインストール\n\n```\n# MySQLに接続する為のコマンドをインストールします。(バージョンは何でもOK)\n# Windowsの場合\n$ apt install mysql-client\n# Macの場合\n$ brew install mysql-client\n```\n\n### Node.js のインストール\n\n```\n# Windowsの場合\n$ curl -L git.io/nodebrew | perl - setup\n# Macの場合\n$ brew install nodebrew\n# nodebrew をシェルのパスに追加する\n$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' \u003e\u003e ~/.bashrc\n# Node.js をインストール \n$ mkdir -p ~/.nodebrew/src\n$ nodebrew ls-remote\n$ nodebrew install v16.13.1\n$ nodebrew use v16.13.1\n$ npm install -g yarn\n```\n\n## 📦 ディレクトリ構造\n```\n.\n├── docker\n│   ├── mysql (DBサーバー)\n│   │   ├── conf.d (mysqlの設定ファイル)\n│   │   └─── logs (mysqlのログ)\n│   ├── nginx (Webサーバー)\n│   │   ├── conf.d (nginxの設定ファイル)\n│   │   ├── logs (nginxのログ)\n│   │   └── ssl (SSL自己証明書)\n│   ├── phpmyadmin (DB管理コンソール)\n│   ├── s3 (Minio)\n│   ├── solr (検索エンジン)\n│   │   ├── data (solrのデータファイル)\n│   │   └── logs (solrのログ)\n│   └── docker-compose.yml\n├── batch (バッチ)\n│   └── src\n│       └── main\n│           ├── kotlin\n│           └── resources\n├── business (共通ロジック)\n│   └── src\n│       └── main\n│           ├── java\n│           └── resources\n│               ├── doma-gen (doma2のジェネレータ)\n│               └── sample.a5er (ER図)\n├── htdocs\n│   └── thumb (アップロード画像の一時保存)\n├── web (Web共通ロジック)\n│   └── src\n│       └── main\n│           ├── java\n│           └── resources\n├── web-admin (管理画面)\n│   └── src\n│       └── main\n│           ├── kotlin\n│           └── resources\n├── web-front (フロント画面)\n│   ├── src\n│   │   └── main\n│   │       ├── kotlin\n│   │       └── resources\n│   └── resources (フロントエンドモジュール)\n│       ├── node_modules\n│       ├── package.json\n│       ├── public\n│       ├── src\n│       │   ├── @types\n│       │   ├── __test__\n│       │   ├── auth\n│       │   ├── components\n│       │   ├── constants\n│       │   ├── index.tsx\n│       │   ├── pages\n│       │   ├── react-app-env.d.ts\n│       │   ├── reportWebVitals.ts\n│       │   ├── router.tsx\n│       │   ├── services\n│       │   ├── setupTests.ts\n│       │   ├── static\n│       │   ├── stores\n│       │   ├── stories\n│       │   ├── styles\n│       │   └── utilities\n│       ├── tsconfig.json\n│       └── yarn.lock\n├── dc.sh (Docker操作用スクリプト)\n└── build.gradle (Gradle用設定ファイル)\n```\n\n\n## 🔧 開発環境の構築 \n\n各種デーモンを起動する\n```bash\n# 初期化\n$ ./dc.sh init\n# すべてのDockerコンテナを起動する\n$ ./dc.sh start\n# データベースが立ち上がるまで少し待ちます。(初回は5分程度)\n# データベースが起動したら、MySQLにログインしてみる\n$ ./dc.sh mysql login\n```\n\nMinio にS3バケットを作成する\n```bash\n$ ./dc.sh aws local\n# バケットを作成する\naws --endpoint-url http://host.docker.internal:9000 s3 mb s3://aws.isystk.com\n# バケットを公開する\nPOLICY='{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Sid\": \"MakeItPublic\", \"Effect\": \"Allow\", \"Principal\": \"*\", \"Action\": \"s3:GetObject\", \"Resource\": \"arn:aws:s3:::aws.isystk.com/*\" }] }'\naws --endpoint-url http://host.docker.internal:9000 s3api put-bucket-policy --bucket aws.isystk.com --policy \"${POLICY}\"\n# バケットの一覧を確認する\naws --endpoint-url http://host.docker.internal:9000 s3 ls\n# テストファイルをアップロードする\naws --endpoint-url http://host.docker.internal:9000 s3 cp ./front.png s3://aws.isystk.com\n# ブラウザでアップロードした画像を表示してみる\n$ open http://localhost:9000/aws.isystk.com/front.png\n```\n\nバックエンド環境を構築する\n```bash\n# Gradleで利用できるタスクの一覧を確認します。\n$ ./gradlew tasks\n\n# Flywayでベースライン作成とマイグレードを実行します。\n$ ./gradlew business::flywayMigrate\n$ ./gradlew business::flywayInfo\n\n# (既存のSQLを修正するなどして整合性エラーになる場合は以下を実施してください。) \n$ ./gradlew business::flywayRepair\n# (すべてのオブジェクトを削除して初期化したい場合は以下を実施してください。)\n$ ./gradlew business::flywayClean\n\n# バッチを実行して商品マスタデータを登録する\n# ※ Windowsの場合はWSLからコマンド実行ではなくInteliJ側のGradleから起動しないと正常に動作しないので注意してください。\n$ ./gradlew batch::bootRun -Pargs=--job=importMstJob\n\n# 管理画面側のアプリケーションを起動します。\n# ※ Windowsの場合はWSLからコマンド実行ではなくInteliJ側のGradleから起動しないとブラウザからアクセスできないので注意してください。\n$ ./gradlew web-admin::bootRun\n\n# バッチを実行してSolrに商品データをインデックスする\n# ※ Windowsの場合はWSLからコマンド実行ではなくInteliJ側のGradleから起動しないと正常に動作しないので注意してください。\n$ ./gradlew batch::bootRun -Pargs=--job=solrRegistJob\n\n# フロント側のアプリケーションを起動します。\n# ※ Windowsの場合はWSLからコマンド実行ではなくInteliJ側のGradleから起動しないとブラウザからアクセスできないので注意してください。\n$ ./gradlew web-front::bootRun\n```\n\nフロントエンド環境を構築する\n```bash\n# フロントエンドをビルドする。\n$ cd web-front/resources \n$ yarn \n$ yarn build\n```\n\n## 🖊️ Docker 操作用シェルスクリプトの使い方\n\n```\nUsage:\n  $(basename ${0}) [command] [\u003coptions\u003e]\n\nOptions:\n  stats|st                 Dockerコンテナの状態を表示します。\n  init                     Dockerコンテナ・イメージ・生成ファイルの状態を初期化します。\n  start                    すべてのDaemonを起動します。\n  stop                     すべてのDaemonを停止します。\n  nginx restart            NginXを再起動します。\n  mysql login              MySQLデータベースにログインします。\n  mysql export \u003cPAHT\u003e      MySQLデータベースのdumpファイルをエクスポートします。\n  mysql import \u003cPAHT\u003e      MySQLデータベースにdumpファイルをインポートします。\n  mysql restart            MySQLデータベースを再起動します。\n  --version, -v     バージョンを表示します。\n  --help, -h        ヘルプを表示します。\n```\n\n### PhpMyAdmin\nMySQLデータベースに接続してデータの参照や編集が可能です。\u003cbr\u003e\nDockerを起動後に以下のURLにアクセスすると利用可能です。\n\nhttp://localhost:8888/\n\n### Mailhog\nダミーのメールサーバーです。実際にはメールは送信されず、送信されたメールはブラウザで閲覧できます。\u003cbr\u003e\nDockerを起動後に以下のURLにアクセスすると利用可能です。\n\nhttp://localhost:8025/\n\n### Minio\nS3に準拠したダミーのオブジェクトストレージです。\u003cbr\u003e\nDockerを起動後に以下のURLにアクセスすると利用可能です。\n\nhttp://localhost:9001/\n\n| Username   | Password |\n|:-----------| :----------|\n| access_key | secret_key |\n\n### Solr\nSolrの管理コンソールです。インデックスされたデータを検索したり出来ます。\u003cbr\u003e\nDockerを起動後に以下のURLにアクセスすると利用可能です。\n\nhttp://localhost:8983/\n\n### Swagger\n作成したAPIの一覧を確認したりデータを検索できます。\u003cbr\u003e\nフロントを起動後に以下のURLにアクセスすると利用可能です。\n\nhttp://localhost:8080/swagger-ui/\n\n## 🔗 参考\n\n| プロジェクト| 概要|\n| :---------------------------------------| :-------------------------------|\n| [Springframework](https://projects.spring.io/spring-framework/)| Spring Framework|\n| [Spring Security](https://projects.spring.io/spring-security/)| セキュリティ対策、認証・認可のフレームワーク|\n| [Doma2](https://doma.readthedocs.io/ja/stable/)| O/Rマッパー|\n| [spring-boot-doma2](https://github.com/domaframework/doma-spring-boot)| Doma2とSpring Bootを連携する|\n| [Flyway](https://flywaydb.org/)| DBマイグレーションツール|\n| [Thymeleaf](http://www.thymeleaf.org/)| テンプレートエンジン|\n| [Thymeleaf Layout Dialect](https://ultraq.github.io/thymeleaf-layout-dialect/)| テンプレートをレイアウト化する|\n| [WebJars](https://www.webjars.org/)| jQueryなどのクライアント側ライブラリをJARとして組み込む|\n| [ModelMapper](http://modelmapper.org/)| Beanマッピングライブラリ|\n| [Ehcache](http://www.ehcache.org/)| キャッシュライブラリ|\n| [Spock](http://spockframework.org/)| テストフレームワーク|\n| [Mockito](http://site.mockito.org/)| モッキングフレームワーク |\n| [AdminLTE Docs](https://adminlte.io/docs/2.4/installation)| AdminLTE Docs|\n| [Bootstrap4 日本語リファレンス](https://getbootstrap.jp/docs/4.4/getting-started/introduction/)| Bootstrap4 日本語リファレンス|\n\n\n## 🎫 Licence\n\n[MIT](https://github.com/isystk/kotlin-springboot-boilerplate/blob/master/LICENSE)\n\n## 👀 Author\n\n[isystk](https://github.com/isystk)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisystk%2Fkotlin-springboot-boilerplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisystk%2Fkotlin-springboot-boilerplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisystk%2Fkotlin-springboot-boilerplate/lists"}