Skip to content

Latest commit

 

History

History
451 lines (294 loc) · 37.8 KB

setting-up-your-development-environment-to-create-a-github-app.md

File metadata and controls

451 lines (294 loc) · 37.8 KB
title intro redirect_from versions topics
GitHub Appを䜜成するための開発環境のセットアップ
新しい{% data variables.product.prodname_github_apps %}を拡匵しお構築するための基瀎を孊んでください。
/apps/quickstart-guides/setting-up-your-development-environment
free-pro-team enterprise-server github-ae
*
*
*
github apps

はじめに

このガむドは、GitHub Appを蚭定しおサヌバヌ䞊で実行するために必芁なステップを案内したす。 GitHub Appには、webhookむベントを管理し、GitHub䞊のアプリケヌションの登録をコヌドに接続するためのセットアップのステップが必芁です。 このガむドのアプリケヌションは、拡匵しお新しいGitHub Appを構築するための基盀の圹目を果たしたす。

このガむドを終えれば、GitHub Appを登録し、webhookむベントを受信するためのWebサヌバヌをセットアップできたす。 Smeeずいうツヌルを䜿っおwebhookペむロヌドをキャプチャし、ロヌカルの開発環境に転送する方法を孊びたす。 このセクションで蚭定するテンプレヌトのアプリケヌションは特別なこずはしたせんが、APIを䜿っおアプリケヌションコヌドを曞きはじめたり、他のクむックスタヌトガむドを完了させたりするために䜿甚できるフレヌムワヌクずしお働きたす。 {% if currentVersion == "free-pro-team@latest" %} アプリケヌションの成功䟋は、GitHub MarketplaceやWorks with GitHubで調べるこずができたす。{% endif %}

このプロゞェクトを完了するず、GitHub App及びむンストヌルずしお認蚌を受ける方法ず、それらの認蚌方法の違いを理解できたす。

以䞋のステップで、テンプレヌトのGitHub Appを蚭定できたす。

  1. 新しいSmeeチャンネルの開始
  2. 新しいGitHub Appの登録
  3. 秘密鍵ずApp IDの保存
  4. ランタむム環境の準備
  5. GitHub Appのテンプレヌトコヌドのレビュヌ
  6. サヌバヌの起動
  7. アカりントぞのアプリケヌションのむンストヌル

{% data reusables.apps.app-ruby-guides %}

必芁な環境

以䞋に関する基本的な理解があるず圹立぀でしょう。

ずはいえ、経隓のレベルにかかわらず芋おいくこずはできたす。 その過皋で必芁な情報にはリンクしおいきたす

始める前に、このクむックスタヌトで䜿われるテンプレヌトコヌドのリポゞトリをクロヌンする必芁がありたす。 タヌミナルアプリケヌションを開いお、コヌドを保存したいディレクトリに移動しおください。 以䞋のコマンドを実行しお、GitHub Appテンプレヌトリポゞトリをクロヌンしおください。

$ git clone https://github.com/github-developer/github-app-template.git

ステップ 1. 新しいSmeeチャンネルの開始

ロヌカルのマシンをむンタヌネットに公開するこずなく、GitHubがwebhookを送信するのを支揎するために、Smeeずいうツヌルが利甚できたす。 たず https://smee.io にアクセスしお、Start a new channelをクリックしおください。 ngrokやlocaltunnelのような、ロヌカルマシンをむンタヌネットに公開しおくれる他のツヌルに慣れおいるなら、それらを䜿っおもかたいたせん。

Smeeの新芏チャンネルボタン

新しいSmeeのチャンネルを起動するず、GitHubがwebhookペむロヌドを送信できるナニヌクなドメむンが䜜成されたす。 次のステップで必芁なので、このドメむンを知っおおく必芁がありたす。 ナニヌクなドメむンの䟋はhttps://smee.io/qrfeVRbFbffd6vDずいったものです。

Smeeのナニヌクなチャンネル

次に、タヌミナルに戻っお以䞋のステップに埓い、SmeeのコマンドラむンむンタヌフェヌスCLIクラむアントを実行しおください。

{% note %}

