<y>

Splatoonプレイヤー兼Webエンジニア

ブログ移転します

タイトルのとおりです。

移転先はこちら

移転理由として

程度です。特に深い意味はないです。
このアカウントで購読していたブログはサブアカウントの方でも購読しますし、友達だったアカウントにもまた申請します。

戒文書

思考の垂れ流し

  • この記事は、自分がとあるツイートを見て思ったことを垂れ流しただけです。完全に自分の考えで、所属する団体等は一切関係ない個人的な思考です。

なんでこんなものを書いたか

  • どうしても気になっていろんなことを考えた結果、自分は自分以外のことに対して興味を持ちすぎており、それに対して割くリソースが多くてもったいないという経験をしたことを記録しておきたかったからです。
  • 結論としては、自分以外のことを気にして首を突っ込んでいる暇があれば、自分磨きをしたほうがいいということを再確認しました、という感じです。
  • こういうものを書いているときって大体精神的に不安定で、自分の実力不足とかそういうものに苛まれていて焦っているだけです。また戯言ほざいてるな、くらいの生ぬるい目で見てやってください。

↓のツイートについて

  • 最初の自分の考えは、このツイートについて同意だった。エンジニアになりたい理由がリモートワークしたいからってマジ?ふざけてんな〜と思った。というのも、そういう節がある友人が何人かいるから。
  • だけど、他の人の意見は結構違っていて、「エンジニアになりたい理由がリモートワークしたいからで何が問題あるの?」だった。自分はその「問題」を明確に答えられなかった。
  • どのみち合わない奴は自滅していく、と言われて「自滅するまでの間に周りに迷惑をかけてほしくない」と答えたら、それは採用した企業の採用担当者の責任と言われて、「確かに」となった。
  • でもまだ腑に落ちていなかった。原因は分かっていて、面倒くさいんだけど自分の謎のプライドとか自尊心だとか、そういった類のものだと思う。つくづく自分という人間は面倒くさい奴だなと思う。
  • 自分の周りにWebエンジニアになりたいって言っている人間が何人かいるけど、自分の感覚で、その中にはエンジニアに向いていないと思っている人が何人かいる。あくまで自分の感覚では、の話だけど。
  • その人達に共通しているのが、「リモートワーク or フリーランスで働く」というものだった。いやまあ気持ちはわかるんだけど、なんでエンジニアにもなってないのにそんな簡単にリモートワークできたりフリーランスになれると思えるんだろう、という気持ちになった。マジでお前何様だよ、という感じだけど。でも思ってしまったのでここに書いています。

周囲に振り回されすぎ

  • 個人的な意見だけど、目的は「成果を出す」ことで、それに対して働き方の自由っていうのは、余計な時間の浪費や通勤による体力の消耗をしないことで目的を達成しようとする「手段」だと思う。
  • リモートワークすれば毎日出勤するよりも楽だし成果を出す上で邪魔な要素が減る、というのはとても良くわかる。が、前述の人達って、リモートワークが「手段」じゃなくて「目的」なんだよな、と思うなどした。
  • で、リモートワークを目的としてしか捉えてない人達ってなんかエンジニア舐めてる気がしているんだよね。本人たちがそういうわけじゃないとしても、俺にはそう見えてしまう。いや本当に書いてて何様だよと思った。今。クソみたいな性格だな。勿論「気がしているだけ」なので、たぶん勘違いだと思う。
  • リモートワークを目的にエンジニアになってそこから才能が開花して優秀なエンジニアになる可能性もある。なってみてやってみないと分からないのに、自分は性格が悪いから「そんな人達には最初からエンジニアにならないでほしい」と、心のどこかで思っているんだろうな。
  • リモートワークが目的でエンジニアになりたい人がいて、で自分のように「そんな奴おるんか」みたいな考えの人もいる。これどっちが悪いとかではないと思う。人の考え方は人の数だけあるし。だけど、たぶん自分みたいな人って無駄な労力を消費しているんだよね。
  • 無駄な労力っていうのは、そんな自分にとってはあまり影響がないような他人のことでいちいち苛ついていることを指す。だって自分のことでもないのにわざわざイライラするなんて完全に無駄なことだよね。
  • イライラしたところで、その人達を止めにかかるようなことはしないし、さっきも言ったとおりその人達の眠れる才能が開花するかもしれないのに、もし変にそういう人達を抑圧してしまったら、逆に才能を潰してしまう可能性すらある。
  • ということはイライラするだけ無駄。じゃあどうやってイライラしないようにするかというと、自分の意見を変えるか、そもそもそういうのに対して自分の意見を持つこと自体をやめるかのどちらかだと思う。
  • ただ人の意見なんてそう簡単には変わらない(さっき意見変わったかなと思ったけど無意識下では変わってなかったからこう言える)ので、となるともう意見を持つことそのものをやめるほうが手っ取り早い。
  • で、意見を持つことをやめる手っ取り早い方法が、「興味を持つことをやめる」ことなんだよね。興味がなければ意見なんてわかないし。

