{"id":44694731,"url":"https://github.com/na3shkw/zaim-matsui-auto-sync","last_synced_at":"2026-02-15T08:02:54.296Z","repository":{"id":310504394,"uuid":"1039433630","full_name":"na3shkw/zaim-matsui-auto-sync","owner":"na3shkw","description":"松井証券の資産状況をZaimに自動同期するコマンドラインアプリケーション。","archived":false,"fork":false,"pushed_at":"2026-02-14T03:12:01.000Z","size":147,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-14T09:23:41.817Z","etag":null,"topics":["zaim"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/na3shkw.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-17T08:06:09.000Z","updated_at":"2025-12-20T05:09:21.000Z","dependencies_parsed_at":"2025-12-20T09:02:41.887Z","dependency_job_id":null,"html_url":"https://github.com/na3shkw/zaim-matsui-auto-sync","commit_stats":null,"previous_names":["na3shkw/zaim-matsui-auto-sync"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/na3shkw/zaim-matsui-auto-sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/na3shkw%2Fzaim-matsui-auto-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/na3shkw%2Fzaim-matsui-auto-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/na3shkw%2Fzaim-matsui-auto-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/na3shkw%2Fzaim-matsui-auto-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/na3shkw","download_url":"https://codeload.github.com/na3shkw/zaim-matsui-auto-sync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/na3shkw%2Fzaim-matsui-auto-sync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29473368,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T06:58:05.414Z","status":"ssl_error","status_checked_at":"2026-02-15T06:58:05.085Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["zaim"],"created_at":"2026-02-15T08:02:52.091Z","updated_at":"2026-02-15T08:02:54.287Z","avatar_url":"https://github.com/na3shkw.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zaim-Matsui Auto Sync\n\n[![Test](https://github.com/na3shkw/zaim-matsui-auto-sync/actions/workflows/test.yml/badge.svg)](https://github.com/na3shkw/zaim-matsui-auto-sync/actions/workflows/test.yml)\n[![CodeQL](https://github.com/na3shkw/zaim-matsui-auto-sync/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/na3shkw/zaim-matsui-auto-sync/actions/workflows/github-code-scanning/codeql)\n\n## 概要\n\n松井証券の資産状況（投資信託・米国株）を Zaim に同期するコマンドラインアプリケーションです。\nZaim には松井証券の連携があるものの、[松井証券の電話番号認証導入によって自動的な同期ができない](https://content.zaim.net/questions/show/1125)という背景があります。\n\nこのコマンドラインアプリケーションでは松井証券にログインして資産状況を取得し、そのデータを Zaim API を通して記録するものです。\ncron などを利用して定期実行することを想定しています。\n\n## 前提要件\n\n- 松井証券の SMS 認証を有効にしていること。\n- Android スマートフォンで SMS を受信し、Google メッセージで内容を確認できること。\n- Zaim API にアプリケーションが登録してある（コンシューマ ID とコンシューマシークレットがある）こと。\n- VNC クライアントがインストールされていること。\n    - 事前セットアップに必要。\n\n## 事前セットアップ\n\n### `.env` ファイルの作成\n\n`.env.example` をコピーして `.env` ファイルを作成し、各項目の内容を設定する。\n\n### Google へのログイン\n\nGoogle メッセージへのアクセスをスムーズに行うため、事前に Chromium でログインとデバイスのペア設定を行う。\n\n1. 下記のコマンドで Chromium を起動する。ホスト側 VNC ポートは適宜選択して入力する。\n    ```bash\n    docker compose run --rm -e APP_COMMAND='login-google' -e APP_ARGS='https://www.google.com' --publish \u003cホスト側 VNC ポート\u003e:5901 app\n    ```\n2. `localhost:\u003cホスト側 VNC ポート\u003e` に VNC 接続する。接続ユーザーは `appuser` で認証はなし。\n3. 手動操作で Google にログインする。\n4. ログイン後、https://messages.google.com/web/ に遷移してデバイスのペア設定を行う。\n5. Chromium を閉じる。\n6. 下記のコマンドで再度 Chromium を開き、VNC 接続してメッセージ内容が表示されることを確認する。\n    ```bash\n    docker compose run --rm -e APP_COMMAND='login-google' -e APP_ARGS='https://messages.google.com/web/' --publish \u003cホスト側 VNC ポート\u003e:5901 app\n    ```\n\n### Zaim API のアクセストークンを取得する\n\n下記コマンドを実行し、コマンドラインの指示に従って認証する。\n\n```bash\ndocker compose run --rm -e APP_COMMAND='zaim-cli' -e APP_ARGS='auth setup-token' app\n```\n\n### `config.json` ファイルの作成\n\n`config.example.json` をコピーして `config.json` ファイルを作成し、各項目の内容を設定する。\n\n```jsonc\n{\n  \"name\": \"NISA\",   // 任意の名前\n  \"enabled\": true,  // 無効化したい場合は false にする\n  \"matsui\": {\n    \"type\": \"fund\", // \"fund\" (投資信託) または \"usstock\" (米国株)\n    \"accountName\": \"NISA口座(積立)\" // 下記 (A) を参照\n  },\n  \"zaim\": {\n    \"accountId\": \"12345678\",      // 下記 (B) を参照\n    \"categoryId\": \"12345678\"      // 下記 (C) を参照\n  }\n}\n```\n\n#### (A) `matsui.accountName`\n\nこの値は同期対象の口座を指定するもの。\n\n- **投資信託 (`type: \"fund\"`) の場合**:\n  - 松井証券の投資信託残高照会ページにアクセスし、全保有銘柄の表にある「口座区分」列の値を設定する\n  - 例: `\"NISA口座(積立)\"`、`\"特定口座\"`\n- **米国株 (`type: \"usstock\"`) の場合**:\n  - 任意の文字列を設定する（米国株のデータ取得にはこの項目を利用しない）\n\n#### (B) `zaim.accountId`\n\nこの値は同期先の Zaim の口座 ID を指定するもの。\n下記コマンドを実行して口座 ID 一覧を取得し、記録先の口座 ID を設定する。\n異なる松井証券の口座の同期先として Zaim の同じ口座 ID は設定できないことに注意する。\n\n```bash\ndocker compose run --rm -e APP_COMMAND='zaim-cli' -e APP_ARGS='account list' app\n```\n\n#### (C) `zaim.categoryId`\n\nこの値は同期先の Zaim の収入カテゴリ ID を指定するもの。\n下記コマンドを実行して収入カテゴリ ID 一覧を取得し、記録に利用するカテゴリ ID を設定する。\n\n```bash\ndocker compose run --rm -e APP_COMMAND='zaim-cli' -e APP_ARGS='category list --mode income' app\n```\n\n### 総額記録ファイルを作成する\n\n`appdata/zaim/zaim-total-amount.example.json` ファイルをコピーして `appdata/zaim/zaim-total-amount.json` を作成し、内容を適宜編集して保存する。\n\n```jsonc\n[\n  {\n    \"amount\": 0,  // 記録開始時点での Zaim の口座残高\n    \"accountId\": 12345678,  // config.json の zaim.accountId と同じ値\n    \"updatedAt\": \"2025-09-01T12:34:56+09:00\"\n  }\n]\n```\n\n## 実行方法\n\n下記コマンドを実行する。\n\n```bash\ndocker compose run --rm -e APP_COMMAND='sync-matsui-zaim' app\n```\n\nZaim への記録を行わないドライランモードで実行したい場合は下記のコマンドを実行する。\n\n```bash\ndocker compose run --rm -e APP_COMMAND='sync-matsui-zaim' -e APP_ARGS='--dry-run' app\n```\n\n## 開発環境構築\n\n### 事前セットアップ\n\n1. 下記のコマンドで Chromium を起動する。\n    ```bash\n    $(find $PLAYWRIGHT_BROWSERS_PATH/ -executable -name chrome -print -quit) --no-sandbox --user-data-dir=./appdata/chromium/google https://www.google.com\n    ```\n2. 手動操作で Google にログインする。\n3. ログイン後、https://messages.google.com/web/ に遷移してデバイスのペア設定を行う。\n4. Chromium を閉じる。\n5. 下記のコマンドで Playwright 経由で Chromium を起動する。\n    ```bash\n    npx playwright cr --user-data-dir=./appdata/chromium/google https://messages.google.com/web/\n    ```\n6. メッセージ内容が表示されることを確認する。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fna3shkw%2Fzaim-matsui-auto-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fna3shkw%2Fzaim-matsui-auto-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fna3shkw%2Fzaim-matsui-auto-sync/lists"}