uzullaがブログ

uzullaがブログです。

駆け出しエンジニアと幸せコンタクトは取れるか?あるいはPHPerKaigiの宣伝

ハロー、うずらです。

長過ぎるので結論から

phperkaigi.jp

PHPerの祭、PHPerKaigiが今年も3/26(金)〜3/28(日)で開催されます!チケット販売しています!今ならノベルティがついてきます

そしてそれに関連して、初学者、初心者、これからウェブ系エンジニアを目指す方や駆け出しエンジニアの方向けのプレイベントを3/3(水)に開催します!ぜひご参加を検討ください。

phperkaigi.connpass.com

f:id:uzulla:20210226191138p:plain

ここまでが本題です!

ここから以下は上記プレイベントに関する余談です。(イベントに対する事前の「お気持ち」なので、イベント内ではもっと別の話をします!)

「現役エンジニア」と「駆け出しエンジニア」が遭遇しない

これは主観であり、大げさに書いており、現実としては遭遇はおこっていると思います。ただ、私はお話した認識がありません。他の知り合いにも聞きましたが「駆け出しエンジニアで知り合いいる?」「知り合いにはいないなー、Twitterとかではみるけど」というのが結論でした。つまりあまり遭遇していないようです。

(まあ大企業の採用の人とかは遭遇してるんだとおもいますが。)なんで遭遇しないんでしょうか?

ところで「駆け出しエンジニア」とは?

どなたがつくられた言葉なのか存じませんが、キャッチーかつ、完全に地位を得たネーミングだとおもいます、すごい。日々ツイッターハッシュタグ付きで投稿する人を見かけます。大勢の人が努力しているのをみると結構感動しますね、みんな頑張っている、俺も頑張りたい。

「私がインターネットを見て思った」レベルでの定義では、大まかには新たにIT系エンジニアの職を得るために日々努力している人、あるいはその決心をした人達なのかなと思います。日々、自習やスクールでそのゴールをめざしているのだろうと思っています(拡大解釈的に、すでに現役の人も自称しているのは見かけます)。さらに狭めれば、Rails(Ruby)やPHP、VueやReactみたいな単語をよく見かけるので、おそらくWeb系が主なのかなと思います。

唐突ですが、私はウェブ系のエンジニアであり、それを生業としています。私の周りには同様にエンジニアが多数いて、日々なにかを作り続けています。よって、私や私の知り合いはいつか「今の駆け出しエンジニア」と仕事をするだろうと想像がつきます、未来の仲間になる方々ですね。

すると、いつか出会うであろう人達と話してみたい、という単純な欲求が生まれますね(後述しますが、これはエゴですけどね)。

力説しておきたいのですが、話したい=説教したいとかじゃないです。たとえば「フリーランスで1000万はないわ〜」とか(そもそも、無い話ではない)。悪い言葉遊びは「楽しい」のでそういったものをよく見かけてしまうでしょうが(よくない事ですね)そういう話ではないです。

同じ方向をむいた人と「最近どうよ?」と対話したいだけです。これはコミュニティ(後述)では普通なので、そういう発想になっているだけです。

(というか、「駆け出しエンジニア」コミュニティもそうですよね?ハッシュタグをつけて「最近やっていってるぞ!」という一種のコミュニケーションをしているんでしょうから)

f:id:uzulla:20210226190606p:plain

駆け出しエンジニアがコミュニティにいない?

私はPHPのコミュニティというものに所属しています(そう、私は考えています)。ここでいう「PHPコミュニティ」とは漠然としたもので、「〇〇会にはいっている」「✕✕に参加した」等とくくれるものではなく、「PHPに興味がある人」くらいのくくりになります。さらにいえば、別にPHPを書かなくてもPHPコミュニティに存在はできます(私の定義では)。

PHPは非常に人口の多い言語なのでコミュニティは大きく、そのコミュニティを対象に定期的にカンファレンスなどの「集まり」が開かれます。一つをとりあげれば冒頭のPHPerKaigiというカンファレンスがあり、私も例年参加、登壇(今年はテスト放送でしか登壇しませんが)し、スタッフです。それ以外にもPHPカンファレンスなどの千人〜規模のカンファレンスもあります。