周囲のことを気にしている暇があったら自分を磨け

  • これは今までの文とはあまり関係ないけど、自分の悪い癖で、自分以外の他の人のことが気になってしまうというのがあるんだよね。これ自分のことに対して集中できないし、他の人の動向で一喜一憂してしまうというデメリットがある。
  • たぶん承認欲求とか自己顕示欲とか、そういったやつです。クソめんどくさいですね。
  • 冷静に考えて、自分の人生なのに他人の影響で自分の制御下じゃない部分で一喜一憂させられるのってクソムカつかない?という話。だって自分の意志や行動じゃない部分でイラつくというか、むしろ自分から首を突っ込んでイラつくなんて、それこそ時間の無駄だしイラつき損だよなと思う。
  • そんなことに自分のリソース割いてる暇があったら自分の好きなことややりたいことやってたほうが明らかに有意義。
  • 自分を見失わないで、本当に今自分がやりたいことをやれていて有意義か?をもっと意識したほうがいい。そしてそうするためには、他人への興味をもっと失いたい。そう思った感じです。

おわりに

  • これを書いてわかったことは、自分の性格の悪さと、性格ってそんな簡単には変わらないよなということと、変わらないのであれば別のアプローチをとるしかないなということと、もっと自分磨きに集中しろということと、こんなことばっか考えてるから無駄に疲れるんだ、もっと自分のことだけを考えて生きたほうがいい、ということです。

ES6におけるimport/exportメモ

ちゃんと知らなかったので、自分用にメモ程度。もちろん同じことを説明してる記事はたくさんあるけど、自分の言葉で書いてみることが大事だと思っている。
間違いとかあったらご指摘いただけるとうれしいです。

概要

  • ES6から搭載された、JavaScriptにおけるモジュール機能。今までは機能を分割するという概念がなかった
  • commomn.jsやnode.jsではrequire関数が定められ、import/exportに似た機能は他のライブラリなどでは実装されていた
  • ようやくこれらの機能が言語仕様として実装された

modules (import/export)の使い方

  • modulesの概念では、別のファイルに渡す変数や関数のことを「モジュール」と呼ぶ
  • 複数のモジュールを別のファイルに渡す際は、exportすることで呼び出し元で扱えるようにする
  • 呼び出し元ではimportを使うことで、そのファイル内でモジュールを有効化できる

Named export (名前付きのモジュール受け渡し)

  • 以下のmodule.jsで、外部のファイルで利用できるようにexportする
  • アロー関数の書き方、return文や括弧の省略などは以下を参照

developer.mozilla.org

// module.js

export const myStritg = "myString"

// ES5の古い書き方
// export var mergeString = function(str1, str2) {
//  return str1 + str2
// }

// ES6のアロー関数を使った書き方
export const mergeString = (str1, str2) => `${str1}${str2}`
  • 以下のmain.jsで、モジュールを利用するためにimportする
  • importの構文は、import [importするファイルで利用する変数名] from '[モジュールのファイルパス]'
  • exportされたオブジェクトに対し、エイリアスを設定することができる。その場合、import [元のオブジェクト名/関数名] as [エイリアス] from '[モジュールのファイルパス]'
// main.js

import { myString, merger as mergeString } from 'path/to/module'

console.log(myString) // myString
console.log(merger(myString, 'is here.')) // myString is here
  • 上記のimport文で*を使うことで、一つのオブジェクトのプロパティとしてモジュールを受け取ることができる
  • 構文は、import * as [importするファイルで利用するオブジェクト名] from '[モジュールのファイルパス]'
// main.js

import * as mod from 'path/to/module'

console.log(mod.myString) // myString
console.log(mod.mergeString(myString, 'is here.')) // myString is here

