megamouthの葬列

長い旅路の終わり

フェティシストの先輩はいくじなし

私が今のように酒飲みでなく、駆け出しのPerlプログラマだった頃、先輩がいた。

私達が仕事のコードを書いている時、先輩は聞いたこともないフレームワークのテストをしていたり、英文のサイトを読んで大半の時間を過ごしていた。
たまに気が向くと、私のような新米プログラマー達にDBマイグレーションが簡単にできる方法や自作のフレームワークアーキテクチャを優しく教えてくれたりしたが、それらは全て当時の私達の理解を超えていて、正直、どう反応していいものやらわからなかった。

1

ある時、私達のプロジェクトが炎上した。
納期ギリギリで、システムが出来るには出来たのだが、挙動が不安定で、何より実行速度が極度に遅く、想定のユーザー数をさばけなかったのだ。

社長が出てきたり、顧客との悶着があったりした末、納期が再設定され、先輩がプロジェクトリーダーになり、私達がそれを手伝うことになった。

のんびりした様子で先輩は私達のコードをざっと眺めて、まずそれを褒めた。
「ちゃんとモジュール化されているし、DBコネクションが複数張られることもない」
「思ったより悪くないね」と先輩は微笑んだ。

そして、笑顔のまま、それらのコードを全て放棄した。

2

先輩が重視したのはとにかくシンプルさだった。

例えば失敗したシステムには、私が書いた拙いORマッパがあった。
Userオブジェクトを生成して、saveメソッドを呼び出すと、userテーブルに書き込まれる、といったアレだ。
先輩は「こういうのは結局使いにくいんだよ」と言って、全てのテーブルについてfetch_user、add_userのような関数を作るように命じた。(今で言うとトランザクションスクリプトだ)

また、生真面目にBEGIN、COMMITといったSQLを発行していたものを、トランザクションオブジェクトを作って、そのbeginメソッド、commitメソッドを呼び出すようにした(commitせずにオブジェクトが破棄されるとrollbackする仕組みだ)

しかし、その実装を見た私は驚いた。RDBMSトランザクションに加えて、システム全体で単一のロックファイルを使った排他制御が行われていたのだ。

せっかくRDBMSトランザクションを使っているのに、なぜジャイアントロックをするのか。こんなことをすればユーザーが何かを更新する度に、全てのテーブルの読み込みが待たされることになる。
私は当然懸念を表明したが、先輩は「これで十分」と言って聞かなかった。

こんな調子で、予定通りシステムは出来上がった。想定の性能も出て、問題らしい問題は全くなかった。


私は半ば感心し、半ば挫折した気分だった。
なぜプロジェクトが成功したのかもよくわからなかったし、何より、私達が書いたコードは全て捨てられてしまった結果がこれなのだ。
まるで、0点の答案を返されて、追試で答えだけを教えてもらって合格点をもらった。そんな気分だった。

3

先輩が会社を辞めたその後も、あの時の先輩の判断について私は考え続けた。

ORマッパについては、そもそも出来がよくなかったし、もし、使い続けていたらひよっこの私達には使いこなせないか、習得やバグ取りに時間をとられることになっただろう。
なにより私達は、fetch_userでuserデータを取り出し、update_userでデータを書き換えることに何の疑問も抱かずにすんだ。

ジャイアントロックについては、正直ずっと釈然としなかった。
実際、後のバージョンで、必要に迫られて私はそれらを全て除去した。(ご想像の通りサーバーの台数が増えてファイルロックが使えなくなったのだ)

しかし、データ不整合が起きたと聞いた時(結局、それは誤解だったのだが)、真っ先に自分の実装を疑わなくてはいけない羽目に陥った。

先輩は常に正しかった。と私は数年後に思った。

私達ひよっこPerlプログラマーという手数、次は絶対に失敗できない重圧、納期、それら全ての要因を考えた上で、全てが「ベストの選択だった」としか言いようがなかった。

4

齢を重ねた。

私の歳はとうに当時の先輩の年齢を超えている。
経験も、まあ努力の差や、私の怠惰な性格を差し引いても同等かそれ以上になるだろう。
本当なら、私は当時の先輩の境地に達している筈である。

だが、今だに私は先輩がわからない。

後輩や誰かが書いた無駄に複雑でバグだらけのコードを見ても、先輩のように全てを破棄する決断を下すことができない。
これはこれで動いている以上、どこか正しいのではないか、と、思ってしまう。

生産性を増大させる見込みのあるフレームワークアーキテクチャを見分けることができない。
新しいフレームワークを見ても、将来性や導入(学習)のコストを考えて、二の足を踏んでしまう。

