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

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

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

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的な作り方は悪である」と断言できると思っている。(ほんとはプロダクトのコードでもそういうふうにしたいんだけど、僕はいままでそういうことを決められる立場になったことがないので…)

テスト書きたい

書きたいよね…。

終わり

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

【ゲームレビュー】ルイージマンション3は2の正統進化、オンラインはこれからに期待

レビューです。

クリアしたので感想を書きます。 ネタバレはなるべく無いようにしてます、買うかどうか迷ってる人は参考になると思います。

アクション

2では単なる作業になりがちになっていたオバケを吸うアクションに対して一工夫が加えられていた。 「振り回し」というアクションは、一定以上のゲージを溜めるとオバキュームを振り回してオバケのHPを一定値削ることができるというものである。

これは、単に吸う時間を短縮する以外に、攻撃に巻きこむことで周りにいるオバケのHPを削った上でひるみ状態にすることができるという効果がある。
今吸っているオバケを吸い終わったあとに続けて怯ませたオバケを連続で吸うことが出来るので、これを上手く使うと周りに大量のオバケに囲まれていてもノーダメージで切り抜けることが可能である。
この連携が上手く決まると大変気持ちよくスポスポオバケを吸うことができてとても楽しい。
ただし、この振り回しは4回ほど叩きつけると強制的に吸い込みが解除されてしまうデメリットもある。叩きつけ1回に付き与えられるダメージは20であるため、オバケのHPが80を切ってから使うと一発で吸える、など工夫をする余地もある。

オバケの吸い込みを中断したときにルイージがよろけなくなった。
これにより、他のオバケの攻撃を回避しやすくなり、アクションの余地が増した。

全体的に、ルイージの動きのレスポンスが良くなったのでゲームテンポが早くなり、とても気持ちのいいゲームになったと思う。
1はオバケを吸い込むことそれ自体に気持ち良さの重点が置かれていた印象があったが、今作はだいぶ全体的に磨きが掛かったな、という印象である。

ストーリー

ざっくりネタバレのない範囲で言うと
「なんかキャンペーンでホテルの宿泊が当たったからみんなで行こうぜ」
という感じ。
ノリとしては1に近い。(2はぶっちゃけ覚えてない)
「こいつら一応王族とヒーローなのにキャンペーンで当たったからって理由が微妙にケチくさくて草」って一瞬思ったけどまあ彼らも別に暇じゃないんだろうな。

キャラクターはオバ犬が続投。かわいい。

しかし毎度毎度オヤ・マーのセキュリティがガバガバなのが悪いんだよなという気がしないでもない。
天才なんだけど自分の研究対象以外には興味がないというよくある感じを生かしてる。
研究者キャラって便利だなぁと思う。

グラフィック

最初はちょっと「リアルすぎ?」とも思ったけど、慣れると雰囲気が出ていて良いなと思えた。

各部屋の小物がめちゃくちゃ凝ってる。
今作は各フロアごとにテーマが決まっているのだが、それに合った物が所狭しと並べられている。
中にはマリオシリーズファンならニヤリとするような物もちょくちょくある。
最近の任天堂はファンサービスが上手くなったなとかちょっと古参ぶった感想を抱いた。

オブジェクトには物理演算が適用されていて、大量に物を吸い込んだり吹き飛ばしたりした時の挙動が楽しい。
ライセンス情報を見る限り物理エンジンはHavokらしい。
びっくりしたのは砂の表現。吸い込むとへっこんでいくのはよくあるんだけど、逆に吹いたときに砂が押しやられてちょっとずつ高くなるというのには素直に感心した。
ちなみにこれは単にビジュアル上の効果ではなくちゃんと謎解きにも活かされている。

オンラインプレイ

テラータワー。

プレイヤーで協力してランダム生成されるマップをクリアしていく。
各フロアには大まかなミッションが与えられており、(オバケを全て捕まえろ、お金を集めろ、等)それをクリアすると次のフロアへ進める。

内容的には楽しいんだけど、まだ発売から日が浅いせいか、経験のない人の方が多くてあまりクリア出来ない。
内容的には本編を一通りクリアした人向けなんだけど、解放されるのは本編のかなり序盤のほうなので、そもそも敵の倒し方が分からない人がたまにいる。
フロアには罠が仕掛けられてるのだが、それに引っかかると味方に助けてもらうまで動けないというとんでもない設計になっている。
これのせいで、マップを見られない人と当たると1分近く操作不能になったりする。一応ラジオチャットもあるけど…もともと聞かない人に言ってもダメやしな…。

まあ悪い意味で「空気を読む」ゲームになってる。

途中抜けがポーズから簡単に出来るので「これはダメだ」と思ったらさっさと抜ければいいのかもしれないけど、それはそれでオンラインプレイが成立しなくなってしまうのでダメなムーブだと思う。

ぶっちゃけ、なんの記録も残らないので暇つぶし以外の意味はない。
フレンドとタイムアタックとかスコアアタックすると盛り上がるんじゃないかなあ。

