【社内向け】Google Cloud Modern App Summitに参加してきました Part 2

Google Cloud Modern App Summitに参加してきました！

Google Cloud Modern App SummitとはGoogle Cloudが提供する最新技術の紹介や、先進的な開発スタイルや手法に取り組んでいる企業のセッションのイベントで、場所はGoogle Officeで開催となっており2018年にオープンした渋谷ストリームというビル内にありました。
![IMG_0192.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829642/280a793a-fd4c-50f6-e9fe-f117f40c5391.jpeg)
その中で、以下のセッションがタイトルからして面白かったので共有します。

> 「SmartHR が他社クラウドから移行後、Google Cloud を「使い倒した」成功体験」
> 
> SmartHR 社では最近他のクラウドから Google Cloud にインフラを移行しました。移行直後は、Google Cloud に特有の機能をほとんど使わないどんなクラウドでも同じように運用できるアプリケーションでした。しかし、Google Cloud に移行後は Google Cloud の様々な機能の活用が進んでいます。SmartHR 社が Google Cloud 移行後に、Cloud Run や Cloud Logging などをうまく活用できた事例を紹介したいと思います。
> 
> 引用元: [Modern App Summit](https://cloudonair.withgoogle.com/events/modern-app-summit-23q3)

## Google Cloudとは?

> Google Cloud は、Google が提供しているクラウドコンピューティングサービス（クラウド）の総称です。
> 
> Google Cloud では、AI、コンピューティング、コンテナ、データ分析など、さまざまな分野における業務プロセスを推進するプロダクト（サービス）が用意されています。その数は、軽く100種類以上（2023年2月時点）。Google のデータセンター内で稼働する仮想マシンである「Compute Engine」、ビジネス分析に役立つデータウェアハウス「BigQuery」などは、その一例です。Google 検索、YouTube、Google Map といった人気サービスと同じインフラストラクチャーを利用して、アプリケーション、Webサイト、サービスの構築・運用といった業務を円滑に進められます。
> 
> 引用元: [Google Cloud と Google Cloud Platform（GCP）の違いは？](https://managed.gmocloud.com/knowledge/googlecloud/basicofgooglecloud01.html)

2022年にGCPからGoogle Cloudに名称変更があり、以前のGCPとほとんど同じような意味合いだと思って良いようです。ググってみるとまだまだGCP表記の検索結果が多かったですが。

https://cloud.google.com/blog/ja/topics/developers-practitioners/introducing-new-homepage-google-cloud?hl=ja

## Google Cloud(旧GCP)とは?

> GCPとは、Google Cloud Platform の略で、Googleが提供するクラウドコンピューティングサービスの総称です。GCPは従量課金制のサービスのため、一定の使用量までは無料で使用できます。
> 
> さらに、Google社内で使われているものと同じテクノロジーやインフラを利用できるので、Google検索のプラットフォーム、Youtubeの動画配信プラットフォームに加え、Googleだからこそ作ることのできるデータ解析や機械学習系のサービスなども活用できます。
> 
> また、GCP Consoleには、GCPのプロジェクトとリソースを管理するために使用できるGUI（グラフィカルユーザインターフェース）が用意されています。これを活用することで、サーバーの管理も楽になるでしょう。
> 
> 引用元: [Google Cloud と Google Cloud Platform（GCP）の違いは？](https://udemy.benesse.co.jp/development/system/gcp.html)

## 主なサービス

- **BigQuery**：ビッグデータの解析
- **Google App Engine**：アプリの作成・実行・管理
- **Cloud Machine Learning Engine**：機械学習モデルの構築
- **Compute Engine**：仮想マシンによるインフラ
- **Cloud Storage**：耐久性の高いストレージ
- **Cloud Dataflow**：大容量データの取得・分析
- **Cloud Logging**：ログ管理と分析
- **Cloud Run**：コンテナのサーバーレス実行
など

## メリット
1. **安定したインフラ環境**
   - GCPはトラフィックにすぐ対応するよう設計されているため、急激なアクセス増加などの負荷にも耐えることができます。
   - 様々なクラウド、ストレージが利用可能です。
   - Stackdriver Monitoringにより、追加設定なしでも基本的なアプリのパフォーマンスを視覚的に確認可能です。
   - 自動スケーリングが速い、サーバーのインスタンス起動が速いといったインフラ面でのメリットもあります。

2. **スピードと安定性**
   - GCPのデータセンター内では、Googleが独自に開発したネットワーク機器を利用しており、ネットワークのスピードが速くなっています。
   - 同じグローバルIPアドレスならばマルチ拠点でアクセスできる点も便利です。

3. **AI分野のサービスの充実**
   - TensorFlowやBigQueryを活用し、機械学習などAI分野のサービスを利用できます。
   - Googleによる最先端の機械学習を使ったデータ解析が可能である点は、魅力だといえます。

4. **セキュリティ**
   - GCPでは、第三者認証であるFIPS 140-2を取得しています。データの送受信、保管において、高度なセキュリティが保たれています。

5. **ニーズに合わせた料金設定**
   - GCPは前払いが必要なく、従量課金制のため、秒単位で使った分のみ請求されます。
   - 事前の契約なしで長期間利用割引が自動的に適用されるなど、いくつかの割引も用意されています。
## デメリット
- GCPでは日本語対応が遅れているため、英語の知識がある程度ないと、クラウド技術のドキュメントを読むことも困難になります。英語に苦手意識を持っている場合、開発に使うことは難しいかもしれません。

## GCPとAWS（Amazon Web Services）の違いとは？

| 項目 | GCP | AWS |
| --- | --- | --- |
| プロジェクト | プロジェクトあり | プロジェクトなし |
| コスト | 時間単位 | 分単位 |
| コンピューティング（起動速度） | 40秒以内 | 約1分 |
| 拡張性・柔軟性 | MySQLのみ | Oracleサポートあり |
| サービス数 | サービス数が抑えられている | サービスが増えている |

以下のように、それぞれGCPでもAWSでも同じようなサービスが存在しています。

| GCPサービス | AWSサービス |
| --- | --- |
| BigQuery | Amazon Redshift |
| Google App Engine | AWS Elastic Beanstalk |
| Cloud Machine Learning Engine | Amazon SageMaker |
| Compute Engine | Amazon Elastic Compute Cloud (EC2) |
| Cloud Storage | Amazon Simple Storage Service (S3) |
| Cloud Dataflow | AWS Data Pipeline / Amazon Kinesis |
| Cloud Logging | AWS CloudWatch Logs |
| Cloud Run | AWS Fargate |

結論・・技術選定が大事。

## smartHR株式会社さんの事例

> 雇用契約や入社手続きがペーパーレスで完結。併せて従業員情報も自動で蓄積されます。
さらに年末調整やWeb給与明細、様々な労務手続きにも対応。
外部サービスとの連携も充実しているので、あなたの会社にあった活用ができます。
> 引用元: [SmartHRなら、集まる 蓄まる 活用できる](https://smarthr.jp/smarthr/)

smartHRとは人事労務業務の効率化のアプリ。2022年1月に他社クラウドからGoogle Cloudへ移行したが、理由は使っていたdetabase as a service(クラウドサービスとしてオンラインで提供されるデータベース)がサービス終了してしまうこと、社内で元々Googleアカウントで権限などを管理していたこと、その中でsurveyが行えるなど、データの活用が可能なことからGoogle Cloudの選定に踏み切ったとのことです。

![Screenshot 2023-08-06 at 11.53.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829642/fbe037d1-f260-7359-4602-edd8ec7d8ef4.png)

## アーキテクチャ

年末調整、従業員サーベイなどはsmartHR本体と連携する別アプリとして存在している
→smartHRは複数の独立したWebアプリケーションの集合体となっている。

Google Cloudのプロジェクトで分離して、それぞれのアプリはWebアプリケーション(Cloud Run)とワーカー(App Engine)を持っている。

![Screenshot 2023-07-30 at 23.58.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829642/83bd891c-d167-d118-5ced-cb8fc25416ba.png)

## smartHRのインフラ歴史
![Screenshot 2023-07-30 at 23.57.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829642/d02d0177-09d9-d3ff-caa2-2dce4f4e7bac.png)

Google Cloudへの移行には2年を費やし、RDBの移行が1番辛かったとのことです。
(ダウンタイムで移行したが、プレッシャーが凄かったらしい)

## 共通ログライブラリを作ってCloud Loggingを使い倒した話

Cloud Logging(ログ管理と分析)使用前の状況は以下。
- アプリごとにログ出力先の環境がバラバラ
- 各チームは自分のチームのログしか見れなかった
- アプリを横断してログを追跡していくことができなかった
- 各チームが好きなようにログを出していた
- ログの見やすさのための工夫は、チームごとに実施していた
- 出力内容やフォーマットも統一されていなかった

ログを集約するプロジェクトを用意・共通ログライブラリの導入し、各アプリケーションのログが横断して見れるようにした結果、各チームがログに出力する情報やフォーマットを統一できた。
独立したアプリの集合体のため、アプリAとアプリBの通信の際に同じtraceIdで振ることも可能。
![Screenshot 2023-07-31 at 0.03.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829642/e1358a5e-1192-5fb5-ada9-ece98bf9e864.png)

共通ログライブラリがやっていること
- 構造化ログの出力
- trace の付与
- trace のアプリ間での「引き回し」

## Cloud RunでPRごとの検証環境
Cloud Run・・コンテナのサーバーレス実行

移行まで使用していたHeroku Review Appsの利点
- デザイナー、プロダクトオーナーなどの開発者以外の方に検証中の機能を見てもらいやすい
- 負荷試験や性能検証など共用の環境でやると迷惑がかかることもやりやすい
- 複数人が絡むような大規模なフィーチャーブランチの結合試験がやりやすい

Heroku Review Apps を使い続ける場合の問題点
- Google CloudとHerokuのどちらにもデプロイ可能な状態を保つ必要があり、デプロイの構成ファイルの保守コストが大きくなる
→herokuで動くことを担保しないといけないが、Cloud Spanner(フルマネージドのリレーショナルデータベースサービス)などのGoogle Cloud固有のサービスの利用が難しくなる

↓クラウドロードバランシングでリクエストを割り振れる
![Screenshot 2023-07-31 at 0.13.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829642/80d53d72-4511-ecff-9002-fe81cbc9de20.png)

使い捨ての検証環境を作ることができる機能が欲しかったが、PRごとにリビジョンを作れるため対応できた。(リクエストがあった時だけ立ち上がり、デプロイも早い)

## まとめ
AWSもGCPもAzureもそれぞれ良いところがあるため、導入にはそれぞれのケースを予算を含め調査した上で技術選定を行うことが大切。天下のGoogleということもあって今後も目が離せません。

- アーカイブ動画
https://www.youtube.com/watch?v=LoXQWraEPEQ&t=2645s