暗黒大陸長野 - 長野県はITエンジニアにとっては未開の地のような風土です。長野市で起業してから廃業、再就職してその程度の低さに絶望するまで紆余曲折を繰り返した経験を赤裸々に公開していこうと思います。それでもわたしは長野で生きています。

公開日時:2021/05/14 14:37 最終更新:2021/06/10 14:27   暗黒大陸長野
IT NSEG WEB エンジニア システム開発 プログラマ プログラム 起業 技術者 再就職 長野 田舎 独立 廃業

暗黒大陸長野 Vol.1 - ここが出発点(2011-2013頃)

『暗黒大陸』とは?

1970年頃まで、アフリカ大陸は未開の部族の土地として、ヨーロッパ諸国からは『暗黒大陸』と呼ばれていた。

魂の目覚め

みなさん、長野県って知っていますか? こんなところです。

長野市の風景

もう、誰がどう見てもど田舎ですね。

わたしは長野県の北の方にある市に住んでいて、WEBエンジニアをしたりしています。

『したりしている』という微妙な表現を使う理由は結構ややこしくて今はその事情を話せる状況ではないのですが、これまでにはグラフィックデザイナーをしたり、学習塾の講師をしたり、看護助手の仕事をしたりと、結構色々な事をやってきました。

最終学歴は千代田工科芸術専門学校。成績は悪くなかったのですが『漫画家になりたい』『大学は勉強したい人が行く場所』という理由で大学進学しませんでした。結構な中二病だったんです。

当時描いたデッサン

懐かしの『写ルンです』撮影なので、露出とか全く補正されていませんからかなり薄く見えますが、木炭デッサンです。専門学校で初めてまともなデッサンを始めた割には上手いでしょう? デッサンが下手な人は『この奇妙な生物、一体何ですか?』みたいになってしまう事も多いです。※今思うと、右上のマルスの胸像は顔の立体感が足りず平面的に見えますね…。

デッサン

そういった経緯で出版社でDTP及びデザインの仕事をしていたのですが、ちょうどインターネットが爆発的に普及する時期が重なり、それに伴って印刷・出版業界が急速に衰退していきました。

ですから、家に帰ってからは勝手に一人でWEBの勉強を重ね、当時働いていた出版社のWEBサイトを完全オリジナルのCMSサイトとして大リニューアルする事を提案、了承を受け成功させるに至ってWEBプログラミマとしての第一歩を踏み出しました。

その時のサイトは少しずつ手を加えられてきましたが、今でも大体そのままの形で動いています。今から思うと相当稚拙なソースコードではありますが、各種脆弱性対応は十分行ってあったので特に問題無く動作しているようです。

ほおずき書籍

長野県長野市の出版社『ほおずき書籍』※レイアウトが崩れているのはわたしの退職後に追加された機能です。

その後は今度はApple社からiPhone、iPod touch、iPadが続けざまにリリースされて、出版業界に何度目かの『電子書籍ブーム』が沸き起こります。

これについて会社の専務が『これからはこういうのの時代だよな』と雑談で言ったのを聞き、売り言葉に買い言葉というか、若気の至りというか、血気の勇というか、『じゃぁ、やってやろうじゃないか』と一念発起、MacBook Proを購入して今度は独学でObjective-Cを勉強し、iPhoneとiPadのユニバーサルアプリを作って会社に提案しました。若いから元気だったなぁ…と、今では思っています。

これについても了承され、App Storeからリリースされました。

iOSアプリ

とにかく、出版業界は衰退していく一方でしたから、10年先を見据えてなんとか生きていく為の能力を身につけるのに必死でした。

ですが、わたしと同じ事をやれる人間は、他には居ないんです。そして、世界の技術進歩の速度が速過ぎてわたし一人が孤軍奮闘してもどうやっても時代の流れには逆らえず、下流へとどんどん押し流されていくのをひしひしと感じて悶々とした日々を送り続けていました。

このままではいけない…。

それが、7年間勤めた会社を辞めて独立するに至った理由です。

とにかく前に進むためには身体を軽くしなければならなかった。ほおずき書籍という会社を背負って時の流れと対等に渡り合うには、わたしの能力はまだまだ低過ぎたのです。

2011年の初夏の事でした。

独立直後の修行期

BtoB

受注の足がかりとしては、当時サービスが開始されて大分賑わってきていたLancersを利用します。システム開発とデザインの小さな案件を受注して顧客を獲得して、まず実績を作るという作戦でした。

Lancersは安価な発注単価のサイトなので些末なトラブルはあった物の、比較的この作戦は上手くいきました。

