だ。ログ。

開発とかスノボとかやきうとか。

報(告しない)連(絡しない)相(なんてない)とコラコラ問答

営業とエンジニアの言った言わない。
システム開発の世界に身をおいていると1年に2,3回はリリース日の言った言わないに振り回される。

結局の所、エンジニアと営業の対立の溝が埋まる事はない。
営業はお客様に良い顔をしたいのは分かる。
しかし現実を見ていない。

・要件が出切っていない
 →見てみないと分からないから~~~と言う現物を見てからインスピレーションを湧かせる。
  営業には要望ベースでオーダーしているものの、それを現場に相談しないまま暖める。
  孵化して立派に成長すれば良いが孵化しないまま暖め続けられる。

・仕様が決まっていない
 →そんなのお前ら決めろと言われて作るも、確認すると「そんな使い方は考えていない」
  まだ確認してくれるだけ幸いである。
  「お客さんが今確認しているから~」とその場限りの取り繕い方をしたが故にタスクを忘れている。
  どこで止まっていたか紐解くと大半はここにたどり着く。連絡は電話口頭が当たり前である。

・多分○○日くらいに
 →結局最初から日付を切ってエンジニアは要望を出す。○○日迄に仕様を決定してください。
  ○○日までに最終要望のフィックスは必ずしてください。
  とは言う物の結局お願いした日までに出てくる物は無い。
  なぜ遅れたのか?
  なぜ要望が出ていないのか?
  「お客さんだって忙しいんだよ!」と言う返答一つしかない。
  この状況でお得意様となった先方へ御用聞きに行く営業。
  意気揚々と先方から帰ってきた営業に、突然エンジニアに突きつけられたメールの怒りはコラコラ問答へと昇華する。
  突然の無茶なリリース日。日付管理票に書かれたシステム構築途中にひかれる大きな黃色の一本線
  「お客様のリリース希望日!なるべくここでリリースしてください!!」
  エンジニアは呆れそのコメントに一言「無理です。」とだけ記述してブラウザをそっ閉じする。

営業「オマエこれ何だ。何がやりたいんだコラ!紙面を飾ってコラ!
 何がやりたいのか。ハッキリ言ってやれコラ。
 リリースしたいのか、リリースしたくないか、どっちなんだ。
 どっちなんだコラ!」

エンジニア「何がコラじゃコラバカヤロー!」

営業「(食い気味に)何コラタココラ!」

エンジニア「何やコラ」

営業「(食い気味に)リリーススケジュールを飾るなって言ってんだコラ!」

エンジニア「お前が(最初に)言ったんだろコノヤロー」

営業「(食い気味に)言ったのはテメエだろがコラ!」

エンジニア「何この、オイ…」

営業「(食い気味に)何コラ!」

エンジニア「(ちゃんとリリース予定日を)言ったらやるぞコラ!」

営業「オマエ、オ…」

エンジニア「(食い気味に)(無茶なリリース日だけ今頃設定して)オマエ死にてえんだろ、コノヤロー」

営業「(食い気味に)オマエ今言ったなコラ!」

エンジニア「おう言ったぞ」

営業「吐いた言葉飲み込むなよオマエ!」

エンジニア「そのままじゃコラ!オイ、ナメてんなよコノヤロー!」

営業「ヨシ分かった。それだけだ(帰るそぶりを見せながら背中を向ける)
  (やっぱり振り向いて)オマエ今言った言葉オマエ、
  飲み込むなよ。なあ吐いて。分かったな。(帰るそぶりで一歩引く)
  (やっぱり元の位置に戻ってから)本当だぞ?本当だぞ?なあ?
  リリースするならしっかり噛み付いて来いよコラ。なあ。
  中途半端な言った言わないじゃねえぞオマエ。分かったなコラ(一歩引く)
  (やっぱり元の位置に戻ってから)分かったな。噛み付くんだなコラ」

エンジニア「(食い気味に)オマエに分かったな言われる筋合いは無いんじゃコラ!」

営業「噛み付くんだなコラ!」

