我が名はなんとか菜である!

主に技術系の記事を書きますが、ポエムも混入します。

27歳にして一人暮らしデビューした男の引っ越しエントリー

部屋が一通り片付いて新しい場所で生活していくためのリズム感が整ってきたので、文章を書くためのリハビリをそろそろしておこうと思います。

2016年から2020年までのざっくりした来歴

遡ること2016年、4月に社会人になることを控えていた自分は早速一人暮らしをすることを画策していた。
最初は当然、東京に居を構えるつもりで都心~西東京辺りを狙って探していたりしたけど、どうしても周りの施設やら居住環境やら家賃やらでいまいち決められずにいた。
というのも、実家の位置がかなり周辺施設に恵まれてる場所だったので、当然新居もそういう環境があるかどうかに目が行ってしまう。
人間というのは罪深い生き物で、一度生活レベルを上げてしまうと下げることは困難である。 よって、この「暮らしやすさ」というポイントについてはかなり自分の中のハードルが上がってしまっていた。
しかし、納得の行く環境のある部屋というのはどうしても家賃が割高であった。
加えて、ある程度の部屋の大きさも欲しかったため、そうすると家賃は8万~9万コースである。

悲しいことに2016年当時そんな収入は自分にはなかった(手取り17万)ので、泣く泣く延期することにした。
とはいえそんな調子では一生引っ越しが出来ないので、収入を理由に新卒で入った会社からは1年半で辞めた。(だって3期通して上がった給料が2500円って舐めてるとしか思えなかったので…)

さて、次に入った会社はここでも何度か書いているがドワンゴであった。
この会社はさすがに給与面では十分クラスだったので、前述の考えで動いていたら早速引っ越しという感じになっていたはずなのだが、どうやら2017年当時で自分は相当弱っていたらしく、とにかく家に帰って寝ていたいと思うようになっていた。

つまり、部屋を探せるような精神状態ではなかった。
今思えば、そのとき頼るべきはドワンゴに紹介してくれた大学の先輩ではなく心療内科だったのかもしれない。

うつ病発症から仕事をやめたちょっとあとまでと両親の話

続きを読む

僕が「文系プログラマー」に抱く不信感の理由

ポエム

概要

本日の議題は

コンピューターサイエンスを知らない人間が商用ソフトウェアのコードを書くことの違和感

です。

例えば電気技師は取得した資格のレベルによって扱える電圧が決まるし、医師はご存知のように所定の機関で研修を終えて医師免許を取得する必要がある。

一方、コンピューターというのは開かれた世界だ。
間口はとても広い(若しくは広くあるべきだ)し、沢山の人に色々な使われ方をするのがこの業界の発展に於いてはとても重要であると思う。

しかし、これがお金の絡んでくる商用ソフトウェアを書く プログラマー となると話は変わってくる。
プログラマーは、時に複雑に相互作用しながら動作するコンピューター群と、それを制御するためのソフトウェアを記述・管理・運営する役割を担っている、いわば専門職である。

専門職であるにも関わらず、巷ではあたかもプログラマーは誰にでもなれて簡単にお金が稼げる 美味い 職業だと思われている。

今回は、なぜプログラマーは専門職であると思うのかという僕の持論と、そこから「文系プログラマーはどうして信頼できないのか」という表題の件の問いの答えまでを書いていこうと思う。

続きを読む

宝鐘マリンボタンを支える技術【GatsBy.js → Next.js for SSG】

最近作ってるやつについて話します。

ページはこちらです。

宝鐘マリンボタン🏴☠

OGPの設定がよく分かってないのでタイトルにリンクを貼っておきます。

ボタンを押すと宝鐘マリンの音声が流れるだけのシンプルなアプリです。
同様のテーマのサイトは過去にいくつか存在し、さなボタン宇志海ボタン などがあります。

そもそも宝鐘マリンとは

宝鐘マリンとは、カバー株式会社が運営しているhololiveというバーチャルライバーグループに所属しているライバーの、3期生の一人です。

www.youtube.com

続きを読む

【WindowsTerminal】エクスプローラーの右クリックメニューから使う

実は意外と初めてな気がするWindowsネタ

WindowsTerminal というものを皆さんは覚えておりますでしょうか。

出たての頃はまだまだ実用とは程遠い感じだったんですが、最近かなりいい感じに使えるようになったので、こいつをちゃんとWindowsの標準ターミナルとして使っていきたいと思って設定をちょっと頑張ってみましたという記事です。

レジストリをいじる

結論から言うと以下のキーをいじります。

\HKEY_CLASSES_ROOT\Directory\Background\shell\cmd\command
\HKEY_CLASSES_ROOT\Directory\Background\shell\Powershell\command
\HKEY_CLASSES_ROOT\Directory\Background\shell\WSL\command
続きを読む

最近世の中がいい方向に行き過ぎていて逆に怖い

ポエム

いやー、面白いですねぇ、最近。

