{"id":29612248,"url":"https://github.com/kuboon/gsheet-slack-logger","last_synced_at":"2025-07-20T21:37:58.864Z","repository":{"id":46527481,"uuid":"377417217","full_name":"kuboon/gsheet-slack-logger","owner":"kuboon","description":"無料 slack の過去ログを google sheet に保存する github action","archived":false,"fork":false,"pushed_at":"2025-03-25T00:31:58.000Z","size":51,"stargazers_count":9,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-25T01:26:29.120Z","etag":null,"topics":["github-actions","google-sheets-api","slack"],"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/kuboon.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}},"created_at":"2021-06-16T07:59:18.000Z","updated_at":"2025-03-25T00:30:48.000Z","dependencies_parsed_at":"2025-03-25T01:33:23.786Z","dependency_job_id":null,"html_url":"https://github.com/kuboon/gsheet-slack-logger","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/kuboon/gsheet-slack-logger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kuboon%2Fgsheet-slack-logger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kuboon%2Fgsheet-slack-logger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kuboon%2Fgsheet-slack-logger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kuboon%2Fgsheet-slack-logger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kuboon","download_url":"https://codeload.github.com/kuboon/gsheet-slack-logger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kuboon%2Fgsheet-slack-logger/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266204640,"owners_count":23892366,"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","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":["github-actions","google-sheets-api","slack"],"created_at":"2025-07-20T21:37:58.234Z","updated_at":"2025-07-20T21:37:58.858Z","avatar_url":"https://github.com/kuboon.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Google sheets slack logger\nslack の過去ログを google sheet に書き出すツールです。\n無料版の slack では古いメッセージは順次閲覧不能になりますが、このツールでログを取っておけば、 google sheet 上で閲覧、検索が出来ます。\n(既に閲覧不能になったログをこのツールで引き出すことは出来ません)\n\n- google drive に保存するのでDB等不要\n- 過去ログのアクセス権を絞れるので非公開 slack でも便利\n- github actions で実行可能、サーバー不要\n- 公開リポジトリでセットアップ可能、トークン等の非公開情報は repository secrets に設定\n\nデフォルトでは、実行日時の2か月前からの1か月分、すべての公開チャンネルを1ファイルにします。\n\n例: 10月x日に実行すると、 8/1 ~ 8/31 分のログを取得\n\n1か月空けてあるのは、「スレッド返信はその発言元の時刻でしか取得できない」という、本システムの制限のためです。\n例えば、 9/30 の投稿に対し、10/2 にスレッド返信がついたとします。\nこの返信は、9月のログを生成する際に取得されますが、10月のログには含まれません。\n10/1 に9月分を取得してしまうと、 10/2 のスレッドはどこにも記録されずに失われてしまうことになります。\n\ngithub actions の制限により、60日間活動のなかったリポジトリは scheduled workflow が停止してしまいます。\n事前にメールで通知が来るので、メール内の指示に従って制限を解除してください。\nhttps://github.community/t/no-notification-workflow-disabled-after-60-days/182169/5\n\ngithub のアカウントを有償のプランにするか、 self hosted runner を登録することで継続実行できるようです。\nhttps://docs.github.com/ja/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners\n\n# 準備\n\n## slack bot の作成、 token の取得\nhttps://api.slack.com/apps\nから適当なアプリを作成し、 OAuth \u0026 Permissions で以下の scope を付与し、 xoxb から始まる bot token を生成します。\n- channels:history\n- channels:read\n- users:read\n- channels:join\n\n後述する `autoJoin: false` を指定する場合は、 channels:join は不要となります。\nこの場合、新規作成されたチャンネルへは手動で bot を招待しない限りログ取得対象となりません。\n\n## Google Cloud Service Account の作成\nhttps://cloud.google.com/iam/docs/creating-managing-service-account-keys\n手順に従ってサービスアカウントを作成 (role 等何も付与せず作成してOK) し、 JSON キーをダウンロードする。\nJSON のうち、以下の2つのみを使用します。\n- client_email\n- private_key\n\n## google drive folder の作成\n書き込み先の適当なフォルダを作成し、先ほど作成した Service Account の client_email のアドレスを書き込み権限つきでフォルダに共有招待する (招待メールは送信しない)\nフォルダのURLパスの末尾要素が folder id となります。\n\nex: https://drive.google.com/drive/folders/1y-Q3khgg3sU7ApWf5AxmWqbngb4Li8tx?hogehoge\n\nfolder id は 1y-Q3khgg3sU7ApWf5AxmWqbngb4Li8tx\n\n## workflow の作成\n適当な github repository (public repo 使用可) に、以下の workflow を追加\n\n```yml\n# .github/workflows/slack-backup.yml\nname: slack-backup\n\non:\n  schedule:\n    - cron:  '11 0 1 * *' # 毎月1日 日本時間9時11分に実行。 0:00 は混み合いがちなので適当にばらす\n\njobs:\n  main:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: kuboon/gsheet-slack-logger@main\n        with:\n          timezone: 'Asia/Tokyo'\n          slackToken: ${{ secrets.SLACK_TOKEN }}\n          googleClientEmail: xxxx@xxxx.iam.gserviceaccount.com # 作成したサービスアカウントの email\n          googlePrivateKey: ${{ secrets.GOOGLE_PRIVATE_KEY }}\n          folderId: 1p0ZSVps76fWoLpfnE9y5tYHkCK18yVeW\n```\n\n## secrets の登録\n以下の2つは yml に書くと危険なので secrets を登録する\n- SLACK_TOKEN\n- GOOGLE_PRIVATE_KEY\n\nGOOGLE_PRIVATE_KEY はダウンロードした json の private_key の値だが、 \\n を改行にあらかじめ置換してから github に登録する。\n\n# オプション設定\n## 日時の指定\n以下のように year, month を指定すると、指定の年月のログを取得します。\n\n```\n        with:\n          year: 2020\n          month: 3\n```\n省略時は、現在日時の2か月前となります。\n\n## autoJoin\nデフォルトは true です。公開チャンネルには自動的に参加してログを取得します。\nfalse にした場合、作成した slack app が既に参加しているチャンネルのみが取得対象となります。\n新規チャンネルには手動で bot を参加させない限りログが取られませんのでご注意ください。\n\n```\n        with:\n          autoJoin: false\n```\n\n## skipChannels\nautoJoin: true の場合、 bot を kick しても次の実行時に自動的に join してしまいます。\nskipChannels に channel id を列挙することで、これらのチャンネルをログ取得の対象外とすることができます。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkuboon%2Fgsheet-slack-logger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkuboon%2Fgsheet-slack-logger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkuboon%2Fgsheet-slack-logger/lists"}