Default export (モジュールを一つだけ受け渡しする場合)

  • ファイル内でモジュールを一つだけ渡す場合、export defaultを利用する
  • export defaultは、一つのファイルの中で一度しか呼び出すことができない
  • モジュールを受け取る側の記述が簡潔でわかりやすくなるため、通常利用する場合はなるべくexport defaultを利用する
  • export defaultを使用する場合、var, let, constは利用できない
  • Default exportの場合は、importの際に自由な名前を設定できる。一つのモジュールにつき一つしか存在しないため、名前をexport側と合わせなくてもよい
  • export defalutでオブジェクトや関数に対して名前を設定していないこともある。そのため、Default exportの場合はimportした先で名前をつけてあげるという感覚
// module.js

export default (str1, str2) => `${str1}${str2}`
// main.js

import merger from 'path/to/module'

console.log(merger('aaa', 'bbb')) // aaabbb
  • また、クラス(正確にはprototypeの拡張だが)を渡すこともできる
  • Default exportなので、クラスもimportした先で名前を変えることができる
  • クラスについては以下を参照

developer.mozilla.org

  • クラス内のgetter/setterはES5、メソッド定義はES6の構文。詳しくは以下を参照

html5experts.jp

// class.js

export default class User {
  constructor(name) {
    this.name = name
  }

  get name() {
    return this._name
  }

  set name(name) {
    this._name = name
  }

  displayName() {
    console.log(`現在のユーザーは${this._name}です。`)
  }
}
// main.js

import User from 'path/to/class'

const user = new User('Bob')

console.log(user.name) // Bob
user.displayName() // 現在のユーザーはBobです。

user.name = "Michael"
user.displayName() // 現在のユーザはMichaelです。

その他参考ページ

neos21.hatenablog.com

2018年の目標

あけましておめでとうございます。今年もどうぞよろしくお願いします。

今年の目標

新しいことに触れる

今年はとにかく新しいことに多く触れる年にしたい。
新しいことに触れるのって、意識すると体力が要る。自分は本当に体力がなくて、去年は「あ、これ気になるな〜」と思っても、気になるだけで終わっていた。
今年は「気になるな〜」と思ったらとにかくまずその世界に触れてみることを心がける。
これは「新しい技術に触れる」とかそういうのもそうだけど、もっと軽く考えていて、例えばつい昨日は「バーチャルYouTuberの動画を観る」ということをした。
バーチャルYouTuberは耳にしてたくらいで全く追いかけてなかったんだけど、今回はとりあえず触れることが大事なので、とりあえず有名所のキズナアイと輝夜月の動画をいくつか観た。
いやバーチャルYouTuberの動画観とるだけやんと思うかもしれないが、それでいい。それでいいんだよ。ハードルはとにかく低く。徐々に上げていけばいい。そもそもその低いハードルすら越えられていなかったんだ。
今更かよ〜と思うかもしれないが、今更でもいい。全く触れないより今更でも触れたほうがいい。だから仮想通貨とかブロックチェーンも今更だけど触れていきたい。

体力と筋肉をつける

物理的な意味でも精神的な意味でも、去年は体力がなくてやらなかったことがすごく多い気がする。めっちゃもったいない。
休日に家でダラダラするのが特にもったいなくて、もっと色んなことができたはずだし、今年はもっと色んなことやっていきたい。
そのためにはまず健康になることがめっちゃ大事だと思っていて、健康になるにはやはり運動することが大事だというのも理解している。
今の会社はITSに入ってるので、安くなるジムがあるのでまずはジムの契約をします。目標は週一でジムに通うこと。
精神的な体力って物理的な体力があるほうがちゃんとつくと思っていて(健全な精神は健全な肉体に宿るみたいな言葉もあるし)、そのためにもまずは物理的に体力つけようと思う。
上述の「新しいことに触れる」ことに密接に関わってくるはず。

個人開発

仕事でコード書いてたけどなかなかプライベートで書くことが少なかった。
いくつか案もあるし、もっと自分のプロダクトを作っていきたい。
個人開発というとr7kamuraさんのスライドがとてもよいので、読み返す。
あとはstar__hoshiさんの記事もとても良い。色んなツール群から必要なものを選別して雑務から逃れることも大切。
RailsWebサービス作るのは勿論、モダンなフロントエンド技術も習得していきたい。

自信を持つ

