AWS API GatewayのバックエンドAPIをLaravel 5x Swagger-PHPで構成するには

Laravel 5で作成したAPIをAWS Elastic Beanstalkにデプロイし、AWS API GatewayのHTTPプロキシのバックエンドとする構成について確認したメモになります。

Swagger-PHPを利用して生成したSwaggerドキュメントをAPI Gatewayにインポートする場合、API Gateway固有の設定をSwaggerドキュメントに追加する必要があります。

ここでは、前の記事「Swagger-PHPについてLaravel 5.2で確認したメモ」で実装したAPIに、API GatewayのSwagger拡張を追加してSwaggerドキュメントを生成しなおしAPI Gatewayにインポートする流れで解説していきます。

システム構成

この記事の目的は、バックエンドのAPIをLaravelで実装した場合に、API Gatewayに統合するにはどんな感じか概要をつかむことです。

LaravelやRailsのような、フレームワークを利用してAPIのデプロイ先としては、AWSでは、マネジメントサービスを利用する場合、ElasticBeanstalkかContainer Serviceが選択肢となるかと思いますが、ここではより構成手順が少ないElastic Beanstalkを選択します。

それを踏まえ、簡単に図にすると以下のようになります。

api-gateway-and-laravel-api-on-elastic-beanstalk
“AWS API GatewayのバックエンドAPIをLaravel 5x Swagger-PHPで構成するには” の続きを読む

Laravel 5プロジェクトをElastic Beanstalkにデプロイ

Laravel 5で作成したWeb APIのswagger.jsonをAWS API Gatewayにインポートして動作を確認するにあたって、Laravel 5 APIの動作環境はElastic Beanstalkで簡単に用意してしまいたいと思い、Laravel 5 プロジェクトをAWS Elastic Beanstalkで動作させる手順について調べてみました。

LaravelをBeanstalkにデプロイする手順については、公式ドキュメント「Elastic Beanstalk への Laravel アプリケーションのデプロイ」にも説明があります。
こちらの内容は、Zipアーカイブを作成してアップロードする手順になっています。
この記事では「Symfony2 アプリケーションを Elastic Beanstalk にデプロイする」を参考に、Gitとebコマンドを使ってデプロイする手順を確認し、その内容をまとめています。

EB CLIのインストール

Elastic Beanstalk コマンドラインインターフェイス(EB CLI)のインストールを参考にインストールします。

pipコマンドが使える環境であれば以下のコマンドでインストールできます。

$ sudo pip install awsebcli

“Laravel 5プロジェクトをElastic Beanstalkにデプロイ” の続きを読む

Laravel Angular Material Starter API認証周りの構成についてのメモ

Laravel Augnlar Material Starterは、フロントエンドにAngular Material、バックエンドAPIにLaravelを利用したシングルページアプリケーションを開発するためのスターターパッケージです。

Laravelは、Laravel ElixirというJavascriptやCSSなどのアセットをビルドするためのgulpタスクがフレームワークに予め含まれていますが、Laravel Angular Material Starterは、AngularJSとAngularJSベースのUIコンポーネントフレームワーク Angular MaterialをビルドするためにLaravel Elixirが予め構成されたLaravelプロジェクトと言った構成になっています。
また、フロントエンドのAngularJSから呼び出されるLaravel側のAPIに対する認証はJWTを利用します。

この記事では、主にフロントエンドのAPIの呼び出しと、バックエンドのJWT生成、検証に利用されるパッケージの構成について調べたことをまとめていきます。

含まれるパッケージ

Laravel Angular Material Starterには、2016.7時点でLaravel 5.2とAngularJS 1.5をベースに以下のパッケージが含まれています。

公式ドキュメントでは「Libraries involved」に載っています。

Composerパッケージ

Laravel側のパッケージは、バックエンドAPIおよび認証をサポートする以下のようなパッケージを含んでいます。

  • dingo/api: Laravel、LumenでRestful APIを管理するミドルウェアを提供するパッケージ
  • tymon/jwt-auth: Laravel、Lumen用のJWTの生成、認証の仕組みを提供するパッケージ
  • barryvdh/laravel-cors: Laravel、Lumen用のCross-Origin Resource Sharingを提供するパッケージ

“Laravel Angular Material Starter API認証周りの構成についてのメモ” の続きを読む