で、そこにはたくさんの「PHPコミュニティに属する人」が来るのですが、「駆け出しエンジニアの人と会話してないな」と感じています。前述の通り、コミュニティには「PHPを書いていない人」もたくさんいるし、初心者・駆け出しエンジニアもいると「思って」います。しかし、お会いしません。本当に来ていない可能性もありますが、私が知り合いと話すのに熱中して駆け出しエンジニアの人とお話できてないんだろうか、あるいはトークだけ聴いて帰っているのだろうか、まあ色々想像できますがわからんというのが現在の感想です。

駆け出しエンジニアとハッシュタグつけてつぶやいている人のツイッターでフォローしている人をガーッとみると、もう全然景色ちがうんだろうなと思ってます。あー、これはなにもしないと会えないな、と思います。どうしたらいいの?

駆け出しエンジニアと幸せにコンタクトはとれるのか?

とにかくお会いできていません。しかし将来一緒に関わるであろう人と話したいんですよね。

…ところで駆け出しエンジニア側はどうおもっているかをここまで無視していますね?遠慮されているだけなら出逢えばOK!なんですが、先方が嫌がっていたら駄目ですね、私が話したいだけではエゴです。ここで「幸せにコンタクトがとれるのか?」というところにいきつきます。(考えすぎだと人からは言われましたが)

まず、(自分が現役エンジニアになってしまうと感じられませんが)「現役エンジニア」ってやつは怖い、癖がある、内輪のジャーゴンがある、等と思われがちですし、単純に避けられている可能性も否定出来ません。「成長してから話そうとおもった」というのは初心者の方からたまに聞きます、「何話していいの?」「いや、世間話からでいいのでは?」と私は思うのですが。そもそも懇親会というものが嫌いな人も多いし、廊下でいきなり話しかけるのは敷居が高い、当たり前ですね。

あるいは、「別に話すメリットがないよ!」ということも想像できます。そうですね、メリットのない人と話してもしかたない、という考えは理解もできます。

めちゃくちゃ主観でいうと、「話すと楽しいから話そう!」というのがあるのですが、余りにひどいので一旦よそにおいておいて、

もうちょっと客観視すれば、一応我々は「現役」ですので、なにか力になることはできないだろうかと少々偉そう(ヤダナー)なことを考えてしまいます。そう思っている人は結構いる…あ、我々っていうと主語がでかいな…。まあちょっと引いて、コミュニティに新人が増えることについて悪く思う人は少ないはず…です、まあ私はそうです。

(新参と会話するのに乗り気でない人もいます「人が増えるのはいいことだ、が、しかしノットマイジョブ」「人が増えるのはいいが、空気が余り変わってほしくない」みたいな意見もわかります。逆にそこの受け皿として昨今スクールなどが活躍しているとおもっています)

なんかめちゃくちゃに言い訳がましくなりましたが、「話してみたい人」は確実におり(まず、私がそうである)、さらに言えば僭越ながらなんらか手助けもしたい人も多い(ようにみえる)。

どうすれば力になれるかわかってないけど!

f:id:uzulla:20210226190749p:plain

力になるとは?

色々かんがえてみたんですが、駆け出しエンジニアの人に「何」をすれば応援できるかが見えませんでした。

これが伝わるかちょっと不安なので書いておきますが、「コミュニティに積極的な人間」は、多かれ少なかれ互助の精神を持つ方が大勢います。つまり、提供する内容はさておき助けていきたいわけです。対価なく。限度はありますが。

私なんかは話すのが好きなので、話すだけでもいいんじゃないかとおもいますが、まあもう一歩先を見据えるのも悪くない話です。

たとえば技術的なことをつたえればよいのだろうか、例えばすばらしいブログを書く?すばらしいトークをする?(それをYoutubeにあげる?)入門書籍を書く?あるいはエンジニアの人生知りたいとか、実際の労働現場を知りたいとか。

実際には「そんなものはすでに(あなたと話さなくても)山ほどあるよ」といわれるかも?駆け出しエンジニアの人はどうやら書籍やスクールに通って様々な情報を得ているかもしれません。(あとは、スクールなどにコミュニティが内包されており、そこで十分なのだ、という想像もしています)

ちゃんとした認識ができません…しかし「わからんので、コンタクトできん」というのはよろしく無い、机上で判明しないことは、やってみるしか無いですね。

(会話は「色々やってみれる」のが内容の決まったものとは違う利点ですね!相手の都合や反応に合わせてこちらも柔軟にかえられるので)

