SINKCAPITAL
SINKCAPITAL
employment company Blog
GCP上のWebログデータ処理パイプライン:生データ処理から機械学習まで
謝暁鋒(シャギョウホウ)
2023-03-01 謝暁鋒(シャギョウホウ)
tech

目次

  1. 背景
  2. アーキテクチャ
  3. 実装手順
    1. 事前準備
    2. インフラ:Terraform
    3. ダミーデータ生成:Dataproc+Spark
    4. Rawデータ処理:Dataproc+Spark
    5. 機械学習モデル構築:VertexAI+Docker
    6. パイプライン構築:Composer+Python+Slack
  4. まとめ&自己紹介

背景

今回はWebのログデータの前処理&クリーニングから、データウェアハウスにデータを蓄積し、機械学習に活用までの一連流れをGoogleCloud(以下、GCPと呼ぶ)上で実現したいと思います。不定期的にGoogleCloudStorage(以下、GCSと呼ぶ)にアップロードされているRawデータに対して、GCP上のComposer(ApacheAirflow)でパイプラインを構築して毎日0時から下記の処理を実行します。

  1. 先ずはある程度の整形&重複排除後データウェアハウスとしてのBigqueryにアウトプットします。
  2. その後自動的にvertexAIにトレーニングジョブを投げて、機械学習モデルの学習を行い、更新されたモデルをGCSバケットに保存します。
  3. 各段階の結果をslackに通知を投稿します。

要件として、GCSバケット上でのWebログデータの保存期間が半年です。 クラウド上のインフラ部分ではTerraformで管理し、プログラミング言語についてはデータ処理の部分はScala、パイプライン(DAG)および機械学習の部分はPythonです。

アーキテクチャ

input_to_machine_learning_01

Terraform

Terraformの詳しい紹介については割愛させていただきます。簡単的言うとIac(Infrastructure as Code)ツールで、クラウド上のインフラをコードにより構成することで、terraform applyおよびterraform destroyコマンドで簡単にインフラリソースの作成・削除できます。GCPのCloudShellではTerraformが入っている状態なので、そのままインストールしなくても利用できると思います。

パイプライン構築&制御:CloudComposer

Composer(ApacheAirflow)のメリットとしては、数多くのoperatorがあり、定時実行などの制御も便利し、かつPythonでDAG(有向非巡回グラフ/Directed Acyclic Graph)を作成できます。

生データのクリーニング:Dataproc

分散処理フレームワークSparkとの相性がよいです。Scalaの方に慣れていて、かつ今回はバッチ処理なのでDataflowではなくDataprocを選びました。

データウェアハウス:Bigquery

元々データウェアハウスとして利用されています。

モデルトレーニング:VertexAI

機械学習のシーンとしては、データサイエンティストまたは機械学習エンジニアが作成したpythonファイルをdockerにしてリポジトリに格納してくれます。パイプラインは最新のdocker imageを引っ張られてトレーニングだけを行い、学習済みのモデルをGCSバケットに保存します。dockerの中身に対しては関心を持っていなく、トレーニングジョブだけを実行しよう時は、vertexAIのトレーニングAPIを使用するのは便利だと思います。

通知:Slack

利用中のメインオンラインチャットツールです。

実装手順

事前準備

  • GCPのプロジェクトが作成済み
  • 各APIが有効になっている(概ね下記のAPIが利用予定です)
    • Cloud Logging API
    • Compute Engine API
    • Cloud Monitoring API
    • IAM Service Account Credentials API
    • Cloud Composer API
    • Cloud Dataproc API
    • Cloud Build API
    • Artifact Registry API
    • Cloud Pub/Sub API
  • 権限周りの設定が整っている
    • 今回は開発環境なので、サービスアカウントとしてのCompute Engine default service accountにプロジェクトの編集者権限を付けると多分大丈夫だと思いますが、生産環境では厳密な権限管理したほうがいいですね。特に注意点としてComposerV2の立ち上げに対してサービスアカウントに手動で権限付与が必要となります。参考:ステップ 3. Cloud Composer サービス アカウントに必要な権限を付与する
  • 言語の開発環境
    • 言語のインストールなど開発環境の備えについては割愛させていただきます。バージョンは下記のGitHubまでご覧いただけると幸いです。