Swagger-PHPについてLaravel 5.2で確認したメモ

SwaggerのPHP実装であるSwagger-PHPの使い方についてLaravelプロジェクトで確認し、Swaggerとはどんなものか調査したメモになります。

Swaggerの全体像については、「RESTful APIの記述標準化を担うSwaggerとは? | NTT Communications Developer Portal」が参考になりました。

Swaggerを利用したアプリケーション開発は、まずSwaggerドキュメントを作成して、サーバーのスタブとクライアントライブラリを生成し、APIロジックとクライアントUIなどを実装していくような流れになるといったところのようです。
Laravelはありませんが、コード生成ツール swagger-codegen には、Laravelの軽量版であるLumen用のサーバースタブは生成可能です。

この記事では、Laravel 5.2プロジェクトでAPIを作成して、Swagger-PHPのアノテーションからSwaggerドキュメントを生成してSwagger-UIでテストするまでを解説します。
つまり、APIの開発とSwaggerドキュメントの開発は平行して行っていく手順を想定しています。

前提条件

この記事内容を試すにあたって必要な準備は、以下のとおりです。

  • Laravelの動作するPHPバージョンがインストール済み
  • Composerがグローバルにインストール済み
  • Laravel 5.2プロジェクトを生成済み

Laravelの実行環境をすぐに作るにはVagrant Homesteadが便利です。
Laravel homesteadを利用したLaravel 5 ローカル開発環境の構築」も参考にしてください。

Laravel プロジェクトに Swagger-PHP をインストール

Swagger-PHPを、ComposerでLaravelプロジェクトに追加します。

$ composer require zircote/swagger-php

“Swagger-PHPについてLaravel 5.2で確認したメモ” の続きを読む

HerokuのPHPアプリからRedis To Goを利用するには

HerokuのPHPアプリケーションから、Redis To Goを利用する手順について確認したメモになります。

前提条件

Redis To GoにはFreeプランがありますが、Heroku Add-onsを利用するには、アカウントのBillingにクレジットカードを登録する必要があります。

アドオンの追加

herokuコマンドで、RedisToGoを追加できます。

$ heroku addons:add redistogo

PhpRedisのインストール

PHPのRedis拡張 phpredis/phpredis をComposerでインストールします。

$ composer require ext-redis

“HerokuのPHPアプリからRedis To Goを利用するには” の続きを読む

Azure ADに登録されているAPI用のアクセストークンをJWTで取得するには

Office 365 Rest APIに対してJWT Bearer Tokenフローで利用するアプリケーションを作るにあたって、まずは、ADAL(Active Directory Authentication Library)を利用したチュートリアルAuthenticating to Azure AD in daemon apps with certificatesを試してみました。

このチュートリアルは、Azure ADの認証シナリオのうち、「クライアント資格情報を使用したサービス間の呼び出し」を実装しています。
このシナリオでは、Azure ADは、OAuthの以下の仕様をサポートします。

ADALを利用すると、設定と秘密鍵を指定するだけで、JWT(Json Web Token)を使ってAPIのアクセストークンを取得するリクエストの実装はライブラリにおまかせできますが、ライブラリが内部でやっていることを図にしてみると以下のようになります。
authenticating-to-azure-ad-with-certificates
(クライアント資格情報を使用したサービス間の呼び出しの図と同じです)
“Azure ADに登録されているAPI用のアクセストークンをJWTで取得するには” の続きを読む

Google Calendar API Client Javaを使ったアプリでサービスアカウントで認証するには

Google Calendar APIの認証はOAuth 2.0を利用しており、Webアプリケーション、クライアント・アプリケーションなどのシナリオをサポートしています。
(参照: Using OAuth 2.0 to Access Google APIs)

Google Appsを利用していて、企業向けのサービスや社内システムとGoogle Calendarを連携したい場合、システム単位でユーザーにアクセス許可を求めずに、ドメイン単位でGoogle Appsへのアクセスを設定したいところです。
このようなサーバー間およびバッチ(デーモン)アプリケーションのシナリオでは、JWT(Json Web Token)でサーバー用のアクセストークンを取得する方法が利用できます(2 Legged OAuthとも言う)。