「…なんで?」

「なんでそんなに話し(?)たいんだ?カネでももらえるのか?」って思う人が多いかもしれないので、これも書いておきます。

話して(双方で)気に入ってもらえれば、コミュニティに人が増えるかもしれない。ただそれだけです。「コミュニティ」には「熱」が必要です。熱ってのは、大まかにいって賑わいです。コミュニティは流行っていない限り、放置するとだんだん人が減り、熱が下がります。そして漠然としたことをいえば熱は大きければ大きいほど良い。大きければ楽しい、技術情報もあつまる、市場規模が増える、カンファレンスの軽食が立派になる(???)。僕は多分コミュニティに対する愛が大きい方なので、そういうことを積極的にやってるだけです。

つまり私はお金をもらえたりしません!コンバージョンとかない!極端なこといえば、熱が持たれた結果カンファレンスがふえたりおおきくなったりでヘビーにボランティアすると自分の時間や金がかかります。ウケますね(修行僧かな?)

まあ〜長期的には「この言語は流行っている!」認定を得て、仕事が増えるなどのメリットもあるかも?感じたことはないですが。それは公共的すぎるし、景気をよくするとか世界平和を目指してるみたいなノリに近い。

「(情報のHubになることで)名前が売れて仕事がきたり執筆とかでお金になるのでは?」といわれたこともあるんですが…。うん、これは色々おもしろおかしく(?)説明してもいいんですが(っていうかそうでもしないとやってられんのだが)、「ならない」です。まあ「技術的な成長」をもって仕事が増える・転職に優位というのはまちがいないですが…そんな回りくどいことしないよ…。

ちなみにPHPコミュニティは流入も流出もめちゃくちゃ多く、結果の人口収支はニュートラルくらいだと思います。カンファレンスの動員数をものさしにするのがいいのかどうかわかりませんが、年で参加者数が半分になったり倍になったりはしていません。(他のだと倍も半分もあります。あと、コロナの都合があるのでここ1〜2年は役立たない)

あと、スクールがコミュニティになっていてもいずれは旅立つ母校であり、基本的にもどることはないとおもいます。しかしコミュニティは「うっすらしたもの」で、「地元」であり、生涯そこですごす人も、休みだけいる人も、出ていく人も、出戻る人もいます。

f:id:uzulla:20210226191523p:plain

駆け出しエンジニアが、コミュニティで駆け出すには?

ということで(?)最初にもどるんですが、初学者、初心者、これからウェブ系エンジニアを目指す方や駆け出しエンジニアの方向けのイベントをやってみたいなということになりました。ここに書きたかったけど書かなかった話もする予定です。ぜひいかがでしょうか。

phperkaigi.connpass.com

誠実ではあろうとしていますが手探りですし、まあ「あまりにも目耳を引かない」と何なので、就職とか、年収1000万の話題とかだしてみようかとおもいますが、とにかくファーストコンタクトです、斜に構えず礼儀正しくやろうと思っています。

本当に駆け出しエンジニアの方がきてくれるかはわかりませんが(見分けがつかない!)とにかくやってみます。よろしければご参加してみてください、そしてもしよろしければご意見をいただければと思います。

そして、「なんとなく、見ていただく」だけでもOKです(これ重要)。というのも我々がそちらを観測できなくとも、そちらからこちらを観測していただくだけでも将来につながるかなとおもっているので。

(なので、PHPerKaigiのプレイベントと銘打ってはいますが、まあ別にPHPerKaigiに興味がなくてもOKだなとおもってます)

まあとにかく結果にならずとも(なればなったで嬉しいですが)、まず怪我なく終わればいいかな!くらいの気負いでおります。

ここまでがエクストラな本題でした、ありがとうございます。

繰り返しですが、PHPerKaigiのチケットも売ってます!

phperkaigi.jp

さて、以下は「現役エンジニア」にむけたさらなる蛇足です。

「自分はこうだった」「生存バイアス」が強い話になります、ご了承ください。あと、世代や環境でも大きく変わるものですし、とにかく読んでいただいている人と完全に違った認識かもしれません(それの間違い探しのためにも前述のイベントなどをやるのですが)。

駆け出しエンジニアっていいムーブメントだなと思うこと

(このあたりは、人と話していてもコンセンサスがとれてないところではあるんですが)

