3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Slack Bot 超入門:Python と Socket Mode でローカルからメッセージ送信&イベント受信するまで

3
Last updated at Posted at 2026-01-31

はじめに

Slack アプリ開発は、社内業務の自動化や通知フローの改善、Bot による対話機能の追加など、日々のコミュニケーションを大きく効率化できる強力な手段です。
一方で、初めて触ると

  • どこから設定を始めればよいのか
  • Slack API のどの項目が何に影響するのか

が分かりづらく、

  • イベントが届かない
  • 権限エラーが出る
  • ローカル環境での動作確認に詰まる

といった「最初の一歩」でつまずきやすいのも事実です。

本記事では、Python から Slack にメッセージを送信し、さらに Socket Mode を使ってローカル環境でイベントを受信できるようにするまでの 最小限の設定フロー を、初心者の方でも迷わず進められるよう丁寧に解説します。

具体的には、

  1. Basic Information(アプリの基本情報・アイコンの設定)
  2. OAuth & Permissions(トークンと権限スコープの設定)
  3. Socket Mode(公開 URL なしでイベントを受信する設定)
  4. Event Subscriptions(どのイベントを Bot に届けるかの設定)

という順番で、画面キャプチャ付きで解説していきます。

この記事を読み終えるころには、「Slack アプリ開発の初期段階において、初期設定で迷わず、ローカル PC からイベントを受信して試せる」状態になることを目指します。

本記事の対象者

これから Slack アプリ開発を始めたい初心者の方や、Python で Bot を動かしてみたい方、将来的に Cloud Run などの実行環境で運用したい方を想定しています。

Slack アプリのしくみ

01_Slack_Bot.png

事前準備

  • Slack登録用のメールアドレスの準備

Slack に登録する際は、確認コードがメールで送信されます。 あらかじめ、メールを受信できるアドレスと環境を準備しておきましょう。

  • Slack アプリ用のアイコンの準備

本記事で作成する Slack アプリでは、専用のアイコン画像を使用します。 50×50 ピクセルの画像をあらかじめ作成・準備しておいてください。

  • Slackのインストールとワークスペースの作成

Slackのインストールとワークスペースの作成は、下記のサイトを参考にしてください。
 Slack をインストールする

本記事では、

  • ワークスペース名:「slack-app
  • チャンネル名:「#all-slack-app

とする。

  • 新たにSlackのワークスペースの作成

新たにSlackワークスペースを作成したい場合は、以下のサイトを参考にしてください。
 Slack ワークスペースを作成する

  • プログラミング用エディタ(VS Code)環境の構築

本記事では、開発環境として VS Code + Python + pyenv + Poetry を使用します。
あらかじめ、以下の環境を構築しておいてください。

  • VS Code(Visual Studio Code)のインストール
  • pyenv を利用した Python 環境の用意
  • Poetry によるパッケージ管理環境の準備