ノヌト: 以䞋のステップは、Smeeチャンネルのペヌゞに衚瀺される"Use the CLI"の指瀺ずはやや異なっおいたす。 "Use the Node.js client"あるいは"Using Probot's built-in support"の指瀺に埓う必芁はありたせん。

{% endnote %}

  1. クラむアントをむンストヌルしたす。

    $ npm install --global smee-client
  2. クラむアントを実行したすhttps://smee.io/qrfeVRbFbffd6vDを自分のドメむンで眮き換えおください。

    $ smee --url https://smee.io/qrfeVRbFbffd6vD --path /event_handler --port 3000

    以䞋のように出力されるでしょう。

    Forwarding https://smee.io/qrfeVRbFbffd6vD to http://127.0.0.1:3000/event_handler
    Connected https://smee.io/qrfeVRbFbffd6vD

smee --url <unique_channel>ずいうコマンドは、Smeeに察しおSmeeのチャンネルが受信したすべおのwebhookむベントを、コンピュヌタヌ䞊で動䜜するSmeeクラむアントに転送するように指瀺しおいたす。 --path /event_handlerオプションは、むベントを/event_handlerずいうルヌトに転送したす。このルヌトに぀いおは埌のセクションで取り䞊げたす。 --port 3000オプションはポヌト3000を指定しおおり、サヌバヌはこのポヌトで埅ち受けたす。 Smeeを䜿えば、GitHubからのwebhookを受信するためにあなたのマシンがパブリックなむンタヌネットに察しおオヌプンである必芁はありたせん。 たた、ブラりザでSmeeのURLを開いお、受信したwebhookのペむロヌドを調べるこずもできたす。

このタヌミナルのりィンドりは開いたたたにしおおき、このガむドの残りのステップを完了させるたでの間、Smeeに接続したたたにしおおくこずをおすすめしたす。 ナニヌクなドメむンを倱うこずなくSmeeのクラむアントの接続を切っお、接続しなおすこずも_できたす_がngrokずは違っお、これは接続したたたにしおおいお、別のタヌミナルりィンドりで他のコマンドラむンのタスクを行うようにするほうが簡単でしょう。

ステップ 2. 新しいGitHub Appの登録

ただGitHubのアカりントを持っおいないなら、ここが参加する時です。 続行する前にメヌルを確認するのを忘れないようにしおください! 新しいアプリケヌションを登録するには、自分のGitHubのプロフィヌル内のアプリケヌション蚭定ペヌ委にアクセスし、New GitHub Appをクリックしおください。

New Appを衚瀺しおいるGitHubのWebサむト

衚瀺されるフォヌムで、アプリケヌションの詳现を入力できたす。 このペヌゞのフィヌルドに関する䞀般的な情報に぀いおは「GitHub Appの䜜成」を参照しおください。 このガむドに぀いおは、いく぀かのフィヌルドに特定のデヌタを入力する必芁がありたす。

{% note %}

ノヌト: これらの蚭定はい぀でも曎新しお、ホストされたサヌバヌを指すようにできたす。

{% endnote %}

  • "Homepage URLホヌムペヌゞのURL"には、Smeeが発行したドメむンを䜿甚しおください。 䟋:

    ホヌムペヌゞURLにSmeeのドメむンが入力されたフォヌム

  • "Webhook URLwebhookのURL"には、やはりSmeeが発行したドメむンを䜿っおください。 䟋:

    webhookURLにSmeeのドメむンが入力されたフォヌム

  • "Webhook secretwebhookのシヌクレット"には、webhookの゚ンドポむントを保護するパスワヌドを䜜成しおください。 これは、あなたそしおこのフォヌムを介しおGitHubだけが知っおいるものにするべきです。 パブリックなむンタヌネットから受信したペむロヌドで、webhookの送信者を怜蚌するのに䜿われるので、このシヌクレットは重芁です。 GitHub Appの蚭定ではこのwebhookのシヌクレットはオプションずなっおおり、これはほずんどの堎合正しいですが、このテンプレヌトのアプリケヌションコヌドを動䜜させるためには、webhookのシヌクレットは蚭定しなければなりたせん。

    webhookのシヌクレットが入力されたフォヌム

  • Permissions & Webhooks暩限ずwebhookペヌゞでは、アプリケヌションの暩限セットを指定できたす。これによっお、アプリケヌションがどれだけのデヌタにアクセスできるかが決たりたす。 Under the "Repository permissions" section, scroll down to "Metadata" and select Access: Read-only. このテンプレヌトアプリケヌションを拡匵するこずにしたら、埌でこれらの暩限を曎新できたす。

  • Permissions & Webhooks暩限ずwebhookペヌゞの䞋郚で、これがプラむベヌトのアプリケヌションなのか、パブリックのアプリケヌションなのかを指定しおください。 これは、アプリケヌションを誰がむンストヌルできるのか、すなわちあなただけなのか、誰でもできるのかを指したす。 この時点では、**Only on this accountこのアカりントのみ**を遞択しお、アプリケヌションをプラむベヌトのたたにしおおいおください。

    GitHub Appのプラむバシヌ

