Weitere ähnliche Inhalte
Ähnlich wie JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド (20)
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
- 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
新卒研修とニクリーチ開発のお話
- 13. Copyright © BizReach, Inc. All Right Reserved.
新卒研修の目標
13
一人でひとつのアプリを作りきる
Webサービスの作り方を一通り知る
エンジニアリングの楽しさを知る
わからないときの調べ方を知る
- 14. Copyright © BizReach, Inc. All Right Reserved.
新卒研修の内容
14
Webの基礎知識
フロントエンド
セキュリティ
プログラミング言語
サーバサイド
インフラ
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
■分岐、繰り返しなどの基本的な処理
■型の扱い(基本型、配列やコレクションなど)
■クラスの概念
やはりクラスあたりから理解がしんどくなる…
がんばれ!
- 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
- ビルド、デプロイ
なにやら難しい言葉がたくさん出てきた…
- 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
- 42. Copyright © BizReach, Inc. All Right Reserved.
初めての現場で完全に圧倒された
ソースの量がTwitter課題の比じゃない
ソースを読んでも何をしてるか分からない
そもそもサービスの仕様が分からない
42
ちょ、一体どれだけ
ファイルあるんですか!
研修ではSAStruts、今度使うのは別
のフレームワーク!
サービス上で使われる言葉、定義な
んかもきちんと覚えないと
- 43. Copyright © BizReach, Inc. All Right Reserved.
2ヶ月でこなした業務
43
1ヶ月目
2ヶ月目
-> シナリオテストを行い、サービスのことを知った
-> 先輩にいろいろと聞きながら現場の開発を学んだ
-> はじめはサイトの文言変更などの軽い修正から行った
-> バグ修正などでいろいろな機能を触った
-> 「分からないことが分かる」ようになってきた
-> 営業さんからヒアリングを行い、新規機能を追加をした
- 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ヶ月
ニクリーチの主な機能要件
-> 学生はニクリーチに履歴書を登録できること
-> 企業は学生の履歴書を検索できること
-> 企業は学生をスカウトできること
-> 学生をスカウトしたらメールが飛ぶこと
- 52. Copyright © BizReach, Inc. All Right Reserved.
サービスの設計をする
52
どういう開発スタイル? そもそも何がしたい?
使い慣れたものはある?
学習コストはどれくらい?データベースは何使う?
フレームワークは何使う?
スピード重視で開発したい!
開発のスタイルは…
- 54. Copyright © BizReach, Inc. All Right Reserved.
トライ&エラーが多い
54
自分は新卒、何が正しい実装なのかわからない
そもそも業務自体がトライ&エラーの繰り返し
プログラムの改変が非常に多い (正解がない)
- 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に対する意識が向上した
- 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竹内が自ら手を動
かし、メール配信処理を別スレッドにすることで対応
このとき、マルチスレッドという概念を知る
- 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
- 94. Copyright © BizReach, Inc. All Right Reserved.
2ヶ月間でやったこと
94
設計 開発
マネジメント
進捗管理、進捗報告
コンテンツの依頼
プロダクト管理
画面デザイン、遷移
機能要件定義
DB設計、など
開発環境整備
DB構築
画面コーディング
アプリコーディング
インフラ構築
テスト
リリース作業
- 97. Copyright © BizReach, Inc. All Right Reserved.
エクセレントなエンジニア達
97
■竹添直樹
Seasar、Apache Click、GitBucket、Scalatra
などのオープンソース活動、JavaやScalaなどの、
数々の技術系書籍の執筆
■久保雅彦
OSSプロダクトDBFluteの作者兼コミッター、
カンファレンスやイベントでの講演も多数有
新卒研修のJava講師も担当
- 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
とにかく手を動かす
分からなければ人に聞く
成果が出るまでは努力
頭で考えることと、実際に作ることには大きな差がある
とにかく手を動かしてプログラムを書くことに慣れること
学び始めはとにかく分からないことが多くていやになる
そんなときは人に聞いてとにかく前に進むことが大切
始めはコンソールに文字を出力することから始まる
実際に動くものを作るのはそれなりに努力が必要
Hinweis der Redaktion
- もともとものづくりが好きだった
ITに関する技術を身に付けたかった
エンジニアに対する憧れがあった
- 1年間でどのようにJavaを学んだのか
事業会社の開発スタイルについて
- Java 17日, 正規表現5日SQL5日HTML/CSS3日JavaScript3日
- 【機能要件】
会員登録できること
ログイン/ログアウトできること
140文字以下でつぶやけること
タイムラインでつぶやきが閲覧できること
他の会員のフォローが出来ること
【非機能要件】
トランザクション処理がされること
パスワードは暗号化してDBに保存されていること
基本的なセキュリティ対策が施されていること
落ちないこと
わりといいかんじのデザインであること
【納品要件】
発表会にて、作ったTwitterアプリのお披露目をすること
発表会の6時間前までにビズリーチのエンジニア全員にサービスが利用できる状態にすること (AWSのサーバー上でサービス公開)
Backlog の Git の hands-on リポジトリでソースコードが公開されてること (ハンズオンと同じ方が気軽に振り返りやすいため)
「何ができていて、何ができていないのか?」が明確であること (ソースコード上のTODOコメントが適切であること)
【特別要件】
何かしらひとつ、「会員がたくさん集まってくれるような施策」を入れること。
手段はなんでも、マーケティング的な要素でもいいし、それを意識した機能でもいいし、デザインでもOK。
発表会でそのストーリー (会員がどういう風に集まってくるのか?) を語ろう。
- DIコンテナSeasar WebフレームワークSAStruts O/RマッパーDBFlute データベースMySQL WebサーバーNginx (Tomcatと連携) WebコンテナTomcat (ローカルではJetty)