現役エンジニアでもそうですけど、いやむしろ現役だとむしろ余計に「成果物」を出していくことには臆病になります。そういう意味ではコペルニクス的転換というか、成果物をださない(出してる人もいるけど、成果報告だけする)というムーブにみえておもしろいなとも思います。「やってるぞ!」って言うだけ、敷居がさがりますよね。GitHubに草生やすみたいなものか?

現役がなぜそういう事できなくなるかと言うと、強いクオリティ意識(?)みたいなものがあるのかなと思います。有名な逆ベル型の評価ですね「雑魚かプロ」

でも、いつしか「あーそんなことないな」と気づくことではあります。自分は普通、ちょっとすごい先輩も普通、『ロックスター』は依然スターですが、話してみるとただの人ですし、自分のほうが詳しい分野とかもでてきたりします。完璧超人はいない。そして9割は運。

f:id:uzulla:20210226190911p:plain

「駆け出しエンジニア」は最近生まれたわけではない

何が言いたいかといえば、現役エンジニアが「駆け出しエンジニア」にどういうスタンスを取るべきなんだろうかという話なんですが。(とる必要がある、ということにしておいてください)

たとえば、これやる必要がないな〜と個人的に思うのは、「自分たちの常識」をもっての「啓蒙」です。「あれやこれやは甘言」というのはまあそうだなって思うんですけど、ほんとに駆け出しエンジニアの方々がわかってないとは思いづらいんですよね。(期待値と現実のギャップは人それぞれでしょうが)

人間、「自分が何者であるか」「どこにむかっているか」というのがふわっとしてると何も出来ないですが、自己にラベリングすることで一定の制約をかけてわかりやすくすることができます。これが昔は「入門」「初心者」だったのが、ちょっと書き換えただけなのかなとおもっていて、初心者と違うのは「駆け出しエンジニアで頑張っている」というのを表明することが是という空気をつくられているようです。これは黙ってやるより、分かりやすくていい事だなとおもったりしています。

まあもちろん(?)取り巻くマーケ的な視点から辛辣にみれば「そういうラベリングした上で、双方のイメージを使い分け『させる』ことで、現場と断絶させ、現実との乖離を効率化してるんじゃないの?」という感想もありますが(これは前述のエンジニアの悪しき癖だな!)、それはよそに置きます(重ねていいますが、スクールは入門者を引き受けている時点で、根っこでは尊い行動だと思います)。

そもそも、価値観が同じ必要なんてないですからね、「エンジニアリングなんかこれっぽっちも好きでないが、収入を狙う」のも別にいい話だと思います、「それはしんどいぞ」とか私も思いますが、人生は運ゲーなので結果はわかりっこない。

というか自分もふくめてあらゆるエンジニアはどこかで勝手な夢をみて入門しています(※独自考察)。なので、ラベルやハデさはさておき昔から連綿と続いてきた事でしかないなとおもっていて、そこに今流行っているスタイルとして駆け出し〜があるのかなという捉え方です。

よって、彼らは「普通にウェブエンジニアを目指している人」だとおもいますし、こちらもそういうスタンスでいいんじゃないかなと思っています。なので、単に「初心者」をコミュニティに誘いたいだけでしかないんです(え?あの頃より意識ギャップがある?いやいや…昔も大概でしたよw)。

で、なにができるんだろうか?(完全に現役側の視点で)

エンジニアを職業としていくのに(主観ではありますが)なにが必要か、あるいは当時しっていればよかった、相談したかったということは、我々はある程度想像が出来ます(生存バイアス強めですが)。

そしてそれは「知ってからわかる」ことだったりしますので、「テックコミュニティにいて『得した!』と思った人」は誘ってあげたいと思うはずです(これもさらに生存バイアスや主観がひどい)。どうでしょうかね?私は誘ってみたいんですが。

ウェブ系のテックコミュニティは「受動的では効率が悪い」のはわりとコンセンサスがあるのかなと思っています。駆け出しエンジニアは主体的・能動的なのか受動的なのかわかりませんが、ツイートなどをしていることから「ひかえめな能動」なのかなと思っています。

「見てもらいたいけど、かまってはほしくはない、なぜなら面倒そうだしこわそうだから」というのはあ〜わかる〜という感じありますね。知り合いにはレスしてもらいたいけど!ファボだけついてほしい!こういうところはだれしも同じやな、と思います。

