View
4.148
Download
0
Category
Preview:
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.
自己紹介
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.
新卒研修の目標
13
一人でひとつのアプリを作りきる
Webサービスの作り方を一通り知る
エンジニアリングの楽しさを知る
わからないときの調べ方を知る
Copyright © BizReach, Inc. All Right Reserved.
新卒研修の内容
14
Webの基礎知識
フロントエンド
セキュリティ
プログラミング言語
サーバサイド
インフラ
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を使ったはじめてのアプリケーション開発
新卒エンジニア一人一つの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課題ではまったこと
基礎的な文法だけでは歯が立たない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.
初めての現場で完全に圧倒された
ソースの量がTwitter課題の比じゃない
ソースを読んでも何をしてるか分からない
そもそもサービスの仕様が分からない
42
ちょ、一体どれだけファイルあるんですか!
研修ではSAStruts、今度使うのは別のフレームワーク!
サービス上で使われる言葉、定義なんかもきちんと覚えないと
Copyright © BizReach, Inc. All Right Reserved.
2ヶ月でこなした業務
43
1ヶ月目
2ヶ月目
-> シナリオテストを行い、サービスのことを知った
-> 先輩にいろいろと聞きながら現場の開発を学んだ
-> はじめはサイトの文言変更などの軽い修正から行った
-> バグ修正などでいろいろな機能を触った
-> 「分からないことが分かる」ようになってきた
-> 営業さんからヒアリングを行い、新規機能を追加をした
こんなやりとりがありました
開発期間は2ヶ月、そして一人
Web開発未経験者がこれだけのものつくるとなると相当しんどいよ?
多分だいじょ…いや、やりきってみせます!
(内心ビビってた)
CTO 竹内 真
新卒わたし
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.
サービスの設計をする
52
どういう開発スタイル? そもそも何がしたい?
使い慣れたものはある?
学習コストはどれくらい?データベースは何使う?
フレームワークは何使う?
スピード重視で開発したい!
開発のスタイルは…
Copyright © BizReach, Inc. All Right Reserved.
トライ&エラーが多い
54
自分は新卒、何が正しい実装なのかわからない
そもそも業務自体がトライ&エラーの繰り返し
プログラムの改変が非常に多い (正解がない)
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.
ニクリーチで使用した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」で検索
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.
リリース後の対応
学生の履歴書が登録できない
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.
2ヶ月間でやったこと
94
設計 開発
マネジメント
進捗管理、進捗報告
コンテンツの依頼
プロダクト管理
画面デザイン、遷移
機能要件定義
DB設計、など
開発環境整備
DB構築
画面コーディング
アプリコーディング
インフラ構築
テスト
リリース作業
Copyright © BizReach, Inc. All Right Reserved.
エクセレントなエンジニア達
97
■竹添直樹Seasar、Apache Click、GitBucket、Scalatraなどのオープンソース活動、JavaやScalaなどの、数々の技術系書籍の執筆
■久保雅彦OSSプロダクトDBFluteの作者兼コミッター、カンファレンスやイベントでの講演も多数有新卒研修のJava講師も担当
Copyright © BizReach, Inc. All Right Reserved.
まとめ
Javaまったくの初心者から1年間でサービスを作った
とはいえ先輩にいろいろ助けてもらった
事業会社の開発はとにかくスピード重視だった
スピード開発を実現する数々の道具を使った
サービス作りにはほんとうにたくさんの学びがあった
107
Copyright © BizReach, Inc. All Right Reserved. 108
エンジニアとして大切にしたいこと
学ぶ環境 学ぶ気持ち
先輩エンジニアは偉大
チャレンジできる環境
目線の高さ
学ぶ姿勢を止めない
人は最強の教科書
みんなと競う
Copyright © BizReach, Inc. All Right Reserved.
これから学ぶ人へ
109
とにかく手を動かす
分からなければ人に聞く
成果が出るまでは努力
頭で考えることと、実際に作ることには大きな差があるとにかく手を動かしてプログラムを書くことに慣れること
学び始めはとにかく分からないことが多くていやになるそんなときは人に聞いてとにかく前に進むことが大切
始めはコンソールに文字を出力することから始まる実際に動くものを作るのはそれなりに努力が必要
Recommended