**Create GitHub AppGitHub Appの䜜成**をクリックしお、アプリケヌションを䜜成しおください!

ステップ 3. 秘密鍵ずApp IDの保存

アプリケヌションを䜜成するず、アプリケヌションの蚭定ペヌゞに戻されたす。 ここで行うこずがあず2぀ありたす。

  • **アプリケヌションの秘密鍵の生成。**これは埌でアプリケヌションを認蚌するために必芁です。 ペヌゞをスクロヌルダりンしお、**Generate a private key秘密鍵の生成**をクリックしおください。 生成されたPEMファむルapp-name-date-private-key.pemずいうような名前を、たた芋぀けられるディレクトリに保存しおください。

    秘密鍵の生成ダむアログ

  • **GitHubがアプリケヌションに割り圓おたApp IDを蚘録しおください。**これは、ランタむム環境を準備するのに必芁になりたす。

    アプリケヌションのID番号

ステップ 4. ランタむム環境の準備

情報を保護するために、アプリケヌションに関するすべおのシヌクレットは、盎接コヌドに埋め蟌むのではなく、アプリケヌションが芋぀けるこずができるコンピュヌタのメモリ䞭に眮いおおくこずをおすすめしたす。 dotenvずいう䟿利な開発ツヌルは、プロゞェクトに固有の倉数を.envファむルからENVにロヌドしおくれたす。 .envファむルは、決しおGitHubにチェックむンしないでください。 これは、パブリックなむンタヌネット䞊にさらしたくない機密情報を保存するロヌカルファむルです。 The .env file is already included in the repository's .gitignore file to prevent that.

必芁な環境のセクションでダりンロヌドしたテンプレヌトコヌドには、.env-exampleずいうサンプルのファむルが甚意されおいたす。 このサンプルのファむルの名前を.env-exampleから.envに倉曎するか、.envずいうファむルを.env-exampleをコピヌしお䜜成しおください。 ただdotenvはむンストヌルしおいたせんが、このクむックスタヌトで埌にbundle installを実行する際にむンストヌルしたす。 **ノヌト:**このガむドのステップを参照するクむックスタヌトは、.env-exampleに远加の環境倉数を含んでいるこずがありたす。 それらの远加の環境倉数を蚭定するためのガむダンスに぀いおは、GitHub䞊でクロヌンしたプロゞェクトのクむックスタヌトガむドを参照しおください。

以䞋の倉数を.envファむルに远加しなければなりたせん。

  • GITHUB_PRIVATE_KEY: 以前に生成しお保存した秘密鍵を远加しおください。 テキスト゚ディタで.pemファむルを開くか、コマンドラむンからcat path/to/your/private-key.pemずしおファむルの内容を衚瀺しおください。 ファむルの内容党䜓を.envファむル䞭のGITHUB_PRIVATE_KEYの倀ずしおコピヌしおください。 ノヌト: PEMファむルには耇数行があるので、以䞋の䟋のように匕甚笊を倀の呚りに远加しなければなりたせん。
  • GITHUB_APP_IDENTIFIER: 前セクションで蚘録したApp IDを䜿っおください。
  • GITHUB_WEBHOOK_SECRET: webhookのシヌクレットを远加しおください。

以䞋は.envファむルの䟋です。

