SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
Hitokuse Inc.©
HiveのORマッパー
を自作した話
1
Hitokuse Inc.©
自己紹介
2
株式会社ヒトクセ取締役CMO
濁沼広樹
横浜国立大学出身
株式会社リアルワールドを経てヒトクセへ
技術系 : ビジネス系 = 5 : 5
サーバーサイド(Ruby on Rails)
インフラ(AWS)
Twitter : @nigohiroki
Hitokuse Inc.©
-集計-
3
Hive集計 + DB保存
Hitokuse Inc.©
Hive集計 + DB保存
4
処理イメージ (1時間に一回行う)
生データ (JSON) 集計データ(DB)
ad_id
1
imp
100
click
20
{ id : 1 , type : imp}
{ id : 1 , type : imp}
...
{ id : 1 , type : click}
Hiveを実行するスクリプトをRubyで記述
Hitokuse Inc.©
Hive集計 + DB保存
5
EC2からHiveのHQLを実行する
RubyのコードにHQLを記述する
SELECT count(*) FROM logs
WHERE type = imp GROUP BY app_id;
コードが長くなる。
書き間違いが起こる。
保守性が悪い。
Hitokuse Inc.© 6
HiveのORマッパーを作る
Hitokuse Inc.©
HiveのORマッパーを作る
7
RailsのActiveRecordライクにする
SELECT count(*) FROM logs
WHERE type = imp GROUP BY app_id;
これを
Log.hive_select(count(*)).hive_where(type: :imp)
.hive_group_by(:app_id)
こういう感じで書きたい
Hitokuse Inc.©
HiveのORマッパーを作る
8
ActiveRecordっぽい感じにするには1
クラス名.メソッド名
例 ) User.find(1)
対象のモデルにクラスメソッドを追加
例 ) self.hive_select, self.hive_where
Log.hive_select()
Hitokuse Inc.©
HiveのORマッパーを作る
9
ActiveRecordっぽい感じにするには2
クラス名.メソッド名.メソッド名
例 ) User.where().order().limit()
各メソッドの返り値をselfにする
例 )
def self.hive_select
何かしらの処理
self
end
Hitokuse Inc.©
HiveのORマッパーを作る
10
ActiveRecordっぽい感じにするには3
どのクラスでも共通のメソッドを使いたい
例 ) User.where(), Article.where()
継承 or concern
app/models/concerns/hive_active_record.rb
該当のモデルにて include HiveActiveRecord
Hitokuse Inc.©
HiveのORマッパーを作る
11
こうして出来たORマッパーはこんな感じ
Log.hive_select(count(*)).hive_where(type: :imp)
.hive_group_by(:app_id)
これが
SELECT count(*) FROM logs
WHERE type = imp GROUP BY app_id;
このようなHQLを吐き出します
このようなHQLをインスタンス変数に格納します
Hitokuse Inc.© 12
HiveのORマッパー改善
Hitokuse Inc.©
HiveのORマッパーを作る
13
改善点1
HQLをインスタンス変数に保存
-> HQLを取り出すゲッター的なものが必要
メソッドが後続に続いているかどうかを判断
1) User.where().limit()
2) User.where()
where()の返り値を1の場合はself
2の場合はHQLを返したい
Hitokuse Inc.©
HiveのORマッパーを作る
14
改善点2
そもそもHQLを吐き出すではなく実行してほしい
-> HiveActiveRecordで
EMRのインスタンスに接続
他にも改善点は色々
いつかはGemに!
Hitokuse Inc.©
まとめ
15
いつかはGemに!
集計の度に楽できる!
Hitokuse Inc.©
おまけ
16
Ruby on Rails
ヒトクセを支える技術
AWS
JavaScript
Hadoop
Chef
fluentd
最適化アルゴリズム(bandit)
Hitokuse Inc.©
おまけ
17
絶賛エンジニア
募集中!!
詳しくは交流会で

Más contenido relacionado

La actualidad más candente

BIGIP作業サービス化してみた
BIGIP作業サービス化してみたBIGIP作業サービス化してみた
BIGIP作業サービス化してみたkotasaegusa
 
Ansibleの限界を超えてファイアウォールの プロビをした話
Ansibleの限界を超えてファイアウォールのプロビをした話Ansibleの限界を超えてファイアウォールのプロビをした話
Ansibleの限界を超えてファイアウォールの プロビをした話shomahirao
 
Asp.netとbluemixで遊んでみたお話
Asp.netとbluemixで遊んでみたお話Asp.netとbluemixで遊んでみたお話
Asp.netとbluemixで遊んでみたお話Kazunori Hamamoto
 
[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)
[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)
[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)Takahiro Moteki
 
オンプレからAws移行で変えた3つの意識
オンプレからAws移行で変えた3つの意識オンプレからAws移行で変えた3つの意識
オンプレからAws移行で変えた3つの意識Ryota Kuroki
 
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策Daisuke Nagao
 