何が面白いって、日本人の大半が正しいと信じてやっていた行動がだいたい裏目に出ているところです。

具体的には

  • 朝の決まった時間に決まった電車に乗って場所で決まった仕事を続けることが偉いという謎理論
  • 伝統を守って行くことが大切という幻想
  • 新しい働き方を導入することに対して、挑戦すらしていないのに今までのやり方が最適であると信じて却下しようとする傲慢さ

こんなところですかね。
すべて「お前ら経営者が時代に合わせて効率的な働き方を追求しなかったツケ」「お前ら労働者がそういう圧力を経営者に掛けていかなかったツケ」としか言いようがないですね。
結局あいつらは仕事ごっこがしたいだけなんですよ、実際に仕事が効率的に回っているかどうかには全く興味がない。
なんでもいいから『俺の目の届くところで手を動かして欲しい』という、傲慢な奴隷の飼い主のような思考に支配されている人間ばかりだったということです。

続きを読む

プログラミングを学ぶにあたって詰まったことと、そこから学んだこと

mizchi.hatenablog.com

みんなも何に詰まったか、書いてみてください

わかりました。

プログラミング歴

12歳

簡単にホームページを作れるみたいなサービスを使っていた僕は、なんかとりあえずサイトを賑やかにしたくて色々探していたら「ホームページの背景に雪を降らす」というやつがあり、そのときに出てきた JavaScript というものは一体なんぞや?というところから JavaScript というプログラミング言語を知った。で、プログラミング言語を使いこなすとゲームが作れると聞いて、ゲームばっかりやっていたクソガキの僕は、早速ブロック崩しの作り方を解説しているサイトを見ながら見様見真似で作った。完成はしなかった。(理由は後述)

挫折したあと、こんなものを見つけて、あ、これも JavaScript じゃん、ということで手を出してみたりもした。これは一応動いた。

nico.ms

中学生

不登校になったあと相談室に通うようになり、そこにあったパソコンで C言語 の勉強をした。当時その教室に定期的に来てくれていた数学の先生がプログラミングが出来る人で、僕に色々なことを教えてくれた。ピラミッドを出力するプログラムが出来たときはめちゃくちゃ嬉しかった。

制御構文はこの辺ではほぼ習得できていたような覚えがある。

高校生

1年ぐらいプログラミングをしていなかった時期があったが、なぜかそのあと「C言語の次は何を学ぼっかな。おや、C++ってのがあるらしいじゃん、これやるか」という流れでVC++沼にハマった。DXライブラリというものを使うとC++でも簡単にゲームが作れるらしいと聞いて、これに手を出してみたりもした。前述の JavaScript で作ったやつをC++に移植するということもやってみた。実際にちゃんと動いた時はめちゃくちゃ嬉しかったし、何より楽しかった。

関数の概念はこの辺でようやく理解した。
あと、ついでにオブジェクト指向の考え方も分かった。

大学生

1年生の頃にようやく文字と文字列の違いを理解した。その後、C++以外にもC#JavaPHPやらにも手を出した結果、自分はなんでも作れる気分になった。

コンピューターサイエンスの基本や、Linuxの基本的な仕組みなんかはこの辺りで覚えた。 あと、MVCやらMVMやらMVVMやらといったアーキテクチャもこの辺で覚えた、確かWinFormsやらWPFやらも触っていたので。

新卒時代(1年目~2年目)

新卒で入りながらも、経験者枠ということで周りにプログラミングを教えていた。正直なところ「なんでお前らIT企業に入ってきてるのにコード書いたことがないんだ?」と思っていたが、彼らはとても頭がよかったので、1、2ヶ月で普通にコードを書けるようになっているのをみて「僕は凡人かもしれない」と思った。

研修中通して「僕はなんでも出来るぜ」って顔をしていたら、当時人が居なかったらしい新規プロジェクトでウェブフロントエンドを任されることになった。
とりあえずJavaScriptjQueryを導入してそこそこの規模のアプリケーションを作っていたが、型の付かないJavaScriptでSPAをするのはバカであるということに気が付き、途中からTypeScriptを推しまくってプロジェクトにTypeScriptとwebpackを導入することにすることに成功した。また、フロントエンドにAngular4を使っていた炎上プロジェクトにTypeScript経験者として放り込まれて、Angular4を勉強しながらパートナー社員にTypeScriptを教えたりもした。

バージョン管理の重要性にこの2年間で気がついた。

ドワンゴ時代

なんで自分フロントエンドやってんだろうな、という気持ちが拭えなかったが、とにかく前職は給料が安すぎたのでフロントエンドエンジニアとして入社した。
HTML5プレイヤーがめっちゃモダンな技術スタック(React.js, webpack, Babel.js)で色々と学びがあったが、JavaScriptで書かれていたことについて渋い顔をずっとしていたら、TypeScriptに置き換えていくことになったのでよかった。
僕が書く新機能に関しては全てTypeScriptで書かせてもらえてしあわせだった。
色々あって病気にはなってしまったが、React.jsの基礎〜発展的な使い方やFluxアーキテクチャについての理解はここで得られた。