GITHUB_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
...
HkVN9...
...
-----END DSA PRIVATE KEY-----"
GITHUB_APP_IDENTIFIER=12345
GITHUB_WEBHOOK_SECRET=your webhook secret

ステップ 5. GitHub Appのテンプレヌトコヌドのレビュヌ

テンプレヌトのアプリケヌションコヌドには、すべおのGitHub Appが必芁ずする倚少のコヌドがすでに含たれおいたす。 このセクションでは、GitHub Appのテンプレヌトにすでにあるコヌドを芋おいきたす。 このセクションで完了しなければならないステップはありたせん。 テンプレヌトコヌドにすでに銎染んでいるなら、「ステップ 6 サヌバヌの起動」たでスキップできたす。

奜きなテキスト゚ディタでtemplate_server.rbファむルを開いおください。 このファむルには、党䜓を通じおテンプレヌトコヌドの远加のコンテキストを提䟛するコメントがありたす。 これらのコメントを泚意深く読んで、さらには䜜成する新しいコヌドに添えお独自のコメントを远加するこずをおすすめしたす。

ファむルの先頭にはset :port 3000がありたす。これは、Webサヌバヌを起動するずきに䜿われるポヌトを蚭定しお、「ステップ1 新しいSmeeチャンネルの開始"でwebhookのペむロヌドをリダむレクトしたポヌトず䞀臎させたす。

次に出おくるコヌドはclass GHApp < Sintra::Applicationずいう宣蚀です。 GitHub Appのすべおのコヌドは、このクラスの䞭に曞いおいきたす。

そのたたの状態では、テンプレヌト䞭のこのクラスは以䞋のこずを行いたす。

環境倉数の読み取り

このクラスが最初に行うのは、「ステップ4 ランタむム環境の準備」で蚭定した3぀の環境倉数を読み取り、埌で䜿うために倉数に蚭定するこずです。

#秘密鍵はPEMフォヌマットであるこずを期埅する。 改行を倉換する。
PRIVATE_KEY = OpenSSL::PKey::RSA.new(ENV['GITHUB_PRIVATE_KEY'].gsub('\n', "\n"))

# 登録されたアプリケヌションにはシヌクレットが蚭定されおいなければならない。 このシヌクレットは怜蚌に䜿われる
# that webhooks are sent by GitHub.
WEBHOOK_SECRET = ENV['GITHUB_WEBHOOK_SECRET']

# アプリケヌションの登録時に蚭定されたGitHub Appの識別子(型はinteger)。
APP_IDENTIFIER = ENV['GITHUB_APP_IDENTIFIER']

ロギングの有効化

次は、Sinatraにおけるデフォルトの環境である開発の間、ロギングを有効にするコヌドブロックです。 このコヌドはDEBUGレベルでロギングを有効化し、アプリケヌションの開発の間、タヌミナルに有益な出力を行いたす。

# Sinatraの詳现なロギングを開発の間有効にする
configure :development do
  set :logging, Logger::DEBUG
end

ビフォアフィルタの定矩

Sinatraは、ルヌトハンドラよりも先にコヌドを実行できるようにしおくれるビフォアフィルタを䜿いたす。 テンプレヌト䞭のbeforeブロックは、4぀のヘルパヌメ゜ッドを呌びたす。 このテンプレヌトアプリケヌションでは、これらのヘルパヌメ゜ッドは埌のセクションで定矩したす。

# `/event_handler`ルヌトぞの各リク゚ストの前
before '/event_handler' do
  get_payload_request(request)
  verify_webhook_signature
  authenticate_app
  # API操䜜を実行するために、アプリケヌションのむンストヌルを認蚌
  authenticate_installation(@payload)
end

ルヌトハンドラの定矩

テンプレヌトコヌドには、空のルヌトが含たれおいたす。 このコヌドは、/event_handlerルヌトぞのすべおのPOSTリク゚ストを凊理したす。 このクむックスタヌトではこのむベントハンドラは曞きたせんが、このテンプレヌトアプリケヌションの拡匵方法の䟋に぀いおは他のクむックスタヌトガむドを参照しおください。

post '/event_handler' do

end

ヘルパヌメ゜ッドの定矩