私ができるのは、せいぜい、前任の某が使っていたのが回ってきたから、という理由でフレームワークを選んだり、クイックハック気味にバグを取ったり、あんまりひどい時はコードを少しリファクタリングしてわかりやすくするぐらいのことだ。

今でも私は、先輩のように、あの故郷を目指してただ一直線に突き進む鳥のように、速やかに、迷いなく、何かを決めるということができない。ただの一つも。

5

しかし、とも思う。
自分の才能の無さを棚に上げれば、先輩は一種のフェティシストだったのではないか、と思うのだ。
シンプルさやミニマルな実装に対する偏愛があっただけだったのではないか、と。

私は先輩の鮮やかな開発を見た。まるで最初から最後まで全てをわかっているような決断の速さと、狂いのなさを見た。
反面、今の私はどのような開発現場にも使える「銀の弾丸」が存在しないことも、また知っている。
納期やクライアントの理不尽さに対抗するには、手段を選んではいけない事を知ってしまってもいる。

今の私にはシンプルを愛する先輩がその後も、どんな状況でも上手くやれた、とまで言い切ることができない。

6

ダーティーなクイックハックを行う時、こういう時、先輩ならば、と私は何度も自問したものだ。
それでもなお先輩はシンプルを追い求めるだろうか?と。

おそらく追い求めるだろう。営業の虚をついて、以前のコードを全て破棄するぐらいのことは平気でやってしまうだろう。
なぜなら先輩には「確信」があるからだ。一切のバグを出さず、所定の時間で、自分の好みに実装を作りかえるぐらいわけはない、と本気で考えているのだ。

私にはついぞその「確信」は芽生えなかった。
私はただ迫り来る波をうまくかわせればいいとだけ思っている臆病なサーファーだ。

だが、プログラマとして生きていくにはそれで必要十分なことだったように思う。

風の噂で、先輩は私よりずっと早くプログラムを辞めて、ITとは何の関係もない仕事についた、と聞いた。

フェティシストは「完全」を知っている。だが、それ故に生き続けるのも難しのかもしれない。
私は「不完全」なシステム開発の汚濁を生きた。だからこそ、まだ立っている。
まあ、抜け出せなくなっているだけかもしれないのだが。


ただ今でも、私がコードを書く時、必要以上に複雑になっていやしないか、と少し怯えている背中から、私の先輩はあの時の笑顔のまま、私のコードを見てくれているのだ。


筋少の大車輪

筋少の大車輪

本当に好きなことを見つける方法

ちょっとした論評めいた物を書こうと思って、プロットから書き出してるが、最近「書く」絶対量が減っていて、文章がすっかり下手になってしまっているので、練習がてら一発書きする。


最近、何もする気が起きないし、仕事も簡単なものがポツポツ来るぐらいなので、昼寝したり、日が暮れるとマイスリーを飲んですぐに寝てしまう生活をしている。

眠ると夢を見る。
私の夢の20%ぐらいは大学絡みのもので、他の大学に入り直すためにセンター試験を受けなおしたり、昔いた大学で単位が取れないことに絶望したりする夢だ。きっと中退していることが、それだけトラウマになってしまっているのだろう。

今日は、私が美大生になった夢だった。

夢の中で私は見知らぬ女性とテレビを見ている。女性はポツリと私に言う「芸大ぐらいは出ておきなさいよ」と親に言われたのだ、と。彼女の父親は昔、油絵をやっていて、彼女が小さい頃から絵を描くのを応援した。
「今思うと、父は自分の夢を私に託したのだと思う」と彼女は言った。そしてつけ加えた。
しかしもう、絵を描き続けるのは嫌なのだ。と。

私は息を呑んで、彼女に自分も同じようなものだ、と言いかける、そこで目が覚めた。


実際の私は芸術を好んではいたが、美大や芸大に入るほど、真剣に音楽や美術をやっていたわけではなかった。
学校の進学希望の書類にも、有名な大学の就職に有利そうな、潰しの効く学部を書いておいた。
そんな私の態度を見て、担任はすこし呆れたような顔で「もっと自分が行く大学や学部について調べたほうがいい」とアドバイスした。

私は担任の言葉を鼻で笑った。その頃、私は大学で勉強する、という行為をほとんど無意味なものだと考えていた。
法学をやったからといって、弁護士になるのは一部だし、経済をやって大手企業に入ったところで、やらされるのは営業という名のお客のご機嫌取りだ、と知っていたからだ。

