megamouthの葬列

長い旅路の終わり

中年IT人材おじさんの平穏

IT人材が不足してるんだって。零細Web制作会社で言えば、退職者が残したubuntu12サーバーに眠るRails5アプリをすぐにDDDでマイクロサービスに再構成して、jQuery満載のコードを全て読み下したうえで、フロントエンドをReactかなんかのSPAに全部書き換えて、E2Eを含めた自動回帰テストを整備して、ついでにCIも整備して、k8sにデプロイできるようにして、ドキュメントは小まめに残し、職場の心理的安全性を落とさず、飲み会にはかかさず参加、役員との関係も良好で、定期的な勉強会も開いてくれて、それでも残ったプライベートの時間を最新の技術動向やセキュリティ情報の収集に全量突っ込んでくれる、そんなごく当たり前のエンジニアが不足している。ついでに言うと、人類の原罪を一身に贖ってくれるスキルの持ち主も不足しているらしい。多分、我々はもっと求人サイトに金を払うべきなんだろうね。

同業者から、どうすれば採用できると思う?とさえ、最近は聞かれなくなった。何やっても取れない、というか中小、零細企業ができる妥協や努力の範囲内のことは全てやって、それでも取れない、ということが、もうわかっているから、みんな、とっくの昔に退職した女子社員の写真が載っかたままの求人をGreenに掲載し続けて、ただ一心に奇跡を待ってる。たまにスクール卒の未経験の子がやってきて、提示された給与にがっかりしてるけど、君を採用しても売上げや粗利が向上する見込みがないんだから、今出せる範囲がこの金額なわけでさ、これだってちょっとは色をつけたんだよ!?年収600万だって?役員でもないのに何言ってるの?次だ、次。株を守りて兎を待つ、奇跡は起こるんだよ、韓非子だってそう言ってる。


どうしてこんなことになったんですか?とはあまり聞かれない。知ったところでどうなるのか、とは思うし、本当のところ私もよくわからない。自分が大事にされなかった記憶を元に、適当な因果話をでっち上げることはできるけど、多分それも真実のごく一部でしかない。それで良ければ手短に話すけど、例えばPHPが外部通信できない問題が全然解決しなくてサーバー構築担当のインドの会社と通訳入れたテレビ会議するからっていきなり会議室に呼ばれて、1時間ぐらいたった後に、「SELinux入ってます?」「Yes!」「ディフォルトのまま?」「Yes!」じゃあ通信できないよね、という話をした私の給与はプロパーの半分だったし、なんならインド人より低かったかもしれない。ビジネスの意思決定に関与していない生産マシーンである以上これは仕方ない。これで明日も頑張って仕事しよう!って思える人だけが今もIT人材不足の謎に挑んでいる。頑張って欲しい。わかったら教えてね。


私個人の話で言えば、最近のトレンドは平穏。ACのCMで「おおらかな気持ちでいることも、りっぱな公共心です。」というのがあって、地位向上とか見合った報酬とか、そういうのを求めて闘うよりも、こういう社会の流れに逆らわず、ずっと余裕を残して、やわらかい心を持つほうが、みんなの利益なんじゃないかなあ、と思ってる。イライラインフラエンジニアのチクチク言葉とか嫌でしょ?そりゃそいつのスキルが多少はビジネスに寄与している面はあるかもしれないけど、全体最適化としては心に余裕のあるニコニコ定時退勤おじさんのほうがずっと有益だと思うし、窓の外を流れる雲を眺めて、一日中のんびりTypescriptの型ソリティアやって、新人が困ってたら、ホッホッホとアドバイスして、退勤30分前には通勤鞄を机の上に載せて、今日は何食って帰るか悩んでみたりする。とても穏やかな日々。

まだ闘ってる生き残り管理職氷河期おじさんに言わせれば、怠惰は敗北者に残された最後の報復手段なんだってさ、ひどくない?
全然そんなつもりはないんだけど、結婚も、家族も、家も、まともな老後も、敗者には存在しないんだからね、激痛に晒されながら不潔な部屋で吐瀉物に喉を詰まらせて死ぬのだって自己責任だからね、結末が決まってるなら今のうちから帳尻を合わす努力ぐらいしないとね、「斯くしてこうなった」としないと、示しがつかないってもんだよ。なあ、君もそう思うだろう?

事業のわかるITエンジニアはどこにいるのか