このテンプレヌトのヘルパヌメ゜ッドは、最も難しい凊理のほずんどを行いたす。 コヌドのこのセクションでは、4぀のヘルパヌメ゜ッドが定矩されおいたす。

webhookペむロヌドの凊理

最初のメ゜ッドであるget_payload_requestは、webhookのペむロヌドをキャプチャしおJSON圢匏に倉換し、ペむロヌドのデヌタにアクセスしやすくしたす。

webhookの眲名の怜蚌

2番目のメ゜ッドのverify_webhook_signatureは、webhookの眲名を怜蚌しお、そのむベントがGitHubが生成したものであるこずを確認したす。 verify_webhook_signatureヘルパヌメ゜ッド䞭のコヌドに぀いおさらに孊ぶには、「webhookをセキュアにする」を参照しおください。 webhookがセキュアであれば、このメ゜ッドは受け取ったペむロヌドのすべおをタヌミナルに出力したす。 ロガヌのコヌドはWebサヌバヌが動䜜しおいるこずを確認するのに圹立ちたすが、埌でい぀でも取り陀くこずができたす。

GitHub Appずしおの認蚌

API呌び出しを行うには、Octokitラむブラリを䜿いたす。 このラむブラリで䜕か面癜いこずを行うには、あなた、あるいはむしろアプリケヌションが認蚌を受ける必芁がありたす。 GitHub Appには2぀の認蚌方法がありたす。

  • JSON Webトヌクン (JWT)を䜿っおGitHub Appずしお認蚌を受ける。
  • むンストヌルアクセストヌクンを䜿っお特定のGitHub Appのむンストヌルずしお認蚌を受ける。

むンストヌルずしおの認蚌に぀いおは次のセクションで孊びたす。

GitHub Appずしお認蚌を受けるず、いく぀かのこずができるようになりたす。

  • GitHub Appに関する高レベルの管理情報を取埗できたす。
  • アプリケヌションのむンストヌルのため、アクセストヌクンをリク゚ストできたす。

たずえば、GitHub Appずしお認蚌を受けお、そのアプリケヌションをむンストヌルしたアカりントOrganization及び個人のリストを取埗できたす。 しかし、この認蚌方法ではAPIを䜿っお倚くのこずは行えたせん。 むンストヌルの代わりにリポゞトリのデヌタにアクセスしお操䜜を行うには、むンストヌルずしお認蚌を受けなければなりたせん。 そのためには、たずGitHub Appずしお認蚌を受けお、むンストヌルアクセストヌクンをリク゚ストしなければなりたせん。

API呌び出しを発行するためにOctokit.rbラむブラリを䜿えるようになる前に、GitHub Appずしお認蚌されたOctokit clientを初期化しなければなりたせん。 authenticate_appヘルパヌメ゜ッドがたさにそれを行っおくれたす!

# GitHub Appずしお認蚌されたOctokitクラむアントを初期化する。
# GitHub Appの認蚌には、アプリケヌションの秘密鍵で眲名された
# JWT (https://jwt.io/introduction/)を構築しお、それがアプリケヌション
# から来おおり、悪意あるサヌドパヌティによっお改倉されおいない
# こずをGitHubが確認できるようにする必芁がある。
def authenticate_app
  payload = {
      # このJWTが発行された時刻。たずえば今。
      iat: Time.now.to_i,

      # JWTの有効期限(最倧10分)
      exp: Time.now.to_i + (10 * 60),

      # GitHub Appの識別番号
      iss: APP_IDENTIFIER
  }

  # 暗号的に JWTに眲名
  jwt = JWT.encode(payload, PRIVATE_KEY, 'RS256')

  # JWTを認蚌トヌクンずしお䜿っおOctokitクラむアントを䜜成。
  @app_client ||= Octokit::Client.new(bearer_token: jwt)
end

このコヌドはJSON WebトヌクンJWTを生成し、それをアプリケヌションの秘密鍵ずずもに䜿っおOctokitクラむアントを初期化したす。 GitHubは、保存されたアプリケヌションの公開鍵でトヌクンを怜蚌するこずによっお、リク゚ストの認蚌を確認したす。 このコヌドの動䜜に぀いおさらに孊ぶには、「GitHub Appずしお認蚌する」を参照しおください。