エンジニア「オッサンナメンなよコノヤロー!」

営業「(無言で振り向き、会場を後にする)」

~外に出て、車に乗り込もうとする長州に向かって~

発注先「営業さん!(リリースを)やるならプレスリリースした日という気持ちですか?」

営業「(エンジニアを頭ごなしに否定するのに)時間かかんね」

多分この業界でシステム上がりの営業さんと言う類稀な人は引く手数多であろうとつねづね思う。

なぜお客様の要望を聴くのか?
なぜ日付を切ってお客様の要望の打ち切りを行うのか?
なぜ順調に行きスケジュールよりも早く進行しているスケジュールの一度設定した日付を動かす事が悪なのか?

全てはお客様の為なのであろう。それは正しい。
ただし、同時にお客様の要望を具現化させる方は決まった事に対して動かないと、空振りばかりおきてしまい「無駄」な時間と思考をした事にしかならない。
「売上」と言う数字を意識する事は正しいが、それ以上に「内部リソースの稼働と使用率」についての意識が無い人が多い。
エンジニアは目に見えてお金を稼いではいない。だがこういうお客様が全ての営業さんはおうおうにしてエンジニアは社内の人間だから無原資で働く物と勘違いしている人間を多々見掛ける。

無茶振りをしても良いがエンジニアは機械ではない。
感情も体調もある。機械であって欲しいのであれば、その機械を動かす為の詳細な指示を忘れて欲しくない。

「自発的に考えて動くエンジニア以外は不要な人間だ」と言う記事をたまに目にする。
ただその大半は「考えても後でちゃぶ台返し食らって動いても無駄だから」と言う職場の環境を鑑みていない事が多いのではないだろうか。
と思う。

EC-CUBE3のサイト移転時のプラグインの注意

先に本番を作って後からステージングを作った関係で起きてしまった問題
アレコレとプラグインを突っ込んでいたが、このプラグインが起因で例えばページに紐付いているプラグインが無い。と言うエラーが出る。

まず出たエラーは
Compile Error: Symfony\Component\Debug\DebugClassLoader::loadClass(): Failed opening required

結局の所、Symfonyコンパイルディレクトリが何らかの原因で生成もしくはコンパイル自体出来ていない。
ディレクトリの問題かと思い、EC-CUBEのフォルダ自体のパーミッション

$ chmod -R 777 eccube/

と言う感じのパワープレイをしたが、このエラーは解決されない。
多分インストールした際に何らかの設定が入っていてサーバー固有に紐付いたコンパイルとかが有るのか。

その為、一旦EC-CUBEの素のバージョンをアップロードしなおしinstall.phpを叩く。
その後に手で差分を入れていくと言う地道な作業に。フロントページが正しく表示されたので、詳細ページに行くと

No mapping file found named

どうやらプラグインに紐付いたymlが無いと言うことで怒られる。
一旦管理画面からプラグインの全削除をしようとするも、ディレクトリ削除が出来ない。
また、オーナーズストアからファイルをダウンロードして再アップロードしようとしても「ファイルのアップロードに失敗しました」の文言が。

で、根本を探ると今回のサーバーへのアップロードはFTPサーバーの無いSCPでのアップロードでユーザーはSSH用ユーザーであった事がひとつ。
元々ファイルの生成はapache権限でやるのにSSHのユーザーが違うユーザーだった事も問題に。

$ chmod -R 777 /html/Plugin/
$ chown -R apache:apache /html/Plugin/

$ chmod -R 777 /app/Plugin/
$ chown -R apache:apache /app/Plugin/

これでアップロードも更新も問題なく動いた。
手でファイルを差し替えた場合、一番の問題はパーミッションよりもアップしたユーザー側になるな。と数時間ハマった忘備録。

EC-CUBE3で自作のSQLクエリを発行する

