ЯoomeR

プログラミング~実装とエラー解決と、時々、AI~

スプレッドシートから情報を取得し、Slackに送るRailsアプリ[コピペで作れる]

前提条件

で作成していますので、ご自身の環境にあわせてご利用ください。

見本アプリ

Githubで見本アプリを公開しています。

git cloneしていただき、必要な部分を書き換えるだけで使用できるようにしています。

リポジトリはこちら

実装手順

  • Google OAuthの設定
  • SlackAPIの設定
  • Railsアプリケーションの作成

本記事ではRailsアプリケーションの作成を解説します。

Railsアプリケーションを作成しよう

rails newで新規アプリケーションを作成

scaffoldで作ってもオッケーです。

今回作成するアプリではデータを保存しないため、-d オプションは付ける必要はありません。

rails new 任意のアプリケーション名 

コントローラーの作成

わかりやすく「posts_controller」としておきましょう。

rails g controller posts

コントローラーの記述は以下のようにしましょう。

class PostsController < ApplicationController
    def index
    #Slackのトークンを設定します
    Slack.configure do |config|
      config.token = "slackapiで取得したtokenを記述する"
    end
    
    # SlackのAPIクライアントを新規で生成します
    client = Slack::Web::Client.new
    
    # 「#」を先頭につけてチャンネル名を記述します
    channel = "#slackのチャンネル名を記述する"

    # config.jsonを使ってGoogleDriveに接続します
    @session = GoogleDrive::Session.from_config("config.json")

    # 操作するシートのID、シート名を定義します
    @sheets = @session.spreadsheet_by_key("スプレッドシートのIDを記述する").worksheet_by_title("シート名を記載する")
    
    # 動作を確認するため、左上のセルに値を入れるようにします
    @sheets[1, 1] = "Hello World"

    #変数の定義
    @content = @sheets[5, 16]
  

    # 投稿するメッセージを記述します
    text = "スプレッドシートの値は#{@content}です。"
    
    response = client.chat_postMessage(channel: channel, text: text)
    
    # シートを上書き保存します(Hello Worldを保存する必要はないため、記述しなくてもOKです)
    @sheets.save
  end
end

ビューの作成

viewspostsフォルダの中にindex.html.erbファイルを作成しましょう。

app/views/posts/index.html.erb

中身は以下のように記述しましょう。

投稿した内容を確認するためだけのシンプルな作りです。

以下の内容をSlackに送りました。
スプレッドシートから受け取った内容は"@content"です。

ルーティングの設定

トップページを開くことが実行のトリガーになるので、非常にシンプルです。

root to: "posts#index"

初回実行時の設定

rails sにてアプリを実行した際、初回のみ認証が求められます。

1. Open this page: 
http......

2.

上記のように表示されますので、http...部のURLをブラウザで開きましょう。

ブラウザ上で文字列が表示されますので、コピーしましょう。

コピーした文字列をターミナルに貼り付ければ認証完了です。

(2. の後は入力待機状態になっているはずです。誤って空のままEnterキーを押してしまった場合は、一度サーバーを落として再度rails sを行いましょう。)

挙動確認

対象のチャンネルでメッセージが表示されていることを確認しましょう。

今回のアプリで疑問・質問があればフォームにてお問い合わせをお願いいたします。