AI & Deep Learning on AWS at CTO Night&Day 2016 Winter
AI & Deep Learning on AWS at CTO Night&Day 2016 WinterAI & Deep Learning on AWS at CTO Night&Day 2016 Winter
AI & Deep Learning on AWS at CTO Night&Day 2016 WinterYasuhiro Matsuo
 
Bluemix(Node-RED)を使った空間の付加価値提案
Bluemix(Node-RED)を使った空間の付加価値提案Bluemix(Node-RED)を使った空間の付加価値提案
Bluemix(Node-RED)を使った空間の付加価値提案BMXUG
 
Gcpug tokyo february 2016
Gcpug tokyo february 2016Gcpug tokyo february 2016
Gcpug tokyo february 2016Makoto Uehara
 
JAWS-UG HPC #0 LT資料
JAWS-UG HPC #0 LT資料JAWS-UG HPC #0 LT資料
JAWS-UG HPC #0 LT資料Daisuke Nagao
 
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングクラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングTerui Masashi
 
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWSJAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWS陽平 山口
 
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用Inoue Seki
 
64ヶ月オンプレ運用したシステムを aws移行した話
64ヶ月オンプレ運用したシステムを aws移行した話64ヶ月オンプレ運用したシステムを aws移行した話
64ヶ月オンプレ運用したシステムを aws移行した話Ryota Kuroki
 
[JAWS-UG AI支部] AWS AIアップデート
[JAWS-UG AI支部] AWS AIアップデート[JAWS-UG AI支部] AWS AIアップデート
[JAWS-UG AI支部] AWS AIアップデートYasuhiro Matsuo
 
MBSハッカソン協賛品_ハンズラボ20170211
MBSハッカソン協賛品_ハンズラボ20170211MBSハッカソン協賛品_ハンズラボ20170211
MBSハッカソン協賛品_ハンズラボ20170211由佳 青木
 
PIXTAにおけるCloudSearchのコスト削減
PIXTAにおけるCloudSearchのコスト削減PIXTAにおけるCloudSearchのコスト削減
PIXTAにおけるCloudSearchのコスト削減PIXTA Inc.
 

La actualidad más candente (20)

BIGIP作業サービス化してみた
BIGIP作業サービス化してみたBIGIP作業サービス化してみた
BIGIP作業サービス化してみた
 
Growing up serverless
Growing up serverlessGrowing up serverless
Growing up serverless
 
Ansibleの限界を超えてファイアウォールの プロビをした話
Ansibleの限界を超えてファイアウォールのプロビをした話Ansibleの限界を超えてファイアウォールのプロビをした話
Ansibleの限界を超えてファイアウォールの プロビをした話
 
Asp.netとbluemixで遊んでみたお話
Asp.netとbluemixで遊んでみたお話Asp.netとbluemixで遊んでみたお話
Asp.netとbluemixで遊んでみたお話
 
[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)
[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)
[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)
 
Touch the mahout
Touch the mahoutTouch the mahout
Touch the mahout
 
オンプレからAws移行で変えた3つの意識
オンプレからAws移行で変えた3つの意識オンプレからAws移行で変えた3つの意識
オンプレからAws移行で変えた3つの意識
 
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策
 
AI & Deep Learning on AWS at CTO Night&Day 2016 Winter
AI & Deep Learning on AWS at CTO Night&Day 2016 WinterAI & Deep Learning on AWS at CTO Night&Day 2016 Winter
AI & Deep Learning on AWS at CTO Night&Day 2016 Winter
 
Bluemix(Node-RED)を使った空間の付加価値提案
Bluemix(Node-RED)を使った空間の付加価値提案Bluemix(Node-RED)を使った空間の付加価値提案
Bluemix(Node-RED)を使った空間の付加価値提案
 
Gcpug tokyo february 2016
Gcpug tokyo february 2016Gcpug tokyo february 2016
Gcpug tokyo february 2016
 
JAWS-UG HPC #0 LT資料
JAWS-UG HPC #0 LT資料JAWS-UG HPC #0 LT資料
JAWS-UG HPC #0 LT資料
 
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングクラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
 
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWSJAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
 
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
 
64ヶ月オンプレ運用したシステムを aws移行した話
64ヶ月オンプレ運用したシステムを aws移行した話64ヶ月オンプレ運用したシステムを aws移行した話
64ヶ月オンプレ運用したシステムを aws移行した話
 
[JAWS-UG AI支部] AWS AIアップデート
[JAWS-UG AI支部] AWS AIアップデート[JAWS-UG AI支部] AWS AIアップデート
[JAWS-UG AI支部] AWS AIアップデート
 
Scaling MongoDB on AWS
Scaling MongoDB on AWSScaling MongoDB on AWS
Scaling MongoDB on AWS
 
