Gort は、チャットトップ用にゼロから設計されたチャットボット フレームワークです。
Gort は、チームと共同作業する場所、つまりチャット ウィンドウにコマンド ラインの機能をもたらします。無制限のコマンド バンドルのサポートにより、開発者は選択した言語で機能を実装できます。また、強力なアクセス制御により、最も機密性の高いタスクでも自信を持って共同作業できます。拡張性と適応性に重点を置くということは、チームの可視性を失うことなく、予期せぬ事態に迅速に対応できることを意味します。
公式ドキュメントは次の場所にあります: The Gort Guide。
Gort は当初、Operable の Cog を Go で再実装するものとして考案されました。Gort は依然として Cog から多大な影響を受けていますが、ほぼ独自の道を歩んでいます。
最初の設計に関する議論の中で、Cog の機能の多くが、たとえ革新的であってもほとんど使用されず、コードベースの拡張と保守が困難になっていることがわかりました。さらに、その実装言語 -- Elixir -- には熟練した開発者が比較的少数でした。 Cog Slack ワークスペースで何ヶ月も議論された解決策は、Cog を Go で最初から書き直し、あまり使用されていない機能の一部を削除し、プロセスの複雑さを軽減することでした。
これにより、Cog の意味を検討し、場合によっては再定義する機会が得られました。意味のある機能を選択し、意味のない機能を破棄すること。このように、Gort は忠実な再実装というよりも、Cog の「精神的な後継者」として説明することができます。
Gort の設計哲学は、使い慣れたツールを使用して任意の言語でコマンドを構築できるようにすることで、柔軟性とセキュリティを重視しており、誰がどのように使用できるかを厳密に制御できます。
より具体的には:
これらのそれぞれについては、以下でさらに詳しく説明します。
ユーザーは主にコマンドを通じて Gort と対話します。コマンドはコマンド文字 (デフォルトでは!
) によってトリガーされますが、それ以外の点では概念的にはコマンド ラインに入力されたコマンドと同じです。
たとえば、 echo
コマンドを使用すると次のようになります。
示されているように、成功したコマンドの出力は Gort によって中継されます。
コマンドの詳細については、Gort ガイドを参照してください。
Gort コマンドはコンテナー イメージとして構築されるため、使い慣れた任意の言語で構築できます。
さらに、実行可能ファイルは、コマンド ラインに入力されているかのようにすべてのチャット入力を正確に受け取るため、任意のコマンド ライン インタープリターを使用できます。コマンドは Bash スクリプトとして実装することも、 curl
などの既存のコマンドを使用して実装することもできます。
コマンドの作成に関する詳細については、Gort ガイドを参照してください。
Gort では、1 つ以上の関連コマンドのセットを「コマンド バンドル」としてインストールできます。
バンドルは YAML で表現され、各コマンドにどの実行可能ファイルを使用するか、および各コマンドの実行を誰に許可するかを指定します。
非常に単純なバンドル ファイルを以下に示します。
---
gort_bundle_version : 1
name : echo
version : 0.0.1
image : ubuntu:20.04
author : Matt Titmus <[email protected]>
homepage : https://guide.getgort.io
description : A test bundle.
long_description : |-
This is an example bundle. It lets you echo text using the "echo"
command that's built into Ubuntu 20.04.
permissions :
- can_echo
commands :
echo :
description : " Echos back anything sent to it. "
executable : [ "/bin/echo" ]
rules :
- must have echo:can_echo
これは、コマンド ( echo
とも呼ばれます) とcan_echo
という権限を定義するecho
というバンドルを示しています。インストールすると、 echo:can_echo
権限を持つユーザーは Slack で実行できます。
バンドルの詳細については、Gort ガイドを参照してください。
Gort では、ユーザーを1 つ以上のチャット プロバイダーのユーザーに一意にマッピングできます。 Gort ユーザーは 1 つ以上のグループのメンバーになることができ、そのグループは、付与されたアクセス許可の集合と考えることができる任意の数のロールを持つことができます。たとえば、ユーザーdave
developers
というグループに属しているとします。このグループには、 production_deploy
と呼ばれる権限を含む多くの権限を含む、 deployers
という名前のロールがアタッチされている場合があります。
権限とルールの詳細については、Gort ガイドを参照してください。
洗練されたルール システムを各コマンドに適用して、誰がそれを使用できるかを定義できます。これらは非常に細かく設定でき、特定のフラグやパラメータの値に基づいて権限を決定することもできます。
ルールはバンドル レベルで割り当てられ、非常に複雑になる場合があります。以下に、 deploy
というバンドルのサブセットがあります。
name : deploy
version : 0.0.1
permissions :
- production_deploy
commands :
deploy :
description : " Deploys to the chosen environment. "
executable : [ "/bin/deploy" ]
rules :
- with arg[0] == "production" must have deploy:production_deploy
ご覧のとおり、上の例には、 deploy
とも呼ばれる 1 つのコマンドが含まれています。その 1 つのルールは、パラメーターとして「production」を渡すユーザーには、( deploy
バンドルからの) production_deploy
権限が必要であることを保証します。
権限とルールの詳細については、Gort ガイドを参照してください。
Gort は、システム メッセージ、コマンド出力、エラー メッセージなど、ユーザーに送信される情報の表示を制御できる高度なテンプレート システムを提供します。
さらに、テンプレートは構成内のアプリケーション レベルで定義したり、バンドルまたは個々のバンドル構成内のコマンド レベルで定義したりすることができます。
Gort テンプレートは、Go のテンプレート構文を使用して、チャットに依存しない方法で出力をフォーマットします。たとえば、非常に単純なコマンド テンプレートは次のようになります。
{{ text | monospace true }}{{ .Response.Out }}{{ endtext }}
このテンプレートは、コマンドの応答 ( .Response.Out
) を等幅テキストとして出力します。これは次のようになります。
もう少し複雑なテンプレート、これはコマンド エラー テンプレート(実際にはデフォルト) を以下に示します。
{{ header | color "#FF0000" | title .Response.Title }}
{{ text }}The pipeline failed planning the invocation:{{ endtext }}
{{ text | monospace true }}{{ .Request.Bundle.Name }}:{{ .Request.Command.Name }} {{ .Request.Parameters }}{{ endtext }}
{{ text }}The specific error was:{{ endtext }}
{{ text | monospace true }}{{ .Response.Out }}{{ endtext }}
これには、色とタイトルを含むヘッダーに加え、等幅テキストと標準テキストが交互に含まれています。この場合、コマンド エラーは次のような形式になります。
.Response
への参照がいくつかあることがわかります。これらは、レスポンス エンベロープへの参照です。レスポンス エンベロープは、1 つのコマンドのリクエスト、実行、およびレスポンスに関するすべてのデータとメタデータを利用できるようにする、任意のテンプレートからアクセスできるデータ構造です。
監査ログの詳細については、Gort ガイドを参照してください。
Gort は、Slack と Discord の両方をファーストクラスのチャットプロバイダーとしてサポートしています。
サポートされている各チャット プロバイダーには、構成内に専用のセクションがあります。これらはそれぞれリストであるため、同じ Gort コントローラーから Slack と Discord の両方を操作できるだけでなく、必要に応じてそれぞれの複数のインスタンスを操作できることに注意してください。
Gort クイック スタートの手順に従ってボット ユーザーを作成したら、管理者は Gort ユーザーを作成し (まだ作成していない場合)、次に示すように、その Gort ユーザーをチャット プロバイダーのユーザー ID にマップするだけです。下に:
$ gort user create mtitmus --email [email protected] --name " Matt Titmus " --password REDACTED
User " mtitmus " created.
$ gort user list
USER NAME FULL NAME EMAIL
admin Gort Administrator gort@localhost
mtitmus Matt Titmus [email protected]
$ gort user map mtitmus Slack U012P123456
User " mtitmus " mapped to " Slack:U012P123456 " .
$ gort user info mtitmus
Name mtitmus
Full Name Matt Titmus
Email [email protected]
Groups < undefined >
ADAPTER ID MAPPING
Slack U012P123456
それ以降、マップされたチャット ユーザーが入力したコマンドはすべて、その Gort ユーザーに関連付けられます。
すべてのコマンド アクティビティは、高カーディナリティのログ イベント (以下を参照) として出力され、Gort のデータベースに維持される監査ログに記録されます。
たとえば、ユーザーが Slack から!bundle list
コマンドを実行しているとします。
これにより、次のようなログ出力が生成されます。
INFO [49594] Triggering command adapter.name=Gort bundle.default=false bundle.name=gort bundle.version=0.0.1
command.executable="[/bin/gort bundle]" command.name=bundle
command.params=list gort.user.name=admin provider.channel.id=C1238A01234
provider.channel.name=gort-dev [email protected]
provider.user.id=U012P123456 trace.id=476b3089c8ce0d38a2915a3b58fde032
ご覧のとおり、この豊富なイベントには次のものが含まれます。
この例では、読みやすさを考慮して「人間が読める」形式を使用していることに注意してください。運用モードでは、Gort は JSON エンコードされたログ イベントを生成します。
監査ログの詳細については、Gort ガイドを参照してください。
詳細については、『Gort Guide』の「Quick Start Guide」を参照してください。
gort
バイナリはコントローラ管理 CLI としても機能します。
gort
クライアントは、YAML 形式の設定ファイルを使用します。この設定ファイルは、通常、ホーム ディレクトリの.gort
ディレクトリ内のprofile
ファイルにあります。ここには、 gort
が Gort のコントローラーの REST API と対話できるようにするための接続資格情報を保存できます。
.gort/profile
ファイルの例は次のようになります。
defaults :
profile : gort
gort :
url : https://gort.mycompany.com:4000
password : " seekrit#password "
user : me
preprod :
url : https://gort.preprod.mycompany.com:4000
password : " anotherseekrit#password "
user : me
コメントは#
文字で始まります。パスワードに#
が含まれている場合は、上に示したようにパスワード全体を引用符で囲みます。
このファイルには、複数の「プロファイル」をそれぞれ異なる名前で保存できます (ここでは、 gort
とpreprod
があります)。 ( defaults
セクションで) デフォルトとして示されているものが、 gort
によって使用されます。ただし、 --profile=$PROFILE
オプションをgort
に渡して、別の資格情報のセットを使用することができます。
このファイルにプロファイルを手動で追加することもできますが、 gort profile create
コマンドを使用することもできます。
gort
実行可能ファイルには、多数のコマンドとサブコマンドが含まれています。 --help
オプションを渡すことで、すべてのヘルプを利用できます。 gort --help
から始めて、そこから進みます。
Gort はアクティブな重開発の状態にあります。さまざまなマイルストーンが達成された日付を以下に示します。現在および将来のマイルストーンの数と焦点は変更される可能性があります。