🌄

LINEログインしかないサービスのローカル開発のために、開発者全員にLINEアカウントが必要なんていやだ

に公開

akatsuki.png


はじめに

LINEログインしかないサービスのローカル開発のために、開発者全員にLINEアカウントが必要なんていやだ

ちょっと変なタイトルですが、普通に真面目な記事です。

AKATSUKIとは?

AKATSUKIは、ソーシャルログインの開発・テストを簡単にするためのMockサーバーです。

主な特徴:

  • Google OAuth 2.0とLINE OAuth 2.0に対応
  • Docker Composeに数行追加するだけで使用可能
  • 実際のソーシャルサービスに接続せずにログイン処理をパスできる

https://github.com/politive/akatsuki

作ろうと思ったきっかけ

  • ソーシャルログインのアプリのローカル開発時が面倒
    • 例: LINEログインがある場合のチーム開発
      • 開発者ごとにLINEのチャネルを作成
        • オンボーディングが面倒
      • 開発者全員でLINEのチャネルを共有する
        • 開発者でチャネルの秘匿情報を共有することになる => 退職時に面倒
    • 上記を感じていた当時、LINEログインではlocalhostをredirect uriに設定できず、ngrokやlocaltunnelを使うしかなかった => 面倒だしセキュリティ的にもよろしくない
      • 最新情報は追えておりません。
    • Googleなどでも同じく認証情報が必要になる
  • ソーシャルログイン機能自体の実装や動作確認以外で、実際のソーシャルサービスに接続しなくてもよくない?

現在の仕様

アーキテクチャ・言語等

  • 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に生成してもらいました。
Politive Tech Blog

Discussion