発注者も軽い気持ちで発注しているので、受注側としてもいつまでもその案件に縛られるような事さえなければ、手っ取り早く実績を作るにはよいサービスでした(※現在はランサー〈受注者の事〉としては利用していない為、どうなっているかはよく把握していません)。

こうして受注したいくつかのシステムをポートフォリオとして簡単なアナログ資料を作り、長野市のシステム開発会社を回って仕事を貰えないか打診する、というのが次に予定していたステップでした。

ポートフォリオ

その際に、少し変わった手法を用いました。

何をしたのかというと、いきなり飛び込み営業をするのではなく、まずハローワークに行って求人検索端末でシステム開発会社の求人を検索したのです。

なぜかというと、

  1. 求人を出しているシステム開発会社というのは
  2. 人手が足りていないはずなので
  3. 営業をかければ仕事が貰える可能性が高いのではないか?

という仮説を立てたからです。

この作戦は(当時は)見事に的中しました。

最初に飛び込み営業をかけた企業さんから、ちょうど中規模のWEB業務システムのリプレース案件を受注したが社内では人手が足りないので困っている、開発を手伝ってくれないか? と相談を受けます。

この案件をきっかけに別の開発プロジェクトも受注し、約1年半程に渡って取引をさせていただきました。ですからその間、この一社だけで割と無視できない収入を得る事が出来ました。

ただ、内容はかなり酷くて、当初の話と全く違う内容の仕事依頼になっていったり、先方が依頼した設計の内容がめちゃくちゃだったり、共同参画していた別会社A社のプログラマの書いたコードの品質が劣悪でバグだらけな上、その対応がなぜかこちらに回って来たりしてかなり難航しました。

そんな感じでそのプロジェクトが崩壊するのに合わせてわたしはその会社と距離を置き、そのうちにその会社も立ち行かなくなり、今はもうその会社は存在しません。

このプロジェクトの大失敗の際、A社が書いた劣悪なソースコードを教訓として『柔軟性が高く、堅牢で利便性の高いフレームワークの整備』の重要性を痛感します。

A社のソースコードは記述者に依って手続きその物が違っていましたから、もう、ルールという物が全くない無法地帯でした。どこで何をしているのかコードを読み込まないと全く分からないし、関数を呼んだ後、何が返っきているのかも全く分からないし、1つの関数の中に平気で100行とかコードがベタ書きしてあるし、とにかくメチャクチャという表現が適切でした。

サンプル1:A社のソースコード

わたしが改修を担当した際に証拠として保存しておいたA社のソースコードの一つがこんな感じでした。1関数に100行、深いネスト、意味のないバリデート、根本的におかしい日本語…。こんなソースコードがわたしの手元に渡された時点で既に数百万行に膨れ上がっていたので、当時改修にあたったわたしが相当イライラしていたのがコメントにありありと表れています。不具合対応で、ある程度直した上でこれですからね…。

劣悪なコード

※これで1関数…。あれもこれも1つの関数に詰め込み過ぎです。ガードを知らないので深いネストになっています。

基本的に if ~ elseifelse ~ を多用する人は技術力が低いと言って良いでしょう。else分岐は通常、実はほとんど必要ありません。

そして、技術力が低い人のコードは『これ、巻物ですか?』というくらいに、縦にも横にも長いです。必ず、1つのクラスの中にも1つの関数の中にもいくつもの処理を埋め込んでしまうので『このクラス、一体何をする為のクラスですか?』という状態になっています。(※クラス:複数の関数からなる、1つの目的を持ったプログラムの集合)

『これは○○をするクラスです、○○をする関数です』と一言で言い表せなかったら、それはプログラム設計が間違っていますね。

サンプル2:わたしが普段書いているソースコード

可読性を上げるためにオールマンスタイルを使用し、空改行を適度に入れているにも関わらず1クラスで100行未満。根本的に技術力が違い過ぎます。

わたしが普段書いているコード

※これで1クラス(4関数)。

サンプル3:別会社が書いたSQL

月締めの集計帳票出力処理が『5時間掛かっても終わらない』という顧客クレームが入り、これの調査と改善を求められた際の、A社とは別の会社の技術者が書いたSELECT文が以下です。

問題のクエリ

えーと、全て相関サブクエリで書いてありました。ちょっとこのSQL酷すぎません? 流石にこんなSQLはあんまり見たこと無いです。

本番環境の10万件の取扱商品と220万の店舗別在庫、そこに5,000件ほどのコードマスタ情報を相関サブクエリでSELECTしているため、MySQL(5.5未満)では概算で1,100兆回の照合が行われる事になります。

ためしにLIMIT 1(1件の商品のみについて抽出)してみても15分経っても終わりません。