自分に自信がなくって、根拠のあるなしに関わらずネガティブな状態になっていることが多い人生を送ってきた自覚がある。
今年はそういった雰囲気を払拭し、自信を持ってポジティブな生き方をしたい。
本当にどんなことにも関わってくるんだけど、体力とか筋肉をつけることが大前提。健康にならないとポジティブになれないよね。
そしてエンジニアとしてレベルアップすること。nippoで知り合ったエンジニアの人達を見ていても思うことで、エンジニアなんだから当然のことなんだけど、2017年の最後のほうで同年代の優秀な人達と知り合う機会があって、さらに意識するようになった。
もっともっと貪欲にやっていく。

登壇する

インプットもアウトプットも去年は少なかったので、今年は両方ともガンガン増やす。
そして今までやったことない勉強会などでの登壇をする。
今まで全くやってこなかったけど、登壇できるようなレベルになる。

最後に

2017年は個人的に不満の多い一年だった。勿論自分の怠慢が原因。今年はエンジニアとしても人間としてもレベルアップする年にするぞ。
今年もみなさんよろしくおねがいします。

2017年振り返り

去年は特に振り返りとか行った記憶がないので、今年は振り返りというか反省をしようと思う。

転職した

1月末にちょっと精神的に疲れてしまって、前職を休職した。
1, 2月に転職活動をして、2月半ばくらいに今の会社に決まって、3/1付で入社だったのだが、2/19, 20の社員旅行に(社員じゃないのに)参加し、風呂で裸で自己紹介するという面白い展開になった。
今の会社は出社自由、コアタイムなしの完全裁量労働制という非常に働きやすい環境で大変ありがたい。
いい会社に就職したと思う。

怠惰

いい会社に就職したのはいいのだが、自分の怠惰さにより逆に困難を招いた。

  • 度重なる夜更かしで体調を崩すことが多くなった
  • 集中力が続かなくて、進捗が思うように出ないことが多かった
  • 業務後の時間や休日にだらけすぎて、個人的なコードを書く機会が非常に少なかった

挙げれば枚挙にいとまがないが、とにかくだらけすぎたという自覚がある。
エンジニアとしてちょっとどうかと思うことが多かったので、来年はしっかりコード書けるようにするため以下の目標を立てる。

  • ジムと契約して週一回程度の頻度で運動する
  • 健康に気を使った食事をする
  • 休みの日にコードを書く時間を増やす -> 他の予定を減らす

これを年の目標として頑張っていきたい。主に健康になりたい。

出会い

同年代のエンジニアと会う機会が多く、非常に刺激をもらえた。
同い年でも自分よりすごい人はたくさんいて、こういう人達に追いつきたいと思った。
出会ったきっかけはスプラトゥーンだったりするから面白い。

今年も一年お疲れ様でした

また来年もよろしくお願いします。

自分はSEではなくWebエンジニアなんです。

この記事は、しがないラジオ Advent Calendar 2017の25日目の記事です。

「しがないラジオ」とは?

SIerのSEからWeb系エンジニアに転職したんだが楽しくて仕方がないラジオのことです。
ホームページはこちら↓↓
https://shiganai.org

自分もリスナーですが、まだtbpgrさんがゲストに登場した二回しか聴いておりません……。
にも関わらずAdvent Calendarに参加させていただいてありがとうございますm(_ _)m
時間を作って聴いていきたい。

この記事を書こうと思ったきっかけ

最初のきっかけは、しがないラジオsp.8aのてぃーびーさんの回を聴いてたときの一言。

例えば、同窓会などの「色々な業界・業種の人間が一同に集まる会合」で、こんな質問をよくされます。

「◯◯くん/さんは今IT業界でSEやってるの?」

そして、その質問に対する自分の答えは、

「IT業界だけどSEではないんだよね。まあSEみたいなものなんだけど」

といった感じです。
自分はWebエンジニア、正確にはWebアプリケーションエンジニアであり、自分のことをSEだとは思っていません。
しかし、WebエンジニアやSE(システムエンジニア)は、明確に職務の内容が決まっているわけではなく、話す人のコンテキストによって解釈に差があるので、混同されやすいです。そのため、IT業界ではない人に説明するときにも、面倒くさくて自分がSEだと説明している人もいるかと思います。
SIerからWeb業界に転職してきた方には、このもどかしさが多少分かってくれる人もいるのではないでしょうか。
我々はSEではないということを伝える難しさを。

