目的
- 入力した内容をそのままSlackの任意のチャンネルに投稿するアプリを作成してみる
環境
- ハードウェア環境
項目 | 情報 |
---|---|
OS | macOS Big Sur(11.5) |
ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
プロセッサ | 2 GHz クアッドコアIntel Core i5 |
メモリ | 32 GB 3733 MHz LPDDR4 |
グラフィックス | Intel Iris Plus Graphics 1536 MB |
- ソフトウェア環境
項目 | 情報 | 備考 |
---|---|---|
PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする |
Laravel バージョン | 8.X | commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う |
MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする |
情報
- 下記のリンク先に当該のアプリのコードが有る。
概要
- テスト用に作成したSlackのワークスペースの「generalチャンネル」にlaravelアプリ側のinputBoxに入力した内容を投稿するlaravelアプリを作成する。
準備
- 下記の方法で自分専用のSlackチャンネルを作成した。
- 下記の方法で先に作成したSlackチャンネルのWebhook URLを取得する。
方法
-
下記コマンドを実行してライブラリを導入する。
$ composer require laravel/slack-notification-channel -vvv
-
SlackチャンネルのWebhook URLを下記の様に.envに追記する。(実際に皆さんが取得したWebhook URLを記載してください。)
.envSLACK_URL="https://hooks.slack.com/services/XXXXXXXXXXXX/YYYYYYYYYYYY/ZZZZZZZZZZZZ"
-
下記の内容を
/config/app.php
のどこかに記載する。アプリ名ディレクトリ/config/app.php'slack_url' => env('SLACK_URL'),
-
下記の内容をルーティングファイルに記載する。
アプリ名ディレクトリ/routes/web.phpRoute::prefix('slack')->group(function() { Route::get('/index', [SlackController::class, 'index'])->name('slack.index'); Route::post('/send', [SlackController::class, 'send'])->name('slack.send'); });
-
下記コマンドを実行してリクエストファイルを作成する。
$ php artisan make:request SlackRequest
-
先に作成したSlackRequestクラスは下記の様に修正する
アプリ名ディレクトリapp/Http/Requests/SlackRequest.php<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class SlackRequest extends FormRequest { /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'str' => ['required'], ]; } }
-
下記コマンドを実行して新たにコントローラークラスが記載されたファイルを作成する。
$ php artisan make:controller SlackController
-
先に作成したSlackControllerは下記のように記入する。
アプリ名ディレクトリ/app/Controllers/SlackController.php<?php namespace App\Http\Controllers; use Illuminate\Notifications\Notifiable; use App\Http\Requests\SlackRequest; use App\Notifications\Slack; class SlackController extends Controller { use Notifiable; /** * Slackに通知する文字列入力ページの表示 * * @return view */ public function index() { return view('slacks.index'); } /** * Slackへの通知 * * @param SlackRequest $request * @return redirect */ public function send(SlackRequest $request) { $requestBody = $request->validated(); $this->notify(new Slack($requestBody['str'])); return redirect(route('slack.index')); } /** * 通知を行うWebhook URLの設定 * * @param mix $notification * @return slackWebhookUrl */ public function routeNotificationForSlack($notification) { return config('app.slack_url'); } }
-
下記コマンドを実行してNotificationを継承するSlackクラスが記載されたファイルを作成する。
$ php artisan make:notification Slack
-
先のコマンドで作成されたSlackクラスのファイルは下記の様に記載する。
アプリ名ディレクトリ/app/Notification/Slack.php<?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; use Illuminate\Notifications\Messages\SlackMessage; class Slack extends Notification { use Queueable; /** * @var string $str */ private $str; /** * Create a new notification instance. * * @return void */ public function __construct($str) { $this->str = $str; } /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return ['slack']; } /** * Slack通知 * * @param mixed $notifiable * @return SlackMessage */ public function toSlack($notifiable) { return (new SlackMessage)->content($this->str); } /** * Get the array representation of the notification. * * @param mixed $notifiable * @return array */ public function toArray($notifiable) { return [ // ]; } }
-
viewsディレクトリ直下にslacksディレクトリを作成し、その中にindex.blade.phpを作成し下記のように記載する。
アプリ名ディレクトリ/resources/view/slacks/index.blade.php<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <header></header> <main> <form action="{{ route('slack.send') }}" method="post"> @csrf @error('str') {{ $message }} <br> @enderror <input type="text" name="str"> <button type="submit">送信</button> </form> </main> <footer></footer> </body> </html>
-
ローカルサーバーを起動して下記にアクセスする。
-
表示されているinputに任意の内容を入力して「送信」をクリックする。
-
下記のようにSlackのチャンネルに入力した文字列が表示された。