【インターン】実際に依頼した仕事と今後の課題を列挙するよ（2017年12月版）

# はじめに

この記事は、[【インターン】実際に依頼した仕事と感想を列挙するよ（だいたい技術要素ベース）](https://qiita.com/sasanquaneuf/items/b78df5cea719c84eb5ad)の続編です。
２ヶ月の間の特筆すべき差分と、今後の課題などを記載します。

## 想定読者など

- 学生：インターンを検討している人／参加している人
    - 技術的な意味で、インフルのエンジニアインターンでどのような事をするのか、なんとなくわかります。
    - 他の人がどんな事をしていたのか、網羅的になんとなくわかります。
- その他企業の人：インターン実施を検討している人
    - うまくインターンの学生を集めれば、このような作業を依頼できるかも？という実例を知る事ができます。

## 株式会社インフルについて

2017年1月創業、3月より本格始動して、自社Webサービスを複数展開している会社です。各サービスの詳細は割愛しますが、自社サービスのアジャイル的な開発・運営を軸として、基幹システムやその他業務システムの受託開発もやっています。

# 依頼した仕事など

前回までで、以下のような技術を用いた作業を依頼していました。（各技術の概要などは前回記事を参照ください。）

- 実装関連
    - 開発環境構築
        - 多段ssh/portforward(ssh tunnel)
        - git/bitbucket（ソース管理）
        - PyCharm/WebStorm etc.（IDE）
        - SequelPro（MySQL管理ツール）
        - alembic（DBバージョン管理）
        - node
    - python
        - flask（軽量WEBフレームワーク）
        - SQLalchemy（ORM）
        - ※redis（redisはインメモリDB）
        - WTForm（フォーム、バリデーション）
        - PyBabel（i18n）
        - ※GrabzIt（画像出力API）
        - ※opencv（画像処理）
        - xlrd（エクセル加工）
        - apscheduler（スケジューラ）
        - pytest（単体テスト）
        - pandas（データフレーム処理）
        - Apriori（aprioriアルゴリズム：アソシエーションルール）
    - TypeScript/JavaScript
        - angular（定番）
        - react
        - react-redux
        - d3（データビジュアライズ）
        - highcharts（チャート）
        - introjs（チュートリアル的な奴）
        - snowshoe（電子スタンプ、通信先必須）
        - wScratchPad（スクラッチ削る奴）
        - japan-map（日本地図）
        - jquery-gantt（ガントチャート）
        - jcrop（画像切り抜き）
        - add to homescreen（ホーム画面に追加を促すバルーン）
        - add to calendar（カレンダーに追加する機能）
        - bootstrap-tagsinput（タグ入力的な奴）
        - bootstrap-colorpicker（カラーピッカー、色を選ぶ奴）
        - image-picker（画像とか選ぶ箱）
        - slick（スライダー）
        - exif.js（EXIF取得）
    - テストほか
        - locust（負荷試験）
        - owasp zap（脆弱性診断）
        - squash-tm（テスト管理）
        - circle ci（CI環境）

以下、前回との特筆すべき差分です。

## 本番環境構築

本番環境を顧客別に用意する場面が出たので、管理監督しながら、全くゼロの状態からの構築を実際にやって貰いました。具体的な内容は以下のようなことです：

### NAT用インスタンスの作成、設定
### EC2インスタンスの作成
### RDSの開始、設定
### ElastiCache(Redis)の設定
### EC2のサーバーにansible使って関連ツール、製品のデプロイ
### S3の開始、設定
### SESの開始 、設定
### zabbixの設定
### bugsnagの設定

これらは全て手順までQiita:Teamにまとめてもらったので、誰でも本番環境（相当の環境）を構築できるようになりました。

## （モバイル）ネイティブアプリ作成

### cordova + vue
### android

## 製品の利用

### FileMakerを用いた業務システム開発

## クライアントの自動テストの仕組み構築

ざっくりとした指示だけで、以下の様なものを組み合わせてTypeScriptのUT環境を作ってもらいました。

### karma
### jasmine
### istanbul

## 他社API連携

### 決済インターフェイス構築

# 進捗のあった課題

## 情報共有

当初はポータルサイトの充実＋slackの充実を考えていたのですが、インターン生の提案によりQiita:Teamを採用しました。
いま記事数で125件かな？半分ぐらい私が書いていますが、~~10000件を超えると消えてしまう~~無料slackのダイレクトメッセージを探すよりは生産的になったかなあと思います。
slackを有料にするのと、Qiita:Teamを使うのとでコスト的な比較は難しいですが…
~~ただ、インターン生が圧倒的多数を占めるような会社においては、個人の利用時間と金額のバランスが通常の会社よりも不利なので、ちょっと優しくしてくれる仕組みがあってもいいのになーと思っています。~~

## 課題整理・進捗管理

一部では課題管理表を使い始めました。全員で使っている訳ではありません。
現状、通常運用に乗っているサービスはJooto、乗ってないサービスの開発中の課題は課題管理表、という感じです。

## 顧客からの様々なヒアリング方法

インターン生とは全員と漏れなく機密保持契約を結んでいるので、業務上必要な範囲でQiita:Teamに議事録に相当する資料や、見積記録等を記載するようにしています。

## 「仕事」の仕方、自分自身のコスト意識

可能な範囲でちょいちょい仕事の仕方についての言及を含めるようにしました。
あとは、少し緩めの設計資料（例えばエンドポイントの一覧表、APIとDBの項目のマッピング一覧表、などのようなもの）を、WBSとしても使えるよう明示的に作成指示するようにしました。

## 勉強会の開催

各人が主体的に成果を発表するという意味での勉強会は開催していないのでまだ足りずですが、とりあえず設計講習会を開催してみました。記録は以下：

https://youtu.be/_knn0zoYbho
https://youtu.be/RmoMgraSTtk

# 進捗のあまりない課題・新しい課題

## インターン生内のソースレビュー構造（？）

最終的な確認は逃せないとしても、その手前ぐらいまでのレビューぐらいまでは任せて、自律的な集団にしたい。（組織構造を入れる、のに近いのかな）

## 結合以上のテストの自動テスト

全く手付かず。テストシナリオとかも手付かず…

## 詳細設計の書き方

ほぼ手付かず。

## 単体テストケースの書き方（境界値とか、C0とか、0件・1件・複数件とか、の概念も含む）

ほぼ手付かず。網羅的に微妙なバグを潰す作業よりも、まだまだ根本的に新しい機能の実装を優先することが多い状況。

## 面談

ちゃんとフィードバックの面談をしないといけないのですが、忙しいという理由をつけてちゃんと実施出来ていないので、きちんとやらないといけません。。。うーん。

# その他、感想など

## 飲み会でオールする人はだいぶ少ない

時代の流れなのかな？まだ警戒されているのかしら、、、
まあ、みんな結構忙しいので、あんまりオールとかできないのかなーという感じもしますが。

## 医学部生でもインターンを探している

複数名、医学部生の方が作業をしていますが、偉いですね。

## 4〜5月も9月も応募数はほとんど変わらない

1日1名以上のペースで応募がありました。弊社は渋谷から南麻布（白金高輪）に移転したのですが、それぐらいの移動だと場所はほとんど関係ないように感じました。

# おしまい

有給インターンがもっと増えますように！