基礎的な部分ではあるが、EC-CUBE3はフレームワークで作らられている為、どうしてもちょっとした変更が難しい。
特にSQLクエリ部分は色々な部分に根をはってしまっている為、どうしてもSQLは単発で動かしたいと言う事が多い。
SQLの知識さえあれば、ある程度自由に情報を取得出来るのでこの辺を知っているとカスタマイズの幅が広がる。

例)/src/Eccube/Controller/ProductController.php

$sql ="SELECT * FROM dtb_products";
$stmt = $app['db']->query($sql);
//1行1行フェッチする場合
while ($row = $stmt->fetch()) {
  //更新日時の日付をスラッシュにして時間を抜く
	$get_date = $row['update_date'];
	$arr_date = preg_split("/ /",$get_date);
	$ins_date = str_replace("-", "/", $arr_date['0']);
	$row['update_date'] = $ins_date;
	$arrProducts[] = $row;
}
//特にデータを弄る事なくそのまま全行fetchする
$arrProducts = $stmt->fetchAll();

あとは変数をrenderする部分に今回であれば$arrProductsをマージすればよい。

EC-CUBE3のテンプレート内のループ数を取得する

普段のphpだと

for($i=0;$i<=$loop;$i++){
   echo $i;
}

で済むのだが、EC-CUBEPHPコードをテンプレートに書くと基本NG。
じゃあどうやってループ数を取得するか。

{% for Product in pagination %}
             {{ loop.index }}
{% endfor %}

あらかじめ予約語があるのでこっちを仕様する。

ハマスタレジェンドマッチ

はじめて自分と友人で行った横浜スタジアムのライトスタンドから見えた背番号23、強肩とシュアなバッティングのレイノルズが大洋のライトとして守っていた。
多分家族の話しを聴く限り、もっと前にも横浜スタジアムには行っていた。スーパーカートリオを観ているハズだが、覚えているホエールズは須藤監督が指揮をし、屋敷高木を筆頭に世代交代が始まる前のホエールズだったのを覚えている。
それから幾年かが過ぎ、朝7時の水色の103系根岸線に乗り外野ベンチシートに座る為に早朝から並び、島田→佐々木のリレーに酔いしれた。

結局、気がつけば野球が近くに居たのである。
20代前半の人売全盛期に毎日終電常駐で運良く20時過ぎに会社を出て電車は横浜駅を過ぎる。
関内に近づくと煌々と輝く横浜スタジアムが見えてくる。根岸線から見える電光掲示板の B - 相手チームはいつも相手チームの点数が多く入っている。
「ああ、また負けてんのか。」当時スマホが無く、駅で貰ったR25に目を落とす。
それから少し仕事が落ち着き週に1,2回は早く帰れるようになるが、途中経過はいつもベイスターズが負けている。
もう、負ける事が当たり前になっていた。
電車で関内を出て視界には明るい光が感じられるが視線すら上げなくなる。
スポーツ新聞には内ゲバの醜聞、大物選手がFA流出の情報が流れ、大台の負け数が見えてきた事が報じられる程度の扱いであった。

あれから早10年弱、ベイスターズは19年振りに日本シリーズへの出場権を得た。結果は2勝4敗でホークスの強さばかり際立つばかりだった。

いつもなら10月には秋風が吹き、他球団の日本シリーズに一喜一憂したが今年は11月まで真剣勝負を楽しむ事が出来た。
しかしまだ今年はピリオドとなっていなかった。

チケット争奪戦

運良くチケット争奪戦に勝つ事が出来た。
ベイスターズのチケットは正午に先行発売がはじまる。相変わらずサーバーに到達する前にロードバランサに弾かれてエラーページに飛ばされる。
何度かポチポチと試すとチケット購入画面に。この時点で12:13、流石に指定席となるボックスシートは×が並んでいる。
家族を招待する為に内野自由席を選択すると幸運にも購入する事が出来た。
その後、行こうか迷っている友人を待つためにそのまま画面を開き続いてけていたが12:40の段階で内野は△、外野ライトは×が付く。
13:20の段階でレフト外野自由以外が×になり、13:30の段階で全部×印が付いた。この時点で公式ページでの用意したチケットは完売となった。