ちなみにこれは月末締めの売り上げ報告書を作るための処理ですが、1件15分としても、1,041日かかる計算になります。つまり、1か月の売り上げ結果を出すのに3年掛かるわけですね…。

さらにこのプログラムでは、このSQLとほぼ同等のものがもう1つ実行されています。苦笑いしか出てきません。

とりあえず、SQLを完全に書き直して1店舗全商品で3分、全店舗7分程度で取得できるように修正しました。夜間バッチ等で実行すれば十分実用的でしょう。

SQLクエリって、RDBMSのオプティマイザがどうやってクエリの実行計画を立てているのか理解していないと全く使い物にならないシステムになってしまうんですよね。

銀の弾丸の構想

こんな感じで、その仕事を5年とか10年とかやっている人達よりも、職業プログラマとしては1、2年の経験しかないわたしの方が既に能力が高かったのです。これは恐ろしい事でした。

これが、当時Feijoa Prototype Framework、そして現在Pine Frameworkと名前を変えた独自フレームワークを開発するに至った理由です。

Pine Frameworkの世界

Pine Framework の世界へようこそ | striking-forces.jp

技術者の間では『独自フレームワーク』は嫌われる傾向にありますが、先に上げた業務基幹システムのような大規模開発になるとオープンソースで無料で利用出来る一般的なフレームワークでは力不足で、大抵の場合、開発が進むにつれて結局崩壊します。

PHPでいえばLaravelやCakePHPあたりが現在に於いての主要な選択肢でしょうが、あれはRuby on Railsを雛形として作られていてRoR自体が『プロトタイピングフレームワーク』という位置づけであるため、同様に、コンセプトをすぐに形にするためのフレームワークと言って良いでしょう。

ですから、簡単なWEBサイトやWEBアプリを作成するのには向いていますが、基幹システムのように大メニューが10以上あって、そのサブメニューがそれぞれ10くらいでトータルで100以上あって、更にそのサブメニューがある機能もあって…、といった感じになると、そもそもそういう事を想定して作られていないのでソースコード管理自体が破綻してきます。

売却されたEC-CUBEがSymfonyベースで作り変えられてリリースされていますが、結局崩壊していますね。この手の一般的なフレームワークは利用する側にもある程度知識がある事が前提となっていますし、システムの方をフレームワークのルールに合わせて行く必要があって、特に、WEBシステムに於いては一番重要とも言えるRDBの取り扱いに対するサポートが不十分ですから分かっていない人が使うとやはり崩壊します。

Feijoa Prototype Frameworkは、そういう巨大なシステムを破綻させず効率的に作るためのフレームワークの整備が目的でした。出発点からして目指している場所が一般的に知られているフレームワークとは違っていたのです。これが、今となっては定番とも言えるフレームワーク『Laravel』が普及した現在に於いても尚開発を続けている理由です。目的が違うのです。

その現在形であるPine Frameworkについては後日、動画などでその利便性について紹介していこうと思っています。

なぜそんな能力差が生まれたのか?

一つの理由としては、書いたコードの性質の差です。

わたしは独立直後から膨大なコードを寝る間も惜しんで書いていました。

それはシステム開発業界にありがちな『設計書の通りにコードを書く』作業ではなく、自分の頭で『どうしたらより良くなるか?』を考えながらコーディングをする仕事でした。

これはLancersでわたしが自分で直接受注したからこそ出来た事です。

設計書通りのコードを書いていると、基本的には他に良い方法があってもその通りに書くしかなくなりますし、やるべき事が決まってしまっているのでその通りに書くだけになって全く頭を使わないコーディングになりがちです。それでは良いプログラムにはなりませんし、良いシステムにはなりません。つまり、プログラマとして全く成長しません。

それが、たった2年足らずで10年ものキャリアの差を覆すまでになりました。

NSEGでの武者修行

もう一つの大きな理由、実はこちらの方が遥かに大きな理由ですが、NSEG(Nagano Software Engineer Group)に参加した事が、WEBエンジニアとしてのわたしの爆発的な成長を促しました。

NSEG

NSEG 長野のIT勉強会

NSEGについては、ほおずき書籍在籍中にmixiのコミュニティでその存在を見つけ、そこの管理者であったすのさんという方を頼って、思い切って飛び込んでみました。

初めての参加は2011年5月の第15回勉強会、これよりも前から同じ長野で活動するWEB製作者のグループid=Naganoにも参加していたのですが、id=Naganoが所謂『意識高い系』のグループであるに対して、NSEGは『本当の意味で意識高い系のガチのエンジニア達』の濃密なコミュニティで、初心者には何を話しているのか全く分からない世界でした。