( 参考:ほし@Python講師
 【最新版】Python環境構築完全攻略 Windows編
 【最新版】Python環境構築完全攻略 Mac編


  • (参考) Slackのワークスペースとチャンネルの違い

Slackを使うと必ず出てくる「ワークスペース」と「チャンネル」。どちらも「会話の場」ですが、役割はまったく異なります。Slackでは、まず土台として「ワークスペース」があり、その中にテーマごとの「チャンネル」が作られるイメージです。

           02-1_ワークスぺース_チャンネル.png

  • ワークスペースとは?
    組織全体の入れ物(ビル全体)のイメージです。
    ・会社・団体・コミュニティごとに1つ以上作ることが多い
    ・メンバー管理・権限・セキュリティ・アプリ連携などの設定をまとめて管理
    ・URLもワークスペースごとに固有

  • チャンネルとは?
    テーマごとの部屋(会議室・プロジェクトルーム)のイメージです。
    ・ワークスペースの中に複数作成できる
    ・部署、プロジェクト、用途別に分けて会話を整理
      例:#general, #dev, #sales, #random など
    ・公開チャンネル / プライベートチャンネルで参加範囲を調整可能

  • まとめ
    ワークスペースは「組織全体の入れ物」
    チャンネルは「テーマ別の会話の部屋」
    ワークスペースを適切に管理し、チャンネルを目的別に使い分けることで、チームのコミュニケーション効率は大きく向上します。

1. Slackにメッセージを送ってみよう!

この章では、「Python から Slack にメッセージを送信する」という題材を通じて、Slack アプリ/Bot を動かすための最初の設定手順を学びます。

本記事で使用する Bot の名前と、メッセージを送受信するワークスペース、チェンネルは、以下のように設定します。

  • Botの名前:「weatherBot
  • ワークスペース:「slack-app
  • チャンネル:「#all-slack-app

ここではこの構成を例にしますが、自分の環境に合わせて名前を変えて OK です。

Slack Bot 開発について、さらに深く知りたい方は、公式ガイドも参考にしてください。
 Bolt 入門ガイド

1.1 Bot 用のアカウント(Slack アプリ)を作成

Slack Bot の開発において、最初、「どのワークスペースで動かすか」を決めます。そのため、使用するワークスペースを選択し、Slack アプリを作成します。

03-1.png

  • 「From scratch」をクリックします(管理画面(UI)を使って手動で設定する方法)

04-1.png

  • 「App Name」に今回作成する Bot の名前(ここでは weatherBot)を入力します
  • 「Pick a workspace to develop your app in:」でワークスペース(ここでは slack-app)を選択します
  • 「Create App」ボタンをクリックします

05-2.png

 ここで指定した「App Name」と「Workspace」の組み合わせが、インストール先のワークスペースおよびBotの表示名として定義されます。これで Bot 用アカウント作成は完了です。

1.2 「Slack API」設定画面

Slack Bot 用のアカウントを作成すると、以下のような「Slack API」設定ページが表示されます。ここでは、Bot 開発で押さえておきたい 4つの設定項目 と、それぞれの役割について解説します。

05-12_Basic_Infomation.png

① Basic Information

「Basic Information」は、作成した Slack アプリの 概要をまとめたトップページ です。

  • アプリ名・説明文・アイコンなどの基本情報の編集
  • Client ID / Client Secret / Signing Secret などの認証情報の確認
  • アプリインストール用リンクの取得
  • 「OAuth & Permissions」「Event Subscriptions」など、各種設定ページへの入口
    といった役割を持ちます。

イメージとしては、Slack アプリにとっての「ビルの受付フロア」のような場所です。ここから、他のいろいろな設定部屋へ移動していきます。このページで特に大切なのが、次の2つです。

  • Signing Secret (今回は使用しない)
    Slack からのリクエストが本物かどうかを署名検証するために使います。
    外部からのなりすましを防ぐ、セキュリティ上もっとも重要な値の一つ です。

  • Display Information
    アプリの名前・アイコン・説明文など、ユーザーに表示される基本情報を設定します。
    ここを整えておくと、ワークスペースのメンバーにとって何をする Bot なのかが一目でわかるようになります。

② OAuth & Permissions

「OAuth & Permissions」は、Slack アプリの「認可設定」を行うページです。
ここで、

  • アプリが受け取るトークン(OAuth)
  • そのトークンで どこまでアクセスしてよいか(Permissions/スコープ)

をまとめて設定します。

OAuth(Open Authorization)
 パスワードを直接教えずに、アプリ同士を安全に連携させるための仕組みです。
ここで発行される トークン を使って、Slack と外部アプリがやり取りします。

Permissions(権限/スコープ)
 発行されたトークンで、アプリが 「どの情報まで」「どの操作まで」アクセスしてよいかを決めるのが Permissions(Scopes)です。

  • チャンネルのメッセージを読めるか
  • メッセージを投稿できるか
  • ユーザー情報を取得できるか

といった権限を、細かく制御します。

トークンのイメージとしては、いわば「デジタルな入館証」のようなものです。この入館証を持つことで、Slack という建物(システム)に対して「私は許可された Bot です」と身分を証明し、あらかじめ決められた役割(権限)の範囲内で行動できるようになります。

Scopes
Scopes では、Slack アプリが「何をしてよいか」「どんな権限を持つか」を具体的に設定します。

  • Bot Token Scopes
    アプリ(Bot ユーザー)として行動するための権限です。代表的なものとして、次があります。

    • chat:write:メッセージを投稿する(最もよく使う権限)
    • channels:history:公開チャンネルのメッセージ履歴を読み取る

何ができる Bot にしたいかに応じて、この Scopes を適切に選ぶことが重要です。

③ Socket Mode

Socket Mode は、Slack アプリが 公開 URL なしでイベントを受信できる WebSocket ベースの仕組みです。

通常の Events API では、インターネットから到達可能な HTTPS エンドポイント(サーバー)が必要ですが、Socket Mode ではアプリ側から Slack に対して WebSocket 接続を確立し、その接続を通じて Slack がイベントを送信します。

  • ローカル開発環境や社内ネットワーク内のマシン上でも動かしやすい
  • ngrok などのトンネリングツールや HTTPS サーバの準備が不要

といったメリットがあり、開発初期のハードルを大きく下げてくれる仕組みです。

Socket Mode01.png

イメージとしては、「Slack というビルに部屋(エンドポイント)を借りて人を待つ(通常の Events API)」のではなく、アプリ側から Slack ビルに 専用の電話回線を引いておいて、イベントが起きたら Slack からその電話に連絡してもらうイメージです。

④ Event Subscriptions

「Event Subscriptions」は、Slack アプリが どのイベントを受け取るかを設定するページです。

  • メッセージが投稿された
  • Bot がメンションされた
  • リアクションが押された

など、Slack 内のアクションはすべて「イベント」として扱われます。Event Subscriptions では、「どんな種類のイベントを監視するか」をアプリ側で選びます。

Subscribe to bot events

  • 「Subscribe to Bot Events」は、Bot が受け取るイベントを選択する設定項目です
  • ユーザー向けのイベントとは別に、Bot 専用のイベント をここで有効化します
  • この設定をしないと、Bot は何が起きてもイベント自体を受け取れないため、反応できません

「権限(Scopes)」で「何ができるか」を決めて、「Event Subscriptions」で「どの出来事を知らせてもらうか」を決める、というイメージです。

App Token と Bot Token の区別
 Slack アプリで Socket Mode を使う場合、「App Token」と「Bot Token」という、2種類のトークンを使い分けます。

  • App Token (xapp-):Socket Mode の WebSocket 接続を初期化するために必須
  • Bot Token (xoxb-):メッセージ送信やチャンネル操作など、Bot としての動作に使用

どちらも役割が異なるトークンなので、両方を正しく設定しておく必要があります。

1.3 Slack Bot 用のアイコンを登録

Slack Bot 用の見た目(アイコンと説明文)を設定します。これは機能には直接影響しませんが、ワークスペースのメンバーから見たときに、「この Bot は何をするものなのか」がわかりやすくなる重要な部分です。

  • 画面左「Settings」欄の「Basic Information」を選択し、「Display Information」セクションまでスクロールします

06-1_Basic_Infomation.png

  • 「+Add App Icon」をクリックし、「事前準備」で作成しておいたアイコン画像を登録します
  • 「Short description」に Slack アプリの短い説明文を入力します
  • 「Background color」でアイコンの背景色を指定します

07-2.png

  • 設定が完了したら、画面右下の「Save Changes」をクリックします

09-1.png

 こうしておくことで、チャンネルに Bot が表示されたとき、誰が見ても何の Bot か分かる状態にできます。

1.4 Slack Bot の役割(権限)の設定

Slack Bot に、どんな操作を許可するか(役割・権限) を設定します。ここでは「メッセージを投稿する権限」を付与します。

  • 画面左「Settings」欄の「OAuth & Permissions」を選択し、「Scopes」セクションまでスクロールします

11_OAuth_Tokens.png

  • 「Bot Token Scopes」セクションの「Add an OAuth Scope」をクリックします

12_Scopes.png

  • ここで「chat:write」を選択します

13-1_scopes_chat_write.png

chat:write」を付与することで、Bot としてチャンネルにメッセージを投稿できるようになります。

14-1_scopes_chat_write.png

 ここで権限を付け忘れると、後でプログラムからメッセージ送信をしようとしても「権限不足」でエラーになってしまうので注意が必要です。

1.5 トークンの発行

次に、Bot が Slack 上で動作するためのトークン を発行します。

  • 画面左の「Settings」欄から「OAuth & Permissions」を選択し、ページ内の「OAuth Tokens」セクションで「Install to Workspace」ボタンをクリックします

15_1_QAuth_Tokens.png

  • ワークスペースへのインストール確認画面が表示されるので、「許可する」ボタンをクリックします

15_2-1_QAuth_Tokens.png

インストールが完了すると、「Bot User OAuth Token」が発行されます。このトークンが、後ほど Python プログラムから Slack にアクセスする際の「認証情報」になります。

15_3_QAuth_Tokens.png

1.6 Slack のワークスペースに Bot を招待

Bot の役割(権限)の設定とトークンの発行が完了したら、実際にメッセージを送りたいチャンネルに Bot を参加させる必要があります。

  • Slack 画面で、開発するワークスペース(slack-app)内のチャンネル(#all-slack-app)のチャット欄に次を入力し、送信ボタンをクリックします
/invite @weatherBot

16-1_invite_slackに紹介.png

 招待が完了すると、チャンネル内に「追加されました」と表示されます。

17-1_招待されました.png

 正しく招待されているかは、チャンネル名(#all-slack-app)を右クリックし、「チャンネル詳細を表示」→「インテグレーション」タブを開き、「App」の項目に該当の Bot が含まれているかどうかで確認できます。

19-1_確認.png

 ここまで完了すると、Bot がチャンネルのメンバーとして待機している状態になります。

1.7 PythonからSlackにメッセージを送信

実際に Python から Slack にメッセージを送ります。

開発環境には「VS Code + Python + pyenv + Poetry」を使用します(詳細は「事前準備」を参照してください)。

  • Slack を操作するためのフレームワークである Slack Bolt を仮想環境にインストールします。VS Code のターミナルで、次のコマンドを実行します
poetry add slack_bolt

20_VS Code_poetry_add_slack.png

 次に、トークン を コード 内にベタ書きするのは 「NG」です。GitHub にうっかり push してしまうと、トークンが流出しアカウント乗っ取りの危険があります。

そのため本記事では、トークンを環境変数として別ファイル(.env)で管理する方法を採用します。

  • 「.env」ファイルを仮想環境から読み込むためのライブラリをインストールします。VS Code のターミナルで、次のコマンドを実行します
poetry add dotenv

21_poetry_add_dotenv.png

  • 環境変数を定義するための設定ファイルとして、「.env」というファイルを作成します

22_VSCode_env.png

  • 「1.5 トークンの発行」で取得した「Bot User OAuth Token」の値を、「.env」ファイルに次の形式で記述します
BOT_TOKEN=ここにトークンを記入

23_env_bot_token.png

 こうしておくことで、コードからは「BOT_TOKEN」という名前で参照しつつ、実際の値はファイルに分離して安全に管理できます。

  • 最後に、仮想環境を作成したフォルダ内に、Slack にメッセージを送るための Python ファイル「send_slack_message.py」 を作成し、次のコードを記述します

今回は、Slack に「天気は晴れです」というメッセージを送信します。

24_VSCode_py.png

import os
from dotenv import load_dotenv
from slack_bolt import App

# -----------------------------------------
# 「.env」 を読み込み、環境変数として登録
# (BOT_TOKEN を使用できる状態にする)
# -----------------------------------------
load_dotenv()
SLACK_BOT_TOKEN = os.environ["BOT_TOKEN"]

# -----------------------------------------
# Slack Bolt アプリをインスタンス化
# -----------------------------------------
app = App(token=SLACK_BOT_TOKEN)

if __name__ == "__main__":
    # -----------------------------------------
    # Slack のチャンネルにメッセージを送信
    #  channel: 投稿先のチャンネル名(#all-slack-app)
    #  text: 送信したいメッセージ本文
    # -----------------------------------------
    app.client.chat_postMessage(
        channel='#all-slack-app',
        text='天気は晴れです'
    )

 「send_slack_message.py」を実行すると、Slack側でメッセージが送信されたこと確認できます。

25-1_slack_message.png

 ここまでが、「Python から Slack にメッセージを送る」ための一連の流れです。2章以降では、この Bot にイベント受信機能を足していきます。

2. Slack と通信してみよう!(Socket Mode でイベント受信)

この章では、Slack から送られてくるイベント(「メッセージが投稿された」など)をローカル環境の Python プログラムで受け取り、処理する方法を学びます。

通常、Slack のイベントを受信するには、インターネット上に公開されたHTTPS サーバー(Request URL)が必要です。しかし、学習段階でいきなりサーバーを公開するのはハードルが高くなりがちです。

そこで本記事では、サーバーを公開せずにイベントを受信できる Socket Mode を利用します。Socket Mode を使うことで、ローカル PC 上のアプリが Slack と WebSocket で接続され、イベントを直接受け取れるようになります。

2.1 Socket Modeを有効化にする

Slack とローカルアプリをつなぐ回線(WebSocket 接続)を開くための設定を行います。

  • 左メニュー「Settings」欄の 「Socket Mode」 を選択し、「Connect using Socket Mode」セクションの 「Enable Socket Mode」 を「ON」にします

26_Socket_Mode.png

 ここを ON にすることで、Slack は「HTTP の Request URL ではなく、Socket Mode で接続しているクライアント(今回の Python アプリ)にイベントを送る」動作に切り替わります。
ローカル PC で開発を進めたい場合、この設定が入口になります。

  • 「Token Name」に Socket Mode 用のトークン名(weatherBot_socketMode)を入力し、「Generate」ボタンをクリックします

27-1_Socket_Mode-2.png

 この操作で発行されるのが「App-Level Token(xapp- で始まるトークン)」です。「App-Level Token 」は、Socket Mode の WebSocket 接続そのものを確立するためのトークンであり、Bot がメッセージを送るための Bot Token とは役割が異なります。

  • 「App-Level Token」が発行されるので、「Copy」ボタンをクリックし、「Done」ボタンをクリックします

28-1_Socket_Mode-3.png

  • コピーした「App-Level Token」の値を、VS Code の「.env」ファイルに次の形式で記述します。
APP_TOKEN=ここにトークンを記入

29-1_.png

 ここで 「.env」 に保存しておく理由は、トークンを環境変数として管理しておくことで、GitHub などにコードを公開しても、認証情報だけは外に漏れないようにできます。

2.2 Slack Botの権限スコープ(Scopes)を設定

次に、「どんな種類のデータを読める Bot にするか」という 権限(Scope)を決める設定を行います。適切な Scope を設定しておかないと、イベントを受信しても中身(メンション情報など)を読み取ることができません。

ここでは後ほど 「message.channels」 を受信するために 「channels:history」 を付与します。

  • 左メニュー「Settings」欄の 「OAuth & Permissions」 を選択し、「Scopes」セクションまでスクロールします

11_OAuth_Tokens.png

  • 「Scope」-「Bot Token Scopes」セクションの「Add an OAuth Scope」をクリックします

30.png

  • 「Bot Token Scopes」に 「channels:history」 を選択します

101_Scope_channel_history.png

 この Scope は、Bot が参加しているチャンネルのメッセージ履歴を読み取るための権限です。後ほど「Event Subscriptions」で「message.channels」イベントを設定すると、チャンネルに投稿された通常メッセージを受け取ることになります。Slack から届くイベントには メッセージ本文が含まれるため、Bot がイベント内容を正しく処理するには、この「channels:history」の権限が必須となります。

  • Scope を追加すると、画面の上部に警告が表示され、警告メッセージ内の 「reinstall your app」の箇所をクリックします

102-1_reinstall_your_app.png

 ここで再インストールが必要なのは、新しく付与した権限を、実際のワークスペース側にも反映するためです。Bot Tokens Scopesの設定だけ変えても、インストール済みアプリの権限は自動では更新されない点に注意してください。

  • 「許可する」ボタンをクリックします

103_permission.png

2.3 Bot が受信するイベントの追加(message.channels)

最後に、「どんな種類のイベントを受信するか」を設定します。Scope が「何を読めるか」を決めるのに対して、「Event Subscriptions」は「どのイベントを送ってもらうか」を決めるイメージです。

  • 左メニュー「Settings」欄の「Event Subscriptions」を選択し、「Enable Events」セクションを「ON」にします

35.png

 ここを「ON」にしないと、Socket Mode を有効にしていても そもそもイベントが送信されません。「イベント配信のスイッチを入れる」イメージで捉えると分かりやすいです。

「Subscribe to bot events」をクリックする

36.png

「Add Bot User Event」をクリックし、検索欄に「message.channels」と入力し、「message.channels」を選択する。

104_Event_Sub.png

 「message.channels」を選ぶことで、Slack Bot は 参加している公開チャンネルに投稿された通常メッセージ をイベントとして受け取れるようになります。

  • 画面右下の 「Save Changes」 をクリックします

105_Event_Sub_save.png

 これで、Slack からの「message.channels」イベント通知を、Socket Mode 経由でローカルの Python プログラムが受け取れる状態になりました。

2.4 チャンネルに投稿された特定のメッセージに反応して返信する Bot

ここまでの設定(Socket Mode/Scopes/Event Subscriptions)が完了すると、ローカルの Python プログラムで Slack からのイベントを受信できる状態になりました。

ここでは、実際に

「チャンネルに 『明日の天気を教えて』 と投稿されたら返信する Bot」

を Python(Slack Bolt + Socket Mode)で実装します。

  • VS Code に、「socket_mode_receive_send.py」というファイルを作成し、次のコードを記述します。

39_pytho.png

import os
from dotenv import load_dotenv
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

# -----------------------------------------
# 「.env」 を読み込み、環境変数として登録
# (BOT_TOKEN/APP_TOKEN を使用できる状態にする)
# -----------------------------------------
load_dotenv()
SLACK_BOT_TOKEN = os.environ["BOT_TOKEN"]
SLACK_APP_TOKEN = os.environ["APP_TOKEN"]

# -----------------------------------------
# Slack Bolt アプリをインスタンス化
# -----------------------------------------
app = App(token=SLACK_BOT_TOKEN)

@app.message("明日の天気を教えて")
def message_hello(message, say):
    # ユーザーIDを取得
    user = message["user"]
    # 返信メッセージを送信
    say(f"<@{user}> メッセージを受け取りました。明日は晴れます!")

if __name__ == "__main__":
    SocketModeHandler(app, SLACK_APP_TOKEN).start()
  • socket_mode_receive_send.py」を実行する

39-1_python_ターミナル.png

 正常に起動すると、ターミナルに「Bolt app is running!」が表示されます。

  • Slack のチャンネルに「明日の天気を教えて」と入力す

106_Slack.png

「メッセージを受け取りました。明日は晴れます!」というメッセージが返ってきました!(祝)

さらにSocket Modeについて詳しく知りたい方は、公式ガイドを参考にしてください。
 Bolt 入門ガイド

苦労した点

  • 動画教材を一度見ただけでは「どこから設定を始めればよいのか分からない」状態だったため、公式ドキュメントや記事を読みながら内容を整理し、メモを作成する必要があった
  • Slack API の設定では、「なぜその設定が必要なのかイメージしづらく」、記事や生成AIに質問しながら一つずつ意味を確認していった
  • 自分の「Slackの知識が浅く」、「どの画面にどの設定メニューがあるのか」を探すだけでも時間がかかった
  • 公式ドキュメントの情報量が多く、「必要な情報にピンポイントで辿り着くのが難しい」と感じた

まとめ

  • Slack アプリの初期設定は 「Basic Information / OAuth & Permissions / Socket Mode / Event Subscriptions」 の 4 つを正しく組み合わせることが重要
  • Bot Token(xoxb-) は API 操作用、App Token(xapp-) は Socket Mode 接続用と、役割がはっきり分かれている
  • 今回の構成(チャンネルの通常メッセージを受信)では、channels:history + message.channels + Socket Mode 有効化 がポイント
  • Python + Slack Bolt を使うと、数十行程度のコードで「チャンネルへのメッセージ送信」と「特定メッセージに反応して返信する Bot」を実装できる

学習を通して得たこと

  • 「どの設定がどの動きにつながっているのか」を一つずつ確認しながら進めたことで、結果的にとても良いインプットになった
  • 難しいことを学ぶときは、焦って一気に進めて「わかったつもり」にならず、毎日、少しずつ頭を慣らしながら取り入れていくことが大事だと感じた
  • 今回の経験を通じて、「手を動かしながら理解を深めていく」学び方の大切さを改めて実感しました

参照先

 Slack をインストールする
 Slack ワークスペースを作成する
  Slack API にアクセス
 【最新版】Python環境構築完全攻略 Windows編
 【最新版】Python環境構築完全攻略 Mac編
 Bolt 入門ガイド

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?