ajaxのリクエストパラメーターがキャッシュされてる場合の説明が伝わらなかった話

説明が伝わらなかった話

こんにちは、エンジニア大家です。

皆さんはajax使ってますか?

昨年客先のミーティングに出席した時に方針で揉めたことがありました。

異論を唱えてきた人に対しての説明がま〜〜〜〜〜面倒くさかったw

時間がなかったのと、異論を唱えた人は当事者ではなくて外野(社外の人)だったので曖昧なまま会議を終わらせたのですが、

今更ながら反省する点もあったので記事にしました。

ajaxのリクエストパラメーターがキャッシュされてる場合の説明が伝わらなかった話

ajaxとは

まずはajaxの説明が必要ですね。

JavaScriptとXMLを使って非同期にサーバとの間の通信を行うこと。

詳しくは以下を見てください。(手抜きw)

参考 初心者目線でAjaxの説明Qiita

今回の事例

あるWEBサービスのTOPページに会員向けに「オススメの商品」というコンテンツを非同期で表示させるものでした。

その仕組ですが、もともと自社サーバーで完結した仕組み(以下参照)でしたが、

  1. HTML表示
  2. javascriptにてajaxリクエスト
  3. WEBアプリケーション(PHP)で受け、自社DBにアクセスして会員向けの情報(json)を返す
  4. javascriptで受け取ったjsonからHTMLを生成してオススメ商品を表示

今回は他社のサーバーにリクエストを行い、おすすめの商品情報を取得して表示させるタスクでした。

  1. HTML表示
  2. javascriptにて他社サーバーへ向けてajaxリクエスト
  3. 他社APIでオススメ商品の情報(jsonp)を返す
  4. jsonpのコールバック関数(javascript)にてHTMLを生成してオススメ商品を表示

上記を踏まえた上で今回のタスクを困難にした事を以下説明します。

既存コンテンツはその会員向けの情報を表示させていた

オススメの商品なので、会員が過去に閲覧した商品に関連したものを表示させる必要がありました。

なので、「3.WEBアプリケーション(PHP)で受け…」の工程で会員ID等の独自情報を取得していました。

本番環境はページキャッシュされる仕組みだった

本番環境だとページキャッシュされる仕組みでした。

仮にHTMLに会員IDを埋め込んでjavascriptでそれを取得してajaxリクエストを送信する仕組みだった場合、
最初にアクセスした会員のIDがキャッシュされることになります。

なので、もし今回のタスクでも会員向けのコンテンツを取得する必要がある場合、以下のように一旦WEBアプリケーション(PHP)で受ける必要がありました。

  1. HTML表示
  2. javascriptにてajaxリクエスト
  3. WEBアプリケーション(PHP)で受けcurlで他社APIにリクエスト
  4. 他社APIで受けてオススメ商品の情報(jsonp)を返す
  5. jsonpの情報をコールバック関数(javascript)にてHTMLを整形してオススメ商品を表示

依頼主の意向

客先のプロマネさんからは

「負荷の問題もあるので、今回はPHPは経由せず直接他社APIにリクエストしてください。アクセス会員向けにカスタマイズはしません」

というお言葉を頂いておりました。

ですがミーティングに行ったら、

私(下請け)・客先の担当者(非エンジニア&ポンコツ)・他社APIの担当者(非エンジニア・営業)

の3者で合意が取れませんでした。

伝わらなかったやり取りの内容

ページキャッシュされるので会員ごとにパラメータを変えることができません。故に同じオススメコンテンツを表示させることになりました

他社APIの営業

え?ajaxなので後からリクエストするのですよね?キャッシュ関係ないじゃん

客先の担当者

できるんだったら会員事に違うコンテンツを表示させてください

いや、ですから、必要なパラメータの会員IDもキャッシュされてしまうんですよ。

他社APIの営業

既存はできているんですよね?だったらできますよね??

既存と今回とでは異なる構成と伺っております。なのでできないです。(客先の担当者)そうですよね?

客先の担当者

ホッホッホッ

と、助け舟も出してくれませんでした。

他社APIの営業

いやー、できるはずだけどな。エンジニアじゃないので説明できるかわかりませんがajaxでくぁwせdrftgyふじこlp…

ということで、面倒だったので適当にあしらってミーティングを終えましたw

その後も執拗にメールで「実現できるはず」と言ってきました。

どうやったら伝わったのか?

今回、適当にあしらった事を反省しています。

後から思い返すとムカつくので、その場で徹底的に話し合っておけばよかったなと。

どうやったら伝わったのか考えてみました。

ホワイトボードで図を書く

できれば相手にホワイトボードで説明させればよかった。

非エンジニアなのでなに言ってるかよくわからなかったので、

図で説明させてツッコミを入れたら簡単に論破できたんじゃないかと思います。

状況が全て伝わっていない前提で説明をする

そもそも「間にPHPを挟まない」という前提が彼らにはなかったようです。

彼らの言葉ではどこら辺を理解できてないのか自分にはわからなかったですが、

冷静に考えるとプロマネさんの意向が必ずしも伝わってるわけではありませんからね。
(てっきり方針に関しては合意取れているものだと思い込んでました)

客先の担当者とプロマネさんは同じ会社の社員だけど、もしかしたらプロマネさんと私(外部社員)の方が蜜にコミュニケーションをとっていた可能性があります。

ミーティングにプロマネもしくは社員のエンジニアを同席させる

結局コレに尽きます。

パワーバランス的に下請けフリーランスは劣っているので、プロマネさん達の言葉でなければ説得力がなさそうです。

特に本人たちが理解できてないことはなおさらです。

まとめ

  • ajaxリクエスト&ページキャッシュの場合は間にWEBアプリケーション(PHP)を挟まないと会員独特のコンテンツを表示できない
  • 客先ミーティングで非エンジニアからの異論が理解できない場合はホワイトボードに書いてもらう
  • 客先ミーティングの場では方針など根本的な話が伝わってないことも想定しておく
  • 客先ミーテイングの場ではエンジニア系の社員さんもできれば同席させておく

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です