総評

全体的に2よりもテンポとボリュームが上がってよくなったと思う。
正直2はあんまり印象に残ってないんだけど、3は良いゲームだったなと思う。 ただし、1にあった「総合評価最高を目指して本編を何周もクリアする」にはちょっとストーリーが長い。
うらやしきのような2周目要素もない。
一応エンディング後には評価が出るけどね。

というわけで、ルイージマンションシリーズファンにもファンサービスや若干のストーリーの繋がりもあり、シリーズ初見でもアクションや謎解きが楽しい良いゲームに仕上がっていると思う。
シリーズを通しての特徴だけど、一応ホラーゲームっぽいテイストだけど全然怖い要素はないので(びっくり要素はある)、ハロウィンっぽいゲームを遊びたい人にはおすすめなんじゃないだろうか。

あ、Youtubeで全編のプレイ風景を公開してあるので死んでも買いたくない人は見ていってね

ルイージマンション3(クリア済) - YouTube

ダと仕事の話

日記です。

今日も脳死な感じだけどちょっとした僕のお気持ち表明がある。

【マイクラにじさんじサーバー】アップデート説明会【 #マイクラにじさんじ鯖 】 youtu.be

10月上期からしばらくの間メンテナンス状態にあったにじさんじサーバーが再始動するとのことで、 管理者のドーラ様から説明会があった。

同時接続人数の増加に伴うサーバーの強化や、モブのスポーン上限設定、資源ワールドの復活など、利用者にとっては基本的に良い環境になるということ。

詳しくは動画を見てもらうとして、僕が気になったのは以下だ

# 副管理人的な人を作ることも難しい

これはどういうことなんだろう、VPSに対してログインできるユーザーを増やすことに関しては技術的に特別なことは必要ないと思うけど……と最初は思ったけど、ちょっとピンと来た。

もしかすると、SSHクライアントなどを使わずにVPSのブラウザ上のコンソールから直接操作しているのではないだろうか。
もしそうであれば、「サーバー契約に伴う個人情報や技術的な問題」という一文は理解できる。
恐らく管理者さんは「VPSのウェブアプリにログインをしてサーバを選択し、その画面上でコマンドを入力している」という方法で管理を行なっているものと考えられるからだ。

ここで、Linuxについての知識が最低限あれば、マイクラサーバーに対して何か操作ができるアカウントを複数作り、リモートからの公開鍵認証によるログインを許可することで、複数人で運用するという方法は十分取ることが出来るはずだ。

—-

というわけで何が言いたいかというと、マインクラフトにじさんじサーバーの運用についてかなり危ない雰囲気を感じ取ったということです。

幸い、IPアドレスがバレてもサーバーへのログインはホワイトリスト制とのことで、部外者がサーバーにログインしてくるということはなさそうなのは安心しました。

ただ、老婆心かもしれないけど、こういう状況って所謂「割れ窓」な気がしているので、早めに手を打っておくのがいいんじゃないかなと、一リスナーは思ったわけです。

というわけで、僕はただのにじさんじのライバーさんのファンではあるが、本当にただ楽しむだけの存在になってしまっているということに少し負い目を感じている。 僕に何かできるとすれば「技術的に困っている人を助ける」ということ。

で、こういう人たちから信頼を得て技術サポートとして動くにはどうすればいいんだろう、って考えたときに、じゃあいちからの社員になればいいのかなと思った矢先、ドーラ様の配信内で「マイクラサーバーの運用についていちからは一切関われない」という言及がなされてしまった。

というわけでこれはもう最後の手段として「エンジニアリングのできるにじさんじライバー」として僕がオーディションを受けて実際ににじさんじに入るというルートしかなくなってしまいましたね。

次の僕のお仕事はもしかするとVirtualYoutuberかもしれませんね。 

ドラゴンクエスト ユア・ストーリー 感想

※ネタバレするからな、ちゃんと映画本編見てから読めよ

続きを読む

株式会社ドワンゴを自然退職します

ポエム…?

2018年9月からうつ病悪化のため休職していましたが、会社の規定する休職期間の満了となるため、2019年6月5日にドワンゴを退職することになりました。

「この日までに復帰出来ないと自然退職」というボーダーは以前から知らされていましたが、2019/05/27日に正式に退職手続きを行ってきました。

約一年未満の短い期間でしたが、お世話になった方々にはお礼申し上げます。

続きを読む

ポートフォリオサイトを github pages で作って CircleCI を使ってデプロイ自動化までしてみた

メモです。

ふと思い立ち、自分のポートフォリオを作ってみました。

まだ未完成もいいところですが…。

https://happou31.github.io/

TypeScript + React + StyledComponentsです。まあいつものやつですね。

なのでそれだけだとつまらないので、 CircleCI を使ってデプロイの自動化までやってみたよという記事です。

すんなりとは行かなかったので、ちょっとだけ工夫したよというメモも兼ねています。

続きを読む