かといって、一から説明すると非常に長くなるし、そもそも言語化できるほど整理整頓してまとめてあるかと言えば、ないです。
どうすればいいか悩んでいたところ、ちょうどしがないラジオのAdvent Calendarに一枠空きがあると耳にしました。
題目としてはまさにしがないラジオと被っているし、ちょうどいい機会なのでなぜ自分がSEではないのか、SEではないなら何なのかを文書化しておこうと思いついたのがこの記事を書こうと思ったきっかけです。
なお、ここに書く内容は全て自分という個人の意見であり、自分の所属している団体や世間一般の見解ではないので、ご留意いただきたいです。

そもそもIT業界って?

まず、IT業界の自分がIT業界ではない人に自分のことを説明するにあたって最初の壁となるのが、

SIerってなに?Web業界と何が違うの?

という点ですね。
そもそもここを理解してもらえないと、自分がどういう場所からどういう場所に転職して、昔はどういう仕事をしてて今どういう仕事をしているのか、という説明をすることができません。
IT業界には一体どんな業界があるのかというのを示す図がこちら。

ゲームやハードウェア、インフラ、広告などなど、IT業界と一口に言ってもその中で色々な業種がありますね。
その中で今回の記事では「SIer(システムインテグレーター)」と「Web」の二つの業界に絞って話を進めます。そもそもしがないラジオもそうですしね。
ではSIerやWeb業界とはどういう業界なのかというのをまずは知っておきましょう。

SIerとは

SIerとは、システムインテグレーション(SI)を行う業者のことである。SIに「~する人」という接尾辞「-er」を付けてできた造語である。

システムインテグレーションとは、システムを構築する際に、ユーザーの業務を把握・分析し、ユーザーの課題を解決するようなシステムの企画、構築、運用サポートなどの業務をすべて請け負うことである。これらを行う業者がSIerである。
出典: weblio辞書「システムインテグレーター」

SIerは大小様々な企業向けに、ユーザーの業務に対するコンサルティングやシステムの設計・構築・導入・運用を担っている会社/業界のことを指します。
顧客企業の業務内容を改善・効率化するようなシステムを構築し、それを導入して運用サポートも一貫して行うことがほとんどです。

Web業界とは

ではWeb業界とはどんな業界か。
一言で言うと、インターネットを通じて何かしらのサービスを提供する事業を行っている会社/業界です。
有名所でいうと、Google, Yahoo, CyberAgent, Twitter, Facebook, メルカリなど。
顧客企業に対して要望されたWebサービスを受託開発する以外にも、自社のサービスを開発・運用しているところも多いです。

自分の経歴

すごい今更ながら自己紹介します。
@ytgch_というIDでTwitterをやっており、新卒で大きめのSIerに就職したのち、Web業界に転職して働いている社会人3年目の人間です。
自分がSIerで働いていたときの会社の人達と、Web業界に転職してから会った人達は全然違くて、同じIT業界なのにここまで差があるものかと衝撃を受けました。 現在は主にRails辺りを触ってWebサービス作ったりしています。

SEとWebエンジニアの違い

SEはほとんどの場合において、SIerでの技術者の人の肩書です。 それに対し、Web業界ではわりと会社毎に違う印象があります。エンジニア・プログラマ・Webエンジニアなどなど。
さらに、開発の担当分野においても名前が分かれます。サーバーサイドエンジニア、フロントエンドエンジニア、アプリエンジニア、フルスタックエンジニアなどなど。
ここでは、SIerの技術者をSE、Web業界の技術者をWebエンジニアとして話を進めます。

では、自分の思うSEとWebエンジニアの違いをいくつか挙げてみようと思います。

新しい技術に興味があり、それを使っているか

技術の世界は、日々猛烈なスピードで進化し続けています。
新しいプログラミング言語、新しいフレームワーク、新しいサービス……新しいものが次々と出てきます。
技術者は、次々と新しく出てくるものから自分に必要なものを探し、理解し、習得していかなければなりません。
なぜ新しいものを習得していかなければならないかというと、単純に「新しいものの方が既存のものよりも優れていると考えられる」からです。
既存の言語よりも処理が速い、書きやすい、バグを生みにくい。既存のフレームワークよりもより手軽にサービスを作れる。既存のサービスよりもより使いやすく手間が減った。こういった理由があるからこそ新しいものは注目されます。
こういった新しいものをどんどん取り入れていったほうが、新しいものを取り入れず古いものだけを使っている人達とは効率や生産性に差が出てきます。
また、古いものは脆弱性が発見されたり、サポートが終了したりします。MicrosoftWindowsの古いバージョンはサポートを終了しますよね。
Webエンジニアは新しいものをどんどん取り入れる人が多いです。効率化できる、手間が減る、便利、だったらどんどん取り入れていこうよ!という思想です。
SEはそういう思想がなく、ずっと使い慣れている古いものを使えばよくて、新しいものを取り入れる必要性はない、という思想です。
安定的な思考であるSIerと、挑戦的な思考であるWeb業界の違いが如実に表れている部分だと思います。

