Slide 1

Slide 1 text

PHP + GitHub + Azure Functions = ?

Slide 2

Slide 2 text

自己紹介 株式会社Fusic マネージャー 技術開発部 基盤ユニット 櫻川 幸三 https://github.com/kozo https://github.com/fusic http://qiita.com/kozo http://qiita.com/organizations/fusic http://fusic-kiban.hatenablog.com/ 2

Slide 3

Slide 3 text

3 PHP?GitHub?Azure? 何をしたいの?

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

5 で、どうやって作るの?

Slide 6

Slide 6 text

6 実はものすごく簡単

Slide 7

Slide 7 text

作り方の流れ 1. GitHubアプリケーションの設定 2. OAuth認証 3. WebHookの設定 4. GitHubAPIの実行 7

Slide 8

Slide 8 text

GitHubアプリケーションの設定 8 [GitHub] - [Settings] - [OAuth applications] - [Register a new application]

Slide 9

Slide 9 text

GitHubアプリケーションの設定 9 ※Client ID、Client Secretを控えておく

Slide 10

Slide 10 text

作り方の流れ 1. GitHubアプリケーションの設定 2. OAuth認証 3. WebHookの設定 4. GitHubAPIの実行 10

Slide 11

Slide 11 text

2. OAuth認証1 11 https://github.com/login/oauth/authorize? client_id={Client ID}&scope=repo,admin:repo_hook - client_id : アプリケーションの作成をしたときに取得したもの - scope : 取得したい権限(複数ある場合はカンマで区切る) - repo : ソースコードへのread,write、ステータス、コメント等 - admin:repo_hook : read,write,delete等のHook用 ※scopeは最低限を設定するようにする

Slide 12

Slide 12 text

2. OAuth認証1 12 「Authorize application」ボタンをクリックすることで、 アプリ作成したときに入力した「callback url」に戻ってくる。

Slide 13

Slide 13 text

2. OAuth認証2 13 http://example.com/oauths/callback?code={コード} - code : GitHubからcallback URLにコードが戻ってくる

Slide 14

Slide 14 text

2. OAuth認証3 14 https://github.com/login/oauth/access_token? code={コード}& client_id={Client ID}& client_secret={Client Secret} - code : GitHubからcallback URLに戻ってきたコード - client_id : GitHubのアプリ作成で控えておいたClinet ID - client_secret : GitHubのアプリ作成で控えておいたClient Secret URLを作成したら、file_get_contents等を利用してURLをたたくと、 AccessTokenが取得できる。 AccessTokenを利用して、GitHub APIを実行します。

Slide 15

Slide 15 text

15 これで準備完了

Slide 16

Slide 16 text

3. Web Hookの設定 16 /repos/{:owner}/{:repo}/hooks $data = [ 'name' => 'web', "active" => true, "events" => [ "push", "pull_request" ], "config" => [ "url" => "https://gitfusic.azurewebsites.net/api/hook2", "content_type" => "json" ] ]; APIを実行して、Hookの設定を行う。 ※プルリク作成、pushしたタイミングでHookする等 JSON化してPOSTする - events : hookしたい処理 - url : hookしたときに実行されたいURL

Slide 17

Slide 17 text

3. GitHub APIの実行 17 /repos/{:owner}/{:repo}/statuses/{:sha} $data = [ 'state' => 'success', "target_url" => "https://example.com/build/status", "description" => "いいコード書いたね!", "context" => "LGTM!!" ]; APIを実行することで、ステータスを切り替える。 JSON化してPOSTする - status : “pending”,“success”,“error”,“failure”のいづれかを指定 - sha : hookしたときにGitHubからPOSTで飛んでくる

Slide 18

Slide 18 text

3. その他API 18 /repos/{:owner}/{:repo}/issues/{:num}/comments - プルリクにコメントをつける /repos/{:owner}/{:repo}/issues/{:num}/assignees -プルリクのアサインを追加する /repos/{:owner}/{:repo}/labels /repos/{:owner}/{:repo}/issues/{:num}/labels - ラベルの作成・追加する

Slide 19

Slide 19 text

3. API注意点 19 - User-Agentにアプリケーションの名前を設定する - ヘッダーにAccessTokenを設定する

Slide 20

Slide 20 text

他にも色々できそう - リポジトリを作成したときに、自動でラベルを 作成しておく。 - プルリク作ったタイミングで、アサインやラベ ルを自動で登録しておく。 - いいね!の数をランキングする 20

Slide 21

Slide 21 text

21 で、Azureはどうなん?

Slide 22

Slide 22 text

24 URLを作る ファイルを修正 ファイルをアップ

Slide 23

Slide 23 text

Azure Functions注意点 - echo等標準出力はすべてログに出力される - レスポンスを返すには以下を利用する - file_put_contents(getenv('res'), json_encode($resList)); - リクエストを受け取るには以下を利用する - $post = file_get_contents(getenv('req')); - $_POST等は利用できない 25

Slide 24

Slide 24 text

ご清聴ありがとうございました Fusicはテクノロジーが 好きなエンジニアを募集しています https://fusic.github.io 26