SlideShare a Scribd company logo
Copyright © BizReach, Inc. All Right Reserved.
株式会社ビズリーチ 荒井利晃
JJUG CCC 2015 Spring
新人エンジニア奮闘記
「 Javaって何? からwebサービスを公開するまで 」
Copyright © BizReach, Inc. All Right Reserved.
発表内容
1. 自己紹介
2. 新卒研修で学んだこと
3. Webサービス開発で学んだこと
4. ビズリーチという環境
5. まとめ
2
Copyright © BizReach, Inc. All Right Reserved. 3
自己紹介1
Copyright © BizReach, Inc. All Right Reserved.
自己紹介
4
荒井利晃
(Arai Toshiaki)
■ 経歴
電気通信大学 電子工学科卒業
電気通信大学 大学院
情報・通信工学研究科卒業
2014年 4月 ビズリーチ入社
趣味は音楽、読書
Java歴 1年
Twitter: toshi_moz
Copyright © BizReach, Inc. All Right Reserved.
学部時代の私
 入学した頃はPCの使い方すら怪しい
 プログラミングは授業で触った程度
 マージャン、バンド、モンハンをしてたら4年間が終了
5
Copyright © BizReach, Inc. All Right Reserved.
大学院時代の私
 大学院では超音波など、音響工学の研究
 研究にはMATLABという数値解析ソフトを使用
 便利な関数が多数、コードはほとんど書かず