生産性や効率化に対して思いがあるか

自分がSIerにいた時は9時〜18時が定時で、22時以降の残業には申請が必要でした。他にも、何をするにも上長に申請し許可を得なければならない、という状況が多くありました。
申請や申請書の記入というのは、本質から逸れた作業であり、極端な言い方をしてしまうと時間の無駄、という捉え方もできます。

自分がWebエンジニアになってからは、本質的な業務にだけ時間を取ることが普通になりました。なくてもいいんじゃないかと思われるものは基本的にないし、あっても改善されることがほとんどです。
また、結果を出すことにこだわりが強く(当然と言えば当然ですが)、より良い結果を出すにはエンジニアの生産性や効率を上げることが大切です。エンジニアの生産性については色々あると思いますが、企業の制度でいうと、例えば勤務時間の柔軟性、モニターや開発マシンの支給、高級椅子の支給、技術書の購入費用負担などが挙げられると思います。
それらの制度があることにより、自分の最も生産性の高い働き方を選択できます。朝が弱く、夜のほうが集中できる人も少なくないと思います。そういう人達は勿論朝を遅くし、夜メインで働けたほうが生産性が高いですよね。

所属している社員一人ひとりの個性を尊重して自由な働き方を選択できるかどうかは、SEとWebエンジニアでは大きく違うと思います。
あくまで組織として規律を守らせることに重点を置くのか、最低限さえ守れていればあとは自由にやらせてもらえるかは、各職種の大きな特徴ではないでしょうか。

常に改善する意識があるか

SEだった時代は、会社の昔からの手法や形式をずっと使い続けていました。
設計書のファイルフォーマットは勿論、書き方なども全て昔から受け継がれている方法でやっていました。
もっと良い書き方が間違いなく存在すると分かっていても、そう書くことが決まりだと言わんばかりでした。

Web業界では、ここがもっと良くなるんじゃないか?と思ったことはなるべく言うようにして、納得が得られれば改善することができる場合がほとんどです。
今使っているツールよりも新しく出たもののほうがいいんじゃないか?というときは相談できるし、相談した結果新しいものを導入したりします。

より良い方向へ改善していくよりも、風潮や習慣を重視する文化がSIerにある気がします。
Web業界では常に改善を続けていくような文化がほとんどです。ここも大きな差ですね。

どちらがいいのか

一概にどちらがいいかというのは言い切れません。人によって合う/合わないがありますし、SIerとして働いているけどなんの不満もない、という人もいるかもしれません。
ただ、進化していく流れに乗って自分も進化していけるかどうかというのは、より良いプロダクトを作る、ということにおいては非常に重要ではないかと思います。
自分はWeb業界のほうが向いていると思ったし、Web業界に転職して良かったと思っています。

結論

これだけ色々言いましたが、SEはSIerの技術者のことを指し、Webエンジニアという呼び方はWeb業界の技術者のことを指すのと大体同義なんじゃないかと思っています。
でもこれはあくまで職種ではなく業種の違いに近いものがありますし、明確に区別できるようなものではないです。 結局、SEやWebエンジニアというのはただの呼び方の差でしかなくて、自分がどういう考え方や信念を持っているかによって変わってくるのかなと思います。
そういう点では、自分はWebエンジニアだし、これからもWebエンジニアであり続けたいと思っています。

自戒

これは完全に思考垂れ流しポエムです。
ここ最近の自分の醜態を記録しておくことで、未来の自分に読んでもらい反面教師にしてもらう作戦です。
ここで言及していることは全て自分に対してです。他の誰かのことは一切言っていません。

SIerからWeb業界に転職してバリバリエンジニアリングしながらレベルアップしたいんじゃなかったんですか??