ようするに、有名な大学を履歴書に書けさえすれば、いい会社に入れるのだろうし、親もそれを望んでいるし、だったら好きなことをやるために、聞いたこともない大学に行くなんて馬鹿げた話だ。というのが当時の私の考え方だった。

私の家族は皆、そこそこ有名な大学を出ている。母だけが無名の地方大学を出ていた。だが、それは貧乏のせいだ、と彼女は言い張った。
「私の家が裕福だったなら、私は東大や京大ぐらいには入れた筈だ」
というのが彼女の口癖だった。なので息子である私にも「順当に」有名大学に入るよう要求した。

私はというと、そこそこ真面目に勉強しさえすればテストで良い点を取れることは知っていたので、そのうち「順当に」有名大学に入って、「順当に」大手企業に入るのだろうな、と漠然と考えていた。

当時から好きなことはあった。音楽がすきだった。プログラムを書くのも好きだった。人と話すのが好きだった。文章を書くのが好きだった。

でも、本当に好きなことがあったとしても、才能もないのにそれを生涯の仕事として探求することなど愚か者のすることだ。「真っ当な」人間は本業の合間に趣味で、ほんのちょっとその「好きなこと」の片鱗を垣間見て、それで満足するものなのだ。
つまりは本当に、人生など、安易で、クソくだらないものなのだ。まったくお母様の言うとおり、と私は考えていた。



母と私の、この世の中を舐めきったプランは、私が20歳ぐらいの時までは「順当」に進んでいた。だが、以前から書いているとおり、私は途中で契約を破り、大学を辞めた。
そして今、大手企業の営業どころか、無名のフリーランスプログラマになって、聞いたこともないような大学の出身者や、高卒の人たちと一緒に仕事をしている。


大学を辞める前後、「後悔するぞ」と色々な人に言われた。私もそうだろうな、と思った。

だが、あれから20年近い日々が過ぎ、今だに後悔はしていない、後悔するとしたら母親の口車に載せられて、自分の好きなことをないがしろにして、履歴書にして2行たらずの体裁にこだわったことだけだ。

私は今、本当に好きなことをやっているし、やってきた気がしている。
プログラミングで生計をたてているし、色々な経歴の人と話してきたし、反吐を吐くほど音楽をやった。そして今、こうして文章を書いている。

もし、私が進路調査票を書こうとしている若い自分に会ったら、こう言うだろう。
「本当に好きなことをやれる人生を考えろ」と。

だが、それも無理なことだろうな、という思いもある。18かそこそこの若者に「本当に好きなこと」を問うても、そんなものは「ない」に決まっているからだ。


自分が、それを本当に好きなのかどうか、それは好きなことをやってやってやりきった、探求の末にわかるものだからだ。


納期に追い回されながら、一日13時間ぶっ続けでプログラムを書き続けて、それでも完成せずにクライアントから嫌味を言われた時。

あるいは、フレーズの良し悪しが全くわからなくなるまで、演奏を録音し続けたのに、完成した曲が自分の心を全く動かさなくて、絶望した時。

または渾身の小説を書き上げてブログに掲載したのに、ブクマの一つもつかない時(ここ読者に対するメッセージ)

それでも、もう一度立ち上がって、それをやり続ける気が自分にあるかどうかでしか、本当に好きかどうかはわからない。


本当に好きなことを見つけるのは難しい。しかしほんの少しでも「好き」と感じたのであれば、それを見分けるチャンスが与えられたのだと考えることはできる。
人からやれと言われたり、周囲になんとなく勧められたところには「本当に好きなこと」は、決してないからだ。

なので、そういった「好き」の芽を大切に育てること、それが「本当に好きなことを見つける」方法と言えるかもしれない。


ただ、そういった人生が「幸せ」かどうかは別問題だ。好きなことを探求し続けることが、いい人生だとか、そんな事は一言も言っていないことに注意してもらいたい。

ただ、望むと望まざるにかかわらず、こういった生き方をすることで、ある種、自由で壮絶な人生を送れることは保証する。


私が、夢の中の女性に伝えたかったことはそういうことだった。と早朝の私は思った。


シフトJISを使い続ける上場企業をまとめてみた

srad.jp

こういうニュースがあった。世界のWebサイトの90%がutf-8を使用している、という。

昔、シフトJISエンコードされたPHPファイルを編集させられた時、「表示」が表示できず(文字通りの意味である)バイナリリテラルを書いていたことを思い出す。
文字コード断絶の歴史を乗り越え、世界はようやくUnicodeの元に集結したのである。

日本の上場企業のcharset指定状況

さて、美しいニッポンである我が国はどうであろうか、