サーバー間用のアクセストークンは、Google Appsのドメイン全体の委任を有効にしたサービス アカウントを作成し、サービス アカウントの秘密鍵を使って生成した署名を含むJWTをhttps://www.googleapis.com/oauth2/v4/tokenにPOSTすることで取得できます。
(参照: Using OAuth 2.0 for Server to Server Applications)

この記事は、サービス アカウントでGoogle Calendar APIへアクセスするシナリオでのJava API クライアント ライブラリの使い方について説明していきます。
簡単に流れは説明しましたが、クライアント ライブラリを利用するので、JWTの作成およびアクセストークンの取得についてはライブラリにおまかせです。
(参照: Calendar API Client Library for Java)

説明用のコードは、以下のJava API クライアントのサンプルのcalendar-cmdline-sampleを使います。
google/google-api-java-client-samples
このサンプルは、ユーザーに認可を求めるクライアント・アプリケーションです。
まずは元の動作を確認し、その後、サービスアカウント認証へ実装を変更していく流れで説明していきます。
“Google Calendar API Client Javaを使ったアプリでサービスアカウントで認証するには” の続きを読む

Office 365 REST APIを利用したRuby on Railsアプリの作成

Office 365は、Outlook(Exchagne)、OneDriveおよびVideoにREST APIが用意されています。
この記事では、Office 365 REST APIを利用してOutlookのリソースにアクセスする手順について確認した内容をまとめてみました。

API関連の情報ソース

APIを利用を始めるにあたって、以下のようなドキュメントを参考にしました。

REST API全体のリファレンスについては、Office 365 API reference、利用可能なOutlookのリソースについては、Resource reference for the Mail, Calendar, Contacts, and Task REST APIsで確認できます。

日本語版は、Office 365 API リファレンスがあります。

その他の参考情報としては

以下の公式ブログなどが参考になります。

“Office 365 REST APIを利用したRuby on Railsアプリの作成” の続きを読む

WordPress 子テーマに最小限必要なファイルとコード

WordPressに触れるのはときどきなので、小ネタですがメモしておきます。

コテーマの作り方の詳細は、子テーマ – WordPress Codex 日本語版を参照ください。

雛形として、最小限必要なのはディレクトリをwp-content/themesに追加し、style.cssfunctions.phpファイルを追加します。
wp-chile-theme-directories

styles.cssには、Templateに親テンプレートのディレクトリ名を指定し、
あとは、Theme NameのみでOKです。

// style.css
/*
Template: twentysixteen
Theme Name: My TentySixteen
*/

スタイルシートは、自動で読み込まれないので、functions.phpでスタイルシートの読み込みだけ追記します。

// functions.php
<?php
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
}

Microsoft Bot Framework BotConnector BotをSlackから利用する

なぜかBotが最近盛り上がっていますが、先日MSのBuild2016にてMicrosoft Bot Frameworkが発表されました。

日本語の速報記事は、以下が参考になりました。

開発の概要は、公式ブログが参考になります。

Build2016 : Microsoft Bot Framework を使った Bot アプリ作成 | 青い空の向こうへ

Build2016の点では、BotFrameworkは、BotConnectorBotBduilerの2つが利用可能になっており、BotDirectoryはComming soon..のようです。

BotDirectoryは、Slack App Directoryのようなものですが、BotConnectorは、あくまでSlackやSkypeから見るとバックエンドのBotなので、BotDirectoryがユーザー体験としてどのような構成になるのかが気になるところです。

また、将来的に追加される機能としては、自然言語解析ベースの機械学習機能が利用できるようになるようです。
Build 2016 (Part 8) Microsoft Bot Frameworkの後半で紹介されています。なかなかおもしろいです。
この辺りについては、LUISとの統合がすでに用意されています。
LUISについては、ムービーが用意されているのでMicrosoft LUIS tutorialを参照してください。

以下、BotBduilerで作成したBotConnector用のBotをAzureにデプロイしてSlackから利用するところまでの
現在利用可能な機能を試してみたのでまとめてみます。

.NetのBotは公式ドキュメントのチュートリアルに沿って動作確認ができるので、Node.jsのSDKを利用して、Azure App ServiceにデプロイしてBotConnectorに設定、Slackと連携するところまで実装してみます。
“Microsoft Bot Framework BotConnector BotをSlackから利用する” の続きを読む