{"id":31565467,"url":"https://github.com/magifd2/scat","last_synced_at":"2026-03-16T10:12:22.693Z","repository":{"id":309299169,"uuid":"1035512764","full_name":"magifd2/scat","owner":"magifd2","description":"A general-purpose command-line tool to send content to multiple services like Slack. Inspired by slackcat, it features an extensible provider system to support various platforms.","archived":false,"fork":false,"pushed_at":"2025-08-19T10:04:47.000Z","size":598,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-19T12:20:53.857Z","etag":null,"topics":["automation","cli","command-line-tool","developer-tools","golang","slack","slack-bot"],"latest_commit_sha":null,"homepage":"","language":"Go","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/magifd2.png","metadata":{"files":{"readme":"README.ja.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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}},"created_at":"2025-08-10T15:00:54.000Z","updated_at":"2025-08-19T10:04:50.000Z","dependencies_parsed_at":"2025-08-11T05:33:26.978Z","dependency_job_id":"b493adb9-24fb-4546-8a2f-0968601301b5","html_url":"https://github.com/magifd2/scat","commit_stats":null,"previous_names":["magifd2/scat"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/magifd2/scat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magifd2%2Fscat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magifd2%2Fscat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magifd2%2Fscat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magifd2%2Fscat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/magifd2","download_url":"https://codeload.github.com/magifd2/scat/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magifd2%2Fscat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278420314,"owners_count":25983829,"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","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["automation","cli","command-line-tool","developer-tools","golang","slack","slack-bot"],"created_at":"2025-10-05T07:07:43.242Z","updated_at":"2026-03-16T10:12:22.680Z","avatar_url":"https://github.com/magifd2.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# scat: 汎用コマンドラインコンテンツ投稿ツール\n\n`scat` is a versatile command-line interface for sending content from files or standard input to a configured destination, such as Slack. It is inspired by `slackcat` but is designed to be more generic and extensible.\n\n---\n\n## 主な機能\n\n- **テキストメッセージの投稿**: 引数、ファイル、標準入力からコンテンツを送信します。\n- **ファイルのアップロード**: 指定したパスや標準入力からファイルをアップロードします。\n- **コンテンツのストリーミング**: 標準入力を継続的に監視し、定期的にメッセージを投稿します。\n- **チャネルログのエクスポート**: チャネルのメッセージ履歴を構造化されたJSONファイルや標準出力に出力します。\n- **プロファイル管理**: 複数の宛先を設定し、簡単に切り替えることができます。\n- **拡張可能なプロバイダ**: 現在、Slackとテスト用のモックプロバイダをサポートしています。\n\n## インストール\n\n[リリースページ](https://github.com/magifd2/scat/releases)から、お使いのシステム用の最新のバイナリをダウンロードしてください。\n\nまたは、ソースからビルドすることも可能です:\n\n```bash\nmake build\n```\n\n## 初期セットアップ\n\n投稿を開始する前に、設定ファイルを作成する必要があります。\n\n1.  **設定ファイルの初期化**:\n\n    以下のコマンドを実行して、デフォルトの場所に設定ファイル (`~/.config/scat/config.json`) を作成します:\n\n    ```bash\n    scat config init\n    ```\n\n    **重要**: この設定ファイルには、Slackトークンなどの機密情報が含まれます。セキュリティのため、ファイルパーミッションを `600` (所有者のみ読み書き可能) に設定することを強く推奨します。\n\n2.  **プロファイルの設定**:\n\n    デフォルトのプロファイルは、テストに便利なモックプロバイダを使用します。Slackのような実際のサービスに投稿するには、新しいプロファイルを追加する必要があります。\n\n    Slackプロファイル設定の詳細な手順については、**[Slackセットアップガイド](./docs/SLACK_SETUP.md)** を参照してください。\n\n    以下に、新しいSlackプロファイルを簡単に追加する例を示します:\n\n    ```bash\n    # このコマンドを実行すると、Slack Botトークンを安全に入力するよう求められます。\n    scat profile add my-slack-workspace --provider slack --channel \"#general\"\n    ```\n\n3.  **アクティブプロファイルの設定**:\n\n    `scat` がデフォルトで使用するプロファイルを指定します:\n\n    ```bash\n    scat profile use my-slack-workspace\n    ```\n\n## 使用例\n\n`scat` の一般的な使い方をいくつか紹介します。\n\n### テキストメッセージの投稿 (`post`)\n\n-   **引数から投稿**:\n    `scat post \"コマンドラインからこんにちは！\"`\n\n-   **標準入力から (パイプ)**:\n    `echo \"このメッセージはパイプされました。\" | scat post`\n\n### Block Kit メッセージの投稿 (`post` と `--format blocks`)\n\n-   **引数から (JSON文字列)**:\n    `scat post --format blocks '[{\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"引数からBlock Kit！\"}}]'`\n\n-   **ファイルから (JSONファイル)**:\n    (Block Kit JSONコンテンツを含む `blocks.json` というファイルを作成してください)\n    `scat post --format blocks --from-file ./blocks.json`\n\n-   **標準入力から (JSONパイプ)**:\n    `echo '[{\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"標準入力からBlock Kit！\"}}]' | scat post --format blocks`\n\n### ファイルのアップロード (`upload`)\n\n-   **パスを指定してファイルをアップロード**:\n    `scat upload --file ./report.pdf`\n\n-   **コメント付きでアップロード**:\n    `scat upload --file ./screenshot.png -m \"こちらがご依頼のスクリーンショットです。\"`\n\n### チャネルログのエクスポート (`export log`)\n\n-   **標準出力にエクスポートし、`jq`にパイプする**:\n    `scat export log --channel \"#random\" | jq .`\n\n-   **指定したファイルにエクスポートする**:\n    `scat export log -c \"#random\" --output \"my-export.json\"`\n\n-   **添付ファイルを自動生成されたディレクトリに保存する**:\n    `scat export log -c \"#random\" --output-files auto`\n\n-   **ログは標準出力、添付ファイルは指定ディレクトリに保存する**:\n    `scat export log -c \"#random\" --output - --output-files \"./attachments\"`\n\n## コマンドリファレンス\n\n### グローバルフラグ\n\n| フラグ             | 説明                                           |\n| ------------------ | ---------------------------------------------- |\n| `--config \u003cpath\u003e`  | 設定ファイルの代替パスを指定します。サーバーモードでは使用できません。 |\n| `--profile \u003cname\u003e` | コマンドの実行に特定のプロファイルを使用します。 |\n| `--debug`          | 詳細なデバッグログを有効にします。               |\n| `--silent`         | 成功メッセージを抑制します。                   |\n| `--noop`           | コンテンツを送信しないドライランを実行します。   |\n\n### メインコマンド\n\n| コマンド        | 説明                                           |\n| --------------- | ---------------------------------------------- |\n| `scat post`     | テキストメッセージを投稿します。                 |\n| `scat upload`   | ファイルをアップロードします。                   |\n| `scat export`   | チャネルログなどのデータをエクスポートします。   |\n| `scat profile`  | 設定プロファイルを管理します。                   |\n| `scat config`   | 設定ファイル自体を管理します。                   |\n| `scat channel`  | 対応プロバイダのチャンネルを管理します。         |\n\n### `post` コマンドのフラグ\n\n| フラグ          | 短縮形 | 説明                                           |\n| --------------- | ------ | ---------------------------------------------- |\n| `--channel`   | `-c`   | この投稿の宛先チャンネル (IDまたは名前) を上書きします。 |\n| `--from-file` |        | メッセージ本文をファイルから読み込みます。       |\n| `--stream`    | `-s`   | 標準入力からメッセージを継続的にストリームします。|\n| `--tee`       | `-t`   | 投稿前に標準入力の内容を画面に出力します。     |\n| `--username`  | `-u`   | この投稿のユーザー名を上書きします。             |\n| `--iconemoji` | `-i`   | 使用するアイコン絵文字 (Slackプロバイダのみ)。   |\n| `--format`    |        | メッセージのフォーマット (`text` または `blocks`)。デフォルトは `text`。 |\n\n### `upload` コマンドのフラグ\n\n| フラグ        | 短縮形 | 説明                                                     |\n| ----------- | ------ | -------------------------------------------------------- |\n| `--channel` | `-c`   | このアップロードの宛先チャンネル (IDまたは名前) を上書きします。 |\n| `--file`    | `-f`   | **必須。** アップロードするファイルのパス、または `-` で標準入力。|\n| `--filename`| `-n`   | アップロード時のファイル名。                             |\n| `--filetype`|        | 構文ハイライト用のファイルタイプ (例: `go`)。            |\n| `--comment` | `-m`   | ファイルと一緒に投稿するコメント。                       |\n\n### `export log` コマンドのフラグ\n\n| フラグ            | 短縮形 | 説明                                                     |\n| --------------- | ------ | -------------------------------------------------------- |\n| `--channel`     | `-c`   | **必須。** エクスポート元のチャネル。                    |\n| `--output`      |        | ログの出力ファイルパス。`-`で標準出力（デフォルト）。     |\n| `--output-files`|        | 添付ファイルの保存先。`auto`でディレクトリを自動生成。未指定時はダウンロードしない。 |\n| `--output-format` |      | 出力フォーマット (`json` または `text`)。                |\n| `--start-time`  |        | 時間範囲の開始 (RFC3339フォーマット)。                   |\n| `--end-time`    |        | 時間範囲の終了 (RFC3339フォーマット)。                   |\n\n### `profile` サブコマンド\n\n| サブコマンド | 説明                                           |\n| ---------- | ---------------------------------------------- |\n| `list`     | 利用可能なすべてのプロファイルを表示します。     |\n| `use`      | アクティブなプロファイルを切り替えます。         |\n| `add`      | 新しいプロファイルを追加します。                 |\n| `set`      | 現在のプロファイルの設定値を変更します。         |\n| `remove`   | プロファイルを削除します。                       |\n\n### `channel` サブコマンド\n\n| サブコマンド | 説明                                                     |\n| ---------- | -------------------------------------------------------- |\n| `list`     | `slack` プロファイルで利用可能なチャンネルを一覧表示します。|\n| `create`   | `slack` プロファイルに新しいチャンネルを作成します。       |\n\n### `config` サブコマンド\n\n| コマンド             | 説明                                           |\n| ------------------- | ---------------------------------------------- |\n| `config init`       | 新しいデフォルト設定ファイルを作成します。       |\n\n---\n\n## サーバーモード（コンテナ / CI デプロイ）\n\nサーバーサイドやコンテナ化された環境向けに、`scat` は**サーバーモード**をサポートしています。このモードでは、設定ファイルを使用せず、すべての設定を環境変数から読み込みます。\n\n### サーバーモードの有効化\n\n`SCAT_MODE=server` 環境変数を設定します。プロファイルの設定は以下の環境変数で指定します:\n\n| 変数 | 必須 | 説明 |\n| --- | --- | --- |\n| `SCAT_MODE` | はい | `server` に設定するとサーバーモードが有効になります。 |\n| `SCAT_PROVIDER` | はい | プロバイダ名 (例: `slack`)。 |\n| `SCAT_TOKEN` | はい | 認証トークン。 |\n| `SCAT_CHANNEL` | いいえ | デフォルトの送信先チャンネル。 |\n| `SCAT_USERNAME` | いいえ | デフォルトの表示名。 |\n| `SCAT_MAX_FILE_SIZE` | いいえ | アップロードファイルの最大サイズ（バイト、デフォルト: 1073741824 = 1 GB）。 |\n| `SCAT_MAX_STDIN_SIZE` | いいえ | 標準入力の最大読み込みサイズ（バイト、デフォルト: 10485760 = 10 MB）。 |\n\n### 使用例\n\n```bash\nexport SCAT_MODE=server\nexport SCAT_PROVIDER=slack\nexport SCAT_TOKEN=xoxb-xxxxxxxxxxxx\nexport SCAT_CHANNEL=\"#deploy-notify\"\n\necho \"Deployed v1.2.0\" | scat post\n```\n\n### Kubernetes での使用例\n\nKubernetes Secret からトークンを注入することで、設定ファイルもボリュームマウントも不要です:\n\n```yaml\nenv:\n  - name: SCAT_MODE\n    value: \"server\"\n  - name: SCAT_PROVIDER\n    value: \"slack\"\n  - name: SCAT_CHANNEL\n    value: \"#alerts\"\n  - name: SCAT_TOKEN\n    valueFrom:\n      secretKeyRef:\n        name: slack-credentials\n        key: token\n```\n\n### サーバーモードでの制約\n\nサーバーモードでは以下の操作は利用できず、エラーが返されます:\n\n- `--config` フラグ（設定ファイルは完全に無視されます）\n- `--profile` フラグ（環境変数で設定されたプロファイルのみ使用されます）\n- すべての `profile` サブコマンド（`add`, `use`, `list`, `set`, `remove`）\n- `config init`\n\n---\n\n## 謝辞 (Acknowledgements)\n\nこのプロジェクトは、[bcicen/slackcat](https://github.com/bcicen/slackcat) のコンセプトに強くインスパイアされ、またその影響を受けています。ファイルや標準入力のストリーミングを処理し投稿するコアロジックは、オリジナルの `slackcat` のコードベースを参考に再実装されました。`slackcat` も同じくMITライセンスで配布されています。\n\n## ライセンス (License)\n\nこのプロジェクトはMITライセンスの下で公開されています。詳細は [LICENSE](LICENSE) ファイルをご覧ください。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmagifd2%2Fscat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmagifd2%2Fscat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmagifd2%2Fscat/lists"}