www.pathfindergate.com

私は上記のサイトより早速日本の上場企業のHPのリストをダウンロードさせていただくと、さらっとクローラーを書いてHTTPヘッダのcharsetとmetaタグのcharset、ついでにDOCTYPE宣言を集計することにした。

というのは実は嘘で、去年の12月頃にクローラーは出来上がっていたのだ。この記事が出る前にとっくに私は大体の結果を知っていたことになる。
そして集計結果を見た私は驚愕した!

というのも嘘で、「まあそんなもんだろうなあ」というのが実感であった。
大したおもしろい論説も思いつかず、無理やり推論をくっつけて時評っぽく書くことも可能だったが、なんかアホらしいので放置していたのが正直なところだ。

しかしながらこれは、中年Web屋の意見なので、現在SublimeTextでコーディングしている若人なら多少の感慨があるかもしれない。
何しろシフトJISが追認される形で標準化されたのが1997年だ。
自分が生まれるよりはるか以前から使われていた文字コ―ドを今だにWebで使用している上場企業が、果たしてどれほどあるだろうか?と言われれば少しは興味が沸かないだろうか?沸かないかー

結果発表

もったいぶらずに結果をお見せしよう。結果は以下のGoogleスプレッドシートにまとめた。

docs.google.com

データは2015年の上場企業の一覧とHP URLによっている。2年の歳月のうちに経営統合した企業や、UserAgent偽装したLWPでどうしてもクロールできない企業などは除いて、全部で3592社ある。

文字コードの使用率

f:id:megamouth:20171020010824p:plain

シフトJISの使用率は15%であった。うん。個人的には意外と減ったなあ、と思うが、皆さんはいかがだろうか?

DOCTYPE宣言


f:id:megamouth:20171020010827p:plain

HTML5の燦然たる証<!DOCTYPE html>を使用するサイトは52.4%であった。その他は暗いHTML4Trasitional//ENの帳にいる。別にそれが悪いことだ、とまで言う気はない。
ちなみに"//EN"って何のことなんでしょうね。(追記:DTDの記述言語のことだそうです。教えてくれた人ありがとう!)


どういうサイトがシフトJISを使っているか

スプレッドシート内の次のシートに各企業別の調査結果が書いてある。
シフトJISの企業を少し見繕ってみよう。

日清オイリオ東証一部)

www.nisshin-oillio.com

落ち着いているが、まだまだ今風のデザインである。でもシフトJIS。ソースを覗くと、body内に埋め込まれたcssが不穏な香りを醸し出すが、CMSを使っていたりして、ヘッダを何らかの理由で固定されているページではよくあることである。

NTTドコモ東証一部)

www.nttdocomo.co.jp

最先端IT企業であるNTTドコモシフトJISユーザーである。i-mode携帯は出荷が終わったが、i-mode自体はまだあるので(多分)その対策かもしれない。i-modeユーザーがこのトップページを見ることがあるのかは甚だ疑問だが。

マキタ(東証一部,名証一部)

www.makita.co.jp

現場で使えるBluetoothスピーカーなどで有名なマキタもシフトJIS質実剛健というか、なんとなくブランドイメージと合致していて好感が持てる。

日本ファルコム東証マザーズ

falcom_ファルコムホームページ

名作ゲームを数々生み出してきたファルコムシフトJIS。理由は見当もつかない。

楽天東証一部)

www.rakuten.co.jp

シフトJISではないが、さらに少数派となったeuc-jpである。社内公用語は英語だけど、英語はeuc-jpで記述できるからね。この際us-asciiにしてもいいかもしれないね。


飽きたので総論

詳しくはスプレッドシートのほうを思う存分見ていただければいいと思う。
たまに、変な文字コードなのに見に行くと、ちゃんとutf-8だったりするが、それはリダイレクトを検知できなかったことによるものだったりする。(HTTPヘッダではなくMETAタグやJSでやられたら対応不可能なのである)
そのへんはノークレームということで。

全般的に新しい企業やIT企業はutf-8html5の組み合わせが多かった。というより現代においてはそうしない理由は特にない。
それでもシフトJISやHTML4が幅を利かせているのは、変更して何かが起こったら怖いから、とか、検証に時間とお金をかけられない、ということなのだろう。

ここで、日本企業のIT投資の弱さや保守的な性格を論じてもいいのだが、シフトJISだから、日本はダメとか言うのも根拠としてはいかにも薄弱なので、まあ日本ってそんなもんっすよ。
という感想を述べて本稿を終えたいと思う。ではまた。


プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)