ただ、この後知人から聞いたがセブンイレブンチケットでは自由席が残っており14時の段階でも購入可能だったそうな。

入場までの長い道のり

今回内野が自由席と言う事もあり、朝から並ばないと良い席は確保出来ないと思い公式からアナウンスが有った7時の整列に間に合わせようとしたが実際に到着したのは7:20
入場待機列はスターサイドゲートからライト8ゲート入場口まで3周しており、1000人以上は並んでいた。その後8時には4周め8時30分には5周めと人が並び続ける。
今度はライト側ではなく、横浜公園の出口側に人を並ばせるように大きく列は周りはじめる。9時前の段階で警備の方から整列をはじめる旨をアナウンス。
整列かと思いきや入場が早まり9:30から入場開始、結局10時前には内野席の確保が終わる。この時点で強い雨、座席確保を終えると大半の人がコンコース内に避難。

その後、10:30くらいに雨に耐えきれず内野ショップに並ぶ。自分が並んだ時は階段で2F手前の折り返しに並んだがその後一気に列が長くなる。
お目当ての鈴木尚典選手と三浦大輔投手のタオルを購入。ポスターは売り切れが目立ち、佐伯選手のタオル等は売り切れ寸前。

11時、家族がハマスタ到着。ここでチケットを自分が持っていたのでチケットを渡しに一旦外へ。
落ち合って入場しようとしたが入場に20分以上かかってしまう。現状ハマスタが工事中のと言うことと入場ゲートが一つしかない。
加えて降っていた雨が完全に止んだ事で一気に人が来場した事で渋滞してしまったものと思われる。

感想

まずこういうイベントを開催したDeNAベイスターズがとうとうベイスターズ、大洋と言う球団の過去に振り向いたと言う印象が強い。
ここまでのDeNAの運営は「これから」のベイスターズは、「これから」の野球は。と事あるごとに大々的に発表してきた。
DeNAベイスターズはこうなります!と言う未来をファンと共有する事で、この先変わる景色をファンだけでなく選手も期待する事を共有出来た。
ただ、それは未来を見続ける事で淀んでいたファンや現状を打破する為の球団のスタンスであり、過去はファンが自嘲してしまうから避けてきたのだと思う。
去年5周年の際に横浜大洋、マリンくんを復活させ少しだけ過去を観る事が出来たが、現役の選手のイベントと言う感が強かった。

横浜スタジアム改修にあたり、ここまで余り接点の無かったOB方が一同に会して「野球」をする。
それすらもはばかられるほど、過去との距離が遠かったがこの日距離を大きく縮める事が出来た。
存命であれば、加藤博一氏の大ヒロカズコールに蒲田行進曲が流れる所が観たかったが今回のこのレジェンドマッチをどこかであの笑顔で観ていてくれたと思いたい。

不遇、と呼ぶにはややおこがましいかもしれない。
球団の体質のみならず、個々の強烈なキャラクターの坩堝であったマシンガン打線に端を発した小さなぬかるみは、絶頂期を過ぎるとじわりじわりと深みをました沼は
いつのまにか閑古鳥が無くオレンジの観客席、ビジターファンが大挙し高い確率で勝ちゲームが観れる場所になっていた。
求心力を失ったチームは個々の成績にのみ注力していき、弱い=ベイスターズと言うレッテルが見事に浸透してしまった。
プロ野球ニュースやその他のテレビメディアでも、他球団に所属している解説者は「元横浜」は出さない人が多かった。

そのぬかるみから確実に脱しつつあるベイスターズ高木豊さん、野村弘樹さん、平松政次さん、斉藤明雄さんが嬉しそうにプロ野球ニュースで解説をしている。
そして、その面々が個々思い入れのあるユニフォームを着て横浜スタジアムで現役を交えた「横浜」と交錯する空間を目の当たりにし
今よりも暗くオレンジ色の目立つ横浜スタジアム、電光掲示板にライトスタンドのセンター寄りに存在したオルガン室が鮮明に思い出された。
試合が終わりインタビューが始まると権藤博さんは「また来年、もう一回やろう!」と力強く話しをしてくれた。