こちらに過去の勉強会の概要がアーカイブしてもらってありますが、当時主流になりつつあったGitの話や最先端のWEBの仕組みの話、システム開発業界の闇の話等など、つい昨日今日業界に飛び込んだばかりのわたしには、話題に上がってくる単語の一つ一つが既に何の事を言っているのか全く分からない状態でした。

それで『これは、我ながら凄い業界に足を踏み込んでしまった物だ…』と思ったのですが、もう始めてしまった以上後戻りはできません。

分からない単語があったからといって一々質問していたら勉強会に参加している他の技術者さん達の迷惑になるので会の進行の妨げにならないよう人知れずひたすらGoogle検索して意味を調べます。それでも分からなかった事は、勉強会の後にほぼ必ずあった懇親会で聞きます。それでも分からない時は家に持ち帰りです。一人スパルタという表現が適切でした。

そんな事をひたすらくりかえしていたら、1年半も経った頃には、長野市のその辺にいる技術者よりはよっぽどわたしの方が能力が高くなっていました、というのが事実です。

NSEGに飛び込んだ時、『これがプロのプログラマの世界なんだ』と思って必死で勉強しましたが、実は、長野市辺りだと次元が違うくらいにNSEGのレベルが高過ぎただけでした。

とみたさんとの出会い

そのNSEGの中で、NSEGの代名詞的な人と出逢います。

何しろわたしは突然ITエンジニアの世界に飛び込んだので前知識が全くありませんでしたから、最初の頃は特になんとも思っていまでしたし、他の参加者さん達が「とみたさんは凄い」と度々言うのを聞いても特に何とも思っていませんでした。当時のわたしは他人に全く興味がなく、逆に言うと先のような理由で『みんな凄い』と思っていたので取り立ててとみたさんだけが凄いとも思っていませんでした。

それが、どんどん技術の事を勉強していくうちに、WEB検索するととみたさんのブログに行き着いて問題が解決する事が頻発するようになります。

『あれ? この前もとみたさん見た』『今度もとみたさんだ』、ここに来てやっととみたさんがどんな人なのか気になり始めたところにとみたさんがTwitterで妙な事をつぶやきます。

現在 MySQL を日本語で使えてるのは私のおかげなので、みなさん私に感謝してもいいのですよ。

これを初めて見た時は申し訳有りません、『あ、この人は頭がおかしい人なんだ…』と思っていました。

でも違ったんですね。とみたさんは実は、本当に初期の頃のMySQLに日本語のようなマルチバイト文字に対応可能なパッチを作成して公開し、それがMySQL本体に取り込まれたんだそうです。ガチの意識高い系エンジニアの代表格でした。

とみたさんのTwitter

とみたまさひろさんはMySQLコミュニティの成長に尽力したとして第8回日本OSS貢献者賞を受賞されています。ですから、それでなくとも非常に広範な知識のある方ですが、特にMySQLに関しては普通の技術者さん達に比べてちょっと詳しいです(笑。

参考:OSS貢献者賞を頂いたので昔話をします - tmtms のメモ

そして、とても優しいです。わたしは言ってみれば野良ですし、物怖じしていてはやっていけなかったのでかなり無礼な事もあり多くの技術者さん達には少なからず嫌われていますが、とみたさんはいつでもわたしに対してとても紳士的で優しく、何を聞いても誠実に対応してくれました。

とみたさんに限った事ではないですが、基本的にNSEGに参加していた皆さんは優しいです。分からない事があっても、きちんと自分で調べた上で不明点を聞けば親切に教えてくれますし、門外漢のわたしに対しても邪険に扱ったりはしませんでした。

みなさん、とにかく技術の事が大好きで、技術に対して誠実に向き合っている方達ばかりでした。そうでない方はNSEGに参加してもすぐに去っていく感じでしたね。最近までずっとそれが普通の事だと思っていたのですが、実は、そうではない人の方が遥かに多いのが今の日本のIT業界であるという事を痛感しています。

ですから、そういう人達の中で揉まれて、わたしは知らないうちにかなりの実力をつけていくことになりました。ですがそれが、長野のような未開の部族の村社会では命取りになって行きます。

まとめ

この記事では、わたしが何故WEBエンジニアになったのか、そしてWEBエンジニアになった当初はどうであったのかを記しました。

当初は些末な問題こそあれ、順風満帆であったようにも見えます。

ですが、暗黒大陸長野は、想像の枠を超えて来ます。その詳細については、今後の記事に記そうと思います。

※このシリーズに記載されている内容は些末な事を取り上げて大げさに語っているのでは無く、膨大に起きていた杜撰極まりない一般企業体制のほんの一部でありサンプルです。ほぼ全ての事象は詳細に記録されていますので異議申し立て等で必要性が出た場合にはそれら全てを公開します。

記事リンク