エンジニアアルバイトとの接し方

Happy Elements株式会社 カカリアスタジオ Advent Calendar 2016の17日目の記事です。
担当は「[あんさんぶるスターズ！](http://stars.happyelements.co.jp/)」グループの @kusakari です。

# はじめに
Happy Elements株式会社では非常勤の学生エンジニアアルバイトも働いており、基本的に社員と同じ内容の業務に取り組んでもらっています。
ちなみに実際のエンジニアアルバイトの話は「[1留したダメ人間が、学生エンジニアバイトとしてスマホゲーム会社で働いてみて思ったこと](http://qiita.com/edit-mode/items/a4295dc45ca78d6c3052)」でご覧頂けます（宣伝）。

# 入社試験
社長の新井[^1]による書類選考と面接があります。

[^1]: 元エンジニアです。ここの画像よりだいぶ若いです（笑）

![mensetsu_hitori_manのコピー.png](https://qiita-image-store.s3.amazonaws.com/0/40/2e868f0a-3118-81b7-5973-2291d2a49add.png)


この際、プログラミングが未経験である場合は、書籍を渡して勉強してもらった後で入社となります。
以前は「[RailsによるアジャイルWebアプリケーション開発 第4版](https://www.amazon.co.jp/Rails%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%ABWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E7%AC%AC4%E7%89%88-Sam-Ruby/dp/4274068668/)」を渡していましたが、今はどの書籍なのでしょうか…[^2]。ソーシャルゲームは、以前はウェブアプリだったものが、現在はネイティブアプリとなったので、UnityとRailsの書籍の二冊になったという話だったような気がします。

[^2]: 僕はアルバイト採用には関わっていないため知りません。

## 書籍で勉強

![computer_manual_manのコピー.png](https://qiita-image-store.s3.amazonaws.com/0/40/e82c9f01-7a79-adec-1d50-f4571df9aa34.png)


実は書籍を渡してもきちんと読んで再度連絡してくる人は割と少ないです。
プログラミングの基礎を勉強してもらいつつも、再度連絡があるかで、勤勉さも確認できるというわけです（たぶん）。


# 入社＆配属
どのチームに配属するは社長と各グループリーダーと相談して決まります。[^3]

[^3]: 画像はイメージで、実際は社員も全員私服です。

![shinsyakaijin_man2のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/40/728371b2-5596-6d09-9057-acc3ae753f39.png)

以下からは「あんさんぶるスターズ！」グループの場合です。

## 一番はじめにやること
### 「このQiita:Teamの記事を読みながら、開発環境構築をお願いします！」

支給されたPCに自分で開発環境を構築してもらいます。

![pose_necchuu_computer_man.png](https://qiita-image-store.s3.amazonaws.com/0/40/fe90d04a-767b-1a4e-ee38-c8191422046d.png)


今だとコマンド一発で構築できるようにすることも簡単で、そうしているグループもあると思うのですが、うちのグループではQiita:Teamの記事[^4]を読みながら、自分で開発環境を構築してもらいます。

[^4]: この記事自体もアルバイトが作ったものを更新していっています。

RailsやUnityと各種ミドルウェアなどを自分でインストールしてもらい、ローカル環境でアプリが動くところまで、基本的には一人で実施してもらいます。一応、メンターを指名して詰まったら相談できるようにはしています。この環境構築に早い人は1〜2時間、遅い人だと1週間程度かかることもあります。

尚、弊社ではアルバイトの試用期間が一ヶ月あり、戦力にならなそうな場合は試用期間で終了となります。採用となれば社員と同じやりがいのある仕事ができる反面、採用のハードルは他のアルバイトと比べると高いと思います。
試用期間については、初日に本当に終了になる場合もあるということを伝えて、後悔のないように頑張ってもらえるようにします。

環境構築は待ち時間も多いので、会社やチームのコーディングガイドラインや、チーム内の必読書としている「[リーダブルコード](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655)」と「[Team Geek](https://www.amazon.co.jp/Team-Geek-_Google%E3%81%AE%E3%82%AE%E3%83%BC%E3%82%AF%E3%81%9F%E3%81%A1%E3%81%AF%E3%81%84%E3%81%8B%E3%81%AB%E3%81%97%E3%81%A6%E3%83%81%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%AE%E3%81%8B-Brian-Fitzpatrick/dp/4873116309/)」もこのくらいのタイミングで読んでもらうようにしています[^5]。

[^5]: 業務時間内に読んでもOKにしています。

## 環境構築できたら
### 「このIssueを割り当てたのでPull Request出してください！」

![job_programmerのコピー.png](https://qiita-image-store.s3.amazonaws.com/0/40/2ed44a44-9302-9d37-1ee4-5a02b2ed9346.png)


うちのグループではGitHub Issuesを使っているため、Issueを1つ割り当てて担当してもらいます。
Git、GitHubを使ったことない人、Pull Requestとは何かわからない人は自分で調べてもらいつつ、対応してもらいます。簡単に説明することはありますが、基本的に語句などを細かく教えることはありません。これはプログラマーという業務の性質上、わからないときに誰かに教えてもらうのではなく、自分で調べるという癖をつけて欲しいという理由からです。

また、最初のIssueは実際のアプリの動作とは関係のない、管理画面の機能を割り当てるようにしています。
こちらはいきなりユーザーデータを操作するようなプログラムは危険というのが最大の理由ですが、難易度的にも、まずは管理画面内の更新のない参照のみの画面で開発の流れになれていってもらうようにしています。同じ参照のみのプログラムでもユーザー画面は負荷対策なども含まれていて難易度が少し上がります。

## Pull Requestが出せたら
レビュアーがコードレビューします。
こちらは今年8月くらい入社のアルバイトOくんの最初のPRです。このあたりのPRの出し方は[前回の記事](http://qiita.com/kusakari/items/81729e87c2ec17d93280)でも書きました。

<img width="808" alt="title.png" src="https://qiita-image-store.s3.amazonaws.com/0/40/fe7074fc-2b0b-2073-437a-5871981bdd5b.png">

このPRは最終的に15回ほどフィードバックがあった後、無事マージされました。
基本的に新しく入ったアルバイトのソースコードをレビューするレビュアーは（いろいろな方向性の指摘とならないように）一人に固定して、できるだけ丁寧にフィードバックするようにしています。

例えば、最初はスタイルガイドやRailsの流儀的な部分などで細かい指摘がたくさん入るのですが、最初にそのあたりになれてもらえば、少しずつ指摘が減っていき、比較的スムーズにいきやすいように感じています。
レビューでの指摘といえば、ActiveRecord関係では以下のようなソースコードが良くあるため、こういう部分をレビューする場合は、どこでSQLが発行されているかを聞いたりもしています。

```rb
@cards = Card.page(params[:page])
             .per(10)
             .order("id asc")
@cards = @cards.where(unit_id: unit_id) if unit_id
@cards.each do |card|
（省略）
```

ローカル環境だとアプリとデータベースが同じ筐体ですが、本番環境はもちろん別サーバーなので、プログラムのどこで何回通信が発生しているのかは、早い段階で理解してもらい意識して実装してもらうようにしています。


## 無事マージされたら
次のIssueを割り当てて対応していってもらいます。
管理画面が問題なくできるようになれば、ユーザー画面用のサーバーサイドプログラムや、クライアントサイドプログラムも対応してもらいます。

割り当て方のポイントとしては、その人がぎりぎりできる程度の難易度のタスクを継続して振ってあげることが大事だと思っていて、ある程度成長を実感させてあげられると良いと考えています。

![family_kyouiku_suparuta.png](https://qiita-image-store.s3.amazonaws.com/0/40/aa6ea131-0026-f9c9-d97e-d4f2f1f48d8c.png)

あとはタスクを振る方のスタンスとしては、自分が作った方がうまく実装できるが、あえてチャレンジさせてみるというのが良いと思っています。そういう意味では自分が実装できない、あまりよくわかっていないものは基本的には振れないと考えた方が良いように思っています。
詰まって相談されても自分もゴールがわかっていないのでは、良い結果になる可能性は低いですし、非常勤アルバイトには、基本的にはゴールもそこへの道筋も明確なタスクを割り当てるのが良いと考えています。そういうこともあり、非常勤のアルバイトは新規アプリよりも運用中のアプリの方が向いていると思います。


## おわりに
弊社の学生エンジニアは卒業生を含め非常に優秀な人が多いです（入社時はプログラミング未経験の人も！）。
そういう人たちにやりがいをもって取り組んでもらえる、成長が実感できる環境が用意できたら良いなと考えています。

![company_white_kigyouのコピー.png](https://qiita-image-store.s3.amazonaws.com/0/40/42059d1a-7fe3-e57e-ab1d-000d61998e9d.png)

[Happy Elements株式会社カカリアスタジオ](http://cacalia.jp/)ではエンジニア社員、アルバイトを募集しています。[こちら](http://www.happyelements.co.jp/recruit/)からご応募ください！


# イラストについて
[いらすとや](http://www.irasutoya.com/)さんのイラストを使わせて頂きました。ありがとうございます！