111
Copyright © BizReach, Inc. All Right Reserved. 株式会社ビズリーチ 荒井利晃 JJUG CCC 2015 Spring 新人エンジニア奮闘記 Java って ? から web サービスを公開するまで

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

Embed Size (px)

Citation preview

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年