「このユニフォームを着て横浜スタジアムに立つ事はもうないだろう」
佐伯は感慨深そうにスタンドを見回した後に発した言葉。
最後にフロントとのわだかまりに近い感情で出てきてしまった後ろめたさ。
今回参加した以外の当時「選手」だったOBは、やはりその時のベイスターズで時間が止まってしまっていたのだと言う事が認識出来た。
最後にI☆YOKOHAMAのタオルを持った佐伯がはにかみながら「アイラブヨコハマ!」と叫ぶ。

このイベントを通じ球団は過去にあったわだかまりは引き継いでいない。
もっと先輩方に胸を張って横浜OBです!と言ってもらいたい。と言うメッセージを感じる事が出来た。

来年も。と言う事は難しいかもしれない。
ただ、パワプロでしか見たことのないような「夢」をスタジアムから発信したベイスターズ
これも一つの「未来」だったのだろうと思う。

f:id:rider_dice:20171201164457j:plainf:id:rider_dice:20171201164457j:plainf:id:rider_dice:20171201164500j:plainf:id:rider_dice:20171201164459j:plainf:id:rider_dice:20171201164509j:plainf:id:rider_dice:20171201164509j:plainf:id:rider_dice:20171201164515j:plainf:id:rider_dice:20171201164517j:plainf:id:rider_dice:20171201164524j:plainf:id:rider_dice:20171201164526j:plainf:id:rider_dice:20171201164526j:plainf:id:rider_dice:20171201164528j:plainf:id:rider_dice:20171201164452j:plainf:id:rider_dice:20171201164451j:plainf:id:rider_dice:20171201164536j:plainf:id:rider_dice:20171201164536j:plainf:id:rider_dice:20171201164543j:plain

EC-CUBE3のfaviconを変える

/src/Eccube/Resource/template/default/default_frame.twig
を変えられない事もあると思うので。

##場所
/html/template/default/img/common/favicon.ico

これを変更する。
ただし、管理画面のfaviconは別途であり

##場所
/template/admin/assets/img/favicon.ico

となる。両方変えないと管理画面だけデフォルトの帽子にままと言う事がある。
ある程度サイトを動かしてしまっているとガッチリキャッシュされてしまっている事がある。その場合はdefault_frame.twigを以下のように変更
/src/Eccube/Resource/template/default/default_frame.twig

<link rel="icon" href="{{ app.config.front_urlpath }}/img/common/favicon.ico">
##上記を変更
<link rel="icon" href="{{ app.config.front_urlpath }}/img/common/favicon.ico?v={{ constant('Eccube\\Common\\Constant::VERSION') }}">

バージョンを書き加える事で違う物と認識し、ブラウザにて即反映される。
また、スマホのショートカットアイコン等を設定する場合は以下
/src/Eccube/Resource/template/default/default_frame.twig

##ios
<link rel="apple-touch-icon" href="任意のアイコンの場所?v={{ constant('Eccube\\Common\\Constant::VERSION') }}">
##android
<link rel="shortcut icon" href="任意のアイコンの場所?v={{ constant('Eccube\\Common\\Constant::VERSION') }}">

EC-CUBE3のページ管理のdescriptionの文字数を変更する

EC-CUBEの管理画面からページ管理を行った際にSEO対策で行うdescriptionの文字上限数が少ないと結構指摘される。
あまり長すぎてもSEO上良い影響はないとと思うが流石にデフォルトの50文字だと短すぎる。
ここはPOSTした際にコンフィグファイルを観るので、ファイルの修正。

/src/Eccube/Resource/config/constant.yml.dist

#213行目
stext_len: 50
→これを
stext_len: 任意も文字数に

DB上はlongtextで持っているので問題はないが、簡潔にページの内容を伝えられるかがミソになる。
とりあえず100文字にして150文字にしてと足りない分を徐々に上げていく方が良いのかも。