無になってはいるが、 Docker の無限の可能性を信じて脱Windowsをしている。

学習過程で詰まったこと

JavaScript

メモ帳でやっていたので、 {} の数が合わなくて発狂していたりした。
さっき「理由は後述」とか思わせぶりなことを書いたけど、ようするにメモ帳で書いてたせいで一定以上の大きさのコードを扱うのが不可能だったせいです。
ちなみにまともなテキストエディタを導入するまでここから2年の月日が掛かりました。
ガキだったので無駄に知識の吸収力はあったせいか、特に詰まった記憶がない。
強いて言えば関数に分ける重要性はよく分かってなかったと思う。

C言語C++

C言語C++の「コンパイラ」が「複数ある」という概念がいまいち理解できていなかった。
なんで?1個でよくない???みたいな。
まあなんにせよ、自分にとってプログラミングとは黒い画面に白い文字を出して遊ぶものだったので、コンパイラの差みたいなのにはあまり興味がなかったのかもしれない。

あと、ポインタは難しいぞ、と散々脅されていたけど、言うほど難しくなかった。
関数については「このDXライブラリの初期化部分を関数にしてヘッダに書いておけば便利じゃね?」という気付きをして無事に解決しました。

コマンドラインインターフェース(CLI)

これが結構鬼門だった。
コマンドでパソコンを操作??????は????????超能力者か?????????(当然、補完があることなど微塵も思わない)という印象だった。なので、コンパイルという操作がないJavaScriptや、一度設定してしまえばボタンひとつでコンパイルから実行までやってくれるVisual Studioからしばらく離れられなかった。
昔から僕は体系づけてプログラミングを学んでいるわけではなくて、単に興味の向いたものを食べているだけに過ぎなかったので、こういう大事なところがすっぱ抜けたのだと思う。
プログラミングを始めるときは、何々言語!とか何々フレームワーク!!!じゃなくて、CLIでパソコンを操作することをまず理解していくのがよいのではないかな、と今では思う。

文字列

文字列に詰まったのは端的に言えばC言語のせいだとは思う。
C言語で文字列が分からないということは、ファイルI/Oの使い方も当然よく分からなかった。
作ったゲームのマップデータをヘッダファイルに直接書いて修正するたびにコンパイルし直してたりしてたこともあった。
配列は理解できてたんだけどね…たぶん配列と文字列が根っこの部分では同じということが理解出来てなかったのかもしれない、それに気がついたらすんなり理解できたので。

設計の重要さ

いつも頭の中で描いたゴールを単純に目指しながらコードを書いていくスタイルで作っていたけど、それは多人数開発ではまずいということに社会人になってから気が付いた。
たとえ趣味のコードであっても、最低でも大まかな状態遷移図と前提条件は決めておくべきだなと思う。

学んだこと

全ての操作は自動化が可能であるべきで、出来ないものは早急に改善すべき

これは環境構築からテスト環境を用意する過程全てに対して言える。
自動化が出来ないと必ずどこかの手順でおばあちゃんの知恵袋的な操作が入ってきてしまう余地が生まれてしまい、そういった小さな穴は気が付くと手がつけられないほどに大きくなっていたりするので、とにかくドキュメント化と自動化は同時に進行すべきである。
というか、ドキュメント化が出来るならおそらく自動化も可能であるはず(べき)なので、環境に依存するパラメータの入力は極力設定ファイルに切り出して、手順に対する解釈の曖昧さを取り除いていくのが重要である。

環境は常にポータブルであること

「このデータはここにしかない」という状況は常に避けるべきである。
なので自分は書いたコードはどんなに小さくても必ずgithubに上げているし、別にそれが恥ずかしいと思うことは最近は全くない。(最初はそういうこともあったけど)
リソースデータに関しては、それらが設定ファイルのようなものから復元ができるならそれに全部任せたり、OneDriveやDropboxと言ったクラウドストレージを利用したり、とにかく明日このパソコンが突然爆発しても(開発資産的な意味で)ノーダメージな環境作りを意識することが大切だと思う。

何かを作るときは最小ゴールを決めてとりあえずリリースする

一生ベータみたいな状態を避けたいという意味。
穴が空きまくりでもバグが出まくりでも、とりあえず自分の手元だけででも動く!!ってなったら ver 1.0.0 を出すべきだと思う。
一回ちゃんとリリースすれば、それを更新していこうっていうインセンティブが働くし、更新してれば誰かが使ってくれるかもしれないし、もしかしたらそこからフィードバックやIssueを上げてくれたりするかもしれない。
少なくとも、僕は個人開発の領域では「SIer的な作り方は悪である」と断言できると思っている。(ほんとはプロダクトのコードでもそういうふうにしたいんだけど、僕はいままでそういうことを決められる立場になったことがないので…)

テスト書きたい

書きたいよね…。

終わり

スターと仕事と名声が欲しいです!!!!