「事業のわかるITエンジニアが全然いない」問題というのがある。
Twitterあたりでは割と禁句というか、ほぼ確実に荒れる話題で、言えば燃える。
誰かの言葉を引用するのも差し障りがあるので、頑張って再現してみると

エンジニアは文句ばっかりで、マネジメントやビジネス・プロセスを変えようともしない。文句を言う前に偉くなって自分でビジネスを変えるべきだろ。エンジニアが変えなくて誰が変えるんだよ。

みたいな感じだ。

どっかの経営者や、平日昼間からツイッターしてていつ仕事してるかわかんねえ系の人が、よく口走ったりブログに書いたりする。すぐさま、場末のSESで汗水たらしているプログラマっぽいアカウントが(これまたなぜ昼間からツイートできるのかわからない)「うるせえ、手取り23万でそんなことまでやってられるか、第一お前らだって技術のことわかってねえだろ」と四方八方から引用RTでボコボコ殴ってくる。
何度も何度も繰り返されているので、年末の忠臣蔵みたいなもんなんだろう、と思っている。誰にも相手にされなくて寂しい夜にはおススメかもしれない。


この文脈で言う「事業のわかるITエンジニア」つまりは、偉くなって経営に参画したITエンジニアは別に珍しくもなんともない、とすぐにわかる。単純化すれば「決算書の読めるITエンジニア」のことだからである。

有名どころでは、任天堂の故岩田社長はHAL研究所の天才プログラマだったし、ホリエモン堀江貴文氏も若い頃はチマチマPerl書いたり、秋葉でサーバー買ってくるみたいなことをしていた。現役だとさくらインターネットの社長なんかが典型的だろう。
ベンチャー界隈を見れば転職サイトの検索条件に「社長がエンジニア」というチェック項目があるぐらいにはウヨウヨいるし、そこそこの規模の開発会社に行けば、ITエンジニアの執行役員ぐらいすぐ見つかる。
彼らは事業や経営を理解してないのだろうか?粗利も原価計算もできない技術バカ一代でその地位を築いたのだろうか?そんなわけがない。
いるところにはいるし、いなければ、社内の優秀なプログラマを、財務のプロと組ませて一度決算書でも作ってみればいい。それで「事業のわかるITエンジニア」の一丁上がりである。優秀なエンジニアは簿記を理解できないのではなくて、理解する気も必要もないだけなのだ。


炎上狙いではなく、素朴に「事業のわかるITエンジニアが全然いない」と言っている人は、ITから縁遠い人が多い。
彼らの身近なITエンジニアは社内SEか、下請け企業のプログラマだろう。ヨレヨレのTシャツでリモート会議に出てくる彼らが、あまりにビジネスを理解しないで、納期を引き延ばす口上ばかり述べるので、やれやれ、と頭を振りながら、「もったいないな」と純粋に思っているのだ。
ビジネスを理解したら、君たちが持っている知識で事業を創造したら、君たちは年収1200万貰えてハッピーだし、僕たちもハッピーになれるじゃないか。と素朴に考えているのである。

そういう人に「事業のわかるITエンジニア」のイメージを尋ねてみると、当のITエンジニアからは、どう見てもコレジャナイ感が漂ってる人を例示してきたり、実際に連れてこられて困惑することがしばしばある。

僕は天才ITエンジニアなんですが、日本はここが遅れてるんですよね、みたいなことを、TVに出演して、真っ暗な背景を背に立ち食いそば屋みたいなやたら小さい椅子に座って、見えないロクロを回している感じの人である。
よくよく調べてみると、これといった論文もなければ、とりたててOSSになっている業績もない、その筋のコミュニティでは全く知られていないか、せいぜい「あーあの人ね(笑)」ぐらいの扱いをされている人で、ようするに異様に口の上手くて投資家筋にコネのあるITエンジニア風の謎紳士である。(目を離した隙に、プログラミングやセキュリティの基本的なことをわかってないツイートをして、いつのまにかボッコボコにされてたりするから油断できない)
違う、そうじゃないんだ。と言いたくなる。


一つの視点では、彼らは「事業のわかるITエンジニア」ではなく、「夢を語って経営に参画してくれるITエンジニア」を求めているのかもしれない。それは確かに数が少ない。
なぜなら優秀なITエンジニアは夢を自信満々に語ったりはできないからである。優秀であればあるほど、現時点では姿形も見えない巨大市場を語る勇気をなくすのがITエンジニアだからである。