6
毎日波形とにらめっこ
Copyright © BizReach, Inc. All Right Reserved.
プログラミングのトラウマ
7
大学院時代に海外インターンでタイに行き、
研究でプログラミングをすることになった
-> まったく読めない & まったく書けない
-> 上司に苦笑いされる日々…
プログラミングに対する苦手意識
Copyright © BizReach, Inc. All Right Reserved.
それでもエンジニアを目指した理由
8
ものづくりが好きだった
ITに関する技術を身に付けたかった
エンジニアに対する憧れがあった
Copyright © BizReach, Inc. All Right Reserved.
そんな私はこんなことやりました
9
お腹を空かせた学生のための肉食就活サイト
Webサービスの開発を一人で担当しました
学生登録数: 約3,000人
企業登録数: 約80社
Copyright © BizReach, Inc. All Right Reserved.
本日伝えたいこと
1. 1年間でどのようにJavaを学んだのか
2. Javaのこんなところでつまづいた
3. 事業会社の開発スタイル
10
新卒研修とニクリーチ開発のお話
Copyright © BizReach, Inc. All Right Reserved. 11
新卒研修で学んだこと2
Copyright © BizReach, Inc. All Right Reserved.
2014年 4月
株式会社ビズリーチ入社
Java歴 0ヶ月
新卒研修
Copyright © BizReach, Inc. All Right Reserved.
新卒研修の目標
13
一人でひとつのアプリを作りきる
Webサービスの作り方を一通り知る
エンジニアリングの楽しさを知る
わからないときの調べ方を知る
Copyright © BizReach, Inc. All Right Reserved.
新卒研修の内容
14
Webの基礎知識
フロントエンド
セキュリティ
プログラミング言語
サーバサイド
インフラ
Web開発の基礎を3ヶ月で学んだ
Copyright © BizReach, Inc. All Right Reserved.
新卒研修で学んだ言語など
15
Javaは17日間
Webサービス開発に必要な技術を約3ヶ月で学ぶ
Copyright © BizReach, Inc. All Right Reserved.
新卒研修: Javaの講師
16
久保 雅彦 (jflute) 先生
OSSプロダクトDBFluteの作者兼
コミッター、カンファレンスやイ
ベントでの講演も多数有
新卒研修のJava講師も担当
ブログ: jfluteの日記 (http://d.hatena.ne.jp/jflute/)
Twitter: @jflute
Copyright © BizReach, Inc. All Right Reserved.
Java研修でやったこと
17
明解Java(入門編)
-> Javaの基本から一つ一つのステップを丁寧に解説
-> 図が多く視覚的にも理解しやすい
-> 各章に練習問題があり、理解が深まる
-> あくまで入門編の内容
Java本で基礎的な知識を身につける
Copyright © BizReach, Inc. All Right Reserved.
本に書いてない部分は補う
18
-> 久保さんオリジナルの研修コンテンツ
-> 文字検索、置換、StringBuilderなど、文字列の基本操作を学ぶ
-> 現場で使われているDBツールを学びつつ死ぬほど修行プログラミング
-> レビューがめちゃくちゃ厳しい
-> セクション11までクリアするとランチに連れて行ってもらえる
 例外、コレクション
 StringTest
 DBFluteハンズオン (http://dbflute.seasar.org/ja/tutorial/handson/)
-> 明解Javaに記載されていないが重要な項目は別途補習
Copyright © BizReach, Inc. All Right Reserved.
ビズリーチ流Java研修①
19
とにかく現場思考で教える
学んだことが現場でどのように使われるのかをイメージする
Copyright © BizReach, Inc. All Right Reserved.
とにかく現場思考で教える
20
 テキストを読んで学習する
-> 情報量が多すぎて、何が大切なのか分からない
 現場の話を聞きながら学習する
-> 具体的な使い方のイメージが湧く
-> 本当に身に付けるべきことが分かる
-> 現場配属に向けた準備運動となる
Copyright © BizReach, Inc. All Right Reserved. 21
圧倒的な開発スピードを実現するための指捌き
タイピング強化、ショートカットキーの徹底
ビズリーチ流Java研修②
Copyright © BizReach, Inc. All Right Reserved.
開発スピードを高めるための指捌き
22
事業会社のプロダクト開発はスピードが命
■ 様々な施策における新規機能実装
■ 2週間に一度のアップデート
■ MTGなどコーディング以外の業務
そこで…
-> 始業時間までタイピング練習
-> よく使う機能のショートカットを記憶
タイピング練習サイト:http://typing.lk/
Copyright © BizReach, Inc. All Right Reserved. 23
可読性の高いコードにこだわる
チーム開発を意識した変数名、メソッド名、コメントなど
ビズリーチ流Java研修③
Copyright © BizReach, Inc. All Right Reserved.
可読性の高いコードにこだわる
24
チームで開発するという意識を持つ
■ 流し読みして処理の流れが分かるか?
■ 変数名、メソッド名のつけ方は適切か?
-> 最上位のメソッドは処理のフローを書く
-> 一つのメソッド内に大量の処理は書かない
-> 人が読むことを意識して名前をつける
-> 小説を書くかの如く
Copyright © BizReach, Inc. All Right Reserved.
Java研修でできるようになったこと
25
■分岐、繰り返しなどの基本的な処理
■型の扱い(基本型、配列やコレクションなど)
■クラスの概念
やはりクラスあたりから理解がしんどくなる…
がんばれ!
Copyright © BizReach, Inc. All Right Reserved.
総合演習
Twitter課題
Java歴 3ヶ月
Copyright © BizReach, Inc. All Right Reserved.
Twitterクローン課題
 Javaを使ったはじめてのアプリケーション開発
 新卒エンジニア一人一つのTwitterクローンを作る
 機能要件、非機能要件、納品要件、特別要件あり
27
機能要件
-> 会員登録できること
-> ログイン/ログアウトできること
-> 140文字以下でつぶやけること
-> タイムラインでつぶやきが閲覧できること
-> 他の会員のフォローが出来ること
Copyright © BizReach, Inc. All Right Reserved.
基礎からwebの世界へ
28
Javaの基礎 Webの世界
- if文、for文などの処理
- int、Stringなどの型
- クラスの使い方
- サーブレット
- webフレームワーク
- Tomcat
- ビルド、デプロイ
なにやら難しい言葉がたくさん出てきた…
Copyright © BizReach, Inc. All Right Reserved.
Twitter課題の構造
29
Copyright © BizReach, Inc. All Right Reserved.
Twitter課題ではまったこと
 基礎的な文法だけでは歯が立たないwebの世界
 System.out.println ってなんだったんだ…
 DB検索、画面への値の渡し方、どうすれば…
30
アーキテクチャとか言われても、な
んのことかさっぱり分からないよ!
JSP?画面のコーディングって
HTMLじゃないの?
Maven、依存ライブラリ、ビルド、
僕が学んできたJavaって一体…
Copyright © BizReach, Inc. All Right Reserved.
Twitter課題ではまったこと
31
画面から値を受け取ってDBに入れる、
イメージは湧くけど実装がわからん
検索したデータを画面に渡したい、一
度に渡す方法ってどうするの?
XSSとかCSRFとか、いろいろ対策し
ないといけないんだなぁ
 アクション、フォーム、セッション!?
 Beanて何?ググっても「豆」としか出てこない
 セキュリティ対策、どこまですればいいの?
Copyright © BizReach, Inc. All Right Reserved.
どのように進めたか
 とにかく本家Twitterを観察して動きを学んだ
 それぞれの動きで何が行われるか分解して考えた
 「Seasar2徹底入門」を読んで理解を深めた
32
Webフレームワークの使い方を学んだ
Javaの基礎文法だけでは作れない
Copyright © BizReach, Inc. All Right Reserved.
Twitter課題:成果発表
33
各自作ったTwitterを発表する
 どんな点に注力したか?つまずいたか?
 「この季節が来たか」と先輩方がニヤニヤ
 実際に先輩方に使ってもらう
セキュリティホールがないか実際にアタックして確認
Copyright © BizReach, Inc. All Right Reserved.
先輩方の洗礼
34
ツイートがデカい
セキュリティ対策の
サイトに飛ばされる
エスケープをしておらず、<h1>タグが有効に
クロスサイトスクリプティング…
Copyright © BizReach, Inc. All Right Reserved.
Twitter課題を通して得られたもの
 WebサービスにおけるJavaの位置づけ
 Webフレームワークの使い方
 一人でサービスを形にする実現力
 正解までたどり着くためのググり力
 セキュリティ対策の重要性
35
そして
Copyright © BizReach, Inc. All Right Reserved.
エラーメッセージ読め読め大合唱
37
エラーメッセージは必ず読め!
強く言われ続けたこと
※ 大切なのは答えではなく、それを導くプロセス
「これ、動かないんです」と先輩のところに相談し
にいくと、「エラーメッセージは読んだ?」「そこ
にはなんて書いてある?」と必ず聞かれた
詳しくは「エラーメッセージ読め読め大合唱」で検索!
Copyright © BizReach, Inc. All Right Reserved.
エンジニアとしてはじめて感じたブレイクスルー
■ プログラムを書いてても実際の使い方が分からなかった
■ コンソール上に何かを出力するという経験だけだった
動くものを作ったことでプログラミングが楽しくなった
38
Copyright © BizReach, Inc. All Right Reserved. 39
Webサービス開発で学んだこと3
Copyright © BizReach, Inc. All Right Reserved.
初めての配属
ビズリーチ事業
Java歴 4ヶ月
Copyright © BizReach, Inc. All Right Reserved.
初めての配属
41
会員制転職サイト「ビズリーチ」の開発
Copyright © BizReach, Inc. All Right Reserved.
初めての現場で完全に圧倒された
 ソースの量がTwitter課題の比じゃない
 ソースを読んでも何をしてるか分からない
 そもそもサービスの仕様が分からない
42
ちょ、一体どれだけ
ファイルあるんですか!
研修ではSAStruts、今度使うのは別
のフレームワーク!
サービス上で使われる言葉、定義な
んかもきちんと覚えないと
Copyright © BizReach, Inc. All Right Reserved.
2ヶ月でこなした業務
43
1ヶ月目
2ヶ月目
-> シナリオテストを行い、サービスのことを知った
-> 先輩にいろいろと聞きながら現場の開発を学んだ
-> はじめはサイトの文言変更などの軽い修正から行った
-> バグ修正などでいろいろな機能を触った
-> 「分からないことが分かる」ようになってきた
-> 営業さんからヒアリングを行い、新規機能を追加をした
ある日
こんなやりとりがありました
ニクリーチってサービス新卒に作って
もらおうと思うんだけど、
だれかやりたい人いる?
(おっ、なんだか面白そうだな)
僕、やりたいです!
CTO 竹内 真
新卒わたし
こんなやりとりがありました
開発期間は2ヶ月、そして一人
Web開発未経験者がこれだけのも
のつくるとなると相当しんどいよ?
多分だいじょ…いや、
やりきってみせます!
(内心ビビってた)
CTO 竹内 真
新卒わたし
Copyright © BizReach, Inc. All Right Reserved.
エンジニアとしての初めての挑戦
ニクリーチ2016開発
Java歴 6ヶ月
Copyright © BizReach, Inc. All Right Reserved.
ニクリーチ2016というwebサービス
48
履歴書を登録 企業からスカウト お肉を食べる
Step 1 Step 2 Step 3
お肉を通じて学生と企業をマッチング
Copyright © BizReach, Inc. All Right Reserved.
ニクリーチ開発スタート!
49
開発期間は2ヶ月
ニクリーチの主な機能要件
-> 学生はニクリーチに履歴書を登録できること
-> 企業は学生の履歴書を検索できること
-> 企業は学生をスカウトできること
-> 学生をスカウトしたらメールが飛ぶこと
よし、早速作り始めるぞ!
Copyright © BizReach, Inc. All Right Reserved.
何から始めていいか分からない
Copyright © BizReach, Inc. All Right Reserved.
サービスの設計をする
52
どういう開発スタイル? そもそも何がしたい?
使い慣れたものはある?
学習コストはどれくらい?データベースは何使う?
フレームワークは何使う?
スピード重視で開発したい!
開発のスタイルは…
Copyright © BizReach, Inc. All Right Reserved.
スピード重視の開発スタイル
53
スピード重視の開発
なぜ?
仕様書が存在しないため作る&改善の繰り返し
Copyright © BizReach, Inc. All Right Reserved.
トライ&エラーが多い
54
 自分は新卒、何が正しい実装なのかわからない
 そもそも業務自体がトライ&エラーの繰り返し
 プログラムの改変が非常に多い (正解がない)
Copyright © BizReach, Inc. All Right Reserved.
ニクリーチ2016の構成
55
■ Twitter課題とほぼ同じ構成
■ Java8を使って開発
Copyright © BizReach, Inc. All Right Reserved.
サービス作りで初めて触った機能
56
ファイル操作
メール配信
外部APIとの連携
画像のアップロードに利用した。inputStreamとか初めて触った。
通知メール配信などの実装をした。ここで大はまりした。
FacebookAPIとか触った。普段自分が利用しているアプリって
こんな風に実装されてたんだなーと理解できた。
Copyright © BizReach, Inc. All Right Reserved.
Java8を使った開発
57
■ Lambda式
■ Optional
-> Java8版のDBFluteを使用、ネストが少なくなり
コードがすっきりした
-> スコープを意識、安全な実装をすることができた
-> ぬるぽ対策になった
-> nullに対する意識が向上した
Copyright © BizReach, Inc. All Right Reserved.
Java8の実装 (1件検索)
58
Copyright © BizReach, Inc. All Right Reserved. 59
Java8の実装 (リスト検索)
スピード開発を
実現した役者たち
Copyright © BizReach, Inc. All Right Reserved.
ニクリーチで使用したwebフレームワーク
61
SAFlute
-> SAStrutsをベースにスピード開発に特化
-> リーンスタートアップがテーマのフレームワーク
-> トライ & エラーがしやすいホットデプロイ
-> (Web側でも) 変更に強いタイプセーフ実装
-> とにかく気合の入ったログ
これらのテーマを実現する機能
あ’’ーーーーーーー!
思ったように動かない!
何度もソースを書き直し!
再起動せず動作を確認できる
Copyright © BizReach, Inc. All Right Reserved.
ホットデプロイの恩恵
64
「あー、ここちょっとソース直したいなー」
アプリを再起動せず確認できる
ホットデプロイ!
「こう書いたらどう動くかな?」
思考が妨げられず、実装に集中できる
きれいにファイル管理したい
ファイル名を変えなきゃ!
指定したファイルは見当たります
Copyright © BizReach, Inc. All Right Reserved.
タイプセーフ実装 (return)
67
Forword
Redirect
return “index.jsp”
SAStruts
SAFlute
Forword
Redirect
ベタで記述
return “/edit/” + id + “/?redirect=true”
↑ URLを指定してリダイレクト
return path_IndexJsp 自動生成されたパス
return redirectById(MemberAction.class, id)
↑ リダイレクト用のメソッド
またエラーか…
一体なにがいけないの?
エラーログが読みやすい
Copyright © BizReach, Inc. All Right Reserved.
とにかく気合の入ったログ
70
エラー修正やテストにおいてログは超重要!
コードを変更 ログを確認 修正 or 続行
SAFlute
-> 元のアクション、実行SQL、Requestパラメータなど
-> 読む気になるエラーログ!
※ 詳しくは「ログにこだわるSAFlute」で検索
リリース4日前
CTO竹内からのメール
CTO 竹内 真
学生に登録してもらう履歴書に
英語力を取得する欄を追加しよう。
英語レベルとTOEICの点数ね。
メールを開くと…
突然の仕様変更
ちょwwwまwwwwwwえ?
Copyright © BizReach, Inc. All Right Reserved.
使ってよかったDBFlute
76
ビズリーチでも採用しているDBツール
幾度とある
仕様変更
それに伴う
DB変更
DBFlute
「DB変更に強い」をコンセプトに作られたDBツール
DBFluteの機能に何度も助けられた
Copyright © BizReach, Inc. All Right Reserved. 77
たくさん不安との戦い
人生初めてのwebサービス
一般公開するというプレッシャー
ギリギリの開発スケジュール
飛ばないメール
悲しみをもたらす500エラー
Copyright © BizReach, Inc. All Right Reserved.
リリース日に、メールが飛ばない!
78
12/9 午後リリース予定
午前中に最終チェックをしていたら、高確率でメール
配信に失敗することを確認
冷や汗が止まらない私。見かねたCTO竹内が自ら手を動
かし、メール配信処理を別スレッドにすることで対応
このとき、マルチスレッドという概念を知る
その他にも
いろいろ
ハマった
Copyright © BizReach, Inc. All Right Reserved. 80
先輩に相談しまくりました!
先輩、偉大。
2ヶ月間
がんばった
TOP画像(焼肉)
探しながら
コンビニ飯
思考停止
しているのに
手は動く
\サイコーにハイだぜ!/
そして
なんとか
Copyright © BizReach, Inc. All Right Reserved.
2014/12/09
ニクリーチ2016リリース
Java歴 8ヶ月
Copyright © BizReach, Inc. All Right Reserved.
したのですが
どうやらバグってるらしい。
Copyright © BizReach, Inc. All Right Reserved.
リリース後の対応
 学生の履歴書が登録できない
89
 メールが配信されてない
リリース前のテストの大切さを学んだ
-> 登録学生からの問い合わせを受け発覚
-> バリデーションのバグ、急いで修正してリリース
-> メールサーバにコネクションを貼る際に落ちている
-> リトライ機能を実装して対応
現在のニクリーチ
Copyright © BizReach, Inc. All Right Reserved.
現在のニクリーチ
91
お腹を空かせた学生のための肉食就活サイト
学生登録数: 約3,000人
企業登録数: 約80社
Copyright © BizReach, Inc. All Right Reserved.
ニクリーチのメディア掲載実績
92
新聞
とくダネ!
スーパーニュース
TV
日経MJ
日本経済新聞
WEB
エンジニアtype
キャリコネニュース
週アスPLUS
Copyright © BizReach, Inc. All Right Reserved.
Twitterでも話題に
93
#ニクリーチ
Copyright © BizReach, Inc. All Right Reserved.
2ヶ月間でやったこと
94
設計 開発
マネジメント
進捗管理、進捗報告
コンテンツの依頼
プロダクト管理
画面デザイン、遷移
機能要件定義
DB設計、など
開発環境整備
DB構築
画面コーディング
アプリコーディング
インフラ構築
テスト
リリース作業
ニクリーチ開発でかなり成長できた!
Copyright © BizReach, Inc. All Right Reserved. 96
ビズリーチという環境4
Copyright © BizReach, Inc. All Right Reserved.
エクセレントなエンジニア達
97
■竹添直樹
Seasar、Apache Click、GitBucket、Scalatra
などのオープンソース活動、JavaやScalaなどの、
数々の技術系書籍の執筆
■久保雅彦
OSSプロダクトDBFluteの作者兼コミッター、
カンファレンスやイベントでの講演も多数有
新卒研修のJava講師も担当
Copyright © BizReach, Inc. All Right Reserved.
著者のサインをいただきました!笑
98
竹添さん 島本さん
Java逆引きレシピ
Copyright © BizReach, Inc. All Right Reserved.
働く環境
99
オライリー本(日本語版)全巻完備
Copyright © BizReach, Inc. All Right Reserved.
働く環境
100
ペアプログラミングスペース
Copyright © BizReach, Inc. All Right Reserved.
働く環境
101
ハニカムオフィス
Copyright © BizReach, Inc. All Right Reserved.
働く環境
102
ミーティングスペース
Copyright © BizReach, Inc. All Right Reserved.
働く環境
103
サイレントルーム
Copyright © BizReach, Inc. All Right Reserved.
Javaで事業を作りたい
エンジニアさん大募集!
株式会社ビズリーチでは
Copyright © BizReach, Inc. All Right Reserved.
ほぼ毎日
勉強会も開催!
株式会社ビズリーチでは
Copyright © BizReach, Inc. All Right Reserved. 106
まとめ5
Copyright © BizReach, Inc. All Right Reserved.
まとめ
 Javaまったくの初心者から1年間でサービスを作った
 とはいえ先輩にいろいろ助けてもらった
 事業会社の開発はとにかくスピード重視だった
 スピード開発を実現する数々の道具を使った
 サービス作りにはほんとうにたくさんの学びがあった
107
Copyright © BizReach, Inc. All Right Reserved. 108
エンジニアとして大切にしたいこと
学ぶ環境 学ぶ気持ち
先輩エンジニアは偉大
チャレンジできる環境
目線の高さ
学ぶ姿勢を止めない
人は最強の教科書
みんなと競う
Copyright © BizReach, Inc. All Right Reserved.
これから学ぶ人へ
109
とにかく手を動かす
分からなければ人に聞く
成果が出るまでは努力
頭で考えることと、実際に作ることには大きな差がある
とにかく手を動かしてプログラムを書くことに慣れること
学び始めはとにかく分からないことが多くていやになる
そんなときは人に聞いてとにかく前に進むことが大切
始めはコンソールに文字を出力することから始まる
実際に動くものを作るのはそれなりに努力が必要
Copyright © BizReach, Inc. All Right Reserved.
まだまだ分からないことばかりだけど
プログラムを書くの楽しい
現在 Java歴 1年
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド

More Related Content

JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド

  • 1. Copyright © BizReach, Inc. All Right Reserved. 株式会社ビズリーチ 荒井利晃 JJUG CCC 2015 Spring 新人エンジニア奮闘記 「 Javaって何? からwebサービスを公開するまで 」
  • 2. Copyright © BizReach, Inc. All Right Reserved. 発表内容 1. 自己紹介 2. 新卒研修で学んだこと 3. Webサービス開発で学んだこと 4. ビズリーチという環境 5. まとめ 2
  • 3. Copyright © BizReach, Inc. All Right Reserved. 3 自己紹介1
  • 4. Copyright © BizReach, Inc. All Right Reserved. 自己紹介 4 荒井利晃 (Arai Toshiaki) ■ 経歴 電気通信大学 電子工学科卒業 電気通信大学 大学院 情報・通信工学研究科卒業 2014年 4月 ビズリーチ入社 趣味は音楽、読書 Java歴 1年 Twitter: toshi_moz
  • 5. Copyright © BizReach, Inc. All Right Reserved. 学部時代の私  入学した頃はPCの使い方すら怪しい  プログラミングは授業で触った程度  マージャン、バンド、モンハンをしてたら4年間が終了 5
  • 6. Copyright © BizReach, Inc. All Right Reserved. 大学院時代の私  大学院では超音波など、音響工学の研究  研究にはMATLABという数値解析ソフトを使用  便利な関数が多数、コードはほとんど書かず 6 毎日波形とにらめっこ
  • 7. Copyright © BizReach, Inc. All Right Reserved. プログラミングのトラウマ 7 大学院時代に海外インターンでタイに行き、 研究でプログラミングをすることになった -> まったく読めない & まったく書けない -> 上司に苦笑いされる日々… プログラミングに対する苦手意識
  • 8. Copyright © BizReach, Inc. All Right Reserved. それでもエンジニアを目指した理由 8 ものづくりが好きだった ITに関する技術を身に付けたかった エンジニアに対する憧れがあった
  • 9. Copyright © BizReach, Inc. All Right Reserved. そんな私はこんなことやりました 9 お腹を空かせた学生のための肉食就活サイト Webサービスの開発を一人で担当しました 学生登録数: 約3,000人 企業登録数: 約80社
  • 10. Copyright © BizReach, Inc. All Right Reserved. 本日伝えたいこと 1. 1年間でどのようにJavaを学んだのか 2. Javaのこんなところでつまづいた 3. 事業会社の開発スタイル 10 新卒研修とニクリーチ開発のお話
  • 11. Copyright © BizReach, Inc. All Right Reserved. 11 新卒研修で学んだこと2
  • 12. Copyright © BizReach, Inc. All Right Reserved. 2014年 4月 株式会社ビズリーチ入社 Java歴 0ヶ月 新卒研修
  • 13. Copyright © BizReach, Inc. All Right Reserved. 新卒研修の目標 13 一人でひとつのアプリを作りきる Webサービスの作り方を一通り知る エンジニアリングの楽しさを知る わからないときの調べ方を知る
  • 14. Copyright © BizReach, Inc. All Right Reserved. 新卒研修の内容 14 Webの基礎知識 フロントエンド セキュリティ プログラミング言語 サーバサイド インフラ Web開発の基礎を3ヶ月で学んだ
  • 15. Copyright © BizReach, Inc. All Right Reserved. 新卒研修で学んだ言語など 15 Javaは17日間 Webサービス開発に必要な技術を約3ヶ月で学ぶ
  • 16. Copyright © BizReach, Inc. All Right Reserved. 新卒研修: Javaの講師 16 久保 雅彦 (jflute) 先生 OSSプロダクトDBFluteの作者兼 コミッター、カンファレンスやイ ベントでの講演も多数有 新卒研修のJava講師も担当 ブログ: jfluteの日記 (http://d.hatena.ne.jp/jflute/) Twitter: @jflute
  • 17. Copyright © BizReach, Inc. All Right Reserved. Java研修でやったこと 17 明解Java(入門編) -> Javaの基本から一つ一つのステップを丁寧に解説 -> 図が多く視覚的にも理解しやすい -> 各章に練習問題があり、理解が深まる -> あくまで入門編の内容 Java本で基礎的な知識を身につける
  • 18. Copyright © BizReach, Inc. All Right Reserved. 本に書いてない部分は補う 18 -> 久保さんオリジナルの研修コンテンツ -> 文字検索、置換、StringBuilderなど、文字列の基本操作を学ぶ -> 現場で使われているDBツールを学びつつ死ぬほど修行プログラミング -> レビューがめちゃくちゃ厳しい -> セクション11までクリアするとランチに連れて行ってもらえる  例外、コレクション  StringTest  DBFluteハンズオン (http://dbflute.seasar.org/ja/tutorial/handson/) -> 明解Javaに記載されていないが重要な項目は別途補習
  • 19. Copyright © BizReach, Inc. All Right Reserved. ビズリーチ流Java研修① 19 とにかく現場思考で教える 学んだことが現場でどのように使われるのかをイメージする
  • 20. Copyright © BizReach, Inc. All Right Reserved. とにかく現場思考で教える 20  テキストを読んで学習する -> 情報量が多すぎて、何が大切なのか分からない  現場の話を聞きながら学習する -> 具体的な使い方のイメージが湧く -> 本当に身に付けるべきことが分かる -> 現場配属に向けた準備運動となる
  • 21. Copyright © BizReach, Inc. All Right Reserved. 21 圧倒的な開発スピードを実現するための指捌き タイピング強化、ショートカットキーの徹底 ビズリーチ流Java研修②
  • 22. Copyright © BizReach, Inc. All Right Reserved. 開発スピードを高めるための指捌き 22 事業会社のプロダクト開発はスピードが命 ■ 様々な施策における新規機能実装 ■ 2週間に一度のアップデート ■ MTGなどコーディング以外の業務 そこで… -> 始業時間までタイピング練習 -> よく使う機能のショートカットを記憶 タイピング練習サイト:http://typing.lk/
  • 23. Copyright © BizReach, Inc. All Right Reserved. 23 可読性の高いコードにこだわる チーム開発を意識した変数名、メソッド名、コメントなど ビズリーチ流Java研修③
  • 24. Copyright © BizReach, Inc. All Right Reserved. 可読性の高いコードにこだわる 24 チームで開発するという意識を持つ ■ 流し読みして処理の流れが分かるか? ■ 変数名、メソッド名のつけ方は適切か? -> 最上位のメソッドは処理のフローを書く -> 一つのメソッド内に大量の処理は書かない -> 人が読むことを意識して名前をつける -> 小説を書くかの如く
  • 25. Copyright © BizReach, Inc. All Right Reserved. Java研修でできるようになったこと 25 ■分岐、繰り返しなどの基本的な処理 ■型の扱い(基本型、配列やコレクションなど) ■クラスの概念 やはりクラスあたりから理解がしんどくなる… がんばれ!
  • 26. Copyright © BizReach, Inc. All Right Reserved. 総合演習 Twitter課題 Java歴 3ヶ月
  • 27. Copyright © BizReach, Inc. All Right Reserved. Twitterクローン課題  Javaを使ったはじめてのアプリケーション開発  新卒エンジニア一人一つのTwitterクローンを作る  機能要件、非機能要件、納品要件、特別要件あり 27 機能要件 -> 会員登録できること -> ログイン/ログアウトできること -> 140文字以下でつぶやけること -> タイムラインでつぶやきが閲覧できること -> 他の会員のフォローが出来ること
  • 28. Copyright © BizReach, Inc. All Right Reserved. 基礎からwebの世界へ 28 Javaの基礎 Webの世界 - if文、for文などの処理 - int、Stringなどの型 - クラスの使い方 - サーブレット - webフレームワーク - Tomcat - ビルド、デプロイ なにやら難しい言葉がたくさん出てきた…
  • 29. Copyright © BizReach, Inc. All Right Reserved. Twitter課題の構造 29
  • 30. Copyright © BizReach, Inc. All Right Reserved. Twitter課題ではまったこと  基礎的な文法だけでは歯が立たないwebの世界  System.out.println ってなんだったんだ…  DB検索、画面への値の渡し方、どうすれば… 30 アーキテクチャとか言われても、な んのことかさっぱり分からないよ! JSP?画面のコーディングって HTMLじゃないの? Maven、依存ライブラリ、ビルド、 僕が学んできたJavaって一体…
  • 31. Copyright © BizReach, Inc. All Right Reserved. Twitter課題ではまったこと 31 画面から値を受け取ってDBに入れる、 イメージは湧くけど実装がわからん 検索したデータを画面に渡したい、一 度に渡す方法ってどうするの? XSSとかCSRFとか、いろいろ対策し ないといけないんだなぁ  アクション、フォーム、セッション!?  Beanて何?ググっても「豆」としか出てこない  セキュリティ対策、どこまですればいいの?
  • 32. Copyright © BizReach, Inc. All Right Reserved. どのように進めたか  とにかく本家Twitterを観察して動きを学んだ  それぞれの動きで何が行われるか分解して考えた  「Seasar2徹底入門」を読んで理解を深めた 32 Webフレームワークの使い方を学んだ Javaの基礎文法だけでは作れない
  • 33. Copyright © BizReach, Inc. All Right Reserved. Twitter課題:成果発表 33 各自作ったTwitterを発表する  どんな点に注力したか?つまずいたか?  「この季節が来たか」と先輩方がニヤニヤ  実際に先輩方に使ってもらう セキュリティホールがないか実際にアタックして確認
  • 34. Copyright © BizReach, Inc. All Right Reserved. 先輩方の洗礼 34 ツイートがデカい セキュリティ対策の サイトに飛ばされる エスケープをしておらず、<h1>タグが有効に クロスサイトスクリプティング…
  • 35. Copyright © BizReach, Inc. All Right Reserved. Twitter課題を通して得られたもの  WebサービスにおけるJavaの位置づけ  Webフレームワークの使い方  一人でサービスを形にする実現力  正解までたどり着くためのググり力  セキュリティ対策の重要性 35
  • 37. Copyright © BizReach, Inc. All Right Reserved. エラーメッセージ読め読め大合唱 37 エラーメッセージは必ず読め! 強く言われ続けたこと ※ 大切なのは答えではなく、それを導くプロセス 「これ、動かないんです」と先輩のところに相談し にいくと、「エラーメッセージは読んだ?」「そこ にはなんて書いてある?」と必ず聞かれた 詳しくは「エラーメッセージ読め読め大合唱」で検索!
  • 38. Copyright © BizReach, Inc. All Right Reserved. エンジニアとしてはじめて感じたブレイクスルー ■ プログラムを書いてても実際の使い方が分からなかった ■ コンソール上に何かを出力するという経験だけだった 動くものを作ったことでプログラミングが楽しくなった 38
  • 39. Copyright © BizReach, Inc. All Right Reserved. 39 Webサービス開発で学んだこと3
  • 40. Copyright © BizReach, Inc. All Right Reserved. 初めての配属 ビズリーチ事業 Java歴 4ヶ月
  • 41. Copyright © BizReach, Inc. All Right Reserved. 初めての配属 41 会員制転職サイト「ビズリーチ」の開発
  • 42. Copyright © BizReach, Inc. All Right Reserved. 初めての現場で完全に圧倒された  ソースの量がTwitter課題の比じゃない  ソースを読んでも何をしてるか分からない  そもそもサービスの仕様が分からない 42 ちょ、一体どれだけ ファイルあるんですか! 研修ではSAStruts、今度使うのは別 のフレームワーク! サービス上で使われる言葉、定義な んかもきちんと覚えないと
  • 43. Copyright © BizReach, Inc. All Right Reserved. 2ヶ月でこなした業務 43 1ヶ月目 2ヶ月目 -> シナリオテストを行い、サービスのことを知った -> 先輩にいろいろと聞きながら現場の開発を学んだ -> はじめはサイトの文言変更などの軽い修正から行った -> バグ修正などでいろいろな機能を触った -> 「分からないことが分かる」ようになってきた -> 営業さんからヒアリングを行い、新規機能を追加をした
  • 47. Copyright © BizReach, Inc. All Right Reserved. エンジニアとしての初めての挑戦 ニクリーチ2016開発 Java歴 6ヶ月
  • 48. Copyright © BizReach, Inc. All Right Reserved. ニクリーチ2016というwebサービス 48 履歴書を登録 企業からスカウト お肉を食べる Step 1 Step 2 Step 3 お肉を通じて学生と企業をマッチング
  • 49. Copyright © BizReach, Inc. All Right Reserved. ニクリーチ開発スタート! 49 開発期間は2ヶ月 ニクリーチの主な機能要件 -> 学生はニクリーチに履歴書を登録できること -> 企業は学生の履歴書を検索できること -> 企業は学生をスカウトできること -> 学生をスカウトしたらメールが飛ぶこと
  • 51. Copyright © BizReach, Inc. All Right Reserved. 何から始めていいか分からない
  • 52. Copyright © BizReach, Inc. All Right Reserved. サービスの設計をする 52 どういう開発スタイル? そもそも何がしたい? 使い慣れたものはある? 学習コストはどれくらい?データベースは何使う? フレームワークは何使う? スピード重視で開発したい! 開発のスタイルは…
  • 53. Copyright © BizReach, Inc. All Right Reserved. スピード重視の開発スタイル 53 スピード重視の開発 なぜ? 仕様書が存在しないため作る&改善の繰り返し
  • 54. Copyright © BizReach, Inc. All Right Reserved. トライ&エラーが多い 54  自分は新卒、何が正しい実装なのかわからない  そもそも業務自体がトライ&エラーの繰り返し  プログラムの改変が非常に多い (正解がない)
  • 55. Copyright © BizReach, Inc. All Right Reserved. ニクリーチ2016の構成 55 ■ Twitter課題とほぼ同じ構成 ■ Java8を使って開発
  • 56. Copyright © BizReach, Inc. All Right Reserved. サービス作りで初めて触った機能 56 ファイル操作 メール配信 外部APIとの連携 画像のアップロードに利用した。inputStreamとか初めて触った。 通知メール配信などの実装をした。ここで大はまりした。 FacebookAPIとか触った。普段自分が利用しているアプリって こんな風に実装されてたんだなーと理解できた。
  • 57. Copyright © BizReach, Inc. All Right Reserved. Java8を使った開発 57 ■ Lambda式 ■ Optional -> Java8版のDBFluteを使用、ネストが少なくなり コードがすっきりした -> スコープを意識、安全な実装をすることができた -> ぬるぽ対策になった -> nullに対する意識が向上した
  • 58. Copyright © BizReach, Inc. All Right Reserved. Java8の実装 (1件検索) 58
  • 59. Copyright © BizReach, Inc. All Right Reserved. 59 Java8の実装 (リスト検索)
  • 61. Copyright © BizReach, Inc. All Right Reserved. ニクリーチで使用したwebフレームワーク 61 SAFlute -> SAStrutsをベースにスピード開発に特化 -> リーンスタートアップがテーマのフレームワーク -> トライ & エラーがしやすいホットデプロイ -> (Web側でも) 変更に強いタイプセーフ実装 -> とにかく気合の入ったログ これらのテーマを実現する機能
  • 64. Copyright © BizReach, Inc. All Right Reserved. ホットデプロイの恩恵 64 「あー、ここちょっとソース直したいなー」 アプリを再起動せず確認できる ホットデプロイ! 「こう書いたらどう動くかな?」 思考が妨げられず、実装に集中できる
  • 67. Copyright © BizReach, Inc. All Right Reserved. タイプセーフ実装 (return) 67 Forword Redirect return “index.jsp” SAStruts SAFlute Forword Redirect ベタで記述 return “/edit/” + id + “/?redirect=true” ↑ URLを指定してリダイレクト return path_IndexJsp 自動生成されたパス return redirectById(MemberAction.class, id) ↑ リダイレクト用のメソッド
  • 70. Copyright © BizReach, Inc. All Right Reserved. とにかく気合の入ったログ 70 エラー修正やテストにおいてログは超重要! コードを変更 ログを確認 修正 or 続行 SAFlute -> 元のアクション、実行SQL、Requestパラメータなど -> 読む気になるエラーログ! ※ 詳しくは「ログにこだわるSAFlute」で検索
  • 76. Copyright © BizReach, Inc. All Right Reserved. 使ってよかったDBFlute 76 ビズリーチでも採用しているDBツール 幾度とある 仕様変更 それに伴う DB変更 DBFlute 「DB変更に強い」をコンセプトに作られたDBツール DBFluteの機能に何度も助けられた
  • 77. Copyright © BizReach, Inc. All Right Reserved. 77 たくさん不安との戦い 人生初めてのwebサービス 一般公開するというプレッシャー ギリギリの開発スケジュール 飛ばないメール 悲しみをもたらす500エラー
  • 78. Copyright © BizReach, Inc. All Right Reserved. リリース日に、メールが飛ばない! 78 12/9 午後リリース予定 午前中に最終チェックをしていたら、高確率でメール 配信に失敗することを確認 冷や汗が止まらない私。見かねたCTO竹内が自ら手を動 かし、メール配信処理を別スレッドにすることで対応 このとき、マルチスレッドという概念を知る
  • 80. Copyright © BizReach, Inc. All Right Reserved. 80 先輩に相談しまくりました!
  • 86. Copyright © BizReach, Inc. All Right Reserved. 2014/12/09 ニクリーチ2016リリース Java歴 8ヶ月
  • 87. Copyright © BizReach, Inc. All Right Reserved. したのですが
  • 89. Copyright © BizReach, Inc. All Right Reserved. リリース後の対応  学生の履歴書が登録できない 89  メールが配信されてない リリース前のテストの大切さを学んだ -> 登録学生からの問い合わせを受け発覚 -> バリデーションのバグ、急いで修正してリリース -> メールサーバにコネクションを貼る際に落ちている -> リトライ機能を実装して対応
  • 91. Copyright © BizReach, Inc. All Right Reserved. 現在のニクリーチ 91 お腹を空かせた学生のための肉食就活サイト 学生登録数: 約3,000人 企業登録数: 約80社
  • 92. Copyright © BizReach, Inc. All Right Reserved. ニクリーチのメディア掲載実績 92 新聞 とくダネ! スーパーニュース TV 日経MJ 日本経済新聞 WEB エンジニアtype キャリコネニュース 週アスPLUS
  • 93. Copyright © BizReach, Inc. All Right Reserved. Twitterでも話題に 93 #ニクリーチ
  • 94. Copyright © BizReach, Inc. All Right Reserved. 2ヶ月間でやったこと 94 設計 開発 マネジメント 進捗管理、進捗報告 コンテンツの依頼 プロダクト管理 画面デザイン、遷移 機能要件定義 DB設計、など 開発環境整備 DB構築 画面コーディング アプリコーディング インフラ構築 テスト リリース作業
  • 96. Copyright © BizReach, Inc. All Right Reserved. 96 ビズリーチという環境4
  • 97. Copyright © BizReach, Inc. All Right Reserved. エクセレントなエンジニア達 97 ■竹添直樹 Seasar、Apache Click、GitBucket、Scalatra などのオープンソース活動、JavaやScalaなどの、 数々の技術系書籍の執筆 ■久保雅彦 OSSプロダクトDBFluteの作者兼コミッター、 カンファレンスやイベントでの講演も多数有 新卒研修のJava講師も担当
  • 98. Copyright © BizReach, Inc. All Right Reserved. 著者のサインをいただきました!笑 98 竹添さん 島本さん Java逆引きレシピ
  • 99. Copyright © BizReach, Inc. All Right Reserved. 働く環境 99 オライリー本(日本語版)全巻完備
  • 100. Copyright © BizReach, Inc. All Right Reserved. 働く環境 100 ペアプログラミングスペース
  • 101. Copyright © BizReach, Inc. All Right Reserved. 働く環境 101 ハニカムオフィス
  • 102. Copyright © BizReach, Inc. All Right Reserved. 働く環境 102 ミーティングスペース
  • 103. Copyright © BizReach, Inc. All Right Reserved. 働く環境 103 サイレントルーム
  • 104. Copyright © BizReach, Inc. All Right Reserved. Javaで事業を作りたい エンジニアさん大募集! 株式会社ビズリーチでは
  • 105. Copyright © BizReach, Inc. All Right Reserved. ほぼ毎日 勉強会も開催! 株式会社ビズリーチでは
  • 106. Copyright © BizReach, Inc. All Right Reserved. 106 まとめ5
  • 107. Copyright © BizReach, Inc. All Right Reserved. まとめ  Javaまったくの初心者から1年間でサービスを作った  とはいえ先輩にいろいろ助けてもらった  事業会社の開発はとにかくスピード重視だった  スピード開発を実現する数々の道具を使った  サービス作りにはほんとうにたくさんの学びがあった 107
  • 108. Copyright © BizReach, Inc. All Right Reserved. 108 エンジニアとして大切にしたいこと 学ぶ環境 学ぶ気持ち 先輩エンジニアは偉大 チャレンジできる環境 目線の高さ 学ぶ姿勢を止めない 人は最強の教科書 みんなと競う
  • 109. Copyright © BizReach, Inc. All Right Reserved. これから学ぶ人へ 109 とにかく手を動かす 分からなければ人に聞く 成果が出るまでは努力 頭で考えることと、実際に作ることには大きな差がある とにかく手を動かしてプログラムを書くことに慣れること 学び始めはとにかく分からないことが多くていやになる そんなときは人に聞いてとにかく前に進むことが大切 始めはコンソールに文字を出力することから始まる 実際に動くものを作るのはそれなりに努力が必要
  • 110. Copyright © BizReach, Inc. All Right Reserved. まだまだ分からないことばかりだけど プログラムを書くの楽しい 現在 Java歴 1年

Editor's Notes

  • #9: もともとものづくりが好きだった ITに関する技術を身に付けたかった エンジニアに対する憧れがあった
  • #11: 1年間でどのようにJavaを学んだのか 事業会社の開発スタイルについて
  • #16: Java 17日, 正規表現5日SQL5日HTML/CSS3日JavaScript3日
  • #28: 【機能要件】 会員登録できること ログイン/ログアウトできること 140文字以下でつぶやけること タイムラインでつぶやきが閲覧できること 他の会員のフォローが出来ること 【非機能要件】 トランザクション処理がされること パスワードは暗号化してDBに保存されていること 基本的なセキュリティ対策が施されていること 落ちないこと わりといいかんじのデザインであること 【納品要件】 発表会にて、作ったTwitterアプリのお披露目をすること 発表会の6時間前までにビズリーチのエンジニア全員にサービスが利用できる状態にすること (AWSのサーバー上でサービス公開) Backlog の Git の hands-on リポジトリでソースコードが公開されてること (ハンズオンと同じ方が気軽に振り返りやすいため) 「何ができていて、何ができていないのか?」が明確であること (ソースコード上のTODOコメントが適切であること) 【特別要件】 何かしらひとつ、「会員がたくさん集まってくれるような施策」を入れること。 手段はなんでも、マーケティング的な要素でもいいし、それを意識した機能でもいいし、デザインでもOK。 発表会でそのストーリー (会員がどういう風に集まってくるのか?) を語ろう。
  • #30: DIコンテナSeasar WebフレームワークSAStruts O/RマッパーDBFlute データベースMySQL WebサーバーNginx (Tomcatと連携) WebコンテナTomcat (ローカルではJetty)