さむブログ

学生エンジニアのポートフォリオ

1ヶ月でバイトをやめた話

3月後半から4月の約1ヶ月あるIT系の会社でアルバイトをしていました。
ただ、途中でいろいろ察して辞めました。
その時オフィスで何が起こっていたか、それを時系列順で書いていこうと思います。 まだ、現場でそこまで働いたことがないので甘ったれた行動のように映るかもしれないので先に謝っておきます。

アルバイト入社前(面接編)

Web関連の仕事ができる企業をWantedlyなどを利用して検索。
見学に行ってみないとわからないことも多いと思ってとりあえずある会社に行ってみることに。
その会社はゲーム、Webなど幅広くやってる会社と書いてあったので、いろいろなことを学べると思っていました。

いざスキルシートと履歴書を持ってオフィスに行くと、ホテルの一室のような場所で数人が作業しているオフィスに通されました。
面接で聞かれたことは「Unityできる?」くらいですぐ明日からでも来て欲しいと言われました。
その時は速採用がうれしくて見逃してましたが、社員さんは目を合わせてくれず、Web系の仕事がしたいのにUnityのことしか聞かれなかったことをよく考えておくべきでした。

アルバイト入社後(1日目編)

アルバイト入社1日目に作業環境を教えてもらいました。

  • OS : mac
  • バージョン管理 : SourceTree + gitlab
  • ツール : Unity2017
  • 連絡 : chatwork + slack

また、そこでなぜかWeb系の仕事ができると思っていたのにゲームの方の仕事をするよう言われました。
現在取り組んでいるゲームの案件の進捗が芳しくないかららしいです。
その案件の内容は、既に他社がリリースしているアプリのアップデート+改修作業でした。
1日目はどんなアプリなのかの簡単な説明と環境構築で終わりました。
まだこの時は綿密な計画の元タスク表通りに作業が進んでいくだろう、という会社への幻想を抱いて安心していました。

作業開始(2日目編)

2日目は作業内容の説明を受ける予定でした。 僕が少なくとも欲しかったのは

  • ゲーム画面の遷移図
  • チームのコーディング規約
  • クラスごとの役割が簡単にでも説明されているクラス図orコメント
  • gitlabをチームでどう使っているのか
  • 作業内容のドキュメント
  • etc

