Slide 1

Slide 1 text

中尾 正剛 PayPayカード株式会社 OSS公開 までの流れ

Slide 2

Slide 2 text

アジェンダ 導入部分 1. なぜ作った? a. なぜOSS公開した? b. 前提となる構成 c. OSS公開の流れ 2. アカウント作成 a. GnuPGで鍵作成 b. build.gradleの設定 c. 公開 d. まとめ 3.

Slide 3

Slide 3 text

自己紹介 所属 PayPayカード株式会社 └プロダクト本部  └プロダクト開発部   └プロダクト開発1グループ    └中尾 正剛 経歴 2011/04 中小SES(ずっとSIerだと思っていた) 2015/01 株式会社セレス 2020/10 エキサイト株式会社 2023/11 PayPayカード株式会社 -> NOW

Slide 4

Slide 4 text

0.0.XXってまだプレビュ ー版じゃね? 何だこれは? なんに使うの? OSS公開されました

Slide 5

Slide 5 text

MyBatisGeneretorのプラグインを作りました そもそもなにを作った

Slide 6

Slide 6 text

DBのテーブルの情報を基にSQLを実行できる ファイルを自動生成してくれます。 単一のテーブルに対してデータ取得・追加・更新・削除という 基本的な処理は自動生成ファイルで達成することができる deleteByPrimaryKey insert insertSelective selectByPrimaryKey updateByPrimaryKeySelective updateByPrimaryKey MyBatisGeneretorとは? https://mybatis.org/generator/

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

MyBatisGeneretorを普通に実行すると テーブル数が多いと大量にファイルが作られる。 ファイルが同一パッケージに大量にあると 可読性が悪いので、用途ごとのパッケージでまとめるた めに作った ファイルが多すぎ!

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

自動生成されるので あんまり気にしなくても良い

Slide 11

Slide 11 text

なぜOSS公開した? 単純に公開してみたい

Slide 12

Slide 12 text

前提となる構成 SpringBoot * MyBatis * FreeMarker マルチモジュールプロジェクト MyBatisGeneretor * package-with-hyphen-separator

Slide 13

Slide 13 text

SpringBoot Webアプリケーションの開発を サポートするフレームワーク FreeMarker Java用のテンプレートエンジン MyBatisと組み合わせて使う SpringBoot * MyBatis * FreeMarker MyBatis カスタム SQLに対応した優れた 永続化フレームワーク

Slide 14

Slide 14 text

MyBatis * FreeMarker xml FreeMarker SELECT id , name FROM user WHERE id = #{id} and register_date now() SELECT id , name FROM user WHERE id = <@p name="id" /> and register_date < now() <#-- 実行計画 Limit (cost=0.46..43.95 rows=200 width=128) --> 余計な記載がない (names paceはほしいかも。。。) CDATAのエスケープ処理がない コメントがかける

Slide 15

Slide 15 text

マルチモジュールプロジェクト

Slide 16

Slide 16 text

integration-register (入会周り) service-search (検索) repository-search (検索) web (フロントページ) lp (ランディング) admin (管理画面) api-search (検索用) api-external (外部公開用API) api-internal (内部用API) batch (バッチページ) service-register (入会周り) service-ai (AI) service (全般) repository-register (入会周り) repository-ai (AI) repository (全般) persistence (DB接続) integration-ai (AI) integration-search (検索) 一つのリポジトリで管理することができ、共通で使いまわる モジュールは使い回せる。 やり過ぎは良くないので気をつけること

Slide 17

Slide 17 text

DBのテーブルの情報を基にSQLを実行できる ファイルを自動生成してくれます。 単一のテーブルに対してデータ取得・追加・更新・削除という 基本的な処理は自動生成ファイルで達成することができる deleteByPrimaryKey insert insertSelective selectByPrimaryKey updateByPrimaryKeySelective updateByPrimaryKey テーブルがパッケージごとに分割されるので関係性がわかりやすい MyBatisGeneretor * package-with-hyphen-separator

Slide 18

Slide 18 text

秩序を守らないと 組織が壊れる 秩序を守らないと 排除される すべては秩序を守るために 秩序を守らないと 孤立する

Slide 19

Slide 19 text

システムで 秩序を守る チェックリストを増やす、 レビュー者を増やすなどの対策を行うと 秩序を守れるかもしれない。 が、人が増えたりドメイン知識が低い人は 気をつけていても難しい。 システム的に確実に秩序を守る方法を取ら ないと。