でも、さっさと話せるようになったほうが話が早くないですか?(主観)あと一歩で話す事はできるんじゃないか?と思って見ています。(無理にコミュニケーションする必要はないですし、コミュニティにはそういう「圧」はないんですけど、せっかくなので活用したら?という意味で)

f:id:uzulla:20210226191008p:plain

断絶とコミュニケーションのロスト

ただ、それでもコミュニケーションにせよ、成果物を公開することにせよ「怖い」「俺はまだ」という人はいます。それは現役エンジニアでも大差ないのかなと思います。むしろ駆け出しのほうがアウトプットしているまである。

そこで「圧倒的成果物(完成しない)をまってから」より、気軽な会話で「これどうよ」だとおもうんですよね。そういうのが気軽にできるのがコミュニティ(の一部)だと思うんですがどうですかね。

カンファレンスだって「すごく難しいことを言う場」ではないんですけど、多分そうみえちゃったりしてたりしてますよね。登壇することにギャップを感じてたりとか、フォロワー数とかで(虚像な)ギャップを感じてたりとか、なんかね〜そういうのよくない。

(と、いうとなんか「超えた人だからだ」っていわれるんですけど、みんな、超える前があるからな)

まあ〜〜、このエントリみたいな「(個々を無視して)大勢を十把一絡げにして捉えていく」のはあまりいい感じしないんですが、私にはPHPerKaigiの宣伝をしなければならないという大義名分があるのですよね!

なので臆面なくこういうことをしてもいいだろう、という事で最近おもっていたことをおおっぴらに書いてみました。(単にPHPerKaigiの参加者がふえればいいな〜という漠然とした目的を複雑にしている自覚はある)

ま、とにかく、最初にもどりますが、皆さんPHPerKaigi参加してみません?ということですね。

三度繰り返しになりますが、チケット売ってます!今年はリモート開催なので色々大変です!皆さんぜひ!

phperkaigi.jp

こちらからは以上です。

(本エントリの写真はPHPerKaigi 2020 の公式写真より 写真公開しました – PHPerKaigi スタッフブログ )

ISUCON 10 にチーム curl gottiで参加し、予選突破しました!!!!!!!

2020/09/19 追記

「ISUCON 10 にチーム curl gottiで参加し、本当に後一歩(主観)で惜敗しました!!」というタイトルを「ISUCON 10 にチーム curl gottiで参加し、予選突破しました!!!!!!!」に変更しました。

isucon.net


結果!!!!

f:id:uzulla:20200913235549p:plain

残念!!!32位!!!(御存知の通り、当落ラインは31位でした(といいつつ、学生枠があるのでまあ、そうではないし、追試Failもいるのだが、気分気分…))

(あらためて順位はでるらしいですが、まだ公式がだしてないんで、一回ふせておきます。これは22時の追試時のデータがなぜかブラウザにあったので…)

うおおおおおお!!!!おしい!!!!!!!!

今回は id:moznionid:onk と私の三人参加で、去年の屈辱を晴らすぞ!!実際32位はかなり上出来じゃねえの!!??って思うんですが…。

まあ、負けだよ!といわれたら負けですね…。

すげーおしかったな〜〜。マジで手応えアッたんですけどねえ〜〜…。

参加言語はPHPです

今回はチームメイトにお願いしてPHPで参加しました、理由は私もコードを書きたかったからです!どうせストレージが問題になるのであって、言語でそんな差がつくことはないしね(なお、私は非同期処理も準備はしていた)

結果として、アプリサーバーが足を引っ張る事無く終えました。PHP負けてないぞ(負けてます)

今回PHPのコードは(見ていただくと理解るんですが)PHPだけすごくまっとうな作りになっていて()、オートローダー周りでかなり時間を食ってしまっていました。しかしながら、これはPHP7.4をつかえばPreloadで解決です。PHPはちゃんと速いので全く問題になりませんでした。

また、メモリ効率も断然(前より)上がっているので、2GBのインスタンスであっても48ワーカーにしました、余裕です。

むしろ、ベンチが最初の方で負荷をあげてくれないのがマジで悩みどころで、過去みたいに「セール」機能がないのか!?って本当に悩んだくらいです(それがあれば、1000点伸びるのも夢ではなかった…かも)