【ゲーム画面の遷移図】
改修前の遷移図はあるものの、回収後の目標の遷移図は存在せず先輩も把握していない模様。
先輩曰く、「依頼元が作ってないんだからこっちは悪くないって言える」
いや、わかんなかったら聞いて作るなりしろよ( `ー´)ノ
これが後に「依頼元との認識の齟齬」を作り出しました。

【チームのコーディング規約】
ありませんでした( ;∀;)
Camel case も Pascal caseもバラバラ。
ラムダ式がたくさん使われているのに、チームのほとんどの人が理解できていない。
助けて…

【クラスごとの役割が簡単にでも説明されているクラス図orコメント】
まず、コメントはほとんどありませんでした。
また、機能ごとにパッケージ化等全くされておらず各クラス間が相互に参照しあっていた。
結果として、あるクラスの一部を変えると他の数十個の関係あるのか無いのか分からないクラスがエラー。
ほぼ全ての変数がpublicで宣言されているのを見たときはゾッとしました。
あっ、もちろんクラス図等の説明は全くありませんでした。

【gitlabをチームでどう使っているのか】
プルリクを出す際にどういった情報を記述すればいいか。
TODOやFIXMEやドキュメンテーションコメントでの説明でいいのか。
それに対する答えは
先輩「とりあえずできたらマージしといて」
僕「えっ、そうしたらgitをチームで使ってる意味あんまり無くないですか」
先輩「いいから、いい感じにやっといて」
僕「はい……(涙)」

【作業内容のドキュメント】
もうお察しだと思いますが、「あれをいい感じに直しといて」「あの機能をいい感じに追加しておいて」しか言われません。
仕様書のようなものは作らないのですか、と言うと笑いながら「今どきの開発でそんなの作るところないよww」
いやいや、作るでしょ。適当じゃねーか!

作業開始(3日目~1週間編)

2日目にいろいろ絶望しましたが、3日目になるともう作業が割り振られました。
先輩「このバグを直して」
僕「現状どの部分に問題が出ているかわかりますか?」
先輩「分からないけど、うまく動かないから直して」
僕「この問題が起きてるデータはどこにパッケージングされていますか?」
先輩「とりあえず、ブレークポイントはって試してみて」
僕「はい……(涙)」

そこからの僕はひたすらアクティビティ図を書きまくりました。
自分の作業内容とは関係ないところまで含めて、ゲーム全体の流れを掴むためにほぼすべてのコードを読んで。
1週間進捗はほとんど上げられませんでしたが、最初に僕が欲しかった情報はほぼすべて集めることができました。
その間に先輩が状況を悪化させているとは知らずに…。

作業中盤(2週間目~3週間目編)

ここにきて僕も全体の流れを理解できたこともあって進捗をあげられるようになってきました。
久しぶりにdevelopブランチをプルしてみたら大変なことになっていました。
なんと、プルリクが一度もされずに先輩たちは皆自分のブランチをdevelopにマージしまくっていたのです。
なんで皆作業しているのに全く進捗(プルリク)出さないんだろうと思っていたら…。
案の上、どのコミットに遡っていってもエラー残っているし、大量にグローバル変数や存在意義のないクラスが増えていました。
ある先輩にコードやgitの使い方のことで軽くそのことを指摘すると、
「俺は本来プランナーだからそういうのは向いてないんだよね。これがこの会社のやり方だよ」
と言われ察しました。
ここからは自分の進捗だけ挙げて、それにかかわらない部分については無視しようと決めました。

作業終盤(3週間目~最終日まで編)

ぼくは既に自分の中でゲームの流れやクラスの役割を確認していたので、かなりの進捗をあげられるようになっていました。
この時にはデバッグリストを依頼元が作成してそれを消化する段階に入っていました。
先輩たちは自分で作った大量のフラグや不吉なにおいのする関数や変数に悩まされて作業が止まったり、それによる体調不良で欠席したりしていました。
一方僕は1日当たり先輩たちの2~3倍のタスクを消化していました。
そして僕が担当できるタスクが無くなって先輩の作業を手伝おうとしたとき、それを嫌がった先輩からすごいことを言われました。

private int Method() {
    // メソッドの内容
}

private int Method()
{
    // メソッドの内容
}

に変えろと言われたのです。今更。
彼曰く、「君の書き方は好きじゃない」そうです。
これには僕も頭が痛くなってきたので、とうとう社長に個人チャットで辞める意思を伝えました。

最終日(社長と面談編)

社長1対1で僕が思っていたことを話しました。上に書いたこと以外にもたくさん。
改善するように体制を変えてみるとは言っていましたが、その後リリースされたゲームの評価を見る限り改善はされていないようです。
バグが残ったまま、起動すらできず、かなり重くなったゲームがリリースされていました。
今後どうなるんでしょうね。

振り返ってみて

僕が1ヶ月働いた会社はまずい点がいくつもありました。

  • 働いた時間を自己申告できる(正社員、アルバイト問わず)
  • ずっと仕事の文句を言っている
  • いない人の文句を言って相対的に自己の評価を上げようとしてる
  • よく休む or 遅刻する人が多い
  • 人と話すのが苦手だから話さないorごまかす人が多い
  • オフィス内のメンバーの交流を図らない
  • 優先順位のつけ方が間違っている
  • オフィスが途中から臭くなった
  • 試しもせずにダメだと思い込む
  • 人の話を聞かない

逆に学んだことは

  • リーダブルコーディングの重要性
  • 人間関係が仕事に与える効果
  • リーダーの役割
  • 作業環境の充実度の仕事への影響

良くも悪くも、いろいろ経験できた密度の濃い1ヶ月でした(心労)

React x AtomicDesignでのフォルダ構成

バイト先でもReactでの案件が多いから学習するぞいっ(-ω-)/
って時に壁にぶち当たった。

フォルダ構成ってどうすればいいの?

調べてみると、'AtomicDesig' というデザインの考え方がありそれに従ったフォルダ構成があるらしい。

AtomicDesignとは?

すごくわかりやすくまとめてくださってたので参照↓

簡単に言うと
「ボタン」や「入力エリア」、「見出し」などの
これ以上分割できない、それ単体では機能しないもの(ここ重要)が
Atoms(原子)

Atomを組み合わせてできる、「検索ボックス」などが
Molecules(分子)

AtomとMoleculeを組み合わせてできる、「ヘッダー」や「フッダー」が
Organisms(生体)

Organismsを組み合わせてできる、「コンテンツが流し込まれる前のページ」が
Templates(テンプレート)

Templatesにコンテンツが流し込まれた、いわゆるTemplatesのインスタンス
Pages(ページ)

なるほど、わかりやすい!

フォルダ構成の例

標準

root  
└ src  
  ├ index.js  
  ├ container  
  │ ├ header.js  
  │ └ footer.js  
  └ presentational  
    ├ atoms  
    │ ├ button.js  
    │ └ checkbox.js  
    └ molecules  
      ├ serchbox.js  
      └ sharebutton.js  

containerがラッパー、presentationalが表示部品という構成が分かりやすいですね( ..)φメモメモ

複数ページの場合

root
└ src
  ├ index.js
  ├ container
  │ ├ organisms
  │ │ ├ header.js
  │ │ └ footer.js
  │ └ templates
  │   ├ top.js
  │   └ 404.js
  └ presentational
    ├ atoms
    │ ├ button.js
    │ └ checkbox.js
    └ molecules
      ├ serchbox.js
      └ sharebutton.js

templatesにページのひな型が入っていて、どのorganismsの組み合わせをエントリーポイントに渡すか?
という構造が分かりやすいですね( ..)φメモメモ

より複雑なアプリケーションの場合

root
└ src
  ├ index.js
  ├ components
  │ ├ container
  │ │ ├ organisms
  │ │ │ ├ header.js
  │ │ │ └ footer.js
  │ │ └ templates
  │ │   ├ top.js
  │ │   └ 404.js
  │ └ presentational
  │   ├ atoms
  │   │ ├ button.js
  │   │ └ checkbox.js
  │   └ molecules
  │     ├ serchbox.js
  │     └ sharebutton.js
  └ modules
    ├ benri.js
    └ methods.js

UIの描画とは別に独立した処理(API接続)などがある場合moduleとして分けることで、 使う際にインポートして使う方法があるのかぁ( ..)φメモメモ

AWS(EC2)にSSHでアクセスできない

そろそろAWSに挑戦するぞー。ということでチュートリアルに沿って進めてみた。

  • アカウント作成
  • インスタンス作成
  • セキュリティグループ設定 までは問題なく進んだ。

でも、「SSHで接続」がどうしてもできない( ;∀;)

2日調べて分かった原因と解決法を書いていく。

原因

大学のプロキシサーバではデフォルトのSSH通信用のポート22は使えないようになってました(汗)

それどころか外に対する接続はほぼすべてカットされてました(汗)

とりあえず、22番・80番・443番試してみたけどだめだった。

セキュリティ厳しすぎませんかねぇ

解決法

  • 大学とは関係ない通信網を使う(大学内でのデフォルトのイーサネットを使わない)
  • 一度家からインスタンスにアクセスして接続のポート番号とセキュリティグループを変更する(/etc/ssh/sshd_config)

まとめ

  • サーバにアクセスする時は、その場で使う通信が指定のポートを開放しているか確認する
  • 22, 80, 443番ポート試してダメだったら組織内の通信で許可されていない可能性大(大学はダメっぽい)
  • Windowsの人は認証にPuttyよりTeratermを使ったほうが楽

「積んでクレ」プライバシーポリシー

Takahiro Wakano
Engineer in Tokyo

ゲーム「積んでクレ」について

個人情報の利用目的

当ゲームは、ご利用者様からご提供いただきました個人情報を、ご利用者様からの各種お問い合わせに対する回答・連絡に必要な範囲でのみ利用いたします。 上記目的の範囲を超えてご利用者様の個人情報を利用する必要が生じた場合は、ご利用者様にその目的を連絡いたします。新たな目的にご同意頂けない場合には、利用いたしません。

個人情報の第三者への開示

当ゲームでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

  • 本人のご了解がある場合

  • 法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止

ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

免責事項

当ゲームからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当ゲームのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当ゲームに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

プライバシーポリシーの変更について

当ゲームは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。

EdgeCollider2DとPolygonColldier2D

Unityで2Dゲームの当たり判定を取るときに、いつもPolygonColldier2D使ってたから気づかなかったけど、

EdgeCollider2D同士は衝突しない

answers.unity3d.com

PolygonColldier2D同士はちゃんと衝突するから安心。

Githubにsshでアクセスできない時の応急処置

いつ起きたか?

Githubリポジトリにプロジェクトファイルを
git push origin master
しようとしたとき。
↓のようなエラーを頂いた。

$ git push origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

原因

以下のような原因が考えられる。

  • GithubSSH keyの設定をしていない
  • そもそも公開鍵を作っていない
  • 昔作った公開鍵と最近作った公開鍵がごちゃ混ぜ
    ('Д') つらい

解決策

よくわからないなら、公開鍵を作り直すのが簡単!
過去を清算できてうれしい!!

ローカルに公開鍵を作る

まずは以下のコマンドを入力

$ cd ~/.ssh
$ ssh-keygen -t rsa -C "hogehoge@gmail.com"

やってることは、ホームディレクトリ内の.sshフォルダ内で公開鍵を作ってるだけ('ω')
.sshフォルダ無くても勝手に生成されるから問題なし

うまく実行できると以下のような結果になる

Generating public/private rsa key pair.
Enter file in which to save the key (/<ホームディレクトリ>/.ssh/id_rsa):

保存場所聞いてるからとりあえずEnter押すとこうなった

/<ホームディレクトリ>/.ssh/id_rsa already exists.
Overwrite (y/n)?

原因発覚!

もう元々あったのか(汗)
上書きするからyを入力

その次は

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

これは2回パスワードを打てって言ってるから打っておきましょう

The key fingerprint is:
SHA256:<文字列> <アドレス>
The key's randomart image is:
+---[RSA 2048]----+
|    . .o .      |
|   +.= +         |
|   .O o    O     |
|. o. * B .       |
|.+o=o.+ S        |
| o==+.o          |
| .o..+o.         |
|o. .+o++         |
|+  .=E*          |
+----[SHA256]-----+

これで山場は越えました!(^^)!

ssh-agentを自動で起動するようにする

eval $(ssh-agent -s) で起動するたびにssh-agentが裏で起動されて、 パスフレーズとかの入力が不要になるらしいです(よく分かってない)

$ eval $(ssh-agent -s)
Agent pid <数字5桁?>

ssh-agentに公開鍵を追加する

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /<ホームディレクトリ>/.ssh/id_rsa:
Identity added: /<ホームディレクトリ>/.ssh/id_rsa (/<ホームディレクトリ>/.ssh/id_rsa)

パスフレーズ打ってIdentity added が出れば成功!


GitHubに公開鍵を登録

Github -> Settings -> SSH and GPG keys で公開鍵を登録する。

~/.ssh/id_rsa.pubの中身をコピーすればいいのだけれど、開くのが面倒くさいのでコマンドラインからコピーしましょう。

$ clip < ~/.ssh/id_rsa.pub

f:id:sam8:20180114112343j:plain

僕の場合はこれで解決しました