MBSハッカソン協賛品_ハンズラボ20170211
MBSハッカソン協賛品_ハンズラボ20170211MBSハッカソン協賛品_ハンズラボ20170211
MBSハッカソン協賛品_ハンズラボ20170211
 
PIXTAにおけるCloudSearchのコスト削減
PIXTAにおけるCloudSearchのコスト削減PIXTAにおけるCloudSearchのコスト削減
PIXTAにおけるCloudSearchのコスト削減
 

Destacado (7)

Git learn
Git learnGit learn
Git learn
 
デジタル信号処理をDSP入札に応用
デジタル信号処理をDSP入札に応用デジタル信号処理をDSP入札に応用
デジタル信号処理をDSP入札に応用
 
Vagrant chef
Vagrant chefVagrant chef
Vagrant chef
 
Seo対策勉強会
Seo対策勉強会Seo対策勉強会
Seo対策勉強会
 
TDD一連の流れ
TDD一連の流れTDD一連の流れ
TDD一連の流れ
 
Sassの魅力
Sassの魅力Sassの魅力
Sassの魅力
 
Gitを使った運用方法
Gitを使った運用方法Gitを使った運用方法
Gitを使った運用方法
 

Similar a 若手Webエンジニア勉強会公開用

アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Yahoo!デベロッパーネットワーク
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
マーケティングテクノロジー勉強会
マーケティングテクノロジー勉強会マーケティングテクノロジー勉強会
マーケティングテクノロジー勉強会伊藤 孝
 
Datadog monitoring with HashiCorp
Datadog monitoring with HashiCorpDatadog monitoring with HashiCorp
Datadog monitoring with HashiCorpMasatomo Ito
 
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?Developers Summit
 
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...Insight Technology, Inc.
 
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座DIVE INTO CODE Corp.
 
小規模チームでも実現!スケーラブルな広告システム開発
小規模チームでも実現!スケーラブルな広告システム開発小規模チームでも実現!スケーラブルな広告システム開発
小規模チームでも実現!スケーラブルな広告システム開発Tomohiro Kikuyama
 
Datadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackDatadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackMasatomo Ito
 
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃうフレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう株式会社オプト 仙台ラボラトリ
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座DIVE INTO CODE Corp.
 
リクルート式Hadoopの使い方
リクルート式Hadoopの使い方リクルート式Hadoopの使い方
リクルート式Hadoopの使い方Recruit Technologies
 
ライトプランで利用可能な分析基盤「IBM Analytics Engine (IAE)」とは
ライトプランで利用可能な分析基盤「IBM Analytics Engine (IAE)」とはライトプランで利用可能な分析基盤「IBM Analytics Engine (IAE)」とは
ライトプランで利用可能な分析基盤「IBM Analytics Engine (IAE)」とはKimihiko Kitase
 
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。Kohei Nishikawa
 
XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習Masahiko Miyo
 
HPHPは約束の地なのか
HPHPは約束の地なのかHPHPは約束の地なのか
HPHPは約束の地なのかMoriyoshi Koizumi
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようMasashi Shinbara
 
エンジニアという職業について
エンジニアという職業についてエンジニアという職業について
エンジニアという職業についてHisatoshi Kikumoto
 

Similar a 若手Webエンジニア勉強会公開用 (20)

アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
マーケティングテクノロジー勉強会
マーケティングテクノロジー勉強会マーケティングテクノロジー勉強会
マーケティングテクノロジー勉強会
 
Datadog monitoring with HashiCorp
Datadog monitoring with HashiCorpDatadog monitoring with HashiCorp
Datadog monitoring with HashiCorp
 
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
 
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
 
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
 
小規模チームでも実現!スケーラブルな広告システム開発
小規模チームでも実現!スケーラブルな広告システム開発小規模チームでも実現!スケーラブルな広告システム開発
小規模チームでも実現!スケーラブルな広告システム開発
 
Datadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackDatadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stack
 
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃうフレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座
 
リクルート式Hadoopの使い方
リクルート式Hadoopの使い方リクルート式Hadoopの使い方
リクルート式Hadoopの使い方
 
ライトプランで利用可能な分析基盤「IBM Analytics Engine (IAE)」とは
ライトプランで利用可能な分析基盤「IBM Analytics Engine (IAE)」とはライトプランで利用可能な分析基盤「IBM Analytics Engine (IAE)」とは
ライトプランで利用可能な分析基盤「IBM Analytics Engine (IAE)」とは
 
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。
 
XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習
 
Lt20190129
Lt20190129Lt20190129
Lt20190129
 
HPHPは約束の地なのか
HPHPは約束の地なのかHPHPは約束の地なのか
HPHPは約束の地なのか
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみよう
 
エンジニアという職業について
エンジニアという職業についてエンジニアという職業について
エンジニアという職業について
 

若手Webエンジニア勉強会公開用