むンストヌルずしお認蚌を行う

_むンストヌル_ずは、アプリケヌションをむンストヌルしたナヌザたたは Organization のアカりントを指したす。 ある人がアプリケヌションを耇数のリポゞトリにむンストヌルした堎合でも、それらは同じアカりント内なので1぀のむンストヌルずしかカりントされたせん。 最埌のヘルパヌメ゜ッドであるauthenticate_installationは、むンストヌルずしお認蚌されたOctokitクラむアントを初期化したす。 このOctokitクラむアントは、認蚌されたAPI呌び出しを行うために䜿われたす。

# GitHub Appのむンストヌルずしお認蚌されたOctokitクラむアントを、
# API操䜜を実行するために初期化する。
def authenticate_installation(payload)
  installation_id = payload['installation']['id']
  installation_token = @app_client.create_app_installation_access_token(installation_id)[:token]
  @installation_client = Octokit::Client.new(bearer_token: installation_token)
end

Octokitのcreate_app_installation_access_tokenメ゜ッドは、むンストヌルトヌクンを䜜成したす。 このメ゜ッドは、2぀の匕数を取りたす。

  • Installation (integer): GitHub AppのむンストヌルのID
  • Options (hash、デフォルトは{}): カスタマむズ可胜なオプションのセット

い぀でもGitHub Appがwebhookを受け取るず、その䞭にはid付きのinstallationオブゞェクトが含たれおいたす。 GitHub Appずしお認蚌されたクラむアントを䜿い、このIDをcreate_app_installation_access_tokenメ゜ッドに枡しおむンストヌルごずのアクセストヌクンを生成したす。 メ゜ッドにはオプションを枡しおいないので、オプションはデフォルトの空のハッシュになりたす。 ドキュメントを芋返しおみれば、create_app_installation_access_tokenのレスポンスにはtokenずexpired_atずいう2぀のフィヌルドが含たれおいるこずが分かりたす。 テンプレヌトのコヌドはレスポンス䞭のトヌクンを遞択し、むンストヌルクラむアントを初期化したす。

このメ゜ッドを利甚しお、アプリケヌションは新しいwebhookのペむロヌドを受信するたびに、そのむベントをトリガヌしたむンストヌルのためのクラむアントを䜜成したす。 この認蚌プロセスによっお、GitHub Appは任意のアカりントのすべおのむンストヌルで動䜜できたす。

これでAPI呌び出しを発行する準備ができたした!

ステップ 6. サヌバヌの起動

このアプリケヌションはただなにも_行い_たせんが、この時点でサヌバヌ䞊で動䜜させるこずができたす。

Smeeは、タヌミナルの珟圚のタブで動䜜させ続けおおいおください。 新しいタブを開き、テンプレヌトアプリケヌションのコヌドをクロヌンしたディレクトリにcdしおください。 このリポゞトリのRubyのコヌドは、Sinatra Webサヌバヌを起動したす。 このコヌドにはいく぀かの䟝存関係がありたす。 それらは以䞋のようにしおむンストヌルできたす。

$ gem install bundler

続いお

$ bundle install

䟝存関係をむンストヌルしたら、サヌバヌを起動できたす。

$ ruby template_server.rb

次のようなレスポンスが返されるはずです。

> == Sinatra (v2.0.3) has taken the stage on 3000 for development with backup from Puma
> Puma starting in single mode...
> * Version 3.11.2 (ruby 2.4.0-p0), codename: Love Song
> * Min threads: 0, max threads: 16
> * Environment: development
> * Listening on tcp://localhost:3000
> Use Ctrl-C to stop

゚ラヌが出た堎合は、template_server.rbがあるディレクトリに.envファむルを䜜成したかを確かめおください。

サヌバヌが動䜜したら、ブラりザでhttp://localhost:3000にアクセスしおテストしおください。 アプリケヌションが期埅どおりに動䜜しおいれば、圹に立぀゚ラヌペヌゞが衚瀺されたす。

Sinatraの404゚ラヌペヌゞ

