webアプリケーションのような何かを（大体）作って反省した事とこれから

# はじめに
これは今回得られたものを忘れないように備忘録として作成したものです。
下記にあるように経歴や力はなく、何か技術的なことを話しているわけではありませんので御理解の上でお進みください。
# 軽く自己紹介
社会人2年目となります。
一応新卒で入社した会社ではプログラマとして入ったのでかれこれ1年半ですが、コードに関わり始めたのは今年の4月〜現在なので…
`研修3ヶ月　＋　現場経験6ヶ月　＝　ほぼ1年`

ということで、その程度の経験＆力を持った人の記事ということをご理解ください。

# 何故これを作り始めたか
もちろん勉強のためというのと、手っ取り早く単価を上げる方法としてなにか一つ物を作って客先に見せられればと思い制作を始めた次第です。（他には配属された現場で javascript を学んだので使ってみたかったっていうのもあります）

## どんなものを作ったか
いわゆる掲示板のようなものです。
画面は以下のとおりです。
- 質問一覧画面
- 質問詳細画面
- 質問編集画面
- 質問投稿画面
**質問一覧画面**
---
![質問一覧.png](https://qiita-image-store.s3.amazonaws.com/0/269525/6fb170f5-a6df-b2d4-7a27-d04e1473b416.png)
**質問詳細画面**
---
![質問詳細.png](https://qiita-image-store.s3.amazonaws.com/0/269525/3d77f172-d241-5aa6-969c-db67dafb86a3.png)
![質問詳細2.png](https://qiita-image-store.s3.amazonaws.com/0/269525/72c30360-1b59-b461-1898-44c756bd88f8.png)
**質問編集画面**
---
![質問編集.png](https://qiita-image-store.s3.amazonaws.com/0/269525/e46d1ef7-803f-c6da-48ce-5763acd49941.png)
**質問登録画面**
---
![質問登録.png](https://qiita-image-store.s3.amazonaws.com/0/269525/4232b30e-616b-3c52-c067-ea155a3b38c2.png)

javascript で実装した機能
- 編集画面の遷移や登録時にポップアップで再確認
- 文字入力フォームにリアルタイムで文字カウントの増減

javascript は良いとして仕様などは大体研修で作るような内容ですね…（ただ私の時の研修では実習時に使用したコードをコピペしまくりだったのでイチからというのは良い経験でした）

一応当初想定していた機能は実装できており、残るは入力チェックの機能と Exception 発生時の処理ぐらいですが…タイトルにある通り一旦このアプリケーションはこれで完成ということにしました。理由は後述。

# 実際にアプリケーションを作って反省したこと
ようやく本題となります。
目次は以下の通りです。
**1. 設計の重要性
2. 記録を残すことの大切さ
3. 下地がないことにより起こりうる事象**

では順番に解説していきます。

## 設計の重要性
**設計、ホント大事**
いやマジで。つくづく思い知らされました。
しっかり想定していなかったせいでことごとく仕様の変更が発生。
実は今回作成したアプリケーションは会社が個人で学習できるように出している課題（課題と言っても必ずやれ、というわけではない）でして、ある程度の方向性は決まっているんですね。とはいえ細かいところは一切記載されておらず、ただ「こんなもの作ってみ」程度の仕様書でした。

ただ画面イメージなどは貼ってあり、「これくらいならちゃちゃっとできるでしょ」と見切り発車してみるとさあ大変。
・**そういえばここ想定して書かなきゃじゃん！？**
・**やべえDBのカラム少なくとももう一個必要じゃないか…**
・**あ、これ共通化できる処理や…このままじゃ見た目悪いし書き直すか…**
こんなことが何度も起きる始末。何度も手戻りをしました。

そうこうしているうちに時間が無駄に消えていき、次第にモチベも続かなくなり…
当たり前のことですが事前に考えるというのは本当に重要なことだと気付かされました。ほんの小さなアプリケーションだといえど、私が作っているのは**システム**でそんな単純なものではないと。

次回なにか作るときは必ず設計を行ってから（あるいは仕様を決めてから）取り掛かりたいと思います。

## 記録を残すことの大切さ
設計と似たようなことですが別枠で。
私どうにも物覚えが悪い方でして、どのサーブレットがどの画面を返すのか、等どうしても忘れてしまうのです（開発に取り掛かるのに間が空いてしまうなどもありますが）
画面が少ないのでその分サーブレット等も大した数はないのですが、逆にそう侮ることにより記録を残さず、次回 ecripse を開いたときに「あれ？」となってしまうことが多発してしまっていました。

最初は**テーブル情報すら記録に残しておらず**、一回一回 A5M2 開いて確認すりゃいいやと思っていました。

前述した通り忘れやすい私なので毎回毎回ソースを確認して、DB 接続を行って中身を見て、ということをやっていたのですが少し経ったあとに**「そもそも時間の無駄じゃ？」**と気づくことができました。

まあこれらも設計をしっかりしていれば記録にも残りますし、結局設計をちゃんとやろうという話なのですが…

## 下地がないことにより起こりうる事象
まず今回このアプリケーションを作り始めた時の私のもつ知識は以下のような感じです。
**- jsp&サーブレット**
→　研修もしくは現場で見た程度。研修とはいっても1年前なのでほぼ覚えてない。
**- 環境設定（DB）**
→　DB接続は研修で資料を見ながらやった程度。自分であれこれやったことがない。
**- 環境設定（その他）**
→　クラスパスって？（実際未だによくわからない）jsp を返すためのパスはどこから始めるのか？（他諸々）

**もちろんこんな状態では躓くばかりです。**
なんだかんだ言いつつも実装自体は日々ガツガツ書いていれば1ヶ月と少しくらいでかけたと思うのですが、躓いてばかりだとモチベも下がっていきますし、時間もどんどん奪われていきます。その結果製作期間は大体3ヶ月ほど（というか完成もしてないし）

そんなこんなでとにかく時間とモチベが奪われるということがとても痛手でした。研修で触ったところなのでしっかり復習をしたうえで取り掛かっていればここまで時間はかからなかっただろうと思います。

# でもやっぱり制作してみてよかったこと
もちろん無駄な時間は多くありました。
しかし悪いところがあったように良いことも多く見つけられたように思います。

**1. 自分の足りないところ＆優先すべきことがわかった
2. もう一歩進めて良いところがわかった
3. Qiita や Teratail, 個人ブログなどのサイトを巡り調べることで出会える情報があった**

##　自分の足りないところ＆優先すべきことがわかった
これはもう反省点で書いたところですね。
こうして何かものを作ることをしなかったら理解したのはまだ先だったかもしれません。そう思うと今回制作に取り掛かってみてよかったと感じています。

まず今私が優先すべきことはやはり**下地をつけること**であると考えました。
もちろん制作をすることによって気づけることもあると話したばかりではありますがそれでもまずは十分な知識をつけ、余裕ができたらで良いのではないかと。

途中でアプリケーションの制作を投げたのも、今作っているものにこれ以上時間を取られるべきでないと考えたからですね。理由は以下のとおりです。
**- 制作を優先するあまりインプットができていなかった（本買ったのに積んでる…）
- 現場で使われている知識の学習を怠ったため足を引っ張っている。**

二つ目なんかは最低ですね…、新人だから許されると甘えがあったのかもしれません。今の現場が今月で終了になるので、次の現場に配属後使われている知識の学習がしたいからというのもあります。

何にせよ自分本意なところもあったと自覚していますので、今後はその改善と、その時その時にやるべきことをしっかりとやっていきたいと思います。

## もう一歩進めていいところがわかった
こちらも反省点であげたところと似たようなものとなります。
今回制作にあたって詰まったところがいくつかありましたが、そうじゃないところもありました。
**- java(サーバー側の製造)
- javascript の楽しさ**

##### java(サーバー側の製造)
今回いくつもの場所で躓いたものの、サーバー側の製造においてはほぼほぼ詰まるようなことはありませんでした。
強いて言えば SQL でしょうか。それ以外のクラス構成など、**この仕様を取り入れる場合どんなものが必要であるか**というのはなんとなく想定ができていて、とても気持ちよく書くことができました（というかロジック書くのが楽しいと思えるまで）

##### javascript の楽しさ
いや正直現場に配属され初めて触ったときは**「なんだこの言語わかりづれー」**とか思っていたのですが、最近では制作していたアプリに **javascript を使ってなにか面白い機能がつけられないかなー**と考えるようになりました。
とはいえ今でもイマイチ理解できない、というか大量に書かれていると何がなんだかわからなくなってしまうことは全然あるのですが…（現場のソースとか…）
でも面白いと感じることができたのは大きいことではないかと思っています。

上記2つの言語について、楽しむことができたとはいえまだまだであると自覚しています、が**楽しいと思えるなら勉強も進む**だろうと思うので直近ではこの2つのどちらかの学習を進めていきたいと思っていますし、レベルアップしていけそうだと思えたのはよかったと思います。

# まとめとこれから
今回は何より**自覚**することができたのが一番大きいと感じています。
どれだけ人に言われても自らの状況を自覚することができないと前には進めないものですし、それがわかっただけでも今回制作に取り掛かったのは無駄ではなかったのかなと思います。

今後は**インプットを積極的に行なって、整理がついたら Qiita にアウトプットを行う。**そのルーチンをうまく回していきたいと思っています。

**私が目指したいのは稼げるエンジニアです。**
正直今のままでは、というのは現実的に見ればそのとおりですし自分でも十二分にわかっていますが、その目標だけは常に頭に入れて日々精進していきたいと思っております。

ここまで読んでいただきありがとうございました。


2019/07/16 追記
全部書ききれていない上に自信満々で恥ずかしい…若気の至りってやつなのか…
とはいえ削除するのもなんだしなぁ…