スタッフブログ

STAFF BLOG

やってみた

2021.04.30

GCPのPHP on Cloud Functionsを触ってみた

Web開発担当の木下です。

さて今回は、先日発表されたGCPの新機能「PHP on Cloud Functions」についてです。

Cloud Functionsとは

Googleの説明によれば、「サーバー管理なしでコードを実行するためのスケーラブルな従量課金制 Functions as a Service(FaaS)」とあります。
サーバーレスコンピューティングの1種で、PythonやGoなどで記述されたコードをアップロードするだけでGoogleがフルマネージドで実行してくれるサービスのことです。
自動でスケールし、実行した時間分(100ミリ秒単位)で課金されるため、サーバーのスペックを気にする必要がなく、かつほとんどの場合自分でサーバーをホスティングするよりコストを抑えられる、というメリットがあります。

AWSでいうとLambdaがこれに近いですが、Lambdaの場合はHTTPで公開しようとするとAPI Gateway等と組み合わせる必要があるのに対し、Cloud Functionsの場合はアップロードするだけでHTTPエンドポイントまで発行されるので、よりシンプルにAPIを作成できます。

これまでCloud FunctionsもLambdaもPHPをサポートしていませんでした(ランタイムをねじ込むという方法はありました)が、4月24日にGoogleがCloud FucntionsでのPHPサポートをプレビューとして開始することを発表しました

これまではPythonかNode.jsで書いてきましたが、使い慣れたPHPが使えるようになるのであれば、今後はぜひこちらで書いていきたいところです。

さっそく触ってみる

DB(Firestore)と組み合わせて、現在位置をリクエストすると近くにあるお気に入りのラーメン屋さんの位置をJSONでレスポンスするAPIを作ってみましょう。

構成はこんな感じです:
Screenshot from 2021-04-30 04-38-35

さっそくFirestoreにコレクションを作成し、お気に入りのラーメン屋さんの情報を入れていきます。
Screenshot from 2021-04-30 04-42-33

Cloud Functionsで関数を作成し、ソースを書いていきます。
Screenshot from 2021-04-30 04-44-42
composer.jsonを置いておけばライブラリをインストールでき、php.iniを置いておけば環境設定を変えられるようです。便利ですね。

関数を作成してHTTPエンドポイントが発行されたら、Postmanでたたいてみましょう。
Screenshot from 2021-04-30 04-48-32
リクエストした位置情報から半径5km以内にあるラーメン屋さんの情報がJSONで返却されました!

ソースはGitHubで公開しています

非常に便利なのですが、おそらくCloud FunctionsでAPIを作る時の最大の悩みどころが、DBをどうするか?だと思います。
RDBであればリッチな検索クエリを組める一方、サーバーレスという訳にはなかなかいかないため、結局RDBはずっとホスティングしておく必要があるのと、アクセスが集中した際にコネクション数が大変なことになるためコネクションプール等を噛ませておく必要があると考えると、サーバーレスのメリットを活かすには構成をよく考える必要があります。
一方でNoSQLであればサーバーレスのメリットを存分に活かせますが、RDBほど柔軟な検索クエリに対応できないというデメリットが発生します。今回はFirestoreを使いましたが、複数のインデックスに対して不等号条件を付けられないため、ある程度データを絞り込んでFirestoreから取得し、Cloud Functions側でさらに絞り込むという流れになります。件数が増えたりページネーションが欲しくなったりすると、これはこれでしんどくなるため、使いどころを考える必要があります。
結局はRDBとNoSQLを上手に組み合わせる形になるのでは、と思います。

サーバーレスの需要はますます高まっていくはずです

スマホアプリは瞬間風速的にアクティブユーザー数が増えることがよくあるため、使いどころを押さえればサーバーレスの採用はコスト面でもパフォーマンス面でも非常に大きなメリットがあります。
イーディーエーにはユーザー数が数十万・数百万人というアプリの開発実績が豊富にありますので、お気軽にお問い合わせください!

BACK

お問合せ

イーディーエーに興味をお持ちいただいて
ありがとうございます!
スマホアプリに関するご相談、
お見積りや弊社へのご質問など、
お気軽にお問い合わせください。
担当者より折り返しご連絡させていただきます。

    お名前必須
    会社名
    メールアドレス必須
    電話番号必須
    お問合わせ種別必須
    お問合わせ内容必須

    アンケートにご協力ください。
    弊社サイトへはどのようにしてアクセスされましたか?

    個人情報のお取扱いに関する同意事項

    1.事業者の氏名又は名称

    株式会社イーディーエー

    2.個人情報保護管理者の氏名又は職名、所属及び連絡先

    個人情報保護管理者 小宮 保人
    Mail:[email protected]

    3.取得した個人情報の利用目的

    当フォームで取得した個人情報は、お問い合わせに関する回答のために利用し、目的外利用はいたしません。

    4.弊社が取得した個人情報の第三者への委託、提供について

    弊社は、ご本人に関する情報をご本人の同意なしに第三者に委託または提供することはありません。

    5.個人情報保護のための安全管理

    弊社は、ご本人の個人情報を保護するための規程類を定め、従業者全員に周知・徹底と啓発・教育を図るとともに、その遵守状況の監査を定期的に実施いたします。
    また、ご本人の個人情報を保護するために必要な安全管理措置の維持・向上に努めてまいります。

    6.個人情報の開示・訂正・利用停止等の手続

    ご本人が、弊社が保有するご自身の個人情報の、利用目的の通知、開示、内容の訂正、追加又は削除、利用の停止、消去及び第三者への提供の停止を求める場合には、下記に連絡を頂くことで、対応致します。

    株式会社イーディーエー 個人情報お問合せ窓口
    〒106-0032 東京都港区六本木7丁目14番23 ラウンドクロス六本木4F
    TEL:03-5422-7524 FAX:03-5422-7534
    Mail:[email protected]

    7.ご提供いただく情報の任意性

    個人情報のご提供は任意ですが、同意を頂けない場合には、第3項にあります利用目的が達成できない事をご了承いただくこととなります。

    8.弊社Webサイトの運営について

    弊社サイトでは、ご本人が弊社Webサイトを再度訪問されたときなどに、より便利に閲覧して頂けるよう「クッキー(Cookie)」という技術を使用することがあります。これは、ご本人のコンピュータが弊社Webサイトのどのページに訪れたかを記録しますが、ご本人が弊社Webサイトにおいてご自身の個人情報を入力されない限りご本人ご自身を特定、識別することはできません。
    クッキーの使用を希望されない場合は、ご本人のブラウザの設定を変更することにより、クッキーの使用を拒否することができます。その場合、一部または全部のサービスがご利用できなくなることがあります。