🌄
LINEログインしかないサービスのローカル開発のために、開発者全員にLINEアカウントが必要なんていやだ
はじめに
LINEログインしかないサービスのローカル開発のために、開発者全員にLINEアカウントが必要なんていやだ
ちょっと変なタイトルですが、普通に真面目な記事です。
AKATSUKIとは?
AKATSUKIは、ソーシャルログインの開発・テストを簡単にするためのMockサーバーです。
主な特徴:
- Google OAuth 2.0とLINE OAuth 2.0に対応
- Docker Composeに数行追加するだけで使用可能
- 実際のソーシャルサービスに接続せずにログイン処理をパスできる
作ろうと思ったきっかけ
- ソーシャルログインのアプリのローカル開発時が面倒
- 例: LINEログインがある場合のチーム開発
- 開発者ごとにLINEのチャネルを作成
- オンボーディングが面倒
- 開発者全員でLINEのチャネルを共有する
- 開発者でチャネルの秘匿情報を共有することになる => 退職時に面倒
- 開発者ごとにLINEのチャネルを作成
- 上記を感じていた当時、LINEログインではlocalhostをredirect uriに設定できず、ngrokやlocaltunnelを使うしかなかった => 面倒だしセキュリティ的にもよろしくない
- 最新情報は追えておりません。
- Googleなどでも同じく認証情報が必要になる
- 例: LINEログインがある場合のチーム開発
- ソーシャルログイン機能自体の実装や動作確認以外で、実際のソーシャルサービスに接続しなくてもよくない?
現在の仕様
アーキテクチャ・言語等
- Node.js + Express.js
- TypeScript
- Docker
- Jest(テスト)
- ESLint + Prettier(コード品質)
CI/CD
- CI: PR => lint(eslint), format(prettier), test(jest)を実行
- CD: main push => build, ghcr に docker image を push
使い方
OAuthの各種URLの向き先を localhost に変更する
# 例: Google OAuth
# あなたのプロジェクトに合わせて修正してください
# 通常のGoogle OAuth設定
GOOGLE_AUTH_URL=https://accounts.google.com/o/oauth2/v2/auth
GOOGLE_TOKEN_URL=https://oauth2.googleapis.com/token
GOOGLE_USERINFO_URL=https://www.googleapis.com/oauth2/v2/userinfo
# AKATSUKIを使用する場合(localhostに変更)
GOOGLE_AUTH_URL=http://localhost:3001/o/oauth2/v2/auth
GOOGLE_TOKEN_URL=http://localhost:3001/token
GOOGLE_USERINFO_URL=http://localhost:3001/oauth2/v2/userinfo
AKATSUKIを起動する
- お使いのプロジェクトの
compose.yml
にサービスを追加するだけです。
compose.yml
services:
oauth-mock:
image: ghcr.io/politive/akatsuki:latest
ports:
- "3001:3001" # Google OAuth
- "3002:3002" # LINE OAuth
environment:
- ENABLE=google,line
- GOOGLE_PORT=3001 # Google OAuth
- LINE_PORT=3002 # LINE OAuth
- HOST=0.0.0.0
volumes:
- ./google.json:/app/google.json # Optional: Override Google user data
- ./line.json:/app/line.json # Optional: Override LINE user data
ダミーユーザの情報を変えたい場合
- メールアドレスや名前などをデフォルトから変更したい場合は、JSONを用意して、上記の
compose.yml
の例のようにマウントしてください。
google.json
{
"sub": "your-google-user-id",
"email": "your-email@example.com",
"email_verified": true,
"name": "Your Name",
"given_name": "Your",
"family_name": "Name",
"picture": "https://example.com/your-photo.jpg",
"locale": "ja"
}
現時点での課題(今後やりたいこと)
- 対応プロバイダが少ない
- Google,LINEだけでなくFacebookやGitHubなどにも対応したいです。
- JSONファイルを書き換えることでしかダミーユーザの変更ができない。
- JSONを上書きするためのWebUIがあってもいいかも?
- 仕組み的にどうしようもないのですが、GoogleのOAuthのURL(あるいはドメイン部分)を環境変数に切り出す必要がある(上述参照)。
終わりに
- このプロジェクトのコードは(いろいろ対話はしながらも)全てCursorに生成してもらいました。
Discussion