チームメイトの話

今回自分はコードを書く、と宣言していたので、普段はOSパラメタやnginxとかをいじってるところを id:moznion にまかせました。nginxのコンフィグって難しいですよね、僕は苦手です。彼はまったく問題無く仕上げてくれたので最高です。

今回静的ファイル周りでの加点要素(ミドルウェアでの飛び道具)はあまりなかったのですが、ミドルウェア周りって本当にミスすると全員に迷惑がかかるのですが、彼はミス無く終えたということがインフラ担当としては最高だったと言えます。つかわなかったけど、redisみたいなのもバッチリしたごしらえしていて安心感がちがいました(私はPHPでRedisとかのコピペコードをつくっていた)

え、わからない?再起動試験が一回もミスなかったんですよ?わかりますか?

(すくなくとも、今回私は「Mysqlのパラメタチューンします!」っていって3回くらいテストコカしたからね?)

あとはsshの接続confとかの準備もおねがいしました。 (その間私はレギュレーションを呼んで「botを無視せよ、あと、資料請求と椅子売却以外は加点なし、つまりnazotteにsleepをいれよう(真顔」とか言ってました)

id:onkさんはモクモクと不慣れなPHPでも色々となおしてくれました。ところでイスコンってFail直すのがチョー難しいじゃないですか、テストがブラックボックスだし。ちょっとfailしてもリトライしたり、「あそこかな!?」ってなって手が止まるじゃないですか、そこで「よし戻そう」っていって速攻revertするのは本当に胆力がいることだと思うんですけど、即revertしててさすがだな〜となりました。そして id:moznionも、「そうしましょう!」っていっててこの人達はサンクコストないのか?って思った。

あと、たまに「これ、これやって」と id:onk さんがいいます。私はそのとおりにシュッと実装したらビュンと得点がのびます、すごい。やっぱりボトルネックを見抜く目というものは重要ですね。 (おかげで僕は「やったけど速度があがらない!」というのがほとんど無くて、チートだった気がします)

自分のコードの話

PHPerだから、だとはいいませんが、今回のPHPコードは普段PHP書いてない人だと結構しんどかったかもしれません(まあ普段PHPかかない人がPHP選ぶか?というのはありますが)。

onkさんのエントリにもあったんですが、DB負荷がマックスということは全員で認識できて、

「転地テーブルつくって」「はい」

「テーブル分割してアプリなおして」「はい」

という感じでした(そんで、これでパーーンと点数伸びた)

こう書くとまあ、自分がさもすごいような話ですけど、大体id:moznionid:onkさんが「これ、全く別のアプリだよね、なんで一個なの?」みたいな議論をしており、よこできいていた僕は「じゃあ(PHPerには簡単なので)DB接続分割しますわ」と、返して20分くらいで実装したんですけど「すぐにでてきてほぼ一発で通ったのですごかった」といわれたので、すごかったんだと思います(?)

そう、昨今のPHPは静的解析もきっちりきくし、PHPStormなどの支援も強いのでリファクタリングが得意な言語ですね(俺の最近の普段のしごともリファクタリングですが…)。秒でDIとPDO周りを修正するだけ!

(なんですけど、今振り返れば、DIやPDOを普段触らない人はあれむずかしかったのかもな、「db[PDO::class]ってなんだよっておもった」って言われたし)

ただ、バルクインサートの速度の都合なんですかね?initializeがシェル呼んでててウケた。

失敗したなとおもったところ

これは id:onk さんも言う通り、我がチームが前回も今回も3人司令塔みたいな所だったからだと思うんですが、

onk.hatenablog.jp

「これあかんやろ」を全員でめいめいみつけて、めいめいでやっていっており(まあ前述の通り、私は「これやって」は多少ありましたが)指示出しや、「これどうすんの?」みたいなのが多分他チームより少なかった。

これはオーバーヘッドが少ないものの、逆に「得意なやつがやる(やって!)」「わからんところを聞く(おしえて!)」というのがもっとできたかもしれないとはおもったりはする。

結局コード書く!といっていた自分が、(一声はかけましたが)Mysqlのチューニングしたりしてたり、

(まあこれは「暇だったから」ではなく、自分でメトリック見て「やります!」と宣言してやったわけだが。結果、dstatでreadゼロ、CPUもRUNが98%でサーバがHDDだった事は全く問題にならなくなった)

あとは「PHPで!」と言った事に後悔はないんですけど(PHPは今回の案件においては十分に速いし)、「実はエラーログの出し方がよくわからなかった…」といわれたときに「ああ…ごめん…」とちょっとなりました。

(そういえば、ログといえばAppArmorウザかった)

PHPはログ周りが本当にクセがあり、わからない人はマジでわからないと思う。僕はPHPのエラーハンドリング周りに情熱があるタイプなのでさっさと直したが、それをチームメイトにうまく共有できていなかったのを知ったのは、祭りのあとであった。

単純に悔いの残るところ

DB2台にわけたのをAPPはCPUが20~30%あまってたので、3台に分ければよかったですね、あと20分あればできた。(接続先を3つ用意して、サイコロふるだけだったので)そしたらいけたでしょ、しかしできなかったのでいけなかった。

自分がSQLのごく初歩が書けなくなってビビりました。前回もそうだったんですけど、緊張からか普段絶対にできる事が突然できなくなるんですよね、今回はDROP TABLE IF EXISTS Tableがかけなくて(なんで?!?!)ほんとに最初調子が出なかったです。

こういう時「あっ!呆れられたか!?俺はもっと普段できるんですけど!?」ってなってしまい、その後30分くらいメンタル下がったのですが、「普段のチームメイト」とやっているところはこういうのないんだろうなと思いました。これが心理的安全性とか、チームビルディングってやつか?(フリーランス引きこもりの感想)

PHPerまとめ

PHPは以下をちゃんと活用すれば十分に速度が出ます。そこはボトルネックではない。むしろリファクタがやりすい現代のPHPは便利。

PHPerがISUCONで使うべきツールをここにならべておく

  • preload
  • 静的解析と、それをサポートするエディタ
  • xhprof(と秘伝のタレ)
  • (Apache好きなので気に食わないがw) nginxとphp-fpm(の調整)
  • (今回使わなかったが)Redis
  • (今回使わなかったが)curl_multi(をWrapした様々)

今回の問題に限らず、素振りでもちゃんと書けばバンバン得点でてました、それが確認できたことが私の一番うれしかったことであり。そして後もうちょっとで手がとどかなかったという一番悔しい所でありました。

感想まとめ

本当に、あと一歩をのぼれなかった事をまたしばらく引きずるとはおもいますが、ISUCON運営の皆様にはこのような楽しいイベントを開催し、昨今の風評被害(主観です)にも負けず、実装言語にPHPを残してくれていることに最大の感謝をお送りいたします。

isucon.net

ISUCONは本当にたのしい、そして悔しい。

こちらからは以上です。

余談

PHPerで、composer.jsonみて「…?…???えっ…?」ってなった(わかった)人と話したい。だれか!!

費用ゼロ円でリアルタイムなログ監視(ログのプッシュ通知)をしていく

こんちわ、うずらです。

現在デプロイをしたいんだけど、できない、というつらい状態で待ち時間が発生しております。

世界の中心で愛をさけんでいますが、(検閲削除)なので、なにもできないストレスを発散しているともいいます。

本題、ログ監視

さて、みなさんログ監視していますか?特にFatalなログ監視というものは非常に重要ですね。

ログはデバッグログしかない、クレームがきてから対応すればいい、Uncaughtな例外を見ない、運用開始したら/dev/nullおくりにする、E_ALLあるいは-1ではない、といった方々におかれましては、ピンとこないかもしれません。

しかし、Fatalなログを監視することで、なにか発生した問題に先立って対応できるので(対応しないとしても、知っていて無視するのと、しらずに来るのは違います)、大変便利です。攻めの監視です。

そういったことが「いみわかんない」という方々には、残念ながら本エントリは多分やくだたないと思います。(あるいは一切エラーなんて発生しないエンジニアにも不要かなと思います)

リアルタイムログ監視とは?

正しい意味はわかりませんが、ここでは /var/log/critical.log になにかが吐き出されたら、即座に通知してくれるもの、を指します。

「一般的には」、そういったものはfluentdpapertrailなどでログ集約をおこない、ログサーバーに送信し、何らかでFatal、Criticalか判定し、プラグインなどでSlackに通知、等とするのかなと思います。かっこいいですね!

所で、現場によってはそういうものに工数やお金がでないことも非常によくあります(個人の主観です)。

しかし、パラノイアなエンジニアは、特にリリース直後はログファイルをtail -fして眺め続ける、などの行為をします。一般的には理解され難いのですが、サガというやつでしょう。

ログを眺める行為はツイッターなみに中毒性があるので(主観)他の仕事がおろそかになってよくありません。逆に他の仕事していると気づけませんね、さらにいえば最近の不安定なインターネットだとsshが切れて止まってるなんてこともあります。

もっとログの方から、直接的に教えてほしいですよね。エラーよ、オレに訴えかけてきてくれ。

boson + LINE notify

というところで、以下のようなことをぼやいたら「作れ」というレスがきました。そうですね、わかる。

しかし作るのは面倒(だいぶ自分勝手)

すると、突如技術的筋力で有名な id:moznion がつくってくれました!!!すごい!!!今度なんかおごります!!!

github.com

使い方

基本的にbosonはSTDINがきたら、ログの行を置換してボディをつくってくれるので、それをWebhookに投げる、というものです。

たぶんSlackでもなんでもいいのですが、Slackになげてもどうせ僕しかみませんので、自分のLINEに飛ぶようにしたいと思います。

LINE notify については公式Docsを見ていただくとして、とにかくAPI tokenを取得します。

notify-bot.line.me

BosonをDLします、 リリースページから自分にあったバイナリをDLしましょう、Goは楽でいいな。

github.com

あとはサーバーでscreenなどを立ち上げ*1

そこの中でこうじゃ!

$ tail -n 1 -F /var/log/critical.log | ~/boson --url "https://notify-api.line.me/api/notify" --header "Content-Type: application/x-www-form-urlencoded" --header "Authorization: Bearer {API token}" --body "message=OMG: {{ line }}" --url-encode-body-replacement

-n 1は重要で、これしておかないと本当に飛ぶ設定になっているか怪しいものがありますね。

-F も重要ですね、ログならローテーションあるでしょう。

あとはデタッチ等します!

あとはご飯でも食べに行きましょう。アラートがあれば即座にLINEに通知が飛んできます!やった!

f:id:uzulla:20200807175428p:plain

f:id:uzulla:20200807175505p:plain

これで誰より早くUnhandled Errorを検知することができ、サービスの品質が向上しますね!!(自己満足)

このためにも

ログは常時選別し、「必要なものだけ出す」「無意味な(ノイズな)ログは消す」ということを心がけましょう。

ところで私はログレベルという昔からの慣習を全く信用しておらず、目的別にログファイル自体をわけています。

なので、通知は本当にやべえときしか連続できたりしません。

なお、Bosonにはgrep機能がありますので、色々やれば大丈夫です、僕は使わないですが。

tail からパイプでコマンドをつなぐ事もできますが(たとえばgrep -vしたいこともあるでしょう)、バッファリングに注意してください(ここでは解説しません、むずかしいので)そこでミスると、いつまでも送信されないなんてことがあります。

履歴はけしていい

たまに、Notifyの会話のハンバーガーメニューから、その他>履歴削除 しておくと気分がはれやかです。

「boson自体の監視はどうするか」

そんなこと考えるなら、しっかりした基盤を組みましょう。

できないこと

レンサバではうごかんね(動くかもしれんけど)

やってはいけないこと

長期的にこれを運用するのはおかしいでしょう。そうなったらちゃんと金と工数をゲットしましょう。

これはパラノイア気味のエンジニアが「自主的におこなう」という事であり、正常な体制としてみれば「まったく正しくない」方法です。まともにしたいなら、前述の通りログコレクタをしっかりと作り込んでログ監視をしましょう。そこにお金ももらうべきですし、通知が飛ぶ時間帯を指定したりするべきでしょう。

もしあなたがマネージャーであれば、これをエンジニアに強制するのは人権侵害に等しい行為です、やめろ。あるいは自分のLINEを登録して、連絡は営業時間にしろ。

まとめ

自分みたいなパラノイアなエンジニアであれば、きっと安定稼働までは自主的にログをみてしまう(工数がでなくても!お金がでなくても!)と思いますし、その時にtailにはりつくのは非生産的です。こういったツールを活用し、もっと他の生産的活動をしましょう!!

現場からは以上です。

*1:あるいはtmuxやnohupでもいいですが