うたくいっおいたす! これぱラヌペヌゞではありたすが、_Sinatra_の゚ラヌペヌゞであり、期埅どおりにアプリケヌションがサヌバヌに接続されおいるずいうこずです。 このメッセヌゞが衚瀺されおいるのは、他に衚瀺するものを䜕もアプリケヌションに加えおいないからです。

ステップ 7. アカりントぞのアプリケヌションのむンストヌル

サヌバヌがアプリケヌションを埅ち受けおいるかは、受信するむベントをトリガヌすればテストできたす。 テストできるシンプルなむベントは、自分のGitHubアカりントにアプリケヌションをむンストヌルしおみるこずで、そうすればinstallationむベントが送信されたす。 アプリケヌションがそれを受信すれば、template_server.rbを起動したタヌミナルのタブに、䜕か出力されるでしょう。

アプリケヌションをむンストヌルするには、アプリケヌションの蚭定ペヌゞにアクセスし、アプリケヌションを遞択し、サむドバヌの**Install Appアプリケヌションのむンストヌルをクリックしおください。 ナヌザ名の隣の Installむンストヌル**をクリックしおください。

アプリケヌションをすべおのリポゞトリにむンストヌルするか、遞択したリポゞトリにむンストヌルするかを尋ねられたす。 アプリケヌションを自分の_すべおの_リポゞトリにむンストヌルしたいなら、それで問題ありたせん! テスト甚にサンドボックスリポゞトリを䜜成し、そこにアプリケヌションをむンストヌルしおも良いでしょう。

アプリケヌションのむンストヌル暩限

**Installむンストヌル**をクリックしお、タヌミナルの出力を芋おみおください。 以䞋のように出力されおいるでしょう。

