このガイドは Bolt 1.x を利用しているアプリを 2.x にアップグレードするための手順について説明します。いくつかの変更が必要とはなりますが、ほとんどのアプリの場合で、おそらく対応に必要な時間は 5 〜 15 分程度です。
注: もしすぐにアップグレードをしない場合は、Bolt 1.x に関するサポートスケジュールをご確認ください
このガイドは Bolt 1.x を利用しているアプリを 2.x にアップグレードするための手順について説明します。いくつかの変更が必要とはなりますが、ほとんどのアプリの場合で、おそらく対応に必要な時間は 5 〜 15 分程度です。
注: もしすぐにアップグレードをしない場合は、Bolt 1.x に関するサポートスケジュールをご確認ください
async
関数に変更Bolt アプリ内のリスナー関数は、全て async
関数に変更する必要があります。そして、そのリスナー関数内の say()
、respond()
、ack()
メソッドの呼び出しも全て await
を呼び出しの前につける必要があります。
これまで:
1
2
3
4
app.action('some-action-id', ({action, ack, say}) => {
ack();
say('hello world');
})
これから:
1
2
3
4
app.action('some-action-id', async ({action, ack, say}) => {
await ack();
await say('hello world');
})
Bolt for JavaScript 2.x では、より多くのユースケースで、必要に応じてエラーをキャッチし、グローバルエラーハンドラーにそれを送るかを制御できるよう改善されました。これまでと同様、グローバルエラーハンドラーに全て任せるよりは、可能な限り、リスナー関数の内部でエラーに対処することをおすすめします。
try
/catch
節を用いたエラーハンドリング1
2
3
4
5
6
7
8
9
app.action('some-action-id', async ({action, ack, say, logger}) => {
try {
await ack();
await say('hello world');
} catch (error) {
// ここでエラーに対処
logger.error(error);
}
})
1
2
3
4
app.error(async (error) => {
// エラーの詳細をチェックして、メッセージ送信のリトライやアプリの停止などの対処を行う
console.error(error);
});
その他のエラーに関する変更:
ack()
メソッドを 3 秒間のうちに呼び出さなかった場合、これまでのように例外を投げるのではなくログを出力するようになりましたErrorCode.MultipleListenerError
の値での code
と、発生した個々のエラーの配列を含む originals
というパラメーターをラップしたエラーを返しますメッセージショートカット (以前はメッセージアクションと呼ばれていました)は、これまで action()
メソッドでハンドリングしていましたが shortcut()
メソッドを使うようになりました。
これまで:
1
2
3
4
app.action({ callback_id: 'message-action-callback' }, ({action, ack, context}) => {
ack();
// ここで処理を行う
})
これから:
1
2
3
4
app.shortcut('message-action-callback', async ({shortcut, ack, context}) => {
await ack();
// ここで処理を行う
})
もしカスタムのミドルウェアを書いている場合は、その関数を async
に変更し、さらに next()
の呼び出しを await next()
に変更してください。もし後続の処理がある場合は、関数を next()
に渡す代わりに、その後続の処理を await next()
の後に実行してください。
これまで:
1
2
3
4
5
6
7
8
function noBotMessages({message, next }) {
function doAfter() {
// 後続の処理をここでやる
}
if (!message.subtype || message.subtype !== 'bot_message') {
next(doAfter);
}
}
これから:
1
2
3
4
5
6
async function noBotMessages({message, next }) {
if (!message.subtype || message.subtype !== 'bot_message') {
await next();
// 後続の処理をここでやる
}
}
@slack/bolt@1.x
は 2020 年 6 月 30 日 より非推奨となります。それまでの期間はケースバイケースでバグ修正や新機能のバックポートを対応を継続します。@slack/bolt@1.x
が非推奨となった後は、End of life(正式サポートの終了日)まで クリティカルなバグ修正のみ を実装し、クリティカルではない issue や pull request はクローズします。End of life は 2021 年 4 月 30 日 の予定です。この日からは @slack/bolt@1.x
の開発は完全に終了となり、残っている open issue や pull request もクローズされます。
TypeScript 利用ガイド でも説明していますが、@slack/bolt@2.x
は TypeScirpt 3.7 以上が必須バージョンです。