Slide 20

Slide 20 text

SpringBootで 安定した開発 マルチモジュール プロジェクトで 依存関係を厳格に FreeMarkerで シンプルなSQL MyBatisGeneretorと 自作OSSを使って Tableから自動生成 ここは説明いらないです よね? モジュラーモノリスの構 成が簡単にできる controllerからrepository を呼び出せないなど、依 存関係を厳格にできる リポジトリを大量に作成 せず、使いまわるコード は使いまわすことで品質 向上につながる SQL以外の記述が減る ことによって、レビュ ーする対象のコードが 減る。 コードは書くより読む ことが圧倒的に多い。 レビューしやすいコー ドを書くことが品質向 上につながる Table定義からModelが自 動作成されるので、正確 にDTOが作成される 自動的に作成されるコー ドなのでレビュー対象か ら外せる 手動でクエリを作成しな くても良いIFがMapperに 用意されてる

Slide 21

Slide 21 text

本題に入ります 英語読む 公式を見る 記事見る https://central.sonatype.org/publish/publish-guide/

Slide 22

Slide 22 text

アカウント作成

Slide 23

Slide 23 text

プロジェクト Community Support - Open Source Project Repository Hosting 課題タイプ New Project 要約(Summary) package-with-hyphen-separator 説明(Description) This is a custom plugin for mybatis generator. Package the snake case (_ delimiter) of the table name. Group Id io.github.naka-sho Project URL https://github.com/naka-sho/package-with-hyphen-separator SCM url https://github.com/naka-sho/package-with-hyphen-separator Already Synced to Central No チケット作成 もしかしたらいまチケット作成する手順じゃないかも。。。

Slide 24

Slide 24 text

apt-get install gpg LANG=C gpg --full-gen-key LANG=C gpg --list-keys LANG=C gpg --list-secret-keys --keyid-format short GnuPGで 鍵作成 鍵を作るのにパスワードとかいろいろ設定大変です 赤いところ控えておく

Slide 25

Slide 25 text

公開鍵を 登録する https://keyserver.ubuntu.com gpg --send-keys XXXXX でできなかったのでブラウザから

Slide 26

Slide 26 text

build.gradleの 設定 https://central.sonatype.org/publish/publish-gradle/#introduction MavenDeploymentでエラーになる。 おそらくgradle8.6(2024/3/1)の バージョンに対応していない

Slide 27

Slide 27 text

このあたりは省略 gradleの公式 ページで確認 https://docs.gradle.org/current/userguide/publishing_maven.html 400 bad requerst change URLs to point to your repos, と書いている通り、URLを設定する必要が ありま URLは以下に設定する def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2" def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots"

Slide 28

Slide 28 text

このあたりは省略 URL変更して 実行 https://docs.gradle.org/current/userguide/publishing_maven.html Could not PUT 'XXXX'. Received status code 401 from server: Unauthorized どうやらアップロードする際に認証エラー が発生するようだ def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2" def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots" アップロードをする際に認証処理が必要

Slide 29

Slide 29 text

このあたりは省略 アップロードをする際に認証処理が必要 https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.repositori es.AuthenticationSupported.html credeincalの 設定を追加 ~/.gradle/gradle.propertiesに credentialsの情報を追加。 mySecureRepositoryUsername=XXXX mySecureRepositoryPassword=YYYY credentialを読み込む設定を追加

Slide 30

Slide 30 text

gradleを実行 gradle :publish を実行。成功を確認する 次は https://s01.oss.sonatype.org/#welcome にログインする

Slide 31

Slide 31 text

公開する サイドメニューからRepositoriesを選択 closeを選択し、stagingする。 このときJava Docが足りないなどチェッ クが入るので修正する Releaseを選択し、本番公開する

Slide 32

Slide 32 text

公開できました! 簡単でしたよね?

Slide 33

Slide 33 text

まとめ とりあえずやってみよう OSS開発は怖くない 誰でもできる

Slide 34

Slide 34 text

最後に 引数でやりたい。。 開発当初は-も_も区切り文字を変えられるようにしている名残で す。。。 hyphenじゃなくunder-barでは? userとuser_attrのテーブルが合った時にuserパッケージにuserを 入れるか、、、 Topもパッケージ化するか検討中 強制的にModelにRecordと名前が

Slide 35

Slide 35 text

第二段製作中 Embulkを使って大量テストデータ作成プラグイン

Slide 36

Slide 36 text

No content