インフラ:Terraform

CloudShellのエディタを開き、フォルダ構成を下記のように設定します。

input_to_machine_learning_02

他のリソースを作成する前に、先に必要なGCSバケットを作成します。

下記のコマンドを実行してエラーがあるかどうかを確認

cd ~/Terraform/gcs_bucket/
terraform init
terraform plan

エラーが表示されないであれば下記のコマンドで構築開始します。 ※バケットの名前はご変更ください。

terraform apply

上記にあるバケットが作成され、GCSの画面では確認できます。

input_to_machine_learning_03

DataprocClusterとBigquery連携するためにはbigquery connectorが必要なので、下記のshellscriptを上記作成したバケットにコピーします。

gsutil cp gs://goog-dataproc-initialization-actions-us-east1/connectors/connectors.sh gs://sinkcapital-spark-dependencies-us-east1/

参考:GoogleCloudDataproc/spark-bigquery-connector
また、ダミーデータ格納用のフォルダ weblog をバケット user-log-data-us-east1 に作成します。

input_to_machine_learning_04

ここまでGCS方の準備が出来ました。続いて他のリソースも構築していこうと思います。 .tfファイルの内容は下記のように記載されています。

※Dataprocクラスター作成時の注意点として、イメージのバージョンによりBigqueryとの連携がエラーが発生するかもしれませんので、今回ではバージョンを指定しました。

input_to_machine_learning_05

各モジュールのものを作成します。 ./main.tf

cd ~/Terraform/
terraform plan
terraform apply

同じく上記のコマンドを実行し、必要なサービスを構成しました。 すべてのリソースを作成完了するまで少々時間がかかります。

input_to_machine_learning_06

useragent_os_infoのデータが手動でCSVファイルを作成しまして、Bigqueryにアップロードします。 useragent_os_info.csv

input_to_machine_learning_07
input_to_machine_learning_08
input_to_machine_learning_08

ダミーデータ生成:Dataproc+Spark

本物のデータを使うのはNGのため、先にダミーデータを作成します。 毎日0時まで約24時間分、5500万行のデータがGCSバケットに格納されています。

  • データフォマード:.json.gz
  • データスキーマ:(一部抜粋)
    • AccessTime: timestamp
    • RecordID: String
    • RemoteAddr: String
    • IpAddrName: String
    • UserAgent:String
    • Referrer: String
    • SearchWord: String
    • Page: String
    • Other: String(リスト構成:"都道府県(出身地)","職業","性別","生年月日(1993-12-05)","flag1","flag2","flag3","その他1",...)

Sparkで上記スキーマのダミーデータを生成します。