少し説明しよう。都合上、「夢」=事業創造=潜在需要の発見として話をする。

ネット広告は、SNSは、動画サイトは、30年前は姿形もなかった。何もない砂漠の一角にすぎなかった。そこに資本と高度な技術がドバドバ流し込まれて、今日の巨大な都市が成立したのだ。

ここでは、莫大な油田を掘るためのボーリングマシンとしてIT技術が使われている。優秀なITエンジニアは単体で、地中深くの原油に到達できる鋭い杭を持つ、と考えられている。
地面を掘る前に、立ち止まってみよう。まず事業創造には需要が必要である。何も存在しないところに供給のための資本を、油をくみ上げるための呼び水を流し込むにしろ、それに応ずる需要が結局ないのであれば、それはただの浪費である。流し込んだ費用は、砂漠に小さなシミを作って終わる。私たちは原油が眠っている場所を探す必要があるのだ。

ITエンジニアの世界観では、油田は、潜在需要は、canの辺縁にあると考えられている。

世の中には「出来る(can)」と「出来ない(can't)」があり、「出来る」が描く真円が日々着々と広がっている中で、その円周のどこか一点で天高く黒い油が噴き出す、というイメージだ。
ソニーウォークマンの成功を思い起こしてみよう。トランジスタメカトロニクスの発展が、「出来る」の円が、じわじわと広がって「携帯できるカセットプレイヤー」に到達したとき、まさしく今日の「歩きながら音楽を聴く」需要が掘り起こされたのだ。

ITエンジニアとは、常に「出来る」「出来ない」を問い続ける仕事である。彼らの不断の努力はまさに「出来る」を広げることのみに特化されており、円の外側に向かって全力疾走している彼らが振り返ることは基本的にない。
だから、誰でも簡単に「出来る」ことを、あるいは既に存在して、それほど成功していないことを、円の内側のある地点を、ある日突然巨大な資本でぶん殴ってみたら油が沸いた、という話は(実際ゴマンとある話なのだが)残念ながらITエンジニアの視界にはない、のである。

さて、「出来る(can)」の辺縁にある需要のことだが、今、あらゆる円周上に立っているのはたいていGAFAMのエンジニアたちだ。日本のIT企業でそこに立てている人は数えるほどしかいない。そしてそのことは日本のITエンジニアの誰もが知る「常識」であり、自分だけは例外であると考える向こう見ずが生き残れる業界でもない。

だから優秀なITエンジニアは軽はずみに夢を語らないのである。彼らが語り得るのは、せいぜいが確実に投資が回収できそうというだけの、あるいは個人的にチャレンジングなだけのごく狭い領域であり、日本の土地全部買うたる的な「夢」とは似ても似つかないのである。


結局のところ「事業のわかるITエンジニアが全然いない」と嘆いている人の原因は、「事業のわかるITエンジニア」の定義を間違っているか、その人の視界に入ってないだけ、ということなのではないだろうか。



追記:
誤字直しました。ごめん

パラノイアのプログラマと第6感

今だから白状すると、昔、運営していたサービスの一般ユーザーのパスワードをハッシュ化(暗号化)せずに平文でDBに保存していたことがある。

言いわけは、幾つかある。
一つは、今では当たり前のようについているパスワードリマインダーの仕組みが当時は一般的ではなかったこと。
ユーザーがパスワードを忘れた、と問い合わせしてきた時に、最も自然な方法はまさに当人が設定した「パスワード」を一言一句違わず登録メールアドレスに送信することだった。あなたのパスワードは○○○です。ああそうそう、そうだったね。こういう感じだ。
当時のユーザーはそれを不審がらなかった。
またサポートコストの問題があった、パスワードの再発行を、そのためのトークンを含んだ長いURLを、大半のユーザーが嫌がっていた。
サポート部門はOutlookExpressに表示された長すぎるURLのリンクが途中で切れててクリックできない、という苦情にいつもうんざりしていた。だから僕たちは、"taro1234"とか”ilovepoosan"とかそういった間抜けな平文のパスワードを、いつでもメールで送信できるように、そのまま格納していた。
三番目は、僕が入った頃には、もうそのようにシステムが実装されていたことだ。それよりも重要なことは僕たちが、リスクを声高に主張して是正することまではしなかったことだが、それは単に面倒くさかったからである。せいぜい次のバージョンアップでやればいいと思っていたのだ。
とはいえ、そのサービスにバージョンアップの機会はなく、無数の思いが詰まった平文パスワードとともにサービスは終了した。


それから10年ほど時間がたって、宅ファイル便の情報流出があった。
「なんと」パスワードが暗号化されていないことがわかって、コテンパンに叩かれた。
無数のプログラマが呆れてオージス総研のエンジニアたちをTwitterで血祭りに上げている最中、前述の過去がある僕は何も言えなかった。宅ファイル便もけっこう年季の入ったサービスだったから、きっとハッシュ化したかったんだろうけど、できなかったんだろうな、とだけ思った。

品質は死活問題だ。特にセキュリティ品質はサービスの命運を左右することさえある。クソどうでもいいポエム投稿サービスでさえ、セキュリティ品質を疎かにすることはできない。僕たちはそういう教育を受けてきた。

だから、後に大手SIerの孫請けで某政府機関に関わるシステムに関わっていた時も、あらゆるリスクを考慮してプログラミングした。扱うのはポエムではなかった。国や自治体の重要な情報だ。僕たちはパラノイアのようにプログラミングした。


リリース直前、元請けから不思議なExcelファイルがやってきた。セキュリティチェック項目表というシートがあって、簡単に言うと、あなたの作ったシステムで以下のセキュリティホールへの対策をしているか、「はい」か「いいえ」で答えなさい。というものだった。

SQLインジェクションはできないようになっていますか?→はい
XSS脆弱性の対策はしていますか?→はい
CSRF脆弱性の対策はしていますか?→はい

はい、以外に答えようがあるのだろうか、と思った。「CSRFですかーあるかもしんないですねー」と軽い調子で答えてみたらどうなるだろう?と思ったけど、多分一悶着があった後で、「修正してください」と言われるだけだろう、ということは容易に想像できたから、僕は正直に、全ての対策が万全であることをExcelファイルに記入した。そして、本人が見逃した脆弱性の責任は誰が取るのだろうと考えた。

あるいは、このように言質をとっておいて、大手SIerの特別セキュリティ査察チームがペネトレーションテストを行って、僕たちの見込みの甘さを暴く、という演出なのかもしれない。と思った。「意図しない文字コードを混入した場合、SQLインジェクションが成立しますね」と黒いスーツに身を包んだ、いかにもなエリートの外見の美女に個室で説教されるのかもしれないとも思った。

だけど、その可能性は皆無だった。納期は2週間後だし、元請けがコストをかけて自分から納期に間に合わないことをするのもいかにも不合理だったからだ。
だから、言いたくはないが、儀式のようなものなんだろうと思った。何かあった時に、ベンダーが大丈夫だと言ったんです!私たちも騙されたんです!と言いたいための。

ある時などは、明らかに対応していない設備(IDSとかだったと思う)を導入しているかのチェックがあった。
僕は当然言った。
「そんなの見積もりにも入れてないし、もちろん設置されてもないから『いいえ』にしますね」
Excelシートを手渡した。営業が頭を抱えて言った。
「ここ・・・・・・何とか『はい』になりませんか?追加予算はないんですが」
なりませんよ。と僕は冷たく返した。

その後色々あって、チェックは合格して、システムは完成した。IDSは最後まで姿形もなかった。何があったかは察してほしい。

たまに、コンサルを雇えるぐらいの金持ちクライアントがやってきて、外部機関によるセキュリティ診断が実施されることもあった。いよいよ僕たちも年貢の納め時かな?と様々なマニアックなハックに対する準備を進めていると、60ページぐらいのPDFが送られてくる。
立派な装丁の「セキュリティチェック診断結果(社外秘)」に目を通すと、URLごとに自動生成されたレポートページが飽きる事も無く続いていて、主な問題は、Webサーバーが脆弱なDESを含む暗号化スイートをサポートしていることを教えてくれる。なにしろ全ページにわたって同じ指摘があるのだ。
もちろん大事なことなのだが、僕たちにではなく、IE8サポートしろっていったクライアントに言ってくれるのが一番なのは間違いなかった。

大手のシステムになればなるほど、こういった儀礼的なことが増えていった。多くの場合、システムのセキュリティを担保しているのは現場のエンジニアの経験と勘のように思えた。彼らがボトムアップしなければ、致命的な問題が最後まで残っただろう、ということを幾つか見聞きした。
だけど、そういったセキュリティに強いエンジニアが長持ちすることはなかった。彼らもまた十把一絡げのエンジニアとともに契約を終了され、現場を渡り歩いて、そのうちどこかにいなくなった。代わりに入ってくるのは新米で、僕たちは彼らをパラノイアに育てあげようとするのだが、彼らの大半はパラノイアになる前に、もっと割のいい仕事を求めて辞めてしまう。

僕はこの調子でまともなエンジニアがいなくなったら、今に「大変なこと」になると思った。実際、ここ数年の話だけでも、あらゆる仮想通貨取引システムがハックされたし、大量の個人情報が漏洩してしまった。絶対に安全だった銀行の口座から他人に金を引き出されるようなことまで起こっている。マジに「大変なこと」だ。

だが同時に気づいてしまってもいた。「大変なこと」はしょっちゅう起こっている。でも、それで世界が終わってしまったかというと、全くそんなことはなかった。やらかした企業の屋台骨すら、揺らいでいない。実際に起こったことは役員が記者会見で頭を下げ、被害者に500円のクオカードを配って、それで全部だった。そう、それで、終わりなのだ。

僕としては「大変なこと」が起こったら、サービスは終了、経営者は引退に追い込まれ、PMはじめエンジニアたちもまた相応の責任をとらされる、そういうイメージを持っている。そういう気持ちでプログラムを書いている。
でも実際にそれが起こったら、決してそうはならない。最近は特にそうだ。宅ファイル便が終わったのだって、責任を取った結果ではなくてリプレースできないレガシーシステムを切り捨てる口実にされたように見える。

なぜこれほどまでに致命的なことが許されてしまうのだろうか、と思う。やらかした会社はみんな、精一杯がんばったけど、悪い奴に裏をかかれた、どうしようもなかったみたいな顔をする。でも内情を知っている僕が推測するに、普通のITエンジニアの考えるギリギリ及第点のセキュリティ基準すら、満たしている会社はわずかだろう。彼らは往々にしてシステムを1行書き換えるのに3つの判子が必要な体制を誇るが、もちろんそんなものには欠片も意味がない。

一つ推論をたてることはできる。資本主義と競争の観点でセキュリティリスクを評価すればまずまず説明ができるのだ。

ある会社のセキュリティ品質がめちゃくちゃだとしよう。事故も起こったとしよう、しかし、その会社は潰れない。経営者が1ヶ月ほど頭を下げて回って、切腹最中を取引先に配った以外、特に何もしなかったが、すぐに日常が戻ってくる。
それは大なり小なり、全ての会社で似たようなことが起こっているからだ。競争相手の内情も似たり寄ったりだからだ。
コ○ンチェックがヤバいからって他の業者が安全な保証はまるでないし、Adobeが気が遠くなるほどの数のパスワードを漏洩しても、僕たちがみんなCreative Cloudを解約して、コーレルのPaintShopProを買うわけじゃない。
会社として、経営として本当に「大変なこと」というのは、ドメスティックな競争に敗れて市場から退場させられることであって、実社会に取り返しのつかないダメージを与えようが、何十億もの金が闇に消えようが、それ自体は経営的には「大変なこと」でも何でも無いのだ。

僕の見当違いはここにあった。僕が見逃したシンプルな事柄は、ある品質の宇宙が縮小しつづけたところで、その収縮が著しく偏在しない限りにおいては、特に何の問題もない、という事実だ。デフレ世代の僕でも、そんなシュールな原則は認めたくないが、それが真実なのだ。


一介のプログラマがセキュリティに関してパラノイアになる意味あいはあるのだろうか?もちろん、セキュリティコンサルタントや、その手の職業につくなら意味のあることだと思う。しかし、そうでない場合、あまりにも心的負担と労力が釣り合ってないのではないだろうか?

世界が、母なる海に向かって流れる水死体のように、まどろみながら、どんどん下流に落ちていく。
僕たちは安いサラリーで、自尊心を守って、命を削っている。それはまるで夢の中で徒手空拳を繰り出すみたいで手応えがない。
それでもやるべきなんだろうか?それは報われる仕事なんだろうか?

そんな時、徳丸先生ならどうしますか?