あけましておめでとうごさいます。クックパッド株式会社の松尾です。テストエンジニアしています。
先日,私は『アプリ開発の品質底上げ施策をWebhooksでBotが支援する世界』というブログを投稿しました。そのブログでは,モバイルアプリ開発における品質の底上げを行った施策について書きました。そこでは,施策を効率的に実施するために行った,GitHubのWebhookとBotを使いプログラム開発を支援することを話しました。
この記事では,WebhookとBotを組み合わせるという話題を中心にまとめます。事例として,クックパッドにおいて取り組んだ内容を紹介します。最後に,今後はWebhookを中心に自分たちの開発プロセスに沿って様々なサービスを組み合わせられることに触れて,さらには今後の展望として開発環境がWebサービスとして広がることを話します。
全体を通して,Webサービスを使った開発の流れと,連携のためにWebhookを使い自分たちの開発プロセスに沿ってサービスをつなげる方法を知ることができます。
GitHubを利用したプログラム開発
GitHubを利用した開発の広がり
GitHubを利用した開発が広がり,Pull Request(以下,PR)を中心とした開発スタイルを広く見るようになりました。GitHubを使ったソースコードの運用形態としてGitHub Flowがあります。GitHubを使った運用では,開発者はだいたいは以下の流れでmasterに修正を取り込むことが多いです。
GitHubに統合されたサービスによる開発支援
GitHubの広がりに合わせて,GitHubと連携する様々なツールが登場し,同様に広く使われるようになりました。例えば,継続的インテグレーションツールであるTravis CIによるサービスがあります。CIツールであるTravis CIとGitHubを組み合わせることで,以下のような開発プロセスを運用することができます。
ここでは,開発者がPRを出した修正に対してTravis CIがそのPRに対してなんらかの処理を行い,その処理が正常に終了したら開発者がmasterに修正を取り込むことができます。Travis CIが行う処理は,テストコードが用意されているようであればテストを実施させることも,任意のツールへの通知することも可能です。このように,GitHubに統合されたサービスによりプログラム開発が支援されます。
Webhookの広がりと,ツールやサービスの統合
最近,様々なサービスにおいてWebhookによる通知サービスが提供されるようになってきました。以前より,トラックバックやコミットプッシュのように,任意の相手に通知を出すという仕組みは存在していました。その仕組みがHTTPリクエストとして汎用化されたものがWebhookと呼ばれます。GitHubはもちろんのこと,Crashlytics(現在はFabricに統合されている)のような不具合集計サービスにおいても提供されるようになりました。
Webhookを利用することで,先ほどのTravis CIのようにあらかじめ統合されているサービスだけでなく,自分たちでWebhookを受信して処理するWebサーバを用意することで独自の処理連携を実現できます。Web APIも合わせて利用すると,様々なWebサービスを,自分たちの期待する形で統合していくことが可能になってきます。
WebhookとBotを活用した開発支援の事例:クックパッド
『アプリ開発の品質底上げ施策をWebhooksでBotが支援する世界』の事例を紹介します。私たちの開発プロセスにWebhookを契機として処理を行うBotを参加させ,プログラム開発を支援させるという内容です。
Botとは
Botとは,入力に対して人の代わりに作業を行うようプログラムされた処理系の総称です。Botと聞くとWeb crawlerであるGooglebotのような存在を想像する人も多いと思いますが,以降に出てくるBotという言葉は前者の意味で用います。
Botは,単に何らかの入力を契機に処理を実施するだけです。その契機はcronによるプロセスの実行であったり,チャットサービスを介した入力,そして今回着目しているWebhookなど多岐に渡ります。様々な手段でBotへ契機を与えられるため,Botは自分たちの望むサービスやツールをつなぐツールとして活用できます。
モバイル・ファーストへの取り組み
クックパッドでは,2014年に『モバイル・ファースト』への取り組みに力を入れ始めました。これにより,組織的にモバイルアプリやモバイルアプリを使ったサービス開発に力を入れることになりました。これは,モバイル端末を利用してサービスを使用するユーザの増加が背景にあります。
クックパッドの開発者の多くはWebアプリケーション開発に対する知識は豊富でしたが,モバイルアプリ開発に対する知識は一部エンジニアのみが持つ状態でした。モバイル・ファースト以前は,モバイルアプリ開発においてもAndroid・iOS共に数人のエンジニアのみが開発を行う体制をとっていました。モバイル・ファーストの取り組み以降,Webアプリケーションを中心に開発していたエンジニアがモバイルアプリ開発に参加し始め,合わせて10人を超えるエンジニアがモバイルアプリの開発に参加する状態になりました。