mvn package コマンドにより生成された SNAPSHOT.jar をGCSバケット(自分の場合は gs://sinkcapital-spark-dependencies-us-east1/ )にアップロードし、下記のコマンドをCloudShellに実行し、spark jobをdataprocのclusterにサミットします。

gcloud dataproc jobs submit spark \
    --cluster=spark-scala-job \
    --class=util.mockData \
    --jars=gs://sinkcapital-spark-dependencies-us-east1/spark_site-data-analysis_inGCP-1.0-SNAPSHOT.jar \
    --region=us-east1

処理を完了後バケットにデータが確認できます。

input_to_machine_learning_10
input_to_machine_learning_11

作成されたデータのイメージ:weblog_user_log_1.json.gz

{"recordID":"ada95948.88db","remoteIP":"162.49.220.203","userAgent":"Mozilla/5.0 (iPhone12,1; U; CPU iPhone OS 13_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/15E148 Safari/602.1","IpAddress":"Kumamoto","referer":"","access_time":"2023-02-07 15:14:58","page_id":"https://example/?s=nogizaka&paged=21","search_word":"","other":",,,2001-11-09,,,,"}

Rawデータ処理:Dataproc+Spark

下記のデータクリーニングを行います:

  1. AccessTime:StringからTimeStampに変換
  2. RecordID:削除
  3. RemoteAddr:保留、group by用のkey、ユーザIDとして使用
    • →ユーザでの完全識別はやや無理なので、同じIP+OSで一人のユーザとして認定します。
  4. IpAddrName:保留
  5. UserAgent:OS情報だけ抽出、useragent_os_info対照表(Bigquery上にあるマスターテーブル:useragent_os_info)に参照して結合
  6. Referrer:保留
  7. SearchWord:保留
  8. Other:展開、テーブル2として作成
  9. Page:pageIDだけ抽出
  10. 重複排除:約5500万行→重複排除後約5000万行残ります
  11. Bigqueryへの書き込み:テーブル1>>UserInfo、テーブル2>>UserLog

処理用のscala classがこちらになります。
sparkETL.scala
Bigqueryからマスターデータを読み込み、ブロードキャスト変数に変換

input_to_machine_learning_12

開発環境の処理のため、フォルダweblogのデータをすべて読み込んで実行する形になっていますが、生産環境ではweblog_yyyymmddのネーミング形式で当日分データを絞ります。

input_to_machine_learning_13

その他についてはコードコメントまでご確認いただければ幸いです。 mvn package コマンドにより先の SNAPSHOT.jar を更新して、GCSバケットに上書きアップロードします。 実際の処理はパイプラインでまとめて実行しようと思います。

機械学習モデル構築:VertexAI+Docker

最近ではあまり機械学習を触っていないので、一番簡単な構成で、prophetの将来予測モデルを作成していきます。 (元々バケットに作成されたモデルが存在済みで、それを更新する形です。)

  • モデル:prophet.py
    • Bigqueryからデータを読み込むことがありますので、適当な権限が必要です。
  • ライブラリ:requirements.txt (実際にそこまでパッケージが必要ないです。)
    • VertexAI上にモデルをPoCしてからコンテナ化されるため、その際に必要ないパッケージもつけられています。
  • dockerファイル:Dockerfile
    • Googleのオフィシャルイメージを利用して、パッケージをインストール後モデルの実行をエントリーポイントとして指定します。
input_to_machine_learning_14

modelフォルダの下で、Artifact Registryにdockerファイルをpushするコマンドを実行します。

input_to_machine_learning_15
gcloud builds submit --tag us-east1-docker.pkg.dev/sinkcapital-002/model/prophet ./
input_to_machine_learning_16

パイプライン構築:Composer+Python+Slack

ComposerのDAGの構成はこちらになります。

  • dag_base.py:ベースクラス.pyから様々なDAG設定を整えています。
  • dag.py
  • config.json:パラメータはAirflow Variablesから読み込むことにします。
input_to_machine_learning_17

その中、slackへの通知機能では、slackのwebhook_urlを取得しなければならないです。取得の手順についてはgoogle先生まで。取得後AirflowUIでAdmin-ConnectionsにBaseHookを追加します。

input_to_machine_learning_18

DAGファイルをこちらのGCSにあるDAGフォルダにアップロードします。

input_to_machine_learning_19

Airflow上でDAGを確認できます。

input_to_machine_learning_20

開発環境では定時実行を無効に設定していますが、生産環境中では毎日0時で実行します。 右にあるトリガーを押して「Trigger DAG」でDAGを実行してみましょう。途中にもしく権限エラーが出てきたらGCPのIAM画面から権限付与していただければ特に大丈夫と思います。
無事に実行完了後:

input_to_machine_learning_21

Slackに投げた内容:

input_to_machine_learning_22

実行結果は各サービスのところで確認できます。
Bigquery: UserInfo

input_to_machine_learning_23

Bigquery: UserLog

input_to_machine_learning_24
input_to_machine_learning_25

GCSバケット上のモデルファイル

まとめ

 今回はデータエンジニアの角度から、GCSに格納されたボリュームがある生ログデータに対して、一連処理の流れを紹介・実装させていただきました。 増々バッチ処理ではなくストリーミング処理の方が多くなると感じました。その際に解決策としては、

  • 現在のアーキテクチャから、CloudFunctionsを追加して、GCSバケットトリガーしてパイプライン処理を起動する。
  • ComposerではなくVertexAIのパイプライン(dataproc->dataflow)を作成する。

などを考えております。 長文になってしまいましたが、最後までお付き合いいただきありがとうございました。

自己紹介

 中国出身、名古屋大学大学院経済学研究科産業経営システム卒業、謝暁鋒(シャギョウホウ)と申します。自分はHRT:謙虚(Humility)、尊敬(Respect)、信頼(Trust)という原則を従っております。

  • 謙虚:自分が全知全能ではなく、むしろ失敗が多く、常に自分を改善していこう。
  • 尊敬:一緒に働く人に対して、1人の人間として扱い、その能力や功績を高く評価しよう。
  • 信頼:自分以外の人は有能であり、正しいことをすると信じ、そして仕事を任せよう。

現職ではデータエンジニアとして、主に①全社のデータガバナンス、データウェアハウスのメンテ、②データ蓄積ためのパイプライン構築・作成、③機械学習向け、クラウド上の大規模分析環境構築。前職は AI&データ分析チームのデータサイエンティストとして様々な案件を参加しました。

SinkCapitalではデータに関する支援を行っています

弊社はスペシャリスト人材が多く在籍するデータ組織です。 データ分析や分析基盤の設計などでお困りの方がいらっしゃれば、 まずは無料で、こちらから各分野のスペシャリストに直接相談出来ます。

Azure DevOps上でterraformを用いたAzureのIaC管理方法
櫻井 裕司
2024-03-23 櫻井 裕司
tech
企業内データを参照するChatGPTによる社内Q&Aシステムを構築または利用する際のデータ管理について特に注意すべき観点を整理します。特にAzureを利用することを前提にシステムを構築する際のポイントも併せて紹介します。
ChatGPTを用いた企業内システム構築におけるデータ管理の心得
サカモト
2024-02-07 サカモト
tech
企業内データを参照するChatGPTによる社内Q&Aシステムを構築または利用する際のデータ管理について特に注意すべき観点を整理します。特にAzureを利用することを前提にシステムを構築する際のポイントも併せて紹介します。
BIツール機能比較〜Tableau VS Looker Studio〜
髙津 未紗希
2023-11-04 髙津 未紗希
tech
近年ではBIツールの需要が高まると同時に様々なBIツールが増えていますが、その中でもTableauとLooker Studioは利用者の多い主要ツールとなっています。そこで今回はTableauとLooker Studioを機能別に比較します。
Terraform Cloudを利用した、CI/CD戦略と最適なterraformディレクトリについて考えてみた。
松戸 誠人
2023-04-20 松戸 誠人
tech
terraformリソースとクラウドへの適応は様々な手段がある。Actionsでクラウドにapplyされるなど、その中でも管理しやすいと考える、Terraform Cloudを利用したCI/CD及びterraformのディレクトリ設計及び、ブランチ戦略について紹介する。
TerraformとGitHub Actions(CI/CD)を用いたGitHub repositoryの管理
井上 聖士
2023-04-14 井上 聖士
tech
今回は、TerraformのCI/CDをGitHub Actionsを利用して構築する方法についてご紹介します。Terraformを使ってGitHubのリポジトリを作成し、GitHub Actionsを使ってCI/CDを自動化する方法を実際の手順とともに解説します。この記事を読むことで、TerraformとGitHub Actionsを使った開発の流れを学習することができます.最終的には、以下の画像のように、GitHub上で管理されるリポジトリを作成することができます。
GitHub Actionsを用いてReactのサイトをGitHub Pagesに公開する方法
井上 聖士
2023-04-13 井上 聖士
tech
今回はReactを使用したWebサイトの構築から、GitHub Actionsを利用した自動化ビルドやデプロイ、そしてGitHub Pagesでの公開方法まで、一連の流れを紹介します。この記事を読むことで、Reactを使用してWebサイトを作成する方法や、GitHub ActionsによるCI/CDの構築方法を学ぶことができます。最終的には、以下のようなWebサイトをGitHub Pages上で公開することができます。
【事例紹介】クックビズ株式会社様の分析環境の新規構築をお手伝いさせていただきました
櫻井 裕司
2023-03-15 櫻井 裕司
tech case
フード関連業に特化した有料職業紹介事業などを提供するクックビズ株式会社様は、15周年を迎え、新コーポレートアイデンティティを制定など大きな変革を行っていました。本体機能とともに力をいれたのが分析環境の刷新であり、今後会社をデータから支える分析環境づくりの方法を模索されており、弊社ではデータ分析環境構築のお手伝いをさせていただきました。今回、弊社はこれらの課題に対してSinkCapitalのサポートを依頼してくださったデータチームの上岡さん・角田さん・宮川さんに導入結果や使用感について伺いました。
Pythonの因果分析ライブラリCausalNexの紹介
田中
2023-03-07 田中
tech
ベイジアンネットワークは、ディープラーニング(深層学習)等とは違い変数間の因果関係を捉える事が出来るため、病気の原因分析、気象予測、マーケティングなどで活用されています。今回は、Pythonでのベイジアンネットワークを用いた因果分析について紹介します。
世界各国で利用されるCRMツール、Hubspotを既存の自社サイトに対して導入してみました。
櫻井 裕司
2023-01-23 櫻井 裕司
tech
世界各国で利用されるマーケティングプラットフォームツールであるHubspotを弊社の自社サイトに導入してみました。マーケティング、営業、カスタマーサービスなど様々なサービスがありますが、今回は主にサイト上でのリード獲得部分の導入について説明ささせていただければと思います。
海外で有名なデータ統合Saasプロダクトであるfivetranを利用してみました
櫻井 裕司
2023-01-12 櫻井 裕司
tech
海外で有名なデータ統合Saasプロダクトであるfivetranを利用してデータ連携をしてみました。日本では類似のサービスとしてtroccoがありますが、troccoとの違いも整理していければと思っています。
【事例紹介】freee株式会社のデータ分析業務をお手伝いさせていただきました
櫻井 裕司
2022-12-28 櫻井 裕司
tech case
人事労務・会計などを含むクラウドERPを提供するfreee株式会社(以下、freee)は、既存事業の伸びに加えて受発注やタスク管理など新規領域開拓も加わり成長を続けています。それに伴いデータ分析環境の保守管理や、データ利用者からの問い合わせ対応に取られる時間が増えてしまい、分析業務に当てる時間が圧迫されていました。今回、これらの課題に対してSinkCapitalのサポートを依頼してくださったAnalyticsチームの鎌田さん・福田さん・鈴木さんに導入結果や今後の見通しについて伺いました。
Pipedrive Web Formsでutmを取得する方法
丸山 慎也
2022-12-07 丸山 慎也
tech
Pipedrive には、ウェブフォーム(Pipedrive Web Forms) という機能があります。今回はこの Pipedrive Web Forms の送信時に、utmを取得する方法についてまとめました。
データ周りで話題のdbt(data build tool)をBigQueryを使ってみました
櫻井 裕司
2022-12-05 櫻井 裕司
tech
ETL・ELTのLoad部分を担うオープンソースサービスであるdbtを使ってみて、既存のサービスとの比較を行いました。既存のサービスにない多くの特徴を持っていますので、もし気になった方はぜひ見ていただければと思います。
【事例紹介】IVRy様の分析基盤データパイプラインの設計・開発をお手伝いさせていただきました
櫻井 裕司
2022-11-23 櫻井 裕司
tech case
電話自動応答サービスを展開されているIVRy様に対し、弊社でデータパイプライン構築のお手伝いさせていただきました。その中で重視した考え方や設計思想、また構築後の使用感などを記事にまとめさせていただきましたので、データパイプラインをご検討中の方は是非ご参考にしていただけますと幸いです。
Snowflakeにterraformを導入する方法
櫻井 裕司
2022-10-08 櫻井 裕司
tech
0からSnowflakeにterraformを導入した際の方法をご紹介します。Snowflake独自の注意点なども記載させていただきましたので、そちらもご参考いただけると幸いです。
BQにおけるSQL検算を効率化する無料chrome拡張機能をリリースいたしました
櫻井 裕司
2022-09-01 櫻井 裕司
tech
BigQueryのjoin句を含むstandardSQLを入力することで、join前後でのレコード数の変化を返すSQLを自動でクリップボードにコピーする無料chrome拡張機能をリリースいたしました。
社内ドキュメントにNotionを導入して感じた事
櫻井 裕司
2022-04-02 櫻井 裕司
tech
社内ドキュメントをNotionに寄せることで見えてきたメリット・デメリットをまとめていきたいと思います。また使う中で感じたいくつかの要望もまとめていこうと思います。
「BIツール」活用 超入門 Google Data Portalではじめるデータ集計・分析・可視化 第3章 BIツールに関する知識をつける
白井 透
2022-03-31 白井 透
techinternlearning
【「BIツール」活用 超入門 Google Data Portalではじめるデータ集計・分析・可視化 第3章】現在長期インターンをさせてもらっているSinkCapitalさんの方で、データ系の業務に携わることになりそうなのですが、それの準備期間として紹介していただいた本をまとめていきたいと思います。
「BIツール」活用 超入門 Google Data Portalではじめるデータ集計・分析・可視化 第2章 さまざまな分析をしてみよう
白井 透
2022-03-30 白井 透
techinternlearning
【「BIツール」活用 超入門 Google Data Portalではじめるデータ集計・分析・可視化 第2章】現在長期インターンをさせてもらっているSinkCapitalさんの方で、データ系の業務に携わることになりそうなのですが、それの準備期間として紹介していただいた本をまとめていきたいと思います。
「BIツール」活用 超入門 Google Data Portalではじめるデータ集計・分析・可視化 第1章 分析ダッシュボードを作ってみよう
白井 透
2022-03-29 白井 透
techinternlearning
【「BIツール」活用 超入門 Google Data Portalではじめるデータ集計・分析・可視化 第1章】現在長期インターンをさせてもらっているSinkCapitalさんの方で、データ系の業務に携わることになりそうなのですが、それの準備期間として紹介していただいた本をまとめていきたいと思います。
Ruby on Rails チュートリアル第14章をやってみて & まとめ
白井 透
2022-02-20 白井 透
techinternlearning
【Ruby on rails 第14章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第13章をやってみて
白井 透
2022-02-20 白井 透
techinternlearning
【Ruby on rails 第13章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第12章をやってみて
白井 透
2022-02-19 白井 透
techinternlearning
【Ruby on rails 第12章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第11章をやってみて
白井 透
2022-02-19 白井 透
techinternlearning
【Ruby on rails 第11章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第10章をやってみて
白井 透
2022-02-18 白井 透
techinternlearning
【Ruby on rails 第10章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第9章をやってみて
白井 透
2022-02-16 白井 透
techinternlearning
【Ruby on rails 第9章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第8章をやってみて
白井 透
2022-02-14 白井 透
techinternlearning
【Ruby on rails 第8章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第7章をやってみて
白井 透
2022-02-14 白井 透
techinternlearning
【Ruby on rails 第7章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第6章をやってみて
白井 透
2022-02-13 白井 透
techinternlearning
【Ruby on rails 第6章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第5章をやってみて
白井 透
2022-02-12 白井 透
techinternlearning
【Ruby on rails 第5章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第4章をやってみて
白井 透
2022-02-11 白井 透
techinternlearning
【Ruby on rails 第4章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第3章をやってみて
白井 透
2022-02-08 白井 透
techinternlearning
【Ruby on rails 第3章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第2章をやってみて
白井 透
2022-02-07 白井 透
techinternlearning
【Ruby on rails 第2章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Ruby on Rails チュートリアル第1章をやってみて & 自己紹介
白井 透
2022-02-07 白井 透
techinternlearning
【Ruby on rails 第1章】インターン先の方から、「これやっとけば、だいぶいい感じだよ!」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。
Nuxt上でのd3を利用した散布図の作成方法
櫻井 裕司
2021-10-29 櫻井 裕司
techdataAnalytics
クリック可能な散布図をNuxtjs上で作成する場合にd3.jsが汎用性が高く便利でした。利用するにあたって難しかった点などを備考録としてまとめています。
アクセスログを可視化しGAのデータを直感的に理解できる型態にする試み(ネットワーク型)
櫻井 裕司
2021-09-05 櫻井 裕司
techdataAnalytics
ビジネスに活きる分析を進める上で弊社では「理解できる」ことを重要と考えており、特に直感的理解は可視化を進める上で特に重要だと考える内容の一つです。弊社では様々なお客様のデータ分析を進める上で常により示唆の大きい可視化を追求しており、今回はその中で最近試みているネットワーク側の可視化についてまとめたいと思います。
代表櫻井による特別講演会が白陵高等学校で開かれました
櫻井 裕司
2021-07-31 櫻井 裕司
eventpersonal
2021年の夏に兵庫県の私立白陵高等学校において、代表櫻井による特別講演会を開催いたしました。今振り返って高校の頃の自分に伝えたいことについてお話しました。
Nuxtで動的ページを随時追加する場合にNot Foundとなる
櫻井 裕司
2021-05-31 櫻井 裕司
tech
Nuxtで動的ページを登録する方法はありますが、登録後に随時コンテンツが追加される際はNot Foundとなってしまうので、そう言った際の対処方法について
GKEをやめてCloud Runを始めてみました
櫻井 裕司
2021-04-19 櫻井 裕司
tech
firebaseで構築したシステムの裏で動かすバッチの負荷が大きく、cloud functionsで終わらなかったためCloud Runを利用してみました。動作確認までの知見等を雑多にまとめてみました。
AWSをやめてfirebaseを使い始めて感じたメリットやデメリットとそれの対応策(LT登壇内容)
櫻井 裕司
2021-03-26 櫻井 裕司
techeventpersonal
みそかつウェブ・GDG Nagoya主催の「around firebase」とCloud Native Nagoya主演の「Cloud Native Nagoya」にてfirebaseのLTをさせていただきました。そこで会話させていただいたfirebaseを使い始めて感じたメリット・デメリットについてまとめています。
PWA+SPAのwebアプリ作成にnuxtjs+firebaseがめちゃ便利だった
櫻井 裕司
2021-01-16 櫻井 裕司
tech
PWA+SPAのwebアプリを作る際にnuxt.js+firebaseを合わせて利用すると便利だったので知見を書き留めています
s3のhostingでPWAを導入する方法
櫻井 裕司
2020-12-19 櫻井 裕司
tech
アプリ作成時にpwaが比較されることが多かったですが、実際にpwaを実装した経験がなかったため今回自社サイトをPWA化してみました。
dockerでseleniumを動かしてみる(chrome_headless)
櫻井 裕司
2020-12-06 櫻井 裕司
tech
seleniumの相談をいただくことが増えたため、seleniumの勉強もかねてdockerでの実行テストを行いました
THE DECKのイベントにお邪魔させていただきました
本林 秀和
2020-12-05 本林 秀和
eventpersonal
大学コンソーシアム大阪のイベント@The DECK にお邪魔してきました
flutter(dart)を触ってみた感想
櫻井 裕司
2020-11-18 櫻井 裕司
tech
android向けアプリへの対応も考慮してflutter(dart)を触ってみたので、感想をまとめておこうと思います。理解が深まっていく中で定期的にまとめていければと思います。
代表本林による特別講演会が滝高校で開かれました
本林 秀和
2020-11-07 本林 秀和
eventpersonal
2020年11月7日(土)愛知県の私立滝高校において、代表本林による特別講演会を開催いたしました。IT業界やデータサイエンスについてお話しました。
AWS・GCPを選ぶ際の観点
櫻井 裕司
2020-10-28 櫻井 裕司
tech
AWSかGCPを選ぶ際の観点について書き留めておこうと思います
CloudFormationとterraformの比較
櫻井 裕司
2020-10-04 櫻井 裕司
tech
AWS CloudFormationとterraformの両方を使ってみて感じた違いをまとめてみました。
iosのcallkit周りでできること
櫻井 裕司
2020-08-24 櫻井 裕司
tech
新規事業を検討する上でios(swift)の電話周りでできることを調査したため、調査結果をブログとして残しています。
総務省特定サービス産業実態調査のデータ分析
櫻井 裕司
2020-07-18 櫻井 裕司
techdataAnalytics
総務省がAPIで市場データを公開しており、分析技術向上と市場感を養うことを目的に定期的に分析を行なっていこうと思います。今回は「特定サービス産業実態調査」について見ていこうと思います。
「お絵かきつみ木バトル」をリリースしました
櫻井 裕司
2020-07-12 櫻井 裕司
techapp
タスク管理を二次元的に行うアプリ「お絵かきつみ木バトル」をリリースしました。SinkCapitalはデータコンサルですが、知見蓄積のため様々な媒体での実験的開発を行っています
総務省工業統計調査のデータ分析
櫻井 裕司
2020-07-11 櫻井 裕司
techdataAnalytics
総務省がAPIで市場データを公開しており、分析技術向上と市場感を養うことを目的に定期的に分析を行なっていこうと思います。今回は「工業統計調査」について見ていこうと思います。
総務省サービス産業動向調査のデータ分析
櫻井 裕司
2020-07-08 櫻井 裕司
techdataAnalytics
総務省がAPIで市場データを公開しており、分析技術向上と市場感を養うことを目的に定期的に分析を行なっていこうと思います。初回は「サービス産業動向調査」について見ていこうと思います。
タスク管理アプリ「タスククロス」をリリースしました
櫻井 裕司
2020-04-08 櫻井 裕司
techapp
タスク管理を二次元的に行うアプリ「タスククロス」をリリースしました。SinkCapitalはデータコンサルですが、知見蓄積のため様々な媒体での実験的開発を行っています
【terraform】gcpでcicd環境を構築する方法
櫻井 裕司
2020-01-04 櫻井 裕司
tech
企業サイトはAWSを利用しているのですが、要件によってはGCPの方が適している場合もあるため、GCPでのcicd構築も行いました。AWSと比較しつつ説明しているため是非ご参考にしてみてください。
【合格体験記】GCP_Cloud_Archtectに受かりました
櫻井 裕司
2019-12-23 櫻井 裕司
personalqualification
Google Professional Cloud Architectに合格したので、勉強法別のコスパをまとめてみました。
AWSでサブドメインなし(wwwなし)からサブドメインあり(wwwあり)へのリダイレクト設定
櫻井 裕司
2019-12-23 櫻井 裕司
tech
もともと企業サイトがサブドメインありで公開していたが、サブドメインなしでもエラーなく接続できるように設計。terraformで作成しているので是非ご参考ください。
マークダウンで記事を書けるようにしてみた
櫻井 裕司
2019-12-16 櫻井 裕司
tech
ホームページのブログをマークダウンを使用してかけるようにしました。gatsbyなどもありますが、今回はお手製cicd+pythonを使用してライトに作成しました。
Copyright © SinkCapital 2024
ご相談はこちらから 一緒に働きたい方はこちら