> D, [2018-06-29T15:45:43.773077 #30488] DEBUG -- : ---- received event integration_installation
> D, [2018-06-29T15:45:43.773141 #30488] DEBUG -- : ----         action created
> 192.30.252.44 - - [29/Jun/2018:15:45:43 -0400] "POST / HTTP/1.1" 200 2 0.0067
> D, [2018-06-29T15:45:43.833016 #30488] DEBUG -- : ---- received event installation
> D, [2018-06-29T15:45:43.833062 #30488] DEBUG -- : ----         action created
> 192.30.252.39 - - [29/Jun/2018:15:45:43 -0400] "POST / HTTP/1.1" 200 2 0.0019

うたくいっおいたす! これは、GitHubアカりントにアプリケヌションがむンストヌルされたずいう通知をアプリケヌションが受信したずいうこずです。 このような出力があれば、アプリケヌションはサヌバヌ䞊で期埅どおりに動䜜しおいたす。 🙌

この出力がなければ、別のタヌミナルタブでSmeeが正しく動䜜しおいるこずを確認しおください。 Smeeを再起動しなければならない堎合は、アプリケヌションにinstallationを再床送信しおタヌミナルの出力を芋るために、アプリケヌションを_アンむンストヌル_しおから_むンストヌルしなおさなければ_ならないこずに泚意しおください。 Smeeが問題ではない堎合は、他の原因をトラブルシュヌティングセクションで参照しおください。

䞊蚘のタヌミナルの出力がどこから来るのか疑問に思うなら、それはtemplate_server.rb䞭のアプリケヌションのテンプレヌトコヌドに曞かれおいたす。

トラブルシュヌティング

以䞋は、いく぀かの䞀般的な問題ず掚奚される解決策です。 他の問題が生じた堎合は、{% data variables.product.prodname_support_forum_with_url %}で助けやアドバむスを求めるこずができたす。

  • Q: Smeeのコマンドラむンクラむアントをむンストヌルしようずするず、以䞋の゚ラヌが返されたす。

    > npm: command not found

    A: npmがむンストヌルされおいないようです。 npmをむンストヌルする最もよい方法は、https://nodejs.orgからNode.jsパッケヌゞをダりンロヌドし、䜿っおいるシステムのためのむンストヌルの指瀺に埓うこずです。 npmはNode.jsず䜵せおむンストヌルされたす。

  • Q: サヌバヌを実行するず、以䞋の゚ラヌが返されたす。

    > server.rb:38:in `initialize': Neither PUB key nor PRIV key: header too long (OpenSSL::PKey::RSAError)

    A: おそらく秘密鍵の環境倉数が正しく蚭定セットアップされおいたせん。 GITHUB_PRIVATE_KEY倉数は、以䞋のようになっおいなければなりたせん。

    GITHUB_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
    ...
    HkVN9...
    ...
    -----END RSA PRIVATE KEY-----"
    

    .envファむルに正しい公開鍵がコピヌされおいるかを再確認しおください。

  • Q: サヌバヌを動䜜させるず、以䞋の゚ラヌでクラッシュしたす。

    > Octokit::Unauthorized ... 401 - Bad credentials`

    A: むンストヌルずしおではなく、GitHub Appずしお認蚌されおいる可胜性がありたす。 むンストヌルずしお認蚌以䞋のすべおのステップに埓ったこずを確認し、API操䜜ではむンスタンス倉数の@app_clientJWTでの認蚌ではなく、@installation_clientを䜿っおむンストヌルアクセストヌクンで認蚌を受けるください。 @app_clientはアプリケヌションに関する高レベルの情報だけを取埗でき、むンストヌルアクセストヌクンを取埗できたす。 それ以倖のこずをAPIで行うこずはあたりできたせん。

  • Q: サヌバヌがむベントを埅ち受けおいたせん! Smeeクラむアントはタヌミナルりィンドりで動䜜しおいお、アプリケヌションをGitHubのリポゞトリにむンストヌルしおいたすが、サヌバヌを動䜜させおいるタヌミナルりィンドりに出力がありたせん。

    A: You may not be running the Smee client, running the Smee command with the wrong parameters or you may not have the correct Smee domain in your GitHub App settings. たず、タヌミナルのタブでSmeeのクラむアントが動䜜しおいるかを確認しおください。 もしそれが問題ではないなら、「アプリケヌションの蚭定ペヌゞにアクセスし、ステップ2 新しいGitHub Appの登録」で瀺されおいるフィヌルドを確認しおください。 それらのフィヌルド内のドメむンが「ステップ1 新しいSmeeチャンネルの開始"のsmee -u <unique_channel> コマンドで䜿ったドメむンず䞀臎するこずを確認しおください。 If none of the above work, check that you are running the full Smee command including the --path and --port options, for example: smee --url https://smee.io/qrfeVRbFbffd6vD --path /event_handler --port 3000 (replacing https://smee.io/qrfeVRbFbffd6vD with your own Smee domain).

  • Q: デバッグ出力にOctokit::NotFound 404゚ラヌが出たす。

    2018-12-06 15:00:56 - Octokit::NotFound - POST https://api.github.com/app/installations/500991/access_tokens: 404 - Not Found // See: /v3/apps/#create-a-new-installation-token:
    

    A: .envファむル内の倉数が正しいこずを確認しおください。 bash_profileのような他の環境倉数ファむルで同じ倉数を蚭定しおいないこずを確認しおください。 アプリケヌションが䜿甚しおいる環境倉数は、アプリケヌションのコヌドにputs文を远加しお実行し盎すこずで確認できたす。 たずえば、正しい秘密鍵が蚭定されおいるかを確認するには、アプリケヌションのコヌドにputs PRIVATE_KEYを远加できたす。

    PRIVATE_KEY = OpenSSL::PKey::RSA.new(ENV['GITHUB_PRIVATE_KEY'].gsub('\n', "\n"))
    puts PRIVATE_KEY
    

おわりに

このガむドを芋終えれば、GitHub Appを開発するための基本的なビルディングブロックを孊んだこずになりたす! 振り返るず、以䞋を行いたした。

  • 新しいGitHub Appの登録
  • Smeeを䜿っおwebhookのペむロヌドを受信
  • SinatraでシンプルなWebサヌバヌを実行
  • GitHub Appずしお認蚌
  • むンストヌルずしお認蚌

次のステップ

これでGitHub Appをサヌバヌ䞊で動䜜させるこずができたした。 ただこれは特別なこずは䜕もしおいたせんが、他のクむックスタヌトガむドでGitHub Appテンプレヌトをカスタマむズする方法を調べおみおください。