文系学部卒だがなんとなくITとパソコンが好きという理由でSIerに就職した。
テキトーにプログラミングっぽいことを学んで、配属されて設計とかやってのうのうと過ごしていけばいいやという考えを持って新卒で就職した。
新卒の会社でSplatoonを買った結果、それがいかにダメなのかという気付きと、プログラミングをして動く物を作るのが楽しいという気付きと、時間や場所に縛られない自由な働き方ができるんだという気付きがあり、急いでWeb業界に転職した。
そこらへんの話は長くなるので割愛するが、僕が所属している会社の僕が出ているブログ記事にちょっくら記事があります。
転職後2社目(Web業界での1社目)ではRailsを書いて基礎的なことがある程度分かった(つもり)で、紆余曲折あり今3社目の会社にいる。
すごく働きやすいし、技術力のあるエンジニアも多くとてもいい環境だと思う。
問題はここからで、今の自分はこの環境になってから堕落しすぎており、今後もエンジニアとして食っていくには現状を変えないとダメだと思ったのでこの記事を書くに至った。

最近あなたはどんな技術を身につけて何を作りましたか??

これは自分に問いかけている質問です。
エンジニアとして、新しい技術に対してアンテナを張り、自分の作りたいものや仕事で使うものに必要な技術を習得し、それを利用して物を作り、物を作りながら新しい技術に対してアンテナを張り……といったことをやるのは、生き残っていく上で当然とも言えるべきことだと思う。
最近の自分はこの当然のことができていない。そして、そういう自覚があるのに改善しようとしていなくて(意識だけは改善しようとしているんだけど行動に繋がらないので)こういうクソポエムを書いている。
Railsを学び始めて1年ほど経ったが、自分でゼロからアプリケーションを作り上げてそれを公開したか?していない。作りたいものはないかなと思って案をいくつか出しているのに。もったいない。
で、じゃあWebサイトを作るんだったらJSとかCSSについても学ばなきゃいけないよね、となり、それらを体系的に学習して習得しましたか?と言われたらノーと答えるしかない。JavaScriptとか全然書けないです。作りたいものがあるのにそれに必要な道具の使い方を学ばないでどうやって作るんだ、という話ですね。
純粋な技術に対する興味で習得することももあれば、仕事をしたり物を作る上で必要だから技術を習得するということもあると思う。別にどっちでもいいんだけど、どっちもやってなくない?やってないです。ダメですね。

楽しめてます?

そもそもコードを書くことを「楽しい」と思えているか。これは書くものによりけりになってしまうけど、辛いしか言ってない状態で辛いコードを書いていても身にならないしモチベーションも上がらないしやっていけなくなっていく。
というか、つらいことしかやっていなかった時代があって、そうやって毎日不毛な時間を過ごしたくないよね、と思って転職をした。
楽しいと思えるというよりは、楽しくしていくといったほうが正しいのかもしれない。今こういうことをやっていて、でも意外とつまらない -> じゃあどうやったら面白くなるか。現状から何を学んでどう改善できるか。これを考える力が足りていない、と思う。 趣味の開発とか、自分がやりたいことをやりたいようにやるのは、非常に簡単に「楽しい」気持ちになれる手段だ。ただし今は仕事もある。仕事そのものだけなら「楽しい」というものはそんなに多くないだろう(と思う)。どうすれば楽しくなるのか、自分で考え、それを実践することで、初めて楽しくなるのではないかと思う。

楽しくないことは自分で工夫して楽しくしたり学びを増やしたりしてます?

例えば、今受け持っている案件の一つに、作りはじめてまだそんなに経っていないRailsのプロジェクトがある。そのプロジェクトはRails4.2で作られているが、「Rails5.1.3にリプレースしたい」という気持ちになったし、プロジェクトメンバーに話してみたらいいじゃん!という返事をもらえたし、じゃあやるぞ!となる。でもRailsのバージョンアップの経験なんてないから、どうすればいいのかを調べて知見を貯めて実際に手を動かしてリプレースする。こういうのは知見も貯まるし楽しいと思う(個人の感じ方です)。 例えば、今やっているのはデザイナーさんが作ってくれたデザインをRailsのビューやマニフェストファイルに組み込んでいくという作業をしているが、あまり面白いと感じることができていない。じゃあこれをどうすればいいんだろうとなる。

自動化や改善をすることは面白いのに何故それをやらないんですか?

このままずーっと同じ手法で仕事しても面白くない状態は改善されないし、どうすれば面白くなるのかを考える。面白いと感じないものを面白くするためには、デザイナーとの連携を密に取るとか、マニフェストファイルとかアセットパイプラインの仕組みに詳しくなるとか、そういう「面白い部分を見つけ出してそこを攻めることで結果的に仕事全体を面白くしていく」というのもあるし、やりたくないものに極力手を出さないために、「自動化などの手法を確立して、やりたくないことをやらないようにする」というアプローチもある。デザイナーと連携を密に取り、Railsディレクトリ構造通りにやってもらうとか、そういう工夫をするのは後者のアプローチに入るかなと思う。
それは「エンジニアリングは好きだけどその中でも特にこれが好きでこれが嫌い」とかそういう話で、エンジニアリング全体が嫌いなわけではない。だけど、そのエンジニアリングの中でも嫌いとか不得意な部分の作業をしているときに、「嫌いだしつまんないからやりたくない〜」と言っててもそれが好きになったりはしませんよね。しません。
そのつまらない部分や嫌いな部分を、どうやって手早く終わらせるか。それを考えて実践するのが楽しいはずなのに、最近の自分は脳死していてつらいとしか言ってないよね。それじゃあダメだよね。ダメです。
そういうのを自動化したり、改善して面白くしたりするのは結構頭を使って案をひねり出す面白いことだと思う。それをやらない自分は普段何をやっているんだ……?

自分がどうなりたいか自覚してます?

楽しくないと続かないし楽しくするのも自分の力量のうちだとは思うんだけど、じゃあせめて楽しい部分だけでも何故やらないの?となる。
もはや楽しい楽しくないの問題ではない。やってないから。なんでやらないんだ……。
楽しいことだけやったとしても知見は貯まるし、自分のできることは増えていくし、いいことだらけだと思う。なんでやらないんだ……。
エンジニアって、最初からなんでもできる人はいないと思っていて、勿論適正みたいな話はあるんだろうけど、それを抜きにしても結局「毎日やってきたことの積み重ね」がその人の実力だと思っている。
エンジニアになってから、一夜漬けのテスト勉強みたいなものの意味のなさと、毎日少しずつ積み重ねていくことの大切さを実感した。学生時代は一夜漬けタイプの人間だったので、毎日少しずつタイプになろうと色々やってはいる。色々やってはいるのになんで肝心のエンジニアリングを毎日やらないんだ……。
周りにいる「何かに長けた人」って、一朝一夕でそれに長けているわけじゃないし、毎日毎日積み重ねて長けている状態になっている。エンジニアリングだってそれは同じで、毎日コード書かない人間がコード書けるようにならないのは当然だと思う。
幸いにも優秀なエンジニアが知り合いに何人もいるが、そういう人達は毎日の積み重ねは勿論、毎日積み重ねる量も普通の人より多い気がしている。一日に貯まる知見が自分より多い気がする。
で、そういう人達に僕はなりたいと思っているのに、そういう人達より積み重ねる量が少なくてどうやって追いつけますか?追いつけませんね。追いつけないんですよ。むしろどんどん離れていく。それが分かっているのになんで毎日積み重ねないんだ。

じゃあどうすればいいんでしょうか?

ここまで言っておきながら、解決策は「もうこれは自分次第」としか言えないのが本当にダサいんですけど、自分次第です。
もうちょっと細かいことを言うなら、体力や集中力を鍛えて一日に頭を使う時間を増やそうとか、色んなものを身につけなきゃと考えすぎで、まずは自分のやりたいことに必要なものだけ身につけろよとか、そういう話だろうか。
どこかで、小さい成功体験をたくさん重ねることが大事というのを見た気がする。たぶんそれができていないと思う。もうちょっと、小さいことを確実に完了させるというのを意識すべきかも。
あとはもう、やると決めたことをやり通す力を磨こう。小さい成功体験の話にも繋がるし、その決めたことに必要なものだけを習得するように意識する。あれもやんなきゃ、これもやんなきゃ、とか言ってると破滅して虚無になります。実際なりました。

軽くまとめるとどうなるんでしょうか?

なんか色々言ったけど、プログラマーの三大美徳というやつが足りてないんじゃないかなと自分で書いてて思った。間違いなく足りてない。プログラマーなら美徳を守らねば。
今の自分には色々足りないものがあるので、足りるように頑張っていきましょう。
自分がクソみたいなことを言って何もせずにうだうだしていたら、この記事を僕に叩きつけて「甘えたこと言ってるんじゃねえよ」と言ってやってください。
自分でも定期的に見返して反省しながらやっていこうと思います。

本当はこんなクソポエムを書いていないで自分が作りたいものを作ったり技術的な記事を書いていたかった……。
でも悲しいかな、こういうポエムを書いて気持ちを整理しないといけない自分がいる。もう今後こういうポエムは書きたくないです。